rev 4308 - in trunk/packages/kdepim/debian: . man patches po
Christopher Martin
chrsmrtn at costa.debian.org
Mon Aug 7 22:47:06 UTC 2006
Author: chrsmrtn
Date: 2006-08-07 22:47:01 +0000 (Mon, 07 Aug 2006)
New Revision: 4308
Added:
trunk/packages/kdepim/debian/patches/01_kdepim_branch_20060628.diff
trunk/packages/kdepim/debian/patches/02_fix_admin_cvs.diff
trunk/packages/kdepim/debian/patches/14_kmail_filter_icons.diff
trunk/packages/kdepim/debian/patches/15_groupwise_alpha.diff
trunk/packages/kdepim/debian/po/cs.po
trunk/packages/kdepim/debian/po/eu.po
trunk/packages/kdepim/debian/po/gl.po
trunk/packages/kdepim/debian/po/lt.po
trunk/packages/kdepim/debian/po/ru.po
trunk/packages/kdepim/debian/po/sv.po
Removed:
trunk/packages/kdepim/debian/patches/01_kdepim_branch_20051209.diff
Modified:
trunk/packages/kdepim/debian/changelog
trunk/packages/kdepim/debian/control
trunk/packages/kdepim/debian/kdepim-dev.install
trunk/packages/kdepim/debian/kdepim-kresources.install
trunk/packages/kdepim/debian/kmail.install
trunk/packages/kdepim/debian/libkdepim1a.install
trunk/packages/kdepim/debian/man/akregator.man
trunk/packages/kdepim/debian/rules
Log:
Massive sync with Sid.
Modified: trunk/packages/kdepim/debian/changelog
===================================================================
--- trunk/packages/kdepim/debian/changelog 2006-08-07 22:42:46 UTC (rev 4307)
+++ trunk/packages/kdepim/debian/changelog 2006-08-07 22:47:01 UTC (rev 4308)
@@ -1,19 +1,85 @@
-kdepim (4:3.5.0-3) UNRELEASED; urgency=low
+kdepim (4:3.5.3-3) unstable; urgency=high
- +++ Changes by Luk Claes:
+ * Fix FTBFS due to naive autoconf check. Closes: #378163.
+ (using patch from kubuntu, thanks to J. Riddell).
+ * Urgency set to high due to that problem.
- * Add Italian debconf translation (thanks to Luca Monducci).
- (Closes:#349343).
+ -- Pierre Habouzit <madcoder at debian.org> Sun, 16 Jul 2006 16:03:06 +0200
- +++ Changes by Pierre Habouzit:
+kdepim (4:3.5.3-2) unstable; urgency=low
- * Update debian/control for kfreebsd-* ports.
- * Remove DEB_DH_SHLIBDEPS_ARGS_$(cdbs_curpkg) hack, now handled by cdbs.
- + Causes a FTBFS with cdbs >= 0.4.37.
- + Update cdbs build-dependency accordingly.
+ * Rebuild against libgnokii3-dev and libbluetooth2-dev.
+ * New patch 15_groupwise_alpha.diff: fix FTBFS on alpha (again).
+ Closes: #353922.
- -- Pierre Habouzit <madcoder at debian.org> Wed, 29 Mar 2006 16:21:22 +0200
+ -- Daniel Schepler <schepler at debian.org> Sat, 1 Jul 2006 11:23:08 -0400
+kdepim (4:3.5.3-1) unstable; urgency=low
+
+ * New upstream release.
+ * Include fixes on branch up to svn revision 555847.
+ * New debconf translations:
+ + Galician. Closes: #361209.
+ + Russian. Closes: #367207.
+ + Lithuanian. Closes: #374447.
+ + Basque. Closes: #374829.
+ * Rework 14_kmail_filter_icons.diff.
+
+ -- Daniel Schepler <schepler at debian.org> Wed, 28 Jun 2006 11:58:50 -0400
+
+kdepim (4:3.5.2-1) unstable; urgency=low
+
+ * New upstream release.
+ * Remove package-specific DEB_DH_SHLIBDEPS_ARGS_pkg hack, now that
+ cdbs includes it, and Build-Depend on the appropriate version of
+ cdbs.
+
+ -- Daniel Schepler <schepler at debian.org> Wed, 29 Mar 2006 19:46:16 +0200
+
+kdepim (4:3.5.1-2) unstable; urgency=medium
+
+ * Update to SVN branches/KDE/3.5, up to revision 518856.
+ + Fixes a FTBFS on alpha. Closes: #353922.
+ + Adjust *.install files to account for disabled blogging plugin.
+ * New debconf translations:
+ + Czech. Closes: #289455.
+ + Swedish. Closes: #333092.
+ + Italian. Closes: #349343.
+ * Set urgency=medium for the RC bug fix on alpha.
+
+ -- Daniel Schepler <schepler at debian.org> Wed, 15 Mar 2006 21:26:09 +0100
+
+kdepim (4:3.5.1-1) unstable; urgency=low
+
+ * New upstream release.
+
+ -- Daniel Schepler <schepler at debian.org> Wed, 1 Feb 2006 10:17:03 +0100
+
+kdepim (4:3.5.0-5) unstable; urgency=low
+
+ * New package: kdepim-dbg, to make debugging symbols available.
+ * Add Build-Depends on libboost-dev for indexlib.
+
+ -- Daniel Schepler <schepler at debian.org> Tue, 17 Jan 2006 13:15:38 +0100
+
+kdepim (4:3.5.0-4) unstable; urgency=low
+
+ * Upload to unstable.
+ * No longer build with g++-3.4 on any architecture, since g++-4.0
+ should be fixed.
+ * Update to SVN branches/KDE/3.5, up to revision 496049.
+ + Bump shlibs version on libkcal2b.
+
+ -- Daniel Schepler <schepler at debian.org> Mon, 9 Jan 2006 21:06:19 +0100
+
+kdepim (4:3.5.0-3) experimental; urgency=low
+
+ * Upload to experimental.
+ * New patch 14_kmail_filter_icons.diff: update user config files to
+ reflect changed icon names for spam/ham filters.
+
+ -- Daniel Schepler <schepler at debian.org> Mon, 19 Dec 2005 22:10:28 +0100
+
kdepim (4:3.5.0-2) alioth; urgency=medium
* Update from SVN 3.5 branch.
Modified: trunk/packages/kdepim/debian/control
===================================================================
--- trunk/packages/kdepim/debian/control 2006-08-07 22:42:46 UTC (rev 4307)
+++ trunk/packages/kdepim/debian/control 2006-08-07 22:47:01 UTC (rev 4308)
@@ -3,7 +3,7 @@
Priority: optional
Maintainer: Debian Qt/KDE Maintainers <debian-qt-kde at lists.debian.org>
Uploaders: Daniel Schepler <schepler at debian.org>
-Build-Depends: g++-3.4 [arm m68k hppa], autoconf, automake1.9, bison, byacc, bzip2, cdbs (>= 0.4.39-0.1), debhelper (>= 5), flex, gawk, gettext, groff-base, kdelibs4-dev (>= 4:3.5.0), libbluetooth1-dev [!kfreebsd-i386 !kfreebsd-amd64], libgnokii2-dev (>= 0.6.5), libgpgme11-dev, liblockdev1-dev, libmal-dev, libpisock-dev, libreadline5-dev, libsasl2-dev, libssl-dev, libtool (>= 1.5), libxpm-dev, libxss-dev, sharutils, texinfo
+Build-Depends: autoconf, automake1.9, bison, byacc, bzip2, cdbs (>= 0.4.43), debhelper (>= 5), flex, gawk, gettext, groff-base, kdelibs4-dev (>= 4:3.5.3), libbluetooth2-dev, libboost-dev (>= 1.33.1), libgnokii3-dev, libgpgme11-dev, liblockdev1-dev, libmal-dev, libpisock-dev, libreadline5-dev, libsasl2-dev, libssl-dev, libtool (>= 1.5), libxpm-dev, libxss-dev, sharutils, texinfo
Build-Depends-Indep: doxygen, graphviz, gsfonts-x11, qt3-doc, kdelibs4-doc
Build-Conflicts: libkleopatra0-dev
Standards-Version: 3.6.2
@@ -20,6 +20,15 @@
This is an empty package which depends on the current version of every
application in the kdepim distribution.
+Package: kdepim-dbg
+Priority: extra
+Section: libdevel
+Architecture: any
+Description: debugging symbols for kdepim
+ This package contains the debugging symbols associated with kdepim.
+ They will automatically be used by gdb for debugging kdepim-related
+ issues.
+
Package: kdepim-dev
Section: devel
Architecture: any
Modified: trunk/packages/kdepim/debian/kdepim-dev.install
===================================================================
--- trunk/packages/kdepim/debian/kdepim-dev.install 2006-08-07 22:42:46 UTC (rev 4307)
+++ trunk/packages/kdepim/debian/kdepim-dev.install 2006-08-07 22:47:01 UTC (rev 4308)
@@ -31,8 +31,6 @@
/usr/lib/libkaddressbook.so
/usr/lib/libkcalkolab.la
/usr/lib/libkcalkolab.so
-/usr/lib/libkcal_blogging.la
-/usr/lib/libkcal_blogging.so
/usr/lib/libkcal_groupdav.la
/usr/lib/libkcal_groupdav.so
/usr/lib/libkcal_groupwise.la
Modified: trunk/packages/kdepim/debian/kdepim-kresources.install
===================================================================
--- trunk/packages/kdepim/debian/kdepim-kresources.install 2006-08-07 22:42:46 UTC (rev 4307)
+++ trunk/packages/kdepim/debian/kdepim-kresources.install 2006-08-07 22:47:01 UTC (rev 4308)
@@ -1,7 +1,5 @@
/usr/lib/kde3/kabc_*.la
/usr/lib/kde3/kabc_*.so
-/usr/lib/kde3/kcal_blogging.la
-/usr/lib/kde3/kcal_blogging.so
/usr/lib/kde3/kcal_groupdav.la
/usr/lib/kde3/kcal_groupdav.so
/usr/lib/kde3/kcal_groupwise.la
@@ -34,8 +32,6 @@
/usr/lib/libkabc_xmlrpc.so.1.0.0
/usr/lib/libkcalkolab.so.0
/usr/lib/libkcalkolab.so.0.0.0
-/usr/lib/libkcal_blogging.so.1
-/usr/lib/libkcal_blogging.so.1.0.0
/usr/lib/libkcal_groupdav.so.1
/usr/lib/libkcal_groupdav.so.1.0.0
/usr/lib/libkcal_groupwise.so.1
@@ -66,7 +62,6 @@
/usr/share/services/kresources/kabc/kabc_slox.desktop
/usr/share/services/kresources/kabc/kabc_xmlrpc.desktop
/usr/share/services/kresources/kabc/kolab.desktop
-/usr/share/services/kresources/kcal/blogging.desktop
/usr/share/services/kresources/kcal/exchange.desktop
/usr/share/services/kresources/kcal/kcal_groupdav.desktop
/usr/share/services/kresources/kcal/kcal_groupwise.desktop
Modified: trunk/packages/kdepim/debian/kmail.install
===================================================================
--- trunk/packages/kdepim/debian/kmail.install 2006-08-07 22:42:46 UTC (rev 4307)
+++ trunk/packages/kdepim/debian/kmail.install 2006-08-07 22:47:01 UTC (rev 4308)
@@ -31,6 +31,7 @@
/usr/share/apps/kconf_update/kmail-3.3b1-misc.pl
/usr/share/apps/kconf_update/kmail-3.4-misc.pl
/usr/share/apps/kconf_update/kmail-3.4.1-update-status-filters.pl
+/usr/share/apps/kconf_update/kmail-3.5-filter-icons.pl
/usr/share/apps/kconf_update/kmail-pgpidentity.pl
/usr/share/apps/kconf_update/kmail-upd-identities.pl
/usr/share/apps/kconf_update/kmail.upd
Modified: trunk/packages/kdepim/debian/libkdepim1a.install
===================================================================
--- trunk/packages/kdepim/debian/libkdepim1a.install 2006-08-07 22:42:46 UTC (rev 4307)
+++ trunk/packages/kdepim/debian/libkdepim1a.install 2006-08-07 22:47:01 UTC (rev 4308)
@@ -8,4 +8,4 @@
/usr/share/apps/libkdepim
/usr/share/config.kcfg/pimemoticons.kcfg
/usr/share/icons/crystalsvg/22x22/actions/button_fewer.png
-/usr/share/icons/crystalsvg/22x22/actions/button_more.png
\ No newline at end of file
+/usr/share/icons/crystalsvg/22x22/actions/button_more.png
Modified: trunk/packages/kdepim/debian/man/akregator.man
===================================================================
--- trunk/packages/kdepim/debian/man/akregator.man 2006-08-07 22:42:46 UTC (rev 4307)
+++ trunk/packages/kdepim/debian/man/akregator.man 2006-08-07 22:47:01 UTC (rev 4308)
@@ -1,12 +1,16 @@
.TH AKREGATOR 1
.SH NAME
-akregator \- a KDE RSS Aggregator
+akregator \- Personal organizer for KDE
.SH SYNOPSIS
.B akregator
.I [Qt-options] [KDE-options] [options]
.SH DESCRIPTION
.B Akregator
-is a KDE RSS aggregator with great look and feel.
+is a calendar application for KDE. You can schedule appointments, events,
+and to-do tasks. Akregator will remind you about pending tasks, and help
+you keep your schedule. It supports event categories, highlighting
+according to category, numerous options for generating repeated events,
+emerging group scheduling support, PalmPilot synchronization, and much more.
.SH PROGRAM OPTIONS
.TP
.B -a, --addfeed \fI<url>\fB
Deleted: trunk/packages/kdepim/debian/patches/01_kdepim_branch_20051209.diff
Added: trunk/packages/kdepim/debian/patches/01_kdepim_branch_20060628.diff
===================================================================
--- trunk/packages/kdepim/debian/patches/01_kdepim_branch_20060628.diff 2006-08-07 22:42:46 UTC (rev 4307)
+++ trunk/packages/kdepim/debian/patches/01_kdepim_branch_20060628.diff 2006-08-07 22:47:01 UTC (rev 4308)
@@ -0,0 +1,15505 @@
+Index: akregator/ChangeLog
+===================================================================
+--- akregator/ChangeLog (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ akregator/ChangeLog (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -2,6 +2,15 @@
+ ===================
+ (c) 2004-2006 the Akregator authors.
+
++Changes after 1.2.3:
++-----------------------------
++
++Bug fixes:
++
++ 2006/06/25 Fix context menus in browser tab, show appriopriate entries when
++ text is selected (copy action) or the cursor is over a link
++ (#121957) -fo
++
+ Changes after 1.2.2:
+ -----------------------------
+
+Index: akregator/src/mk4storage/metakit/include/mk4.h
+===================================================================
+--- akregator/src/mk4storage/metakit/include/mk4.h (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ akregator/src/mk4storage/metakit/include/mk4.h (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -100,7 +100,7 @@
+
+ // and here's the other end of the scale...
+ #if !defined (_WIN32) && !defined (q4_LONG64)
+-#if defined (_PA_RISC2_0) || defined (__powerpc64__) || defined(__sparcv9) || \
++#if (defined (_PA_RISC2_0) && defined(__hpux)) || defined (__powerpc64__) || defined(__sparcv9) || \
+ defined (__x86_64__) || defined (__s390x__) || defined (__alpha) || \
+ (defined (__ia64) && (!defined (__HP_aCC) || defined(__LP64__)))
+ #define q4_LONG64 1
+Index: akregator/src/mk4storage/akregator_mk4storage_plugin.desktop
+===================================================================
+--- akregator/src/mk4storage/akregator_mk4storage_plugin.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ akregator/src/mk4storage/akregator_mk4storage_plugin.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -32,6 +32,7 @@
+ Name[sv]=Metakit lagringsgränssnitt
+ Name[uk]=ÐÑогÑама збеÑÑÐ³Ð°Ð½Ð½Ñ Metakit
+ Name[zh_CN]=Metakit åå¨å端
++Name[zh_TW]=Metakit å²åå¾ç«¯ä»é¢
+ X-KDE-Library=libakregator_mk4storage_plugin
+ Comment=Plugin for Akregator
+ Comment[bg]=ÐÑиÑÑавка за Akregator
+@@ -62,6 +63,7 @@
+ Comment[pt]='Plugin' para o Akregator
+ Comment[pt_BR]=Plugin para o Akregator
+ Comment[ru]=ÐодÑÐ»Ñ Ð´Ð»Ñ Akregator
++Comment[sk]=Modul pre Akregator
+ Comment[sl]=Vstavek za Akregator
+ Comment[sr]=ÐÑикÑÑÑак за Akregator
+ Comment[sr at Latn]=PrikljuÄak za Akregator
+@@ -70,6 +72,7 @@
+ Comment[uk]=ÐÑÑлок Ð´Ð»Ñ Akregator
+ Comment[uz]=Akregator ÑÑÑн плагин
+ Comment[zh_CN]=Akregator æä»¶
++Comment[zh_TW]=Akregator 夿ç¨å¼
+ ServiceTypes=Akregator/Plugin
+
+ X-KDE-akregator-plugintype=storage
+Index: akregator/src/pageviewer.cpp
+===================================================================
+--- akregator/src/pageviewer.cpp (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ akregator/src/pageviewer.cpp (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -411,9 +411,12 @@
+ {
+ m_url = kurl;
+ QString url = kurl.url(); // maximal url confusion
+-
+- const bool isLink = (kpf & KParts::BrowserExtension::ShowNavigationItems) == 0;
+-
++
++ const bool showReload = (kpf & KParts::BrowserExtension::ShowReload) != 0;
++ const bool showNavigationItems = (kpf & KParts::BrowserExtension::ShowNavigationItems) != 0;
++ const bool isLink = (kpf & (KParts::BrowserExtension::ShowNavigationItems | KParts::BrowserExtension::ShowTextSelectionItems)) == 0;
++ const bool isSelection = (kpf & KParts::BrowserExtension::ShowTextSelectionItems) != 0;
++
+ KPopupMenu popup(this->widget());
+
+ int idNewWindow = -2;
+@@ -434,15 +437,24 @@
+ }
+ else // we are not on a link
+ {
++ if (showNavigationItems)
++ {
++ d->backAction->plug( &popup );
++ d->forwardAction->plug( &popup );
++ }
+
+- d->backAction->plug( &popup );
+- d->forwardAction->plug( &popup );
+- d->reloadAction->plug(&popup);
++ if (showReload)
++ d->reloadAction->plug(&popup);
++
+ d->stopAction->plug(&popup);
+-
++
+ popup.insertSeparator();
+- action("viewer_copy")->plug(&popup);
+- popup.insertSeparator();
++
++ if (isSelection)
++ {
++ action("viewer_copy")->plug(&popup);
++ popup.insertSeparator();
++ }
+
+ KAction* incFontAction = this->action("incFontSizes");
+ KAction* decFontAction = this->action("decFontSizes");
+Index: akregator/src/viewer.cpp
+===================================================================
+--- akregator/src/viewer.cpp (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ akregator/src/viewer.cpp (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -170,7 +170,7 @@
+
+ void Viewer::slotPopupMenu(KXMLGUIClient*, const QPoint& p, const KURL& kurl, const KParts::URLArgs&, KParts::BrowserExtension::PopupFlags kpf, mode_t)
+ {
+- const bool isLink = (kpf & KParts::BrowserExtension::ShowNavigationItems) == 0;
++ const bool isLink = (kpf & (KParts::BrowserExtension::ShowNavigationItems | KParts::BrowserExtension::ShowTextSelectionItems)) == 0;
+ const bool isSelection = (kpf & KParts::BrowserExtension::ShowTextSelectionItems) != 0;
+
+ QString url = kurl.url();
+Index: akregator/src/akregator_plugin.desktop
+===================================================================
+--- akregator/src/akregator_plugin.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ akregator/src/akregator_plugin.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -30,6 +30,7 @@
+ Comment[pt]='Plugin' para o Akregator
+ Comment[pt_BR]=Plugin para o Akregator
+ Comment[ru]=ÐодÑÐ»Ñ Ð´Ð»Ñ Akregator
++Comment[sk]=Modul pre Akregator
+ Comment[sl]=Vstavek za Akregator
+ Comment[sr]=ÐÑикÑÑÑак за Akregator
+ Comment[sr at Latn]=PrikljuÄak za Akregator
+@@ -38,6 +39,7 @@
+ Comment[uk]=ÐÑÑлок Ð´Ð»Ñ Akregator
+ Comment[uz]=Akregator ÑÑÑн плагин
+ Comment[zh_CN]=Akregator æä»¶
++Comment[zh_TW]=Akregator 夿ç¨å¼
+
+
+ # Type of plugin, e.g. "storage".
+Index: akregator/src/akregator.desktop
+===================================================================
+--- akregator/src/akregator.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ akregator/src/akregator.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -11,7 +11,7 @@
+ GenericName[cs]=Ätenà RSS kanálů
+ GenericName[da]=RSS-Kildelæser
+ GenericName[de]=Anzeige von RSS Nachrichtenquellen
+-GenericName[el]=ÎναγνÏÏÏÎ·Ï ÎµÎ¹ÏÏοÏν RSS
++GenericName[el]=ÎναγνÏÏÏÎ·Ï ÏοÏν RSS
+ GenericName[es]=Lector de orÃgenes RSS
+ GenericName[et]=RSS-kanalite lugemisvahend
+ GenericName[eu]=RSS iturri Irakurlea
+@@ -33,6 +33,7 @@
+ GenericName[pt]=Leitor de Fontes RSS
+ GenericName[pt_BR]=Leitor de Fontes de NotÃcias RSS
+ GenericName[ru]=ЧÑение Ð»ÐµÐ½Ñ Ð½Ð¾Ð²Ð¾ÑÑей
++GenericName[sk]=PrehliadaÄ RSS kÅmitok
+ GenericName[sl]=Bralnik virov RSS
+ GenericName[sr]=ЧиÑÐ°Ñ RSS довода
+ GenericName[sr at Latn]=ÄitaÄ RSS dovoda
+@@ -42,6 +43,7 @@
+ GenericName[uk]=ÐÑогÑама Ð´Ð»Ñ ÑиÑÐ°Ð½Ð½Ñ Ð¿Ð¾Ð´Ð°Ñ RSS
+ GenericName[uz]=RSS ÑнгиликлаÑни ÑÒÑвÑи
+ GenericName[zh_CN]=RSS ç§åé
读å¨
++GenericName[zh_TW]=RSS Feed é±è®å¨
+ Comment=An RSS Aggregator for KDE
+ Comment[bg]=ЧеÑÐµÑ Ð½Ð° новоÑÑи вÑв ÑоÑÐ¼Ð°Ñ RSS
+ Comment[ca]=Un lector RSS per KDE
+@@ -69,6 +71,7 @@
+ Comment[pt]=Um Agregador RSS do KDE
+ Comment[pt_BR]=Um Agregador RSS para o KDE
+ Comment[ru]=ЧÑение Ð»ÐµÐ½Ñ Ð½Ð¾Ð²Ð¾ÑÑей RSS
++Comment[sk]=ZhromažÄovaÄ RSS pre KDE
+ Comment[sl]=Zbiralnik RSS za KDE
+ Comment[sr]=СакÑпÑÐ°Ñ RSS довода за KDE
+ Comment[sr at Latn]=SakupljaÄ RSS dovoda za KDE
+@@ -78,6 +81,7 @@
+ Comment[uk]=ÐгÑегаÑÐ¾Ñ RSS Ð´Ð»Ñ KDE
+ Comment[uz]=KDE ÑÑÑн RSS ÑнгиликлаÑни ÑÒÑвÑи
+ Comment[zh_CN]=KDE RSS æ°é»æ¶éå¨
++Comment[zh_TW]=KDE ç RSS æ¶éå¨
+ Terminal=false
+ Categories=Qt;KDE;Network;
+ X-DCOP-ServiceType=Unique
+Index: akregator/src/eventsrc
+===================================================================
+--- akregator/src/eventsrc (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ akregator/src/eventsrc (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -11,7 +11,7 @@
+ Name[cs]=PÅidán kanál
+ Name[da]=Kilde tilføjet
+ Name[de]=Nachrichtenquelle hinzugefügt
+-Name[el]=Î ÏοÏÏÎθηκε ειÏÏοή
++Name[el]=Î ÏοÏÏÎθηκε Ïοή
+ Name[es]=Origen añadido
+ Name[et]=Kanal lisatud
+ Name[eu]=Iturria gehituta
+@@ -34,6 +34,7 @@
+ Name[pt]=Fonte adicionada
+ Name[pt_BR]=Fonte de notÃcias adicionada
+ Name[ru]=ÐенÑа новоÑÑей добавлена
++Name[sk]=KÅmitko pridané
+ Name[sl]=Vir je dodan
+ Name[sr]=Ðовод Ñе додаÑ
+ Name[sr at Latn]=Dovod je dodat
+@@ -43,13 +44,14 @@
+ Name[uk]=ÐодаÑÑ Ð´Ð¾Ð´Ð°Ð½Ð¾
+ Name[uz]=Ð¯Ð½Ð³Ð¸Ð»Ð¸ÐºÐ»Ð°Ñ ÑаÑмаÑи ÒÑÑилди
+ Name[zh_CN]=æ·»å äºæ°é»æº
++Name[zh_TW]=å·²å å
¥ Feed
+ Comment=A new feed was remotely added to Akregator
+ Comment[bg]=ÐÑдалеÑено е добавена нова новина кÑм Akregator
+ Comment[ca]=S'ha afegit remotament un enllaç a Akregator
+ Comment[cs]=Byl pÅidán nový kanál do Akregatoru
+ Comment[da]=En ny kilde blev tilføjet eksternt til Akregator
+ Comment[de]=Eine neue Nachrichtenquelle wurde von extern zu Akregator hinzugefügt
+-Comment[el]=Îια νÎα ειÏÏοή ÏÏοÏÏÎθηκε αÏομακÏÏ
ÏμÎνα ÏÏο Akregator
++Comment[el]=Îια νÎα Ïοή ÏÏοÏÏÎθηκε αÏομακÏÏ
ÏμÎνα ÏÏο Akregator
+ Comment[es]=Se ha añadido remotamente un origen a Akregator
+ Comment[et]=Akregatorile lisati väljastpoolt uus kanal
+ Comment[eu]=Iturri berri bat gehitu da urrunetik Akregator-era
+@@ -70,6 +72,7 @@
+ Comment[pt]=Foi adicionada remotamente uma nova fonte ao Akregator
+ Comment[pt_BR]=Uma nova fonte de notÃcias foi adicionada remotamente ao Akregator
+ Comment[ru]=ÐÐ¾Ð²Ð°Ñ Ð»ÐµÐ½Ñа новоÑÑей добавлена в ÑпиÑок Akregator
++Comment[sk]=Nové kÅmitko bolo vzdialene pridané do Akregator
+ Comment[sl]=Nov vir je bil oddaljeno dodan v Akregator
+ Comment[sr]=Ðови довод Ñе ÑдаÑено Ð´Ð¾Ð´Ð°Ñ Ñ Akregator
+ Comment[sr at Latn]=Novi dovod je udaljeno dodat u Akregator
+@@ -79,6 +82,7 @@
+ Comment[uk]=ÐÐ¾Ð²Ñ Ð¿Ð¾Ð´Ð°ÑÑ Ð±Ñло вÑддалено додано до Akregator
+ Comment[uz]=Akregator даÑÑÑÑига Ñнги ÑÐ½Ð³Ð¸Ð»Ð¸ÐºÐ»Ð°Ñ ÑаÑмаÑи ÒÑÑилди
+ Comment[zh_CN]=æ°é»æºè¿ç¨æ·»å è¿äº Akregator
++Comment[zh_TW]=å·²å¾é 端å å
¥æ°ç feed å° Akregator
+ default_presentation=4
+
+ [new_articles]
+@@ -113,6 +117,7 @@
+ Name[pt_BR]=Novos Artigos
+ Name[ru]=ÐовÑе ÑÑаÑÑи
+ Name[se]=OÄÄa artihkkalat
++Name[sk]=Nový Älánok
+ Name[sl]=Novi Älanki
+ Name[sr]=Ðови ÑланÑи
+ Name[sr at Latn]=Novi Älanci
+@@ -122,6 +127,7 @@
+ Name[uk]=ÐÐ¾Ð²Ñ ÑÑаÑÑÑ
+ Name[uz]=Янги маÒолалаÑ
+ Name[zh_CN]=æ°é»æç«
++Name[zh_TW]=æ°æç«
+ Comment=New articles were fetched
+ Comment[bg]=ÐÑиÑÑигнали Ñа нови ÑÑаÑии
+ Comment[ca]=S'han obtingut nous articles
+@@ -152,6 +158,7 @@
+ Comment[pt_BR]=Há novos artigos disponÃveis
+ Comment[ru]=ÐолÑÑÐµÐ½Ñ Ð½Ð¾Ð²Ñе ÑÑаÑÑи
+ Comment[se]=OÄÄa artihkkalat vižžon
++Comment[sk]=ZÃskali sa nové Älánky
+ Comment[sl]=PovleÄeni so bili novi Älanki
+ Comment[sr]=ÐобавÑени ÑÑ Ð½Ð¾Ð²Ð¸ ÑланÑи
+ Comment[sr at Latn]=Dobavljeni su novi Älanci
+@@ -160,5 +167,6 @@
+ Comment[tr]=Yeni haberler alındı
+ Comment[uk]=ÐÑÑимано Ð½Ð¾Ð²Ñ ÑÑаÑÑÑ
+ Comment[zh_CN]=è·åäºæ°æç«
++Comment[zh_TW]=å·²æå°æ°æç«
+ default_presentation=4
+
+Index: kmobile/libkmobile.desktop
+===================================================================
+--- kmobile/libkmobile.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kmobile/libkmobile.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -15,6 +15,7 @@
+ Name[eu]=KDE-ren dispositibo mugikorren behe-mailako hardware kontrolatzailea
+ Name[fi]=KDE:n matkapuhelimen matalan tason laiteajuri
+ Name[fr]=Pilote matériel de bas niveau des périphériques mobiles pour KDE
++Name[ga]=Tiománaà crua-earraà Ãseal-leibhéil do ghléasanna móibÃleacha KDE
+ Name[gl]=Controlador de Hardware de Baixo Nivel dun Dispositivo Móbil de KDE
+ Name[hi]=à¤à¥à¤¡à¥à¤ मà¥à¤¬à¤¾à¤à¤² à¤à¤ªà¤à¤°à¤£ लà¥-लà¥à¤µà¤² हारà¥à¤¡à¤µà¥à¤¯à¤° डà¥à¤°à¤¾à¤à¤µà¤°
+ Name[hu]=Alacsony szintű KDE-s eszközmeghajtó mobiltelefonok kezeléséhez
+@@ -42,3 +43,4 @@
+ Name[tr]=KDE TaÅınabilir Aygıt DüÅük Seviye Donanım Sürücüsü
+ Name[uk]=ÐобÑлÑний пÑиÑÑÑÑй KDE дÑÐ°Ð¹Ð²ÐµÑ Ð¿ÑаÑÑÑÑий з пÑиÑÑÑоÑм напÑÑмÑ
+ Name[zh_CN]=KDE ç§»å¨è®¾å¤ä½çº§ç¡¬ä»¶é©±å¨ç¨åº
++Name[zh_TW]=KDE è¡åè£ç½®ä½é硬é«é©
åç¨å¼
+Index: kmobile/devices/gnokii/libkmobile_gnokii.desktop
+===================================================================
+--- kmobile/devices/gnokii/libkmobile_gnokii.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kmobile/devices/gnokii/libkmobile_gnokii.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -45,6 +45,7 @@
+ Name[uk]=ÐобÑлÑний ÑелеÑон Ñа Ñижневик (gnokii)
+ Name[uz]=УÑли ÑелеÑон Ñки оÑÐ³Ð°Ð½Ð°Ð¹Ð·ÐµÑ (gnokii)
+ Name[zh_CN]=ç§»å¨çµè¯æ PDA(gnokii)
++Name[zh_TW]=è¡åé»è©±ææ¸ä½å©ç(gnokii)
+ Comment=This driver supports many NOKIA and other mobile phones via the gnokii library
+ Comment[bg]=ÐÑÐ°Ð¹Ð²ÐµÑ Ð·Ð° поддÑÑжка на мобилни ÑелеÑони, пÑедимно ÐокиÑ, ÑÑез библиоÑекаÑа gnokii
+ Comment[bs]=Ovaj drajver podržava mnoge NOKIA i druge mobilne telefone putem gnokii biblioteke
+@@ -86,6 +87,7 @@
+ Comment[tr]=Bu sürücü birçok NOKIA ve gnokii kütüphanesiyle diÄer cep telefonlarını destekler
+ Comment[uk]=Цей дÑÐ°Ð¹Ð²ÐµÑ Ð¿ÑдÑÑимÑÑ Ð±Ð°Ð³Ð°Ñо мобÑлÑниÑ
ÑелеÑонÑв ÑÑÑми NOKIA Ñа ÑнÑиÑ
мобÑлÑниÑ
ÑелеÑонÑв ÑеÑез бÑблÑоÑÐµÐºÑ gnokii
+ Comment[zh_CN]=æ¤é©±å¨ç¨åºéè¿ gnokii åºæ¯æè®¸å¤è¯ºåºäºåå
¶å®ç§»å¨çµè¯
++Comment[zh_TW]=æ¤é©
åç¨å¼æ¯æ´è¨±å¤ NOKIA åå
¶ä»ææ©ï¼ä½¿ç¨ gnokii å½å¼åº«
+ Type=Service
+ ServiceTypes=kdedevice/mobiledevice
+ X-KDE-Library=libkmobile_gnokii
+Index: kmobile/devices/skeleton/libkmobile_skeleton.desktop
+===================================================================
+--- kmobile/devices/skeleton/libkmobile_skeleton.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kmobile/devices/skeleton/libkmobile_skeleton.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -44,6 +44,7 @@
+ Name[tr]=Ãatı Aygıt
+ Name[uk]=ÐÑоÑоÑип пÑиÑÑÑоÑ
+ Name[zh_CN]=ä¸è½è®¾å¤
++Name[zh_TW]=空殼è£ç½®
+ Comment=Mobile Skeleton Device
+ Comment[bg]=Ðобилни оÑганизаÑоÑи (ÑÑÑÑойÑÑва)
+ Comment[bs]=Mobilni skeleton ureÄaj
+@@ -85,6 +86,7 @@
+ Comment[tr]=TaÅınabilir Ãatı Aygıtı
+ Comment[uk]=ÐÑоÑоÑип мобÑлÑного пÑиÑÑÑоÑ
+ Comment[zh_CN]=ç§»å¨ä¸è½è®¾å¤
++Comment[zh_TW]=è¡åéè¨ç©ºæ®¼è£ç½®
+ Type=Service
+ ServiceTypes=kdedevice/mobiledevice
+ X-KDE-Library=libkmobile_skeleton
+Index: kmobile/devices/gammu/libkmobile_gammu.desktop
+===================================================================
+--- kmobile/devices/gammu/libkmobile_gammu.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kmobile/devices/gammu/libkmobile_gammu.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -45,6 +45,7 @@
+ Name[uk]=ÐобÑлÑний ÑелеÑон Ñа Ñижневик (gammu)
+ Name[uz]=УÑли ÑелеÑон Ñки оÑÐ³Ð°Ð½Ð°Ð¹Ð·ÐµÑ (gammu)
+ Name[zh_CN]=ç§»å¨çµè¯æ PDA(gammu)
++Name[zh_TW]=è¡åé»è©±ææ¸ä½å©ç(gammu)
+ Comment=This driver supports many NOKIA and other mobile phones via the gammu library
+ Comment[bg]=ÐÑÐ°Ð¹Ð²ÐµÑ Ð·Ð° поддÑÑжка на мобилни ÑелеÑони, пÑедимно ÐокиÑ, ÑÑез библиоÑекаÑа gammu
+ Comment[bs]=Ovaj drajver podržava mnoge NOKIA i druge mobilne telefone putem gammu biblioteke
+@@ -86,6 +87,7 @@
+ Comment[tr]=Bu sürücü birçok NOKIA ve gammu kütüphanesiyle diÄer cep telefonlarını destekler
+ Comment[uk]=Цей дÑÐ°Ð¹Ð²ÐµÑ Ð¿ÑдÑÑимÑÑ Ð±Ð°Ð³Ð°Ñо мобÑлÑниÑ
ÑелеÑонÑв ÑÑÑми NOKIA Ñа ÑнÑиÑ
мобÑлÑниÑ
ÑелеÑонÑв ÑеÑез бÑблÑоÑÐµÐºÑ gammu
+ Comment[zh_CN]=æ¤é©±å¨ç¨åºéè¿ gammu åºæ¯æè®¸å¤è¯ºåºäºåå
¶å®ç§»å¨çµè¯
++Comment[zh_TW]=æ¤é©
åç¨å¼æ¯æ´è¨±å¤ NOKIA åå
¶ä»ææ©ï¼ä½¿ç¨ gammu å½å¼åº«
+ Type=Service
+ ServiceTypes=kdedevice/mobiledevice
+ X-KDE-Library=libkmobile_gammu
+Index: kmobile/devices/digicam/libkmobile_digicam.desktop
+===================================================================
+--- kmobile/devices/digicam/libkmobile_digicam.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kmobile/devices/digicam/libkmobile_digicam.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -49,6 +49,7 @@
+ Name[uk]=ЦиÑÑовий ÑоÑоапаÑаÑ
+ Name[uz]=ФоÑоапаÑаÑ
+ Name[zh_CN]=æ°ç ç¸æº
++Name[zh_TW]=æ¸ä½ç¸æ©
+ Comment=This driver supports many digital cameras
+ Comment[bg]=ÐÑÐ°Ð¹Ð²ÐµÑ Ð·Ð° поддÑÑжка на ÑиÑÑови ÑоÑоапаÑаÑи и камеÑи
+ Comment[bs]=Ovaj drajver podržava mnoge digitalne kamere
+@@ -91,6 +92,7 @@
+ Comment[tr]=Bu sürücü birçok dijital kamerayı destekler
+ Comment[uk]=Цей дÑÐ°Ð¹Ð²ÐµÑ Ð¿ÑдÑÑимÑÑ Ð±Ð°Ð³Ð°Ñо ÑиÑÑовиÑ
камеÑ
+ Comment[zh_CN]=æ¤é©±å¨ç¨åºæ¯æè®¸å¤æ°ç ç¸æº
++Comment[zh_TW]=æ¤é©
åç¨å¼æ¯æ´è¨±å¤æ¸ä½ç¸æ©
+ Type=Service
+ ServiceTypes=kdedevice/mobiledevice
+ X-KDE-Library=libkmobile_digicam
+Index: kmobile/kmobile.desktop
+===================================================================
+--- kmobile/kmobile.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kmobile/kmobile.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -16,6 +16,7 @@
+ GenericName=Manage Mobile Devices
+ GenericName[be]=ÐÑÑаванÑне мабÑлÑнÑÐ¼Ñ Ð¿ÑÑладамÑ
+ GenericName[bg]=Ðобилни ÑÑÑÑойÑÑва
++GenericName[br]=Merañ an trobarhelloù lem-laka
+ GenericName[bs]=Upravljajte mobilnim ureÄajima
+ GenericName[ca]=Gestor per a dispositius mòbils
+ GenericName[cs]=Spravovat mobilnà zaÅÃzenÃ
+@@ -28,6 +29,7 @@
+ GenericName[eu]=Dispositibo mugikorrak kudeatu
+ GenericName[fi]=Hallitse matkapuhelinlaitteita
+ GenericName[fr]=Gérer les périphériques mobiles
++GenericName[ga]=Bainistigh Gléasanna MóibÃleacha
+ GenericName[gl]=Xestionar Dispositivos Móbiles
+ GenericName[he]=× ×××× ×©× ××ª×§× ×× × ×××××
+ GenericName[hi]=मà¥à¤¬à¤¾à¤à¤² à¤à¤ªà¤à¤°à¤£ पà¥à¤°à¤¬à¤à¤§à¤¨ à¤à¤°à¥à¤
+@@ -58,6 +60,7 @@
+ GenericName[tr]=TaÅınabilir Aygıtlar Yöneticisi
+ GenericName[uk]=РобоÑа з мобÑлÑними пÑиÑÑÑоÑми
+ GenericName[zh_CN]=管çç§»å¨è®¾å¤
++GenericName[zh_TW]=管çè¡åè£ç½®
+
+ Comment=A KDE Mobile Devices Manager
+ Comment[be]=ÐÑÑаванÑне мабÑлÑнÑÐ¼Ñ Ð¿ÑÑÐ»Ð°Ð´Ð°Ð¼Ñ KDE
+@@ -74,6 +77,7 @@
+ Comment[eu]=KDE-ren dispositibo mugikorren kudeatzailea
+ Comment[fi]=KDE:n matkapuhelinlaitteiden hallinta
+ Comment[fr]=Un gestionnaire de périphériques mobiles pour KDE
++Comment[ga]=Bainisteoir Gléasanna MóibÃleacha KDE
+ Comment[gl]=O Xestor de Móbiles de KDE
+ Comment[he]=×× ×× ××ª×§× ×× × ××××× ×¢××ר KDE
+ Comment[hi]=à¤à¤ à¤à¥à¤¡à¥à¤ मà¥à¤¬à¤¾à¤à¤² à¤à¤ªà¤à¤°à¤£ पà¥à¤°à¤¬à¤à¤§à¤
+@@ -103,6 +107,7 @@
+ Comment[tr]=KDE TaÅınabilir Aygıtlar Yöneticisi
+ Comment[uk]=ÐÐµÐ½ÐµÐ´Ð¶ÐµÑ Ð¼Ð¾Ð±ÑлÑниÑ
пÑиÑÑÑоÑв KDE
+ Comment[zh_CN]=KDE ç§»å¨è®¾å¤ç®¡çå¨
++Comment[zh_TW]=KDE è¡åè£ç½®ç®¡çå¡
+
+ X-KDE-StartupNotify=false
+ X-DCOP-ServiceType=Unique
+Index: kmobile/kioslave/mimetypes/mobile_addressbook.desktop
+===================================================================
+--- kmobile/kioslave/mimetypes/mobile_addressbook.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kmobile/kioslave/mimetypes/mobile_addressbook.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -44,6 +44,7 @@
+ Comment[tr]=TaÅınabilir Aygıt BaÄlantıları
+ Comment[uk]=ÐонÑакÑи Ñ Ð¼Ð¾Ð±ÑлÑÐ½Ð¾Ð¼Ñ Ð¿ÑиÑÑÑоÑ
+ Comment[zh_CN]=ç§»å¨è®¾å¤ä¸çè系人
++Comment[zh_TW]=è¡åè£ç½®ä¸çè¯çµ¡äºº
+ Icon=kaddressbook
+ Type=MimeType
+ MimeType=inode/addressbook
+Index: kmobile/kioslave/mimetypes/mobile_notes.desktop
+===================================================================
+--- kmobile/kioslave/mimetypes/mobile_notes.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kmobile/kioslave/mimetypes/mobile_notes.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -43,6 +43,7 @@
+ Comment[tr]=Cep Telefonu Notları
+ Comment[uk]=ÐоÑаÑки Ñ Ð¼Ð¾Ð±ÑлÑÐ½Ð¾Ð¼Ñ Ð¿ÑиÑÑÑоÑ
+ Comment[zh_CN]=ç§»å¨çµè¯ä¸ç便笺
++Comment[zh_TW]=è¡åè£ç½®ä¸çåå¿é
+ Icon=knotes
+ Type=MimeType
+ MimeType=inode/notes
+Index: kmobile/kioslave/mimetypes/mobile_calendar.desktop
+===================================================================
+--- kmobile/kioslave/mimetypes/mobile_calendar.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kmobile/kioslave/mimetypes/mobile_calendar.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -44,6 +44,7 @@
+ Comment[tr]=Cep Telefonu Takvimi
+ Comment[uk]=ÐÐ°Ð»ÐµÐ½Ð´Ð°Ñ Ñ Ð¼Ð¾Ð±ÑлÑÐ½Ð¾Ð¼Ñ Ð¿ÑиÑÑÑоÑ
+ Comment[zh_CN]=ç§»å¨çµè¯ä¸çæ¥å
++Comment[zh_TW]=è¡åè£ç½®ä¸çè¡äºæ
+ Icon=korganizer
+ Type=MimeType
+ MimeType=inode/calendar
+Index: kmobile/kioslave/mimetypes/mobile_device.desktop
+===================================================================
+--- kmobile/kioslave/mimetypes/mobile_device.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kmobile/kioslave/mimetypes/mobile_device.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -47,6 +47,7 @@
+ Comment[tr]=TaÅınabilir Aygıt
+ Comment[uk]=ÐобÑлÑний пÑиÑÑÑÑй
+ Comment[zh_CN]=ç§»å¨è®¾å¤
++Comment[zh_TW]=è¡åè£ç½®
+ Icon=kmobile
+ Type=MimeType
+ MimeType=kdedevice/mobiledevice
+Index: wizards/groupwarewizard.desktop
+===================================================================
+--- wizards/groupwarewizard.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ wizards/groupwarewizard.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -28,12 +28,14 @@
+ Name[pt]=Assistente Groupware do KDE
+ Name[pt_BR]=Assistente de Groupware do KDE
+ Name[ru]=ÐаÑÑÐµÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑÐµÐ½Ð¸Ñ Ðº ÑеÑвеÑам ÑовмеÑÑной ÑабоÑÑ
++Name[sk]=Sprievodca KDE Groupware
+ Name[sl]=Äarovnik za KDE Groupware
+ Name[sr]=KDE Groupware ÑаÑобÑак
+ Name[sr at Latn]=KDE Groupware Äarobnjak
+ Name[sv]=KDE-grupprogramguide
+ Name[uk]=ÐайÑÑÐµÑ Ð³ÑÑÐ¿Ð¾Ð²Ð¾Ñ ÑобоÑи Ð´Ð»Ñ KDE
+ Name[zh_CN]=KDE 群件å导
++Name[zh_TW]=KDE 群çµç²¾é
+ Exec=groupwarewizard
+ Type=Application
+ Icon=kontact
+Index: kresources/egroupware/kabc_xmlrpc.desktop
+===================================================================
+--- kresources/egroupware/kabc_xmlrpc.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kresources/egroupware/kabc_xmlrpc.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -28,6 +28,7 @@
+ Name[pt]=Servidor eGroupware (via XML-RPC)
+ Name[pt_BR]=Servidor eGroupware (via XML-RPC)
+ Name[ru]=СеÑÐ²ÐµÑ eGroupware (ÑеÑез XML-RPC)
++Name[sk]=eGroupware Server (cez XML-RPC)
+ Name[sl]=Strežnik eGroupware (preko XML-RPC)
+ Name[sr]=eGroupware ÑеÑÐ²ÐµÑ (пÑеко XML-RPC)
+ Name[sr at Latn]=eGroupware server (preko XML-RPC)
+@@ -36,6 +37,7 @@
+ Name[tr]=eGroupware Sunucusu (XML-RPC ile)
+ Name[uk]=СеÑÐ²ÐµÑ eGroupware (ÑеÑез XML-RPC)
+ Name[zh_CN]=eGroupware æå¡å¨(éè¿ XML-RPC)
++Name[zh_TW]=eGroupware 伺æå¨(éé XML-RPC)
+ X-KDE-Library=kabc_xmlrpc
+ Type=Service
+ ServiceTypes=KResources/Plugin
+Index: kresources/egroupware/debugdialog.cpp
+===================================================================
+--- kresources/egroupware/debugdialog.cpp (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kresources/egroupware/debugdialog.cpp (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -26,7 +26,7 @@
+ #include <kstaticdeleter.h>
+
+ #include <stdlib.h>
+-
++#include <klocale.h>
+ #include "debugdialog.h"
+
+ DebugDialog* DebugDialog::mSelf = 0;
+@@ -34,7 +34,7 @@
+
+ DebugDialog::DebugDialog()
+ : KDialogBase( Plain, WStyle_DialogBorder | WStyle_StaysOnTop, 0,
+- "Debug Dialog", false, "DebugDialog",
++ "Debug Dialog", false, i18n("Debug Dialog"),
+ User1 | User2 | Ok, Ok, true )
+ {
+ QWidget *page = plainPage();
+Index: kresources/egroupware/kcal_resourcexmlrpc.cpp
+===================================================================
+--- kresources/egroupware/kcal_resourcexmlrpc.cpp (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kresources/egroupware/kcal_resourcexmlrpc.cpp (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -237,7 +237,7 @@
+
+ QMap<QString, QVariant> args, columns;
+ args.insert( "start", QDateTime( QDate::currentDate().addDays( -12 ) ) );
+- args.insert( "end", QDateTime( QDate::currentDate().addDays( 12 ) ) );
++ args.insert( "end", QDateTime( QDate::currentDate().addDays( 2000 ) ) );
+
+ mServer->call( SearchEventsCommand, args,
+ this, SLOT( listEventsFinished( const QValueList<QVariant>&, const QVariant& ) ),
+Index: kresources/egroupware/knotes_xmlrpc.desktop
+===================================================================
+--- kresources/egroupware/knotes_xmlrpc.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kresources/egroupware/knotes_xmlrpc.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -28,6 +28,7 @@
+ Name[pt]=Servidor eGroupware (via XML-RPC)
+ Name[pt_BR]=Servidor eGroupware (via XML-RPC)
+ Name[ru]=СеÑÐ²ÐµÑ eGroupware (ÑеÑез XML-RPC)
++Name[sk]=eGroupware Server (cez XML-RPC)
+ Name[sl]=Strežnik eGroupware (preko XML-RPC)
+ Name[sr]=eGroupware ÑеÑÐ²ÐµÑ (пÑеко XML-RPC)
+ Name[sr at Latn]=eGroupware server (preko XML-RPC)
+@@ -36,6 +37,7 @@
+ Name[tr]=eGroupware Sunucusu (XML-RPC ile)
+ Name[uk]=СеÑÐ²ÐµÑ eGroupware (ÑеÑез XML-RPC)
+ Name[zh_CN]=eGroupware æå¡å¨(éè¿ XML-RPC)
++Name[zh_TW]=eGroupware 伺æå¨(éé XML-RPC)
+ X-KDE-Library=knotes_xmlrpc
+ Type=Service
+ ServiceTypes=KResources/Plugin
+Index: kresources/egroupware/kcal_xmlrpc.desktop
+===================================================================
+--- kresources/egroupware/kcal_xmlrpc.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kresources/egroupware/kcal_xmlrpc.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -28,6 +28,7 @@
+ Name[pt]=Servidor eGroupware (via XML-RPC)
+ Name[pt_BR]=Servidor eGroupware (via XML-RPC)
+ Name[ru]=СеÑÐ²ÐµÑ eGroupware (ÑеÑез XML-RPC)
++Name[sk]=eGroupware Server (cez XML-RPC)
+ Name[sl]=Strežnik eGroupware (preko XML-RPC)
+ Name[sr]=eGroupware ÑеÑÐ²ÐµÑ (пÑеко XML-RPC)
+ Name[sr at Latn]=eGroupware server (preko XML-RPC)
+@@ -36,6 +37,7 @@
+ Name[tr]=eGroupware Sunucusu (XML-RPC ile)
+ Name[uk]=СеÑÐ²ÐµÑ eGroupware (ÑеÑез XML-RPC)
+ Name[zh_CN]=eGroupware æå¡å¨(éè¿ XML-RPC)
++Name[zh_TW]=eGroupware 伺æå¨(éé XML-RPC)
+ X-KDE-Library=kcal_xmlrpc
+ Type=Service
+ ServiceTypes=KResources/Plugin
+Index: kresources/tvanytime/kcal_tvanytime.desktop
+===================================================================
+--- kresources/tvanytime/kcal_tvanytime.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kresources/tvanytime/kcal_tvanytime.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -27,12 +27,14 @@
+ Name[pt]=Programação de TV
+ Name[pt_BR]=Horários de TV
+ Name[ru]=ÐÑогÑÐ°Ð¼Ð¼Ñ ÑелепеÑедаÑ
++Name[sk]=TV programy
+ Name[sl]=TV spored
+ Name[sr]=ТРпÑогÑам
+ Name[sr at Latn]=TV program
+ Name[sv]=Tv-tablåer
+ Name[uk]=ÐÑогÑама ÑелебаÑеннÑ
+ Name[zh_CN]=çµè§æ¥ç¨å®æ
++Name[zh_TW]=é»è¦æå»è¡¨
+ X-KDE-Library=kcal_tvanytime
+ Type=Service
+ ServiceTypes=KResources/Plugin
+Index: kresources/exchange/exchange.desktop
+===================================================================
+--- kresources/exchange/exchange.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kresources/exchange/exchange.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -34,6 +34,7 @@
+ Name[pt]=Servidor Exchange 2000
+ Name[pt_BR]=Servidor Exchange2000
+ Name[ru]=СеÑÐ²ÐµÑ Microsoft Exchange 2000
++Name[sk]=Exchange 2000 server
+ Name[sl]=Strežnik Exchange 2000
+ Name[sr]=Exchange 2000 ÑеÑвеÑ
+ Name[sr at Latn]=Exchange 2000 server
+@@ -42,4 +43,5 @@
+ Name[tr]=Exchange 2000 Sunucusu
+ Name[uk]=СеÑÐ²ÐµÑ Exchange 2000
+ Name[zh_CN]=Exchange 2000 æå¡å¨
++Name[zh_TW]=Exchange 2000 伺æå¨
+
+Index: kresources/exchange/exchange_deprecated.desktop
+===================================================================
+--- kresources/exchange/exchange_deprecated.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kresources/exchange/exchange_deprecated.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -29,6 +29,7 @@
+ Name[pt]=Servidor Exchange 2000 (depreciado)
+ Name[pt_BR]=Servidor Exchange2000 (versão de compatibilidade)
+ Name[ru]=СеÑÐ²ÐµÑ Microsoft Exchange 2000 (ÑÑÑаÑевÑий)
++Name[sk]=Exchange 2000 server (deprecated)
+ Name[sl]=Strežnik Exchange 2000 (opuÅ¡Äeno)
+ Name[sr]=Exchange 2000 ÑеÑÐ²ÐµÑ (неодобÑаван)
+ Name[sr at Latn]=Exchange 2000 server (neodobravan)
+@@ -36,4 +37,5 @@
+ Name[ta]=பரிமாறà¯à®± 2000 à®à¯à®µà®à®©à¯ (மாறà¯à®ªà®¾à®à®¾à®©à®¤à¯)
+ Name[uk]=СеÑÐ²ÐµÑ Exchange 2000 (заÑÑаÑÑле)
+ Name[zh_CN]=Exchange 2000 æå¡å¨(䏿¨è使ç¨)
++Name[zh_TW]=Exchange 2000 伺æå¨(已廢é¤)
+
+Index: kresources/groupwise/kcal_groupwise.desktop
+===================================================================
+--- kresources/groupwise/kcal_groupwise.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kresources/groupwise/kcal_groupwise.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -36,6 +36,7 @@
+ Name[tr]=Novell GroupWise Sunucusu
+ Name[uk]=СеÑÐ²ÐµÑ Novell GroupWise
+ Name[zh_CN]=Novell GroupWise æå¡å¨
++Name[zh_TW]=Novell 群çµä¼ºæå¨
+ X-KDE-Library=kcal_groupwise
+ Type=Service
+ ServiceTypes=KResources/Plugin
+Index: kresources/groupwise/soap/Makefile.am
+===================================================================
+--- kresources/groupwise/soap/Makefile.am (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kresources/groupwise/soap/Makefile.am (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -29,7 +29,7 @@
+ # rename any 'new' method invocations
+
+ # do not just set "srcdir=." here, it breaks when building with srcdir!=builddir
+-srcdir = .
++# srcdir = .
+
+ stubs: groupwise.wsdl
+ wsdl2h -e -o $(srcdir)/groupwise.h $(srcdir)/groupwise.wsdl -t $(srcdir)/typemap.dat
+Index: kresources/groupwise/kabc_groupwise.desktop
+===================================================================
+--- kresources/groupwise/kabc_groupwise.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kresources/groupwise/kabc_groupwise.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -36,6 +36,7 @@
+ Name[tr]=Novell GroupWise Sunucusu
+ Name[uk]=СеÑÐ²ÐµÑ Novell GroupWise
+ Name[zh_CN]=Novell GroupWise æå¡å¨
++Name[zh_TW]=Novell 群çµä¼ºæå¨
+ X-KDE-Library=kabc_groupwise
+ Type=Service
+ ServiceTypes=KResources/Plugin
+Index: kresources/slox/kcal_slox.desktop
+===================================================================
+--- kresources/slox/kcal_slox.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kresources/slox/kcal_slox.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -36,6 +36,7 @@
+ Name[tr]=SUSE LINUX Openexchange Sunucusu
+ Name[uk]=СеÑÐ²ÐµÑ SUSE LINUX Openexchange
+ Name[zh_CN]=SUSE LINUX Openexchange æå¡å¨
++Name[zh_TW]=SUSE LINUX Openexchange 伺æå¨
+ X-KDE-Library=kcal_slox
+ Type=Service
+ ServiceTypes=KResources/Plugin
+Index: kresources/slox/kcal_ox.desktop
+===================================================================
+--- kresources/slox/kcal_ox.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kresources/slox/kcal_ox.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -31,6 +31,7 @@
+ Name[sv]=Openxchange-server
+ Name[uk]=СеÑÐ²ÐµÑ OpenXchange
+ Name[zh_CN]=OpenXchange æå¡å¨
++Name[zh_TW]=OpenXchange 伺æå¨
+ X-KDE-Library=kcal_slox
+ Type=Service
+ ServiceTypes=KResources/Plugin
+Index: kresources/slox/kabc_slox.desktop
+===================================================================
+--- kresources/slox/kabc_slox.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kresources/slox/kabc_slox.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -36,6 +36,7 @@
+ Name[tr]=SUSE LINUX Openexchange Sunucusu
+ Name[uk]=СеÑÐ²ÐµÑ SUSE LINUX Openexchange
+ Name[zh_CN]=SUSE LINUX Openexchange æå¡å¨
++Name[zh_TW]=SUSE LINUX Openexchange 伺æå¨
+ X-KDE-Library=kabc_slox
+ Type=Service
+ ServiceTypes=KResources/Plugin
+Index: kresources/slox/kabc_ox.desktop
+===================================================================
+--- kresources/slox/kabc_ox.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kresources/slox/kabc_ox.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -31,6 +31,7 @@
+ Name[sv]=Openxchange-server
+ Name[uk]=СеÑÐ²ÐµÑ OpenXchange
+ Name[zh_CN]=OpenXchange æå¡å¨
++Name[zh_TW]=OpenXchange 伺æå¨
+ X-KDE-Library=kabc_slox
+ Type=Service
+ ServiceTypes=KResources/Plugin
+Index: kresources/featureplan/kcal_resourcefeatureplan.desktop
+===================================================================
+--- kresources/featureplan/kcal_resourcefeatureplan.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kresources/featureplan/kcal_resourcefeatureplan.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -21,12 +21,14 @@
+ Name[pl]=Plan funkcjonalnoÅci XML
+ Name[pt]=Plano de Funcionalidades em XML
+ Name[pt_BR]=Plano de Funcionalidades XML
++Name[sk]=XML plán vlastnostÃ
+ Name[sl]=NaÄrt zmožnosti v XML
+ Name[sr]=XML план могÑÑноÑÑи
+ Name[sr at Latn]=XML plan moguÄnosti
+ Name[ta]=XML பணà¯à®ªà¯ திà®à¯à®à®®à¯
+ Name[tr]=XML Ãzellik Planı
+ Name[zh_CN]=XML ç¹æ§è®¡å
++Name[zh_TW]=XML åè½è¨ç«
+ X-KDE-Library=kcal_resourcefeatureplan
+ Type=Service
+ ServiceTypes=KResources/Plugin
+Index: kresources/groupdav/kabc_groupdav.desktop
+===================================================================
+--- kresources/groupdav/kabc_groupdav.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kresources/groupdav/kabc_groupdav.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -29,6 +29,7 @@
+ Name[pt]=Servidor GroupDAV (por exemplo OpenGroupware)
+ Name[pt_BR]=Servidor GroupDav (p. ex. OpenGroupware)
+ Name[ru]=СеÑÐ²ÐµÑ GroupDAV (напÑимеÑ, OpenGroupware)
++Name[sk]=GroupDAV Server (napr. OpenGroupware)
+ Name[sl]=Strežnik GroupDAV (npr. OpenGroupware)
+ Name[sr]=GroupDAV ÑеÑÐ²ÐµÑ (нпÑ. OpenGroupware)
+ Name[sr at Latn]=GroupDAV server (npr. OpenGroupware)
+@@ -37,6 +38,7 @@
+ Name[tr]=GroupDAV Sunucusu (ör. OpenGroupware)
+ Name[uk]=СеÑÐ²ÐµÑ GroupDAV (напÑ., OpenGroupware)
+ Name[zh_CN]=GroupDAV æå¡å¨(å¦ OpenGroupware)
++Name[zh_TW]=GroupDAV 伺æå¨ (å¦: OpenGroupware)
+ X-KDE-Library=kabc_groupdav
+ Type=Service
+ ServiceTypes=KResources/Plugin
+Index: kresources/groupdav/kcal_groupdav.desktop
+===================================================================
+--- kresources/groupdav/kcal_groupdav.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kresources/groupdav/kcal_groupdav.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -29,6 +29,7 @@
+ Name[pt]=Servidor GroupDAV (por exemplo OpenGroupware)
+ Name[pt_BR]=Servidor GroupDav (p. ex. OpenGroupware)
+ Name[ru]=СеÑÐ²ÐµÑ GroupDAV (напÑимеÑ, OpenGroupware)
++Name[sk]=GroupDAV Server (napr. OpenGroupware)
+ Name[sl]=Strežnik GroupDAV (npr. OpenGroupware)
+ Name[sr]=GroupDAV ÑеÑÐ²ÐµÑ (нпÑ. OpenGroupware)
+ Name[sr at Latn]=GroupDAV server (npr. OpenGroupware)
+@@ -37,6 +38,7 @@
+ Name[tr]=GroupDAV Sunucusu (ör. OpenGroupware)
+ Name[uk]=СеÑÐ²ÐµÑ GroupDAV (напÑ., OpenGroupware)
+ Name[zh_CN]=GroupDAV æå¡å¨(å¦ OpenGroupware)
++Name[zh_TW]=GroupDAV 伺æå¨ (å¦: OpenGroupware)
+ X-KDE-Library=kcal_groupdav
+ Type=Service
+ ServiceTypes=KResources/Plugin
+Index: kresources/blogging/blogging.desktop
+===================================================================
+--- kresources/blogging/blogging.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kresources/blogging/blogging.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -26,6 +26,7 @@
+ Name[pt]=Diários como 'Blogs' num Servidor
+ Name[pt_BR]=Diários como Blogs em um Servidor
+ Name[ru]=ÐÑÑÐ½Ð°Ð»Ñ (блоги) на ÑеÑвеÑе
++Name[sk]=Žurnály ako blogy na serveri
+ Name[sl]=Dnevniki kot spletni dnevniki (blogi) na strežniku
+ Name[sr]=ÐневниÑи као блогови на ÑеÑвеÑÑ
+ Name[sr at Latn]=Dnevnici kao blogovi na serveru
+@@ -34,6 +35,7 @@
+ Name[tr]=Web GünlüÄü gibi, bir Sunucuya yazar
+ Name[uk]=ÐÑÑнали Ñк веб-Ñоденники на ÑеÑвеÑÑ
+ Name[zh_CN]=æ¥è®°ä½ä¸ºæå¡å¨ä¸çå客æ¥å¿
++Name[zh_TW]=æ¥èªåçºä¼ºæå¨ä¸çé¨è½æ ¼
+ X-KDE-Library=kcal_blogging
+ Type=Service
+ ServiceTypes=KResources/Plugin
+Index: kresources/kolab/kabc/kolab.desktop
+===================================================================
+--- kresources/kolab/kabc/kolab.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kresources/kolab/kabc/kolab.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -29,6 +29,7 @@
+ Name[pt]=Livro de Endereços em Servidor IMAP via KMail
+ Name[pt_BR]=Livro de Endereços em servidor IMAP via KMail
+ Name[ru]=ÐдÑеÑÐ½Ð°Ñ ÐºÐ½Ð¸Ð³Ð° на ÑеÑвеÑе IMAP ÑеÑез KMail
++Name[sk]=Adresár na IMAP-serveri pomocou KMail
+ Name[sl]=Adresar na strežniku IMAP preko KMaila
+ Name[sr]=ÐдÑеÑÐ°Ñ Ð½Ð° IMAP ÑеÑвеÑÑ Ð¿Ñеко KMail-а
+ Name[sr at Latn]=Adresar na IMAP serveru preko KMail-a
+@@ -37,6 +38,7 @@
+ Name[tr]=KMail AracılıÄı ile IMAP Sunucusunda Adres Defteri
+ Name[uk]=ÐдÑеÑна книга на ÑеÑвеÑÑ IMAP ÑеÑез KMail
+ Name[zh_CN]=éè¿ KMail è®¿é® IMAP æå¡å¨ä¸çå°åç°¿
++Name[zh_TW]=éé KMail åå¾ IMAP 伺æå¨ä¸çéè¨é
+ X-KDE-Library=kabc_kolab
+ Type=Service
+ ServiceTypes=KResources/Plugin
+Index: kresources/kolab/knotes/kolabresource.desktop
+===================================================================
+--- kresources/kolab/knotes/kolabresource.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kresources/kolab/knotes/kolabresource.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -29,6 +29,7 @@
+ Name[pt]=Servidor IMAP via KMail
+ Name[pt_BR]=Servidor IMAP via KMail
+ Name[ru]=ÐоÑÑÑп к ÑеÑвеÑÑ IMAP ÑеÑез KMail
++Name[sk]=IMAP-server pomocou KMail
+ Name[sl]=Strežnik IMAP preko KMaila
+ Name[sr]=IMAP ÑеÑÐ²ÐµÑ Ð¿Ñеко KMail-а
+ Name[sr at Latn]=IMAP server preko KMail-a
+@@ -37,6 +38,7 @@
+ Name[tr]=KMail aracılıÄı ile IMAP Sunucu
+ Name[uk]=СеÑÐ²ÐµÑ IMAP ÑеÑез KMail
+ Name[zh_CN]=éè¿ KMail è®¿é® IMAP æå¡å¨
++Name[zh_TW]=éé KMail åå¾ IMAP 伺æå¨
+ X-KDE-Library=knotes_kolab
+ Type=Service
+ ServiceTypes=KResources/Plugin
+Index: kresources/kolab/kcal/kolab.desktop
+===================================================================
+--- kresources/kolab/kcal/kolab.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kresources/kolab/kcal/kolab.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -29,6 +29,7 @@
+ Name[pt]=Calendário em Servidor IMAP via KMail
+ Name[pt_BR]=Calendário em Servidor IMAP via KMail
+ Name[ru]=ÐалендаÑÑ Ð½Ð° ÑеÑвеÑе IMAP ÑеÑез KMail
++Name[sk]=Kalendár na IMAP serveri pomocou KMail
+ Name[sl]=Koledar na strežniku IMAP preko KMaila
+ Name[sr]=ÐÐ°Ð»ÐµÐ½Ð´Ð°Ñ Ð½Ð° IMAP ÑеÑвеÑÑ Ð¿Ñеко KMail-а
+ Name[sr at Latn]=Kalendar na IMAP serveru preko KMail-a
+@@ -37,6 +38,7 @@
+ Name[tr]=KMail AracılıÄı ile IMAP Sunucusunda Takvim
+ Name[uk]=ÐÐ°Ð»ÐµÐ½Ð´Ð°Ñ Ð½Ð° ÑеÑвеÑÑ IMAP ÑеÑез KMail
+ Name[zh_CN]=éè¿ KMail è®¿é® IMAP æå¡å¨ä¸çæ¥å
++Name[zh_TW]=éé KMail åå¾ IMAP 伺æå¨ä¸çè¡äºæ
+ X-KDE-Library=kcal_kolab
+ Type=Service
+ ServiceTypes=KResources/Plugin
+Index: kresources/birthdays/kabc.desktop
+===================================================================
+--- kresources/birthdays/kabc.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kresources/birthdays/kabc.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -46,6 +46,7 @@
+ Name[tr]=KDE Adres Defterinden DoÄum Günleri
+ Name[uk]=ÐÐ½Ñ Ð½Ð°ÑÐ¾Ð´Ð¶ÐµÐ½Ð½Ñ Ð· KAddressBook
+ Name[zh_CN]=KAddressBook ä¸ççæ¥
++Name[zh_TW]=èª KaddressBook å¯å
¥çæ¥
+ X-KDE-Library=kcal_kabc
+ Type=Service
+ ServiceTypes=KResources/Plugin
+Index: kresources/groupware/kabc_groupware.desktop
+===================================================================
+--- kresources/groupware/kabc_groupware.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kresources/groupware/kabc_groupware.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -35,6 +35,7 @@
+ Name[tr]=Grupyazılımı(Groupware) Sunucusu
+ Name[uk]=СеÑÐ²ÐµÑ Groupware
+ Name[zh_CN]=群件æå¡å¨
++Name[zh_TW]=群çµä¼ºæå¨
+ X-KDE-Library=kabc_groupware
+ Type=Service
+ ServiceTypes=KResources/Plugin
+Index: kresources/groupware/kcal_groupware.desktop
+===================================================================
+--- kresources/groupware/kcal_groupware.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kresources/groupware/kcal_groupware.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -35,6 +35,7 @@
+ Name[tr]=Grupyazılımı(Groupware) Sunucusu
+ Name[uk]=СеÑÐ²ÐµÑ Groupware
+ Name[zh_CN]=群件æå¡å¨
++Name[zh_TW]=群çµä¼ºæå¨
+ X-KDE-Library=kcal_groupware
+ Type=Service
+ ServiceTypes=KResources/Plugin
+Index: kresources/remote/remote.desktop
+===================================================================
+--- kresources/remote/remote.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kresources/remote/remote.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -43,6 +43,7 @@
+ Name[tr]=Uzak Dosyadaki Takvim
+ Name[uk]=ÐÐ°Ð»ÐµÐ½Ð´Ð°Ñ Ñ Ð²ÑÐ´Ð´Ð°Ð»ÐµÐ½Ð¾Ð¼Ñ ÑайлÑ
+ Name[zh_CN]=è¿ç¨æä»¶ä¸çæ¥å
++Name[zh_TW]=é ç«¯æªæ¡çè¡äºæ
+ X-KDE-Library=kcal_remote
+ Type=Service
+ ServiceTypes=KResources/Plugin
+Index: kresources/newexchange/kabc_newexchange.desktop
+===================================================================
+--- kresources/newexchange/kabc_newexchange.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kresources/newexchange/kabc_newexchange.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -28,6 +28,7 @@
+ Name[pt]=Livro de endereços em servidor Exchange (experimental)
+ Name[pt_BR]=Livro de Endereços em um Servidor Exchange (experimenal)
+ Name[ru]=ÐдÑеÑÐ½Ð°Ñ ÐºÐ½Ð¸Ð³Ð° на ÑеÑвеÑе Exchange (ÑкÑпеÑименÑалÑно)
++Name[sk]=Adresár na Exchange serveri (experimentálne)
+ Name[sl]=Adresar na strežniku Exchange (poskusno)
+ Name[sr]=ÐдÑеÑÐ°Ñ Ð½Ð° Exchange ÑеÑвеÑÑ (екÑпеÑименÑално)
+ Name[sr at Latn]=Adresar na Exchange serveru (eksperimentalno)
+@@ -36,6 +37,7 @@
+ Name[tr]=Bir Exchange Sunucusu üzerinde Adres Defteri (deneyimsel)
+ Name[uk]=ÐдÑеÑна книга на ÑеÑвеÑÑ Exchange (екÑпеÑименÑалÑне)
+ Name[zh_CN]=Exchange æå¡å¨ä¸çå°åç°¿(è¯éªæ§)
++Name[zh_TW]=Exchanger 伺æå¨çéè¨é(實é©ä¸)
+ X-KDE-Library=kabc_newexchange
+ Type=Service
+ ServiceTypes=KResources/Plugin
+Index: kresources/newexchange/kabc_newexchange_final.desktop
+===================================================================
+--- kresources/newexchange/kabc_newexchange_final.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kresources/newexchange/kabc_newexchange_final.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -30,6 +30,7 @@
+ Name[pt]=Livro de endereços em servidor Exchange
+ Name[pt_BR]=Livro de Endereços em um Servidor Exchange
+ Name[ru]=ÐдÑеÑÐ½Ð°Ñ ÐºÐ½Ð¸Ð³Ð° на ÑеÑвеÑе Exchange
++Name[sk]=Adresár na Exchange serveri
+ Name[sl]=Adresar na strežniko Exchange
+ Name[sr]=ÐдÑеÑÐ°Ñ Ð½Ð° Exchange ÑеÑвеÑÑ
+ Name[sr at Latn]=Adresar na Exchange serveru
+@@ -38,3 +39,4 @@
+ Name[tr]=Bir Exchange Sunucusu üzerinde Adres Defteri
+ Name[uk]=ÐдÑеÑна книга на ÑеÑвеÑÑ Exchange
+ Name[zh_CN]=Exchange æå¡å¨ä¸çå°åç°¿
++Name[zh_TW]=Exchanger 伺æå¨ä¸çéè¨é
+Index: kresources/newexchange/kcal_newexchange.desktop
+===================================================================
+--- kresources/newexchange/kcal_newexchange.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kresources/newexchange/kcal_newexchange.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -28,6 +28,7 @@
+ Name[pt]=Calendário em servidor Exchange (experimental)
+ Name[pt_BR]=Calendário em um Servidor Exchange (experimental)
+ Name[ru]=ÐалендаÑÑ Ð½Ð° ÑеÑвеÑе Exchange (ÑкÑпеÑименÑалÑно)
++Name[sk]=Kalendár na Exchange serveri (experimentálne)
+ Name[sl]=Koledar na strežniku Exchange (poskusno)
+ Name[sr]=ÐÐ°Ð»ÐµÐ½Ð´Ð°Ñ Ð½Ð° Exchange ÑеÑвеÑÑ (екÑпеÑименÑално)
+ Name[sr at Latn]=Kalendar na Exchange serveru (eksperimentalno)
+@@ -36,6 +37,7 @@
+ Name[tr]=Bir Exchange Sunucusu üzerinde Takvim (deneyimsel)
+ Name[uk]=ÐÐ°Ð»ÐµÐ½Ð´Ð°Ñ Ð½Ð° ÑеÑвеÑÑ Exchange (екÑпеÑименÑалÑне)
+ Name[zh_CN]=Exchange æå¡å¨ä¸çæ¥å(è¯éªæ§)
++Name[zh_TW]=Exchanger 伺æå¨ä¸çè¡äºæ(實é©ä¸)
+ X-KDE-Library=kcal_newexchange
+ Type=Service
+ ServiceTypes=KResources/Plugin
+Index: kresources/newexchange/kcal_newexchange_final.desktop
+===================================================================
+--- kresources/newexchange/kcal_newexchange_final.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kresources/newexchange/kcal_newexchange_final.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -30,6 +30,7 @@
+ Name[pt]=Calendário em servidor Exchange
+ Name[pt_BR]=Calendário em um Servidor Exchange
+ Name[ru]=ÐалендаÑÑ Ð½Ð° ÑеÑвеÑе Exchange
++Name[sk]=Kalendár na Exchange serveri
+ Name[sl]=Koledar na strežniku Exchange
+ Name[sr]=ÐÐ°Ð»ÐµÐ½Ð´Ð°Ñ Ð½Ð° Exchange ÑеÑвеÑÑ
+ Name[sr at Latn]=Kalendar na Exchange serveru
+@@ -38,3 +39,4 @@
+ Name[tr]=Bir Exchange Sunucusu üzerinde Takvim
+ Name[uk]=ÐÐ°Ð»ÐµÐ½Ð´Ð°Ñ Ð½Ð° ÑеÑвеÑÑ Exchange
+ Name[zh_CN]=Exchange æå¡å¨ä¸çæ¥å
++Name[zh_TW]=Exchanger 伺æå¨ä¸çè¡äºæ
+Index: certmanager/conf/kleopatra_config_appear.desktop
+===================================================================
+--- certmanager/conf/kleopatra_config_appear.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ certmanager/conf/kleopatra_config_appear.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -107,6 +107,7 @@
+ Comment[tr]=Renkler ve Yazı Tipleri Yapılandırması
+ Comment[uk]=ÐалаÑÑÑÐ²Ð°Ð½Ð½Ñ ÐºÐ¾Ð»ÑоÑÑв Ñ ÑÑиÑÑÑв
+ Comment[zh_CN]=é¢è²ååä½é
ç½®
++Comment[zh_TW]=è¨å®é¡è²èåå
+ Keywords=color,font, configuration
+ Keywords[be]=колеÑ, ÑÑÑÑÑ, канÑÑгÑÑаÑÑÑ, color, font, configuration
+ Keywords[bg]=ÑвÑÑ, ÑÑиÑÑ, конÑигÑÑиÑане, наÑÑÑойки color, font, configuration
+Index: certmanager/conf/kleopatra_config_dnorder.desktop
+===================================================================
+--- certmanager/conf/kleopatra_config_dnorder.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ certmanager/conf/kleopatra_config_dnorder.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -54,6 +54,7 @@
+ Name[tr]=DN-Ãznitelik Sırası
+ Name[uk]=ÐоÑÑдок аÑÑибÑÑÑв DN
+ Name[zh_CN]=DN 屿§é¡ºåº
++Name[zh_TW]=DN-屬æ§é åº
+ Comment=Configure the order in which DN attributes are shown
+ Comment[bg]=ÐаÑÑÑойки на подÑедбаÑа на аÑÑибÑÑиÑе на индекÑа (DN)
+ Comment[bs]=Podesite redoslijed kojim Äe biti prikazani DN atributi
+@@ -95,6 +96,7 @@
+ Comment[tr]=DN özniteliklerinin hangi sıralama ile gösterileceÄini yapılandır
+ Comment[uk]=ÐалаÑÑÑÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾ÑÑÐ´ÐºÑ Ð¿Ð¾ÐºÐ°Ð·Ñ Ð°ÑÑибÑÑÑв DN
+ Comment[zh_CN]=é
ç½® DN 屿§æ¾ç¤ºç顺åº
++Comment[zh_TW]=è¨å® DN 屬æ§é¡¯ç¤ºé åº
+ Keywords=DN,order,RDN,attribute
+ Keywords[be]=паÑадак,аÑÑÑбÑÑ,DN,order,RDN,attribute
+ Keywords[bg]=индекÑ, Ñед, подÑедба, аÑÑибÑÑ DN, order, RDN, attribute
+Index: certmanager/conf/kleopatra_config_dirserv.desktop
+===================================================================
+--- certmanager/conf/kleopatra_config_dirserv.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ certmanager/conf/kleopatra_config_dirserv.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -56,6 +56,7 @@
+ Name[tr]=Dizin Servisleri
+ Name[uk]=СлÑжби каÑалогÑв
+ Name[zh_CN]=ç®å½æå¡
++Name[zh_TW]=ç®éæå
+ Comment=Configuration of LDAP directory services
+ Comment[bg]=ÐаÑÑÑойки на диÑекÑоÑийниÑе ÑÑлÑги LDAP
+ Comment[bs]=Podešavanje LDAP usluge imenika
+@@ -97,6 +98,7 @@
+ Comment[tr]=LDAP dizin servislerinin yapılandırması
+ Comment[uk]=ÐалаÑÑÑÐ²Ð°Ð½Ð½Ñ ÑлÑжб каÑалогÑв LDAP
+ Comment[zh_CN]=LDAP ç®å½æå¡é
ç½®
++Comment[zh_TW]=è¨å® LDAP ç®éæå
+ Keywords=ldap,directory,services
+ Keywords[be]=каÑалÑг,ÑÑÑвÑÑÑ,ldap,directory,services
+ Keywords[bg]=диÑекÑоÑийни, ÑÑлÑги, ldap, directory, services
+Index: certmanager/lib/libkleopatrarc.desktop
+===================================================================
+--- certmanager/lib/libkleopatrarc.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ certmanager/lib/libkleopatrarc.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -28,6 +28,7 @@
+ Name[pt]=Chave Não Validada
+ Name[pt_BR]=Chave Não Validada
+ Name[ru]=ÐепÑовеÑеннÑй клÑÑ
++Name[sk]=Neoverený kľúÄ
+ Name[sl]=Nepreverjen kljuÄ
+ Name[sr]=ÐеовеÑени кÑÑÑ
+ Name[sr at Latn]=Neovereni kljuÄ
+@@ -36,6 +37,7 @@
+ Name[tr]=Geçerli Olmayan Anahtar
+ Name[uk]=ÐепеÑевÑÑений клÑÑ
+ Name[zh_CN]=æªæ ¡éªçå¯é¥
++Name[zh_TW]=æªç¢ºèªçéé°
+
+ [Key Filter #1]
+ was-validated=true
+@@ -71,6 +73,7 @@
+ Name[pt]=Chave Expirada
+ Name[pt_BR]=Chave Expirada
+ Name[ru]=УÑеÑÑвÑий ÑÐ¸Ð»Ñ ÐºÐ»ÑÑ
++Name[sk]=VyprÅ¡aný kľúÄ
+ Name[sl]=PreteÄen kljuÄ
+ Name[sr]=ÐÑÑекли кÑÑÑ
+ Name[sr at Latn]=Istekli kljuÄ
+@@ -79,6 +82,7 @@
+ Name[tr]=Süresi DolmuŠAnahtar
+ Name[uk]=ÐаÑÑаÑÑлий клÑÑ
+ Name[zh_CN]=è¿æå¯é¥
++Name[zh_TW]=å·²éæçéé°
+
+ [Key Filter #2]
+ was-validated=true
+@@ -111,6 +115,7 @@
+ Name[pt]=Chave Revogada
+ Name[pt_BR]=Chave Revogada
+ Name[ru]=ÐÑозваннÑй клÑÑ
++Name[sk]=KÄ¾ÃºÄ so zruÅ¡enou platnosÅ¥ou
+ Name[sl]=Preklican kljuÄ
+ Name[sr]=Ðпозвани кÑÑÑ
+ Name[sr at Latn]=Opozvani kljuÄ
+@@ -119,6 +124,7 @@
+ Name[tr]=Geri AlınmıŠAnahtar
+ Name[uk]=ÐнÑлÑований клÑÑ
+ Name[zh_CN]=åéçå¯é¥
++Name[zh_TW]=已廢æ£çéé°
+
+ [Key Filter #3]
+ was-validated=true
+@@ -151,6 +157,7 @@
+ Name[pt]=Certificado Raiz de Confiança
+ Name[pt_BR]=Certificado Raiz Confiável
+ Name[ru]=ÐовеÑÑемÑй коÑневой ÑеÑÑиÑикаÑ
++Name[sk]=Dôveryhodný koreÅový certifikát
+ Name[sl]=Zaupan korenski certifikat
+ Name[sr]=ÐоÑени ÑеÑÑиÑÐ¸ÐºÐ°Ñ Ð¾Ð´ повеÑеÑа
+ Name[sr at Latn]=Koreni sertifikat od poverenja
+@@ -159,6 +166,7 @@
+ Name[tr]=Güvenilir Kök Sertifikası
+ Name[uk]=ÐоÑеневий ÑеÑÑиÑÑÐºÐ°Ñ Ð· довÑÑоÑ
+ Name[zh_CN]=å¯ä¿¡ä»»çæ ¹è¯ä¹¦
++Name[zh_TW]=å¯ä¿¡ä»»çæ ¹æè
+
+ [Key Filter #4]
+ was-validated=true
+@@ -191,6 +199,7 @@
+ Name[pt]=Certificado Raiz Não de Confiança
+ Name[pt_BR]=Certificado Raiz Não-Confiável
+ Name[ru]=Ðе довеÑÑемÑй коÑневой ÑеÑÑиÑикаÑ
++Name[sk]=Nedôveryhodný koreÅový certifikát
+ Name[sl]=Nezaupan korenski certifikat
+ Name[sr]=ÐоÑени ÑеÑÑиÑÐ¸ÐºÐ°Ñ ÐºÐ¾Ñи ниÑе од повеÑеÑа
+ Name[sr at Latn]=Koreni sertifikat koji nije od poverenja
+@@ -199,6 +208,7 @@
+ Name[tr]=Güvenilmeyen Kök Sertifikası
+ Name[uk]=ÐоÑеневий ÑеÑÑиÑÑÐºÐ°Ñ Ð±ÐµÐ· довÑÑи
+ Name[zh_CN]=æªä¿¡ä»»çæ ¹è¯ä¹¦
++Name[zh_TW]=ä¸å¯ä¿¡ä»»çæ ¹æè
+
+ [Key Filter #5]
+ was-validated=true
+@@ -233,6 +243,7 @@
+ Name[pt]=Outras Chaves
+ Name[pt_BR]=Outras Chaves
+ Name[ru]=ÐÑÑгие клÑÑи
++Name[sk]=Iné kľúÄe
+ Name[sl]=Drugi kljuÄi
+ Name[sr]=ÐÑÑги кÑÑÑеви
+ Name[sr at Latn]=Drugi kljuÄevi
+@@ -242,4 +253,5 @@
+ Name[uk]=ÐнÑÑ ÐºÐ»ÑÑÑ
+ Name[uz]=ÐоÑÒа калиÑлаÑ
+ Name[zh_CN]=å
¶å®å¯é¥
++Name[zh_TW]=å
¶ä»éé°
+
+Index: libkpgp/kpgp.cpp
+===================================================================
+--- libkpgp/kpgp.cpp (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ libkpgp/kpgp.cpp (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -272,6 +272,7 @@
+ if (0 == pgp) assignPGPBase();
+
+ do {
++ // loop as long as the user enters a wrong passphrase and doesn't abort
+ // everything ready
+ if( prepare( true, &block ) != 1 )
+ return FALSE;
+@@ -1434,6 +1435,7 @@
+
+ case tAuto:
+ kdDebug(5100) << "Kpgp: assign pgp - auto" << endl;
++ // fall through
+ default:
+ kdDebug(5100) << "Kpgp: assign pgp - default" << endl;
+ if (haveGpg)
+Index: libkpgp/kpgpbase2.cpp
+===================================================================
+--- libkpgp/kpgpbase2.cpp (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ libkpgp/kpgpbase2.cpp (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -24,6 +24,7 @@
+ #include "kpgp.h"
+
+ #include <string.h> /* strncmp */
++#include <assert.h>
+
+ #include <qdatetime.h>
+
+@@ -740,6 +741,7 @@
+
+ if( key == 0 )
+ break;
++ assert( subkey != 0 );
+
+ int pos = index + 1;
+ while( output[pos] == ' ' )
+Index: libkpgp/kpgpbase5.cpp
+===================================================================
+--- libkpgp/kpgpbase5.cpp (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ libkpgp/kpgpbase5.cpp (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -24,6 +24,7 @@
+ #include "kpgp.h"
+
+ #include <string.h> /* strncmp */
++#include <assert.h>
+
+ #include <qregexp.h>
+ #include <qdatetime.h>
+@@ -657,6 +658,7 @@
+ // remove white space from the fingerprint
+ for ( int idx = 0 ; (idx = fingerprint.find(' ', idx)) >= 0 ; )
+ fingerprint.replace( idx, 1, "" );
++ assert( subkey != 0 );
+ subkey->setFingerprint( fingerprint );
+ //kdDebug(5100)<<"Fingerprint: "<<fingerprint<<endl;
+ }
+Index: libkpgp/kpgpbase6.cpp
+===================================================================
+--- libkpgp/kpgpbase6.cpp (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ libkpgp/kpgpbase6.cpp (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -23,6 +23,7 @@
+ #include "kpgpbase.h"
+
+ #include <string.h> /* strncmp */
++#include <assert.h>
+
+ #include <qdatetime.h>
+
+@@ -665,6 +666,7 @@
+ fingerprint.replace( idx, 1, "" );
+
+ //kdDebug(5100)<<"Fingerprint: "<<fingerprint<<endl;
++ assert( subkey != 0 );
+ subkey->setFingerprint( fingerprint );
+ }
+ else
+Index: libkpgp/kpgpbase.cpp
+===================================================================
+--- libkpgp/kpgpbase.cpp (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ libkpgp/kpgpbase.cpp (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -136,12 +136,15 @@
+ // poll for "There is data to read."
+ pollout.fd = pout[0];
+ pollout.events = POLLIN;
++ pollout.revents = 0; // init with 0, just in case
+ pollerr.fd = perr[0];
+ pollerr.events = POLLIN;
++ pollerr.revents = 0; // init with 0, just in case
+
+ // poll for "Writing now will not block."
+ pollin.fd = pin[1];
+ pollin.events = POLLOUT;
++ pollin.revents = 0; // init with 0, just in case
+
+ if (!onlyReadFromPGP) {
+ if (!input.isEmpty()) {
+Index: kmail/kmail.antispamrc
+===================================================================
+--- kmail/kmail.antispamrc (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kmail/kmail.antispamrc (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -1,5 +1,5 @@
+ [General]
+-tools=8
++tools=10
+
+ [Spamtool #1]
+ Ident=spamassassin
+@@ -71,7 +71,7 @@
+ [Spamtool #4]
+ Ident=gmx-antispam
+ Version=1
+-Priority=60
++Priority=71
+ VisibleName=GMX Spam Filter
+ Executable=echo
+ URL=http://www.gmx.net/de/produkte/virenschutz/index.html
+@@ -142,7 +142,7 @@
+ [Spamtool #8]
+ Ident=spamassassin
+ Version=1
+-Priority=40
++Priority=41
+ VisibleName=SpamAssassin 3.x (Perl)
+ Executable=spamassassin -V | grep "SpamAssassin version 3"
+ URL=http://spamassassin.org
+@@ -162,3 +162,46 @@
+ ScoreType=Adjusted
+ ScoreValueRegexp=(?:hits|score)=([\d\.-]+)\s
+ ScoreThresholdRegexp=required=([\d\.-]+)\s
++
++[Spamtool #9]
++Ident=bsfilter
++Version=1
++Priority=55
++VisibleName=Bsfilter
++Executable=bsfilter --help > /dev/null
++URL=http://bsfilter.org/
++PipeFilterName=Bsfilter Check
++PipeCmdDetect=bsfilter --pipe --insert-flag --insert-probability
++ExecCmdSpam=bsfilter --add-spam --update
++ExecCmdHam=bsfilter --add-clean --update
++DetectionHeader=X-Spam-Flag
++DetectionPattern=Yes
++DetectionPattern2=
++DetectionOnly=0
++UseRegExp=0
++SupportsBayes=1
++SupportsUnsure=0
++ScoreName=Bsfilter
++ScoreHeader=X-Spam-Probability
++ScoreType=Decimal
++ScoreValueRegexp=(.+)
++ScoreThresholdRegexp=
++
++[Spamtool #10]
++Ident=dspam
++Version=1
++Priority=70
++VisibleName=DSpam 3.x
++URL=http://dspam.nuclearelephant.org
++HeadersOnly=yes
++DetectionHeader=X-DSPAM-Result
++DetectionPattern=Spam
++DetectionOnly=0
++UseRegExp=0
++ScoreName=DSpam
++SupportsUnsure=0
++ScoreHeader=X-DSPAM-Probability
++ConfidenceHeader=X-DSPAM-Confidence
++ScoreType=Decimal
++ScoreValueRegexp=([\d\.]+)\s*
++ScoreConfidenceRegexp=([\d\.]+)\s*
+Index: kmail/kmheaders.cpp
+===================================================================
+--- kmail/kmheaders.cpp (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kmail/kmheaders.cpp (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -37,6 +37,7 @@
+ #include <kdebug.h>
+
+ #include <qbuffer.h>
++#include <qeventloop.h>
+ #include <qfile.h>
+ #include <qheader.h>
+ #include <qptrstack.h>
+@@ -1354,10 +1355,16 @@
+ START_TIMER(filter);
+
+ KCursorSaver busy( KBusyPtr::busy() );
+- int counter = 0;
++ int msgCount = 0;
++ int msgCountToFilter = msgList->count();
+ for (KMMsgBase* msgBase=msgList->first(); msgBase; msgBase=msgList->next()) {
+- if ( !( ++counter % 20 ) )
+- KApplication::kApplication()->processEvents( 50 );
++ int diff = msgCountToFilter - ++msgCount;
++ if ( diff < 10 || !( msgCount % 20 ) ) {
++ QString statusMsg = i18n("Filtering message %1 of %2");
++ statusMsg = statusMsg.arg( msgCount ).arg( msgCountToFilter );
++ KPIM::BroadcastStatus::instance()->setStatusMsg( statusMsg );
++ KApplication::kApplication()->eventLoop()->processEvents( QEventLoop::ExcludeUserInput, 50 );
++ }
+ int idx = msgBase->parent()->find(msgBase);
+ assert(idx != -1);
+ KMMessage * msg = msgBase->parent()->getMsg(idx);
+@@ -1365,12 +1372,12 @@
+ msg->setTransferInProgress(true);
+ if ( !msg->isComplete() )
+ {
+- FolderJob *job = mFolder->createJob(msg);
+- connect(job, SIGNAL(messageRetrieved(KMMessage*)),
+- SLOT(slotFilterMsg(KMMessage*)));
+- job->start();
++ FolderJob *job = mFolder->createJob(msg);
++ connect(job, SIGNAL(messageRetrieved(KMMessage*)),
++ SLOT(slotFilterMsg(KMMessage*)));
++ job->start();
+ } else {
+- if (slotFilterMsg(msg) == 2) break;
++ if (slotFilterMsg(msg) == 2) break;
+ }
+ }
+ END_TIMER(filter);
+Index: kmail/dcopimap.desktop
+===================================================================
+--- kmail/dcopimap.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kmail/dcopimap.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -44,3 +44,4 @@
+ Comment[tr]=DCOP arayüzü ile posta programı
+ Comment[uk]=ÐÑогÑама Ð´Ð»Ñ ÑобоÑи з ел. поÑÑÐ¾Ñ Ð· ÑнÑеÑÑейÑом DCOP
+ Comment[zh_CN]=å
·æ DCOP æ¥å£çé®ä»¶ç¨åº
++Comment[zh_TW]=æ DCOP ä»é¢çéµä»¶ç¨å¼
+Index: kmail/profiles/profile-high-contrast-rc.desktop
+===================================================================
+--- kmail/profiles/profile-high-contrast-rc.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kmail/profiles/profile-high-contrast-rc.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -45,6 +45,7 @@
+ Name[tr]=Yüksek Kontrast
+ Name[uk]=ÐиÑока конÑÑаÑÑнÑÑÑÑ
+ Name[zh_CN]=é«å¯¹æ¯
++Name[zh_TW]=é«åå·®
+ Comment=Increased font sizes for visually impaired users
+ Comment[ar]=Ø®Ø·ÙØ· Ø¨Ø£ØØ¬Ø§Ù
Ø£ÙØ¨Ø± ÙØ¶Ø¹Ø§Ù Ø§ÙØ¨ØµØ±
+ Comment[az]=GörmÉ pozuqluÄu olanlar üçün böyüdülmüŠyazı növlÉri
+@@ -63,6 +64,7 @@
+ Comment[fi]=Suurennettu kirjasinkoko heikkonäköisille käyttäjille
+ Comment[fr]=Des polices de caractères plus grandes pour les malvoyants
+ Comment[gl]=Tamaños de fonte aumentados para usuarios con discapacidade visual
++Comment[he]=×××¤× ×× ×××××× ×¢××ר ×× ×©×× ××¢×× ×××§××× ×¨××××
+ Comment[hi]=à¤à¤® दिà¤à¤¾à¤ दà¥à¤¨à¥ वालॠà¤à¤ªà¤¯à¥à¤à¥à¤¤à¤¾à¤à¤ à¤à¥ लिठफ़à¥à¤¨à¥à¤ à¤à¤à¤¾à¤° बढ़ाà¤à¤
+ Comment[hr]=PoveÄana pisma za korisnike sa slabijim vidom
+ Comment[hu]=Nagyobb betűméretek látáscsökkent felhasználóknak
+@@ -96,6 +98,7 @@
+ Comment[vi]=TÄng cỡ font cho ngưá»i dùng tà n táºt
+ Comment[xh]=Ubungakanani bobukhulu begama bunyusiwe kubasebenzisi ababonayo
+ Comment[zh_CN]=对æè§è§éç¢çç¨æ·å¢å åä½å¤§å°
++Comment[zh_TW]=éå¢åå大å°ä»¥é©åè¦è¦ºéç¤è
+ Comment[zu]=Abakhushululiweyo osayizi befont kwabantu abayizimpumputhe
+
+ [Reader]
+Index: kmail/profiles/profile-default-rc.desktop
+===================================================================
+--- kmail/profiles/profile-default-rc.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kmail/profiles/profile-default-rc.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -60,6 +60,7 @@
+ Name[vi]=Mặc Äá»nh
+ Name[xh]=Engagqibekanga
+ Name[zh_CN]=é»è®¤
++Name[zh_TW]=é è¨
+ Name[zu]=Engaqedekanga
+ Comment=Standard profile
+ Comment[ar]=Ø§ÙØªØ´ÙÙ٠اÙÙÙØ§Ø³Ù
+@@ -117,6 +118,7 @@
+ Comment[vi]=HỠsơ chuẩn
+ Comment[xh]=Imboniselo yabucala esezantsi
+ Comment[zh_CN]=æ åé
ç½®æä»¶
++Comment[zh_TW]=æ¨æºè¨å®
+ Comment[zu]=Iprofayela Elingeneyo
+
+ [Reader]
+Index: kmail/profiles/profile-html-rc.desktop
+===================================================================
+--- kmail/profiles/profile-html-rc.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kmail/profiles/profile-html-rc.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -52,6 +52,7 @@
+ Comment[vi]=Há» sÆ¡ chuẩn cho phép xem trưá»c HTML - I't bảo máºt hÆ¡n !
+ Comment[xh]=Imboniselo yabucala esezantsi nge HTML imboniso yenziwe - ukhuseleko oluncinane!
+ Comment[zh_CN]=å¯ç¨ HTML é¢è§çæ åé
ç½®æä»¶ - æ´ä¸å®å
¨ï¼
++Comment[zh_TW]=æ¨æºè¨å®ï¼HTML é 覽éå - è¼ä¸å®å
¨!
+ Comment[zu]=Yenza ngokulingeneyo iprofayela nge HTML okokukhombisa ngaphambili kwenzeliwe - okuncane ukuvikeleka!
+
+ [Reader]
+Index: kmail/profiles/profile-purist-rc.desktop
+===================================================================
+--- kmail/profiles/profile-purist-rc.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kmail/profiles/profile-purist-rc.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -38,6 +38,7 @@
+ Name[ven]=Zwo kunaho
+ Name[xh]=isiPurist
+ Name[zh_CN]=ä¸¥æ ¼
++Name[zh_TW]=è¼å®å
¨
+ Name[zu]=Okuhlanzekileyo
+ Comment=Most features turned off, KDE global settings are used
+ Comment[ar]=Ø£ØºÙØ¨ اÙÙ
ÙØ²Ø§Øª غبر عاÙ
ÙØ©, Ø³ÙØªÙ
استخداÙ
اعدادات KDE Ø§ÙØ¹Ø§Ù
Ø©
+@@ -90,6 +91,7 @@
+ Comment[vi]=Hầu hết các chức nÄng tắt, Thiết láºp toà n cục cá»§a KDE ÄÆ°á»£c dùng
+ Comment[xh]=Imisebenzi emininzi icinyiwe, izicwangciso ezingqukuva ze KDE ziyasetyenziswa
+ Comment[zh_CN]=å
³é大夿°ç¹æ§ï¼ä½¿ç¨ KDE å
¨å±è®¾ç½®
++Comment[zh_TW]=大é¨ä»½åè½é½ééï¼ä½¿ç¨ KDE å
¨åè¨å®
+ Comment[zu]=Eziningi izinto azikhanyiswanga, ezezizwe izilungiselo ze KDE ziyasetshenziswa
+
+ [Reader]
+Index: kmail/profiles/profile-secure-rc.desktop
+===================================================================
+--- kmail/profiles/profile-secure-rc.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kmail/profiles/profile-secure-rc.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -45,6 +45,7 @@
+ Name[uk]=ÐайбÑлÑÑ Ð±ÐµÐ·Ð¿ÐµÑний
+ Name[uz]=ÐÑда Ñ
авÑÑиз
+ Name[zh_CN]=æå®å
¨
++Name[zh_TW]=æå®å
¨
+ Comment=Sets all necessary options to achieve maximum security
+ Comment[bg]=Режим, в койÑо вÑиÑки наÑÑÑойки за ÑигÑÑноÑÑ Ð·Ð° вклÑÑени
+ Comment[bs]=Postavlja sve potrebne opcije radi maksimalne sigurnosti
+@@ -65,7 +66,7 @@
+ Comment[hu]=Az összes beállÃtás a legbiztonságosabb értékre állÃtva
+ Comment[is]=Setur allar stillingar þannig að öryggið sé mest
+ Comment[it]=Imposta tutte le opzioni necessario per ottenere la massima sicurezza
+-Comment[ja]=æå¤§ã®ã»ãã¥ãªãã£ç¢ºä¿ã®ããã«å¿
è¦ãªå
¨ã¦ã®ãªãã·ã§ã³ãè¨å®ãã¾ã
++Comment[ja]=æå¤§ã®ã»ãã¥ãªãã£ç¢ºä¿ã®ããã«å¿
è¦ãªãã¹ã¦ã®ãªãã·ã§ã³ãè¨å®ãã¾ã
+ Comment[km]=áááááâááááá¾áâá
á¶ááá¶á
áâáá¶ááá¢áá áá¾áááá¸âááá½áâáá¶áâáá»ááááá·áá¶áâáááááâáááá»á
+ Comment[lt]=Nustato visas būtinas maksimaliam saugumui parinktis
+ Comment[ms]=Mengeset semua opsyen yang perlu untuk mencapai keselamatan maksimum
+@@ -88,6 +89,7 @@
+ Comment[tr]=En yüksek güvenliÄi yakalamak için gerekli bütün takım seçenekleri
+ Comment[uk]=ÐÑÑановлÑÑ Ð²ÑÑ Ð½ÐµÐ¾Ð±Ñ
ÑÐ´Ð½Ñ Ð¿Ð°ÑамеÑÑи Ð´Ð»Ñ Ð·Ð°Ð±ÐµÐ·Ð¿ÐµÑÐµÐ½Ð½Ñ Ð¼Ð°ÐºÑималÑÐ½Ð¾Ñ Ð±ÐµÐ·Ð¿ÐµÐºÐ¸
+ Comment[zh_CN]=设置ææå¿
è¦çé项æ¥è¾¾å°æå¤§çå®å
¨æ§
++Comment[zh_TW]=å°ææè¨å®è¨çºæé«å®å
¨çæ
+
+ [Composer]
+ pgp-auto-sign=true
+Index: kmail/kmmsgpart.cpp
+===================================================================
+--- kmail/kmmsgpart.cpp (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kmail/kmmsgpart.cpp (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -187,6 +187,7 @@
+ default:
+ kdWarning(5006) << "setBodyEncoded: unknown encoding '" << cteStr()
+ << "'. Assuming binary." << endl;
++ // fall through
+ case DwMime::kCte7bit:
+ case DwMime::kCte8bit:
+ case DwMime::kCteBinary:
+@@ -265,6 +266,7 @@
+ default:
+ kdWarning(5006) << "setBodyEncodedBinary: unknown encoding '" << cteStr()
+ << "'. Assuming binary." << endl;
++ // fall through
+ case DwMime::kCte7bit:
+ case DwMime::kCte8bit:
+ case DwMime::kCteBinary:
+Index: kmail/kmsystemtray.cpp
+===================================================================
+--- kmail/kmsystemtray.cpp (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kmail/kmsystemtray.cpp (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -164,6 +164,7 @@
+ hide();
+ else if ( mCount > 0 && isHidden() )
+ show();
++ break;
+ default:
+ kdDebug(5006) << k_funcinfo << " Unknown systray mode " << mMode << endl;
+ }
+Index: kmail/kmail_config_misc.desktop
+===================================================================
+--- kmail/kmail_config_misc.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kmail/kmail_config_misc.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -59,6 +59,7 @@
+ Name[uk]=Ð Ñзн
+ Name[uz]=Ò²Ð°Ñ Ñ
ил
+ Name[zh_CN]=æé¡¹
++Name[zh_TW]=å
¶ä»
+ Comment=Settings that don't fit elsewhere
+ Comment[bg]=Разни наÑÑÑойки
+ Comment[bs]=Postavke koje ne spadaju nigdje drugo
+@@ -73,6 +74,7 @@
+ Comment[fi]=Muut asetukset
+ Comment[fr]=Paramètres qui ne rentrent dans aucune autre catégorie
+ Comment[gl]=Opcións que non se encadran noutro sitio
++Comment[he]=×××ר×ת ש×× ×××××ת ××××× ×¡ ×××§×× ××ר
+ Comment[hu]=A máshová nem besorolható beállÃtások
+ Comment[is]=Stillingar sem passa ekki annars staðar
+ Comment[it]=Impostazioni che non rientrano in altre categorie
+@@ -99,6 +101,7 @@
+ Comment[tr]=DiÄer bölümlere uymayan yapılandırma seçenekleri
+ Comment[uk]=ÐнÑÑ Ð¿Ð°ÑамеÑÑи
+ Comment[zh_CN]=å
¶å®è®¾ç½®
++Comment[zh_TW]=ä¸å±¬æ¼ä»»ä½å
¶ä»å°æ¹çè¨å®
+ Keywords=kmail,misc
+ Keywords[be]=K ÐоÑÑа,Ñознае,kmail,misc
+ Keywords[bg]=поÑенÑки, клиенÑ, е-поÑа, Ñазни, наÑÑÑойки, kmail, misc
+Index: kmail/newfolderdialog.cpp
+===================================================================
+--- kmail/newfolderdialog.cpp (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kmail/newfolderdialog.cpp (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -61,8 +61,8 @@
+ mFolder( folder )
+ {
+ setWFlags( getWFlags() | WDestructiveClose );
+- if ( folder ) {
+- setCaption( i18n("New Subfolder of %1").arg( folder->prettyURL() ) );
++ if ( mFolder ) {
++ setCaption( i18n("New Subfolder of %1").arg( mFolder->prettyURL() ) );
+ }
+ QWidget* privateLayoutWidget = new QWidget( this, "mTopLevelLayout" );
+ privateLayoutWidget->setGeometry( QRect( 10, 10, 260, 80 ) );
+@@ -183,24 +183,30 @@
+
+ void NewFolderDialog::slotOk()
+ {
+- const QString &fldName = mNameLineEdit->text();
++ const QString fldName = mNameLineEdit->text();
+ if ( fldName.isEmpty() ) {
+ KMessageBox::error( this, i18n("Please specify a name for the new folder."),
+ i18n( "No Name Specified" ) );
+ return;
+ }
++
++ // names of local folders must not contain a '/'
+ if ( fldName.find( '/' ) != -1 &&
+- ( !mFolder
+- || mFolder->folderType() == KMFolderTypeImap
+- || mFolder->folderType() == KMFolderTypeCachedImap ) ) {
++ ( !mFolder ||
++ ( mFolder->folderType() != KMFolderTypeImap &&
++ mFolder->folderType() != KMFolderTypeCachedImap ) ) ) {
+ KMessageBox::error( this, i18n( "Folder names cannot contain the / (slash) character; please choose another folder name." ) );
+ return;
+ }
+
++ // folder names must not start with a '.'
+ if ( fldName.startsWith( "." ) ) {
+ KMessageBox::error( this, i18n( "Folder names cannot start with a . (dot) character; please choose another folder name." ) );
+ return;
+- } else if ( mFolder &&
++ }
++
++ // names of IMAP folders must not contain the folder delimiter
++ if ( mFolder &&
+ ( mFolder->folderType() == KMFolderTypeImap ||
+ mFolder->folderType() == KMFolderTypeCachedImap ) ) {
+ QString delimiter;
+Index: kmail/messagecomposer.h
+===================================================================
+--- kmail/messagecomposer.h (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kmail/messagecomposer.h (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -270,6 +270,7 @@
+
+ // The boundary is saved for later addition into mp/a body
+ DwString mSaveBoundary;
++ QCString mMultipartMixedBoundary;
+
+ QValueList<MessageComposerJob*> mJobs;
+ bool mEncryptWithChiasmus;
+Index: kmail/kmail_config_composer.desktop
+===================================================================
+--- kmail/kmail_config_composer.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kmail/kmail_config_composer.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -56,6 +56,7 @@
+ Name[tr]=Düzenleyici
+ Name[uk]=РедакÑÐ¾Ñ Ð»Ð¸ÑÑÑв
+ Name[zh_CN]=ç¼åå¨
++Name[zh_TW]=編寫å¨
+ Comment=Phrases & General Behavior
+ Comment[bg]=ÐаÑÑÑойки на ÑедакÑоÑа
+ Comment[bs]=Fraze i opšte ponašanje
+@@ -97,6 +98,7 @@
+ Comment[tr]=Tümcecik ve Genel DavranıÅ
+ Comment[uk]=ФÑази Ñ Ð·Ð°Ð³Ð°Ð»ÑÐ½Ñ Ð¿Ð°ÑамеÑÑи
+ Comment[zh_CN]=çè¯åä¸è¬è¡ä¸º
++Comment[zh_TW]=çèªèä¸è¬è¡çº
+ Keywords=kmail,composer
+ Keywords[bg]=поÑенÑки, клиенÑ, е-поÑа, ÑедакÑоÑ, ÑÑÑÑавиÑел, ÑоÑмаÑиÑане, ÑекÑÑ, kmail, komposer
+ Keywords[bs]=kmail,composer,sastavljaÄ
+Index: kmail/kmmessage.cpp
+===================================================================
+--- kmail/kmmessage.cpp (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kmail/kmmessage.cpp (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -2831,7 +2831,7 @@
+ {
+ if (!qstricmp(param->Attribute().c_str(), "charset"))
+ aPart->setCharset(QCString(param->Value().c_str()).lower());
+- else if (!qstrnicmp(param->Attribute().c_str(), "name", 4))
++ else if (!qstrnicmp(param->Attribute().c_str(), "name*", 5))
+ aPart->setName(KMMsgBase::decodeRFC2231String(
+ param->Value().c_str()));
+ else {
+Index: kmail/kmail.upd
+===================================================================
+--- kmail/kmail.upd (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kmail/kmail.upd (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -158,6 +158,11 @@
+ Id=3.4.1
+ File=kmailrc
+ Script=kmail-3.4.1-update-status-filters.pl,perl
++# Remove the stored size so that we get a reasonable default now that we have 2 columns in the folder selection dialog
++Id=3.5.4
++File=kmailrc
++Group=FolderSelectionDialog
++RemoveKey=Size
+ #
+ # Important notice:
+ # If you add updates here, keep this text below them.
+Index: kmail/kmail_config_identity.desktop
+===================================================================
+--- kmail/kmail_config_identity.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kmail/kmail_config_identity.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -57,6 +57,7 @@
+ Name[uk]=ÐÑоÑÑлÑ
+ Name[uz]=ШаÑ
ÑиÑÑлаÑ
+ Name[zh_CN]=身份
++Name[zh_TW]=身份
+ Comment=Manage Identities
+ Comment[be]=ÐÑÑаванÑне ÑваÑабленÑнÑмÑ
+ Comment[bg]=ÐаÑÑÑойки на ÑамолиÑноÑÑÑа
+@@ -100,6 +101,7 @@
+ Comment[tr]=Kimlikleri Düzenle
+ Comment[uk]=ÐеÑÑÐ²Ð°Ð½Ð½Ñ Ð¿ÑоÑÑлÑми
+ Comment[zh_CN]=管ç身份
++Comment[zh_TW]=管ç身份
+ Keywords=kmail,identity
+ Keywords[be]=K ÐоÑÑа,ÑваÑабленÑне,kmail,identity
+ Keywords[bg]=поÑенÑки, клиенÑ, е-поÑа, ÑамолиÑноÑÑ, инÑоÑмаÑиÑ, kmail, identity
+Index: kmail/kmcommands.cpp
+===================================================================
+--- kmail/kmcommands.cpp (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kmail/kmcommands.cpp (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -56,6 +56,7 @@
+
+ #include <qtextcodec.h>
+ #include <qpopupmenu.h>
++#include <qeventloop.h>
+
+ #include <libemailfunctions/email.h>
+ #include <kdebug.h>
+@@ -1472,13 +1473,17 @@
+ if( msg->parent() )
+ kmkernel->filterMgr()->tempOpenFolder(msg->parent());
+
+- int counter = 0;
++ int msgCount = 0;
++ int msgCountToFilter = msgList.count();
+ for (KMMessage *msg = msgList.first(); msg; msg = msgList.next()) {
++ int diff = msgCountToFilter - ++msgCount;
++ if ( diff < 10 || !( msgCount % 20 ) ) {
++ QString statusMsg = i18n("Filtering message %1 of %2");
++ statusMsg = statusMsg.arg( msgCount ).arg( msgCountToFilter );
++ KPIM::BroadcastStatus::instance()->setStatusMsg( statusMsg );
++ KApplication::kApplication()->eventLoop()->processEvents( QEventLoop::ExcludeUserInput, 50 );
++ }
+ msg->setTransferInProgress(false);
+-
+- if ( !( ++counter % 20 ) )
+- KApplication::kApplication()->processEvents( 50 );
+-
+ int filterResult = kmkernel->filterMgr()->process(msg, mFilter);
+ if (filterResult == 2) {
+ // something went horribly wrong (out of space?)
+@@ -1882,6 +1887,7 @@
+ int index;
+ QPtrList<KMMessage> list;
+ int undoId = -1;
++ mCompleteWithAddedMsg = false;
+
+ if (mDestFolder) {
+ connect (mDestFolder, SIGNAL(msgAdded(KMFolder*, Q_UINT32)),
+@@ -1927,6 +1933,11 @@
+ list.append(msg);
+ } else {
+ // We are moving to a local folder.
++ if ( srcFolder->folderType() == KMFolderTypeImap )
++ {
++ // do not complete here but wait until all messages are transferred
++ mCompleteWithAddedMsg = true;
++ }
+ rc = mDestFolder->moveMsg(msg, &index);
+ if (rc == 0 && index != -1) {
+ KMMsgBase *mb = mDestFolder->unGetMsg( mDestFolder->count() - 1 );
+@@ -1965,8 +1976,10 @@
+ it.key()->removeMsg(*it.data());
+ delete it.data();
+ }
+-// Result result = ( mLostBoys.isEmpty() ? OK : Failed );
+- completeMove( OK );
++ if ( !mCompleteWithAddedMsg ) {
++ // imap folders will be completed in slotMsgAddedToDestFolder
++ completeMove( OK );
++ }
+ }
+
+ return OK;
+@@ -2009,6 +2022,9 @@
+ if (mDestFolder && mDestFolder->folderType() != KMFolderTypeImap) {
+ mDestFolder->sync();
+ }
++ if ( mCompleteWithAddedMsg ) {
++ completeMove( OK );
++ }
+ } else {
+ if ( mProgressItem ) {
+ mProgressItem->incCompletedItems();
+Index: kmail/kmstartup.cpp
+===================================================================
+--- kmail/kmstartup.cpp (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kmail/kmstartup.cpp (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -113,7 +113,8 @@
+ "3.4-misc",
+ "3.4a",
+ "3.4b",
+- "3.4.1"
++ "3.4.1",
++ "3.5.4"
+ };
+ static const int numUpdates = sizeof updates / sizeof *updates;
+ // Warning: do not remove entries in the above array, or the update-level check below will break
+Index: kmail/messagecomposer.cpp
+===================================================================
+--- kmail/messagecomposer.cpp (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kmail/messagecomposer.cpp (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -1406,25 +1406,30 @@
+ kdDebug(5006) << "mEarlyAddAttachments=" << mEarlyAddAttachments << " mAllAttachmentsAreInBody=" << mAllAttachmentsAreInBody << endl;
+
+ // if an html message is to be generated, make a text/plain and text/html part
+- if ( mIsRichText ) {
+- mOldBodyPart.setTypeStr( "multipart");
+- mOldBodyPart.setSubtypeStr(mEarlyAddAttachments ? "mixed" : "alternative");
++ mMultipartMixedBoundary = "";
++ if ( mEarlyAddAttachments ) {
++ mOldBodyPart.setTypeStr( "multipart" );
++ mOldBodyPart.setSubtypeStr( "mixed" );
++ // calculate a boundary string
++ DwMediaType tmpCT;
++ tmpCT.CreateBoundary( ++mPreviousBoundaryLevel );
++ mMultipartMixedBoundary = tmpCT.Boundary().c_str();
+ }
+- else if( mEarlyAddAttachments ) {
++ else if ( mIsRichText ) {
+ mOldBodyPart.setTypeStr( "multipart" );
+- mOldBodyPart.setSubtypeStr( "mixed" );
+- } else
++ mOldBodyPart.setSubtypeStr( "alternative" );
++ }
++ else
+ mOldBodyPart.setOriginalContentTypeStr( oldContentType.utf8() );
+
+ mOldBodyPart.setContentDisposition( "inline" );
+
+- QCString boundaryCStr;
+ if ( mIsRichText ) { // create a multipart body
+ // calculate a boundary string
+ QCString boundaryCStr; // storing boundary string data
+ QCString newbody;
+ DwMediaType tmpCT;
+- tmpCT.CreateBoundary( mPreviousBoundaryLevel++ ); // was 0
++ tmpCT.CreateBoundary( ++mPreviousBoundaryLevel );
+ boundaryCStr = tmpCT.Boundary().c_str();
+ QValueList<int> allowedCTEs;
+
+@@ -1501,11 +1506,6 @@
+ }
+
+ if( mEarlyAddAttachments ) {
+- // calculate a boundary string
+- ++mPreviousBoundaryLevel;
+- DwMediaType tmpCT;
+- tmpCT.CreateBoundary( mPreviousBoundaryLevel );
+- boundaryCStr = tmpCT.Boundary().c_str();
+ // add the normal body text
+ KMMessagePart innerBodyPart;
+ if ( mIsRichText ) {
+@@ -1535,11 +1535,11 @@
+ bStr += "\"";
+ body = innerDwPart->AsString().c_str();
+ body.insert( boundPos, bStr );
+- body = "--" + boundaryCStr + "\n" + body;
++ body = "--" + mMultipartMixedBoundary + "\n" + body;
+ }
+ }
+ else
+- body = "--" + boundaryCStr + "\n" + innerDwPart->AsString().c_str();
++ body = "--" + mMultipartMixedBoundary + "\n" + innerDwPart->AsString().c_str();
+ delete innerDwPart;
+ innerDwPart = 0;
+ // add all matching Attachments
+@@ -1548,12 +1548,12 @@
+ if ( it->encrypt == doEncryptBody && it->sign == doSignBody ) {
+ innerDwPart = theMessage.createDWBodyPart( it->part );
+ innerDwPart->Assemble();
+- body += "\n--" + boundaryCStr + "\n" + innerDwPart->AsString().c_str();
++ body += "\n--" + mMultipartMixedBoundary + "\n" + innerDwPart->AsString().c_str();
+ delete innerDwPart;
+ innerDwPart = 0;
+ }
+ }
+- body += "\n--" + boundaryCStr + "--\n";
++ body += "\n--" + mMultipartMixedBoundary + "--\n";
+ } else { // !earlyAddAttachments
+ QValueList<int> allowedCTEs;
+ // the signed body must not be 8bit encoded
+@@ -1588,12 +1588,12 @@
+ dwPart = 0;
+
+ // manually add a boundary definition to the Content-Type header
+- if( !boundaryCStr.isEmpty() ) {
++ if( !mMultipartMixedBoundary.isEmpty() ) {
+ int boundPos = mEncodedBody.find( '\n' );
+ if( -1 < boundPos ) {
+ // insert new "boundary" parameter
+ QCString bStr( ";\n boundary=\"" );
+- bStr += boundaryCStr;
++ bStr += mMultipartMixedBoundary;
+ bStr += "\"";
+ mEncodedBody.insert( boundPos, bStr );
+ }
+@@ -1858,8 +1858,14 @@
+ msg->headers().ContentType().Parse();
+ kdDebug(5006) << "MessageComposer::addBodyAndAttachments() : set top level Content-Type from originalContentTypeStr()=" << ourFineBodyPart.originalContentTypeStr() << endl;
+ } else {
+- msg->headers().ContentType().FromString( ourFineBodyPart.typeStr() + "/" + ourFineBodyPart.subtypeStr() );
+- kdDebug(5006) << "MessageComposer::addBodyAndAttachments() : set top level Content-Type to " << ourFineBodyPart.typeStr() << "/" << ourFineBodyPart.subtypeStr() << endl;
++ QCString ct = ourFineBodyPart.typeStr() + "/" + ourFineBodyPart.subtypeStr();
++ if ( ct == "multipart/mixed" )
++ ct += ";\n\tboundary=\"" + mMultipartMixedBoundary + '"';
++ else if ( ct == "multipart/alternative" )
++ ct += ";\n\tboundary=\"" + QCString(mSaveBoundary.c_str()) + '"';
++ msg->headers().ContentType().FromString( ct );
++ msg->headers().ContentType().Parse();
++ kdDebug(5006) << "MessageComposer::addBodyAndAttachments() : set top level Content-Type to " << ct << endl;
+ }
+ if ( !ourFineBodyPart.charset().isEmpty() )
+ msg->setCharset( ourFineBodyPart.charset() );
+@@ -1874,10 +1880,6 @@
+ kdDebug(5006) << "MessageComposer::addBodyAndAttachments() : top level headers and body adjusted" << endl;
+
+ // set body content
+- if ( mIsRichText && !(doSign || doEncrypt) ) { // add the boundary to the header
+- msg->headers().ContentType().SetBoundary( mSaveBoundary );
+- msg->headers().ContentType().Assemble();
+- }
+ msg->setBody(ourFineBodyPart.body() );
+
+ }
+Index: kmail/renamejob.cpp
+===================================================================
+--- kmail/renamejob.cpp (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kmail/renamejob.cpp (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -305,28 +305,8 @@
+ emit renameDone( mNewName, true );
+ } else
+ {
+- kdDebug(5006) << "rollback - deleting folder" << endl;
+ // move failed - rollback the last transaction
+ kmkernel->undoStack()->undo();
+- // .. and delete the new folder
+- if ( mNewFolder->folderType() == KMFolderTypeImap )
+- {
+- kmkernel->imapFolderMgr()->remove( mNewFolder );
+- } else if ( mNewFolder->folderType() == KMFolderTypeCachedImap )
+- {
+- // tell the account (see KMFolderCachedImap::listDirectory2)
+- KMFolderCachedImap* folder = static_cast<KMFolderCachedImap*>(mNewFolder->storage());
+- KMAcctCachedImap* acct = folder->account();
+- if ( acct )
+- acct->addDeletedFolder( folder->imapPath() );
+- kmkernel->dimapFolderMgr()->remove( mNewFolder );
+- } else if ( mNewFolder->folderType() == KMFolderTypeSearch )
+- {
+- // invalid
+- kdWarning(5006) << k_funcinfo << "cannot remove a search folder" << endl;
+- } else {
+- kmkernel->folderMgr()->remove( mNewFolder );
+- }
+
+ emit renameDone( mNewName, false );
+ }
+Index: kmail/eventsrc
+===================================================================
+--- kmail/eventsrc (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kmail/eventsrc (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -52,6 +52,7 @@
+ Name[uk]=ÐÑÑимана нова поÑÑа
+ Name[uz]=Янги Ñ
Ð°Ñ ÐºÐµÐ»Ð´Ð¸
+ Name[zh_CN]=æ°é®ä»¶å°è¾¾
++Name[zh_TW]=æ¨ææ°éµä»¶
+ Comment=New mail arrived
+ Comment[bg]=ÐмаÑе ново пиÑмо
+ Comment[br]=Deuet eo ur postel nevez
+@@ -97,6 +98,7 @@
+ Comment[uk]=ÐадÑйÑла нова поÑÑа
+ Comment[uz]=Янги Ñ
Ð°Ñ ÐºÐµÐ»Ð´Ð¸
+ Comment[zh_CN]=æ°é®ä»¶å°è¾¾
++Comment[zh_TW]=æ¨ææ°éµä»¶
+ default_sound=
+ default_presentation=0
+ # None = 0, Sound = 1, Messagebox = 2, Logfile = 4, Stderr = 8, PassivePopup = 16, Execute = 32
+Index: kmail/headerstyle.cpp
+===================================================================
+--- kmail/headerstyle.cpp (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kmail/headerstyle.cpp (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -247,15 +247,19 @@
+ dateString = message->dateStr();
+ }
+
+- QString headerStr = QString("<div class=\"header\" dir=\"%1\">").arg(dir);
++ QString headerStr;
+
+ if ( strategy->headersToDisplay().isEmpty()
+ && strategy->defaultPolicy() == HeaderStrategy::Display ) {
+- // crude way to emulate "all" headers:
++ // crude way to emulate "all" headers - Note: no strings have
++ // i18n(), so direction should always be ltr.
++ headerStr= QString("<div class=\"header\" dir=\"ltr\">");
+ headerStr += formatAllMessageHeaders( message );
+ return headerStr + "</div>";
+ }
+
++ headerStr = QString("<div class=\"header\" dir=\"%1\">").arg(dir);
++
+ //case HdrLong:
+ if ( strategy->showHeader( "subject" ) )
+ headerStr += QString("<div dir=\"%1\"><b style=\"font-size:130%\">" +
+Index: kmail/kmfolderseldlg.h
+===================================================================
+--- kmail/kmfolderseldlg.h (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kmail/kmfolderseldlg.h (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -34,19 +34,29 @@
+ void setFolder( KMFolder* );
+ void setFolder( const QString& idString );
+
++ /** Apply the given filter. */
++ void applyFilter( const QString& filter );
++
+ public slots:
+ void addChildFolder();
+
+ protected slots:
+ void slotContextMenuRequested( QListViewItem *, const QPoint & );
++ virtual void recolorRows();
+
+ protected:
+ /** Read color options and set palette. */
+ virtual void readColorConfig(void);
++ virtual void keyPressEvent( QKeyEvent *e );
+
++ /** Folder and path column IDs. */
++ friend class KMFolderSelDlg;
++ int mFolderColumn;
++ int mPathColumn;
++
+ private:
+ KMFolderTree* mFolderTree;
+- int mFolderColumn;
++ QString mFilter;
+ bool mLastMustBeReadWrite;
+ bool mLastShowOutbox;
+ bool mLastShowImapFolders;
+Index: kmail/kmmainwidget.cpp
+===================================================================
+--- kmail/kmmainwidget.cpp (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kmail/kmmainwidget.cpp (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -38,6 +38,7 @@
+ #include <kstandarddirs.h>
+ #include <dcopclient.h>
+ #include <kaddrbook.h>
++#include <kaccel.h>
+
+ #include "globalsettings.h"
+ #include "kcursorsaver.h"
+@@ -126,8 +127,7 @@
+ QWidget(parent, name),
+ mQuickSearchLine( 0 ),
+ mShowBusySplashTimer( 0 ),
+- mShowingOfflineScreen( false ),
+- mAccel( 0 )
++ mShowingOfflineScreen( false )
+ {
+ // must be the first line of the constructor:
+ mStartupDone = FALSE;
+@@ -473,8 +473,6 @@
+ //-----------------------------------------------------------------------------
+ void KMMainWidget::createWidgets(void)
+ {
+- mAccel = new QAccel(this, "createWidgets()");
+-
+ // Create the splitters according to the layout settings
+ QWidget *headerParent = 0, *folderParent = 0,
+ *mimeParent = 0, *messageParent = 0;
+@@ -544,9 +542,10 @@
+ this, SLOT(slotMsgActivated(KMMessage*)));
+ connect( mHeaders, SIGNAL( selectionChanged() ),
+ SLOT( startUpdateMessageActionsTimer() ) );
+- mAccel->connectItem(mAccel->insertItem(SHIFT+Key_Left),
++ QAccel *accel = actionCollection()->kaccel();
++ accel->connectItem(accel->insertItem(SHIFT+Key_Left),
+ mHeaders, SLOT(selectPrevMessage()));
+- mAccel->connectItem(mAccel->insertItem(SHIFT+Key_Right),
++ accel->connectItem(accel->insertItem(SHIFT+Key_Right),
+ mHeaders, SLOT(selectNextMessage()));
+
+ if (mReaderWindowActive) {
+@@ -562,33 +561,34 @@
+ mMsgView, SLOT(clearCache()));
+ connect(mMsgView, SIGNAL(noDrag()),
+ mHeaders, SLOT(slotNoDrag()));
+- mAccel->connectItem(mAccel->insertItem(Key_Up),
++ accel->connectItem(accel->insertItem(Key_Up),
+ mMsgView, SLOT(slotScrollUp()));
+- mAccel->connectItem(mAccel->insertItem(Key_Down),
++ accel->connectItem(accel->insertItem(Key_Down),
+ mMsgView, SLOT(slotScrollDown()));
+- mAccel->connectItem(mAccel->insertItem(Key_Prior),
++ accel->connectItem(accel->insertItem(Key_Prior),
+ mMsgView, SLOT(slotScrollPrior()));
+- mAccel->connectItem(mAccel->insertItem(Key_Next),
++ accel->connectItem(accel->insertItem(Key_Next),
+ mMsgView, SLOT(slotScrollNext()));
+ } else {
+ mMsgView = NULL;
+ }
+
+- new KAction( i18n("Move Message to Folder"), Key_M, this,
++ KAction *action;
++
++ action = new KAction( i18n("Move Message to Folder"), Key_M, this,
+ SLOT(slotMoveMsg()), actionCollection(),
+ "move_message_to_folder" );
+- new KAction( i18n("Copy Message to Folder"), Key_C, this,
++ action->plugAccel( actionCollection()->kaccel() );
++
++ action = new KAction( i18n("Copy Message to Folder"), Key_C, this,
+ SLOT(slotCopyMsg()), actionCollection(),
+ "copy_message_to_folder" );
+- new KAction( i18n("Jump to Folder"), Key_J, this,
++ action->plugAccel( actionCollection()->kaccel() );
++
++ action = new KAction( i18n("Jump to Folder"), Key_J, this,
+ SLOT(slotJumpToFolder()), actionCollection(),
+ "jump_to_folder" );
+- mAccel->connectItem(mAccel->insertItem(Key_M),
+- this, SLOT(slotMoveMsg()) );
+- mAccel->connectItem(mAccel->insertItem(Key_C),
+- this, SLOT(slotCopyMsg()) );
+- mAccel->connectItem(mAccel->insertItem(Key_J),
+- this, SLOT(slotJumpToFolder()) );
++ action->plugAccel( actionCollection()->kaccel() );
+
+ // create list of folders
+ mFolderTree = new KMFolderTree(this, folderParent, "folderTree");
+@@ -607,50 +607,45 @@
+ this, SLOT(slotFolderTreeColumnsChanged()));
+
+ //Commands not worthy of menu items, but that deserve configurable keybindings
+- new KAction(
++ action = new KAction(
+ i18n("Remove Duplicate Messages"), CTRL+Key_Asterisk, this,
+ SLOT(removeDuplicates()), actionCollection(), "remove_duplicate_messages");
++ action->plugAccel( actionCollection()->kaccel() );
+
+- new KAction(
++ action = new KAction(
+ i18n("Abort Current Operation"), Key_Escape, ProgressManager::instance(),
+ SLOT(slotAbortAll()), actionCollection(), "cancel" );
+- mAccel->connectItem(mAccel->insertItem(Key_Escape),
+- ProgressManager::instance(), SLOT(slotAbortAll()));
++ action->plugAccel( actionCollection()->kaccel() );
+
+- new KAction(
++ action = new KAction(
+ i18n("Focus on Next Folder"), CTRL+Key_Right, mFolderTree,
+ SLOT(incCurrentFolder()), actionCollection(), "inc_current_folder");
+- mAccel->connectItem(mAccel->insertItem(CTRL+Key_Right),
+- mFolderTree, SLOT(incCurrentFolder()));
++ action->plugAccel( actionCollection()->kaccel() );
+
+- new KAction(
++ action = new KAction(
+ i18n("Focus on Previous Folder"), CTRL+Key_Left, mFolderTree,
+ SLOT(decCurrentFolder()), actionCollection(), "dec_current_folder");
+- mAccel->connectItem(mAccel->insertItem(CTRL+Key_Left),
+- mFolderTree, SLOT(decCurrentFolder()));
++ action->plugAccel( actionCollection()->kaccel() );
+
+- new KAction(
++ action = new KAction(
+ i18n("Select Folder with Focus"), CTRL+Key_Space, mFolderTree,
+ SLOT(selectCurrentFolder()), actionCollection(), "select_current_folder");
+- mAccel->connectItem(mAccel->insertItem(CTRL+Key_Space),
+- mFolderTree, SLOT(selectCurrentFolder()));
+- new KAction(
++ action->plugAccel( actionCollection()->kaccel() );
++
++ action = new KAction(
+ i18n("Focus on Next Message"), ALT+Key_Right, mHeaders,
+ SLOT(incCurrentMessage()), actionCollection(), "inc_current_message");
+- mAccel->connectItem( mAccel->insertItem( ALT+Key_Right ),
+- mHeaders, SLOT( incCurrentMessage() ) );
++ action->plugAccel( actionCollection()->kaccel() );
+
+- new KAction(
++ action = new KAction(
+ i18n("Focus on Previous Message"), ALT+Key_Left, mHeaders,
+ SLOT(decCurrentMessage()), actionCollection(), "dec_current_message");
+- mAccel->connectItem( mAccel->insertItem( ALT+Key_Left ),
+- mHeaders, SLOT( decCurrentMessage() ) );
++ action->plugAccel( actionCollection()->kaccel() );
+
+- new KAction(
++ action = new KAction(
+ i18n("Select Message with Focus"), ALT+Key_Space, mHeaders,
+ SLOT( selectCurrentMessage() ), actionCollection(), "select_current_message");
+- mAccel->connectItem( mAccel->insertItem( ALT+Key_Space ),
+- mHeaders, SLOT( selectCurrentMessage() ) );
++ action->plugAccel( actionCollection()->kaccel() );
+
+ connect( kmkernel->outboxFolder(), SIGNAL( msgRemoved(int, QString) ),
+ SLOT( startUpdateMessageActionsTimer() ) );
+@@ -3516,8 +3511,7 @@
+ //-----------------------------------------------------------------------------
+ void KMMainWidget::setAccelsEnabled( bool enabled )
+ {
+- if ( mAccel )
+- mAccel->setEnabled( enabled );
++ actionCollection()->kaccel()->setEnabled( enabled );
+ }
+
+
+Index: kmail/imapjob.cpp
+===================================================================
+--- kmail/imapjob.cpp (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kmail/imapjob.cpp (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -276,7 +276,7 @@
+ {
+ KMMessage *msg = mMsgList.first();
+ KMFolderImap *msgParent = msg ? static_cast<KMFolderImap*>(msg->storage()) : 0;
+- if ( !msgParent || msg->UID() == 0 )
++ if ( !msgParent || !msg || msg->UID() == 0 )
+ {
+ // broken message
+ emit messageRetrieved( 0 );
+Index: kmail/partmetadata.h
+===================================================================
+--- kmail/partmetadata.h (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kmail/partmetadata.h (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -35,7 +35,12 @@
+ isEncrypted( false ),
+ isDecryptable( false ),
+ technicalProblem( false ),
+- isEncapsulatedRfc822Message( false ) {}
++ isEncapsulatedRfc822Message( false )
++ {
++ creationTime.tm_year = 0;
++ creationTime.tm_mon = 1;
++ creationTime.tm_mday = 1;
++ }
+ bool isSigned;
+ bool isGoodSignature;
+ CryptPlugWrapper::SigStatusFlags sigStatusFlags;
+Index: kmail/kmcommands.h
+===================================================================
+--- kmail/kmcommands.h (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kmail/kmcommands.h (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -703,6 +703,7 @@
+ // Ticked off as they come in via msgAdded signals.
+ QValueList<Q_UINT32> mLostBoys;
+ KPIM::ProgressItem *mProgressItem;
++ bool mCompleteWithAddedMsg;
+ };
+
+ class KDE_EXPORT KMDeleteMsgCommand : public KMMoveCommand
+Index: kmail/kmcomposewin.cpp
+===================================================================
+--- kmail/kmcomposewin.cpp (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kmail/kmcomposewin.cpp (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -667,6 +667,8 @@
+
+ KConfigGroupSaver saver( KMKernel::config(), "Geometry" );
+ saveMainWindowSettings( KMKernel::config(), "Composer" );
++ // make sure config changes are written to disk, cf. bug 127538
++ GlobalSettings::self()->writeConfig();
+ }
+
+ //-----------------------------------------------------------------------------
+@@ -4021,7 +4023,7 @@
+ }
+
+ // Squeeze tabs and spaces
+- QRegExp squeeze( "[\t, ]+" );
++ QRegExp squeeze( "[\t ]+" );
+ s.replace( squeeze, QChar( ' ' ) );
+
+ // Remove trailing whitespace
+Index: kmail/kmfolderimap.cpp
+===================================================================
+--- kmail/kmfolderimap.cpp (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kmail/kmfolderimap.cpp (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -228,10 +228,8 @@
+ ImapAccountBase::jobData jd(url.url());
+ jd.progressItem = ProgressManager::createProgressItem(
+ "ImapFolderRemove" + ProgressManager::getUniqueID(),
+- // FIXME Replace by i18n("Removing folder")
+- "Removing folder",
+- // FIXME Replace by i18n( "URL: %1" ).arg( ... )
+- "URL: " + QStyleSheet::escape( folder()->prettyURL() ),
++ i18n("Removing folder"),
++ i18n( "URL: %1" ).arg( QStyleSheet::escape( folder()->prettyURL() ) ),
+ false,
+ mAccount->useSSL() || mAccount->useTLS() );
+ mAccount->insertJob(job, jd);
+@@ -474,8 +472,7 @@
+ mAddMessageProgressItem = ProgressManager::createProgressItem(
+ "Uploading"+ProgressManager::getUniqueID(),
+ i18n("Uploading message data"),
+- // FIXME Replace by i18n("Destination folder: %1").arg( ... )
+- i18n("Destination folder: ") + QStyleSheet::escape( folder()->prettyURL() ),
++ i18n("Destination folder: %1").arg( QStyleSheet::escape( folder()->prettyURL() ) ),
+ true,
+ mAccount->useSSL() || mAccount->useTLS() );
+ mAddMessageProgressItem->setTotalItems( msgList.count() );
+@@ -1450,6 +1447,7 @@
+ if ( ok && exists < count() ) {
+ kdDebug(5006) << "KMFolderImap::slotGetMessagesData - server has less messages (" <<
+ exists << ") then folder (" << count() << "), so reload" << endl;
++ open();
+ reallyGetFolder( QString::null );
+ (*it).cdata.remove(0, pos);
+ return;
+Index: kmail/popaccount.cpp
+===================================================================
+--- kmail/popaccount.cpp (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kmail/popaccount.cpp (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -597,6 +597,7 @@
+ case Later:
+ if (kmkernel->popFilterMgr()->showLaterMsgs())
+ dlgPopup = true;
++ // fall through
+ default:
+ headersOnServer.current()->setAction(action);
+ headersOnServer.current()->setRuleMatched(true);
+Index: kmail/accountmanager.cpp
+===================================================================
+--- kmail/accountmanager.cpp (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kmail/accountmanager.cpp (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -129,7 +129,8 @@
+ void AccountManager::processNextCheck( bool _newMail )
+ {
+ kdDebug(5006) << "processNextCheck, remaining " << mAcctTodo.count() << endl;
+- mNewMailArrived |= _newMail;
++ if ( _newMail )
++ mNewMailArrived = true;
+
+ for ( AccountList::Iterator it( mAcctChecking.begin() ), end( mAcctChecking.end() ); it != end; ) {
+ KMAccount* acct = *it;
+Index: kmail/kmail_config_appearance.desktop
+===================================================================
+--- kmail/kmail_config_appearance.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kmail/kmail_config_appearance.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -104,6 +104,7 @@
+ Comment[tr]=Görsel Görünümü ÃzelleÅtir
+ Comment[uk]=ÐалаÑÑÑÐ²Ð°Ð½Ð½Ñ Ð·Ð¾Ð²Ð½ÑÑнÑого виглÑдÑ
+ Comment[zh_CN]=èªå®ä¹è§è§å¤è§
++Comment[zh_TW]=調æ´è¦è¦ºé¡¯ç¤º
+ Keywords=kmail,appearance
+ Keywords[be]=K ÐоÑÑа,зÑнеÑÐ½Ñ Ð²ÑглÑд,kmail,appearance
+ Keywords[bg]=поÑенÑки, клиенÑ, е-поÑа, вÑнÑен, вид, вÑнÑноÑÑ, поÑвÑване kmail, appearance
+Index: kmail/KMail.desktop
+===================================================================
+--- kmail/KMail.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kmail/KMail.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -74,6 +74,7 @@
+ GenericName[ven]=Mushumisani na poso
+ GenericName[xh]=Umxhasi Weposi
+ GenericName[zh_CN]=é®ä»¶å®¢æ·ç¨åº
++GenericName[zh_TW]=æ¶ç¼ä¿¡è»é«
+ GenericName[zu]=Imeyili Yomthengi
+ Terminal=false
+
+Index: kmail/kmacctimap.cpp
+===================================================================
+--- kmail/kmacctimap.cpp (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kmail/kmacctimap.cpp (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -287,8 +287,7 @@
+ mMailCheckProgressItem =
+ ProgressManager::createProgressItem(
+ "MailCheckAccount" + name(),
+- // FIXME Replace by i18n("Checking account: %1" ).arg( ... )
+- i18n("Checking account: " ) + QStyleSheet::escape( name() ),
++ i18n("Checking account: %1" ).arg( QStyleSheet::escape( name() ) ),
+ QString::null, // status
+ true, // can be canceled
+ useSSL() || useTLS() );
+Index: kmail/dcopmail.desktop
+===================================================================
+--- kmail/dcopmail.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kmail/dcopmail.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -44,3 +44,4 @@
+ Comment[tr]=DCOP arayüzü ile posta programı
+ Comment[uk]=ÐÑогÑама Ð´Ð»Ñ ÑобоÑи з ел. поÑÑÐ¾Ñ Ð· ÑнÑеÑÑейÑом DCOP
+ Comment[zh_CN]=å
·æ DCOP æ¥å£çé®ä»¶ç¨åº
++Comment[zh_TW]=æ DCOP ä»é¢çéµä»¶ç¨å¼
+Index: kmail/kmmainwidget.h
+===================================================================
+--- kmail/kmmainwidget.h (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kmail/kmmainwidget.h (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -30,7 +30,6 @@
+ #include "kmkernel.h" // for access to config
+ #include <kaction.h>
+
+-class QAccel;
+ class QVBoxLayout;
+ class QSplitter;
+
+@@ -501,8 +500,6 @@
+ KXMLGUIClient *mGUIClient;
+
+ static QValueList<KMMainWidget*>* s_mainWidgetList;
+-
+- QAccel *mAccel;
+ };
+
+ #endif
+Index: kmail/kmfolderseldlg.cpp
+===================================================================
+--- kmail/kmfolderseldlg.cpp (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kmail/kmfolderseldlg.cpp (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -26,8 +26,50 @@
+ void setFolder( KMFolder * folder ) { mFolder = folder; };
+ const KMFolder * folder() { return mFolder; };
+
++ // Redefine isAlternate() for proper row coloring behavior.
++ // KListViewItem::isAlternate() is not virtual! Therefore,
++ // it is necessary to overload paintCell() below. If it were
++ // made virtual, paintCell() would no longer be necessary.
++ bool isAlternate () {
++ return mAlternate;
++ }
++
++ // Set the flag which determines if this is an alternate row
++ void setAlternate ( bool alternate ) {
++ mAlternate = alternate;
++ }
++
++ // Must overload paintCell because neither KListViewItem::isAlternate()
++ // or KListViewItem::backgroundColor() are virtual!
++ virtual void paintCell( QPainter *p, const QColorGroup &cg,
++ int column, int width, int alignment )
++ {
++ KListView* view = static_cast< KListView* >( listView() );
++
++ // Set alternate background to invalid
++ QColor nocolor;
++ QColor alt = view->alternateBackground();
++ view->setAlternateBackground( nocolor );
++
++ // Set the base and text to the appropriate colors
++ QColorGroup *cgroup = (QColorGroup *)&view->viewport()->colorGroup();
++ QColor base = cgroup->base();
++ QColor text = cgroup->text();
++ cgroup->setColor( QColorGroup::Base, isAlternate() ? alt : base );
++ cgroup->setColor( QColorGroup::Text, isEnabled() ? text : Qt::lightGray );
++
++ // Call the parent paint routine
++ KListViewItem::paintCell( p, cg, column, width, alignment );
++
++ // Restore the base and alternate background
++ cgroup->setColor( QColorGroup::Base, base );
++ cgroup->setColor( QColorGroup::Text, text );
++ view->setAlternateBackground( alt );
++ }
++
+ private:
+ KMFolder * mFolder;
++ bool mAlternate;
+ };
+
+ //-----------------------------------------------------------------------------
+@@ -50,11 +92,19 @@
+ : KFolderTree( parent ), mFolderTree( folderTree )
+ {
+ setSelectionModeExt( Single );
+- mFolderColumn = addColumn( i18n( "Folder" ) );
++ mFolderColumn = addColumn( i18n( "Folder" ), 0 );
++ mPathColumn = addColumn( i18n( "Path" ), 0 );
++ setAllColumnsShowFocus( true );
++ setAlternateBackground( QColor( 0xf0, 0xf0, 0xf0 ) );
+
+ reload( mustBeReadWrite, true, true, preSelection );
+ readColorConfig();
+
++ applyFilter( "" );
++
++ connect(this, SIGNAL(collapsed(QListViewItem*)), SLOT(recolorRows()));
++ connect(this, SIGNAL(expanded(QListViewItem*)), SLOT(recolorRows()));
++
+ connect( this, SIGNAL( contextMenuRequested( QListViewItem*, const QPoint &, int ) ),
+ this, SLOT( slotContextMenuRequested( QListViewItem*, const QPoint & ) ) );
+ }
+@@ -77,6 +127,9 @@
+ if ( selected.isEmpty() && folder() )
+ selected = folder()->idString();
+
++ mFilter = "";
++ QString path;
++
+ for ( QListViewItemIterator it( mFolderTree ) ; it.current() ; ++it )
+ {
+ KMFolderTreeItem * fti = static_cast<KMFolderTreeItem *>( it.current() );
+@@ -102,6 +155,7 @@
+ item->moveItem( lastTopItem );
+ lastTopItem = item;
+ depth = 0;
++ path = "";
+ }
+ else {
+ if ( depth > lastDepth ) {
+@@ -110,6 +164,8 @@
+ lastItem->setOpen(true);
+ }
+ else {
++ path = path.section( '/', 0, -2 - (lastDepth-depth) );
++
+ if ( depth == lastDepth ) {
+ // same level - behind previous item
+ item = new FolderItem( static_cast<FolderItem*>(lastItem->parent()) );
+@@ -134,9 +190,16 @@
+ }
+ }
+
++ if ( depth > 0 )
++ path += "/";
++ path += fti->text( 0 );
++
+ item->setText( mFolderColumn, fti->text( 0 ) );
++ item->setText( mPathColumn, path );
++
+ item->setProtocol( fti->protocol() );
+ item->setType( fti->type() );
++
+ // Make items without folders and readonly items unselectable
+ // if we're told so
+ if ( mustBeReadWrite && ( !fti->folder() || fti->folder()->isReadOnly() ) ) {
+@@ -243,6 +306,138 @@
+
+
+ //-----------------------------------------------------------------------------
++static int recurseFilter( QListViewItem * item, const QString& filter, int column )
++{
++ if ( item == 0 )
++ return 0;
++
++ QListViewItem * child;
++ child = item->firstChild();
++
++ int enabled = 0;
++ while ( child ) {
++ enabled += recurseFilter( child, filter, column );
++ child = child->nextSibling();
++ }
++
++ if ( filter.length() == 0 ||
++ item->text( column ).find( filter, 0, false ) >= 0 ) {
++ item->setVisible( true );
++ ++enabled;
++ }
++ else {
++ item->setVisible( !!enabled );
++ item->setEnabled( false );
++ }
++
++ return enabled;
++}
++
++void SimpleFolderTree::recolorRows()
++{
++ // Iterate through the list to set the alternate row flags.
++ int alt = 0;
++ QListViewItemIterator it ( this );
++ while ( it.current() ) {
++ FolderItem * item = static_cast< FolderItem* >( it.current() );
++
++ if ( item->isVisible() ) {
++ bool visible = true;
++ QListViewItem * parent = item->parent();
++ while ( parent ) {
++ if (!parent->isOpen()) {
++ visible = false;
++ break;
++ }
++ parent = parent->parent();
++ }
++
++ if ( visible ) {
++ item->setAlternate( alt );
++ alt = !alt;
++ }
++ }
++
++ ++it;
++ }
++}
++
++void SimpleFolderTree::applyFilter( const QString& filter )
++{
++ // Reset all items to visible, enabled, and open
++ QListViewItemIterator clean( this );
++ while ( clean.current() ) {
++ QListViewItem * item = clean.current();
++ item->setEnabled( true );
++ item->setVisible( true );
++ item->setOpen( true );
++ ++clean;
++ }
++
++ mFilter = filter;
++
++ if ( filter.isEmpty() ) {
++ setColumnText( mPathColumn, i18n("Path") );
++ return;
++ }
++
++ // Set the visibility and enabled status of each list item.
++ // The recursive algorithm is necessary because visiblity
++ // changes are automatically applied to child nodes by Qt.
++ QListViewItemIterator it( this );
++ while ( it.current() ) {
++ QListViewItem * item = it.current();
++ if ( item->depth() <= 0 )
++ recurseFilter( item, filter, mPathColumn );
++ ++it;
++ }
++
++ // Recolor the rows appropriately
++ recolorRows();
++
++ // Iterate through the list to find the first selectable item
++ QListViewItemIterator first ( this );
++ while ( first.current() ) {
++ FolderItem * item = static_cast< FolderItem* >( first.current() );
++
++ if ( item->isVisible() && item->isSelectable() ) {
++ setSelected( item, true );
++ ensureItemVisible( item );
++ break;
++ }
++
++ ++first;
++ }
++
++ // Display and save the current filter
++ if ( filter.length() > 0 )
++ setColumnText( mPathColumn, i18n("Path") + " ( " + filter + " )" );
++ else
++ setColumnText( mPathColumn, i18n("Path") );
++
++ mFilter = filter;
++}
++
++//-----------------------------------------------------------------------------
++void SimpleFolderTree::keyPressEvent( QKeyEvent *e ) {
++ int ch = e->ascii();
++
++ if ( ch >= 32 && ch <= 126 )
++ applyFilter( mFilter + ch );
++
++ else if ( ch == 8 || ch == 127 ) {
++ if ( mFilter.length() > 0 ) {
++ mFilter.truncate( mFilter.length()-1 );
++ applyFilter( mFilter );
++ }
++ }
++
++ else
++ KListView::keyPressEvent( e );
++}
++
++
++//-----------------------------------------------------------------------------
+ KMFolderSelDlg::KMFolderSelDlg( KMMainWidget * parent, const QString& caption,
+ bool mustBeReadWrite, bool useGlobalSettings )
+ : KDialogBase( parent, "folder dialog", true, caption,
+@@ -345,9 +540,21 @@
+ {
+ KConfig *config = KGlobal::config();
+ config->setGroup( "FolderSelectionDialog" );
++
+ QSize size = config->readSizeEntry( "Size" );
+ if ( !size.isEmpty() ) resize( size );
+- else resize( 220, 300 );
++ else resize( 500, 300 );
++
++ QValueList<int> widths = config->readIntListEntry( "ColumnWidths" );
++ if ( !widths.isEmpty() ) {
++ mTreeView->setColumnWidth(mTreeView->mFolderColumn, widths[0]);
++ mTreeView->setColumnWidth(mTreeView->mPathColumn, widths[1]);
++ }
++ else {
++ int colWidth = width() / 2;
++ mTreeView->setColumnWidth(mTreeView->mFolderColumn, colWidth);
++ mTreeView->setColumnWidth(mTreeView->mPathColumn, colWidth);
++ }
+ }
+
+ void KMFolderSelDlg::writeConfig()
+@@ -355,6 +562,11 @@
+ KConfig *config = KGlobal::config();
+ config->setGroup( "FolderSelectionDialog" );
+ config->writeEntry( "Size", size() );
++
++ QValueList<int> widths;
++ widths.push_back(mTreeView->columnWidth(mTreeView->mFolderColumn));
++ widths.push_back(mTreeView->columnWidth(mTreeView->mPathColumn));
++ config->writeEntry( "ColumnWidths", widths );
+ }
+
+ } // namespace KMail
+Index: kmail/kmail_config_security.desktop
+===================================================================
+--- kmail/kmail_config_security.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kmail/kmail_config_security.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -59,6 +59,7 @@
+ Name[uk]=Ðезпека
+ Name[uz]=ХавÑÑизлик
+ Name[zh_CN]=å®å
¨
++Name[zh_TW]=å®å
¨æ§
+ Comment=Security & Privacy Settings
+ Comment[be]=ÐаÑÑÑÐ¾Ð¹ÐºÑ Ð±ÑÑÑÐ¿ÐµÐºÑ Ñ Ð¿ÑÑваÑнаÑÑÑÑ
+ Comment[bg]=ÐаÑÑÑойки на ÑигÑÑноÑÑÑа
+@@ -75,6 +76,7 @@
+ Comment[fi]=Turvallisuus- ja yksityisyysasetukset
+ Comment[fr]=Paramètres de sécurité et de confidentialité
+ Comment[gl]=Opcións de Seguridade e Intimidade
++Comment[he]=×××ר×ת ××××× ×פר×××ת
+ Comment[hu]=Biztonsági és adatvédelmi beállÃtások
+ Comment[is]=Ãryggis & einkalÃfsstillingar
+ Comment[it]=Impostazioni sicurezza e privacy
+@@ -101,6 +103,7 @@
+ Comment[tr]=Güvenlik ve Gizlilik Ayarlar
+ Comment[uk]=ÐаÑамеÑÑи безпеки Ñ ÐºÐ¾Ð½ÑÑденÑÑйноÑÑÑ
+ Comment[zh_CN]=å®å
¨åéç§è®¾ç½®
++Comment[zh_TW]=å®å
¨æ§èé±ç§è¨å®
+ Keywords=kmail,security
+ Keywords[be]=K ÐоÑÑа,бÑÑÑпека,kmail,security
+ Keywords[bg]=поÑенÑки, клиенÑ, е-поÑа, ÑигÑÑноÑÑ, конÑиденÑиалноÑÑ, kmail, security
+Index: kmail/searchjob.cpp
+===================================================================
+--- kmail/searchjob.cpp (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kmail/searchjob.cpp (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -254,8 +254,7 @@
+ mProgress = ProgressManager::createProgressItem(
+ "ImapSearchDownload" + ProgressManager::getUniqueID(),
+ i18n("Downloading emails from IMAP server"),
+- // FIXME replace by i18n( "URL: %1" ).arg( ... )
+- "URL: " + QStyleSheet::escape( mFolder->folder()->prettyURL() ),
++ i18n( "URL: %1" ).arg( QStyleSheet::escape( mFolder->folder()->prettyURL() ) ),
+ true,
+ mAccount->useSSL() || mAccount->useTLS() );
+ mProgress->setTotalItems( numMsgs );
+Index: kmail/kmail_config_accounts.desktop
+===================================================================
+--- kmail/kmail_config_accounts.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kmail/kmail_config_accounts.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -58,6 +58,7 @@
+ Name[uk]=РаÑ
Ñнки
+ Name[uz]=ҲиÑоблаÑ
+ Name[zh_CN]=è´¦æ·
++Name[zh_TW]=帳è
+ Comment=Setup for Sending and Receiving Messages
+ Comment[bg]=ÐаÑÑÑойки на мÑежаÑа, ÑÑÑвÑÑиÑе и ÑмеÑкиÑе
+ Comment[bs]=Postavke za slanje i prijem poruka
+@@ -74,7 +75,7 @@
+ Comment[hu]=Küldési és fogadási beállÃtások
+ Comment[is]=Uppsetning fyrir sendingu og móttöku af tölvupósti
+ Comment[it]=Impostazioni per spedire e ricevere messaggi
+-Comment[ja]=ã¡ãã»ã¼ã¸ãéåä¿¡ããçºã®è¨å®
++Comment[ja]=ã¡ãã»ã¼ã¸ãéåä¿¡ããããã®è¨å®
+ Comment[km]=áááá
áâáá¾áááá¸âáááá¾ áá·á ááá½áâáá¶á
+ Comment[lt]=LaiÅ¡kų siuntimo ir gavimo sÄ
ranka
+ Comment[ms]=Setup untuk Menghantar dan Menerima Mesej
+@@ -97,6 +98,7 @@
+ Comment[tr]=Gönderilen ve Gelen Mesajlar için Yapılandırma
+ Comment[uk]=ÐалаÑÑÑÐ²Ð°Ð½Ð½Ñ Ð´Ð»Ñ Ð½Ð°Ð´ÑÐ¸Ð»Ð°Ð½Ð½Ñ Ñ Ð¾ÑÑÐ¸Ð¼Ð°Ð½Ð½Ñ Ð¿Ð¾Ð²ÑдомленÑ
+ Comment[zh_CN]=æ¶åé®ä»¶è®¾ç½®
++Comment[zh_TW]=ç¼éèæ¥æ¶ä¿¡ä»¶è¨å®
+ Keywords=kmail,accounts
+ Keywords[bg]=поÑенÑки, клиенÑ, е-поÑа, kmail, accounts
+ Keywords[br]=kmail,kontoù
+Index: networkstatus/networkstatus.desktop
+===================================================================
+--- networkstatus/networkstatus.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ networkstatus/networkstatus.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -27,6 +27,7 @@
+ Name[pt]=Servidor de Estado de Rede
+ Name[pt_BR]=Daemon de Status da Rede
+ Name[ru]=СлÑжба ÑоÑÑоÑÐ½Ð¸Ñ ÑеÑи
++Name[sk]=Daemon stavu siete
+ Name[sl]=Demon za omrežno stanje
+ Name[sr]=Ðемон за ÑÑаÑÑÑ Ð¼Ñеже
+ Name[sr at Latn]=Demon za status mreže
+@@ -35,6 +36,7 @@
+ Name[tr]=AÄ Durum İzleyici
+ Name[uk]=Ðаемон ÑÑÐ°Ð½Ñ Ð¼ÐµÑежÑ
+ Name[zh_CN]=ç½ç»ç¶æå®æ¤ç¨åº
++Name[zh_TW]=網路çæ
å®è·ç¨å¼
+ Comment=Tracks status of network interfaces and provides notification to applications using the network.
+ Comment[bg]=Следене на ÑÑÑÑоÑниеÑо на мÑежаÑа и пÑедаване на инÑоÑмаÑиÑÑа на пÑогÑамиÑе, коиÑо Ð¸Ð¼Ð°Ñ Ð½Ñжда
+ Comment[ca]=Monitoritza l'estat de les interfÃcies de xarxa i proporciona notificacions a les aplicacions que usen la xarxa.
+@@ -50,7 +52,7 @@
+ Comment[hu]=Figyeli a hálózati csatolók állapotát és értesÃtési lehetÅséget biztosÃt hálózati alkalmazások számára.
+ Comment[is]=Fylgist með stöðu netkorta og sendir tilkynningar til forrita sem nota netið.
+ Comment[it]=Controlla lo stato delle interfacce di rete e fornisce notifiche alle applicazioni che usano al rete.
+-Comment[ja]=ãããã¯ã¼ã¯ã¤ã³ã¿ã¼ãã§ã¤ã¹ã®ç¶æ
ã追跡ãããããã¯ã¼ã¯ãç¨ããã¢ããªã±ã¼ã·ã§ã³ã«éç¥ããã
++Comment[ja]=ãããã¯ã¼ã¯ã¤ã³ã¿ã¼ãã§ã¤ã¹ã®ç¶æ
ã追跡ãããããã¯ã¼ã¯ãç¨ããã¢ããªã±ã¼ã·ã§ã³ã«éç¥ãã¾ã
+ Comment[km]=áá¶ááá¶áâáááá¶ááá¶áâááááâá
ááá»á
âááááá¶ááâááááá¶á ááááâáá¶ááâáááááâáá¼áâáá¶áâáá¼ááááá¹áâáá
âáááááá·áḠáááâáááá¾âááááá¶á á
+ Comment[lt]=Seka tinklo sÄ
sajų bÅ«senÄ
ir informuoja apie jas programas, naudojanÄias tinklÄ
+ Comment[ms]=Menjejak status antara muka rangkaian dan memberitahu aplikasi yang menggunakan rangkaian tersebut.
+@@ -62,6 +64,7 @@
+ Comment[pt]=Vigia o estado das interfaces de rede e avisa as aplicações que utilizam a rede.
+ Comment[pt_BR]=Controla o status das interfaces de rede e fornece notificações para aplicativos utilizando a rede.
+ Comment[ru]=СлÑжба оÑÑÐ»ÐµÐ¶Ð¸Ð²Ð°Ð½Ð¸Ñ ÑоÑÑоÑÐ½Ð¸Ñ ÑеÑевÑÑ
инÑеÑÑейÑов и обÑаÑÐµÐ½Ð¸Ñ Ð¿Ñиложений к ÑеÑи.
++Comment[sk]=Sleduje stav sieÅ¥ových rozhranà a poskytuje upozornenia aplikáciám použÃvajúcim sieÅ¥.
+ Comment[sl]=Sledi stanju omrežnim vmesnikom in omogoÄa obvestila programom, ki uporabljajo omrežje
+ Comment[sr]=ÐÑаÑи ÑÑаÑÑÑ Ð¼ÑежниÑ
инÑеÑÑеÑÑа и пÑÑжа обавеÑÑеÑа пÑогÑамима коÑи коÑиÑÑе мÑежÑ.
+ Comment[sr at Latn]=Prati status mrežnih interfejsa i pruža obaveštenja programima koji koriste mrežu.
+@@ -69,6 +72,7 @@
+ Comment[ta]=வலà¯à®ªà¯à®ªà®¿à®©à¯à®©à®²à¯à®ªà¯ பயனà¯à®ªà®à¯à®¤à¯à®¤à®¿ வலà¯à®ªà¯à®ªà®¿à®©à¯à®©à®²à¯ à®à®à¯à®®à¯à®à®à¯à®à®³à®¿à®©à¯ நிலà¯à®¯à¯ à®à®£à¯à®à®¾à®£à®¿à®à¯à®à®¿à®±à®¤à¯ மறà¯à®±à¯à®®à¯ பயனà¯à®ªà®¾à®à¯à®à®³à¯à®à¯à®à¯ à®
றிவிபà¯à®ªà¯ வழà®à¯à®à¯à®à®¿à®±à®¤à¯.
+ Comment[uk]=СлÑдкÑÑ Ð·Ð° ÑÑаном ÑнÑеÑÑейÑÑв меÑÐµÐ¶Ñ Ñ ÑповÑÑÐ°Ñ Ð¿ÑогÑами, ÑÐºÑ ÐºÐ¾ÑиÑÑÑÑÑÑÑÑ Ð¼ÐµÑежеÑ.
+ Comment[zh_CN]=è·è¸ªç½å¡çç¶æå¹¶ä¸ºåºç¨ç¨åºæä¾ä½¿ç¨ç½ç»çéç¥ã
++Comment[zh_TW]=追蹤網路ä»é¢ççæ
ï¼ä¸¦æä¾ä½¿ç¨ç¶²è·¯çæç¨ç¨å¼çéç¥ã
+ Type=Service
+ ServiceTypes=KDEDModule
+ X-KDE-ModuleType=Library
+Index: knode/knode_config_identity.desktop
+===================================================================
+--- knode/knode_config_identity.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ knode/knode_config_identity.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -57,6 +57,7 @@
+ Name[uk]=ÐÑоÑÑлÑ
+ Name[uz]=ШаÑ
ÑиÑÑ
+ Name[zh_CN]=身份
++Name[zh_TW]=身份
+ Comment=Personal Information
+ Comment[be]=ÐÑÑÑаналÑÐ½Ð°Ñ ÑнÑаÑмаÑÑÑ
+ Comment[bg]=УпÑавление на лиÑнаÑа инÑоÑмаÑиÑ
+@@ -103,3 +104,4 @@
+ Comment[tr]=KiÅisel Bilgi
+ Comment[uk]=ÐÑобиÑÑа ÑнÑоÑмаÑÑÑ
+ Comment[zh_CN]=个人信æ¯
++Comment[zh_TW]=å人è³è¨
+Index: knode/knode_config_accounts.desktop
+===================================================================
+--- knode/knode_config_accounts.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ knode/knode_config_accounts.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -58,6 +58,7 @@
+ Name[uk]=РаÑ
Ñнки
+ Name[uz]=ҲиÑоблаÑ
+ Name[zh_CN]=è´¦æ·
++Name[zh_TW]=帳è
+ Comment=Setup for Newsgroup and Mail Servers
+ Comment[bg]=ÐаÑÑÑойки на гÑÑпиÑе и поÑенÑкиÑе ÑÑÑвÑÑи
+ Comment[bs]=Postavke za newsgrupe i mail servere
+@@ -98,3 +99,4 @@
+ Comment[tr]=E-posta ve Haber Grubu Sunucuları için Yapılandırma
+ Comment[uk]=ÐалаÑÑÑÐ²Ð°Ð½Ð½Ñ Ð´Ð»Ñ Ð³ÑÑп новин Ñ ÑеÑвеÑÑв поÑÑи
+ Comment[zh_CN]=æ°é»ç»åé®ä»¶æå¡å¨ç设置
++Comment[zh_TW]=è¨å®æ°è群çµåéµä»¶ä¼ºæå¨
+Index: knode/knode_config_read_news.desktop
+===================================================================
+--- knode/knode_config_read_news.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ knode/knode_config_read_news.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -54,4 +54,5 @@
+ Name[uk]=ЧиÑÐ°Ð½Ð½Ñ Ð½Ð¾Ð²Ð¸Ð½
+ Name[uz]=ЯнгиликлаÑни ÑÒиÑ
+ Name[zh_CN]=é
读æ°é»
++Name[zh_TW]=é±è®æ°è
+
+Index: knode/knode_config_privacy.desktop
+===================================================================
+--- knode/knode_config_privacy.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ knode/knode_config_privacy.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -52,6 +52,7 @@
+ Name[tr]=İmzalama/DoÄruluma
+ Name[uk]=ÐÑдпиÑÑÐ²Ð°Ð½Ð½Ñ Ñ Ð¿ÐµÑевÑÑка
+ Name[zh_CN]=ç¾å/æ ¡éª
++Name[zh_TW]=簽署/檢æ¥
+ Comment=Protect your privacy by signing and verifying postings
+ Comment[bg]=ÐаÑиÑа на лиÑнаÑа коÑеÑпонденÑÐ¸Ñ ÑÑез подпиÑване и пÑовеÑка на ÑÑобÑениÑÑа
+ Comment[bs]=Zaštitite vašu privatnost potpisivanjem i provjerom postinga
+@@ -89,3 +90,4 @@
+ Comment[tr]=Gönderilen iletilerinizi imzalayarak ve doÄrulayarak güvenirliliÄinizi saÄlayın
+ Comment[uk]=ÐаÑ
иÑÑ ÐºÐ¾Ð½ÑÑденÑÑйноÑÑÑ Ð·Ð° Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾Ñ Ð¿ÑдпиÑÑÐ²Ð°Ð½Ð½Ñ Ñ Ð¿ÐµÑевÑÑки повÑдомленÑ
+ Comment[zh_CN]=éè¿å¯¹å表çæä»¶è¿è¡ç¾ååæ ¡éªæ¥ä¿æ¤æ¨çéç§
++Comment[zh_TW]=ä»¥ç°½ç½²ææª¢æ¥æç« ä¾ä¿è·æ¨çé±ç§
+Index: knode/knode_config_cleanup.desktop
+===================================================================
+--- knode/knode_config_cleanup.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ knode/knode_config_cleanup.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -54,6 +54,7 @@
+ Name[tr]=Temizle
+ Name[uk]=ÐÑиÑÐµÐ½Ð½Ñ Ð´Ð¸ÑкÑ
+ Name[zh_CN]=æ¸
ç
++Name[zh_TW]=æ¸
é¤
+ Comment=Preserving Disk Space
+ Comment[bg]=ÐÑвобождаване на Ñвободно мÑÑÑо на диÑка
+ Comment[bs]=Äuvanje prostora na disku
+@@ -68,6 +69,7 @@
+ Comment[fi]=Kiintolevytilan säästäminen
+ Comment[fr]=Préservation de l'espace disque
+ Comment[gl]=Preservar Espacio en Disco
++Comment[he]=ש××רת ××§×× ×××× ×
+ Comment[hu]=A lemezterület megÅrzése
+ Comment[is]=Varðveita diskpláss
+ Comment[it]=Risparmia lo spazio su disco
+@@ -93,3 +95,4 @@
+ Comment[tr]=Saklama için Disk Alanı
+ Comment[uk]=ÐбеÑÐµÐ¶ÐµÐ½Ð½Ñ Ð¼ÑÑÑÑ Ð½Ð° диÑкÑ
+ Comment[zh_CN]=è
¾åºç£ç空é´
++Comment[zh_TW]=ä¿çç£ç¢ç©ºé
+Index: knode/knode_config_appearance.desktop
+===================================================================
+--- knode/knode_config_appearance.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ knode/knode_config_appearance.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -104,3 +104,4 @@
+ Comment[tr]=Görsel Görünümü ÃzelleÅtir
+ Comment[uk]=ÐалаÑÑÑÐ²Ð°Ð½Ð½Ñ Ð·Ð¾Ð²Ð½ÑÑнÑого виглÑдÑ
+ Comment[zh_CN]=èªå®ä¹è§è§å¤è§
++Comment[zh_TW]=調æ´è¦è¦ºé¡¯ç¤º
+Index: knode/knode_config_post_news.desktop
+===================================================================
+--- knode/knode_config_post_news.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ knode/knode_config_post_news.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -52,4 +52,5 @@
+ Name[tr]=Gönderilen Haberler
+ Name[uk]=РозмÑÑÐµÐ½Ð½Ñ Ð½Ð¾Ð²Ð¸Ð½
+ Name[zh_CN]=æéæ°é»
++Name[zh_TW]=ç¼è¡¨æç«
+
+Index: knode/KNode.desktop
+===================================================================
+--- knode/KNode.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ knode/KNode.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -71,6 +71,7 @@
+ GenericName[vi]=Trình Äá»c News
+ GenericName[xh]=Umfundi weendaba
+ GenericName[zh_CN]=æ°é»é
读å¨
++GenericName[zh_TW]=æ°èé±è®å¨
+ GenericName[zu]=Umfundi wezindaba
+ X-KDE-StartupNotify=true
+ X-DCOP-ServiceType=Unique
+Index: kioslaves/sieve/sieve.protocol
+===================================================================
+--- kioslaves/sieve/sieve.protocol (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kioslaves/sieve/sieve.protocol (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -36,6 +36,7 @@
+ Description[pt]=Um 'ioslave' para o protocolo de filtragem de correio Sieve
+ Description[pt_BR]=Um IO-Slave para o protocolo de filtragem de email Sieve
+ Description[ru]=Ðанал пÑоÑокола ÑилÑÑÑа поÑÑÑ Sieve
++Description[sk]=ioslave pre protokol Sieve filtrovanie pošty
+ Description[sl]=ioslave za protokol poštnega filtriranja Sieve
+ Description[sr]=IOslave пÑоÑокола за ÑилÑÑиÑаÑе поÑÑе Sieve
+ Description[sr at Latn]=IOslave protokola za filtriranje pošte Sieve
+Index: libkdenetwork/gpgmepp/key.cpp
+===================================================================
+--- libkdenetwork/gpgmepp/key.cpp (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ libkdenetwork/gpgmepp/key.cpp (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -1,5 +1,5 @@
+ /* key.cpp - wraps a gpgme key
+- Copyright (C) 2003 Klarälvdalens Datakonsult AB
++ Copyright (C) 2003 Klarälvdalens Datakonsult AB
+
+ This file is part of GPGME++.
+
+@@ -379,11 +379,15 @@
+ bool Subkey::canCertify() const {
+ return d->subkey && d->subkey->can_certify;
+ }
+-
++
+ bool Subkey::canAuthenticate() const {
+ return d->subkey && d->subkey->can_authenticate;
+ }
+
++ bool Subkey::isSecret() const {
++ return d->subkey && d->subkey->secret;
++ }
++
+ unsigned int Subkey::length() const {
+ return d->subkey ? d->subkey->length : 0 ;
+ }
+@@ -732,7 +736,8 @@
+ UserID::Signature::Status UserID::Signature::status() const {
+ if ( !d->sig )
+ return GeneralError;
+- switch ( d->sig->status ) {
++
++ switch ( gpgme_err_code(d->sig->status) ) {
+ case GPG_ERR_NO_ERROR: return NoError;
+ case GPG_ERR_SIG_EXPIRED: return SigExpired;
+ case GPG_ERR_KEY_EXPIRED: return KeyExpired;
+Index: libkdenetwork/gpgmepp/key.h
+===================================================================
+--- libkdenetwork/gpgmepp/key.h (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ libkdenetwork/gpgmepp/key.h (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -1,5 +1,5 @@
+ /* key.h - wraps a gpgme key
+- Copyright (C) 2003 Klarälvdalens Datakonsult AB
++ Copyright (C) 2003 Klarälvdalens Datakonsult AB
+
+ This file is part of GPGME++.
+
+@@ -142,7 +142,7 @@
+ bool canCertify() const;
+ bool canAuthenticate() const;
+
+- bool isSecred() const;
++ bool isSecret() const;
+
+ unsigned int publicKeyAlgorithm() const;
+ const char * publicKeyAlgorithmAsString() const;
+Index: doc/kalarm/index.docbook
+===================================================================
+--- doc/kalarm/index.docbook (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ doc/kalarm/index.docbook (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -43,7 +43,7 @@
+ <!-- Don't change format of date and version of the documentation -->
+
+ <date>2006-04-09</date>
+-<releaseinfo>1.03.10</releaseinfo>
++<releaseinfo>1.04.03</releaseinfo>
+
+ <abstract>
+ <para>&kalarm; is a personal alarm message, command and email scheduler for &kde;.</para>
+@@ -609,6 +609,27 @@
+
+ </sect2>
+
++<sect2 id="import">
++<title>Importing alarms from external calendars</title>
++
++<para>You can import alarms from other calendar files into &kalarm;,
++by <menuchoice><guimenu>File</guimenu>
++<guimenuitem>Import Alarms...</guimenuitem></menuchoice>. The
++import function scans the selected calendar file for events containing
++alarms, and copies them (with new unique IDs) into &kalarm;'s calendar.
++Events without alarms, and other types of calendar entry, are
++ignored.</para>
++
++<warning><para>If you import alarms from calendar files which were
++created by applications other than &kalarm;, the alarms may be changed
++by the import process - even alarm times may change. This depends on
++the data storage conventions used by the other application, and is
++unavoidable if those conventions differ from what &kalarm; expects.
++Always check imported alarms for unexpected changes, and adjust them
++as necessary.</para></warning>
++
++</sect2>
++
+ <sect2 id="birthdays">
+ <title>Importing birthdays from &kaddressbook;</title>
+
+@@ -3846,18 +3867,18 @@
+ </row>
+ <row>
+ <entry><option>--cancelEvent <replaceable>eventID</replaceable></option></entry>
+- <entry>Cancel the event with the specified event ID.</entry>
++ <entry>Cancel the alarm with the specified event ID.</entry>
+ </row>
+ <row>
+ <entry><option>--triggerEvent <replaceable>eventID</replaceable></option></entry>
+- <entry>Trigger the event with the specified event ID. The action
++ <entry>Trigger the alarm with the specified event ID. The action
+ taken is the same as for the
+ <link linkend="triggerEvent">triggerEvent()</link> &DCOP;
+ call.</entry>
+ </row>
+ <row>
+ <entry><option>--handleEvent <replaceable>eventID</replaceable></option></entry>
+- <entry>Trigger or cancel the event with the specified event
++ <entry>Trigger or cancel the alarm with the specified event
+ ID. &kalarm; determines which action to take in the same way as for
+ the <link linkend="handleEvent">handleEvent()</link> &DCOP; call.</entry>
+ </row>
+Index: kalarm/alarmevent.cpp
+===================================================================
+--- kalarm/alarmevent.cpp (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kalarm/alarmevent.cpp (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -1,7 +1,7 @@
+ /*
+ * alarmevent.cpp - represents calendar alarms and events
+ * Program: kalarm
+- * Copyright (c) 2001 - 2005 by David Jarvie <software at astrojar.org.uk>
++ * Copyright (c) 2001-2006 by David Jarvie <software at astrojar.org.uk>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+@@ -2138,6 +2138,7 @@
+ * = -1 to recur indefinitely.
+ * = 0 to use 'end' instead.
+ * end = end date/time (invalid to use 'count' instead).
++ * Reply = false if no recurrence was set up.
+ */
+ bool KAEvent::setRecurMinutely(int freq, int count, const QDateTime& end)
+ {
+@@ -2153,6 +2154,7 @@
+ * = -1 to recur indefinitely.
+ * = 0 to use 'end' instead.
+ * end = end date (invalid to use 'count' instead).
++ * Reply = false if no recurrence was set up.
+ */
+ bool KAEvent::setRecurDaily(int freq, const QBitArray& days, int count, const QDate& end)
+ {
+@@ -2178,6 +2180,7 @@
+ * = -1 to recur indefinitely.
+ * = 0 to use 'end' instead.
+ * end = end date (invalid to use 'count' instead).
++ * Reply = false if no recurrence was set up.
+ */
+ bool KAEvent::setRecurWeekly(int freq, const QBitArray& days, int count, const QDate& end)
+ {
+@@ -2196,6 +2199,7 @@
+ * = -1 to recur indefinitely.
+ * = 0 to use 'end' instead.
+ * end = end date (invalid to use 'count' instead).
++ * Reply = false if no recurrence was set up.
+ */
+ bool KAEvent::setRecurMonthlyByDate(int freq, const QValueList<int>& days, int count, const QDate& end)
+ {
+@@ -2216,6 +2220,7 @@
+ * = -1 to recur indefinitely.
+ * = 0 to use 'end' instead.
+ * end = end date (invalid to use 'count' instead).
++ * Reply = false if no recurrence was set up.
+ */
+ bool KAEvent::setRecurMonthlyByPos(int freq, const QValueList<MonthPos>& posns, int count, const QDate& end)
+ {
+@@ -2238,6 +2243,7 @@
+ * = -1 to recur indefinitely.
+ * = 0 to use 'end' instead.
+ * end = end date (invalid to use 'count' instead).
++ * Reply = false if no recurrence was set up.
+ */
+ bool KAEvent::setRecurAnnualByDate(int freq, const QValueList<int>& months, int day, KARecurrence::Feb29Type feb29, int count, const QDate& end)
+ {
+@@ -2261,6 +2267,7 @@
+ * = -1 to recur indefinitely.
+ * = 0 to use 'end' instead.
+ * end = end date (invalid to use 'count' instead).
++ * Reply = false if no recurrence was set up.
+ */
+ bool KAEvent::setRecurAnnualByPos(int freq, const QValueList<MonthPos>& posns, const QValueList<int>& months, int count, const QDate& end)
+ {
+@@ -2281,6 +2288,7 @@
+ * = -1 to recur indefinitely.
+ * = 0 to use 'end' instead.
+ * end = end date/time (invalid to use 'count' instead).
++ * Reply = false if no recurrence was set up.
+ */
+ bool KAEvent::setRecur(RecurrenceRule::PeriodType recurType, int freq, int count, const QDateTime& end, KARecurrence::Feb29Type feb29)
+ {
+Index: kalarm/messagewin.cpp
+===================================================================
+--- kalarm/messagewin.cpp (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kalarm/messagewin.cpp (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -232,6 +232,8 @@
+ : MainWindowBase(0, "MessageWin", WFLAGS),
+ mArtsDispatcher(0),
+ mPlayObject(0),
++ mEditButton(0),
++ mDeferButton(0),
+ mSilenceButton(0),
+ mDeferDlg(0),
+ mWinModule(0),
+@@ -667,6 +669,7 @@
+ config->writeEntry(QString::fromLatin1("Volume"), static_cast<int>(mVolume * 100));
+ }
+ #endif
++ config->writeEntry(QString::fromLatin1("Speak"), mSpeak);
+ config->writeEntry(QString::fromLatin1("Height"), height());
+ config->writeEntry(QString::fromLatin1("NoDefer"), mNoDefer);
+ config->writeEntry(QString::fromLatin1("KMailSerial"), mKMailSerialNumber);
+@@ -704,6 +707,7 @@
+ if (!mAudioFile.isEmpty())
+ mAudioRepeat = true;
+ #endif
++ mSpeak = config->readBoolEntry(QString::fromLatin1("Speak"));
+ mRestoreHeight = config->readNumEntry(QString::fromLatin1("Height"));
+ mNoDefer = config->readBoolEntry(QString::fromLatin1("NoDefer"));
+ mKMailSerialNumber = config->readUnsignedLongNumEntry(QString::fromLatin1("KMailSerial"));
+Index: kalarm/alarmcalendar.h
+===================================================================
+--- kalarm/alarmcalendar.h (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kalarm/alarmcalendar.h (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -1,7 +1,7 @@
+ /*
+ * alarmcalendar.h - KAlarm calendar file access
+ * Program: kalarm
+- * Copyright (c) 2001 - 2005 by David Jarvie <software at astrojar.org.uk>
++ * Copyright © 2001-2006 by David Jarvie <software at astrojar.org.uk>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+@@ -71,6 +71,7 @@
+ static AlarmCalendar* expiredCalendarOpen() { return calendarOpen(EXPIRED); }
+ static AlarmCalendar* displayCalendarOpen() { return calendarOpen(DISPLAY); }
+ static AlarmCalendar* templateCalendarOpen() { return calendarOpen(TEMPLATE); }
++ static bool importAlarms(QWidget*);
+ static const KCal::Event* getEvent(const QString& uniqueID);
+
+ enum CalID { ACTIVE, EXPIRED, DISPLAY, TEMPLATE, NCALS };
+Index: kalarm/kalarm.h
+===================================================================
+--- kalarm/kalarm.h (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kalarm/kalarm.h (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -26,7 +26,7 @@
+ #include <config.h>
+ #endif
+
+-#define KALARM_VERSION "1.3.10"
++#define KALARM_VERSION "1.4.3"
+
+ #include <kdeversion.h>
+
+Index: kalarm/mainwindow.cpp
+===================================================================
+--- kalarm/mainwindow.cpp (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kalarm/mainwindow.cpp (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -318,6 +318,7 @@
+ mActionShowExpired->setCheckedState(i18n_e_HideExpiredAlarms());
+ mActionToggleTrayIcon = new KToggleAction(i18n("Show in System &Tray"), Qt::CTRL+Qt::Key_Y, this, SLOT(slotToggleTrayIcon()), actions, "showInSystemTray");
+ mActionToggleTrayIcon->setCheckedState(i18n("Hide From System &Tray"));
++ new KAction(i18n("Import &Alarms..."), 0, this, SLOT(slotImportAlarms()), actions, "importAlarms");
+ new KAction(i18n("Import &Birthdays..."), 0, this, SLOT(slotBirthdays()), actions, "importBirthdays");
+ new KAction(i18n("&Refresh Alarms"), "reload", 0, this, SLOT(slotResetDaemon()), actions, "refreshAlarms");
+ Daemon::createAlarmEnableAction(actions, "alarmEnable");
+@@ -788,6 +789,16 @@
+ }
+
+ /******************************************************************************
++* Called when the Import Alarms menu item is selected, to merge alarms from an
++* external calendar into the current calendars.
++*/
++void MainWindow::slotImportAlarms()
++{
++ if (AlarmCalendar::importAlarms(this))
++ mListView->refresh();
++}
++
++/******************************************************************************
+ * Called when the Import Birthdays menu item is selected, to display birthdays
+ * from the address book for selection as alarms.
+ */
+Index: kalarm/kalarmd/kalarmd.desktop
+===================================================================
+--- kalarm/kalarmd/kalarmd.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kalarm/kalarmd/kalarmd.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -30,6 +30,7 @@
+ Name[pt]=Servidor do KAlarm
+ Name[pt_BR]=Servidor do KAlarm
+ Name[ru]=СлÑжба Ñведомлений
++Name[sk]=KAlarm démon
+ Name[sl]=Demon KAlarm
+ Name[sr]=Ðемон KAlarm-а
+ Name[sr at Latn]=Demon KAlarm-a
+@@ -38,6 +39,7 @@
+ Name[tr]=KAlarm Servis Programı
+ Name[uk]=Ðаемон KAlarm
+ Name[zh_CN]=KAlarm è¿ç¨
++Name[zh_TW]=KAlarm å®è·ç¨å¼
+ Exec=kalarmd
+ Icon=kalarmd
+ Type=Application
+Index: kalarm/kalarmd/kalarmd.autostart.desktop
+===================================================================
+--- kalarm/kalarmd/kalarmd.autostart.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kalarm/kalarmd/kalarmd.autostart.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -30,6 +30,7 @@
+ Name[pt]=Servidor do KAlarm
+ Name[pt_BR]=Servidor do KAlarm
+ Name[ru]=СлÑжба Ñведомлений
++Name[sk]=KAlarm démon
+ Name[sl]=Demon KAlarm
+ Name[sr]=Ðемон KAlarm-а
+ Name[sr at Latn]=Demon KAlarm-a
+@@ -38,6 +39,7 @@
+ Name[tr]=KAlarm Servis Programı
+ Name[uk]=Ðаемон KAlarm
+ Name[zh_CN]=KAlarm è¿ç¨
++Name[zh_TW]=KAlarm å®è·ç¨å¼
+ Exec=kalarmd --autostart
+ Icon=kalarmd
+ Type=Application
+@@ -69,6 +71,7 @@
+ Comment[pt]=Servidor de alarme do KAlarm auto-iniciado no arranque
+ Comment[pt_BR]=Servidor de alarmes do KAlarm inicia automaticamente no login
+ Comment[ru]=СлÑжба Ñведомлений KDE
++Comment[sk]=Automatické spustenie kAlarm démona pri štarte
+ Comment[sl]=Samodejni zagon alarmskega strežnika KAlarma ob zagonu
+ Comment[sr]=ÐÑÑомаÑÑко покÑеÑаÑе алаÑмног демона KAlarm-а по пÑиÑавÑиваÑÑ
+ Comment[sr at Latn]=Automatsko pokretanje alarmnog demona KAlarm-a po prijavljivanju
+@@ -77,6 +80,7 @@
+ Comment[tr]=KAlarm alarm servis programı (açılıÅta baÅlar)
+ Comment[uk]=ÐвÑозаванÑÐ°Ð¶ÐµÐ½Ð½Ñ Ð´Ð°ÐµÐ¼Ð¾Ð½Ð° нагадÑÐ²Ð°Ð½Ñ KAlarm
+ Comment[zh_CN]=ç»å½æ¶èªå¨å¯å¨ KAlarm 宿¶å®æ¤è¿ç¨
++Comment[zh_TW]=ç»å
¥æèªååå KAlarm 鬧éå®è·ç¨å¼
+ Terminal=false
+ NoDisplay=true
+ X-KDE-autostart-phase=2
+Index: kalarm/Changelog
+===================================================================
+--- kalarm/Changelog (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kalarm/Changelog (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -1,6 +1,13 @@
+ KAlarm
+
+-=== Version 1.3.10 --- 22 May 2006 ===
++=== Version 1.4.3 (KDE 3.5.4) --- 19 June 2006 ===
++Add facility to import alarms from other calendar files.
++Fix Defer dialog time interval maximum to match maximum date/time value.
++Fix crash when a deferred expired recurring alarm is edited from message window.
++Fix crash when a message is redisplayed after login.
++Prevent inapplicable 'Unable to speak' error when alarm redisplayed after login.
++
++=== Version 1.3.10 (KDE 3.5.3) --- 22 May 2006 ===
+ Add DCOP calls and command line options to display the edit alarm dialogue.
+ Add Select All and Deselect actions & shortcuts for import birthdays list.
+ Make system tray icon appear in non-KDE window managers.
+Index: kalarm/alarmtimewidget.cpp
+===================================================================
+--- kalarm/alarmtimewidget.cpp (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kalarm/alarmtimewidget.cpp (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -1,7 +1,7 @@
+ /*
+ * alarmtimewidget.cpp - alarm date/time entry widget
+ * Program: kalarm
+- * Copyright (C) 2001 - 2005 by David Jarvie <software at astrojar.org.uk>
++ * Copyright © 2001-2006 by David Jarvie <software at astrojar.org.uk>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+@@ -397,7 +397,8 @@
+ {
+ if (now.date().daysTo(mMaxDateTime.date()) < 100) // avoid possible 32-bit overflow on secsTo()
+ {
+- maxVal = now.secsTo(mMaxDateTime) / 60;
++ QDateTime dt(now.date(), QTime(now.time().hour(), now.time().minute(), 0)); // round down to nearest minute
++ maxVal = dt.secsTo(mMaxDateTime) / 60;
+ if (maxVal > maxDelayTime)
+ maxVal = maxDelayTime;
+ }
+Index: kalarm/mainwindow.h
+===================================================================
+--- kalarm/mainwindow.h (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kalarm/mainwindow.h (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -104,6 +104,7 @@
+ void slotEnable();
+ void slotToggleTrayIcon();
+ void slotResetDaemon();
++ void slotImportAlarms();
+ void slotBirthdays();
+ void slotTemplates();
+ void slotTemplatesEnd();
+Index: kalarm/kalarmui.rc
+===================================================================
+--- kalarm/kalarmui.rc (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kalarm/kalarmui.rc (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -17,6 +17,7 @@
+ <Menu name="file" >
+ <text>&File</text>
+ <Action name="templates" />
++ <Action name="importAlarms" />
+ <Action name="importBirthdays" />
+ </Menu>
+ <Menu name="view" >
+Index: kalarm/kalarm.desktop
+===================================================================
+--- kalarm/kalarm.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kalarm/kalarm.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -59,6 +59,7 @@
+ GenericName[tr]=KiÅisel Alarm
+ GenericName[uk]=ÐеÑÑоналÑний планÑвалÑник нагадÑванÑ
+ GenericName[zh_CN]=个人æ¥ç¨æé
++GenericName[zh_TW]=å人鬧éæç¨ç¨å¼
+ Terminal=false
+ X-DCOP-ServiceType=Unique
+ X-KDE-StartupNotify=true
+Index: kalarm/recurrenceedit.cpp
+===================================================================
+--- kalarm/recurrenceedit.cpp (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kalarm/recurrenceedit.cpp (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -1,7 +1,7 @@
+ /*
+ * recurrenceedit.cpp - widget to edit the event's recurrence definition
+ * Program: kalarm
+- * Copyright (c) 2002 - 2005 by David Jarvie <software at astrojar.org.uk>
++ * Copyright (c) 2002-2006 by David Jarvie <software at astrojar.org.uk>
+ *
+ * Based originally on KOrganizer module koeditorrecurrence.cpp,
+ * Copyright (c) 2000,2001 Cornelius Schumacher <schumacher at kde.org>
+@@ -894,6 +894,8 @@
+ event.setNoRecur();
+ return;
+ }
++ if (!event.recurs())
++ return; // an error occurred setting up the recurrence
+ if (adjustStart)
+ event.setFirstRecurrence();
+
+Index: kalarm/kalarm.tray.desktop
+===================================================================
+--- kalarm/kalarm.tray.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kalarm/kalarm.tray.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -60,6 +60,7 @@
+ Comment[tr]=KiÅisel Alarm Zamanlayıcı
+ Comment[uk]=ÐеÑÑоналÑний планÑвалÑник нагадÑванÑ: ÑÑаÑÑÑÑ Ñк пÑкÑогÑама в лоÑкÑ
+ Comment[zh_CN]=个人æ¥ç¨æéç¨åºï¼ä»¥ç³»ç»æç徿 å¯å¨
++Comment[zh_TW]=è¦ç¤º/æéè¨æ¯æç¨å¨ï¼ä»¥ç³»çµ±ååç¤ºçæ¹å¼åå
+ Terminal=false
+ X-KDE-autostart-phase=2
+ X-KDE-autostart-condition=kalarmrc:General:AutostartTrayDummy:false
+Index: kalarm/alarmcalendar.cpp
+===================================================================
+--- kalarm/alarmcalendar.cpp (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kalarm/alarmcalendar.cpp (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -1,7 +1,7 @@
+ /*
+ * alarmcalendar.cpp - KAlarm calendar file access
+ * Program: kalarm
+- * Copyright (c) 2001-2006 by David Jarvie <software at astrojar.org.uk>
++ * Copyright © 2001-2006 by David Jarvie <software at astrojar.org.uk>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+@@ -36,6 +36,7 @@
+ #include <kio/netaccess.h>
+ #include <kfileitem.h>
+ #include <ktempfile.h>
++#include <kfiledialog.h>
+ #include <dcopclient.h>
+ #include <kdebug.h>
+
+@@ -49,6 +50,7 @@
+
+ #include "calendarcompat.h"
+ #include "daemon.h"
++#include "functions.h"
+ #include "kalarmapp.h"
+ #include "mainwindow.h"
+ #include "preferences.h"
+@@ -430,6 +432,135 @@
+ }
+
+ /******************************************************************************
++* Import alarms from an external calendar and merge them into KAlarm's calendar.
++* The alarms are given new unique event IDs.
++* Parameters: parent = parent widget for error message boxes
++* Reply = true if all alarms in the calendar were successfully imported
++* = false if any alarms failed to be imported.
++*/
++bool AlarmCalendar::importAlarms(QWidget* parent)
++{
++ KURL url = KFileDialog::getOpenURL(QString::fromLatin1(":importalarms"),
++ QString::fromLatin1("*.vcs *.ics|%1").arg(i18n("Calendar Files")), parent);
++ if (url.isEmpty())
++ {
++ kdError(5950) << "AlarmCalendar::importAlarms(): Empty URL" << endl;
++ return false;
++ }
++ if (!url.isValid())
++ {
++ kdDebug(5950) << "AlarmCalendar::importAlarms(): Invalid URL" << endl;
++ return false;
++ }
++ kdDebug(5950) << "AlarmCalendar::importAlarms(" << url.prettyURL() << ")" << endl;
++
++ bool success = true;
++ QString filename;
++ bool local = url.isLocalFile();
++ if (local)
++ {
++ filename = url.path();
++ if (!KStandardDirs::exists(filename))
++ {
++ kdDebug(5950) << "AlarmCalendar::importAlarms(): File '" << url.prettyURL() << "' not found" << endl;
++ KMessageBox::error(parent, i18n("Could not load calendar '%1'.").arg(url.prettyURL()));
++ return false;
++ }
++ }
++ else
++ {
++ if (!KIO::NetAccess::download(url, filename, MainWindow::mainMainWindow()))
++ {
++ kdError(5950) << "AlarmCalendar::importAlarms(): Download failure" << endl;
++ KMessageBox::error(parent, i18n("Cannot download calendar:\n%1").arg(url.prettyURL()));
++ return false;
++ }
++ kdDebug(5950) << "--- Downloaded to " << filename << endl;
++ }
++
++ // Read the calendar and add its alarms to the current calendars
++ CalendarLocal cal(QString::fromLatin1("UTC"));
++ cal.setLocalTime(); // write out using local time (i.e. no time zone)
++ success = cal.load(filename);
++ if (!success)
++ {
++ kdDebug(5950) << "AlarmCalendar::importAlarms(): error loading calendar '" << filename << "'" << endl;
++ KMessageBox::error(parent, i18n("Could not load calendar '%1'.").arg(url.prettyURL()));
++ }
++ else
++ {
++ CalendarCompat::fix(cal, filename);
++ bool saveActive = false;
++ bool saveExpired = false;
++ bool saveTemplate = false;
++ AlarmCalendar* active = activeCalendar();
++ AlarmCalendar* expired = expiredCalendar();
++ AlarmCalendar* templat = 0;
++ AlarmCalendar* acal;
++ Event::List events = cal.rawEvents();
++ for (Event::List::ConstIterator it = events.begin(); it != events.end(); ++it)
++ {
++ const Event* event = *it;
++ if (event->alarms().isEmpty())
++ continue; // ignore events without alarms
++ KAEvent::Status type = KAEvent::uidStatus(event->uid());
++ switch (type)
++ {
++ case KAEvent::ACTIVE:
++ acal = active;
++ saveActive = true;
++ break;
++ case KAEvent::EXPIRED:
++ acal = expired;
++ saveExpired = true;
++ break;
++ case KAEvent::TEMPLATE:
++ if (!templat)
++ templat = templateCalendarOpen();
++ acal = templat;
++ saveTemplate = true;
++ break;
++ default:
++ continue;
++ }
++ if (!acal)
++ continue;
++
++ Event* newev = new Event(*event);
++
++ // If there is a display alarm without display text, use the event
++ // summary text instead.
++ if (type == KAEvent::ACTIVE && !newev->summary().isEmpty())
++ {
++ const Alarm::List& alarms = newev->alarms();
++ for (Alarm::List::ConstIterator ait = alarms.begin(); ait != alarms.end(); ++ait)
++ {
++ Alarm* alarm = *ait;
++ if (alarm->type() == Alarm::Display && alarm->text().isEmpty())
++ alarm->setText(newev->summary());
++ }
++ newev->setSummary(QString::null); // KAlarm only uses summary for template names
++ }
++ // Give the event a new ID and add it to the calendar
++ newev->setUid(KAEvent::uid(CalFormat::createUniqueId(), type));
++ if (!acal->mCalendar->addEvent(newev))
++ success = false;
++ }
++
++ // Save any calendars which have been modified
++ if (saveActive)
++ active->saveCal();
++ if (saveExpired)
++ expired->saveCal();
++ if (saveTemplate)
++ templat->saveCal();
++ }
++ if (!local)
++ KIO::NetAccess::removeTempFile(filename);
++ return success;
++}
++
++/******************************************************************************
+ * Flag the start of a group of calendar update calls.
+ * The purpose is to avoid multiple calendar saves during a group of operations.
+ */
+Index: korn/KOrn.desktop
+===================================================================
+--- korn/KOrn.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ korn/KOrn.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -53,6 +53,7 @@
+ GenericName[ven]=U sedzesa poso
+ GenericName[xh]=Umposi Wokulumkisa
+ GenericName[zh_CN]=é®ä»¶è¦å
++GenericName[zh_TW]=ä¿¡ä»¶è¦å
+ GenericName[zu]=Umposi Ohlomile
+ Exec=korn -caption "%c" %i %m %f
+ Icon=korn
+Index: korn/main.cpp
+===================================================================
+--- korn/main.cpp (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ korn/main.cpp (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -25,7 +25,7 @@
+ aboutData.addAuthor("Rik Hemsley",0, "rik at kde.org");
+ aboutData.addAuthor("Fixes by Jörg Habenicht",0, "j.habenicht at europemail.com");
+ aboutData.addAuthor("Preview by Heiner Eichmann",0, "h.eichmann at gmx.de");
+- aboutData.addAuthor("Mart Kelder",0,"mart.kde at hccnet.nl");
++ aboutData.addAuthor("Mart Kelder",0,"mart at kelder31.nl");
+
+ KCmdLineArgs::init( argc, argv, &aboutData );
+ KUniqueApplication::addCmdLineOptions();
+Index: korn/subjectsdlg.cpp
+===================================================================
+--- korn/subjectsdlg.cpp (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ korn/subjectsdlg.cpp (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -467,12 +467,20 @@
+ {
+ _delete->ids->clear();
+ KornMailSubject *current;
+- for( current = _delete->messages->first(); current; current = _delete->messages->next() )
++
++ for( current = _delete->messages->first(); current; )
++ {
+ if( current->getMailDrop() == drop )
+ {
+ _delete->ids->append( current->getId() );
+- _delete->messages->remove( current );
++ if( _delete->messages->remove( current ) )
++ current = _delete->messages->current(); //If successfull, current() is already the next message
++ else
++ current = _delete->messages->next(); // If removal failed, goto the next item
++ } else {
++ current = _delete->messages->next(); //Goto next item
+ }
++ }
+ }
+
+ void KornSubjectsDlg::deleteNextMessage()
+Index: kaddressbook/interfaces/kaddressbook_extension.desktop
+===================================================================
+--- kaddressbook/interfaces/kaddressbook_extension.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kaddressbook/interfaces/kaddressbook_extension.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -45,6 +45,7 @@
+ Comment[tr]=KAdresDefteri Uzantı Eklentisi
+ Comment[uk]=ÐÑÑлок ÑозÑиÑÐµÐ½Ð½Ñ Ð°Ð´ÑеÑÐ½Ð¾Ñ ÐºÐ½Ð¸Ð³Ð¸ KAddressBook
+ Comment[zh_CN]=KAddressBook æ©å±æä»¶
++Comment[zh_TW]=KAddressBook 延伏夿ç¨å¼
+
+ [PropertyDef::X-KDE-KAddressBook-ExtensionPluginVersion]
+ Type=int
+Index: kaddressbook/interfaces/kaddressbook_xxport.desktop
+===================================================================
+--- kaddressbook/interfaces/kaddressbook_xxport.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kaddressbook/interfaces/kaddressbook_xxport.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -46,6 +46,7 @@
+ Comment[uk]=ÐÑÑлок ÑмпоÑÑÑ/екÑпоÑÑÑ Ð°Ð´ÑеÑÐ½Ð¾Ñ ÐºÐ½Ð¸Ð³Ð¸ KAddressBook
+ Comment[uz]=ÐÐ°Ð½Ð·Ð¸Ð»Ð»Ð°Ñ Ð´Ð°ÑÑаÑи ÑÑÑн импоÑÑ/ÑкÑпоÑÑ Ð¿Ð»Ð°Ð³Ð¸Ð½Ð¸
+ Comment[zh_CN]=KAddressBook 导å
¥/å¯¼åºæä»¶
++Comment[zh_TW]=KAddressBook å¯å
¥/å¯åºå¤æç¨å¼
+
+ [PropertyDef::X-KDE-KAddressBook-XXPortPluginVersion]
+ Type=int
+Index: kaddressbook/interfaces/kaddressbook_contacteditorwidget.desktop
+===================================================================
+--- kaddressbook/interfaces/kaddressbook_contacteditorwidget.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kaddressbook/interfaces/kaddressbook_contacteditorwidget.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -41,6 +41,7 @@
+ Comment[tr]=Adres Defteri KiÅi Düzenleyici Parçacık Eklentisi
+ Comment[uk]=ÐÑÑлок ÑедагÑÐ²Ð°Ð½Ð½Ñ ÐºÐ¾Ð½ÑакÑÑв адÑеÑÐ½Ð¾Ñ ÐºÐ½Ð¸Ð³Ð¸
+ Comment[zh_CN]=KAddressBook è系人ç¼è¾é¨ä»¶æä»¶
++Comment[zh_TW]=KAddressBook è¯çµ¡äººç·¨è¼¯å¨å¤æç¨å¼
+
+ [PropertyDef::X-KDE-KAddressBook-CEWPluginVersion]
+ Type=int
+Index: kaddressbook/dcopaddressbook.desktop
+===================================================================
+--- kaddressbook/dcopaddressbook.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kaddressbook/dcopaddressbook.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -48,3 +48,4 @@
+ Comment[uk]=ÐдÑеÑна книга з ÑнÑеÑÑейÑом DCOP
+ Comment[uz]=DCOP инÑеÑÑейÑли Ð¼Ð°Ð½Ð·Ð¸Ð»Ð»Ð°Ñ Ð´Ð°ÑÑаÑи
+ Comment[zh_CN]=å
·æ DCOP æ¥å£çå°åç°¿
++Comment[zh_TW]=æ DCOP ä»é¢çéè¨é
+Index: kaddressbook/kaddressbook.desktop
+===================================================================
+--- kaddressbook/kaddressbook.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kaddressbook/kaddressbook.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -11,6 +11,7 @@
+ Name[nds]=KAdressbook
+ Name[nn]=KDE-adressebok
+ Name[pl]=KsiÄ
żka adresowa
++Name[sk]=Adresár
+ Name[sv]=Adressbok
+ Name[ta]=à®à¯à®®à¯à®à®µà®°à®¿à®ªà¯ பà¯à®¤à¯à®¤à®à®®à¯
+ Name[tr]=KDE Adres Defteri
+@@ -46,6 +47,7 @@
+ GenericName[pt]=Livro de Endereços
+ GenericName[pt_BR]=Livro de Endereços
+ GenericName[ru]=ÐдÑеÑÐ½Ð°Ñ ÐºÐ½Ð¸Ð³Ð°
++GenericName[sk]=Správca adries
+ GenericName[sl]=Upravitelj naslovov
+ GenericName[sr]=ÐенаÑÐµÑ Ð°Ð´ÑеÑа
+ GenericName[sr at Latn]=Menadžer adresa
+Index: kaddressbook/csv-templates/kaddressbook.desktop
+===================================================================
+--- kaddressbook/csv-templates/kaddressbook.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kaddressbook/csv-templates/kaddressbook.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -36,7 +36,6 @@
+ Name[tg]=ÐиÑоби адÑÐµÑ (KDE 3.1)
+ Name[tr]=KDE Adres Defteri (KDE 3.1)
+ Name[ven]=Bugu ya diresi ya K (KDE 3.1)
+-Name[zh_TW]=KAddressBook (KDE 3.1) éè¨é
+
+ [csv column map]
+ 0=1
+Index: kaddressbook/csv-templates/yahoo.desktop
+===================================================================
+--- kaddressbook/csv-templates/yahoo.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kaddressbook/csv-templates/yahoo.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -51,6 +51,7 @@
+ Name[uk]=ÐдÑеÑна книга Yahoo
+ Name[uz]=Yahoo! Ð¼Ð°Ð½Ð·Ð¸Ð»Ð»Ð°Ñ Ð´Ð°ÑÑаÑи
+ Name[zh_CN]=Yahoo! å°åç°¿
++Name[zh_TW]=Yahoo! éè¨é
+
+ [csv column map]
+ 0=3
+Index: kaddressbook/views/tableview.desktop
+===================================================================
+--- kaddressbook/views/tableview.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kaddressbook/views/tableview.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -49,6 +49,7 @@
+ Name[uk]=ÐиглÑд ÑаблиÑеÑ
+ Name[uz]=Ðадвал кÑÑиниÑида
+ Name[zh_CN]=è¡¨æ ¼è§å¾
++Name[zh_TW]=è¡¨æ ¼æª¢è¦
+ Type=Service
+ ServiceTypes=KAddressBook/View
+ X-KDE-KAddressBook-ViewPluginVersion=1
+Index: kaddressbook/views/iconview.desktop
+===================================================================
+--- kaddressbook/views/iconview.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kaddressbook/views/iconview.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -62,6 +62,7 @@
+ Name[vi]=Xem icon
+ Name[xh]=Imboniselo ye Icon
+ Name[zh_CN]=徿 è§å¾
++Name[zh_TW]=å示檢è¦
+ Name[zu]=Umboniso we Icon
+ Type=Service
+ ServiceTypes=KAddressBook/View
+Index: kaddressbook/views/cardview.desktop
+===================================================================
+--- kaddressbook/views/cardview.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kaddressbook/views/cardview.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -28,7 +28,7 @@
+ Name[lt]=KortelÄs vaizdas
+ Name[ms]=Pelihat Kad
+ Name[nb]=Kortvisning
+-Name[nds]=Visitenkorten-Kieker
++Name[nds]=Visitenkoort-Kieker
+ Name[nl]=Kaartweergave
+ Name[nn]=Kortvising
+ Name[pa]=à¨à¨¾à¨°à¨¡ ਦਰਿਸ਼
+@@ -48,6 +48,7 @@
+ Name[tr]=Kart Görünümü
+ Name[uk]=ÐиглÑд каÑÑками
+ Name[zh_CN]=å¡çè§å¾
++Name[zh_TW]=å¡ç檢è¦
+ Type=Service
+ ServiceTypes=KAddressBook/View
+ X-KDE-KAddressBook-ViewPluginVersion=1
+Index: kaddressbook/xxport/kde2_xxport.desktop
+===================================================================
+--- kaddressbook/xxport/kde2_xxport.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kaddressbook/xxport/kde2_xxport.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -41,6 +41,7 @@
+ Name[tr]=KAB KDE2 XXPort Eklentisi
+ Name[uk]=ÐÑÑлок KAB Ð´Ð»Ñ Ð¾Ð±Ð¼ÑÐ½Ñ Ð· KDE2
+ Name[zh_CN]=KAB KDE2 XXPort æä»¶
++Name[zh_TW]=KAB KDE2 XXPort 夿ç¨å¼
+ Comment=Plugin to import the old KDE 2 address book
+ Comment[be]=ÐапаÑненÑне Ð´Ð»Ñ ÑмпаÑÑÑ ÑÑаÑой адÑаÑнай кнÑÐ³Ñ KDE 2
+ Comment[bg]=ÐÑиÑÑавка за импоÑÑ Ð½Ð° конÑакÑиÑе Ð¾Ñ ÑÑаÑаÑа веÑÑÐ¸Ñ Ð½Ð° адÑеÑника в ÐÐÐ 2
+@@ -83,6 +84,7 @@
+ Comment[uk]=ÐÑÑлок Ð´Ð»Ñ ÑмпоÑÑÑ Ð°Ð´ÑеÑÐ½Ð¾Ñ ÐºÐ½Ð¸Ð³Ð¸ ÑÑаÑого ÑоÑмаÑÑ ÑаÑÑв KDE 2
+ Comment[uz]=ÐÑки KDE 2 Ð¼Ð°Ð½Ð·Ð¸Ð»Ð»Ð°Ñ Ð´Ð°ÑÑаÑини импоÑÑ ÒÐ¸Ð»Ð¸Ñ ÑÑÑн плагин
+ Comment[zh_CN]=导å
¥æ§ç KDE 2 å°åç°¿çæä»¶
++Comment[zh_TW]=å¯å
¥èç KDE2 éè¨éç夿ç¨å¼
+ Type=Service
+ ServiceTypes=KAddressBook/XXPort
+ X-KDE-KAddressBook-XXPortPluginVersion=1
+Index: kaddressbook/xxport/gnokii_xxport.cpp
+===================================================================
+--- kaddressbook/xxport/gnokii_xxport.cpp (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kaddressbook/xxport/gnokii_xxport.cpp (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -1,6 +1,6 @@
+ /*
+ This file is part of KAddressbook.
+- Copyright (c) 2003-2004 Helge Deller <deller at kde.org>
++ Copyright (c) 2003-2006 Helge Deller <deller at kde.org>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License version 2 as
+@@ -19,7 +19,6 @@
+ with any edition of Qt, and distribute the resulting executable,
+ without including the source code for Qt in the source distribution.
+ */
+-
+ /*
+ Description:
+ This filter allows you to import and export the KDE addressbook entries
+@@ -33,24 +32,25 @@
+
+ #include "config.h"
+
+-#include <qcursor.h>
+-
+-#include <kdebug.h>
+-#include <klocale.h>
+-#include <kmessagebox.h>
+-#include <kprogress.h>
+-#include <kguiitem.h>
+-
+ #ifdef HAVE_GNOKII_H
+ extern "C" {
+ #include <gnokii.h>
+ }
+ #else
+ #ifdef __GNUC__
+-# warning "Please install the gnokii development headers and libraries !"
++# warning "Please install gnokii (http://www.gnokii.org) development headers and libraries !"
++# warning "Please use at least version 0.6.13 or later of gnokii."
+ #endif
+ #endif
+
++#include <qcursor.h>
++
++#include <kdebug.h>
++#include <klocale.h>
++#include <kmessagebox.h>
++#include <kprogress.h>
++#include <kguiitem.h>
++
+ #include "gnokii_xxport.h"
+
+ #define APP "GNOKII_XXPORT"
+@@ -86,9 +86,711 @@
+ createExportAction( i18n( "Export to Mobile Phone..." ) );
+ }
+
+-/* import */
+
+ #ifdef HAVE_GNOKII_H
++static QString makeValidPhone( const QString &number )
++{
++ // allowed chars: 0-9, *, #, p, w, +
++ QString num = number.simplifyWhiteSpace();
++ QString allowed("0123456789*+#pw");
++ for (unsigned int i=num.length(); i>=1; i--)
++ if (allowed.find(num[i-1])==-1)
++ num.remove(i-1,1);
++ if (num.isEmpty())
++ num = "0";
++ return num;
++}
++#endif
++
++/******************************************************************************
++ ******************************************************************************
++ ******************************************************************************
++ ******************************************************************************
++ ******************************************************************************/
++
++#if defined(HAVE_GNOKII_H) && defined(LIBGNOKII_VERSION_MAJOR) && (LIBGNOKII_VERSION_MAJOR >= 3)
++
++/* NEW GNOKII LIBRARIES (>= 0.6.13) */
++
++static const char *manufacturer, *model, *revision, *imei;
++static struct gn_statemachine *state;
++
++static void busterminate(void)
++{
++ gn_lib_phone_close(state);
++ gn_lib_phoneprofile_free(&state);
++ gn_lib_library_free();
++}
++
++static QString businit(void)
++{
++ GNOKII_DEBUG( QString("Compiled with libgnokii version 0x%1\n").arg(QString::number(LIBGNOKII_VERSION,16)) );
++ GNOKII_DEBUG( QString("Using libgnokii runtime version 0x%1\n").arg(QString::number(gn_lib_version(),16)) );
++
++ gn_error error = gn_lib_phoneprofile_load(NULL, &state);
++ if (error)
++ return i18n("Failed to initialize the gnokii library.");
++
++ error = gn_lib_phone_open( state );
++ GNOKII_CHECK_ERROR(error);
++ if (error != GN_ERR_NONE) {
++ busterminate();
++ return i18n("<qt><center>Mobile Phone interface initialization failed.<br><br>"
++ "The returned error message was:<br><b>%1</b><br><br>"
++ "You might try to run \"gnokii --identify\" on the command line to "
++ "check any cable/transport issues and to verify if your gnokii "
++ "configuration is correct.</center></qt>")
++ .arg(gn_error_print(error));
++ }
++
++ // identify phone
++ manufacturer = gn_lib_get_phone_manufacturer(state);
++ model = gn_lib_get_phone_model(state);
++ revision = gn_lib_get_phone_revision(state);
++ imei = gn_lib_get_phone_imei(state);
++
++ GNOKII_DEBUG( QString("Found mobile phone: %1 %2, Revision: %3, IMEI: %4\n")
++ .arg(manufacturer, model, revision, imei) );
++
++ return QString::null;
++}
++
++
++// get number of entries in this phone memory type (internal/SIM-card)
++static gn_error read_phone_memstat( const gn_memory_type memtype, gn_memory_status *memstat )
++{
++ gn_error error;
++
++ error = gn_lib_addressbook_memstat(state, memtype, &memstat->used, &memstat->free);
++
++ GNOKII_DEBUG( QString("\n\nMobile phone memory status: Type: %1, used=%2, free=%3, total=%4\n\n")
++ .arg(memtype).arg(memstat->used).arg(memstat->free).arg(memstat->used+memstat->free) );
++ return error;
++}
++
++
++static QString buildPhoneInfoString( const gn_memory_status &memstat )
++{
++ QString format = QString::fromLatin1("<tr><td><b>%1</b></td><td>%2</td></tr>");
++
++ return QString::fromLatin1("<b>%1</b><br><table>%2%3%4%5%6</table><br>")
++ .arg(i18n("Mobile Phone information:"))
++ .arg(format.arg(i18n("Manufacturer")).arg(GN_FROM(manufacturer)))
++ .arg(format.arg(i18n("Phone model")).arg(GN_FROM(model)))
++ .arg(format.arg(i18n("Revision")).arg(GN_FROM(revision)))
++ .arg(format.arg(i18n("IMEI")).arg(GN_FROM(imei)))
++ .arg(format.arg(i18n("Phonebook status"))
++ .arg(i18n("%1 out of %2 contacts used").arg(memstat.used).arg(memstat.used+memstat.free)));
++}
++
++// read and evaluate all phone entries
++static gn_error read_phone_entries( const char *memtypestr, gn_memory_type memtype,
++ KABC::AddresseeList *addrList )
++{
++ gn_error error;
++
++ if (m_progressDlg->wasCancelled())
++ return GN_ERR_NONE;
++
++ KProgress* progress = (KProgress*)m_progressDlg->progressBar();
++
++ progress->setProgress(0);
++ this_filter->processEvents();
++
++ // get number of entries in this phone memory type (internal/SIM-card)
++ gn_memory_status memstat;
++ error = read_phone_memstat(memtype, &memstat);
++
++ QStringList addrlist;
++ KABC::Address *addr;
++ QString s, country;
++
++ progress->setTotalSteps(memstat.used);
++ m_progressDlg->setLabel(i18n("<qt>Importing <b>%1</b> contacts from <b>%2</b> of the Mobile Phone.<br><br>%3</qt>")
++ .arg(memstat.used)
++ .arg(gn_memory_type2str(memtype))
++ .arg(buildPhoneInfoString(memstat)) );
++
++ int num_read = 0;
++
++ for (int i = 1; !m_progressDlg->wasCancelled() && i <= memstat.used + memstat.free; i++) {
++ error = gn_lib_phonebook_read_entry(state, memtype, i);
++ GNOKII_CHECK_ERROR(error);
++
++ progress->setProgress(num_read);
++ this_filter->processEvents();
++
++ if (error == GN_ERR_EMPTYLOCATION)
++ continue;
++ if (error == GN_ERR_INVALIDLOCATION)
++ break;
++ if (error == GN_ERR_INVALIDMEMORYTYPE)
++ break;
++ if (error == GN_ERR_NONE) {
++ const int subentries_count = gn_lib_get_pb_num_subentries(state);
++ const char *name = gn_lib_get_pb_name(state);
++ const char *number = gn_lib_get_pb_number(state);
++
++ GNOKII_DEBUG(QString("%1: %2, num=%3, location=%4, group=%5, count=%6\n").arg(i)
++ .arg(GN_FROM(name)).arg(GN_FROM(number))
++ .arg(gn_lib_get_pb_location(state)).arg(gn_lib_get_pb_caller_group(state))
++ .arg(subentries_count));
++ KABC::Addressee *a = new KABC::Addressee();
++
++ // try to split Name into FamilyName and GivenName
++ s = GN_FROM(name).simplifyWhiteSpace();
++ a->setFormattedName(s); // set formatted name as in Phone
++ if (s.find(',') == -1) {
++ // assumed format: "givenname [... familyname]"
++ addrlist = QStringList::split(' ', s);
++ if (addrlist.count() == 1) {
++ // only one string -> put it in the GivenName
++ a->setGivenName(s);
++ } else {
++ // multiple strings -> split them.
++ a->setFamilyName(addrlist.last().simplifyWhiteSpace());
++ addrlist.remove(addrlist.last());
++ a->setGivenName(addrlist.join(" ").simplifyWhiteSpace());
++ }
++ } else {
++ // assumed format: "familyname, ... givenname"
++ addrlist = QStringList::split(',', s);
++ a->setFamilyName(addrlist.first().simplifyWhiteSpace());
++ addrlist.remove(addrlist.first());
++ a->setGivenName(addrlist.join(" ").simplifyWhiteSpace());
++ }
++
++ a->insertCustom(APP, "X_GSM_CALLERGROUP", s.setNum(gn_lib_get_pb_caller_group(state)));
++ a->insertCustom(APP, "X_GSM_STORE_AT", QString("%1%2").arg(memtypestr).arg(gn_lib_get_pb_location(state)));
++
++ // set ProductId
++ a->setProductId(QString("%1-%2-%3-%4").arg(APP).arg(model).arg(revision).arg(imei));
++
++ // evaluate timestamp (ignore timezone)
++ QDateTime datetime;
++ gn_timestamp ts = gn_lib_get_pb_date(state);
++ if (ts.year<1998)
++ datetime = QDateTime::currentDateTime();
++ else
++ datetime = QDateTime( QDate(ts.year, ts.month, ts.day),
++ QTime(ts.hour, ts.minute, ts.second) );
++ GNOKII_DEBUG(QString(" date=%1\n").arg(datetime.toString()));
++ a->setRevision(datetime);
++
++ if (!subentries_count)
++ a->insertPhoneNumber(KABC::PhoneNumber(number,
++ KABC::PhoneNumber::Work | KABC::PhoneNumber::Pref));
++
++ /* scan sub-entries */
++ if (subentries_count)
++ for (int n=0; n<subentries_count; n++) {
++ gn_phonebook_entry_type entry_type;
++ gn_phonebook_number_type number_type;
++ const char *number;
++
++ error = gn_lib_get_pb_subentry(state, n, &entry_type, &number_type, &number);
++ GNOKII_CHECK_ERROR(error);
++
++ QString s = GN_FROM(number).simplifyWhiteSpace();
++ GNOKII_DEBUG(QString(" Subentry#%1, entry_type=%2, number_type=%3, number=%4\n")
++ .arg(n).arg(entry_type).arg(number_type).arg(s));
++ if (s.isEmpty())
++ continue;
++ switch(entry_type) {
++ case GN_PHONEBOOK_ENTRY_Name:
++ a->setName(s);
++ break;
++ case GN_PHONEBOOK_ENTRY_Email:
++ a->insertEmail(s);
++ break;
++ case GN_PHONEBOOK_ENTRY_Postal:
++ addrlist = QStringList::split(';', s, true);
++ addr = new KABC::Address(KABC::Address::Work);
++ if (addrlist.count() <= 1) {
++ addrlist = QStringList::split(',', s, true);
++ if (addrlist.count() > 1 ) {
++ // assumed format: "Locality, ZIP, Country"
++ addr->setLocality(addrlist[0]);
++ addr->setPostalCode(addrlist[1]);
++ if (!addrlist[2].isEmpty())
++ addr->setCountry(i18n(GN_TO(addrlist[2])));
++ } else {
++ // no idea about the format, just store it.
++ addr->setLocality(s);
++ }
++ } else {
++ // assumed format: "POBox; Extended; Street; Locality; Region; ZIP [;Country]
++ addr->setPostOfficeBox(addrlist[0]);
++ addr->setExtended(addrlist[1]);
++ addr->setStreet(addrlist[2]);
++ addr->setLocality(addrlist[3]);
++ addr->setRegion(addrlist[4]);
++ addr->setPostalCode(addrlist[5]);
++ country = addrlist[6];
++ if (!country.isEmpty())
++ addr->setCountry(i18n(GN_TO(country)));
++ }
++ a->insertAddress(*addr);
++ delete addr;
++ break;
++ case GN_PHONEBOOK_ENTRY_Note:
++ if (!a->note().isEmpty())
++ s = "\n" + s;
++ a->setNote(a->note()+s);
++ break;
++ case GN_PHONEBOOK_ENTRY_Number:
++ enum KABC::PhoneNumber::Types phonetype;
++ switch (number_type) {
++ case GN_PHONEBOOK_NUMBER_Mobile: phonetype = KABC::PhoneNumber::Cell; break;
++ case GN_PHONEBOOK_NUMBER_Fax: phonetype = KABC::PhoneNumber::Fax; break;
++ case GN_PHONEBOOK_NUMBER_General:
++ case GN_PHONEBOOK_NUMBER_Work: phonetype = KABC::PhoneNumber::Work; break;
++ default:
++ case GN_PHONEBOOK_NUMBER_Home: phonetype = KABC::PhoneNumber::Home; break;
++ }
++ //if (s == entry.number)
++ // type = (KABC::PhoneNumber::Types) (phonetype | KABC::PhoneNumber::Pref);
++ a->insertPhoneNumber(KABC::PhoneNumber(s, phonetype));
++ break;
++ case GN_PHONEBOOK_ENTRY_URL:
++ a->setUrl(s);
++ break;
++ case GN_PHONEBOOK_ENTRY_Group:
++ a->insertCategory(s);
++ break;
++ default:
++ GNOKII_DEBUG(QString(" Not handled id=%1, entry=%2\n")
++ .arg(entry_type).arg(s));
++ break;
++ } // switch()
++ } // if(subentry)
++
++ // add only if entry was valid
++ if (strlen(name) || strlen(number) || subentries_count)
++ addrList->append(*a);
++
++ // did we read all valid phonebook-entries ?
++ num_read++;
++ delete a;
++ if (num_read >= memstat.used)
++ break; // yes, all were read
++ else
++ continue; // no, we are still missing some.
++ }
++ GNOKII_CHECK_ERROR(error);
++ }
++
++ return GN_ERR_NONE;
++}
++
++// export to phone
++
++static gn_error xxport_phone_write_entry( int phone_location, gn_memory_type memtype,
++ const KABC::Addressee *addr)
++{
++ QString s;
++
++ /* initialize the phonebook entry values to zero */
++ gn_lib_phonebook_prepare_write_entry(state);
++
++ gn_lib_set_pb_location(state, phone_location);
++
++ gn_lib_set_pb_name(state, GN_TO(addr->realName()));
++ s = addr->phoneNumber(KABC::PhoneNumber::Pref).number();
++ if (s.isEmpty())
++ s = addr->phoneNumber(KABC::PhoneNumber::Work).number();
++ if (s.isEmpty())
++ s = addr->phoneNumber(KABC::PhoneNumber::Home).number();
++ if (s.isEmpty())
++ s = addr->phoneNumber(KABC::PhoneNumber::Cell).number();
++ if (s.isEmpty() && addr->phoneNumbers().count()>0)
++ s = (*addr->phoneNumbers().at(0)).number();
++ s = makeValidPhone(s);
++ gn_lib_set_pb_number(state, s.ascii());
++ gn_lib_set_pb_memtype(state, memtype);
++ QString cg = addr->custom(APP, "X_GSM_CALLERGROUP");
++ if (cg.isEmpty())
++ gn_lib_set_pb_caller_group(state, GN_PHONEBOOK_GROUP_None); // default group
++ else
++ gn_lib_set_pb_caller_group(state, (gn_phonebook_group_type) cg.toInt());
++
++ // set date/revision
++ QDateTime datetime = addr->revision();
++ QDate date(datetime.date());
++ QTime time(datetime.time());
++ gn_timestamp ts;
++ gn_timestamp_set( &ts, date.year(), date.month(), date.day(),
++ time.hour(), time.minute(), time.second(), 0 );
++ gn_lib_set_pb_date(state, ts);
++
++ GNOKII_DEBUG(QString("Write #%1: name=%2, number=%3\n").arg(phone_location)
++ .arg(GN_FROM(gn_lib_get_pb_name(state))).arg(GN_FROM(gn_lib_get_pb_number(state))));
++
++ const KABC::Address homeAddr = addr->address(KABC::Address::Home);
++ const KABC::Address workAddr = addr->address(KABC::Address::Work);
++
++ // add all phone numbers
++ const KABC::PhoneNumber::List phoneList = addr->phoneNumbers();
++ KABC::PhoneNumber::List::ConstIterator it;
++ for ( it = phoneList.begin(); it != phoneList.end(); ++it ) {
++ const KABC::PhoneNumber *phonenumber = &(*it);
++ s = phonenumber->number();
++ if (s.isEmpty()) continue;
++ gn_phonebook_number_type type;
++ switch (phonenumber->type() & ~KABC::PhoneNumber::Pref) {
++ case KABC::PhoneNumber::Home: type = GN_PHONEBOOK_NUMBER_Home; break;
++ case KABC::PhoneNumber::Voice:
++ case KABC::PhoneNumber::Work: type = GN_PHONEBOOK_NUMBER_Work; break;
++ case KABC::PhoneNumber::Pager:
++ case KABC::PhoneNumber::Cell: type = GN_PHONEBOOK_NUMBER_Mobile; break;
++ case KABC::PhoneNumber::Fax: type = GN_PHONEBOOK_NUMBER_Fax; break;
++ default: type = GN_PHONEBOOK_NUMBER_General; break;
++ }
++ gn_lib_set_pb_subentry(state, -1 /* index to append entry */,
++ GN_PHONEBOOK_ENTRY_Number, type, makeValidPhone(s).ascii());
++ /*subentry->id = phone_location<<8+entry.subentries_count;*/
++ }
++ // add URL
++ s = addr->url().prettyURL();
++ if (!s.isEmpty()) {
++ gn_lib_set_pb_subentry(state, -1 /* index to append entry */,
++ GN_PHONEBOOK_ENTRY_URL, GN_PHONEBOOK_NUMBER_General, GN_TO(s));
++ }
++ // add E-Mails
++ QStringList emails = addr->emails();
++ for (unsigned int n=0; n<emails.count(); n++) {
++ s = emails[n].simplifyWhiteSpace();
++ if (s.isEmpty()) continue;
++ // only one email allowed if we have URLS, notes, addresses (to avoid phone limitations)
++ if (n && !addr->url().isEmpty() && !addr->note().isEmpty() && addr->addresses().count()) {
++ GNOKII_DEBUG(QString(" DROPPED email %1 in favor of URLs, notes and addresses.\n")
++ .arg(s));
++ continue;
++ }
++ gn_lib_set_pb_subentry(state, -1 /* index to append entry */,
++ GN_PHONEBOOK_ENTRY_Email, GN_PHONEBOOK_NUMBER_General, GN_TO(s));
++ }
++ // add Adresses
++ const KABC::Address::List addresses = addr->addresses();
++ KABC::Address::List::ConstIterator it2;
++ for ( it2 = addresses.begin(); it2 != addresses.end(); ++it2 ) {
++ const KABC::Address *Addr = &(*it2);
++ if (Addr->isEmpty()) continue;
++ QStringList a;
++ QChar sem(';');
++ QString sem_repl(QString::fromLatin1(","));
++ a.append( Addr->postOfficeBox().replace( sem, sem_repl ) );
++ a.append( Addr->extended() .replace( sem, sem_repl ) );
++ a.append( Addr->street() .replace( sem, sem_repl ) );
++ a.append( Addr->locality() .replace( sem, sem_repl ) );
++ a.append( Addr->region() .replace( sem, sem_repl ) );
++ a.append( Addr->postalCode() .replace( sem, sem_repl ) );
++ a.append( Addr->country() .replace( sem, sem_repl ) );
++ s = a.join(sem);
++ gn_lib_set_pb_subentry(state, -1 /* index to append entry */,
++ GN_PHONEBOOK_ENTRY_Postal, GN_PHONEBOOK_NUMBER_General, GN_TO(s));
++ }
++ // add Note
++ s = addr->note().simplifyWhiteSpace();
++ if (!s.isEmpty()) {
++ gn_lib_set_pb_subentry(state, -1 /* index to append entry */,
++ GN_PHONEBOOK_ENTRY_Note, GN_PHONEBOOK_NUMBER_General, GN_TO(s));
++ }
++
++ // debug output
++ for (int st=0; st<gn_lib_get_pb_num_subentries(state); st++) {
++ gn_phonebook_entry_type entry_type;
++ gn_phonebook_number_type number_type;
++ const char *number;
++ gn_lib_get_pb_subentry(state, st, &entry_type, &number_type, &number);
++ GNOKII_DEBUG(QString(" SubTel #%1: entry_type=%2, number_type=%3, number=%4\n")
++ .arg(st).arg(entry_type)
++ .arg(number_type).arg(GN_FROM(number)));
++ }
++
++ gn_error error = gn_lib_phonebook_write_entry(state, memtype, phone_location);
++ GNOKII_CHECK_ERROR(error);
++
++ return error;
++}
++
++
++static gn_error xxport_phone_delete_entry( int phone_location, gn_memory_type memtype )
++{
++ return gn_lib_phonebook_entry_delete(state, memtype, phone_location);
++}
++
++
++KABC::AddresseeList GNOKIIXXPort::importContacts( const QString& ) const
++{
++ KABC::AddresseeList addrList;
++
++ if (KMessageBox::Continue != KMessageBox::warningContinueCancel(parentWidget(),
++ i18n("<qt>Please connect your Mobile Phone to your computer and press "
++ "<b>Continue</b> to start importing the personal contacts.<br><br>"
++ "Please note that if your Mobile Phone is not properly connected "
++ "the following detection phase might take up to two minutes, during which "
++ "KAddressbook will behave unresponsively.</qt>") ))
++ return addrList;
++
++ m_progressDlg = new KProgressDialog( parentWidget(), "importwidget",
++ i18n("Mobile Phone Import"),
++ i18n("<qt><center>Establishing connection to the Mobile Phone.<br><br>"
++ "Please wait...</center></qt>") );
++ m_progressDlg->setAllowCancel(true);
++ m_progressDlg->progressBar()->setProgress(0);
++ m_progressDlg->progressBar()->setCenterIndicator(true);
++ m_progressDlg->setModal(true);
++ m_progressDlg->setInitialSize(QSize(450,350));
++ m_progressDlg->show();
++ processEvents();
++
++#if (QT_VERSION >= 0x030300)
++ m_progressDlg->setCursor( Qt::BusyCursor );
++#endif
++ QString errStr = businit();
++ m_progressDlg->unsetCursor();
++
++ if (!errStr.isEmpty()) {
++ KMessageBox::error(parentWidget(), errStr);
++ delete m_progressDlg;
++ return addrList;
++ }
++
++ GNOKII_DEBUG("GNOKII import filter started.\n");
++ m_progressDlg->setButtonText(i18n("&Stop Import"));
++
++ read_phone_entries("ME", GN_MT_ME, &addrList); // internal phone memory
++ read_phone_entries("SM", GN_MT_SM, &addrList); // SIM card
++
++ GNOKII_DEBUG("GNOKII import filter finished.\n");
++
++ busterminate();
++ delete m_progressDlg;
++
++ return addrList;
++}
++
++
++bool GNOKIIXXPort::exportContacts( const KABC::AddresseeList &list, const QString & )
++{
++ if (KMessageBox::Continue != KMessageBox::warningContinueCancel(parentWidget(),
++ i18n("<qt>Please connect your Mobile Phone to your computer and press "
++ "<b>Continue</b> to start exporting the selected personal contacts.<br><br>"
++ "Please note that if your Mobile Phone is not properly connected "
++ "the following detection phase might take up to two minutes, during which "
++ "KAddressbook will behave unresponsively.</qt>") ))
++ return false;
++
++ m_progressDlg = new KProgressDialog( parentWidget(), "importwidget",
++ i18n("Mobile Phone Export"),
++ i18n("<qt><center>Establishing connection to the Mobile Phone.<br><br>"
++ "Please wait...</center></qt>") );
++ m_progressDlg->setAllowCancel(true);
++ m_progressDlg->progressBar()->setProgress(0);
++ m_progressDlg->progressBar()->setCenterIndicator(true);
++ m_progressDlg->setModal(true);
++ m_progressDlg->setInitialSize(QSize(450,350));
++ m_progressDlg->show();
++ processEvents();
++
++ KProgress* progress = (KProgress*)m_progressDlg->progressBar();
++
++ KABC::AddresseeList::ConstIterator it;
++ QStringList failedList;
++
++ gn_error error;
++ bool deleteLabelInitialized = false;
++
++#if (QT_VERSION >= 0x030300)
++ m_progressDlg->setCursor( Qt::BusyCursor );
++#endif
++ QString errStr = businit();
++ m_progressDlg->unsetCursor();
++
++ if (!errStr.isEmpty()) {
++ KMessageBox::error(parentWidget(), errStr);
++ delete m_progressDlg;
++ return false;
++ }
++
++ GNOKII_DEBUG("GNOKII export filter started.\n");
++
++ gn_memory_type memtype = GN_MT_ME; // internal phone memory
++
++ int phone_count; // num entries in phone
++ bool overwrite_phone_entries = false;
++ int phone_entry_no, entries_written;
++ bool entry_empty;
++
++ // get number of entries in this phone memory
++ gn_memory_status memstat;
++ error = read_phone_memstat(memtype, &memstat);
++ if (error == GN_ERR_NONE) {
++ GNOKII_DEBUG("Writing to internal phone memory.\n");
++ } else {
++ memtype = GN_MT_SM; // try SIM card instead
++ error = read_phone_memstat(memtype, &memstat);
++ if (error != GN_ERR_NONE)
++ goto finish;
++ GNOKII_DEBUG("Writing to SIM card memory.\n");
++ }
++ phone_count = memstat.used;
++
++ if (memstat.free >= (int) list.count()) {
++ if (KMessageBox::No == KMessageBox::questionYesNo(parentWidget(),
++ i18n("<qt>Do you want the selected contacts to be <b>appended</b> to "
++ "the current mobile phonebook or should they <b>replace</b> all "
++ "currently existing phonebook entries ?<br><br>"
++ "Please note, that in case you choose to replace the phonebook "
++ "entries, every contact in your phone will be deleted and only "
++ "the newly exported contacts will be available from inside your phone.</qt>"),
++ i18n("Export to Mobile Phone"),
++ KGuiItem(i18n("&Append to Current Phonebook")),
++ KGuiItem(i18n("&Replace Current Phonebook with New Contacts")) ) )
++ overwrite_phone_entries = true;
++ }
++
++ progress->setTotalSteps(list.count());
++ entries_written = 0;
++ progress->setProgress(entries_written);
++ m_progressDlg->setButtonText(i18n("&Stop Export"));
++ m_progressDlg->setLabel(i18n("<qt>Exporting <b>%1</b> contacts to the <b>%2</b> "
++ "of the Mobile Phone.<br><br>%3</qt>")
++ .arg(list.count())
++ .arg(gn_memory_type2str(memtype))
++ .arg(buildPhoneInfoString(memstat)) );
++
++ // Now run the loop...
++ phone_entry_no = 1;
++ for ( it = list.begin(); it != list.end(); ++it ) {
++ const KABC::Addressee *addr = &(*it);
++ if (addr->isEmpty())
++ continue;
++ // don't write back SIM-card entries !
++ if (addr->custom(APP, "X_GSM_STORE_AT").startsWith("SM"))
++ continue;
++
++ progress->setProgress(entries_written++);
++
++try_next_phone_entry:
++ this_filter->processEvents();
++ if (m_progressDlg->wasCancelled())
++ break;
++
++ // End of phone memory reached ?
++ if (phone_entry_no > (memstat.used + memstat.free))
++ break;
++
++ GNOKII_DEBUG(QString("Try to write entry '%1' at phone_entry_no=%2, phone_count=%3\n")
++ .arg(addr->realName()).arg(phone_entry_no).arg(phone_count));
++
++ error = GN_ERR_NONE;
++
++ // is this phone entry empty ?
++ entry_empty = gn_lib_phonebook_entry_isempty(state, memtype, phone_entry_no);
++ if (overwrite_phone_entries) {
++ // overwrite this phonebook entry ...
++ if (!entry_empty)
++ phone_count--;
++ error = xxport_phone_write_entry( phone_entry_no, memtype, addr);
++ phone_entry_no++;
++ } else {
++ // add this phonebook entry if possible ...
++ if (entry_empty) {
++ error = xxport_phone_write_entry( phone_entry_no, memtype, addr);
++ phone_entry_no++;
++ } else {
++ phone_entry_no++;
++ goto try_next_phone_entry;
++ }
++ }
++
++ if (error != GN_ERR_NONE)
++ failedList.append(addr->realName());
++
++ // break if we got an error on the first entry
++ if (error != GN_ERR_NONE && it==list.begin())
++ break;
++
++ } // for()
++
++ // if we wanted to overwrite all entries, make sure, that we also
++ // delete all remaining entries in the mobile phone.
++ while (overwrite_phone_entries && error==GN_ERR_NONE && phone_count>0) {
++ if (m_progressDlg->wasCancelled())
++ break;
++ if (!deleteLabelInitialized) {
++ m_progressDlg->setLabel(
++ i18n("<qt><center>"
++ "All selected contacts have been sucessfully copied to "
++ "the Mobile Phone.<br><br>"
++ "Please wait until all remaining orphaned contacts from "
++ "the Mobile Phone have been deleted.</center></qt>") );
++ m_progressDlg->setButtonText(i18n("&Stop Delete"));
++ deleteLabelInitialized = true;
++ progress->setTotalSteps(phone_count);
++ entries_written = 0;
++ progress->setProgress(entries_written);
++ this_filter->processEvents();
++ }
++ if (phone_entry_no > (memstat.used + memstat.free))
++ break;
++ entry_empty = gn_lib_phonebook_entry_isempty(state, memtype, phone_entry_no);
++ if (!entry_empty) {
++ error = xxport_phone_delete_entry(phone_entry_no, memtype);
++ phone_count--;
++ progress->setProgress(++entries_written);
++ this_filter->processEvents();
++ }
++ phone_entry_no++;
++ }
++
++finish:
++ m_progressDlg->setLabel(i18n("Export to phone finished."));
++ this_filter->processEvents();
++
++ GNOKII_DEBUG("GNOKII export filter finished.\n");
++
++ busterminate();
++ delete m_progressDlg;
++
++ if (!failedList.isEmpty()) {
++ GNOKII_DEBUG(QString("Failed to export: %1\n").arg(failedList.join(", ")));
++ KMessageBox::informationList(parentWidget(),
++ i18n("<qt>The following contacts could not be exported to the Mobile Phone. "
++ "Possible Reasons for this problem could be:<br><ul>"
++ "<li>The contacts contain more information per entry than the phone can store.</li>"
++ "<li>Your phone does not allow to store multiple addresses, emails, homepages, ...</li>"
++ "<li>other storage size related problems.</li>"
++ "</ul>"
++ "To avoid those kind of problems in the future please reduce the amount of different "
++ "fields in the above contacts.</qt>"),
++ failedList,
++ i18n("Mobile Phone Export") );
++ }
++
++
++ return true;
++}
++
++/******************************************************************************
++ ******************************************************************************
++ ******************************************************************************
++ ******************************************************************************
++ ******************************************************************************/
++
++#elif defined(HAVE_GNOKII_H)
++
++#ifdef __GNUC__
++# warning "Please upgrade your gnokii installation to at least version 0.6.13"
++# warning "Older gnokii versions below 0.6.13 are not binary compatible and"
++# warning "prevents KDE users to upgrade gnokii to newer versions later."
++#endif
++
++/* OLD GNOKII LIBRARIES (< 0.6.13) */
++
++/* import */
+ static char *lockfile = NULL;
+ static char manufacturer[64], model[GN_MODEL_MAX_LENGTH+1],
+ revision[GN_REVISION_MAX_LENGTH+1], imei[GN_IMEI_MAX_LENGTH+1];
+@@ -446,87 +1148,10 @@
+
+ return GN_ERR_NONE;
+ }
+-#endif
+
+
+-
+-KABC::AddresseeList GNOKIIXXPort::importContacts( const QString& ) const
+-{
+- KABC::AddresseeList addrList;
+-
+-#ifndef HAVE_GNOKII_H
+-
+- KMessageBox::error(parentWidget(), i18n("Gnokii interface is not available.\n"
+- "Please ask your distributor to add gnokii at compile time."));
+-
+-#else
+-
+- if (KMessageBox::Continue != KMessageBox::warningContinueCancel(parentWidget(),
+- i18n("<qt>Please connect your Mobile Phone to your computer and press "
+- "<b>Continue</b> to start importing the personal contacts.<br><br>"
+- "Please note that if your Mobile Phone is not properly connected "
+- "the following detection phase might take up to two minutes, during which "
+- "KAddressbook will behave unresponsively.</qt>") ))
+- return addrList;
+-
+- m_progressDlg = new KProgressDialog( parentWidget(), "importwidget",
+- i18n("Mobile Phone Import"),
+- i18n("<qt><center>Establishing connection to the Mobile Phone.<br><br>"
+- "Please wait...</center></qt>") );
+- m_progressDlg->setAllowCancel(true);
+- m_progressDlg->progressBar()->setProgress(0);
+- m_progressDlg->progressBar()->setCenterIndicator(true);
+- m_progressDlg->setModal(true);
+- m_progressDlg->setInitialSize(QSize(450,350));
+- m_progressDlg->show();
+- processEvents();
+-
+-#if (QT_VERSION >= 0x030300)
+- m_progressDlg->setCursor( Qt::BusyCursor );
+-#endif
+- QString errStr = businit();
+- m_progressDlg->unsetCursor();
+-
+- if (!errStr.isEmpty()) {
+- KMessageBox::error(parentWidget(), errStr);
+- delete m_progressDlg;
+- return addrList;
+- }
+-
+- GNOKII_DEBUG("GNOKII import filter started.\n");
+- m_progressDlg->setButtonText(i18n("&Stop Import"));
+-
+- read_phone_entries("ME", GN_MT_ME, &addrList); // internal phone memory
+- read_phone_entries("SM", GN_MT_SM, &addrList); // SIM card
+-
+- GNOKII_DEBUG("GNOKII import filter finished.\n");
+-
+- busterminate();
+- delete m_progressDlg;
+-
+-#endif
+-
+- return addrList;
+-}
+-
+-
+ // export to phone
+
+-#ifdef HAVE_GNOKII_H
+-
+-static QString makeValidPhone( const QString &number )
+-{
+- // allowed chars: 0-9, *, #, p, w, +
+- QString num = number.simplifyWhiteSpace();
+- QString allowed("0123456789*+#pw");
+- for (unsigned int i=num.length(); i>=1; i--)
+- if (allowed.find(num[i-1])==-1)
+- num.remove(i-1,1);
+- if (num.isEmpty())
+- num = "0";
+- return num;
+-}
+-
+ static gn_error xxport_phone_write_entry( int phone_location, gn_memory_type memtype,
+ const KABC::Addressee *addr)
+ {
+@@ -688,17 +1313,59 @@
+ return error;
+ }
+
++KABC::AddresseeList GNOKIIXXPort::importContacts( const QString& ) const
++{
++ KABC::AddresseeList addrList;
++
++ if (KMessageBox::Continue != KMessageBox::warningContinueCancel(parentWidget(),
++ i18n("<qt>Please connect your Mobile Phone to your computer and press "
++ "<b>Continue</b> to start importing the personal contacts.<br><br>"
++ "Please note that if your Mobile Phone is not properly connected "
++ "the following detection phase might take up to two minutes, during which "
++ "KAddressbook will behave unresponsively.</qt>") ))
++ return addrList;
++
++ m_progressDlg = new KProgressDialog( parentWidget(), "importwidget",
++ i18n("Mobile Phone Import"),
++ i18n("<qt><center>Establishing connection to the Mobile Phone.<br><br>"
++ "Please wait...</center></qt>") );
++ m_progressDlg->setAllowCancel(true);
++ m_progressDlg->progressBar()->setProgress(0);
++ m_progressDlg->progressBar()->setCenterIndicator(true);
++ m_progressDlg->setModal(true);
++ m_progressDlg->setInitialSize(QSize(450,350));
++ m_progressDlg->show();
++ processEvents();
++
++#if (QT_VERSION >= 0x030300)
++ m_progressDlg->setCursor( Qt::BusyCursor );
+ #endif
++ QString errStr = businit();
++ m_progressDlg->unsetCursor();
+
++ if (!errStr.isEmpty()) {
++ KMessageBox::error(parentWidget(), errStr);
++ delete m_progressDlg;
++ return addrList;
++ }
++
++ GNOKII_DEBUG("GNOKII import filter started.\n");
++ m_progressDlg->setButtonText(i18n("&Stop Import"));
++
++ read_phone_entries("ME", GN_MT_ME, &addrList); // internal phone memory
++ read_phone_entries("SM", GN_MT_SM, &addrList); // SIM card
++
++ GNOKII_DEBUG("GNOKII import filter finished.\n");
++
++ busterminate();
++ delete m_progressDlg;
++
++ return addrList;
++}
++
++
+ bool GNOKIIXXPort::exportContacts( const KABC::AddresseeList &list, const QString & )
+ {
+-#ifndef HAVE_GNOKII_H
+-
+- Q_UNUSED(list);
+- KMessageBox::error(parentWidget(), i18n("Gnokii interface is not available.\n"
+- "Please ask your distributor to add gnokii at compile time."));
+-
+-#else
+ if (KMessageBox::Continue != KMessageBox::warningContinueCancel(parentWidget(),
+ i18n("<qt>Please connect your Mobile Phone to your computer and press "
+ "<b>Continue</b> to start exporting the selected personal contacts.<br><br>"
+@@ -895,11 +1562,42 @@
+ i18n("Mobile Phone Export") );
+ }
+
+-#endif
++ return true;
++}
+
++
++/******************************************************************************
++ ******************************************************************************
++ ******************************************************************************
++ ******************************************************************************
++ ******************************************************************************/
++
++#else /* no gnokii installed */
++
++KABC::AddresseeList GNOKIIXXPort::importContacts( const QString& ) const
++{
++ KABC::AddresseeList addrList;
++ KMessageBox::error(parentWidget(), i18n("Gnokii interface is not available.\n"
++ "Please ask your distributor to add gnokii at compile time."));
++ return addrList;
++}
++
++bool GNOKIIXXPort::exportContacts( const KABC::AddresseeList &list, const QString & )
++{
++ Q_UNUSED(list);
++ KMessageBox::error(parentWidget(), i18n("Gnokii interface is not available.\n"
++ "Please ask your distributor to add gnokii at compile time."));
+ return true;
+ }
+
++#endif /* END OF GNOKII LIB SWITCH */
++
++/******************************************************************************
++ ******************************************************************************
++ ******************************************************************************
++ ******************************************************************************
++ ******************************************************************************/
++
+ #include "gnokii_xxport.moc"
++
+ /* vim: set sts=4 ts=4 sw=4: */
+-
+Index: kaddressbook/xxport/csv_xxport.desktop
+===================================================================
+--- kaddressbook/xxport/csv_xxport.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kaddressbook/xxport/csv_xxport.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -40,6 +40,7 @@
+ Name[tr]=KAB CSV XXPort Eklentisi
+ Name[uk]=ÐÑÑлок KAB Ð´Ð»Ñ Ð¾Ð±Ð¼ÑÐ½Ñ ÑеÑез CSV
+ Name[zh_CN]=KAB CSV XXPort æä»¶
++Name[zh_TW]=KAB CSV XXPort 夿ç¨å¼
+ Comment=Plugin to import and export contacts in CSV format
+ Comment[be]=ÐапаÑненÑне Ð´Ð»Ñ ÑмпаÑÑÑ Ñ ÑкÑпаÑÑÑ ÐºÐ°Ð½ÑакÑÐ°Ñ Ñ ÑаÑмаÑе CSV
+ Comment[bg]=ÐÑиÑÑавка за импоÑÑ/екÑпоÑÑ Ð½Ð° конÑакÑиÑе вÑв ÑоÑÐ¼Ð°Ñ CSV
+@@ -81,6 +82,7 @@
+ Comment[tr]=CSV biçimindeki baÄlantıları alma ve gönderme eklentisi
+ Comment[uk]=ÐÑÑлок Ð´Ð»Ñ ÑмпоÑÑÑ Ñа екÑпоÑÑÑ ÐºÐ¾Ð½ÑакÑÑв Ñ ÑоÑмаÑÑ CSV
+ Comment[zh_CN]=导å
¥åå¯¼åº CSV æ ¼å¼è系人çæä»¶
++Comment[zh_TW]=以 CSV æ ¼å¼å¯å
¥èå¯åºè¯çµ¡äººå¤æç¨å¼
+ Type=Service
+ ServiceTypes=KAddressBook/XXPort
+ X-KDE-KAddressBook-XXPortPluginVersion=1
+Index: kaddressbook/xxport/vcard_xxport.desktop
+===================================================================
+--- kaddressbook/xxport/vcard_xxport.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kaddressbook/xxport/vcard_xxport.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -42,6 +42,7 @@
+ Name[tr]=KAB vCard XXPort Eklentisi
+ Name[uk]=ÐÑÑлок KAB Ð´Ð»Ñ Ð¾Ð±Ð¼ÑÐ½Ñ ÑеÑез vCard
+ Name[zh_CN]=KAB vCard XXPort æä»¶
++Name[zh_TW]=KAB vCard XXPort 夿ç¨å¼
+ Comment=Plugin to import and export contacts in vCard format
+ Comment[be]=ÐапаÑненÑне Ð´Ð»Ñ ÑмпаÑÑÑ Ñ ÑкÑпаÑÑÑ ÐºÐ°Ð½ÑакÑÐ°Ñ Ñ ÑаÑмаÑе vCard
+ Comment[bg]=ÐÑиÑÑавка за екÑпоÑÑ/импоÑÑ Ð½Ð° конÑакÑиÑе вÑв ÑоÑÐ¼Ð°Ñ Ð½Ð° vCard
+@@ -84,6 +85,7 @@
+ Comment[tr]=vCard biçimi baÄlantıları alma ve gönderme eklentisi
+ Comment[uk]=ÐÑÑлок Ð´Ð»Ñ ÑмпоÑÑÑ Ñа екÑпоÑÑÑ ÐºÐ¾Ð½ÑакÑÑв Ñ ÑоÑмаÑÑ vCard
+ Comment[zh_CN]=导å
¥åå¯¼åº vCard æ ¼å¼è系人çæä»¶
++Comment[zh_TW]=å¯å
¥èå¯åº vCard æ ¼å¼è¯çµ¡äººç夿ç¨å¼
+ Type=Service
+ ServiceTypes=KAddressBook/XXPort
+ X-KDE-KAddressBook-XXPortPluginVersion=1
+Index: kaddressbook/xxport/pab_xxport.desktop
+===================================================================
+--- kaddressbook/xxport/pab_xxport.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kaddressbook/xxport/pab_xxport.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -40,6 +40,7 @@
+ Name[tr]=KAB MS Exchange KiÅisel Adres Defteri XXPort Eklentisi
+ Name[uk]=ÐÑÑлок KAB Ð´Ð»Ñ Ð¾Ð±Ð¼ÑÐ½Ñ Ð· пеÑÑоналÑÐ½Ð¾Ñ Ð°Ð´ÑеÑÐ½Ð¾Ñ ÐºÐ½Ð¸Ð³Ð¾Ñ MS Exchange
+ Name[zh_CN]=KAB MS Exchange 个人å°åç°¿ XXPort æä»¶
++Name[zh_TW]=KAB MS Exchange Personal Addressbook XXPort 夿ç¨å¼
+ Comment=Plugin to import MS Exchange Personal Address Books
+ Comment[be]=ÐапаÑненÑне Ð´Ð»Ñ ÑмпаÑÑÑ Ð¿ÑÑÑаналÑнай адÑаÑнай кнÑÐ³Ñ MS Exchange
+ Comment[bg]=ÐÑиÑÑавка за импоÑÑ Ð½Ð° конÑакÑиÑе Ð¾Ñ MS Exchange Personal Address Books
+@@ -81,6 +82,7 @@
+ Comment[tr]=MS Exchange KiÅisel Adres Defteri aktarım eklentisi
+ Comment[uk]=ÐÑÑлок Ð´Ð»Ñ ÑмпоÑÑÑ Ð¿ÐµÑÑоналÑниÑ
адÑеÑниÑ
книг MS Exchange
+ Comment[zh_CN]=导å
¥ MS Exchange 个人å°åç°¿çæä»¶
++Comment[zh_TW]=å¯å
¥ MS Exchange Personal éè¨éç夿ç¨å¼
+ Type=Service
+ ServiceTypes=KAddressBook/XXPort
+ X-KDE-KAddressBook-XXPortPluginVersion=1
+Index: kaddressbook/xxport/opera_xxport.desktop
+===================================================================
+--- kaddressbook/xxport/opera_xxport.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kaddressbook/xxport/opera_xxport.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -41,6 +41,7 @@
+ Name[tr]=KAB Opera XXPort Eklentisi
+ Name[uk]=Name=ÐÑÑлок KAB Ð´Ð»Ñ Ð¾Ð±Ð¼ÑÐ½Ñ Ð· Opera
+ Name[zh_CN]=KAB Opera XXPort æä»¶
++Name[zh_TW]=KAB Opera XXPort 夿ç¨å¼
+ Comment=Plugin to import Opera contacts
+ Comment[be]=ÐапаÑненÑне Ð´Ð»Ñ ÑмпаÑÑÑ ÐºÐ°Ð½ÑакÑÐ°Ñ Opera
+ Comment[bg]=ÐÑиÑÑавка за импоÑÑ Ð½Ð° конÑакÑиÑе Ð¾Ñ ÐпеÑа
+@@ -82,6 +83,7 @@
+ Comment[tr]=Opera baÄlantılarını alma eklentisi
+ Comment[uk]=ÐÑÑлок Ð´Ð»Ñ ÑмпоÑÑÑ ÐºÐ¾Ð½ÑакÑÑв Opera
+ Comment[zh_CN]=导å
¥ Opera è系人çæä»¶
++Comment[zh_TW]=å¯å
¥ Opera è¯çµ¡äººç夿ç¨å¼
+ Type=Service
+ ServiceTypes=KAddressBook/XXPort
+ X-KDE-KAddressBook-XXPortPluginVersion=1
+Index: kaddressbook/xxport/gnokii_xxport.desktop
+===================================================================
+--- kaddressbook/xxport/gnokii_xxport.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kaddressbook/xxport/gnokii_xxport.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -41,6 +41,7 @@
+ Name[tr]=KAB Cep Telefonu XXPort Eklentisi
+ Name[uk]=ÐÑÑлок KAB Ð´Ð»Ñ Ð¾Ð±Ð¼ÑÐ½Ñ Ð· мобÑлÑними ÑелеÑонами
+ Name[zh_CN]=KAB ç§»å¨çµè¯ XXPort æä»¶
++Name[zh_TW]=KAB Mobile Phone XXPort 夿ç¨å¼
+ Comment=Mobile Phone Plugin to Import and Export Addressbook Entries
+ Comment[bg]=ÐÑиÑÑавка за екÑпоÑÑ/импоÑÑ Ð½Ð° конÑакÑиÑе оÑ/кÑм мобилен ÑелеÑон
+ Comment[bs]=Dodatak za uvoz i izvoz stavki adresara iz mobilnog telefona
+@@ -81,6 +82,7 @@
+ Comment[tr]=Adres Defteri Girdilerini Cep Telefonuna Alma ve Gönderme Eklentisi
+ Comment[uk]=ÐÑÑлок Ð´Ð»Ñ ÑмпоÑÑÑ Ñа екÑпоÑÑÑ Ð·Ð°Ð¿Ð¸ÑÑв Ñ Ð°Ð´ÑеÑнÑй ÐºÐ½Ð¸Ð·Ñ Ð¼Ð¾Ð±ÑлÑниÑ
ÑелеÑонÑв
+ Comment[zh_CN]=导å
¥å导åºå°å簿项çç§»å¨çµè¯æä»¶
++Comment[zh_TW]=å¯å
¥èå¯åºéè¨éçææ©å¤æç¨å¼
+ Type=Service
+ ServiceTypes=KAddressBook/XXPort
+ X-KDE-KAddressBook-XXPortPluginVersion=1
+Index: kaddressbook/xxport/bookmark_xxport.desktop
+===================================================================
+--- kaddressbook/xxport/bookmark_xxport.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kaddressbook/xxport/bookmark_xxport.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -41,6 +41,7 @@
+ Name[tr]=KAB Yer imleri XXPort Eklentisi
+ Name[uk]=ÐÑÑлок обмÑÐ½Ñ Ð·Ð°ÐºÐ»Ð°Ð´ÐºÐ°Ð¼Ð¸ KAB
+ Name[zh_CN]=KAB ä¹¦ç¾ XXPort æä»¶
++Name[zh_TW]=KAB Bookmark XXPort 夿ç¨å¼
+ Comment=Plugin to export the web addresses of the contacts as bookmarks
+ Comment[bg]=ÐÑиÑÑавка за екÑпоÑÑ Ð½Ð° Ñеб адÑеÑиÑе на конÑакÑиÑе, каÑо оÑмеÑки
+ Comment[bs]=Dodatak za izvoz web adresa kontakata u formi zabilješki
+@@ -81,6 +82,7 @@
+ Comment[tr]=BaÄlantıların web adreslerini yeri imleri olarak aktarmak için eklenti
+ Comment[uk]=ÐÑÑлок Ð´Ð»Ñ ÐµÐºÑпоÑÑÑ Ð°Ð´ÑÐµÑ ÐºÐ¾Ð½ÑакÑÑв Ñ Ð¢ÐµÐ½ÐµÑаÑ
Ñк закладок
+ Comment[zh_CN]=å°è系人çç½å导åºä¸ºä¹¦ç¾çæä»¶
++Comment[zh_TW]=å¯åºè¯çµ¡äººçç¶²é ææ¸ç±¤ç夿ç¨å¼
+ Type=Service
+ ServiceTypes=KAddressBook/XXPort
+ X-KDE-KAddressBook-XXPortPluginVersion=1
+Index: kaddressbook/xxport/ldif_xxport.desktop
+===================================================================
+--- kaddressbook/xxport/ldif_xxport.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kaddressbook/xxport/ldif_xxport.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -42,6 +42,7 @@
+ Name[tr]=KAB LDIF XXPort Eklentisi
+ Name[uk]=ÐÑÑлок KAB Ð´Ð»Ñ Ð¾Ð±Ð¼ÑÐ½Ñ ÑеÑез LDIF
+ Name[zh_CN]=KAB LDIF XXPort æä»¶
++Name[zh_TW]=KAB LDIF XXPort 夿ç¨å¼
+ Comment=Plugin to import and export contacts in Netscape and Mozilla LDIF format
+ Comment[be]=ÐапаÑненÑне Ð´Ð»Ñ ÑмпаÑÑÑ ÐºÐ°Ð½ÑакÑÐ°Ñ Ñ ÑаÑмаÑе Netscape/Mozilla LDIF
+ Comment[bg]=ÐÑиÑÑавка за импоÑÑ/екÑпоÑÑ Ð½Ð° конÑакÑиÑе вÑв ÑоÑÐ¼Ð°Ñ Ð½Ð° Netscape и Mozilla (LDIF)
+@@ -83,6 +84,7 @@
+ Comment[tr]=Netscape ve Mozilla'nın LDIF biçimindeki baÄlantılarını alma ve gönderme eklentisi
+ Comment[uk]=ÐÑÑлок Ð´Ð»Ñ ÑмпоÑÑÑ Ñа екÑпоÑÑÑ ÐºÐ¾Ð½ÑакÑÑв Ñ LDIF ÑÑмÑÑний з Netscape Ñа Mozilla
+ Comment[zh_CN]=导å
¥åå¯¼åº Netscape å Mozilla LDIF æ ¼å¼è系人çæä»¶
++Comment[zh_TW]=å¯å
¥èå¯åº Netscape è Mozilla LDIF æ ¼å¼è¯çµ¡äººç夿ç¨å¼
+ Type=Service
+ ServiceTypes=KAddressBook/XXPort
+ X-KDE-KAddressBook-XXPortPluginVersion=1
+Index: kaddressbook/xxport/eudora_xxport.desktop
+===================================================================
+--- kaddressbook/xxport/eudora_xxport.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kaddressbook/xxport/eudora_xxport.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -41,6 +41,7 @@
+ Name[tr]=KAB Eudora XXPort Eklentisi
+ Name[uk]=ÐÑÑлок KAB Ð´Ð»Ñ Ð¾Ð±Ð¼ÑÐ½Ñ Ð· Eudora
+ Name[zh_CN]=KAB Eudora XXPort æä»¶
++Name[zh_TW]=KAB Eudora XXPort 夿ç¨å¼
+ Comment=Plugin to import and export Eudora contacts
+ Comment[be]=ÐапаÑненÑне Ð´Ð»Ñ ÑмпаÑÑÑ Ñ ÑкÑпаÑÑÑ ÐºÐ°Ð½ÑакÑÐ°Ñ Eudora
+ Comment[bg]=ÐÑиÑÑавка за импоÑÑ/екÑпоÑÑ Ð½Ð° конÑакÑиÑе вÑв ÑоÑÐ¼Ð°Ñ Ð½Ð° Eudora
+@@ -83,6 +84,7 @@
+ Comment[tr]=Eudora baÄlantılarını alma ve gönderme eklentisi
+ Comment[uk]=ÐÑÑлок Ð´Ð»Ñ ÑмпоÑÑÑ Ñа екÑпоÑÑÑ ÐºÐ¾Ð½ÑакÑÑв з або до Eudora
+ Comment[zh_CN]=导å
¥åå¯¼åº Eudora è系人çæä»¶
++Comment[zh_TW]=å¯å
¥èå¯åº Eudora è¯çµ¡äººç夿ç¨å¼
+ Type=Service
+ ServiceTypes=KAddressBook/XXPort
+ X-KDE-KAddressBook-XXPortPluginVersion=1
+Index: kaddressbook/editors/protocols/jabberprotocol.desktop
+===================================================================
+--- kaddressbook/editors/protocols/jabberprotocol.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kaddressbook/editors/protocols/jabberprotocol.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -48,6 +48,7 @@
+ Comment[tr]=Jabber Protokolü
+ Comment[uk]=ÐÑоÑокол Jabber
+ Comment[zh_CN]=Jabber åè®®
++Comment[zh_TW]=Jabber åå®
+ Name=Jabber
+ Name[ta]=à®à®¾à®ªà®°à¯
+
+Index: kaddressbook/editors/protocols/aimprotocol.desktop
+===================================================================
+--- kaddressbook/editors/protocols/aimprotocol.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kaddressbook/editors/protocols/aimprotocol.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -49,5 +49,6 @@
+ Comment[tr]=AIM Protokolü
+ Comment[uk]=ÐÑоÑокол AIM
+ Comment[zh_CN]=AIM åè®®
++Comment[zh_TW]=AIM åå®
+ Name=AIM
+
+Index: kaddressbook/editors/protocols/meanwhileprotocol.desktop
+===================================================================
+--- kaddressbook/editors/protocols/meanwhileprotocol.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kaddressbook/editors/protocols/meanwhileprotocol.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -34,6 +34,7 @@
+ Comment[pt]=Protocolo Meanwhile
+ Comment[pt_BR]=Protocolo Meanwhile
+ Comment[ru]=ÐÑоÑокол Meanwhile
++Comment[sk]=Meanwhile protokol
+ Comment[sl]=Protokol Meanwhile
+ Comment[sr]=Meanwhile пÑоÑокол
+ Comment[sr at Latn]=Meanwhile protokol
+@@ -42,5 +43,6 @@
+ Comment[tr]=Meanwhile Protokolü
+ Comment[uk]=ÐÑоÑокол Meanwhile
+ Comment[zh_CN]=Meanwhile åè®®
++Comment[zh_TW]=Meanwhile åå®
+ Name=Meanwhile
+
+Index: kaddressbook/editors/protocols/skypeprotocol.desktop
+===================================================================
+--- kaddressbook/editors/protocols/skypeprotocol.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kaddressbook/editors/protocols/skypeprotocol.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -30,10 +30,12 @@
+ Comment[pt]=Telefonia Internet Skype
+ Comment[pt_BR]=Telefonia via Internet Skype
+ Comment[ru]=ÐнÑеÑнеÑ-ÑелеÑон Skype
++Comment[sk]=Skype Internet telefonovanie
+ Comment[sl]=Internetno telefoniranje Skype
+ Comment[sr]=Skype инÑеÑÐ½ÐµÑ ÑелеÑониÑа
+ Comment[sr at Latn]=Skype internet telefonija
+ Comment[sv]=Skype Internettelefoni
+ Comment[uk]=ÐнÑеÑнеÑ-ÑелеÑон Skype
+ Comment[zh_CN]=Skype Internet çµè¯
++Comment[zh_TW]=Skype 網路é»è©±
+ Name=Skype
+Index: kaddressbook/editors/protocols/icqprotocol.desktop
+===================================================================
+--- kaddressbook/editors/protocols/icqprotocol.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kaddressbook/editors/protocols/icqprotocol.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -48,5 +48,6 @@
+ Comment[tr]=ICQ Protokolü
+ Comment[uk]=ÐÑоÑокол ICQ
+ Comment[zh_CN]=ICQ åè®®
++Comment[zh_TW]=ICQ åå®
+ Name=ICQ
+
+Index: kaddressbook/editors/protocols/ircprotocol.desktop
+===================================================================
+--- kaddressbook/editors/protocols/ircprotocol.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kaddressbook/editors/protocols/ircprotocol.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -22,5 +22,6 @@
+ Comment[tr]=İnternet Genel Sohbeti
+ Comment[uk]=IRChat
+ Comment[zh_CN]=Internet è天
++Comment[zh_TW]=IRC
+ Name=IRC
+
+Index: kaddressbook/editors/protocols/yahooprotocol.desktop
+===================================================================
+--- kaddressbook/editors/protocols/yahooprotocol.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kaddressbook/editors/protocols/yahooprotocol.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -48,6 +48,7 @@
+ Comment[tr]=Yahoo Protokolü
+ Comment[uk]=ÐÑоÑокол Yahoo
+ Comment[zh_CN]=Yahoo åè®®
++Comment[zh_TW]=Yahoo åå®
+ Name=Yahoo
+ Name[de]=Yahoo!
+ Name[km]=ááá¶á áá¼
+Index: kaddressbook/editors/protocols/gaduprotocol.desktop
+===================================================================
+--- kaddressbook/editors/protocols/gaduprotocol.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kaddressbook/editors/protocols/gaduprotocol.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -48,6 +48,7 @@
+ Comment[tr]=Gadu-Gadu Protokolü
+ Comment[uk]=ÐÑоÑокол Gadu-Gadu
+ Comment[zh_CN]=Gadu-Gadu åè®®
++Comment[zh_TW]=Gadu-Gadu åå®
+ Name=Gadu-Gadu
+ Name[ta]=à®à®à¯-à®à®à¯
+
+Index: kaddressbook/editors/protocols/smsprotocol.desktop
+===================================================================
+--- kaddressbook/editors/protocols/smsprotocol.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kaddressbook/editors/protocols/smsprotocol.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -48,6 +48,7 @@
+ Comment[tr]=SMS Protokolü
+ Comment[uk]=ÐÑоÑокол SMS
+ Comment[zh_CN]=çä¿¡æ¯åè®®
++Comment[zh_TW]=SMS åå®
+ Name=SMS
+ Name[km]=áááá¶âáá¶áâáááá¸á
+ Name[zh_CN]=çä¿¡æ¯
+Index: kaddressbook/editors/protocols/groupwiseprotocol.desktop
+===================================================================
+--- kaddressbook/editors/protocols/groupwiseprotocol.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kaddressbook/editors/protocols/groupwiseprotocol.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -14,7 +14,7 @@
+ Comment[fr]=Messagerie GroupWise de Novell
+ Comment[he]=××¡× ×'ר ×©× Novell GroupWise
+ Comment[is]=Novell GroupWise Samskiptatólið
+-Comment[ja]=Novell GroupWiseã¡ãã»ã³ã¸ã£
++Comment[ja]=Novell GroupWise ã¡ãã»ã³ã¸ã£ã¼
+ Comment[km]=áááááá·áá¸âáááá¾âáá¶áâááááâáá¼ááá - GroupWise
+ Comment[lt]=Novell GroupWise momentinių žinuÄių klientas
+ Comment[ms]=Pembawa mesej Novell GroupWise
+Index: kaddressbook/editors/cryptosettings.desktop
+===================================================================
+--- kaddressbook/editors/cryptosettings.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kaddressbook/editors/cryptosettings.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -43,6 +43,7 @@
+ Name[tr]=Åifreleme Ãzellikleri
+ Name[uk]=ÐаÑамеÑÑи ÑиÑÑÑваннÑ
+ Name[zh_CN]=å å¯é¦é项
++Name[zh_TW]=å å¯è¨å®
+ Type=Service
+ ServiceTypes=KAddressBook/ContactEditorWidget
+ X-KDE-KAddressBook-CEWPluginVersion=1
+Index: kaddressbook/editors/imaddresseditor.desktop
+===================================================================
+--- kaddressbook/editors/imaddresseditor.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kaddressbook/editors/imaddresseditor.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -40,6 +40,7 @@
+ Name[uk]=ÐиÑÑÑвий зв'Ñзок
+ Name[uz]=Ð¥Ð°Ð±Ð°Ñ Ð°Ð»Ð¼Ð°ÑиÑ
+ Name[zh_CN]=峿¶æ¶æ¯
++Name[zh_TW]=峿éè¨
+ Comment=Instant Messaging Address Editor
+ Comment[bg]=РедакÑÐ¾Ñ Ð½Ð° адÑеÑи за мигновениÑе ÑÑобÑениÑ
+ Comment[bs]=Editor adresa za instant poruke
+@@ -81,6 +82,7 @@
+ Comment[tr]=Hızlı MesajlaÅma Adres Düzenleyicisi
+ Comment[uk]=РедакÑÐ¾Ñ Ð°Ð´ÑÐµÑ Ð¼Ð¸ÑÑÑвого зв'ÑзкÑ
+ Comment[zh_CN]=峿¶æ¶æ¯å°åç¼è¾å¨
++Comment[zh_TW]=峿éè¨ä½å編輯å¨
+ ServiceTypes=KAddressBook/ContactEditorWidget
+ X-KDE-Library=libkaddrbk_instantmessaging
+ X-KDE-KAddressBook-CEWPluginVersion=1
+Index: kaddressbook/editors/kaddressbookimprotocol.desktop
+===================================================================
+--- kaddressbook/editors/kaddressbookimprotocol.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kaddressbook/editors/kaddressbookimprotocol.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -43,6 +43,7 @@
+ Name[tr]=KAddressbook Hızlı MesajlaÅma Protokolü
+ Name[uk]=ÐÑоÑокол миÑÑÑвого зв'ÑÐ·ÐºÑ KAddressbook
+ Name[zh_CN]=KAddressbook 峿¶æ¶æ¯åè®®
++Name[zh_TW]=KAddressbook 峿éè¨åå®
+ [PropertyDef::X-KDE-InstantMessagingKABCField]
+ Type=QString
+
+Index: kaddressbook/kaddressbook_view.desktop
+===================================================================
+--- kaddressbook/kaddressbook_view.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kaddressbook/kaddressbook_view.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -46,6 +46,7 @@
+ Comment[tr]=KAdresDefteri Gösterim Eklentisi
+ Comment[uk]=ÐÑÑлок пеÑеглÑÐ´Ñ Ð°Ð´ÑеÑÐ½Ð¾Ñ ÐºÐ½Ð¸Ð³Ð¸ KAddressBook
+ Comment[zh_CN]=KAddressBook æ¥çæä»¶
++Comment[zh_TW]=KAddressBook 檢è¦å¤æç¨å¼
+
+ [PropertyDef::X-KDE-KAddressBook-ViewPluginVersion]
+ Type=int
+Index: kaddressbook/kcmconfigs/kabcustomfields.desktop
+===================================================================
+--- kaddressbook/kcmconfigs/kabcustomfields.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kaddressbook/kcmconfigs/kabcustomfields.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -98,6 +98,7 @@
+ Comment[tr]=Ãzel Sayfaları Yapılandır
+ Comment[uk]=ÐалаÑÑÑÐ²Ð°Ð½Ð½Ñ Ð½ÐµÑиповиÑ
ÑÑоÑÑнок
+ Comment[zh_CN]=é
ç½®å®å¶é¡µ
++Comment[zh_TW]=è¨å® Custom Pages
+ Keywords=kaddressbook, configure, settings, custom fields
+ Keywords[bg]=адÑеÑник, поÑÑебиÑелÑки, полеÑа, наÑÑÑойки, конÑигÑÑиÑане, kaddressbook, configure, settings, custom fields
+ Keywords[bs]=kaddressbook, configure, settings, custom fields, podesite, postavke, vlastite, vlastito
+Index: kaddressbook/kcmconfigs/kabconfig.desktop
+===================================================================
+--- kaddressbook/kcmconfigs/kabconfig.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kaddressbook/kcmconfigs/kabconfig.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -44,6 +44,7 @@
+ Name[pt_BR]=Geral
+ Name[ru]=ÐбÑие
+ Name[se]=Oppalaš
++Name[sk]=Všeobecné
+ Name[sl]=Splošno
+ Name[sr]=ÐпÑÑе
+ Name[sr at Latn]=Opšte
+@@ -102,6 +103,7 @@
+ Comment[uk]=ÐалаÑÑÑÐ²Ð°Ð½Ð½Ñ Ð°Ð´ÑеÑÐ½Ð¾Ñ ÐºÐ½Ð¸Ð³Ð¸
+ Comment[uz]=ÐÐ°Ð½Ð·Ð¸Ð»Ð»Ð°Ñ Ð´Ð°ÑÑаÑини моÑлаÑ
+ Comment[zh_CN]=é
ç½®å°åç°¿
++Comment[zh_TW]=è¨å®éè¨é
+ Keywords=kaddressbook, configure, settings
+ Keywords[be]=K ÐдÑаÑÐ½Ð°Ñ ÐºÐ½Ñга, наÑÑÑоÑÑÑ, наÑÑÑойкÑ, kaddressbook, configure, settings
+ Keywords[bg]=адÑеÑни,адÑеÑна,книга,визиÑник,визиÑка,каÑÑиÑка,kaddressbook, configure, settings
+Index: kaddressbook/kcmconfigs/kabldapconfig.desktop
+===================================================================
+--- kaddressbook/kcmconfigs/kabldapconfig.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kaddressbook/kcmconfigs/kabldapconfig.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -99,6 +99,7 @@
+ Comment[uk]=ÐалаÑÑÑÐ²Ð°Ð½Ð½Ñ Ð¿Ð°ÑамеÑÑÑв LDAP Ð´Ð»Ñ Ð°Ð´ÑеÑÐ½Ð¾Ñ ÐºÐ½Ð¸Ð³Ð¸
+ Comment[uz]=LDAP Ð¼Ð°Ð½Ð·Ð¸Ð»Ð»Ð°Ñ Ð´Ð°ÑÑаÑини моÑлаÑ
+ Comment[zh_CN]=é
ç½®å°åç°¿ LDAP 设置
++Comment[zh_TW]=è¨å®éè¨é LDAP è¨å®
+ Keywords=kaddressbook, configure, settings, LDAP
+ Keywords[be]=K ÐдÑаÑÐ½Ð°Ñ ÐºÐ½Ñга, наÑÑÑоÑÑÑ, наÑÑÑойкÑ, kaddressbook, configure, settings, LDAP
+ Keywords[bg]=адÑеÑник,адÑеÑ,адÑеÑна,книга,ÑÑÑвÑÑ,вÑиÑки,kaddressbook, configure, settings, LDAP
+Index: kaddressbook/thumbnailcreator/ldifvcardthumbnail.desktop
+===================================================================
+--- kaddressbook/thumbnailcreator/ldifvcardthumbnail.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kaddressbook/thumbnailcreator/ldifvcardthumbnail.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -25,7 +25,7 @@
+ Name[lt]=ElektroninÄs verslo kortelÄs bylos
+ Name[ms]=Fail Kad Perniagaan Elektronik
+ Name[nb]=Filer for elektroniske visittkort
+-Name[nds]=Dateien mit elektroonsche Visitenkorten
++Name[nds]=Dateien mit elektroonsche Visitenkoorten
+ Name[nl]=Elektronische visitekaartbestanden
+ Name[nn]=Filer for elektroniske visittkort
+ Name[pl]=Pliki elektronicznych wizytówek
+@@ -42,6 +42,7 @@
+ Name[tr]=Elektronik İŠKartı Dosyaları
+ Name[uk]=Ñайли елекÑÑонниÑ
вÑзиÑниÑ
каÑÑок
+ Name[zh_CN]=çµååçæä»¶
++Name[zh_TW]=é»ååçæª
+ ServiceTypes=ThumbCreator
+ MimeTypes=text/x-vcard,text/x-ldif
+ X-KDE-Library=ldifvcardthumbnail
+Index: kaddressbook/features/distributionlist.desktop
+===================================================================
+--- kaddressbook/features/distributionlist.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kaddressbook/features/distributionlist.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -92,6 +92,7 @@
+ Comment[uk]=ÐÑÑлок Ð´Ð»Ñ ÐºÐµÑÑÐ²Ð°Ð½Ð½Ñ ÑпиÑками ÑозповÑÑдженнÑ
+ Comment[uz]=ТаÑÒаÑÐ¸Ñ ÑÑйÑ
аÑлаÑни боÑÒаÑÐ¸Ñ ÑÑÑ Ð¿Ð»Ð°Ð³Ð¸Ð½
+ Comment[zh_CN]=管çååå表çæä»¶
++Comment[zh_TW]=管çåé
æ¸
å®å¤æç¨å¼
+ Type=Service
+ ServiceTypes=KAddressBook/Extension
+ X-KDE-KAddressBook-ExtensionPluginVersion=1
+Index: kaddressbook/features/resourceselection.desktop
+===================================================================
+--- kaddressbook/features/resourceselection.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kaddressbook/features/resourceselection.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -43,6 +43,7 @@
+ Name[tr]=Adres Defteri Düzenleme Eklentisi
+ Name[uk]=ÐÑÑлок Ð´Ð»Ñ ÐºÐµÑÑÐ²Ð°Ð½Ð½Ñ Ð°Ð´ÑеÑÐ½Ð¾Ñ ÐºÐ½Ð¸Ð³Ð¾Ñ
+ Name[zh_CN]=å°å簿管çæä»¶
++Name[zh_TW]=管çéè¨é夿ç¨å¼
+ Comment=Plugin for managing address books
+ Comment[be]=ÐапаÑненÑне Ð´Ð»Ñ ÐºÑÑаванÑÐ½Ñ Ð°Ð´ÑаÑÐ½Ð°Ð¼Ñ ÐºÐ½ÑгамÑ
+ Comment[bg]=ÐÑиÑÑавка за ÑпÑавление на адÑеÑника
+@@ -85,6 +86,7 @@
+ Comment[tr]=Adres defteterini düzenlemek için eklenti
+ Comment[uk]=ÐÑÑлок Ð´Ð»Ñ ÐºÐµÑÑÐ²Ð°Ð½Ð½Ñ Ð°Ð´ÑеÑними книгами
+ Comment[zh_CN]=管çå°åç°¿çæä»¶
++Comment[zh_TW]=管çéè¨é夿ç¨å¼
+ Type=Service
+ ServiceTypes=KAddressBook/Extension
+ X-KDE-KAddressBook-ExtensionPluginVersion=1
+Index: libkholidays/scanholiday.c
+===================================================================
+--- libkholidays/scanholiday.c (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ libkholidays/scanholiday.c (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -1,50 +1,94 @@
+-#define yy_create_buffer kcal_create_buffer
+-#define yy_delete_buffer kcal_delete_buffer
+-#define yy_scan_buffer kcal_scan_buffer
+-#define yy_scan_string kcal_scan_string
+-#define yy_scan_bytes kcal_scan_bytes
+-#define yy_flex_debug kcal_flex_debug
+-#define yy_init_buffer kcal_init_buffer
+-#define yy_flush_buffer kcal_flush_buffer
+-#define yy_load_buffer_state kcal_load_buffer_state
+-#define yy_switch_to_buffer kcal_switch_to_buffer
+-#define yyin kcalin
+-#define yyleng kcalleng
+-#define yylex kcallex
+-#define yyout kcalout
+-#define yyrestart kcalrestart
+-#define yytext kcaltext
++#line 2 "scanholiday.c"
+
+-#line 19 "scanholiday.c"
++#line 4 "scanholiday.c"
++
++#define YY_INT_ALIGNED short int
++
+ /* A lexical scanner generated by flex */
+
+-/* Scanner skeleton version:
+- * $Header$
+- */
+-
+ #define FLEX_SCANNER
+ #define YY_FLEX_MAJOR_VERSION 2
+ #define YY_FLEX_MINOR_VERSION 5
++#define YY_FLEX_SUBMINOR_VERSION 33
++#if YY_FLEX_SUBMINOR_VERSION > 0
++#define FLEX_BETA
++#endif
+
++/* First, we deal with platform-specific or compiler-specific issues. */
++
++/* begin standard C headers. */
+ #include <stdio.h>
++#include <string.h>
++#include <errno.h>
++#include <stdlib.h>
+
++/* end standard C headers. */
+
+-/* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */
+-#ifdef c_plusplus
+-#ifndef __cplusplus
+-#define __cplusplus
++/* flex integer type definitions */
++
++#ifndef FLEXINT_H
++#define FLEXINT_H
++
++/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
++
++#if __STDC_VERSION__ >= 199901L
++
++/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
++ * if you want the limit (max/min) macros for int types.
++ */
++#ifndef __STDC_LIMIT_MACROS
++#define __STDC_LIMIT_MACROS 1
+ #endif
++
++#include <inttypes.h>
++typedef int8_t flex_int8_t;
++typedef uint8_t flex_uint8_t;
++typedef int16_t flex_int16_t;
++typedef uint16_t flex_uint16_t;
++typedef int32_t flex_int32_t;
++typedef uint32_t flex_uint32_t;
++#else
++typedef signed char flex_int8_t;
++typedef short int flex_int16_t;
++typedef int flex_int32_t;
++typedef unsigned char flex_uint8_t;
++typedef unsigned short int flex_uint16_t;
++typedef unsigned int flex_uint32_t;
++#endif /* ! C99 */
++
++/* Limits of integral types. */
++#ifndef INT8_MIN
++#define INT8_MIN (-128)
+ #endif
++#ifndef INT16_MIN
++#define INT16_MIN (-32767-1)
++#endif
++#ifndef INT32_MIN
++#define INT32_MIN (-2147483647-1)
++#endif
++#ifndef INT8_MAX
++#define INT8_MAX (127)
++#endif
++#ifndef INT16_MAX
++#define INT16_MAX (32767)
++#endif
++#ifndef INT32_MAX
++#define INT32_MAX (2147483647)
++#endif
++#ifndef UINT8_MAX
++#define UINT8_MAX (255U)
++#endif
++#ifndef UINT16_MAX
++#define UINT16_MAX (65535U)
++#endif
++#ifndef UINT32_MAX
++#define UINT32_MAX (4294967295U)
++#endif
+
++#endif /* ! FLEXINT_H */
+
+ #ifdef __cplusplus
+
+-#include <stdlib.h>
+-#include <unistd.h>
+-
+-/* Use prototypes in function declarations. */
+-#define YY_USE_PROTOS
+-
+ /* The "const" storage-class-modifier is valid. */
+ #define YY_USE_CONST
+
+@@ -52,34 +96,17 @@
+
+ #if __STDC__
+
+-#define YY_USE_PROTOS
+ #define YY_USE_CONST
+
+ #endif /* __STDC__ */
+ #endif /* ! __cplusplus */
+
+-#ifdef __TURBOC__
+- #pragma warn -rch
+- #pragma warn -use
+-#include <io.h>
+-#include <stdlib.h>
+-#define YY_USE_CONST
+-#define YY_USE_PROTOS
+-#endif
+-
+ #ifdef YY_USE_CONST
+ #define yyconst const
+ #else
+ #define yyconst
+ #endif
+
+-
+-#ifdef YY_USE_PROTOS
+-#define YY_PROTO(proto) proto
+-#else
+-#define YY_PROTO(proto) ()
+-#endif
+-
+ /* Returned upon end-of-file. */
+ #define YY_NULL 0
+
+@@ -94,71 +121,75 @@
+ * but we do it the disgusting crufty way forced on us by the ()-less
+ * definition of BEGIN.
+ */
+-#define BEGIN yy_start = 1 + 2 *
++#define BEGIN (yy_start) = 1 + 2 *
+
+ /* Translate the current start state into a value that can be later handed
+ * to BEGIN to return to the state. The YYSTATE alias is for lex
+ * compatibility.
+ */
+-#define YY_START ((yy_start - 1) / 2)
++#define YY_START (((yy_start) - 1) / 2)
+ #define YYSTATE YY_START
+
+ /* Action number for EOF rule of a given start state. */
+ #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
+
+ /* Special action meaning "start processing a new file". */
+-#define YY_NEW_FILE yyrestart( yyin )
++#define YY_NEW_FILE kcalrestart(kcalin )
+
+ #define YY_END_OF_BUFFER_CHAR 0
+
+ /* Size of default input buffer. */
++#ifndef YY_BUF_SIZE
+ #define YY_BUF_SIZE 16384
++#endif
+
++/* The state buf must be large enough to hold one state per character in the main buffer.
++ */
++#define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))
++
++#ifndef YY_TYPEDEF_YY_BUFFER_STATE
++#define YY_TYPEDEF_YY_BUFFER_STATE
+ typedef struct yy_buffer_state *YY_BUFFER_STATE;
++#endif
+
+-extern int yyleng;
+-extern FILE *yyin, *yyout;
++extern int kcalleng;
+
++extern FILE *kcalin, *kcalout;
++
+ #define EOB_ACT_CONTINUE_SCAN 0
+ #define EOB_ACT_END_OF_FILE 1
+ #define EOB_ACT_LAST_MATCH 2
+
+-/* The funky do-while in the following #define is used to turn the definition
+- * int a single C statement (which needs a semi-colon terminator). This
+- * avoids problems with code like:
+- *
+- * if ( condition_holds )
+- * yyless( 5 );
+- * else
+- * do_something_else();
+- *
+- * Prior to using the do-while the compiler would get upset at the
+- * "else" because it interpreted the "if" statement as being all
+- * done when it reached the ';' after the yyless() call.
+- */
+-
+-/* Return all but the first 'n' matched characters back to the input stream. */
+-
++ #define YY_LESS_LINENO(n)
++
++/* Return all but the first "n" matched characters back to the input stream. */
+ #define yyless(n) \
+ do \
+ { \
+- /* Undo effects of setting up yytext. */ \
+- *yy_cp = yy_hold_char; \
++ /* Undo effects of setting up kcaltext. */ \
++ int yyless_macro_arg = (n); \
++ YY_LESS_LINENO(yyless_macro_arg);\
++ *yy_cp = (yy_hold_char); \
+ YY_RESTORE_YY_MORE_OFFSET \
+- yy_c_buf_p = yy_cp = yy_bp + n - YY_MORE_ADJ; \
+- YY_DO_BEFORE_ACTION; /* set up yytext again */ \
++ (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
++ YY_DO_BEFORE_ACTION; /* set up kcaltext again */ \
+ } \
+ while ( 0 )
+
+-#define unput(c) yyunput( c, yytext_ptr )
++#define unput(c) yyunput( c, (yytext_ptr) )
+
+ /* The following is because we cannot portably get our hands on size_t
+ * (without autoconf's help, which isn't available because we want
+ * flex-generated scanners to compile on their own).
+ */
++
++#ifndef YY_TYPEDEF_YY_SIZE_T
++#define YY_TYPEDEF_YY_SIZE_T
+ typedef unsigned int yy_size_t;
++#endif
+
+-
++#ifndef YY_STRUCT_YY_BUFFER_STATE
++#define YY_STRUCT_YY_BUFFER_STATE
+ struct yy_buffer_state
+ {
+ FILE *yy_input_file;
+@@ -195,12 +226,16 @@
+ */
+ int yy_at_bol;
+
++ int yy_bs_lineno; /**< The line count. */
++ int yy_bs_column; /**< The column count. */
++
+ /* Whether to try to fill the input buffer when we reach the
+ * end of it.
+ */
+ int yy_fill_buffer;
+
+ int yy_buffer_status;
++
+ #define YY_BUFFER_NEW 0
+ #define YY_BUFFER_NORMAL 1
+ /* When an EOF's been seen but there's still some text to process
+@@ -210,135 +245,172 @@
+ * possible backing-up.
+ *
+ * When we actually see the EOF, we change the status to "new"
+- * (via yyrestart()), so that the user can continue scanning by
+- * just pointing yyin at a new input file.
++ * (via kcalrestart()), so that the user can continue scanning by
++ * just pointing kcalin at a new input file.
+ */
+ #define YY_BUFFER_EOF_PENDING 2
++
+ };
++#endif /* !YY_STRUCT_YY_BUFFER_STATE */
+
+-static YY_BUFFER_STATE yy_current_buffer = 0;
++/* Stack of input buffers. */
++static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */
++static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */
++static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */
+
+ /* We provide macros for accessing buffer states in case in the
+ * future we want to put the buffer states in a more general
+ * "scanner state".
++ *
++ * Returns the top of the stack, or NULL.
+ */
+-#define YY_CURRENT_BUFFER yy_current_buffer
++#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \
++ ? (yy_buffer_stack)[(yy_buffer_stack_top)] \
++ : NULL)
+
++/* Same as previous macro, but useful when we know that the buffer stack is not
++ * NULL or when we need an lvalue. For internal use only.
++ */
++#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)]
+
+-/* yy_hold_char holds the character lost when yytext is formed. */
++/* yy_hold_char holds the character lost when kcaltext is formed. */
+ static char yy_hold_char;
+-
+ static int yy_n_chars; /* number of characters read into yy_ch_buf */
++int kcalleng;
+
+-
+-int yyleng;
+-
+ /* Points to current character in buffer. */
+ static char *yy_c_buf_p = (char *) 0;
+-static int yy_init = 1; /* whether we need to initialize */
++static int yy_init = 0; /* whether we need to initialize */
+ static int yy_start = 0; /* start state number */
+
+-/* Flag which is used to allow yywrap()'s to do buffer switches
+- * instead of setting up a fresh yyin. A bit of a hack ...
++/* Flag which is used to allow kcalwrap()'s to do buffer switches
++ * instead of setting up a fresh kcalin. A bit of a hack ...
+ */
+ static int yy_did_buffer_switch_on_eof;
+
+-void yyrestart YY_PROTO(( FILE *input_file ));
++void kcalrestart (FILE *input_file );
++void kcal_switch_to_buffer (YY_BUFFER_STATE new_buffer );
++YY_BUFFER_STATE kcal_create_buffer (FILE *file,int size );
++void kcal_delete_buffer (YY_BUFFER_STATE b );
++void kcal_flush_buffer (YY_BUFFER_STATE b );
++void kcalpush_buffer_state (YY_BUFFER_STATE new_buffer );
++void kcalpop_buffer_state (void );
+
+-void yy_switch_to_buffer YY_PROTO(( YY_BUFFER_STATE new_buffer ));
+-void yy_load_buffer_state YY_PROTO(( void ));
+-YY_BUFFER_STATE yy_create_buffer YY_PROTO(( FILE *file, int size ));
+-void yy_delete_buffer YY_PROTO(( YY_BUFFER_STATE b ));
+-void yy_init_buffer YY_PROTO(( YY_BUFFER_STATE b, FILE *file ));
+-void yy_flush_buffer YY_PROTO(( YY_BUFFER_STATE b ));
+-#define YY_FLUSH_BUFFER yy_flush_buffer( yy_current_buffer )
++static void kcalensure_buffer_stack (void );
++static void kcal_load_buffer_state (void );
++static void kcal_init_buffer (YY_BUFFER_STATE b,FILE *file );
+
+-YY_BUFFER_STATE yy_scan_buffer YY_PROTO(( char *base, yy_size_t size ));
+-YY_BUFFER_STATE yy_scan_string YY_PROTO(( yyconst char *yy_str ));
+-YY_BUFFER_STATE yy_scan_bytes YY_PROTO(( yyconst char *bytes, int len ));
++#define YY_FLUSH_BUFFER kcal_flush_buffer(YY_CURRENT_BUFFER )
+
+-static void *yy_flex_alloc YY_PROTO(( yy_size_t ));
+-static void *yy_flex_realloc YY_PROTO(( void *, yy_size_t ));
+-static void yy_flex_free YY_PROTO(( void * ));
++YY_BUFFER_STATE kcal_scan_buffer (char *base,yy_size_t size );
++YY_BUFFER_STATE kcal_scan_string (yyconst char *yy_str );
++YY_BUFFER_STATE kcal_scan_bytes (yyconst char *bytes,int len );
+
+-#define yy_new_buffer yy_create_buffer
++void *kcalalloc (yy_size_t );
++void *kcalrealloc (void *,yy_size_t );
++void kcalfree (void * );
+
++#define yy_new_buffer kcal_create_buffer
++
+ #define yy_set_interactive(is_interactive) \
+ { \
+- if ( ! yy_current_buffer ) \
+- yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \
+- yy_current_buffer->yy_is_interactive = is_interactive; \
++ if ( ! YY_CURRENT_BUFFER ){ \
++ kcalensure_buffer_stack (); \
++ YY_CURRENT_BUFFER_LVALUE = \
++ kcal_create_buffer(kcalin,YY_BUF_SIZE ); \
++ } \
++ YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
+ }
+
+ #define yy_set_bol(at_bol) \
+ { \
+- if ( ! yy_current_buffer ) \
+- yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \
+- yy_current_buffer->yy_at_bol = at_bol; \
++ if ( ! YY_CURRENT_BUFFER ){\
++ kcalensure_buffer_stack (); \
++ YY_CURRENT_BUFFER_LVALUE = \
++ kcal_create_buffer(kcalin,YY_BUF_SIZE ); \
++ } \
++ YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
+ }
+
+-#define YY_AT_BOL() (yy_current_buffer->yy_at_bol)
++#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
+
++/* Begin user sect3 */
+
+-#define yywrap() 1
++#define kcalwrap() 1
+ #define YY_SKIP_YYWRAP
++
+ typedef unsigned char YY_CHAR;
+-FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0;
++
++FILE *kcalin = (FILE *) 0, *kcalout = (FILE *) 0;
++
+ typedef int yy_state_type;
+-extern char *yytext;
+-#define yytext_ptr yytext
+
+-static yy_state_type yy_get_previous_state YY_PROTO(( void ));
+-static yy_state_type yy_try_NUL_trans YY_PROTO(( yy_state_type current_state ));
+-static int yy_get_next_buffer YY_PROTO(( void ));
+-static void yy_fatal_error YY_PROTO(( yyconst char msg[] ));
++extern int kcallineno;
+
++int kcallineno = 1;
++
++extern char *kcaltext;
++#define yytext_ptr kcaltext
++
++static yy_state_type yy_get_previous_state (void );
++static yy_state_type yy_try_NUL_trans (yy_state_type current_state );
++static int yy_get_next_buffer (void );
++static void yy_fatal_error (yyconst char msg[] );
++
+ /* Done after the current pattern has been matched and before the
+- * corresponding action - sets up yytext.
++ * corresponding action - sets up kcaltext.
+ */
+ #define YY_DO_BEFORE_ACTION \
+- yytext_ptr = yy_bp; \
+- yyleng = (int) (yy_cp - yy_bp); \
+- yy_hold_char = *yy_cp; \
++ (yytext_ptr) = yy_bp; \
++ kcalleng = (size_t) (yy_cp - yy_bp); \
++ (yy_hold_char) = *yy_cp; \
+ *yy_cp = '\0'; \
+- yy_c_buf_p = yy_cp;
++ (yy_c_buf_p) = yy_cp;
+
+-#define YY_NUM_RULES 65
+-#define YY_END_OF_BUFFER 66
+-static yyconst short int yy_accept[269] =
++#define YY_NUM_RULES 68
++#define YY_END_OF_BUFFER 69
++/* This struct is not used in this scanner,
++ but its presence is necessary. */
++struct yy_trans_info
++ {
++ flex_int32_t yy_verify;
++ flex_int32_t yy_nxt;
++ };
++static yyconst flex_int16_t yy_accept[275] =
+ { 0,
+- 0, 0, 66, 64, 3, 3, 4, 64, 64, 4,
+- 64, 33, 33, 33, 33, 33, 33, 60, 64, 61,
+- 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
+- 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
+- 4, 57, 0, 34, 0, 1, 62, 33, 0, 0,
+- 0, 0, 0, 58, 56, 59, 0, 0, 0, 0,
++ 0, 0, 69, 67, 3, 3, 4, 67, 67, 4,
++ 67, 33, 33, 33, 33, 33, 33, 63, 67, 64,
++ 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
++ 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
++ 4, 60, 0, 34, 0, 1, 65, 33, 0, 0,
++ 0, 0, 0, 61, 59, 62, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+- 0, 0, 39, 0, 0, 0, 0, 0, 0, 0,
+- 0, 0, 38, 0, 0, 0, 0, 0, 0, 0,
+- 0, 0, 0, 0, 63, 0, 2, 24, 25, 26,
++ 0, 0, 41, 40, 0, 0, 0, 0, 0, 0,
++ 0, 0, 0, 38, 0, 0, 0, 0, 0, 0,
++ 0, 0, 39, 0, 0, 0, 0, 66, 0, 2,
+
+- 27, 28, 0, 30, 0, 0, 0, 0, 0, 0,
+- 36, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+- 0, 0, 0, 0, 0, 0, 0, 0, 9, 0,
+- 0, 0, 0, 0, 48, 0, 0, 0, 0, 0,
++ 24, 25, 26, 27, 28, 0, 30, 0, 0, 0,
++ 0, 0, 0, 36, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+- 0, 0, 0, 51, 53, 37, 0, 0, 0, 0,
+- 0, 0, 0, 0, 0, 0, 11, 10, 29, 0,
+- 0, 0, 0, 0, 0, 0, 0, 40, 0, 0,
+- 0, 0, 0, 0, 0, 0, 0, 0, 0, 43,
+- 0, 32, 8, 0, 0, 47, 0, 0, 35, 0,
++ 0, 9, 0, 0, 0, 0, 0, 51, 0, 0,
++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
++ 0, 0, 0, 0, 0, 0, 0, 54, 56, 37,
++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
++ 11, 10, 29, 0, 0, 0, 0, 0, 0, 0,
++ 0, 42, 0, 0, 0, 0, 0, 0, 0, 0,
++ 0, 0, 0, 0, 45, 0, 32, 8, 0, 0,
+
+- 0, 0, 49, 0, 0, 0, 0, 7, 41, 0,
+- 0, 0, 0, 0, 0, 42, 0, 0, 0, 0,
+- 0, 54, 0, 12, 31, 0, 45, 0, 21, 0,
+- 0, 46, 0, 17, 0, 0, 0, 0, 23, 0,
+- 0, 0, 0, 50, 0, 0, 5, 0, 52, 0,
+- 14, 0, 0, 0, 18, 0, 55, 16, 6, 44,
+- 15, 22, 0, 20, 0, 13, 19, 0
++ 50, 0, 0, 35, 0, 0, 0, 52, 0, 0,
++ 0, 0, 7, 43, 0, 0, 0, 0, 0, 0,
++ 49, 44, 0, 0, 0, 0, 0, 57, 0, 12,
++ 31, 0, 47, 0, 21, 0, 0, 48, 0, 17,
++ 0, 0, 0, 0, 23, 0, 0, 0, 0, 53,
++ 0, 0, 5, 0, 55, 0, 14, 0, 0, 0,
++ 18, 0, 58, 16, 6, 46, 15, 22, 0, 20,
++ 0, 13, 19, 0
+ } ;
+
+-static yyconst int yy_ec[256] =
++static yyconst flex_int32_t yy_ec[256] =
+ { 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 2, 3,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+@@ -346,9 +418,9 @@
+ 1, 2, 4, 5, 6, 1, 7, 8, 1, 7,
+ 7, 7, 7, 1, 7, 7, 7, 9, 10, 11,
+ 12, 13, 14, 9, 9, 9, 9, 15, 1, 16,
+- 17, 18, 7, 1, 1, 1, 1, 1, 1, 1,
+- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
++ 17, 18, 7, 1, 19, 20, 21, 22, 23, 24,
++ 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
++ 1, 35, 36, 37, 38, 39, 40, 1, 41, 1,
+ 7, 1, 7, 1, 1, 1, 19, 20, 21, 22,
+
+ 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
+@@ -370,7 +442,7 @@
+ 1, 1, 1, 1, 1
+ } ;
+
+-static yyconst int yy_meta[43] =
++static yyconst flex_int32_t yy_meta[43] =
+ { 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2,
+ 2, 2, 2, 2, 1, 1, 1, 1, 1, 1,
+@@ -379,159 +451,164 @@
+ 1, 1
+ } ;
+
+-static yyconst short int yy_base[273] =
++static yyconst flex_int16_t yy_base[279] =
+ { 0,
+- 0, 281, 295, 297, 297, 297, 277, 288, 289, 297,
+- 283, 34, 254, 17, 15, 18, 252, 271, 270, 269,
+- 28, 33, 244, 38, 39, 41, 249, 251, 46, 48,
+- 50, 249, 38, 251, 257, 56, 47, 63, 256, 236,
+- 274, 297, 271, 297, 272, 297, 297, 86, 237, 251,
+- 250, 245, 244, 297, 297, 297, 232, 227, 232, 241,
+- 241, 53, 245, 222, 241, 225, 237, 239, 57, 220,
+- 230, 233, 297, 223, 50, 218, 69, 68, 221, 220,
+- 212, 213, 297, 211, 226, 210, 81, 227, 213, 78,
+- 221, 84, 216, 89, 297, 239, 297, 297, 297, 297,
++ 0, 287, 301, 303, 303, 303, 283, 294, 295, 303,
++ 289, 34, 260, 17, 15, 18, 258, 277, 276, 275,
++ 28, 33, 250, 38, 39, 41, 255, 35, 46, 50,
++ 52, 256, 49, 258, 264, 63, 54, 49, 263, 243,
++ 281, 303, 278, 303, 279, 303, 303, 86, 244, 258,
++ 257, 252, 251, 303, 303, 303, 239, 234, 239, 248,
++ 248, 64, 252, 229, 248, 232, 244, 246, 53, 227,
++ 237, 240, 303, 303, 230, 61, 225, 71, 79, 228,
++ 227, 219, 220, 303, 218, 233, 217, 84, 226, 233,
++ 219, 79, 303, 227, 85, 222, 91, 303, 245, 303,
+
+- 297, 297, 218, 297, 213, 201, 205, 216, 213, 203,
+- 198, 210, 195, 196, 195, 192, 192, 192, 204, 202,
+- 186, 182, 199, 184, 186, 194, 195, 196, 297, 178,
+- 193, 191, 180, 176, 297, 173, 177, 172, 178, 185,
+- 171, 170, 168, 171, 173, 164, 165, 169, 163, 167,
+- 160, 160, 165, 297, 297, 297, 162, 169, 150, 152,
+- 163, 151, 150, 167, 153, 165, 297, 297, 297, 142,
+- 145, 149, 154, 143, 159, 146, 156, 297, 140, 142,
+- 150, 142, 152, 148, 133, 146, 144, 143, 142, 297,
+- 131, 297, 297, 126, 139, 297, 141, 125, 297, 140,
++ 303, 303, 303, 303, 303, 224, 303, 219, 207, 211,
++ 222, 219, 209, 204, 216, 201, 202, 201, 198, 198,
++ 198, 210, 208, 192, 188, 205, 190, 192, 200, 201,
++ 202, 303, 184, 199, 197, 186, 182, 303, 179, 183,
++ 178, 190, 183, 190, 176, 175, 173, 176, 178, 169,
++ 170, 174, 168, 172, 165, 165, 170, 303, 303, 303,
++ 167, 174, 155, 157, 168, 156, 155, 172, 158, 170,
++ 303, 303, 303, 147, 150, 154, 159, 148, 164, 151,
++ 161, 303, 145, 147, 155, 140, 146, 156, 152, 137,
++ 150, 148, 147, 146, 303, 135, 303, 303, 130, 143,
+
+- 132, 116, 297, 121, 132, 128, 116, 297, 297, 111,
+- 131, 127, 127, 126, 116, 297, 105, 123, 125, 107,
+- 110, 297, 101, 297, 297, 117, 297, 104, 297, 97,
+- 118, 297, 117, 297, 112, 99, 114, 112, 297, 112,
+- 89, 107, 106, 297, 92, 85, 297, 83, 297, 82,
+- 297, 73, 90, 71, 297, 92, 297, 297, 297, 297,
+- 297, 297, 75, 297, 63, 297, 297, 297, 119, 121,
+- 88, 123
++ 303, 145, 129, 303, 144, 136, 120, 303, 125, 136,
++ 132, 120, 303, 303, 115, 135, 131, 131, 130, 120,
++ 303, 303, 109, 127, 129, 111, 114, 303, 105, 303,
++ 303, 121, 303, 108, 303, 101, 122, 303, 121, 303,
++ 116, 103, 118, 116, 303, 116, 93, 111, 110, 303,
++ 96, 89, 303, 94, 303, 93, 303, 78, 93, 74,
++ 303, 94, 303, 303, 303, 303, 303, 303, 77, 303,
++ 70, 303, 303, 303, 121, 123, 107, 125
+ } ;
+
+-static yyconst short int yy_def[273] =
++static yyconst flex_int16_t yy_def[279] =
+ { 0,
+- 268, 1, 268, 268, 268, 268, 268, 269, 270, 268,
+- 268, 268, 271, 271, 271, 271, 16, 268, 268, 268,
+- 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
+- 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
+- 272, 268, 269, 268, 270, 268, 268, 268, 268, 268,
+- 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
+- 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
+- 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
+- 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
+- 268, 268, 268, 268, 268, 272, 268, 268, 268, 268,
++ 274, 1, 274, 274, 274, 274, 274, 275, 276, 274,
++ 274, 274, 277, 277, 277, 277, 16, 274, 274, 274,
++ 274, 274, 274, 274, 274, 274, 274, 274, 274, 274,
++ 274, 274, 274, 274, 274, 274, 274, 274, 274, 274,
++ 278, 274, 275, 274, 276, 274, 274, 274, 274, 274,
++ 274, 274, 274, 274, 274, 274, 274, 274, 274, 274,
++ 274, 274, 274, 274, 274, 274, 274, 274, 274, 274,
++ 274, 274, 274, 274, 274, 274, 274, 274, 274, 274,
++ 274, 274, 274, 274, 274, 274, 274, 274, 274, 274,
++ 274, 274, 274, 274, 274, 274, 274, 274, 278, 274,
+
+- 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
+- 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
+- 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
+- 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
+- 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
+- 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
+- 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
+- 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
+- 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
+- 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
++ 274, 274, 274, 274, 274, 274, 274, 274, 274, 274,
++ 274, 274, 274, 274, 274, 274, 274, 274, 274, 274,
++ 274, 274, 274, 274, 274, 274, 274, 274, 274, 274,
++ 274, 274, 274, 274, 274, 274, 274, 274, 274, 274,
++ 274, 274, 274, 274, 274, 274, 274, 274, 274, 274,
++ 274, 274, 274, 274, 274, 274, 274, 274, 274, 274,
++ 274, 274, 274, 274, 274, 274, 274, 274, 274, 274,
++ 274, 274, 274, 274, 274, 274, 274, 274, 274, 274,
++ 274, 274, 274, 274, 274, 274, 274, 274, 274, 274,
++ 274, 274, 274, 274, 274, 274, 274, 274, 274, 274,
+
+- 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
+- 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
+- 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
+- 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
+- 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
+- 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
+- 268, 268, 268, 268, 268, 268, 268, 0, 268, 268,
+- 268, 268
++ 274, 274, 274, 274, 274, 274, 274, 274, 274, 274,
++ 274, 274, 274, 274, 274, 274, 274, 274, 274, 274,
++ 274, 274, 274, 274, 274, 274, 274, 274, 274, 274,
++ 274, 274, 274, 274, 274, 274, 274, 274, 274, 274,
++ 274, 274, 274, 274, 274, 274, 274, 274, 274, 274,
++ 274, 274, 274, 274, 274, 274, 274, 274, 274, 274,
++ 274, 274, 274, 274, 274, 274, 274, 274, 274, 274,
++ 274, 274, 274, 0, 274, 274, 274, 274
+ } ;
+
+-static yyconst short int yy_nxt[340] =
++static yyconst flex_int16_t yy_nxt[346] =
+ { 0,
+ 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
+ 14, 15, 16, 17, 10, 18, 19, 20, 21, 22,
+ 23, 24, 25, 26, 27, 4, 28, 29, 4, 30,
+ 31, 32, 33, 34, 35, 36, 37, 4, 4, 38,
+ 39, 40, 48, 48, 48, 48, 48, 48, 50, 51,
+- 268, 57, 268, 268, 52, 61, 64, 66, 82, 58,
+- 65, 59, 62, 68, 74, 60, 76, 69, 78, 83,
+- 77, 108, 90, 70, 86, 71, 79, 67, 87, 122,
+- 116, 123, 80, 75, 91, 92, 88, 125, 93, 48,
+- 109, 117, 127, 89, 48, 48, 48, 48, 48, 48,
++ 274, 57, 274, 274, 52, 61, 64, 66, 73, 58,
++ 65, 59, 62, 68, 75, 60, 74, 69, 77, 83,
++ 79, 95, 78, 70, 96, 71, 119, 67, 80, 92,
++ 84, 87, 111, 76, 81, 88, 93, 120, 89, 128,
++ 125, 94, 126, 90, 48, 48, 48, 48, 48, 48,
+
+- 126, 137, 128, 267, 141, 144, 145, 147, 129, 266,
+- 265, 264, 263, 262, 138, 142, 261, 260, 148, 43,
+- 43, 45, 45, 96, 96, 259, 258, 257, 256, 255,
++ 91, 112, 129, 130, 140, 145, 148, 149, 48, 151,
++ 273, 272, 271, 131, 270, 269, 146, 141, 268, 132,
++ 152, 43, 43, 45, 45, 99, 99, 267, 266, 265,
++ 264, 263, 262, 261, 260, 259, 258, 257, 256, 255,
+ 254, 253, 252, 251, 250, 249, 248, 247, 246, 245,
+- 244, 243, 242, 241, 240, 239, 238, 99, 237, 236,
+- 235, 234, 233, 232, 231, 230, 229, 101, 228, 227,
+- 226, 225, 224, 223, 222, 221, 220, 219, 218, 100,
++ 244, 102, 243, 242, 241, 240, 239, 238, 237, 236,
++ 235, 104, 234, 233, 232, 231, 230, 229, 228, 227,
++ 226, 225, 224, 103, 223, 222, 221, 220, 219, 218,
+ 217, 216, 215, 214, 213, 212, 211, 210, 209, 208,
+- 207, 206, 205, 204, 203, 202, 201, 98, 102, 200,
++ 207, 206, 101, 105, 205, 204, 203, 202, 201, 200,
++
+ 199, 198, 197, 196, 195, 194, 193, 192, 191, 190,
+-
+ 189, 188, 187, 186, 185, 184, 183, 182, 181, 180,
+ 179, 178, 177, 176, 175, 174, 173, 172, 171, 170,
+ 169, 168, 167, 166, 165, 164, 163, 162, 161, 160,
+- 159, 158, 157, 156, 155, 154, 153, 152, 151, 150,
+- 149, 97, 146, 143, 140, 139, 136, 135, 134, 133,
+- 132, 131, 130, 124, 121, 120, 119, 118, 115, 114,
+- 113, 112, 111, 110, 107, 106, 105, 104, 103, 102,
+- 101, 100, 99, 98, 46, 44, 97, 95, 94, 85,
+- 84, 81, 73, 72, 63, 56, 55, 54, 53, 49,
+- 47, 46, 44, 42, 268, 41, 3, 268, 268, 268,
++ 159, 158, 157, 156, 155, 154, 153, 100, 150, 147,
++ 144, 143, 142, 139, 138, 137, 136, 135, 134, 133,
++ 127, 124, 123, 122, 121, 118, 117, 116, 115, 114,
++ 113, 110, 109, 108, 107, 106, 105, 104, 103, 102,
++ 101, 46, 44, 100, 98, 97, 86, 85, 82, 72,
++ 63, 56, 55, 54, 53, 49, 47, 46, 44, 42,
+
+- 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
+- 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
+- 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
+- 268, 268, 268, 268, 268, 268, 268, 268, 268
++ 274, 41, 3, 274, 274, 274, 274, 274, 274, 274,
++ 274, 274, 274, 274, 274, 274, 274, 274, 274, 274,
++ 274, 274, 274, 274, 274, 274, 274, 274, 274, 274,
++ 274, 274, 274, 274, 274, 274, 274, 274, 274, 274,
++ 274, 274, 274, 274, 274
+ } ;
+
+-static yyconst short int yy_chk[340] =
++static yyconst flex_int16_t yy_chk[346] =
+ { 0,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 12, 12, 12, 12, 12, 12, 14, 15,
+- 15, 21, 14, 16, 16, 22, 24, 25, 33, 21,
+- 24, 21, 22, 26, 29, 21, 30, 26, 31, 33,
+- 30, 62, 37, 26, 36, 26, 31, 25, 36, 75,
+- 69, 75, 31, 29, 37, 38, 36, 77, 38, 271,
+- 62, 69, 78, 36, 48, 48, 48, 48, 48, 48,
++ 15, 21, 14, 16, 16, 22, 24, 25, 28, 21,
++ 24, 21, 22, 26, 29, 21, 28, 26, 30, 33,
++ 31, 38, 30, 26, 38, 26, 69, 25, 31, 37,
++ 33, 36, 62, 29, 31, 36, 37, 69, 36, 78,
++ 76, 37, 76, 36, 48, 48, 48, 48, 48, 48,
+
+- 77, 87, 78, 265, 90, 92, 92, 94, 78, 263,
+- 256, 254, 253, 252, 87, 90, 250, 248, 94, 269,
+- 269, 270, 270, 272, 272, 246, 245, 243, 242, 241,
+- 240, 238, 237, 236, 235, 233, 231, 230, 228, 226,
+- 223, 221, 220, 219, 218, 217, 215, 214, 213, 212,
+- 211, 210, 207, 206, 205, 204, 202, 201, 200, 198,
+- 197, 195, 194, 191, 189, 188, 187, 186, 185, 184,
+- 183, 182, 181, 180, 179, 177, 176, 175, 174, 173,
+- 172, 171, 170, 166, 165, 164, 163, 162, 161, 160,
+- 159, 158, 157, 153, 152, 151, 150, 149, 148, 147,
++ 36, 62, 78, 79, 88, 92, 95, 95, 277, 97,
++ 271, 269, 262, 79, 260, 259, 92, 88, 258, 79,
++ 97, 275, 275, 276, 276, 278, 278, 256, 254, 252,
++ 251, 249, 248, 247, 246, 244, 243, 242, 241, 239,
++ 237, 236, 234, 232, 229, 227, 226, 225, 224, 223,
++ 220, 219, 218, 217, 216, 215, 212, 211, 210, 209,
++ 207, 206, 205, 203, 202, 200, 199, 196, 194, 193,
++ 192, 191, 190, 189, 188, 187, 186, 185, 184, 183,
++ 181, 180, 179, 178, 177, 176, 175, 174, 170, 169,
++ 168, 167, 166, 165, 164, 163, 162, 161, 157, 156,
+
+- 146, 145, 144, 143, 142, 141, 140, 139, 138, 137,
+- 136, 134, 133, 132, 131, 130, 128, 127, 126, 125,
+- 124, 123, 122, 121, 120, 119, 118, 117, 116, 115,
+- 114, 113, 112, 111, 110, 109, 108, 107, 106, 105,
+- 103, 96, 93, 91, 89, 88, 86, 85, 84, 82,
+- 81, 80, 79, 76, 74, 72, 71, 70, 68, 67,
+- 66, 65, 64, 63, 61, 60, 59, 58, 57, 53,
+- 52, 51, 50, 49, 45, 43, 41, 40, 39, 35,
+- 34, 32, 28, 27, 23, 20, 19, 18, 17, 13,
+- 11, 9, 8, 7, 3, 2, 268, 268, 268, 268,
++ 155, 154, 153, 152, 151, 150, 149, 148, 147, 146,
++ 145, 144, 143, 142, 141, 140, 139, 137, 136, 135,
++ 134, 133, 131, 130, 129, 128, 127, 126, 125, 124,
++ 123, 122, 121, 120, 119, 118, 117, 116, 115, 114,
++ 113, 112, 111, 110, 109, 108, 106, 99, 96, 94,
++ 91, 90, 89, 87, 86, 85, 83, 82, 81, 80,
++ 77, 75, 72, 71, 70, 68, 67, 66, 65, 64,
++ 63, 61, 60, 59, 58, 57, 53, 52, 51, 50,
++ 49, 45, 43, 41, 40, 39, 35, 34, 32, 27,
++ 23, 20, 19, 18, 17, 13, 11, 9, 8, 7,
+
+- 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
+- 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
+- 268, 268, 268, 268, 268, 268, 268, 268, 268, 268,
+- 268, 268, 268, 268, 268, 268, 268, 268, 268
++ 3, 2, 274, 274, 274, 274, 274, 274, 274, 274,
++ 274, 274, 274, 274, 274, 274, 274, 274, 274, 274,
++ 274, 274, 274, 274, 274, 274, 274, 274, 274, 274,
++ 274, 274, 274, 274, 274, 274, 274, 274, 274, 274,
++ 274, 274, 274, 274, 274
+ } ;
+
+ static yy_state_type yy_last_accepting_state;
+ static char *yy_last_accepting_cpos;
+
++extern int kcal_flex_debug;
++int kcal_flex_debug = 0;
++
+ /* The intent behind this definition is that it'll catch
+ * any uses of REJECT which flex missed.
+ */
+@@ -539,93 +616,72 @@
+ #define yymore() yymore_used_but_not_detected
+ #define YY_MORE_ADJ 0
+ #define YY_RESTORE_YY_MORE_OFFSET
+-char *yytext;
++char *kcaltext;
+ #line 1 "scanholiday.lex"
+-#define INITIAL 0
+ #line 2 "scanholiday.lex"
+ #include <string.h>
+ #include "parseholiday.h"
+-#line 549 "scanholiday.c"
++#line 625 "scanholiday.c"
+
++#define INITIAL 0
++
++#ifndef YY_NO_UNISTD_H
++/* Special case for "unistd.h", since it is non-ANSI. We include it way
++ * down here because we want the user's section 1 to have been scanned first.
++ * The user has a chance to override it with an option.
++ */
++#include <unistd.h>
++#endif
++
++#ifndef YY_EXTRA_TYPE
++#define YY_EXTRA_TYPE void *
++#endif
++
++static int yy_init_globals (void );
++
+ /* Macros after this point can all be overridden by user definitions in
+ * section 1.
+ */
+
+ #ifndef YY_SKIP_YYWRAP
+ #ifdef __cplusplus
+-extern "C" int yywrap YY_PROTO(( void ));
++extern "C" int kcalwrap (void );
+ #else
+-extern int yywrap YY_PROTO(( void ));
++extern int kcalwrap (void );
+ #endif
+ #endif
+
+-#ifndef YY_NO_UNPUT
+-static void yyunput YY_PROTO(( int c, char *buf_ptr ));
+-#endif
+-
++ static void yyunput (int c,char *buf_ptr );
++
+ #ifndef yytext_ptr
+-static void yy_flex_strncpy YY_PROTO(( char *, yyconst char *, int ));
++static void yy_flex_strncpy (char *,yyconst char *,int );
+ #endif
+
+ #ifdef YY_NEED_STRLEN
+-static int yy_flex_strlen YY_PROTO(( yyconst char * ));
++static int yy_flex_strlen (yyconst char * );
+ #endif
+
+ #ifndef YY_NO_INPUT
++
+ #ifdef __cplusplus
+-static int yyinput YY_PROTO(( void ));
++static int yyinput (void );
+ #else
+-static int input YY_PROTO(( void ));
++static int input (void );
+ #endif
+-#endif
+
+-#if YY_STACK_USED
+-static int yy_start_stack_ptr = 0;
+-static int yy_start_stack_depth = 0;
+-static int *yy_start_stack = 0;
+-#ifndef YY_NO_PUSH_STATE
+-static void yy_push_state YY_PROTO(( int new_state ));
+ #endif
+-#ifndef YY_NO_POP_STATE
+-static void yy_pop_state YY_PROTO(( void ));
+-#endif
+-#ifndef YY_NO_TOP_STATE
+-static int yy_top_state YY_PROTO(( void ));
+-#endif
+
+-#else
+-#define YY_NO_PUSH_STATE 1
+-#define YY_NO_POP_STATE 1
+-#define YY_NO_TOP_STATE 1
+-#endif
+-
+-#ifdef YY_MALLOC_DECL
+-YY_MALLOC_DECL
+-#else
+-#if __STDC__
+-#ifndef __cplusplus
+-#include <stdlib.h>
+-#endif
+-#else
+-/* Just try to get by without declaring the routines. This will fail
+- * miserably on non-ANSI systems for which sizeof(size_t) != sizeof(int)
+- * or sizeof(void*) != sizeof(int).
+- */
+-#endif
+-#endif
+-
+ /* Amount of stuff to slurp up with each read. */
+ #ifndef YY_READ_BUF_SIZE
+ #define YY_READ_BUF_SIZE 8192
+ #endif
+
+ /* Copy whatever the last rule matched to the standard output. */
+-
+ #ifndef ECHO
+ /* This used to be an fputs(), but since the string might contain NUL's,
+ * we now use fwrite().
+ */
+-#define ECHO (void) fwrite( yytext, yyleng, 1, yyout )
++#define ECHO (void) fwrite( kcaltext, kcalleng, 1, kcalout )
+ #endif
+
+ /* Gets input and stuffs it into "buf". number of characters read, or YY_NULL,
+@@ -633,21 +689,35 @@
+ */
+ #ifndef YY_INPUT
+ #define YY_INPUT(buf,result,max_size) \
+- if ( yy_current_buffer->yy_is_interactive ) \
++ if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
+ { \
+- int c = '*', n; \
++ int c = '*'; \
++ size_t n; \
+ for ( n = 0; n < max_size && \
+- (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
++ (c = getc( kcalin )) != EOF && c != '\n'; ++n ) \
+ buf[n] = (char) c; \
+ if ( c == '\n' ) \
+ buf[n++] = (char) c; \
+- if ( c == EOF && ferror( yyin ) ) \
++ if ( c == EOF && ferror( kcalin ) ) \
+ YY_FATAL_ERROR( "input in flex scanner failed" ); \
+ result = n; \
+ } \
+- else if ( ((result = fread( buf, 1, max_size, yyin )) == 0) \
+- && ferror( yyin ) ) \
+- YY_FATAL_ERROR( "input in flex scanner failed" );
++ else \
++ { \
++ errno=0; \
++ while ( (result = fread(buf, 1, max_size, kcalin))==0 && ferror(kcalin)) \
++ { \
++ if( errno != EINTR) \
++ { \
++ YY_FATAL_ERROR( "input in flex scanner failed" ); \
++ break; \
++ } \
++ errno=0; \
++ clearerr(kcalin); \
++ } \
++ }\
++\
++
+ #endif
+
+ /* No semi-colon after return; correct usage is to write "yyterminate();" -
+@@ -668,14 +738,20 @@
+ #define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
+ #endif
+
++/* end tables serialization structures and prototypes */
++
+ /* Default declaration of generated scanner - a define so the user can
+ * easily add parameters.
+ */
+ #ifndef YY_DECL
+-#define YY_DECL int yylex YY_PROTO(( void ))
+-#endif
++#define YY_DECL_IS_OURS 1
+
+-/* Code executed at the beginning of each rule, after yytext and yyleng
++extern int kcallex (void);
++
++#define YY_DECL int kcallex (void)
++#endif /* !YY_DECL */
++
++/* Code executed at the beginning of each rule, after kcaltext and kcalleng
+ * have been set up.
+ */
+ #ifndef YY_USER_ACTION
+@@ -688,59 +764,63 @@
+ #endif
+
+ #define YY_RULE_SETUP \
+- if ( yyleng > 0 ) \
+- yy_current_buffer->yy_at_bol = \
+- (yytext[yyleng - 1] == '\n'); \
++ if ( kcalleng > 0 ) \
++ YY_CURRENT_BUFFER_LVALUE->yy_at_bol = \
++ (kcaltext[kcalleng - 1] == '\n'); \
+ YY_USER_ACTION
+
++/** The main scanner function which does all the work.
++ */
+ YY_DECL
+- {
++{
+ register yy_state_type yy_current_state;
+ register char *yy_cp, *yy_bp;
+ register int yy_act;
+-
++
+ #line 8 "scanholiday.lex"
+
+
+-#line 706 "scanholiday.c"
++#line 784 "scanholiday.c"
+
+- if ( yy_init )
++ if ( !(yy_init) )
+ {
+- yy_init = 0;
++ (yy_init) = 1;
+
+ #ifdef YY_USER_INIT
+ YY_USER_INIT;
+ #endif
+
+- if ( ! yy_start )
+- yy_start = 1; /* first start state */
++ if ( ! (yy_start) )
++ (yy_start) = 1; /* first start state */
+
+- if ( ! yyin )
+- yyin = stdin;
++ if ( ! kcalin )
++ kcalin = stdin;
+
+- if ( ! yyout )
+- yyout = stdout;
++ if ( ! kcalout )
++ kcalout = stdout;
+
+- if ( ! yy_current_buffer )
+- yy_current_buffer =
+- yy_create_buffer( yyin, YY_BUF_SIZE );
++ if ( ! YY_CURRENT_BUFFER ) {
++ kcalensure_buffer_stack ();
++ YY_CURRENT_BUFFER_LVALUE =
++ kcal_create_buffer(kcalin,YY_BUF_SIZE );
++ }
+
+- yy_load_buffer_state();
++ kcal_load_buffer_state( );
+ }
+
+ while ( 1 ) /* loops until end-of-file is reached */
+ {
+- yy_cp = yy_c_buf_p;
++ yy_cp = (yy_c_buf_p);
+
+- /* Support of yytext. */
+- *yy_cp = yy_hold_char;
++ /* Support of kcaltext. */
++ *yy_cp = (yy_hold_char);
+
+ /* yy_bp points to the position in yy_ch_buf of the start of
+ * the current run.
+ */
+ yy_bp = yy_cp;
+
+- yy_current_state = yy_start;
++ yy_current_state = (yy_start);
+ yy_current_state += YY_AT_BOL();
+ yy_match:
+ do
+@@ -748,51 +828,52 @@
+ register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
+ if ( yy_accept[yy_current_state] )
+ {
+- yy_last_accepting_state = yy_current_state;
+- yy_last_accepting_cpos = yy_cp;
++ (yy_last_accepting_state) = yy_current_state;
++ (yy_last_accepting_cpos) = yy_cp;
+ }
+ while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+ {
+ yy_current_state = (int) yy_def[yy_current_state];
+- if ( yy_current_state >= 269 )
++ if ( yy_current_state >= 275 )
+ yy_c = yy_meta[(unsigned int) yy_c];
+ }
+ yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+ ++yy_cp;
+ }
+- while ( yy_current_state != 268 );
+- yy_cp = yy_last_accepting_cpos;
+- yy_current_state = yy_last_accepting_state;
++ while ( yy_current_state != 274 );
++ yy_cp = (yy_last_accepting_cpos);
++ yy_current_state = (yy_last_accepting_state);
+
+ yy_find_action:
+ yy_act = yy_accept[yy_current_state];
+
+ YY_DO_BEFORE_ACTION;
+
+-
+ do_action: /* This label is used only to access EOF actions. */
+
+-
+ switch ( yy_act )
+ { /* beginning of action switch */
+ case 0: /* must back up */
+ /* undo the effects of YY_DO_BEFORE_ACTION */
+- *yy_cp = yy_hold_char;
+- yy_cp = yy_last_accepting_cpos;
+- yy_current_state = yy_last_accepting_state;
++ *yy_cp = (yy_hold_char);
++ yy_cp = (yy_last_accepting_cpos);
++ yy_current_state = (yy_last_accepting_state);
+ goto yy_find_action;
+
+ case 1:
++/* rule 1 can match eol */
+ YY_RULE_SETUP
+ #line 10 "scanholiday.lex"
+ ;
+ YY_BREAK
+ case 2:
++/* rule 2 can match eol */
+ YY_RULE_SETUP
+ #line 11 "scanholiday.lex"
+ ;
+ YY_BREAK
+ case 3:
++/* rule 3 can match eol */
+ YY_RULE_SETUP
+ #line 12 "scanholiday.lex"
+ ;
+@@ -948,6 +1029,7 @@
+ { kcallval.ival = atoi(kcaltext); return(NUMBER); }
+ YY_BREAK
+ case 34:
++/* rule 34 can match eol */
+ YY_RULE_SETUP
+ #line 49 "scanholiday.lex"
+ { kcallval.sval = strdup(kcaltext+1);
+@@ -977,165 +1059,180 @@
+ case 39:
+ YY_RULE_SETUP
+ #line 57 "scanholiday.lex"
+-{ return(IN); }
++;
+ YY_BREAK
+ case 40:
+ YY_RULE_SETUP
+ #line 58 "scanholiday.lex"
+-{ return(PLUS); }
++{ return(IN); }
+ YY_BREAK
+ case 41:
+ YY_RULE_SETUP
+ #line 59 "scanholiday.lex"
+-{ return(MINUS); }
++{ return(IF); }
+ YY_BREAK
+ case 42:
+ YY_RULE_SETUP
+ #line 60 "scanholiday.lex"
+-{ return(SMALL); }
++{ return(PLUS); }
+ YY_BREAK
+ case 43:
+ YY_RULE_SETUP
+ #line 61 "scanholiday.lex"
+-{ return(CYEAR); }
++{ return(MINUS); }
+ YY_BREAK
+ case 44:
+ YY_RULE_SETUP
+ #line 62 "scanholiday.lex"
+-{ return(LEAPYEAR); }
++{ return(SMALL); }
+ YY_BREAK
+ case 45:
+ YY_RULE_SETUP
+ #line 63 "scanholiday.lex"
+-{ return(EASTER); }
++{ return(CYEAR); }
+ YY_BREAK
+ case 46:
+ YY_RULE_SETUP
+ #line 64 "scanholiday.lex"
+-{ return(LENGTH); }
++{ return(LEAPYEAR); }
+ YY_BREAK
+ case 47:
+ YY_RULE_SETUP
+-#line 66 "scanholiday.lex"
+-{ kcallval.ival = 1; return(COLOR); }
++#line 65 "scanholiday.lex"
++{ return(EASTER); }
+ YY_BREAK
+ case 48:
+ YY_RULE_SETUP
+-#line 67 "scanholiday.lex"
+-{ kcallval.ival = 2; return(COLOR); }
++#line 66 "scanholiday.lex"
++{ return(LENGTH); }
+ YY_BREAK
+ case 49:
+ YY_RULE_SETUP
+-#line 68 "scanholiday.lex"
+-{ kcallval.ival = 3; return(COLOR); }
++#line 67 "scanholiday.lex"
++{ return(SHIFT); }
+ YY_BREAK
+ case 50:
+ YY_RULE_SETUP
+ #line 69 "scanholiday.lex"
+-{ kcallval.ival = 4; return(COLOR); }
++{ kcallval.ival = 1; return(COLOR); }
+ YY_BREAK
+ case 51:
+ YY_RULE_SETUP
+ #line 70 "scanholiday.lex"
+-{ kcallval.ival = 5; return(COLOR); }
++{ kcallval.ival = 2; return(COLOR); }
+ YY_BREAK
+ case 52:
+ YY_RULE_SETUP
+ #line 71 "scanholiday.lex"
+-{ kcallval.ival = 6; return(COLOR); }
++{ kcallval.ival = 3; return(COLOR); }
+ YY_BREAK
+ case 53:
+ YY_RULE_SETUP
+ #line 72 "scanholiday.lex"
+-{ kcallval.ival = 7; return(COLOR); }
++{ kcallval.ival = 4; return(COLOR); }
+ YY_BREAK
+ case 54:
+ YY_RULE_SETUP
+ #line 73 "scanholiday.lex"
+-{ kcallval.ival = 8; return(COLOR); }
++{ kcallval.ival = 5; return(COLOR); }
+ YY_BREAK
+ case 55:
+ YY_RULE_SETUP
+ #line 74 "scanholiday.lex"
+-{ kcallval.ival = 9; return(COLOR); }
++{ kcallval.ival = 6; return(COLOR); }
+ YY_BREAK
+ case 56:
+ YY_RULE_SETUP
+-#line 76 "scanholiday.lex"
+-{ return(EQ); }
++#line 75 "scanholiday.lex"
++{ kcallval.ival = 7; return(COLOR); }
+ YY_BREAK
+ case 57:
+ YY_RULE_SETUP
+-#line 77 "scanholiday.lex"
+-{ return(NE); }
++#line 76 "scanholiday.lex"
++{ kcallval.ival = 8; return(COLOR); }
+ YY_BREAK
+ case 58:
+ YY_RULE_SETUP
+-#line 78 "scanholiday.lex"
+-{ return(LE); }
++#line 77 "scanholiday.lex"
++{ kcallval.ival = 9; return(COLOR); }
+ YY_BREAK
+ case 59:
+ YY_RULE_SETUP
+ #line 79 "scanholiday.lex"
+-{ return(GE); }
++{ return(EQ); }
+ YY_BREAK
+ case 60:
+ YY_RULE_SETUP
+ #line 80 "scanholiday.lex"
+-{ return(LT); }
++{ return(NE); }
+ YY_BREAK
+ case 61:
+ YY_RULE_SETUP
+ #line 81 "scanholiday.lex"
+-{ return(GT); }
++{ return(LE); }
+ YY_BREAK
+ case 62:
+ YY_RULE_SETUP
+ #line 82 "scanholiday.lex"
+-{ return(AND);}
++{ return(GE); }
+ YY_BREAK
+ case 63:
+ YY_RULE_SETUP
+ #line 83 "scanholiday.lex"
+-{ return(OR); }
++{ return(LT); }
+ YY_BREAK
+ case 64:
+ YY_RULE_SETUP
++#line 84 "scanholiday.lex"
++{ return(GT); }
++ YY_BREAK
++case 65:
++YY_RULE_SETUP
+ #line 85 "scanholiday.lex"
++{ return(AND);}
++ YY_BREAK
++case 66:
++YY_RULE_SETUP
++#line 86 "scanholiday.lex"
++{ return(OR); }
++ YY_BREAK
++case 67:
++YY_RULE_SETUP
++#line 88 "scanholiday.lex"
+ { printf("holiday: bad char: %s \n", kcaltext); }
+ YY_BREAK
+-case 65:
++case 68:
+ YY_RULE_SETUP
+-#line 87 "scanholiday.lex"
++#line 90 "scanholiday.lex"
+ ECHO;
+ YY_BREAK
+-#line 1113 "scanholiday.c"
++#line 1210 "scanholiday.c"
+ case YY_STATE_EOF(INITIAL):
+ yyterminate();
+
+ case YY_END_OF_BUFFER:
+ {
+ /* Amount of text matched not including the EOB char. */
+- int yy_amount_of_matched_text = (int) (yy_cp - yytext_ptr) - 1;
++ int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1;
+
+ /* Undo the effects of YY_DO_BEFORE_ACTION. */
+- *yy_cp = yy_hold_char;
++ *yy_cp = (yy_hold_char);
+ YY_RESTORE_YY_MORE_OFFSET
+
+- if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_NEW )
++ if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
+ {
+ /* We're scanning a new file or input source. It's
+ * possible that this happened because the user
+- * just pointed yyin at a new source and called
+- * yylex(). If so, then we have to assure
+- * consistency between yy_current_buffer and our
++ * just pointed kcalin at a new source and called
++ * kcallex(). If so, then we have to assure
++ * consistency between YY_CURRENT_BUFFER and our
+ * globals. Here is the right place to do so, because
+ * this is the first action (other than possibly a
+ * back-up) that will match for the new input source.
+ */
+- yy_n_chars = yy_current_buffer->yy_n_chars;
+- yy_current_buffer->yy_input_file = yyin;
+- yy_current_buffer->yy_buffer_status = YY_BUFFER_NORMAL;
++ (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
++ YY_CURRENT_BUFFER_LVALUE->yy_input_file = kcalin;
++ YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
+ }
+
+ /* Note that here we test for yy_c_buf_p "<=" to the position
+@@ -1145,13 +1242,13 @@
+ * end-of-buffer state). Contrast this with the test
+ * in input().
+ */
+- if ( yy_c_buf_p <= &yy_current_buffer->yy_ch_buf[yy_n_chars] )
++ if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
+ { /* This was really a NUL. */
+ yy_state_type yy_next_state;
+
+- yy_c_buf_p = yytext_ptr + yy_amount_of_matched_text;
++ (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text;
+
+- yy_current_state = yy_get_previous_state();
++ yy_current_state = yy_get_previous_state( );
+
+ /* Okay, we're now positioned to make the NUL
+ * transition. We couldn't have
+@@ -1164,42 +1261,42 @@
+
+ yy_next_state = yy_try_NUL_trans( yy_current_state );
+
+- yy_bp = yytext_ptr + YY_MORE_ADJ;
++ yy_bp = (yytext_ptr) + YY_MORE_ADJ;
+
+ if ( yy_next_state )
+ {
+ /* Consume the NUL. */
+- yy_cp = ++yy_c_buf_p;
++ yy_cp = ++(yy_c_buf_p);
+ yy_current_state = yy_next_state;
+ goto yy_match;
+ }
+
+ else
+ {
+- yy_cp = yy_last_accepting_cpos;
+- yy_current_state = yy_last_accepting_state;
++ yy_cp = (yy_last_accepting_cpos);
++ yy_current_state = (yy_last_accepting_state);
+ goto yy_find_action;
+ }
+ }
+
+- else switch ( yy_get_next_buffer() )
++ else switch ( yy_get_next_buffer( ) )
+ {
+ case EOB_ACT_END_OF_FILE:
+ {
+- yy_did_buffer_switch_on_eof = 0;
++ (yy_did_buffer_switch_on_eof) = 0;
+
+- if ( yywrap() )
++ if ( kcalwrap( ) )
+ {
+ /* Note: because we've taken care in
+ * yy_get_next_buffer() to have set up
+- * yytext, we can now set up
++ * kcaltext, we can now set up
+ * yy_c_buf_p so that if some total
+ * hoser (like flex itself) wants to
+ * call the scanner after we return the
+ * YY_NULL, it'll still work - another
+ * YY_NULL will get returned.
+ */
+- yy_c_buf_p = yytext_ptr + YY_MORE_ADJ;
++ (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ;
+
+ yy_act = YY_STATE_EOF(YY_START);
+ goto do_action;
+@@ -1207,30 +1304,30 @@
+
+ else
+ {
+- if ( ! yy_did_buffer_switch_on_eof )
++ if ( ! (yy_did_buffer_switch_on_eof) )
+ YY_NEW_FILE;
+ }
+ break;
+ }
+
+ case EOB_ACT_CONTINUE_SCAN:
+- yy_c_buf_p =
+- yytext_ptr + yy_amount_of_matched_text;
++ (yy_c_buf_p) =
++ (yytext_ptr) + yy_amount_of_matched_text;
+
+- yy_current_state = yy_get_previous_state();
++ yy_current_state = yy_get_previous_state( );
+
+- yy_cp = yy_c_buf_p;
+- yy_bp = yytext_ptr + YY_MORE_ADJ;
++ yy_cp = (yy_c_buf_p);
++ yy_bp = (yytext_ptr) + YY_MORE_ADJ;
+ goto yy_match;
+
+ case EOB_ACT_LAST_MATCH:
+- yy_c_buf_p =
+- &yy_current_buffer->yy_ch_buf[yy_n_chars];
++ (yy_c_buf_p) =
++ &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)];
+
+- yy_current_state = yy_get_previous_state();
++ yy_current_state = yy_get_previous_state( );
+
+- yy_cp = yy_c_buf_p;
+- yy_bp = yytext_ptr + YY_MORE_ADJ;
++ yy_cp = (yy_c_buf_p);
++ yy_bp = (yytext_ptr) + YY_MORE_ADJ;
+ goto yy_find_action;
+ }
+ break;
+@@ -1241,9 +1338,8 @@
+ "fatal flex scanner internal error--no action found" );
+ } /* end of action switch */
+ } /* end of scanning one token */
+- } /* end of yylex */
++} /* end of kcallex */
+
+-
+ /* yy_get_next_buffer - try to read in a new buffer
+ *
+ * Returns a code representing an action:
+@@ -1251,21 +1347,20 @@
+ * EOB_ACT_CONTINUE_SCAN - continue scanning from current position
+ * EOB_ACT_END_OF_FILE - end of file
+ */
+-
+-static int yy_get_next_buffer()
+- {
+- register char *dest = yy_current_buffer->yy_ch_buf;
+- register char *source = yytext_ptr;
++static int yy_get_next_buffer (void)
++{
++ register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
++ register char *source = (yytext_ptr);
+ register int number_to_move, i;
+ int ret_val;
+
+- if ( yy_c_buf_p > &yy_current_buffer->yy_ch_buf[yy_n_chars + 1] )
++ if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
+ YY_FATAL_ERROR(
+ "fatal flex scanner internal error--end of buffer missed" );
+
+- if ( yy_current_buffer->yy_fill_buffer == 0 )
++ if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
+ { /* Don't try to fill the buffer, so this is an EOF. */
+- if ( yy_c_buf_p - yytext_ptr - YY_MORE_ADJ == 1 )
++ if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 )
+ {
+ /* We matched a single character, the EOB, so
+ * treat this as a final EOF.
+@@ -1285,34 +1380,30 @@
+ /* Try to read more data. */
+
+ /* First move last chars to start of buffer. */
+- number_to_move = (int) (yy_c_buf_p - yytext_ptr) - 1;
++ number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1;
+
+ for ( i = 0; i < number_to_move; ++i )
+ *(dest++) = *(source++);
+
+- if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_EOF_PENDING )
++ if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
+ /* don't do the read, it's not guaranteed to return an EOF,
+ * just force an EOF
+ */
+- yy_current_buffer->yy_n_chars = yy_n_chars = 0;
++ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0;
+
+ else
+ {
+- int num_to_read =
+- yy_current_buffer->yy_buf_size - number_to_move - 1;
++ int num_to_read =
++ YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
+
+ while ( num_to_read <= 0 )
+ { /* Not enough room in the buffer - grow it. */
+-#ifdef YY_USES_REJECT
+- YY_FATAL_ERROR(
+-"input buffer overflow, can't enlarge buffer because scanner uses REJECT" );
+-#else
+
+ /* just a shorter name for the current buffer */
+- YY_BUFFER_STATE b = yy_current_buffer;
++ YY_BUFFER_STATE b = YY_CURRENT_BUFFER;
+
+ int yy_c_buf_p_offset =
+- (int) (yy_c_buf_p - b->yy_ch_buf);
++ (int) ((yy_c_buf_p) - b->yy_ch_buf);
+
+ if ( b->yy_is_our_buffer )
+ {
+@@ -1325,8 +1416,7 @@
+
+ b->yy_ch_buf = (char *)
+ /* Include room in for 2 EOB chars. */
+- yy_flex_realloc( (void *) b->yy_ch_buf,
+- b->yy_buf_size + 2 );
++ kcalrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 );
+ }
+ else
+ /* Can't grow it, we don't own it. */
+@@ -1336,35 +1426,35 @@
+ YY_FATAL_ERROR(
+ "fatal error - scanner input buffer overflow" );
+
+- yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset];
++ (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset];
+
+- num_to_read = yy_current_buffer->yy_buf_size -
++ num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size -
+ number_to_move - 1;
+-#endif
++
+ }
+
+ if ( num_to_read > YY_READ_BUF_SIZE )
+ num_to_read = YY_READ_BUF_SIZE;
+
+ /* Read in more data. */
+- YY_INPUT( (&yy_current_buffer->yy_ch_buf[number_to_move]),
+- yy_n_chars, num_to_read );
++ YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
++ (yy_n_chars), (size_t) num_to_read );
+
+- yy_current_buffer->yy_n_chars = yy_n_chars;
++ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
+ }
+
+- if ( yy_n_chars == 0 )
++ if ( (yy_n_chars) == 0 )
+ {
+ if ( number_to_move == YY_MORE_ADJ )
+ {
+ ret_val = EOB_ACT_END_OF_FILE;
+- yyrestart( yyin );
++ kcalrestart(kcalin );
+ }
+
+ else
+ {
+ ret_val = EOB_ACT_LAST_MATCH;
+- yy_current_buffer->yy_buffer_status =
++ YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
+ YY_BUFFER_EOF_PENDING;
+ }
+ }
+@@ -1372,153 +1462,138 @@
+ else
+ ret_val = EOB_ACT_CONTINUE_SCAN;
+
+- yy_n_chars += number_to_move;
+- yy_current_buffer->yy_ch_buf[yy_n_chars] = YY_END_OF_BUFFER_CHAR;
+- yy_current_buffer->yy_ch_buf[yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR;
++ (yy_n_chars) += number_to_move;
++ YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR;
++ YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR;
+
+- yytext_ptr = &yy_current_buffer->yy_ch_buf[0];
++ (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];
+
+ return ret_val;
+- }
++}
+
+-
+ /* yy_get_previous_state - get the state just before the EOB char was reached */
+
+-static yy_state_type yy_get_previous_state()
+- {
++ static yy_state_type yy_get_previous_state (void)
++{
+ register yy_state_type yy_current_state;
+ register char *yy_cp;
+-
+- yy_current_state = yy_start;
++
++ yy_current_state = (yy_start);
+ yy_current_state += YY_AT_BOL();
+
+- for ( yy_cp = yytext_ptr + YY_MORE_ADJ; yy_cp < yy_c_buf_p; ++yy_cp )
++ for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp )
+ {
+ register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
+ if ( yy_accept[yy_current_state] )
+ {
+- yy_last_accepting_state = yy_current_state;
+- yy_last_accepting_cpos = yy_cp;
++ (yy_last_accepting_state) = yy_current_state;
++ (yy_last_accepting_cpos) = yy_cp;
+ }
+ while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+ {
+ yy_current_state = (int) yy_def[yy_current_state];
+- if ( yy_current_state >= 269 )
++ if ( yy_current_state >= 275 )
+ yy_c = yy_meta[(unsigned int) yy_c];
+ }
+ yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+ }
+
+ return yy_current_state;
+- }
++}
+
+-
+ /* yy_try_NUL_trans - try to make a transition on the NUL character
+ *
+ * synopsis
+ * next_state = yy_try_NUL_trans( current_state );
+ */
+-
+-#ifdef YY_USE_PROTOS
+-static yy_state_type yy_try_NUL_trans( yy_state_type yy_current_state )
+-#else
+-static yy_state_type yy_try_NUL_trans( yy_current_state )
+-yy_state_type yy_current_state;
+-#endif
+- {
++ static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state )
++{
+ register int yy_is_jam;
+- register char *yy_cp = yy_c_buf_p;
++ register char *yy_cp = (yy_c_buf_p);
+
+ register YY_CHAR yy_c = 1;
+ if ( yy_accept[yy_current_state] )
+ {
+- yy_last_accepting_state = yy_current_state;
+- yy_last_accepting_cpos = yy_cp;
++ (yy_last_accepting_state) = yy_current_state;
++ (yy_last_accepting_cpos) = yy_cp;
+ }
+ while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+ {
+ yy_current_state = (int) yy_def[yy_current_state];
+- if ( yy_current_state >= 269 )
++ if ( yy_current_state >= 275 )
+ yy_c = yy_meta[(unsigned int) yy_c];
+ }
+ yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+- yy_is_jam = (yy_current_state == 268);
++ yy_is_jam = (yy_current_state == 274);
+
+ return yy_is_jam ? 0 : yy_current_state;
+- }
++}
+
++ static void yyunput (int c, register char * yy_bp )
++{
++ register char *yy_cp;
++
++ yy_cp = (yy_c_buf_p);
+
+-#ifndef YY_NO_UNPUT
+-#ifdef YY_USE_PROTOS
+-static void yyunput( int c, register char *yy_bp )
+-#else
+-static void yyunput( c, yy_bp )
+-int c;
+-register char *yy_bp;
+-#endif
+- {
+- register char *yy_cp = yy_c_buf_p;
++ /* undo effects of setting up kcaltext */
++ *yy_cp = (yy_hold_char);
+
+- /* undo effects of setting up yytext */
+- *yy_cp = yy_hold_char;
+-
+- if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
++ if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
+ { /* need to shift things up to make room */
+ /* +2 for EOB chars. */
+- register int number_to_move = yy_n_chars + 2;
+- register char *dest = &yy_current_buffer->yy_ch_buf[
+- yy_current_buffer->yy_buf_size + 2];
++ register int number_to_move = (yy_n_chars) + 2;
++ register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[
++ YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2];
+ register char *source =
+- &yy_current_buffer->yy_ch_buf[number_to_move];
++ &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move];
+
+- while ( source > yy_current_buffer->yy_ch_buf )
++ while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
+ *--dest = *--source;
+
+ yy_cp += (int) (dest - source);
+ yy_bp += (int) (dest - source);
+- yy_current_buffer->yy_n_chars =
+- yy_n_chars = yy_current_buffer->yy_buf_size;
++ YY_CURRENT_BUFFER_LVALUE->yy_n_chars =
++ (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size;
+
+- if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
++ if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
+ YY_FATAL_ERROR( "flex scanner push-back overflow" );
+ }
+
+ *--yy_cp = (char) c;
+
++ (yytext_ptr) = yy_bp;
++ (yy_hold_char) = *yy_cp;
++ (yy_c_buf_p) = yy_cp;
++}
+
+- yytext_ptr = yy_bp;
+- yy_hold_char = *yy_cp;
+- yy_c_buf_p = yy_cp;
+- }
+-#endif /* ifndef YY_NO_UNPUT */
+-
+-
++#ifndef YY_NO_INPUT
+ #ifdef __cplusplus
+-static int yyinput()
++ static int yyinput (void)
+ #else
+-static int input()
++ static int input (void)
+ #endif
+- {
++
++{
+ int c;
++
++ *(yy_c_buf_p) = (yy_hold_char);
+
+- *yy_c_buf_p = yy_hold_char;
+-
+- if ( *yy_c_buf_p == YY_END_OF_BUFFER_CHAR )
++ if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR )
+ {
+ /* yy_c_buf_p now points to the character we want to return.
+ * If this occurs *before* the EOB characters, then it's a
+ * valid NUL; if not, then we've hit the end of the buffer.
+ */
+- if ( yy_c_buf_p < &yy_current_buffer->yy_ch_buf[yy_n_chars] )
++ if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
+ /* This was really a NUL. */
+- *yy_c_buf_p = '\0';
++ *(yy_c_buf_p) = '\0';
+
+ else
+ { /* need more input */
+- int offset = yy_c_buf_p - yytext_ptr;
+- ++yy_c_buf_p;
++ int offset = (yy_c_buf_p) - (yytext_ptr);
++ ++(yy_c_buf_p);
+
+- switch ( yy_get_next_buffer() )
++ switch ( yy_get_next_buffer( ) )
+ {
+ case EOB_ACT_LAST_MATCH:
+ /* This happens because yy_g_n_b()
+@@ -1532,16 +1607,16 @@
+ */
+
+ /* Reset buffer status. */
+- yyrestart( yyin );
++ kcalrestart(kcalin );
+
+- /* fall through */
++ /*FALLTHROUGH*/
+
+ case EOB_ACT_END_OF_FILE:
+ {
+- if ( yywrap() )
++ if ( kcalwrap( ) )
+ return EOF;
+
+- if ( ! yy_did_buffer_switch_on_eof )
++ if ( ! (yy_did_buffer_switch_on_eof) )
+ YY_NEW_FILE;
+ #ifdef __cplusplus
+ return yyinput();
+@@ -1551,173 +1626,171 @@
+ }
+
+ case EOB_ACT_CONTINUE_SCAN:
+- yy_c_buf_p = yytext_ptr + offset;
++ (yy_c_buf_p) = (yytext_ptr) + offset;
+ break;
+ }
+ }
+ }
+
+- c = *(unsigned char *) yy_c_buf_p; /* cast for 8-bit char's */
+- *yy_c_buf_p = '\0'; /* preserve yytext */
+- yy_hold_char = *++yy_c_buf_p;
++ c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */
++ *(yy_c_buf_p) = '\0'; /* preserve kcaltext */
++ (yy_hold_char) = *++(yy_c_buf_p);
+
+- yy_current_buffer->yy_at_bol = (c == '\n');
++ YY_CURRENT_BUFFER_LVALUE->yy_at_bol = (c == '\n');
+
+ return c;
+- }
++}
++#endif /* ifndef YY_NO_INPUT */
+
+-
+-#ifdef YY_USE_PROTOS
+-void yyrestart( FILE *input_file )
+-#else
+-void yyrestart( input_file )
+-FILE *input_file;
+-#endif
+- {
+- if ( ! yy_current_buffer )
+- yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE );
+-
+- yy_init_buffer( yy_current_buffer, input_file );
+- yy_load_buffer_state();
++/** Immediately switch to a different input stream.
++ * @param input_file A readable stream.
++ *
++ * @note This function does not reset the start condition to @c INITIAL .
++ */
++ void kcalrestart (FILE * input_file )
++{
++
++ if ( ! YY_CURRENT_BUFFER ){
++ kcalensure_buffer_stack ();
++ YY_CURRENT_BUFFER_LVALUE =
++ kcal_create_buffer(kcalin,YY_BUF_SIZE );
+ }
+
++ kcal_init_buffer(YY_CURRENT_BUFFER,input_file );
++ kcal_load_buffer_state( );
++}
+
+-#ifdef YY_USE_PROTOS
+-void yy_switch_to_buffer( YY_BUFFER_STATE new_buffer )
+-#else
+-void yy_switch_to_buffer( new_buffer )
+-YY_BUFFER_STATE new_buffer;
+-#endif
+- {
+- if ( yy_current_buffer == new_buffer )
++/** Switch to a different input buffer.
++ * @param new_buffer The new input buffer.
++ *
++ */
++ void kcal_switch_to_buffer (YY_BUFFER_STATE new_buffer )
++{
++
++ /* TODO. We should be able to replace this entire function body
++ * with
++ * kcalpop_buffer_state();
++ * kcalpush_buffer_state(new_buffer);
++ */
++ kcalensure_buffer_stack ();
++ if ( YY_CURRENT_BUFFER == new_buffer )
+ return;
+
+- if ( yy_current_buffer )
++ if ( YY_CURRENT_BUFFER )
+ {
+ /* Flush out information for old buffer. */
+- *yy_c_buf_p = yy_hold_char;
+- yy_current_buffer->yy_buf_pos = yy_c_buf_p;
+- yy_current_buffer->yy_n_chars = yy_n_chars;
++ *(yy_c_buf_p) = (yy_hold_char);
++ YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
++ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
+ }
+
+- yy_current_buffer = new_buffer;
+- yy_load_buffer_state();
++ YY_CURRENT_BUFFER_LVALUE = new_buffer;
++ kcal_load_buffer_state( );
+
+ /* We don't actually know whether we did this switch during
+- * EOF (yywrap()) processing, but the only time this flag
+- * is looked at is after yywrap() is called, so it's safe
++ * EOF (kcalwrap()) processing, but the only time this flag
++ * is looked at is after kcalwrap() is called, so it's safe
+ * to go ahead and always set it.
+ */
+- yy_did_buffer_switch_on_eof = 1;
+- }
++ (yy_did_buffer_switch_on_eof) = 1;
++}
+
++static void kcal_load_buffer_state (void)
++{
++ (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
++ (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
++ kcalin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
++ (yy_hold_char) = *(yy_c_buf_p);
++}
+
+-#ifdef YY_USE_PROTOS
+-void yy_load_buffer_state( void )
+-#else
+-void yy_load_buffer_state()
+-#endif
+- {
+- yy_n_chars = yy_current_buffer->yy_n_chars;
+- yytext_ptr = yy_c_buf_p = yy_current_buffer->yy_buf_pos;
+- yyin = yy_current_buffer->yy_input_file;
+- yy_hold_char = *yy_c_buf_p;
+- }
+-
+-
+-#ifdef YY_USE_PROTOS
+-YY_BUFFER_STATE yy_create_buffer( FILE *file, int size )
+-#else
+-YY_BUFFER_STATE yy_create_buffer( file, size )
+-FILE *file;
+-int size;
+-#endif
+- {
++/** Allocate and initialize an input buffer state.
++ * @param file A readable stream.
++ * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
++ *
++ * @return the allocated buffer state.
++ */
++ YY_BUFFER_STATE kcal_create_buffer (FILE * file, int size )
++{
+ YY_BUFFER_STATE b;
+-
+- b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
++
++ b = (YY_BUFFER_STATE) kcalalloc(sizeof( struct yy_buffer_state ) );
+ if ( ! b )
+- YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
++ YY_FATAL_ERROR( "out of dynamic memory in kcal_create_buffer()" );
+
+ b->yy_buf_size = size;
+
+ /* yy_ch_buf has to be 2 characters longer than the size given because
+ * we need to put in 2 end-of-buffer characters.
+ */
+- b->yy_ch_buf = (char *) yy_flex_alloc( b->yy_buf_size + 2 );
++ b->yy_ch_buf = (char *) kcalalloc(b->yy_buf_size + 2 );
+ if ( ! b->yy_ch_buf )
+- YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
++ YY_FATAL_ERROR( "out of dynamic memory in kcal_create_buffer()" );
+
+ b->yy_is_our_buffer = 1;
+
+- yy_init_buffer( b, file );
++ kcal_init_buffer(b,file );
+
+ return b;
+- }
++}
+
+-
+-#ifdef YY_USE_PROTOS
+-void yy_delete_buffer( YY_BUFFER_STATE b )
+-#else
+-void yy_delete_buffer( b )
+-YY_BUFFER_STATE b;
+-#endif
+- {
++/** Destroy the buffer.
++ * @param b a buffer created with kcal_create_buffer()
++ *
++ */
++ void kcal_delete_buffer (YY_BUFFER_STATE b )
++{
++
+ if ( ! b )
+ return;
+
+- if ( b == yy_current_buffer )
+- yy_current_buffer = (YY_BUFFER_STATE) 0;
++ if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
++ YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
+
+ if ( b->yy_is_our_buffer )
+- yy_flex_free( (void *) b->yy_ch_buf );
++ kcalfree((void *) b->yy_ch_buf );
+
+- yy_flex_free( (void *) b );
+- }
++ kcalfree((void *) b );
++}
+
++#ifndef __cplusplus
++extern int isatty (int );
++#endif /* __cplusplus */
++
++/* Initializes or reinitializes a buffer.
++ * This function is sometimes called more than once on the same buffer,
++ * such as during a kcalrestart() or at EOF.
++ */
++ static void kcal_init_buffer (YY_BUFFER_STATE b, FILE * file )
+
+-#ifndef YY_ALWAYS_INTERACTIVE
+-#ifndef YY_NEVER_INTERACTIVE
+-extern int isatty YY_PROTO(( int ));
+-#endif
+-#endif
++{
++ int oerrno = errno;
++
++ kcal_flush_buffer(b );
+
+-#ifdef YY_USE_PROTOS
+-void yy_init_buffer( YY_BUFFER_STATE b, FILE *file )
+-#else
+-void yy_init_buffer( b, file )
+-YY_BUFFER_STATE b;
+-FILE *file;
+-#endif
+-
+-
+- {
+- yy_flush_buffer( b );
+-
+ b->yy_input_file = file;
+ b->yy_fill_buffer = 1;
+
+-#if YY_ALWAYS_INTERACTIVE
+- b->yy_is_interactive = 1;
+-#else
+-#if YY_NEVER_INTERACTIVE
+- b->yy_is_interactive = 0;
+-#else
+- b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
+-#endif
+-#endif
+- }
++ /* If b is the current buffer, then kcal_init_buffer was _probably_
++ * called from kcalrestart() or through yy_get_next_buffer.
++ * In that case, we don't want to reset the lineno or column.
++ */
++ if (b != YY_CURRENT_BUFFER){
++ b->yy_bs_lineno = 1;
++ b->yy_bs_column = 0;
++ }
+
++ b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
++
++ errno = oerrno;
++}
+
+-#ifdef YY_USE_PROTOS
+-void yy_flush_buffer( YY_BUFFER_STATE b )
+-#else
+-void yy_flush_buffer( b )
+-YY_BUFFER_STATE b;
+-#endif
+-
+- {
+- if ( ! b )
++/** Discard all buffered characters. On the next scan, YY_INPUT will be called.
++ * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
++ *
++ */
++ void kcal_flush_buffer (YY_BUFFER_STATE b )
++{
++ if ( ! b )
+ return;
+
+ b->yy_n_chars = 0;
+@@ -1734,31 +1807,123 @@
+ b->yy_at_bol = 1;
+ b->yy_buffer_status = YY_BUFFER_NEW;
+
+- if ( b == yy_current_buffer )
+- yy_load_buffer_state();
++ if ( b == YY_CURRENT_BUFFER )
++ kcal_load_buffer_state( );
++}
++
++/** Pushes the new state onto the stack. The new state becomes
++ * the current state. This function will allocate the stack
++ * if necessary.
++ * @param new_buffer The new state.
++ *
++ */
++void kcalpush_buffer_state (YY_BUFFER_STATE new_buffer )
++{
++ if (new_buffer == NULL)
++ return;
++
++ kcalensure_buffer_stack();
++
++ /* This block is copied from kcal_switch_to_buffer. */
++ if ( YY_CURRENT_BUFFER )
++ {
++ /* Flush out information for old buffer. */
++ *(yy_c_buf_p) = (yy_hold_char);
++ YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
++ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
++ }
++
++ /* Only push if top exists. Otherwise, replace top. */
++ if (YY_CURRENT_BUFFER)
++ (yy_buffer_stack_top)++;
++ YY_CURRENT_BUFFER_LVALUE = new_buffer;
++
++ /* copied from kcal_switch_to_buffer. */
++ kcal_load_buffer_state( );
++ (yy_did_buffer_switch_on_eof) = 1;
++}
++
++/** Removes and deletes the top of the stack, if present.
++ * The next element becomes the new top.
++ *
++ */
++void kcalpop_buffer_state (void)
++{
++ if (!YY_CURRENT_BUFFER)
++ return;
++
++ kcal_delete_buffer(YY_CURRENT_BUFFER );
++ YY_CURRENT_BUFFER_LVALUE = NULL;
++ if ((yy_buffer_stack_top) > 0)
++ --(yy_buffer_stack_top);
++
++ if (YY_CURRENT_BUFFER) {
++ kcal_load_buffer_state( );
++ (yy_did_buffer_switch_on_eof) = 1;
+ }
++}
+
++/* Allocates the stack if it does not exist.
++ * Guarantees space for at least one push.
++ */
++static void kcalensure_buffer_stack (void)
++{
++ int num_to_alloc;
++
++ if (!(yy_buffer_stack)) {
+
+-#ifndef YY_NO_SCAN_BUFFER
+-#ifdef YY_USE_PROTOS
+-YY_BUFFER_STATE yy_scan_buffer( char *base, yy_size_t size )
+-#else
+-YY_BUFFER_STATE yy_scan_buffer( base, size )
+-char *base;
+-yy_size_t size;
+-#endif
+- {
++ /* First allocation is just for 2 elements, since we don't know if this
++ * scanner will even need a stack. We use 2 instead of 1 to avoid an
++ * immediate realloc on the next call.
++ */
++ num_to_alloc = 1;
++ (yy_buffer_stack) = (struct yy_buffer_state**)kcalalloc
++ (num_to_alloc * sizeof(struct yy_buffer_state*)
++ );
++
++ memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
++
++ (yy_buffer_stack_max) = num_to_alloc;
++ (yy_buffer_stack_top) = 0;
++ return;
++ }
++
++ if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){
++
++ /* Increase the buffer to prepare for a possible push. */
++ int grow_size = 8 /* arbitrary grow size */;
++
++ num_to_alloc = (yy_buffer_stack_max) + grow_size;
++ (yy_buffer_stack) = (struct yy_buffer_state**)kcalrealloc
++ ((yy_buffer_stack),
++ num_to_alloc * sizeof(struct yy_buffer_state*)
++ );
++
++ /* zero only the new slots.*/
++ memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));
++ (yy_buffer_stack_max) = num_to_alloc;
++ }
++}
++
++/** Setup the input buffer state to scan directly from a user-specified character buffer.
++ * @param base the character buffer
++ * @param size the size in bytes of the character buffer
++ *
++ * @return the newly allocated buffer state object.
++ */
++YY_BUFFER_STATE kcal_scan_buffer (char * base, yy_size_t size )
++{
+ YY_BUFFER_STATE b;
+-
++
+ if ( size < 2 ||
+ base[size-2] != YY_END_OF_BUFFER_CHAR ||
+ base[size-1] != YY_END_OF_BUFFER_CHAR )
+ /* They forgot to leave room for the EOB's. */
+ return 0;
+
+- b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
++ b = (YY_BUFFER_STATE) kcalalloc(sizeof( struct yy_buffer_state ) );
+ if ( ! b )
+- YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
++ YY_FATAL_ERROR( "out of dynamic memory in kcal_scan_buffer()" );
+
+ b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */
+ b->yy_buf_pos = b->yy_ch_buf = base;
+@@ -1770,58 +1935,53 @@
+ b->yy_fill_buffer = 0;
+ b->yy_buffer_status = YY_BUFFER_NEW;
+
+- yy_switch_to_buffer( b );
++ kcal_switch_to_buffer(b );
+
+ return b;
+- }
+-#endif
++}
+
++/** Setup the input buffer state to scan a string. The next call to kcallex() will
++ * scan from a @e copy of @a str.
++ * @param yystr a NUL-terminated string to scan
++ *
++ * @return the newly allocated buffer state object.
++ * @note If you want to scan bytes that may contain NUL values, then use
++ * kcal_scan_bytes() instead.
++ */
++YY_BUFFER_STATE kcal_scan_string (yyconst char * yystr )
++{
++
++ return kcal_scan_bytes(yystr,strlen(yystr) );
++}
+
+-#ifndef YY_NO_SCAN_STRING
+-#ifdef YY_USE_PROTOS
+-YY_BUFFER_STATE yy_scan_string( yyconst char *yy_str )
+-#else
+-YY_BUFFER_STATE yy_scan_string( yy_str )
+-yyconst char *yy_str;
+-#endif
+- {
+- int len;
+- for ( len = 0; yy_str[len]; ++len )
+- ;
+-
+- return yy_scan_bytes( yy_str, len );
+- }
+-#endif
+-
+-
+-#ifndef YY_NO_SCAN_BYTES
+-#ifdef YY_USE_PROTOS
+-YY_BUFFER_STATE yy_scan_bytes( yyconst char *bytes, int len )
+-#else
+-YY_BUFFER_STATE yy_scan_bytes( bytes, len )
+-yyconst char *bytes;
+-int len;
+-#endif
+- {
++/** Setup the input buffer state to scan the given bytes. The next call to kcallex() will
++ * scan from a @e copy of @a bytes.
++ * @param bytes the byte buffer to scan
++ * @param len the number of bytes in the buffer pointed to by @a bytes.
++ *
++ * @return the newly allocated buffer state object.
++ */
++YY_BUFFER_STATE kcal_scan_bytes (yyconst char * yybytes, int _yybytes_len )
++{
+ YY_BUFFER_STATE b;
+ char *buf;
+ yy_size_t n;
+ int i;
+-
++
+ /* Get memory for full buffer, including space for trailing EOB's. */
+- n = len + 2;
+- buf = (char *) yy_flex_alloc( n );
++ n = _yybytes_len + 2;
++ buf = (char *) kcalalloc(n );
+ if ( ! buf )
+- YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
++ YY_FATAL_ERROR( "out of dynamic memory in kcal_scan_bytes()" );
+
+- for ( i = 0; i < len; ++i )
+- buf[i] = bytes[i];
++ for ( i = 0; i < _yybytes_len; ++i )
++ buf[i] = yybytes[i];
+
+- buf[len] = buf[len+1] = YY_END_OF_BUFFER_CHAR;
++ buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
+
+- b = yy_scan_buffer( buf, n );
++ b = kcal_scan_buffer(buf,n );
+ if ( ! b )
+- YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );
++ YY_FATAL_ERROR( "bad buffer in kcal_scan_bytes()" );
+
+ /* It's okay to grow etc. this buffer, and we should throw it
+ * away when we're done.
+@@ -1829,148 +1989,196 @@
+ b->yy_is_our_buffer = 1;
+
+ return b;
+- }
++}
++
++#ifndef YY_EXIT_FAILURE
++#define YY_EXIT_FAILURE 2
+ #endif
+
++static void yy_fatal_error (yyconst char* msg )
++{
++ (void) fprintf( stderr, "%s\n", msg );
++ exit( YY_EXIT_FAILURE );
++}
+
+-#ifndef YY_NO_PUSH_STATE
+-#ifdef YY_USE_PROTOS
+-static void yy_push_state( int new_state )
+-#else
+-static void yy_push_state( new_state )
+-int new_state;
+-#endif
+- {
+- if ( yy_start_stack_ptr >= yy_start_stack_depth )
+- {
+- yy_size_t new_size;
++/* Redefine yyless() so it works in section 3 code. */
+
+- yy_start_stack_depth += YY_START_STACK_INCR;
+- new_size = yy_start_stack_depth * sizeof( int );
++#undef yyless
++#define yyless(n) \
++ do \
++ { \
++ /* Undo effects of setting up kcaltext. */ \
++ int yyless_macro_arg = (n); \
++ YY_LESS_LINENO(yyless_macro_arg);\
++ kcaltext[kcalleng] = (yy_hold_char); \
++ (yy_c_buf_p) = kcaltext + yyless_macro_arg; \
++ (yy_hold_char) = *(yy_c_buf_p); \
++ *(yy_c_buf_p) = '\0'; \
++ kcalleng = yyless_macro_arg; \
++ } \
++ while ( 0 )
+
+- if ( ! yy_start_stack )
+- yy_start_stack = (int *) yy_flex_alloc( new_size );
++/* Accessor methods (get/set functions) to struct members. */
+
+- else
+- yy_start_stack = (int *) yy_flex_realloc(
+- (void *) yy_start_stack, new_size );
++/** Get the current line number.
++ *
++ */
++int kcalget_lineno (void)
++{
++
++ return kcallineno;
++}
+
+- if ( ! yy_start_stack )
+- YY_FATAL_ERROR(
+- "out of memory expanding start-condition stack" );
+- }
++/** Get the input stream.
++ *
++ */
++FILE *kcalget_in (void)
++{
++ return kcalin;
++}
+
+- yy_start_stack[yy_start_stack_ptr++] = YY_START;
++/** Get the output stream.
++ *
++ */
++FILE *kcalget_out (void)
++{
++ return kcalout;
++}
+
+- BEGIN(new_state);
+- }
+-#endif
++/** Get the length of the current token.
++ *
++ */
++int kcalget_leng (void)
++{
++ return kcalleng;
++}
+
++/** Get the current token.
++ *
++ */
+
+-#ifndef YY_NO_POP_STATE
+-static void yy_pop_state()
+- {
+- if ( --yy_start_stack_ptr < 0 )
+- YY_FATAL_ERROR( "start-condition stack underflow" );
++char *kcalget_text (void)
++{
++ return kcaltext;
++}
+
+- BEGIN(yy_start_stack[yy_start_stack_ptr]);
+- }
+-#endif
++/** Set the current line number.
++ * @param line_number
++ *
++ */
++void kcalset_lineno (int line_number )
++{
++
++ kcallineno = line_number;
++}
+
++/** Set the input stream. This does not discard the current
++ * input buffer.
++ * @param in_str A readable stream.
++ *
++ * @see kcal_switch_to_buffer
++ */
++void kcalset_in (FILE * in_str )
++{
++ kcalin = in_str ;
++}
+
+-#ifndef YY_NO_TOP_STATE
+-static int yy_top_state()
+- {
+- return yy_start_stack[yy_start_stack_ptr - 1];
+- }
+-#endif
++void kcalset_out (FILE * out_str )
++{
++ kcalout = out_str ;
++}
+
+-#ifndef YY_EXIT_FAILURE
+-#define YY_EXIT_FAILURE 2
+-#endif
++int kcalget_debug (void)
++{
++ return kcal_flex_debug;
++}
+
+-#ifdef YY_USE_PROTOS
+-static void yy_fatal_error( yyconst char msg[] )
++void kcalset_debug (int bdebug )
++{
++ kcal_flex_debug = bdebug ;
++}
++
++static int yy_init_globals (void)
++{
++ /* Initialization is the same as for the non-reentrant scanner.
++ * This function is called from kcallex_destroy(), so don't allocate here.
++ */
++
++ (yy_buffer_stack) = 0;
++ (yy_buffer_stack_top) = 0;
++ (yy_buffer_stack_max) = 0;
++ (yy_c_buf_p) = (char *) 0;
++ (yy_init) = 0;
++ (yy_start) = 0;
++
++/* Defined in main.c */
++#ifdef YY_STDINIT
++ kcalin = stdin;
++ kcalout = stdout;
+ #else
+-static void yy_fatal_error( msg )
+-char msg[];
++ kcalin = (FILE *) 0;
++ kcalout = (FILE *) 0;
+ #endif
+- {
+- (void) fprintf( stderr, "%s\n", msg );
+- exit( YY_EXIT_FAILURE );
+- }
+
++ /* For future reference: Set errno on error, since we are called by
++ * kcallex_init()
++ */
++ return 0;
++}
+
++/* kcallex_destroy is for both reentrant and non-reentrant scanners. */
++int kcallex_destroy (void)
++{
++
++ /* Pop the buffer stack, destroying each element. */
++ while(YY_CURRENT_BUFFER){
++ kcal_delete_buffer(YY_CURRENT_BUFFER );
++ YY_CURRENT_BUFFER_LVALUE = NULL;
++ kcalpop_buffer_state();
++ }
+
+-/* Redefine yyless() so it works in section 3 code. */
++ /* Destroy the stack itself. */
++ kcalfree((yy_buffer_stack) );
++ (yy_buffer_stack) = NULL;
+
+-#undef yyless
+-#define yyless(n) \
+- do \
+- { \
+- /* Undo effects of setting up yytext. */ \
+- yytext[yyleng] = yy_hold_char; \
+- yy_c_buf_p = yytext + n; \
+- yy_hold_char = *yy_c_buf_p; \
+- *yy_c_buf_p = '\0'; \
+- yyleng = n; \
+- } \
+- while ( 0 )
++ /* Reset the globals. This is important in a non-reentrant scanner so the next time
++ * kcallex() is called, initialization will occur. */
++ yy_init_globals( );
+
++ return 0;
++}
+
+-/* Internal utility routines. */
++/*
++ * Internal utility routines.
++ */
+
+ #ifndef yytext_ptr
+-#ifdef YY_USE_PROTOS
+-static void yy_flex_strncpy( char *s1, yyconst char *s2, int n )
+-#else
+-static void yy_flex_strncpy( s1, s2, n )
+-char *s1;
+-yyconst char *s2;
+-int n;
+-#endif
+- {
++static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
++{
+ register int i;
+ for ( i = 0; i < n; ++i )
+ s1[i] = s2[i];
+- }
++}
+ #endif
+
+ #ifdef YY_NEED_STRLEN
+-#ifdef YY_USE_PROTOS
+-static int yy_flex_strlen( yyconst char *s )
+-#else
+-static int yy_flex_strlen( s )
+-yyconst char *s;
+-#endif
+- {
++static int yy_flex_strlen (yyconst char * s )
++{
+ register int n;
+ for ( n = 0; s[n]; ++n )
+ ;
+
+ return n;
+- }
++}
+ #endif
+
+-
+-#ifdef YY_USE_PROTOS
+-static void *yy_flex_alloc( yy_size_t size )
+-#else
+-static void *yy_flex_alloc( size )
+-yy_size_t size;
+-#endif
+- {
++void *kcalalloc (yy_size_t size )
++{
+ return (void *) malloc( size );
+- }
++}
+
+-#ifdef YY_USE_PROTOS
+-static void *yy_flex_realloc( void *ptr, yy_size_t size )
+-#else
+-static void *yy_flex_realloc( ptr, size )
+-void *ptr;
+-yy_size_t size;
+-#endif
+- {
++void *kcalrealloc (void * ptr, yy_size_t size )
++{
+ /* The cast to (char *) in the following accommodates both
+ * implementations that use char* generic pointers, and those
+ * that use void* generic pointers. It works with the latter
+@@ -1979,24 +2187,16 @@
+ * as though doing an assignment.
+ */
+ return (void *) realloc( (char *) ptr, size );
+- }
++}
+
+-#ifdef YY_USE_PROTOS
+-static void yy_flex_free( void *ptr )
+-#else
+-static void yy_flex_free( ptr )
+-void *ptr;
+-#endif
+- {
+- free( ptr );
+- }
++void kcalfree (void * ptr )
++{
++ free( (char *) ptr ); /* see kcalrealloc() for (char *) cast */
++}
+
+-#if YY_MAIN
+-int main()
+- {
+- yylex();
+- return 0;
+- }
+-#endif
+-#line 87 "scanholiday.lex"
++#define YYTABLES_NAME "yytables"
+
++#line 90 "scanholiday.lex"
++
++
++
+Index: libkholidays/parseholiday.c
+===================================================================
+--- libkholidays/parseholiday.c (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ libkholidays/parseholiday.c (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -1,38 +1,135 @@
+-/* A Bison parser, made from parseholiday.y
+- by GNU bison 1.35. */
++/* A Bison parser, made by GNU Bison 2.3. */
+
+-#define YYBISON 1 /* Identify Bison output. */
++/* Skeleton implementation for Bison's Yacc-like parsers in C
+
++ Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
++ Free Software Foundation, Inc.
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2, or (at your option)
++ any later version.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 51 Franklin Street, Fifth Floor,
++ Boston, MA 02110-1301, USA. */
++
++/* As a special exception, you may create a larger work that contains
++ part or all of the Bison parser skeleton and distribute that work
++ under terms of your choice, so long as that work isn't itself a
++ parser generator using the skeleton or a modified version thereof
++ as a parser skeleton. Alternatively, if you modify or redistribute
++ the parser skeleton itself, you may (at your option) remove this
++ special exception, which will cause the skeleton and the resulting
++ Bison output files to be licensed under the GNU General Public
++ License without this special exception.
++
++ This special exception was added by the Free Software Foundation in
++ version 2.2 of Bison. */
++
++/* C LALR(1) parser skeleton written by Richard Stallman, by
++ simplifying the original so-called "semantic" parser. */
++
++/* All symbols defined below should begin with yy or YY, to avoid
++ infringing on user name space. This should be done even for local
++ variables, as they might otherwise be expanded by user macros.
++ There are some unavoidable exceptions within include files to
++ define necessary library symbols; they are noted "INFRINGES ON
++ USER NAME SPACE" below. */
++
++/* Identify Bison output. */
++#define YYBISON 1
++
++/* Bison version. */
++#define YYBISON_VERSION "2.3"
++
++/* Skeleton name. */
++#define YYSKELETON_NAME "yacc.c"
++
++/* Pure parsers. */
++#define YYPURE 0
++
++/* Using locations. */
++#define YYLSP_NEEDED 0
++
++/* Substitute the variable and function names. */
+ #define yyparse kcalparse
+-#define yylex kcallex
++#define yylex kcallex
+ #define yyerror kcalerror
+-#define yylval kcallval
+-#define yychar kcalchar
++#define yylval kcallval
++#define yychar kcalchar
+ #define yydebug kcaldebug
+ #define yynerrs kcalnerrs
+-# define NUMBER 257
+-# define MONTH 258
+-# define WDAY 259
+-# define COLOR 260
+-# define STRING 261
+-# define IN 262
+-# define PLUS 263
+-# define MINUS 264
+-# define SMALL 265
+-# define CYEAR 266
+-# define LEAPYEAR 267
+-# define LENGTH 268
+-# define EASTER 269
+-# define EQ 270
+-# define NE 271
+-# define LE 272
+-# define GE 273
+-# define LT 274
+-# define GT 275
+-# define OR 276
+-# define AND 277
+-# define UMINUS 278
+
++
++/* Tokens. */
++#ifndef YYTOKENTYPE
++# define YYTOKENTYPE
++ /* Put the tokens into the symbol table, so that GDB and other debuggers
++ know about them. */
++ enum yytokentype {
++ NUMBER = 258,
++ MONTH = 259,
++ WDAY = 260,
++ COLOR = 261,
++ STRING = 262,
++ IN = 263,
++ PLUS = 264,
++ MINUS = 265,
++ SMALL = 266,
++ CYEAR = 267,
++ LEAPYEAR = 268,
++ SHIFT = 269,
++ IF = 270,
++ LENGTH = 271,
++ EASTER = 272,
++ EQ = 273,
++ NE = 274,
++ LE = 275,
++ GE = 276,
++ LT = 277,
++ GT = 278,
++ OR = 279,
++ AND = 280,
++ UMINUS = 281
++ };
++#endif
++/* Tokens. */
++#define NUMBER 258
++#define MONTH 259
++#define WDAY 260
++#define COLOR 261
++#define STRING 262
++#define IN 263
++#define PLUS 264
++#define MINUS 265
++#define SMALL 266
++#define CYEAR 267
++#define LEAPYEAR 268
++#define SHIFT 269
++#define IF 270
++#define LENGTH 271
++#define EASTER 272
++#define EQ 273
++#define NE 274
++#define LE 275
++#define GE 276
++#define LT 277
++#define GT 278
++#define OR 279
++#define AND 280
++#define UMINUS 281
++
++
++
++
++/* Copy the first part of user declarations. */
+ #line 1 "parseholiday.y"
+
+ /*
+@@ -50,8 +147,9 @@
+ * arrays. If force is set, re-eval even
+ * if year is the same as last time.
+ *
+- * Taken from plan by Thomas Driemeyer (thomas at bitrot.de)
+- * Adapted for use in KOrganizer by Preston Brown (pbrown at kde.org)
++ * Taken from plan by Thomas Driemeyer <thomas at bitrot.de>
++ * Adapted for use in KOrganizer by Preston Brown <pbrown at kde.org> and
++ * Reinhold Kainhofer <reinhold at kainhofer.com>
+ */
+
+ #include <config.h>
+@@ -84,22 +182,24 @@
+ #define ANY 0
+ #define BEFORE -1
+ #define AFTER -2
++/**** Public forward declarations ****/
++char *parse_holidays(const char *holidays, int year, short force);
+
+ /**** Private forward declarations ****/
+ extern int kcallex(void); /* external lexical analyzer */
+-static void kcalerror(char *s);
++static void kcalerror(const char *s);
+ static time_t date_to_time(int day, int month, int year,
+ int *wkday, int *julian, int *weeknum);
+ static time_t tm_to_time(struct tm *tm);
+ static int day_from_name(char *str);
+ static int day_from_easter(void);
+-static int day_from_monthday(int m, int d);
++static int day_from_monthday(int month, int day);
+ static int day_from_wday(int day, int wday, int num);
+ static void monthday_from_day(int day, int *m, int *d, int *y);
+-static int calc_easter();
+-static void setliteraldate();
+-static void seteaster();
+-static void setdate(int month, int day, int year, int off, int length);
++static int calc_easter(int year);
++static void setliteraldate(int month, int day, int off, int *ddup);
++static void seteaster(int off, int length);
++static void setdate(int month, int day, int year, int off, int conditionaloff, int length);
+ static void setwday(int num, int wday, int month, int off, int length);
+ static void setdoff(int wday, int rel, int month, int day,
+ int year, int off, int length);
+@@ -125,391 +225,247 @@
+ 212, 243, 273,
+ 304, 334 };
+
++/* struct holiday;*/
+ struct holiday {
+ char *string; /* name of holiday, 0=not a holiday */
+ int color;
+ unsigned short dup; /* reference count */
++ struct holiday *next;
+ };
+
+-struct holiday holiday[366]; /* info for each day, separate for */
++struct holiday holidays[366]; /* info for each day, separate for */
+ /*struct holiday sm_holiday[366];*/ /* full-line texts under, and small */
+ /* texts next to day number */
++static int initialized=0;
+
+-#line 101 "parseholiday.y"
+-#ifndef YYSTYPE
+-typedef union { int ival; char *sval; } yystype;
+-# define YYSTYPE yystype
+-# define YYSTYPE_IS_TRIVIAL 1
+-#endif
++
++/* Enabling traces. */
+ #ifndef YYDEBUG
+ # define YYDEBUG 0
+ #endif
+
+-
+-
+-#define YYFINAL 121
+-#define YYFLAG -32768
+-#define YYNTBASE 38
+-
+-/* YYTRANSLATE(YYLEX) -- Bison token number corresponding to YYLEX. */
+-#define YYTRANSLATE(x) ((unsigned)(x) <= 278 ? yytranslate[x] : 51)
+-
+-/* YYTRANSLATE[YYLEX] -- Bison token number corresponding to YYLEX. */
+-static const char yytranslate[] =
+-{
+- 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+- 2, 2, 2, 29, 2, 2, 2, 28, 2, 2,
+- 36, 37, 26, 25, 2, 24, 33, 27, 2, 2,
+- 2, 2, 2, 2, 2, 2, 2, 2, 32, 2,
+- 2, 2, 2, 31, 2, 2, 2, 2, 2, 2,
+- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+- 2, 34, 2, 35, 2, 2, 2, 2, 2, 2,
+- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+- 2, 2, 2, 2, 2, 2, 1, 3, 4, 5,
+- 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
+- 16, 17, 18, 19, 20, 21, 22, 23, 30
+-};
+-
+-#if YYDEBUG
+-static const short yyprhs[] =
+-{
+- 0, 0, 1, 2, 10, 11, 13, 14, 16, 20,
+- 24, 28, 33, 40, 46, 47, 50, 53, 54, 57,
+- 61, 66, 72, 76, 82, 85, 89, 92, 96, 101,
+- 103, 105, 107, 111, 116, 120, 123, 126, 130, 135,
+- 137, 139, 141, 145, 149, 153, 157, 161, 165, 169,
+- 173, 177, 181, 185, 189, 193, 199, 202, 206, 210,
+- 212, 214, 217, 219
+-};
+-static const short yyrhs[] =
+-{
+- -1, 0, 38, 40, 41, 7, 41, 39, 42, 0,
+- 0, 11, 0, 0, 6, 0, 15, 43, 44, 0,
+- 45, 43, 44, 0, 5, 43, 44, 0, 49, 5,
+- 43, 44, 0, 49, 5, 8, 47, 43, 44, 0,
+- 5, 49, 45, 43, 44, 0, 0, 9, 48, 0,
+- 10, 48, 0, 0, 14, 48, 0, 49, 33, 47,
+- 0, 49, 33, 47, 33, 0, 49, 33, 47, 33,
+- 48, 0, 47, 27, 49, 0, 47, 27, 49, 27,
+- 49, 0, 4, 49, 0, 4, 49, 49, 0, 49,
+- 4, 0, 49, 4, 49, 0, 49, 33, 4, 49,
+- 0, 49, 0, 7, 0, 15, 0, 49, 33, 47,
+- 0, 49, 33, 47, 33, 0, 47, 27, 49, 0,
+- 49, 4, 0, 4, 49, 0, 5, 49, 49, 0,
+- 49, 5, 8, 47, 0, 4, 0, 49, 0, 49,
+- 0, 48, 22, 48, 0, 48, 23, 48, 0, 48,
+- 16, 48, 0, 48, 17, 48, 0, 48, 18, 48,
+- 0, 48, 19, 48, 0, 48, 20, 48, 0, 48,
+- 21, 48, 0, 48, 25, 48, 0, 48, 24, 48,
+- 0, 48, 26, 48, 0, 48, 27, 48, 0, 48,
+- 28, 48, 0, 48, 31, 48, 32, 48, 0, 29,
+- 48, 0, 34, 46, 35, 0, 36, 48, 37, 0,
+- 50, 0, 3, 0, 24, 3, 0, 12, 0, 13,
+- 49, 0
+-};
+-
++/* Enabling verbose error messages. */
++#ifdef YYERROR_VERBOSE
++# undef YYERROR_VERBOSE
++# define YYERROR_VERBOSE 1
++#else
++# define YYERROR_VERBOSE 0
+ #endif
+
+-#if YYDEBUG
+-/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
+-static const short yyrline[] =
+-{
+- 0, 120, 121, 121, 127, 128, 131, 132, 135, 136,
+- 137, 138, 139, 140, 143, 144, 145, 148, 149, 152,
+- 153, 154, 155, 156, 157, 158, 159, 160, 161, 162,
+- 166, 167, 168, 170, 172, 174, 176, 178, 180, 186,
+- 186, 188, 189, 190, 191, 192, 193, 194, 195, 196,
+- 197, 198, 199, 200, 201, 202, 203, 204, 207, 208,
+- 211, 212, 213, 214
+-};
++/* Enabling the token table. */
++#ifndef YYTOKEN_TABLE
++# define YYTOKEN_TABLE 0
+ #endif
+
+-
+-#if (YYDEBUG) || defined YYERROR_VERBOSE
+-
+-/* YYTNAME[TOKEN_NUM] -- String name of the token TOKEN_NUM. */
+-static const char *const yytname[] =
+-{
+- "$", "error", "$undefined.", "NUMBER", "MONTH", "WDAY", "COLOR", "STRING",
+- "IN", "PLUS", "MINUS", "SMALL", "CYEAR", "LEAPYEAR", "LENGTH", "EASTER",
+- "EQ", "NE", "LE", "GE", "LT", "GT", "OR", "AND", "'-'", "'+'", "'*'",
+- "'/'", "'%'", "'!'", "UMINUS", "'?'", "':'", "'.'", "'['", "']'", "'('",
+- "')'", "list", "@1", "small", "color", "entry", "offset", "length",
+- "date", "reldate", "month", "expr", "pexpr", "number", 0
+-};
++#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
++typedef union YYSTYPE
++#line 109 "parseholiday.y"
++{ int ival; char *sval; }
++/* Line 193 of yacc.c. */
++#line 266 "parseholiday.c"
++ YYSTYPE;
++# define yystype YYSTYPE /* obsolescent; will be withdrawn */
++# define YYSTYPE_IS_DECLARED 1
++# define YYSTYPE_IS_TRIVIAL 1
+ #endif
+
+-/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
+-static const short yyr1[] =
+-{
+- 0, 38, 39, 38, 40, 40, 41, 41, 42, 42,
+- 42, 42, 42, 42, 43, 43, 43, 44, 44, 45,
+- 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
+- 46, 46, 46, 46, 46, 46, 46, 46, 46, 47,
+- 47, 48, 48, 48, 48, 48, 48, 48, 48, 48,
+- 48, 48, 48, 48, 48, 48, 48, 48, 49, 49,
+- 50, 50, 50, 50
+-};
+
+-/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
+-static const short yyr2[] =
+-{
+- 0, 0, 0, 7, 0, 1, 0, 1, 3, 3,
+- 3, 4, 6, 5, 0, 2, 2, 0, 2, 3,
+- 4, 5, 3, 5, 2, 3, 2, 3, 4, 1,
+- 1, 1, 3, 4, 3, 2, 2, 3, 4, 1,
+- 1, 1, 3, 3, 3, 3, 3, 3, 3, 3,
+- 3, 3, 3, 3, 3, 5, 2, 3, 3, 1,
+- 1, 2, 1, 2
+-};
+
+-/* YYDEFACT[S] -- default rule to reduce with in state S when YYTABLE
+- doesn't specify something else to do. Zero means the default is an
+- error. */
+-static const short yydefact[] =
+-{
+- 1, 4, 5, 6, 7, 0, 6, 2, 0, 60,
+- 39, 14, 62, 0, 14, 0, 0, 3, 14, 0,
+- 29, 59, 24, 0, 0, 17, 0, 63, 17, 61,
+- 0, 0, 0, 41, 17, 0, 26, 14, 0, 25,
+- 15, 16, 0, 10, 14, 29, 8, 56, 39, 0,
+- 30, 31, 0, 0, 40, 0, 0, 0, 0, 0,
+- 0, 0, 0, 0, 0, 0, 0, 0, 0, 58,
+- 9, 22, 27, 0, 17, 39, 19, 40, 18, 17,
+- 36, 0, 57, 0, 35, 0, 0, 44, 45, 46,
+- 47, 48, 49, 42, 43, 51, 50, 52, 53, 54,
+- 0, 0, 39, 14, 11, 28, 20, 13, 37, 34,
+- 0, 32, 0, 23, 17, 21, 38, 33, 55, 12,
+- 0, 0
+-};
++/* Copy the second part of user declarations. */
+
+-static const short yydefgoto[] =
+-{
+- 1, 8, 3, 5, 17, 25, 43, 18, 52, 19,
+- 32, 33, 21
+-};
+
+-static const short yypact[] =
+-{
+- -32768, 11,-32768, -5,-32768, -3, -5,-32768, 84,-32768,
+- 142, 97,-32768, 142, 15, 17, 110,-32768, 15, -6,
+- 2,-32768, 142, 110, 110, 20, 125,-32768, 20,-32768,
+- 110, 79, 165,-32768, 20, 142, 142, 7, 139,-32768,
+- 204, 204, 110,-32768, 15, 6,-32768, 5, 142, 142,
+- -32768,-32768, 8, 37, 4, 110, 110, 110, 110, 110,
+- 110, 110, 110, 110, 110, 110, 110, 110, 110,-32768,
+- -32768, 39,-32768, 144, 20, 142, 38,-32768, 204, 20,
+- -32768, 142,-32768, 142,-32768, 62, 144, 236, 236, 236,
+- 236, 236, 236, 220, 236, 32, 32, 5, 5, 5,
+- 187, 142,-32768, 15,-32768,-32768, 110,-32768,-32768,-32768,
+- 144, 41, 110,-32768, 20, 204,-32768,-32768,-32768,-32768,
+- 76,-32768
+-};
++/* Line 216 of yacc.c. */
++#line 279 "parseholiday.c"
+
+-static const short yypgoto[] =
+-{
+- -32768,-32768,-32768, 73,-32768, 24, -2, 54,-32768, 31,
+- -11, -8,-32768
+-};
++#ifdef short
++# undef short
++#endif
+
++#ifdef YYTYPE_UINT8
++typedef YYTYPE_UINT8 yytype_uint8;
++#else
++typedef unsigned char yytype_uint8;
++#endif
+
+-#define YYLAST 267
++#ifdef YYTYPE_INT8
++typedef YYTYPE_INT8 yytype_int8;
++#elif (defined __STDC__ || defined __C99__FUNC__ \
++ || defined __cplusplus || defined _MSC_VER)
++typedef signed char yytype_int8;
++#else
++typedef short int yytype_int8;
++#endif
+
++#ifdef YYTYPE_UINT16
++typedef YYTYPE_UINT16 yytype_uint16;
++#else
++typedef unsigned short int yytype_uint16;
++#endif
+
+-static const short yytable[] =
+-{
+- 20, 4, 22, 26, 6, 27, 36, 37, 84, 85,
+- 36, 120, 40, 41, 39, 73, 23, 24, 45, 47,
+- 29, 35, 2, 54, 23, 24, 46, 71, 72, -40,
+- 77, 78, 70, -40, 42, 38, 68, 86, 28, 38,
+- 80, 81, 34, 82, 87, 88, 89, 90, 91, 92,
+- 93, 94, 95, 96, 97, 98, 99, 100, 65, 66,
+- 67, 74, 53, 68, 83, 77, 101, 105, 79, 76,
+- 110, 106, 104, 108, 117, 109, 121, 107, 77, 7,
+- 44, 0, 9, 48, 49, 0, 50, 9, 10, 11,
+- 0, 12, 13, 113, 51, 115, 12, 13, 0, 14,
+- 9, 118, 77, 15, 103, 0, 23, 24, 15, 12,
+- 13, 0, 119, 9, 0, 16, 0, 111, 0, 0,
+- 16, 15, 12, 13, 0, 0, 0, 114, 9, 10,
+- 0, 0, 0, 16, 15, 0, 0, 12, 13, 30,
+- 0, 116, 9, 75, 31, 9, 16, 9, 102, 15,
+- 0, 12, 13, 0, 12, 13, 12, 13, 0, 0,
+- 0, 16, 0, 15, 0, 0, 15, 0, 15, 0,
+- 0, 0, 0, 0, 0, 16, 0, 0, 16, 0,
+- 16, 55, 56, 57, 58, 59, 60, 61, 62, 63,
+- 64, 65, 66, 67, 0, 0, 68, 0, 0, 0,
+- 0, 0, 69, 55, 56, 57, 58, 59, 60, 61,
+- 62, 63, 64, 65, 66, 67, 0, 0, 68, 112,
+- 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
+- 65, 66, 67, 0, 0, 68, 55, 56, 57, 58,
+- 59, 60, 0, 62, 63, 64, 65, 66, 67, 0,
+- 0, 68, 55, 56, 57, 58, 59, 60, 0, 0,
+- 63, 64, 65, 66, 67, 0, 0, 68
+-};
++#ifdef YYTYPE_INT16
++typedef YYTYPE_INT16 yytype_int16;
++#else
++typedef short int yytype_int16;
++#endif
+
+-static const short yycheck[] =
+-{
+- 8, 6, 10, 11, 7, 13, 4, 5, 4, 5,
+- 4, 0, 23, 24, 22, 8, 9, 10, 26, 30,
+- 3, 27, 11, 31, 9, 10, 28, 35, 36, 27,
+- 38, 42, 34, 27, 14, 33, 31, 33, 14, 33,
+- 48, 49, 18, 35, 55, 56, 57, 58, 59, 60,
+- 61, 62, 63, 64, 65, 66, 67, 68, 26, 27,
+- 28, 37, 31, 31, 27, 73, 27, 75, 44, 38,
+- 8, 33, 74, 81, 33, 83, 0, 79, 86, 6,
+- 26, -1, 3, 4, 5, -1, 7, 3, 4, 5,
+- -1, 12, 13, 101, 15, 106, 12, 13, -1, 15,
+- 3, 112, 110, 24, 73, -1, 9, 10, 24, 12,
+- 13, -1, 114, 3, -1, 36, -1, 86, -1, -1,
+- 36, 24, 12, 13, -1, -1, -1, 103, 3, 4,
+- -1, -1, -1, 36, 24, -1, -1, 12, 13, 29,
+- -1, 110, 3, 4, 34, 3, 36, 3, 4, 24,
+- -1, 12, 13, -1, 12, 13, 12, 13, -1, -1,
+- -1, 36, -1, 24, -1, -1, 24, -1, 24, -1,
+- -1, -1, -1, -1, -1, 36, -1, -1, 36, -1,
+- 36, 16, 17, 18, 19, 20, 21, 22, 23, 24,
+- 25, 26, 27, 28, -1, -1, 31, -1, -1, -1,
+- -1, -1, 37, 16, 17, 18, 19, 20, 21, 22,
+- 23, 24, 25, 26, 27, 28, -1, -1, 31, 32,
+- 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
+- 26, 27, 28, -1, -1, 31, 16, 17, 18, 19,
+- 20, 21, -1, 23, 24, 25, 26, 27, 28, -1,
+- -1, 31, 16, 17, 18, 19, 20, 21, -1, -1,
+- 24, 25, 26, 27, 28, -1, -1, 31
+-};
+-/* -*-C-*- Note some compilers choke on comments on `#line' lines. */
+-#line 3 "/usr/share/bison/bison.simple"
++#ifndef YYSIZE_T
++# ifdef __SIZE_TYPE__
++# define YYSIZE_T __SIZE_TYPE__
++# elif defined size_t
++# define YYSIZE_T size_t
++# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
++ || defined __cplusplus || defined _MSC_VER)
++# include <stddef.h> /* INFRINGES ON USER NAME SPACE */
++# define YYSIZE_T size_t
++# else
++# define YYSIZE_T unsigned int
++# endif
++#endif
+
+-/* Skeleton output parser for bison,
++#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
+
+- Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002 Free Software
+- Foundation, Inc.
++#ifndef YY_
++# if YYENABLE_NLS
++# if ENABLE_NLS
++# include <libintl.h> /* INFRINGES ON USER NAME SPACE */
++# define YY_(msgid) dgettext ("bison-runtime", msgid)
++# endif
++# endif
++# ifndef YY_
++# define YY_(msgid) msgid
++# endif
++#endif
+
+- This program is free software; you can redistribute it and/or modify
+- it under the terms of the GNU General Public License as published by
+- the Free Software Foundation; either version 2, or (at your option)
+- any later version.
++/* Suppress unused-variable warnings by "using" E. */
++#if ! defined lint || defined __GNUC__
++# define YYUSE(e) ((void) (e))
++#else
++# define YYUSE(e) /* empty */
++#endif
+
+- This program is distributed in the hope that it will be useful,
+- but WITHOUT ANY WARRANTY; without even the implied warranty of
+- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+- GNU General Public License for more details.
++/* Identity function, used to suppress warnings about constant conditions. */
++#ifndef lint
++# define YYID(n) (n)
++#else
++#if (defined __STDC__ || defined __C99__FUNC__ \
++ || defined __cplusplus || defined _MSC_VER)
++static int
++YYID (int i)
++#else
++static int
++YYID (i)
++ int i;
++#endif
++{
++ return i;
++}
++#endif
+
+- You should have received a copy of the GNU General Public License
+- along with this program; if not, write to the Free Software
+- Foundation, Inc., 51 Franklin Street, Fifth Floor,
+- Boston, MA 02110-1301, USA. */
++#if ! defined yyoverflow || YYERROR_VERBOSE
+
+-/* As a special exception, when this file is copied by Bison into a
+- Bison output file, you may use that output file without restriction.
+- This special exception was added by the Free Software Foundation
+- in version 1.24 of Bison. */
+-
+-/* This is the parser code that is written into each bison parser when
+- the %semantic_parser declaration is not specified in the grammar.
+- It was written by Richard Stallman by simplifying the hairy parser
+- used when %semantic_parser is specified. */
+-
+-/* All symbols defined below should begin with yy or YY, to avoid
+- infringing on user name space. This should be done even for local
+- variables, as they might otherwise be expanded by user macros.
+- There are some unavoidable exceptions within include files to
+- define necessary library symbols; they are noted "INFRINGES ON
+- USER NAME SPACE" below. */
+-
+-#if ! defined (yyoverflow) || defined (YYERROR_VERBOSE)
+-
+ /* The parser invokes alloca or malloc; define the necessary symbols. */
+
+-# if YYSTACK_USE_ALLOCA
+-# define YYSTACK_ALLOC alloca
+-# else
+-# ifndef YYSTACK_USE_ALLOCA
+-# if defined (alloca) || defined (_ALLOCA_H)
++# ifdef YYSTACK_USE_ALLOCA
++# if YYSTACK_USE_ALLOCA
++# ifdef __GNUC__
++# define YYSTACK_ALLOC __builtin_alloca
++# elif defined __BUILTIN_VA_ARG_INCR
++# include <alloca.h> /* INFRINGES ON USER NAME SPACE */
++# elif defined _AIX
++# define YYSTACK_ALLOC __alloca
++# elif defined _MSC_VER
++# include <malloc.h> /* INFRINGES ON USER NAME SPACE */
++# define alloca _alloca
++# else
+ # define YYSTACK_ALLOC alloca
+-# else
+-# ifdef __GNUC__
+-# define YYSTACK_ALLOC __builtin_alloca
++# if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
++ || defined __cplusplus || defined _MSC_VER)
++# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
++# ifndef _STDLIB_H
++# define _STDLIB_H 1
++# endif
+ # endif
+ # endif
+ # endif
+ # endif
+
+ # ifdef YYSTACK_ALLOC
+- /* Pacify GCC's `empty if-body' warning. */
+-# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
++ /* Pacify GCC's `empty if-body' warning. */
++# define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
++# ifndef YYSTACK_ALLOC_MAXIMUM
++ /* The OS might guarantee only one guard page at the bottom of the stack,
++ and a page size can be as small as 4096 bytes. So we cannot safely
++ invoke alloca (N) if N exceeds 4096. Use a slightly smaller number
++ to allow for a few compiler-allocated temporary stack slots. */
++# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
++# endif
+ # else
+-# if defined (__STDC__) || defined (__cplusplus)
++# define YYSTACK_ALLOC YYMALLOC
++# define YYSTACK_FREE YYFREE
++# ifndef YYSTACK_ALLOC_MAXIMUM
++# define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
++# endif
++# if (defined __cplusplus && ! defined _STDLIB_H \
++ && ! ((defined YYMALLOC || defined malloc) \
++ && (defined YYFREE || defined free)))
+ # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+-# define YYSIZE_T size_t
++# ifndef _STDLIB_H
++# define _STDLIB_H 1
++# endif
+ # endif
+-# define YYSTACK_ALLOC malloc
+-# define YYSTACK_FREE free
++# ifndef YYMALLOC
++# define YYMALLOC malloc
++# if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
++ || defined __cplusplus || defined _MSC_VER)
++void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
++# endif
++# endif
++# ifndef YYFREE
++# define YYFREE free
++# if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
++ || defined __cplusplus || defined _MSC_VER)
++void free (void *); /* INFRINGES ON USER NAME SPACE */
++# endif
++# endif
+ # endif
+-#endif /* ! defined (yyoverflow) || defined (YYERROR_VERBOSE) */
++#endif /* ! defined yyoverflow || YYERROR_VERBOSE */
+
+
+-#if (! defined (yyoverflow) \
+- && (! defined (__cplusplus) \
+- || (YYLTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
++#if (! defined yyoverflow \
++ && (! defined __cplusplus \
++ || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
+
+ /* A type that is properly aligned for any stack member. */
+ union yyalloc
+ {
+- short yyss;
++ yytype_int16 yyss;
+ YYSTYPE yyvs;
+-# if YYLSP_NEEDED
+- YYLTYPE yyls;
+-# endif
+-};
++ };
+
+ /* The size of the maximum gap between one aligned stack and the next. */
+-# define YYSTACK_GAP_MAX (sizeof (union yyalloc) - 1)
++# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
+
+ /* The size of an array large to enough to hold all stacks, each with
+ N elements. */
+-# if YYLSP_NEEDED
+-# define YYSTACK_BYTES(N) \
+- ((N) * (sizeof (short) + sizeof (YYSTYPE) + sizeof (YYLTYPE)) \
+- + 2 * YYSTACK_GAP_MAX)
+-# else
+-# define YYSTACK_BYTES(N) \
+- ((N) * (sizeof (short) + sizeof (YYSTYPE)) \
+- + YYSTACK_GAP_MAX)
+-# endif
++# define YYSTACK_BYTES(N) \
++ ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
++ + YYSTACK_GAP_MAXIMUM)
+
+ /* Copy COUNT objects from FROM to TO. The source and destination do
+ not overlap. */
+ # ifndef YYCOPY
+-# if 1 < __GNUC__
++# if defined __GNUC__ && 1 < __GNUC__
+ # define YYCOPY(To, From, Count) \
+ __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
+ # else
+ # define YYCOPY(To, From, Count) \
+ do \
+ { \
+- register YYSIZE_T yyi; \
++ YYSIZE_T yyi; \
+ for (yyi = 0; yyi < (Count); yyi++) \
+ (To)[yyi] = (From)[yyi]; \
+ } \
+- while (0)
++ while (YYID (0))
+ # endif
+ # endif
+
+@@ -524,98 +480,407 @@
+ YYSIZE_T yynewbytes; \
+ YYCOPY (&yyptr->Stack, Stack, yysize); \
+ Stack = &yyptr->Stack; \
+- yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAX; \
++ yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
+ yyptr += yynewbytes / sizeof (*yyptr); \
+ } \
+- while (0)
++ while (YYID (0))
+
+ #endif
+
++/* YYFINAL -- State number of the termination state. */
++#define YYFINAL 2
++/* YYLAST -- Last index in YYTABLE. */
++#define YYLAST 271
+
+-#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
+-# define YYSIZE_T __SIZE_TYPE__
++/* YYNTOKENS -- Number of terminals. */
++#define YYNTOKENS 40
++/* YYNNTS -- Number of nonterminals. */
++#define YYNNTS 16
++/* YYNRULES -- Number of rules. */
++#define YYNRULES 69
++/* YYNRULES -- Number of states. */
++#define YYNSTATES 129
++
++/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
++#define YYUNDEFTOK 2
++#define YYMAXUTOK 281
++
++#define YYTRANSLATE(YYX) \
++ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
++
++/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
++static const yytype_uint8 yytranslate[] =
++{
++ 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
++ 2, 2, 2, 31, 2, 2, 2, 30, 2, 2,
++ 38, 39, 28, 27, 2, 26, 35, 29, 2, 2,
++ 2, 2, 2, 2, 2, 2, 2, 2, 34, 2,
++ 2, 2, 2, 33, 2, 2, 2, 2, 2, 2,
++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
++ 2, 36, 2, 37, 2, 2, 2, 2, 2, 2,
++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
++ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
++ 2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
++ 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
++ 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
++ 25, 32
++};
++
++#if YYDEBUG
++/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
++ YYRHS. */
++static const yytype_uint8 yyprhs[] =
++{
++ 0, 0, 3, 4, 5, 13, 14, 16, 17, 19,
++ 23, 28, 32, 37, 44, 50, 51, 54, 57, 58,
++ 63, 64, 66, 70, 71, 74, 78, 83, 89, 93,
++ 99, 102, 106, 109, 113, 118, 120, 122, 124, 128,
++ 133, 137, 140, 143, 147, 152, 154, 156, 158, 162,
++ 166, 170, 174, 178, 182, 186, 190, 194, 198, 202,
++ 206, 210, 216, 219, 223, 227, 229, 231, 234, 236
++};
++
++/* YYRHS -- A `-1'-separated list of the rules' RHS. */
++static const yytype_int8 yyrhs[] =
++{
++ 41, 0, -1, -1, -1, 41, 43, 44, 7, 44,
++ 42, 45, -1, -1, 11, -1, -1, 6, -1, 17,
++ 46, 49, -1, 50, 46, 47, 49, -1, 5, 46,
++ 49, -1, 54, 5, 46, 49, -1, 54, 5, 8,
++ 52, 46, 49, -1, 5, 54, 50, 46, 49, -1,
++ -1, 9, 53, -1, 10, 53, -1, -1, 14, 48,
++ 15, 48, -1, -1, 5, -1, 5, 24, 48, -1,
++ -1, 16, 53, -1, 54, 35, 52, -1, 54, 35,
++ 52, 35, -1, 54, 35, 52, 35, 53, -1, 52,
++ 29, 54, -1, 52, 29, 54, 29, 54, -1, 4,
++ 54, -1, 4, 54, 54, -1, 54, 4, -1, 54,
++ 4, 54, -1, 54, 35, 4, 54, -1, 54, -1,
++ 7, -1, 17, -1, 54, 35, 52, -1, 54, 35,
++ 52, 35, -1, 52, 29, 54, -1, 54, 4, -1,
++ 4, 54, -1, 5, 54, 54, -1, 54, 5, 8,
++ 52, -1, 4, -1, 54, -1, 54, -1, 53, 24,
++ 53, -1, 53, 25, 53, -1, 53, 18, 53, -1,
++ 53, 19, 53, -1, 53, 20, 53, -1, 53, 21,
++ 53, -1, 53, 22, 53, -1, 53, 23, 53, -1,
++ 53, 27, 53, -1, 53, 26, 53, -1, 53, 28,
++ 53, -1, 53, 29, 53, -1, 53, 30, 53, -1,
++ 53, 33, 53, 34, 53, -1, 31, 53, -1, 36,
++ 51, 37, -1, 38, 53, 39, -1, 55, -1, 3,
++ -1, 26, 3, -1, 12, -1, 13, 54, -1
++};
++
++/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
++static const yytype_uint8 yyrline[] =
++{
++ 0, 128, 128, 129, 129, 135, 136, 139, 140, 143,
++ 144, 145, 146, 147, 148, 151, 152, 153, 156, 157,
++ 160, 161, 162, 165, 166, 169, 170, 171, 172, 173,
++ 174, 175, 176, 177, 178, 179, 183, 184, 185, 187,
++ 189, 191, 193, 195, 197, 203, 203, 205, 206, 207,
++ 208, 209, 210, 211, 212, 213, 214, 215, 216, 217,
++ 218, 219, 220, 221, 224, 225, 228, 229, 230, 231
++};
+ #endif
+-#if ! defined (YYSIZE_T) && defined (size_t)
+-# define YYSIZE_T size_t
++
++#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
++/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
++ First, the terminals, then, starting at YYNTOKENS, nonterminals. */
++static const char *const yytname[] =
++{
++ "$end", "error", "$undefined", "NUMBER", "MONTH", "WDAY", "COLOR",
++ "STRING", "IN", "PLUS", "MINUS", "SMALL", "CYEAR", "LEAPYEAR", "SHIFT",
++ "IF", "LENGTH", "EASTER", "EQ", "NE", "LE", "GE", "LT", "GT", "OR",
++ "AND", "'-'", "'+'", "'*'", "'/'", "'%'", "'!'", "UMINUS", "'?'", "':'",
++ "'.'", "'['", "']'", "'('", "')'", "$accept", "list", "@1", "small",
++ "color", "entry", "offset", "conditionaloffset", "wdaycondition",
++ "length", "date", "reldate", "month", "expr", "pexpr", "number", 0
++};
+ #endif
+-#if ! defined (YYSIZE_T)
+-# if defined (__STDC__) || defined (__cplusplus)
+-# include <stddef.h> /* INFRINGES ON USER NAME SPACE */
+-# define YYSIZE_T size_t
++
++# ifdef YYPRINT
++/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
++ token YYLEX-NUM. */
++static const yytype_uint16 yytoknum[] =
++{
++ 0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
++ 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
++ 275, 276, 277, 278, 279, 280, 45, 43, 42, 47,
++ 37, 33, 281, 63, 58, 46, 91, 93, 40, 41
++};
+ # endif
+-#endif
+-#if ! defined (YYSIZE_T)
+-# define YYSIZE_T unsigned int
+-#endif
+
++/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
++static const yytype_uint8 yyr1[] =
++{
++ 0, 40, 41, 42, 41, 43, 43, 44, 44, 45,
++ 45, 45, 45, 45, 45, 46, 46, 46, 47, 47,
++ 48, 48, 48, 49, 49, 50, 50, 50, 50, 50,
++ 50, 50, 50, 50, 50, 50, 51, 51, 51, 51,
++ 51, 51, 51, 51, 51, 52, 52, 53, 53, 53,
++ 53, 53, 53, 53, 53, 53, 53, 53, 53, 53,
++ 53, 53, 53, 53, 54, 54, 55, 55, 55, 55
++};
++
++/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
++static const yytype_uint8 yyr2[] =
++{
++ 0, 2, 0, 0, 7, 0, 1, 0, 1, 3,
++ 4, 3, 4, 6, 5, 0, 2, 2, 0, 4,
++ 0, 1, 3, 0, 2, 3, 4, 5, 3, 5,
++ 2, 3, 2, 3, 4, 1, 1, 1, 3, 4,
++ 3, 2, 2, 3, 4, 1, 1, 1, 3, 3,
++ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
++ 3, 5, 2, 3, 3, 1, 1, 2, 1, 2
++};
++
++/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
++ STATE-NUM when YYTABLE doesn't specify something else to do. Zero
++ means the default is an error. */
++static const yytype_uint8 yydefact[] =
++{
++ 2, 5, 1, 6, 7, 8, 0, 7, 3, 0,
++ 66, 45, 15, 68, 0, 15, 0, 0, 4, 15,
++ 0, 35, 65, 30, 0, 0, 23, 0, 69, 23,
++ 67, 0, 0, 0, 47, 18, 0, 32, 15, 0,
++ 31, 16, 17, 0, 11, 15, 35, 9, 62, 45,
++ 0, 36, 37, 0, 0, 46, 0, 0, 0, 0,
++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
++ 64, 20, 23, 28, 33, 0, 23, 45, 25, 46,
++ 24, 23, 42, 0, 63, 0, 41, 0, 0, 50,
++ 51, 52, 53, 54, 55, 48, 49, 57, 56, 58,
++ 59, 60, 0, 21, 0, 10, 0, 45, 15, 12,
++ 34, 26, 14, 43, 40, 0, 38, 0, 20, 20,
++ 29, 23, 27, 44, 39, 61, 22, 19, 13
++};
++
++/* YYDEFGOTO[NTERM-NUM]. */
++static const yytype_int8 yydefgoto[] =
++{
++ -1, 1, 9, 4, 6, 18, 26, 72, 104, 44,
++ 19, 53, 20, 33, 34, 22
++};
++
++/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
++ STATE-NUM. */
++#define YYPACT_NINF -82
++static const yytype_int16 yypact[] =
++{
++ -82, 4, -82, -82, 0, -82, 2, 0, -82, 97,
++ -82, 139, -2, -82, 139, 7, 26, 108, -82, 7,
++ 13, 132, -82, 139, 108, 108, 27, 128, -82, 27,
++ -82, 108, 81, 167, -82, 45, 139, 139, 24, 144,
++ -82, 206, 206, 108, -82, 7, 60, -82, 30, 139,
++ 139, -82, -82, 33, 42, 57, 108, 108, 108, 108,
++ 108, 108, 108, 108, 108, 108, 108, 108, 108, 108,
++ -82, 67, 27, 46, -82, 146, 27, 139, 47, -82,
++ 206, 27, -82, 139, -82, 139, -82, 69, 146, 238,
++ 238, 238, 238, 238, 238, 222, 238, -8, -8, 30,
++ 30, 30, 189, 56, 66, -82, 139, -82, 7, -82,
++ -82, 108, -82, -82, -82, 146, 48, 108, 67, 67,
++ -82, 27, 206, -82, -82, -82, -82, -82, -82
++};
++
++/* YYPGOTO[NTERM-NUM]. */
++static const yytype_int8 yypgoto[] =
++{
++ -82, -82, -82, -82, 80, -82, 20, -82, -81, -3,
++ 63, -82, 28, -12, -9, -82
++};
++
++/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
++ positive, shift that token. If negative, reduce the rule which
++ number is the opposite. If zero, do what YYDEFACT says.
++ If YYTABLE_NINF, syntax error. */
++#define YYTABLE_NINF -47
++static const yytype_int16 yytable[] =
++{
++ 21, 10, 23, 27, 2, 28, 5, 24, 25, 7,
++ 13, 14, 41, 42, 40, 3, 24, 25, 46, 48,
++ 66, 67, 68, 55, 16, 69, 47, 73, 74, 30,
++ 79, 80, 75, 24, 25, 29, 17, 126, 127, 35,
++ 82, 83, 36, 43, 89, 90, 91, 92, 93, 94,
++ 95, 96, 97, 98, 99, 100, 101, 102, 76, 71,
++ 54, 86, 87, 69, 37, 81, 79, 78, 110, 105,
++ 84, 85, 103, 109, 113, 106, 114, 115, 112, 79,
++ 118, 119, 111, 124, 10, 49, 50, 8, 51, -46,
++ 45, 0, 88, 13, 14, 39, 0, 120, 52, 122,
++ 10, 11, 12, 108, 0, 125, 79, 16, 0, 13,
++ 14, 10, 0, 0, 15, 0, 116, 0, 128, 17,
++ 13, 14, 0, 16, 0, 0, 0, 0, 121, 0,
++ 0, 10, 11, 0, 16, 17, 37, 38, 0, 31,
++ 13, 14, 10, 123, 32, 0, 17, 10, 77, 10,
++ 107, 13, 14, 0, 16, 0, 13, 14, 13, 14,
++ 0, -46, 0, 0, 0, 16, 17, 39, 0, 0,
++ 16, 0, 16, 0, 0, 0, 0, 17, 0, 0,
++ 0, 0, 17, 0, 17, 56, 57, 58, 59, 60,
++ 61, 62, 63, 64, 65, 66, 67, 68, 0, 0,
++ 69, 0, 0, 0, 0, 0, 70, 56, 57, 58,
++ 59, 60, 61, 62, 63, 64, 65, 66, 67, 68,
++ 0, 0, 69, 117, 56, 57, 58, 59, 60, 61,
++ 62, 63, 64, 65, 66, 67, 68, 0, 0, 69,
++ 56, 57, 58, 59, 60, 61, 0, 63, 64, 65,
++ 66, 67, 68, 0, 0, 69, 56, 57, 58, 59,
++ 60, 61, 0, 0, 64, 65, 66, 67, 68, 0,
++ 0, 69
++};
++
++static const yytype_int8 yycheck[] =
++{
++ 9, 3, 11, 12, 0, 14, 6, 9, 10, 7,
++ 12, 13, 24, 25, 23, 11, 9, 10, 27, 31,
++ 28, 29, 30, 32, 26, 33, 29, 36, 37, 3,
++ 39, 43, 8, 9, 10, 15, 38, 118, 119, 19,
++ 49, 50, 29, 16, 56, 57, 58, 59, 60, 61,
++ 62, 63, 64, 65, 66, 67, 68, 69, 38, 14,
++ 32, 4, 5, 33, 4, 45, 75, 39, 77, 72,
++ 37, 29, 5, 76, 83, 29, 85, 8, 81, 88,
++ 24, 15, 35, 35, 3, 4, 5, 7, 7, 29,
++ 27, -1, 35, 12, 13, 35, -1, 106, 17, 111,
++ 3, 4, 5, 75, -1, 117, 115, 26, -1, 12,
++ 13, 3, -1, -1, 17, -1, 88, -1, 121, 38,
++ 12, 13, -1, 26, -1, -1, -1, -1, 108, -1,
++ -1, 3, 4, -1, 26, 38, 4, 5, -1, 31,
++ 12, 13, 3, 115, 36, -1, 38, 3, 4, 3,
++ 4, 12, 13, -1, 26, -1, 12, 13, 12, 13,
++ -1, 29, -1, -1, -1, 26, 38, 35, -1, -1,
++ 26, -1, 26, -1, -1, -1, -1, 38, -1, -1,
++ -1, -1, 38, -1, 38, 18, 19, 20, 21, 22,
++ 23, 24, 25, 26, 27, 28, 29, 30, -1, -1,
++ 33, -1, -1, -1, -1, -1, 39, 18, 19, 20,
++ 21, 22, 23, 24, 25, 26, 27, 28, 29, 30,
++ -1, -1, 33, 34, 18, 19, 20, 21, 22, 23,
++ 24, 25, 26, 27, 28, 29, 30, -1, -1, 33,
++ 18, 19, 20, 21, 22, 23, -1, 25, 26, 27,
++ 28, 29, 30, -1, -1, 33, 18, 19, 20, 21,
++ 22, 23, -1, -1, 26, 27, 28, 29, 30, -1,
++ -1, 33
++};
++
++/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
++ symbol of state STATE-NUM. */
++static const yytype_uint8 yystos[] =
++{
++ 0, 41, 0, 11, 43, 6, 44, 7, 44, 42,
++ 3, 4, 5, 12, 13, 17, 26, 38, 45, 50,
++ 52, 54, 55, 54, 9, 10, 46, 54, 54, 46,
++ 3, 31, 36, 53, 54, 46, 29, 4, 5, 35,
++ 54, 53, 53, 16, 49, 50, 54, 49, 53, 4,
++ 5, 7, 17, 51, 52, 54, 18, 19, 20, 21,
++ 22, 23, 24, 25, 26, 27, 28, 29, 30, 33,
++ 39, 14, 47, 54, 54, 8, 46, 4, 52, 54,
++ 53, 46, 54, 54, 37, 29, 4, 5, 35, 53,
++ 53, 53, 53, 53, 53, 53, 53, 53, 53, 53,
++ 53, 53, 53, 5, 48, 49, 29, 4, 52, 49,
++ 54, 35, 49, 54, 54, 8, 52, 34, 24, 15,
++ 54, 46, 53, 52, 35, 53, 48, 48, 49
++};
++
+ #define yyerrok (yyerrstatus = 0)
+ #define yyclearin (yychar = YYEMPTY)
+-#define YYEMPTY -2
++#define YYEMPTY (-2)
+ #define YYEOF 0
++
+ #define YYACCEPT goto yyacceptlab
+-#define YYABORT goto yyabortlab
+-#define YYERROR goto yyerrlab1
++#define YYABORT goto yyabortlab
++#define YYERROR goto yyerrorlab
++
++
+ /* Like YYERROR except do call yyerror. This remains here temporarily
+ to ease the transition to the new meaning of YYERROR, for GCC.
+ Once GCC version 2 has supplanted version 1, this can go. */
++
+ #define YYFAIL goto yyerrlab
++
+ #define YYRECOVERING() (!!yyerrstatus)
++
+ #define YYBACKUP(Token, Value) \
+ do \
+ if (yychar == YYEMPTY && yylen == 1) \
+ { \
+ yychar = (Token); \
+ yylval = (Value); \
+- yychar1 = YYTRANSLATE (yychar); \
+- YYPOPSTACK; \
++ yytoken = YYTRANSLATE (yychar); \
++ YYPOPSTACK (1); \
+ goto yybackup; \
+ } \
+ else \
+- { \
+- yyerror ("syntax error: cannot back up"); \
++ { \
++ yyerror (YY_("syntax error: cannot back up")); \
+ YYERROR; \
+ } \
+-while (0)
++while (YYID (0))
+
++
+ #define YYTERROR 1
+ #define YYERRCODE 256
+
+
+-/* YYLLOC_DEFAULT -- Compute the default location (before the actions
+- are run).
++/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
++ If N is 0, then set CURRENT to the empty location which ends
++ the previous symbol: RHS[0] (always defined). */
+
+- When YYLLOC_DEFAULT is run, CURRENT is set the location of the
+- first token. By default, to implement support for ranges, extend
+- its range to the last symbol. */
+-
++#define YYRHSLOC(Rhs, K) ((Rhs)[K])
+ #ifndef YYLLOC_DEFAULT
+-# define YYLLOC_DEFAULT(Current, Rhs, N) \
+- Current.last_line = Rhs[N].last_line; \
+- Current.last_column = Rhs[N].last_column;
++# define YYLLOC_DEFAULT(Current, Rhs, N) \
++ do \
++ if (YYID (N)) \
++ { \
++ (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \
++ (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \
++ (Current).last_line = YYRHSLOC (Rhs, N).last_line; \
++ (Current).last_column = YYRHSLOC (Rhs, N).last_column; \
++ } \
++ else \
++ { \
++ (Current).first_line = (Current).last_line = \
++ YYRHSLOC (Rhs, 0).last_line; \
++ (Current).first_column = (Current).last_column = \
++ YYRHSLOC (Rhs, 0).last_column; \
++ } \
++ while (YYID (0))
+ #endif
+
+
++/* YY_LOCATION_PRINT -- Print the location on the stream.
++ This macro was not mandated originally: define only if we know
++ we won't break user code: when these are the locations we know. */
++
++#ifndef YY_LOCATION_PRINT
++# if YYLTYPE_IS_TRIVIAL
++# define YY_LOCATION_PRINT(File, Loc) \
++ fprintf (File, "%d.%d-%d.%d", \
++ (Loc).first_line, (Loc).first_column, \
++ (Loc).last_line, (Loc).last_column)
++# else
++# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
++# endif
++#endif
++
++
+ /* YYLEX -- calling `yylex' with the right arguments. */
+
+-#if YYPURE
+-# if YYLSP_NEEDED
+-# ifdef YYLEX_PARAM
+-# define YYLEX yylex (&yylval, &yylloc, YYLEX_PARAM)
+-# else
+-# define YYLEX yylex (&yylval, &yylloc)
+-# endif
+-# else /* !YYLSP_NEEDED */
+-# ifdef YYLEX_PARAM
+-# define YYLEX yylex (&yylval, YYLEX_PARAM)
+-# else
+-# define YYLEX yylex (&yylval)
+-# endif
+-# endif /* !YYLSP_NEEDED */
+-#else /* !YYPURE */
+-# define YYLEX yylex ()
+-#endif /* !YYPURE */
++#ifdef YYLEX_PARAM
++# define YYLEX yylex (YYLEX_PARAM)
++#else
++# define YYLEX yylex ()
++#endif
+
+-
+ /* Enable debugging if requested. */
+ #if YYDEBUG
+
+@@ -628,14 +893,155 @@
+ do { \
+ if (yydebug) \
+ YYFPRINTF Args; \
+-} while (0)
++} while (YYID (0))
++
++# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
++do { \
++ if (yydebug) \
++ { \
++ YYFPRINTF (stderr, "%s ", Title); \
++ yy_symbol_print (stderr, \
++ Type, Value); \
++ YYFPRINTF (stderr, "\n"); \
++ } \
++} while (YYID (0))
++
++
++/*--------------------------------.
++| Print this symbol on YYOUTPUT. |
++`--------------------------------*/
++
++/*ARGSUSED*/
++#if (defined __STDC__ || defined __C99__FUNC__ \
++ || defined __cplusplus || defined _MSC_VER)
++static void
++yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
++#else
++static void
++yy_symbol_value_print (yyoutput, yytype, yyvaluep)
++ FILE *yyoutput;
++ int yytype;
++ YYSTYPE const * const yyvaluep;
++#endif
++{
++ if (!yyvaluep)
++ return;
++# ifdef YYPRINT
++ if (yytype < YYNTOKENS)
++ YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
++# else
++ YYUSE (yyoutput);
++# endif
++ switch (yytype)
++ {
++ default:
++ break;
++ }
++}
++
++
++/*--------------------------------.
++| Print this symbol on YYOUTPUT. |
++`--------------------------------*/
++
++#if (defined __STDC__ || defined __C99__FUNC__ \
++ || defined __cplusplus || defined _MSC_VER)
++static void
++yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
++#else
++static void
++yy_symbol_print (yyoutput, yytype, yyvaluep)
++ FILE *yyoutput;
++ int yytype;
++ YYSTYPE const * const yyvaluep;
++#endif
++{
++ if (yytype < YYNTOKENS)
++ YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
++ else
++ YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
++
++ yy_symbol_value_print (yyoutput, yytype, yyvaluep);
++ YYFPRINTF (yyoutput, ")");
++}
++
++/*------------------------------------------------------------------.
++| yy_stack_print -- Print the state stack from its BOTTOM up to its |
++| TOP (included). |
++`------------------------------------------------------------------*/
++
++#if (defined __STDC__ || defined __C99__FUNC__ \
++ || defined __cplusplus || defined _MSC_VER)
++static void
++yy_stack_print (yytype_int16 *bottom, yytype_int16 *top)
++#else
++static void
++yy_stack_print (bottom, top)
++ yytype_int16 *bottom;
++ yytype_int16 *top;
++#endif
++{
++ YYFPRINTF (stderr, "Stack now");
++ for (; bottom <= top; ++bottom)
++ YYFPRINTF (stderr, " %d", *bottom);
++ YYFPRINTF (stderr, "\n");
++}
++
++# define YY_STACK_PRINT(Bottom, Top) \
++do { \
++ if (yydebug) \
++ yy_stack_print ((Bottom), (Top)); \
++} while (YYID (0))
++
++
++/*------------------------------------------------.
++| Report that the YYRULE is going to be reduced. |
++`------------------------------------------------*/
++
++#if (defined __STDC__ || defined __C99__FUNC__ \
++ || defined __cplusplus || defined _MSC_VER)
++static void
++yy_reduce_print (YYSTYPE *yyvsp, int yyrule)
++#else
++static void
++yy_reduce_print (yyvsp, yyrule)
++ YYSTYPE *yyvsp;
++ int yyrule;
++#endif
++{
++ int yynrhs = yyr2[yyrule];
++ int yyi;
++ unsigned long int yylno = yyrline[yyrule];
++ YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
++ yyrule - 1, yylno);
++ /* The symbols being reduced. */
++ for (yyi = 0; yyi < yynrhs; yyi++)
++ {
++ fprintf (stderr, " $%d = ", yyi + 1);
++ yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
++ &(yyvsp[(yyi + 1) - (yynrhs)])
++ );
++ fprintf (stderr, "\n");
++ }
++}
++
++# define YY_REDUCE_PRINT(Rule) \
++do { \
++ if (yydebug) \
++ yy_reduce_print (yyvsp, Rule); \
++} while (YYID (0))
++
+ /* Nonzero means print parse trace. It is left uninitialized so that
+ multiple parsers can coexist. */
+ int yydebug;
+ #else /* !YYDEBUG */
+ # define YYDPRINTF(Args)
++# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
++# define YY_STACK_PRINT(Bottom, Top)
++# define YY_REDUCE_PRINT(Rule)
+ #endif /* !YYDEBUG */
+
++
+ /* YYINITDEPTH -- initial size of the parser's stacks. */
+ #ifndef YYINITDEPTH
+ # define YYINITDEPTH 200
+@@ -645,59 +1051,59 @@
+ if the built-in stack extension method is used).
+
+ Do not make this value too large; the results are undefined if
+- SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH)
++ YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
+ evaluated with infinite-precision integer arithmetic. */
+
+-#if YYMAXDEPTH == 0
+-# undef YYMAXDEPTH
+-#endif
+-
+ #ifndef YYMAXDEPTH
+ # define YYMAXDEPTH 10000
+ #endif
++
+
+-#ifdef YYERROR_VERBOSE
+
++#if YYERROR_VERBOSE
++
+ # ifndef yystrlen
+-# if defined (__GLIBC__) && defined (_STRING_H)
++# if defined __GLIBC__ && defined _STRING_H
+ # define yystrlen strlen
+ # else
+ /* Return the length of YYSTR. */
++#if (defined __STDC__ || defined __C99__FUNC__ \
++ || defined __cplusplus || defined _MSC_VER)
+ static YYSIZE_T
+-# if defined (__STDC__) || defined (__cplusplus)
+ yystrlen (const char *yystr)
+-# else
++#else
++static YYSIZE_T
+ yystrlen (yystr)
+- const char *yystr;
+-# endif
++ const char *yystr;
++#endif
+ {
+- register const char *yys = yystr;
+-
+- while (*yys++ != '\0')
++ YYSIZE_T yylen;
++ for (yylen = 0; yystr[yylen]; yylen++)
+ continue;
+-
+- return yys - yystr - 1;
++ return yylen;
+ }
+ # endif
+ # endif
+
+ # ifndef yystpcpy
+-# if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE)
++# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
+ # define yystpcpy stpcpy
+ # else
+ /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
+ YYDEST. */
++#if (defined __STDC__ || defined __C99__FUNC__ \
++ || defined __cplusplus || defined _MSC_VER)
+ static char *
+-# if defined (__STDC__) || defined (__cplusplus)
+ yystpcpy (char *yydest, const char *yysrc)
+-# else
++#else
++static char *
+ yystpcpy (yydest, yysrc)
+- char *yydest;
+- const char *yysrc;
+-# endif
++ char *yydest;
++ const char *yysrc;
++#endif
+ {
+- register char *yyd = yydest;
+- register const char *yys = yysrc;
++ char *yyd = yydest;
++ const char *yys = yysrc;
+
+ while ((*yyd++ = *yys++) != '\0')
+ continue;
+@@ -706,86 +1112,266 @@
+ }
+ # endif
+ # endif
+-#endif
+-
+-#line 315 "/usr/share/bison/bison.simple"
+
++# ifndef yytnamerr
++/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
++ quotes and backslashes, so that it's suitable for yyerror. The
++ heuristic is that double-quoting is unnecessary unless the string
++ contains an apostrophe, a comma, or backslash (other than
++ backslash-backslash). YYSTR is taken from yytname. If YYRES is
++ null, do not copy; instead, return the length of what the result
++ would have been. */
++static YYSIZE_T
++yytnamerr (char *yyres, const char *yystr)
++{
++ if (*yystr == '"')
++ {
++ YYSIZE_T yyn = 0;
++ char const *yyp = yystr;
+
+-/* The user can define YYPARSE_PARAM as the name of an argument to be passed
+- into yyparse. The argument should have type void *.
+- It should actually point to an object.
+- Grammar actions can access the variable by casting it
+- to the proper pointer type. */
++ for (;;)
++ switch (*++yyp)
++ {
++ case '\'':
++ case ',':
++ goto do_not_strip_quotes;
+
+-#ifdef YYPARSE_PARAM
+-# if defined (__STDC__) || defined (__cplusplus)
+-# define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
+-# define YYPARSE_PARAM_DECL
+-# else
+-# define YYPARSE_PARAM_ARG YYPARSE_PARAM
+-# define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
++ case '\\':
++ if (*++yyp != '\\')
++ goto do_not_strip_quotes;
++ /* Fall through. */
++ default:
++ if (yyres)
++ yyres[yyn] = *yyp;
++ yyn++;
++ break;
++
++ case '"':
++ if (yyres)
++ yyres[yyn] = '\0';
++ return yyn;
++ }
++ do_not_strip_quotes: ;
++ }
++
++ if (! yyres)
++ return yystrlen (yystr);
++
++ return yystpcpy (yyres, yystr) - yyres;
++}
+ # endif
+-#else /* !YYPARSE_PARAM */
+-# define YYPARSE_PARAM_ARG
+-# define YYPARSE_PARAM_DECL
+-#endif /* !YYPARSE_PARAM */
+
+-/* Prevent warning if -Wstrict-prototypes. */
+-#ifdef __GNUC__
+-# ifdef YYPARSE_PARAM
+-int yyparse (void *);
+-# else
+-int yyparse (void);
++/* Copy into YYRESULT an error message about the unexpected token
++ YYCHAR while in state YYSTATE. Return the number of bytes copied,
++ including the terminating null byte. If YYRESULT is null, do not
++ copy anything; just return the number of bytes that would be
++ copied. As a special case, return 0 if an ordinary "syntax error"
++ message will do. Return YYSIZE_MAXIMUM if overflow occurs during
++ size calculation. */
++static YYSIZE_T
++yysyntax_error (char *yyresult, int yystate, int yychar)
++{
++ int yyn = yypact[yystate];
++
++ if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
++ return 0;
++ else
++ {
++ int yytype = YYTRANSLATE (yychar);
++ YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
++ YYSIZE_T yysize = yysize0;
++ YYSIZE_T yysize1;
++ int yysize_overflow = 0;
++ enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
++ char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
++ int yyx;
++
++# if 0
++ /* This is so xgettext sees the translatable formats that are
++ constructed on the fly. */
++ YY_("syntax error, unexpected %s");
++ YY_("syntax error, unexpected %s, expecting %s");
++ YY_("syntax error, unexpected %s, expecting %s or %s");
++ YY_("syntax error, unexpected %s, expecting %s or %s or %s");
++ YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
+ # endif
++ char *yyfmt;
++ char const *yyf;
++ static char const yyunexpected[] = "syntax error, unexpected %s";
++ static char const yyexpecting[] = ", expecting %s";
++ static char const yyor[] = " or %s";
++ char yyformat[sizeof yyunexpected
++ + sizeof yyexpecting - 1
++ + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
++ * (sizeof yyor - 1))];
++ char const *yyprefix = yyexpecting;
++
++ /* Start YYX at -YYN if negative to avoid negative indexes in
++ YYCHECK. */
++ int yyxbegin = yyn < 0 ? -yyn : 0;
++
++ /* Stay within bounds of both yycheck and yytname. */
++ int yychecklim = YYLAST - yyn + 1;
++ int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
++ int yycount = 1;
++
++ yyarg[0] = yytname[yytype];
++ yyfmt = yystpcpy (yyformat, yyunexpected);
++
++ for (yyx = yyxbegin; yyx < yyxend; ++yyx)
++ if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
++ {
++ if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
++ {
++ yycount = 1;
++ yysize = yysize0;
++ yyformat[sizeof yyunexpected - 1] = '\0';
++ break;
++ }
++ yyarg[yycount++] = yytname[yyx];
++ yysize1 = yysize + yytnamerr (0, yytname[yyx]);
++ yysize_overflow |= (yysize1 < yysize);
++ yysize = yysize1;
++ yyfmt = yystpcpy (yyfmt, yyprefix);
++ yyprefix = yyor;
++ }
++
++ yyf = YY_(yyformat);
++ yysize1 = yysize + yystrlen (yyf);
++ yysize_overflow |= (yysize1 < yysize);
++ yysize = yysize1;
++
++ if (yysize_overflow)
++ return YYSIZE_MAXIMUM;
++
++ if (yyresult)
++ {
++ /* Avoid sprintf, as that infringes on the user's name space.
++ Don't have undefined behavior even if the translation
++ produced a string with the wrong number of "%s"s. */
++ char *yyp = yyresult;
++ int yyi = 0;
++ while ((*yyp = *yyf) != '\0')
++ {
++ if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
++ {
++ yyp += yytnamerr (yyp, yyarg[yyi++]);
++ yyf += 2;
++ }
++ else
++ {
++ yyp++;
++ yyf++;
++ }
++ }
++ }
++ return yysize;
++ }
++}
++#endif /* YYERROR_VERBOSE */
++
++
++/*-----------------------------------------------.
++| Release the memory associated to this symbol. |
++`-----------------------------------------------*/
++
++/*ARGSUSED*/
++#if (defined __STDC__ || defined __C99__FUNC__ \
++ || defined __cplusplus || defined _MSC_VER)
++static void
++yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
++#else
++static void
++yydestruct (yymsg, yytype, yyvaluep)
++ const char *yymsg;
++ int yytype;
++ YYSTYPE *yyvaluep;
+ #endif
++{
++ YYUSE (yyvaluep);
+
+-/* YY_DECL_VARIABLES -- depending whether we use a pure parser,
+- variables are global, or local to YYPARSE. */
++ if (!yymsg)
++ yymsg = "Deleting";
++ YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
+
+-#define YY_DECL_NON_LSP_VARIABLES \
+-/* The lookahead symbol. */ \
+-int yychar; \
+- \
+-/* The semantic value of the lookahead symbol. */ \
+-YYSTYPE yylval; \
+- \
+-/* Number of parse errors so far. */ \
+-int yynerrs;
++ switch (yytype)
++ {
+
+-#if YYLSP_NEEDED
+-# define YY_DECL_VARIABLES \
+-YY_DECL_NON_LSP_VARIABLES \
+- \
+-/* Location data for the lookahead symbol. */ \
+-YYLTYPE yylloc;
++ default:
++ break;
++ }
++}
++
++
++/* Prevent warnings from -Wmissing-prototypes. */
++
++#ifdef YYPARSE_PARAM
++#if defined __STDC__ || defined __cplusplus
++int yyparse (void *YYPARSE_PARAM);
+ #else
+-# define YY_DECL_VARIABLES \
+-YY_DECL_NON_LSP_VARIABLES
++int yyparse ();
+ #endif
++#else /* ! YYPARSE_PARAM */
++#if defined __STDC__ || defined __cplusplus
++int yyparse (void);
++#else
++int yyparse ();
++#endif
++#endif /* ! YYPARSE_PARAM */
+
+
+-/* If nonreentrant, generate the variables here. */
+
+-#if !YYPURE
+-YY_DECL_VARIABLES
+-#endif /* !YYPURE */
++/* The look-ahead symbol. */
++int yychar;
+
++/* The semantic value of the look-ahead symbol. */
++YYSTYPE yylval;
++
++/* Number of syntax errors so far. */
++int yynerrs;
++
++
++
++/*----------.
++| yyparse. |
++`----------*/
++
++#ifdef YYPARSE_PARAM
++#if (defined __STDC__ || defined __C99__FUNC__ \
++ || defined __cplusplus || defined _MSC_VER)
+ int
+-yyparse (YYPARSE_PARAM_ARG)
+- YYPARSE_PARAM_DECL
++yyparse (void *YYPARSE_PARAM)
++#else
++int
++yyparse (YYPARSE_PARAM)
++ void *YYPARSE_PARAM;
++#endif
++#else /* ! YYPARSE_PARAM */
++#if (defined __STDC__ || defined __C99__FUNC__ \
++ || defined __cplusplus || defined _MSC_VER)
++int
++yyparse (void)
++#else
++int
++yyparse ()
++
++#endif
++#endif
+ {
+- /* If reentrant, generate the variables here. */
+-#if YYPURE
+- YY_DECL_VARIABLES
+-#endif /* !YYPURE */
+-
+- register int yystate;
+- register int yyn;
++
++ int yystate;
++ int yyn;
+ int yyresult;
+ /* Number of tokens to shift before error messages enabled. */
+ int yyerrstatus;
+- /* Lookahead token as an internal (translated) token number. */
+- int yychar1 = 0;
++ /* Look-ahead token as an internal (translated) token number. */
++ int yytoken = 0;
++#if YYERROR_VERBOSE
++ /* Buffer for error messages, and its allocated size. */
++ char yymsgbuf[128];
++ char *yymsg = yymsgbuf;
++ YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
++#endif
+
+ /* Three stacks and their tools:
+ `yyss': related to states,
+@@ -795,43 +1381,31 @@
+ Refer to the stacks thru separate pointers, to allow yyoverflow
+ to reallocate them elsewhere. */
+
+- /* The state stack. */
+- short yyssa[YYINITDEPTH];
+- short *yyss = yyssa;
+- register short *yyssp;
++ /* The state stack. */
++ yytype_int16 yyssa[YYINITDEPTH];
++ yytype_int16 *yyss = yyssa;
++ yytype_int16 *yyssp;
+
+ /* The semantic value stack. */
+ YYSTYPE yyvsa[YYINITDEPTH];
+ YYSTYPE *yyvs = yyvsa;
+- register YYSTYPE *yyvsp;
++ YYSTYPE *yyvsp;
+
+-#if YYLSP_NEEDED
+- /* The location stack. */
+- YYLTYPE yylsa[YYINITDEPTH];
+- YYLTYPE *yyls = yylsa;
+- YYLTYPE *yylsp;
+-#endif
+
+-#if YYLSP_NEEDED
+-# define YYPOPSTACK (yyvsp--, yyssp--, yylsp--)
+-#else
+-# define YYPOPSTACK (yyvsp--, yyssp--)
+-#endif
+
++#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N))
++
+ YYSIZE_T yystacksize = YYINITDEPTH;
+
+-
+ /* The variables used to return semantic value and location from the
+ action routines. */
+ YYSTYPE yyval;
+-#if YYLSP_NEEDED
+- YYLTYPE yyloc;
+-#endif
+
+- /* When reducing, the number of symbols on the RHS of the reduced
+- rule. */
+- int yylen;
+
++ /* The number of symbols on the RHS of the reduced rule.
++ Keep to zero when no symbol should be popped. */
++ int yylen = 0;
++
+ YYDPRINTF ((stderr, "Starting parse\n"));
+
+ yystate = 0;
+@@ -846,9 +1420,7 @@
+
+ yyssp = yyss;
+ yyvsp = yyvs;
+-#if YYLSP_NEEDED
+- yylsp = yyls;
+-#endif
++
+ goto yysetstate;
+
+ /*------------------------------------------------------------.
+@@ -856,70 +1428,60 @@
+ `------------------------------------------------------------*/
+ yynewstate:
+ /* In all cases, when you get here, the value and location stacks
+- have just been pushed. so pushing a state here evens the stacks.
+- */
++ have just been pushed. So pushing a state here evens the stacks. */
+ yyssp++;
+
+ yysetstate:
+ *yyssp = yystate;
+
+- if (yyssp >= yyss + yystacksize - 1)
++ if (yyss + yystacksize - 1 <= yyssp)
+ {
+ /* Get the current used size of the three stacks, in elements. */
+ YYSIZE_T yysize = yyssp - yyss + 1;
+
+ #ifdef yyoverflow
+ {
+- /* Give user a chance to reallocate the stack. Use copies of
++ /* Give user a chance to reallocate the stack. Use copies of
+ these so that the &'s don't force the real ones into
+ memory. */
+ YYSTYPE *yyvs1 = yyvs;
+- short *yyss1 = yyss;
++ yytype_int16 *yyss1 = yyss;
+
++
+ /* Each stack pointer address is followed by the size of the
+- data in use in that stack, in bytes. */
+-# if YYLSP_NEEDED
+- YYLTYPE *yyls1 = yyls;
+- /* This used to be a conditional around just the two extra args,
+- but that might be undefined if yyoverflow is a macro. */
+- yyoverflow ("parser stack overflow",
++ data in use in that stack, in bytes. This used to be a
++ conditional around just the two extra args, but that might
++ be undefined if yyoverflow is a macro. */
++ yyoverflow (YY_("memory exhausted"),
+ &yyss1, yysize * sizeof (*yyssp),
+ &yyvs1, yysize * sizeof (*yyvsp),
+- &yyls1, yysize * sizeof (*yylsp),
++
+ &yystacksize);
+- yyls = yyls1;
+-# else
+- yyoverflow ("parser stack overflow",
+- &yyss1, yysize * sizeof (*yyssp),
+- &yyvs1, yysize * sizeof (*yyvsp),
+- &yystacksize);
+-# endif
++
+ yyss = yyss1;
+ yyvs = yyvs1;
+ }
+ #else /* no yyoverflow */
+ # ifndef YYSTACK_RELOCATE
+- goto yyoverflowlab;
++ goto yyexhaustedlab;
+ # else
+ /* Extend the stack our own way. */
+- if (yystacksize >= YYMAXDEPTH)
+- goto yyoverflowlab;
++ if (YYMAXDEPTH <= yystacksize)
++ goto yyexhaustedlab;
+ yystacksize *= 2;
+- if (yystacksize > YYMAXDEPTH)
++ if (YYMAXDEPTH < yystacksize)
+ yystacksize = YYMAXDEPTH;
+
+ {
+- short *yyss1 = yyss;
++ yytype_int16 *yyss1 = yyss;
+ union yyalloc *yyptr =
+ (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
+ if (! yyptr)
+- goto yyoverflowlab;
++ goto yyexhaustedlab;
+ YYSTACK_RELOCATE (yyss);
+ YYSTACK_RELOCATE (yyvs);
+-# if YYLSP_NEEDED
+- YYSTACK_RELOCATE (yyls);
+-# endif
+-# undef YYSTACK_RELOCATE
++
++# undef YYSTACK_RELOCATE
+ if (yyss1 != yyssa)
+ YYSTACK_FREE (yyss1);
+ }
+@@ -928,14 +1490,12 @@
+
+ yyssp = yyss + yysize - 1;
+ yyvsp = yyvs + yysize - 1;
+-#if YYLSP_NEEDED
+- yylsp = yyls + yysize - 1;
+-#endif
+
++
+ YYDPRINTF ((stderr, "Stack size increased to %lu\n",
+ (unsigned long int) yystacksize));
+
+- if (yyssp >= yyss + yystacksize - 1)
++ if (yyss + yystacksize - 1 <= yyssp)
+ YYABORT;
+ }
+
+@@ -943,108 +1503,71 @@
+
+ goto yybackup;
+
+-
+ /*-----------.
+ | yybackup. |
+ `-----------*/
+ yybackup:
+
+-/* Do appropriate processing given the current state. */
+-/* Read a lookahead token if we need one and don't already have one. */
+-/* yyresume: */
++ /* Do appropriate processing given the current state. Read a
++ look-ahead token if we need one and don't already have one. */
+
+- /* First try to decide what to do without reference to lookahead token. */
+-
++ /* First try to decide what to do without reference to look-ahead token. */
+ yyn = yypact[yystate];
+- if (yyn == YYFLAG)
++ if (yyn == YYPACT_NINF)
+ goto yydefault;
+
+- /* Not known => get a lookahead token if don't already have one. */
++ /* Not known => get a look-ahead token if don't already have one. */
+
+- /* yychar is either YYEMPTY or YYEOF
+- or a valid token in external form. */
+-
++ /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */
+ if (yychar == YYEMPTY)
+ {
+ YYDPRINTF ((stderr, "Reading a token: "));
+ yychar = YYLEX;
+ }
+
+- /* Convert token to internal form (in yychar1) for indexing tables with */
+-
+- if (yychar <= 0) /* This means end of input. */
++ if (yychar <= YYEOF)
+ {
+- yychar1 = 0;
+- yychar = YYEOF; /* Don't call YYLEX any more */
+-
++ yychar = yytoken = YYEOF;
+ YYDPRINTF ((stderr, "Now at end of input.\n"));
+ }
+ else
+ {
+- yychar1 = YYTRANSLATE (yychar);
+-
+-#if YYDEBUG
+- /* We have to keep this `#if YYDEBUG', since we use variables
+- which are defined only if `YYDEBUG' is set. */
+- if (yydebug)
+- {
+- YYFPRINTF (stderr, "Next token is %d (%s",
+- yychar, yytname[yychar1]);
+- /* Give the individual parser a way to print the precise
+- meaning of a token, for further debugging info. */
+-# ifdef YYPRINT
+- YYPRINT (stderr, yychar, yylval);
+-# endif
+- YYFPRINTF (stderr, ")\n");
+- }
+-#endif
++ yytoken = YYTRANSLATE (yychar);
++ YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
+ }
+
+- yyn += yychar1;
+- if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
++ /* If the proper action on seeing token YYTOKEN is to reduce or to
++ detect an error, take that action. */
++ yyn += yytoken;
++ if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
+ goto yydefault;
+-
+ yyn = yytable[yyn];
+-
+- /* yyn is what to do for this token type in this state.
+- Negative => reduce, -yyn is rule number.
+- Positive => shift, yyn is new state.
+- New state is final state => don't bother to shift,
+- just return success.
+- 0, or most negative number => error. */
+-
+- if (yyn < 0)
++ if (yyn <= 0)
+ {
+- if (yyn == YYFLAG)
++ if (yyn == 0 || yyn == YYTABLE_NINF)
+ goto yyerrlab;
+ yyn = -yyn;
+ goto yyreduce;
+ }
+- else if (yyn == 0)
+- goto yyerrlab;
+
+ if (yyn == YYFINAL)
+ YYACCEPT;
+
+- /* Shift the lookahead token. */
+- YYDPRINTF ((stderr, "Shifting token %d (%s), ",
+- yychar, yytname[yychar1]));
++ /* Count tokens shifted since error; after three, turn off error
++ status. */
++ if (yyerrstatus)
++ yyerrstatus--;
+
+- /* Discard the token being shifted unless it is eof. */
++ /* Shift the look-ahead token. */
++ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
++
++ /* Discard the shifted token unless it is eof. */
+ if (yychar != YYEOF)
+ yychar = YYEMPTY;
+
++ yystate = yyn;
+ *++yyvsp = yylval;
+-#if YYLSP_NEEDED
+- *++yylsp = yylloc;
+-#endif
+
+- /* Count tokens shifted since error; after three, turn off error
+- status. */
+- if (yyerrstatus)
+- yyerrstatus--;
+-
+- yystate = yyn;
+ goto yynewstate;
+
+
+@@ -1068,325 +1591,374 @@
+ /* If YYLEN is nonzero, implement the default value of the action:
+ `$$ = $1'.
+
+- Otherwise, the following line sets YYVAL to the semantic value of
+- the lookahead token. This behavior is undocumented and Bison
++ Otherwise, the following line sets YYVAL to garbage.
++ This behavior is undocumented and Bison
+ users should not rely upon it. Assigning to YYVAL
+ unconditionally makes the parser a bit smaller, and it avoids a
+ GCC warning that YYVAL may be used uninitialized. */
+ yyval = yyvsp[1-yylen];
+
+-#if YYLSP_NEEDED
+- /* Similarly for the default location. Let the user run additional
+- commands if for instance locations are ranges. */
+- yyloc = yylsp[1-yylen];
+- YYLLOC_DEFAULT (yyloc, (yylsp - yylen), yylen);
+-#endif
+
+-#if YYDEBUG
+- /* We have to keep this `#if YYDEBUG', since we use variables which
+- are defined only if `YYDEBUG' is set. */
+- if (yydebug)
++ YY_REDUCE_PRINT (yyn);
++ switch (yyn)
+ {
+- int yyi;
++ case 3:
++#line 129 "parseholiday.y"
++ { yacc_stringcolor = (yyvsp[(3) - (5)].ival);
++ yacc_string = (yyvsp[(4) - (5)].sval);
++ yacc_daycolor = (yyvsp[(5) - (5)].ival); }
++ break;
+
+- YYFPRINTF (stderr, "Reducing via rule %d (line %d), ",
+- yyn, yyrline[yyn]);
++ case 4:
++#line 132 "parseholiday.y"
++ { free(yacc_string); }
++ break;
+
+- /* Print the symbols being reduced, and their result. */
+- for (yyi = yyprhs[yyn]; yyrhs[yyi] > 0; yyi++)
+- YYFPRINTF (stderr, "%s ", yytname[yyrhs[yyi]]);
+- YYFPRINTF (stderr, " -> %s\n", yytname[yyr1[yyn]]);
+- }
+-#endif
++ case 5:
++#line 135 "parseholiday.y"
++ { yacc_small = 0; }
++ break;
+
+- switch (yyn) {
++ case 6:
++#line 136 "parseholiday.y"
++ { yacc_small = 1; }
++ break;
+
+-case 2:
+-#line 121 "parseholiday.y"
+-{ yacc_stringcolor = yyvsp[-2].ival;
+- yacc_string = yyvsp[-1].sval;
+- yacc_daycolor = yyvsp[0].ival; ;
+- break;}
+-case 3:
+-#line 124 "parseholiday.y"
+-{ free(yacc_string); ;
+- break;}
+-case 4:
+-#line 127 "parseholiday.y"
+-{ yacc_small = 0; ;
+- break;}
+-case 5:
+-#line 128 "parseholiday.y"
+-{ yacc_small = 1; ;
+- break;}
+-case 6:
+-#line 131 "parseholiday.y"
+-{ yyval.ival = 0; ;
+- break;}
+-case 7:
+-#line 132 "parseholiday.y"
+-{ yyval.ival = yyvsp[0].ival; ;
+- break;}
+-case 8:
+-#line 135 "parseholiday.y"
+-{ seteaster(yyvsp[-1].ival, yyvsp[0].ival); ;
+- break;}
+-case 9:
+-#line 136 "parseholiday.y"
+-{ setdate( m, d, y, yyvsp[-1].ival, yyvsp[0].ival);;
+- break;}
+-case 10:
+-#line 137 "parseholiday.y"
+-{ setwday( 0, yyvsp[-2].ival, 0, yyvsp[-1].ival, yyvsp[0].ival);;
+- break;}
+-case 11:
+-#line 138 "parseholiday.y"
+-{ setwday(yyvsp[-3].ival, yyvsp[-2].ival, 0, yyvsp[-1].ival, yyvsp[0].ival);;
+- break;}
+-case 12:
++ case 7:
+ #line 139 "parseholiday.y"
+-{ setwday(yyvsp[-5].ival, yyvsp[-4].ival, yyvsp[-2].ival, yyvsp[-1].ival, yyvsp[0].ival);;
+- break;}
+-case 13:
++ { (yyval.ival) = 0; }
++ break;
++
++ case 8:
+ #line 140 "parseholiday.y"
+-{ setdoff(yyvsp[-4].ival, yyvsp[-3].ival,m,d,y,yyvsp[-1].ival,yyvsp[0].ival);;
+- break;}
+-case 14:
++ { (yyval.ival) = (yyvsp[(1) - (1)].ival); }
++ break;
++
++ case 9:
+ #line 143 "parseholiday.y"
+-{ yyval.ival = 0; ;
+- break;}
+-case 15:
++ { seteaster((yyvsp[(2) - (3)].ival), (yyvsp[(3) - (3)].ival)); }
++ break;
++
++ case 10:
+ #line 144 "parseholiday.y"
+-{ yyval.ival = yyvsp[0].ival; ;
+- break;}
+-case 16:
++ { setdate( m, d, y, (yyvsp[(2) - (4)].ival), (yyvsp[(3) - (4)].ival), (yyvsp[(4) - (4)].ival));}
++ break;
++
++ case 11:
+ #line 145 "parseholiday.y"
+-{ yyval.ival = -yyvsp[0].ival; ;
+- break;}
+-case 17:
++ { setwday( 0, (yyvsp[(1) - (3)].ival), 0, (yyvsp[(2) - (3)].ival), (yyvsp[(3) - (3)].ival));}
++ break;
++
++ case 12:
++#line 146 "parseholiday.y"
++ { setwday((yyvsp[(1) - (4)].ival), (yyvsp[(2) - (4)].ival), 0, (yyvsp[(3) - (4)].ival), (yyvsp[(4) - (4)].ival));}
++ break;
++
++ case 13:
++#line 147 "parseholiday.y"
++ { setwday((yyvsp[(1) - (6)].ival), (yyvsp[(2) - (6)].ival), (yyvsp[(4) - (6)].ival), (yyvsp[(5) - (6)].ival), (yyvsp[(6) - (6)].ival));}
++ break;
++
++ case 14:
+ #line 148 "parseholiday.y"
+-{ yyval.ival = 1; ;
+- break;}
+-case 18:
+-#line 149 "parseholiday.y"
+-{ yyval.ival = yyvsp[0].ival; ;
+- break;}
+-case 19:
++ { setdoff((yyvsp[(1) - (5)].ival), (yyvsp[(2) - (5)].ival),m,d,y,(yyvsp[(4) - (5)].ival),(yyvsp[(5) - (5)].ival));}
++ break;
++
++ case 15:
++#line 151 "parseholiday.y"
++ { (yyval.ival) = 0; }
++ break;
++
++ case 16:
+ #line 152 "parseholiday.y"
+-{ m = yyvsp[0].ival; d = yyvsp[-2].ival; y = 0; ;
+- break;}
+-case 20:
++ { (yyval.ival) = (yyvsp[(2) - (2)].ival); }
++ break;
++
++ case 17:
+ #line 153 "parseholiday.y"
+-{ m = yyvsp[-1].ival; d = yyvsp[-3].ival; y = 0; ;
+- break;}
+-case 21:
+-#line 154 "parseholiday.y"
+-{ m = yyvsp[-2].ival; d = yyvsp[-4].ival; y = yyvsp[0].ival; ;
+- break;}
+-case 22:
+-#line 155 "parseholiday.y"
+-{ m = yyvsp[-2].ival; d = yyvsp[0].ival; y = 0; ;
+- break;}
+-case 23:
++ { (yyval.ival) = -(yyvsp[(2) - (2)].ival); }
++ break;
++
++ case 18:
+ #line 156 "parseholiday.y"
+-{ m = yyvsp[-4].ival; d = yyvsp[-2].ival; y = yyvsp[0].ival; ;
+- break;}
+-case 24:
++ { (yyval.ival) = 0; }
++ break;
++
++ case 19:
+ #line 157 "parseholiday.y"
+-{ m = yyvsp[-1].ival; d = yyvsp[0].ival; y = 0; ;
+- break;}
+-case 25:
+-#line 158 "parseholiday.y"
+-{ m = yyvsp[-2].ival; d = yyvsp[-1].ival; y = yyvsp[0].ival; ;
+- break;}
+-case 26:
+-#line 159 "parseholiday.y"
+-{ m = yyvsp[0].ival; d = yyvsp[-1].ival; y = 0; ;
+- break;}
+-case 27:
++ { (yyval.ival) = ((yyvsp[(2) - (4)].ival)<<8) | (yyvsp[(4) - (4)].ival);printf("Shift to %i if %i\n", (yyvsp[(2) - (4)].ival), (yyvsp[(4) - (4)].ival)); }
++ break;
++
++ case 20:
+ #line 160 "parseholiday.y"
+-{ m = yyvsp[-1].ival; d = yyvsp[-2].ival; y = yyvsp[0].ival; ;
+- break;}
+-case 28:
++ { (yyval.ival) = 0; }
++ break;
++
++ case 21:
+ #line 161 "parseholiday.y"
+-{ m = yyvsp[-1].ival; d = yyvsp[-3].ival; y = yyvsp[0].ival; ;
+- break;}
+-case 29:
++ { (yyval.ival) = (1<<(yyvsp[(1) - (1)].ival)); }
++ break;
++
++ case 22:
+ #line 162 "parseholiday.y"
+-{ monthday_from_day(yyvsp[0].ival,
+- &m, &d, &y); ;
+- break;}
+-case 30:
++ { (yyval.ival) = (1<<(yyvsp[(1) - (3)].ival)) | (yyvsp[(3) - (3)].ival); }
++ break;
++
++ case 23:
++#line 165 "parseholiday.y"
++ { (yyval.ival) = 1; }
++ break;
++
++ case 24:
+ #line 166 "parseholiday.y"
+-{ yyval.ival = day_from_name(yyvsp[0].sval); ;
+- break;}
+-case 31:
+-#line 167 "parseholiday.y"
+-{ yyval.ival = day_from_easter(); ;
+- break;}
+-case 32:
+-#line 168 "parseholiday.y"
+-{ yyval.ival = day_from_monthday
+- (yyvsp[0].ival, yyvsp[-2].ival); ;
+- break;}
+-case 33:
++ { (yyval.ival) = (yyvsp[(2) - (2)].ival); }
++ break;
++
++ case 25:
++#line 169 "parseholiday.y"
++ { m = (yyvsp[(3) - (3)].ival); d = (yyvsp[(1) - (3)].ival); y = 0; }
++ break;
++
++ case 26:
+ #line 170 "parseholiday.y"
+-{ yyval.ival = day_from_monthday
+- (yyvsp[-1].ival, yyvsp[-3].ival); ;
+- break;}
+-case 34:
++ { m = (yyvsp[(3) - (4)].ival); d = (yyvsp[(1) - (4)].ival); y = 0; }
++ break;
++
++ case 27:
++#line 171 "parseholiday.y"
++ { m = (yyvsp[(3) - (5)].ival); d = (yyvsp[(1) - (5)].ival); y = (yyvsp[(5) - (5)].ival); }
++ break;
++
++ case 28:
+ #line 172 "parseholiday.y"
+-{ yyval.ival = day_from_monthday
+- (yyvsp[-2].ival, yyvsp[0].ival); ;
+- break;}
+-case 35:
++ { m = (yyvsp[(1) - (3)].ival); d = (yyvsp[(3) - (3)].ival); y = 0; }
++ break;
++
++ case 29:
++#line 173 "parseholiday.y"
++ { m = (yyvsp[(1) - (5)].ival); d = (yyvsp[(3) - (5)].ival); y = (yyvsp[(5) - (5)].ival); }
++ break;
++
++ case 30:
+ #line 174 "parseholiday.y"
+-{ yyval.ival = day_from_monthday
+- (yyvsp[0].ival, yyvsp[-1].ival); ;
+- break;}
+-case 36:
++ { m = (yyvsp[(1) - (2)].ival); d = (yyvsp[(2) - (2)].ival); y = 0; }
++ break;
++
++ case 31:
++#line 175 "parseholiday.y"
++ { m = (yyvsp[(1) - (3)].ival); d = (yyvsp[(2) - (3)].ival); y = (yyvsp[(3) - (3)].ival); }
++ break;
++
++ case 32:
+ #line 176 "parseholiday.y"
+-{ yyval.ival = day_from_monthday
+- (yyvsp[-1].ival, yyvsp[0].ival); ;
+- break;}
+-case 37:
++ { m = (yyvsp[(2) - (2)].ival); d = (yyvsp[(1) - (2)].ival); y = 0; }
++ break;
++
++ case 33:
++#line 177 "parseholiday.y"
++ { m = (yyvsp[(2) - (3)].ival); d = (yyvsp[(1) - (3)].ival); y = (yyvsp[(3) - (3)].ival); }
++ break;
++
++ case 34:
+ #line 178 "parseholiday.y"
+-{ yyval.ival = day_from_wday(yyvsp[0].ival, yyvsp[-2].ival,
+- yyvsp[-1].ival == -1 ? -1 : 0); ;
+- break;}
+-case 38:
+-#line 180 "parseholiday.y"
+-{ int d=day_from_monthday(yyvsp[0].ival,1);
+- yyval.ival = yyvsp[-3].ival == 999
+- ? day_from_wday(d+1,yyvsp[-2].ival,-1)
+- : day_from_wday(d,yyvsp[-2].ival,yyvsp[-3].ival-1);;
+- break;}
+-case 41:
+-#line 188 "parseholiday.y"
+-{ yyval.ival = yyvsp[0].ival; ;
+- break;}
+-case 42:
++ { m = (yyvsp[(3) - (4)].ival); d = (yyvsp[(1) - (4)].ival); y = (yyvsp[(4) - (4)].ival); }
++ break;
++
++ case 35:
++#line 179 "parseholiday.y"
++ { monthday_from_day((yyvsp[(1) - (1)].ival),
++ &m, &d, &y); }
++ break;
++
++ case 36:
++#line 183 "parseholiday.y"
++ { (yyval.ival) = day_from_name((yyvsp[(1) - (1)].sval)); }
++ break;
++
++ case 37:
++#line 184 "parseholiday.y"
++ { (yyval.ival) = day_from_easter(); }
++ break;
++
++ case 38:
++#line 185 "parseholiday.y"
++ { (yyval.ival) = day_from_monthday
++ ((yyvsp[(3) - (3)].ival), (yyvsp[(1) - (3)].ival)); }
++ break;
++
++ case 39:
++#line 187 "parseholiday.y"
++ { (yyval.ival) = day_from_monthday
++ ((yyvsp[(3) - (4)].ival), (yyvsp[(1) - (4)].ival)); }
++ break;
++
++ case 40:
+ #line 189 "parseholiday.y"
+-{ yyval.ival = yyvsp[-2].ival || yyvsp[0].ival; ;
+- break;}
+-case 43:
+-#line 190 "parseholiday.y"
+-{ yyval.ival = yyvsp[-2].ival && yyvsp[0].ival; ;
+- break;}
+-case 44:
++ { (yyval.ival) = day_from_monthday
++ ((yyvsp[(1) - (3)].ival), (yyvsp[(3) - (3)].ival)); }
++ break;
++
++ case 41:
+ #line 191 "parseholiday.y"
+-{ yyval.ival = yyvsp[-2].ival == yyvsp[0].ival; ;
+- break;}
+-case 45:
+-#line 192 "parseholiday.y"
+-{ yyval.ival = yyvsp[-2].ival != yyvsp[0].ival; ;
+- break;}
+-case 46:
++ { (yyval.ival) = day_from_monthday
++ ((yyvsp[(2) - (2)].ival), (yyvsp[(1) - (2)].ival)); }
++ break;
++
++ case 42:
+ #line 193 "parseholiday.y"
+-{ yyval.ival = yyvsp[-2].ival <= yyvsp[0].ival; ;
+- break;}
+-case 47:
+-#line 194 "parseholiday.y"
+-{ yyval.ival = yyvsp[-2].ival >= yyvsp[0].ival; ;
+- break;}
+-case 48:
++ { (yyval.ival) = day_from_monthday
++ ((yyvsp[(1) - (2)].ival), (yyvsp[(2) - (2)].ival)); }
++ break;
++
++ case 43:
+ #line 195 "parseholiday.y"
+-{ yyval.ival = yyvsp[-2].ival < yyvsp[0].ival; ;
+- break;}
+-case 49:
+-#line 196 "parseholiday.y"
+-{ yyval.ival = yyvsp[-2].ival > yyvsp[0].ival; ;
+- break;}
+-case 50:
++ { (yyval.ival) = day_from_wday((yyvsp[(3) - (3)].ival), (yyvsp[(1) - (3)].ival),
++ (yyvsp[(2) - (3)].ival) == -1 ? -1 : 0); }
++ break;
++
++ case 44:
+ #line 197 "parseholiday.y"
+-{ yyval.ival = yyvsp[-2].ival + yyvsp[0].ival; ;
+- break;}
+-case 51:
+-#line 198 "parseholiday.y"
+-{ yyval.ival = yyvsp[-2].ival - yyvsp[0].ival; ;
+- break;}
+-case 52:
+-#line 199 "parseholiday.y"
+-{ yyval.ival = yyvsp[-2].ival * yyvsp[0].ival; ;
+- break;}
+-case 53:
+-#line 200 "parseholiday.y"
+-{ yyval.ival = yyvsp[0].ival ? yyvsp[-2].ival / yyvsp[0].ival : 0; ;
+- break;}
+-case 54:
+-#line 201 "parseholiday.y"
+-{ yyval.ival = yyvsp[0].ival ? yyvsp[-2].ival % yyvsp[0].ival : 0; ;
+- break;}
+-case 55:
+-#line 202 "parseholiday.y"
+-{ yyval.ival = yyvsp[-4].ival ? yyvsp[-2].ival : yyvsp[0].ival; ;
+- break;}
+-case 56:
+-#line 203 "parseholiday.y"
+-{ yyval.ival = !yyvsp[0].ival; ;
+- break;}
+-case 57:
+-#line 204 "parseholiday.y"
+-{ yyval.ival = yyvsp[-1].ival; ;
+- break;}
+-case 58:
++ { int day=day_from_monthday((yyvsp[(4) - (4)].ival),1);
++ (yyval.ival) = (yyvsp[(1) - (4)].ival) == 999
++ ? day_from_wday(day+1,(yyvsp[(2) - (4)].ival),-1)
++ : day_from_wday(day,(yyvsp[(2) - (4)].ival),(yyvsp[(1) - (4)].ival)-1);}
++ break;
++
++ case 47:
++#line 205 "parseholiday.y"
++ { (yyval.ival) = (yyvsp[(1) - (1)].ival); }
++ break;
++
++ case 48:
++#line 206 "parseholiday.y"
++ { (yyval.ival) = (yyvsp[(1) - (3)].ival) || (yyvsp[(3) - (3)].ival); }
++ break;
++
++ case 49:
+ #line 207 "parseholiday.y"
+-{ yyval.ival = yyvsp[-1].ival; ;
+- break;}
+-case 59:
++ { (yyval.ival) = (yyvsp[(1) - (3)].ival) && (yyvsp[(3) - (3)].ival); }
++ break;
++
++ case 50:
+ #line 208 "parseholiday.y"
+-{ yyval.ival = yyvsp[0].ival; ;
+- break;}
+-case 61:
++ { (yyval.ival) = (yyvsp[(1) - (3)].ival) == (yyvsp[(3) - (3)].ival); }
++ break;
++
++ case 51:
++#line 209 "parseholiday.y"
++ { (yyval.ival) = (yyvsp[(1) - (3)].ival) != (yyvsp[(3) - (3)].ival); }
++ break;
++
++ case 52:
++#line 210 "parseholiday.y"
++ { (yyval.ival) = (yyvsp[(1) - (3)].ival) <= (yyvsp[(3) - (3)].ival); }
++ break;
++
++ case 53:
++#line 211 "parseholiday.y"
++ { (yyval.ival) = (yyvsp[(1) - (3)].ival) >= (yyvsp[(3) - (3)].ival); }
++ break;
++
++ case 54:
+ #line 212 "parseholiday.y"
+-{ yyval.ival = -yyvsp[0].ival; ;
+- break;}
+-case 62:
++ { (yyval.ival) = (yyvsp[(1) - (3)].ival) < (yyvsp[(3) - (3)].ival); }
++ break;
++
++ case 55:
+ #line 213 "parseholiday.y"
+-{ yyval.ival = parse_year; ;
+- break;}
+-case 63:
++ { (yyval.ival) = (yyvsp[(1) - (3)].ival) > (yyvsp[(3) - (3)].ival); }
++ break;
++
++ case 56:
+ #line 214 "parseholiday.y"
+-{ yyval.ival = !((yyvsp[0].ival) & 3); ;
+- break;}
+-}
++ { (yyval.ival) = (yyvsp[(1) - (3)].ival) + (yyvsp[(3) - (3)].ival); }
++ break;
+
+-#line 705 "/usr/share/bison/bison.simple"
++ case 57:
++#line 215 "parseholiday.y"
++ { (yyval.ival) = (yyvsp[(1) - (3)].ival) - (yyvsp[(3) - (3)].ival); }
++ break;
+
+-
+- yyvsp -= yylen;
+- yyssp -= yylen;
+-#if YYLSP_NEEDED
+- yylsp -= yylen;
+-#endif
++ case 58:
++#line 216 "parseholiday.y"
++ { (yyval.ival) = (yyvsp[(1) - (3)].ival) * (yyvsp[(3) - (3)].ival); }
++ break;
+
+-#if YYDEBUG
+- if (yydebug)
+- {
+- short *yyssp1 = yyss - 1;
+- YYFPRINTF (stderr, "state stack now");
+- while (yyssp1 != yyssp)
+- YYFPRINTF (stderr, " %d", *++yyssp1);
+- YYFPRINTF (stderr, "\n");
++ case 59:
++#line 217 "parseholiday.y"
++ { (yyval.ival) = (yyvsp[(3) - (3)].ival) ? (yyvsp[(1) - (3)].ival) / (yyvsp[(3) - (3)].ival) : 0; }
++ break;
++
++ case 60:
++#line 218 "parseholiday.y"
++ { (yyval.ival) = (yyvsp[(3) - (3)].ival) ? (yyvsp[(1) - (3)].ival) % (yyvsp[(3) - (3)].ival) : 0; }
++ break;
++
++ case 61:
++#line 219 "parseholiday.y"
++ { (yyval.ival) = (yyvsp[(1) - (5)].ival) ? (yyvsp[(3) - (5)].ival) : (yyvsp[(5) - (5)].ival); }
++ break;
++
++ case 62:
++#line 220 "parseholiday.y"
++ { (yyval.ival) = !(yyvsp[(2) - (2)].ival); }
++ break;
++
++ case 63:
++#line 221 "parseholiday.y"
++ { (yyval.ival) = (yyvsp[(2) - (3)].ival); }
++ break;
++
++ case 64:
++#line 224 "parseholiday.y"
++ { (yyval.ival) = (yyvsp[(2) - (3)].ival); }
++ break;
++
++ case 65:
++#line 225 "parseholiday.y"
++ { (yyval.ival) = (yyvsp[(1) - (1)].ival); }
++ break;
++
++ case 67:
++#line 229 "parseholiday.y"
++ { (yyval.ival) = -(yyvsp[(2) - (2)].ival); }
++ break;
++
++ case 68:
++#line 230 "parseholiday.y"
++ { (yyval.ival) = parse_year; }
++ break;
++
++ case 69:
++#line 231 "parseholiday.y"
++ { (yyval.ival) = !(((yyvsp[(2) - (2)].ival)) & 3); }
++ break;
++
++
++/* Line 1267 of yacc.c. */
++#line 1940 "parseholiday.c"
++ default: break;
+ }
+-#endif
++ YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
+
++ YYPOPSTACK (yylen);
++ yylen = 0;
++ YY_STACK_PRINT (yyss, yyssp);
++
+ *++yyvsp = yyval;
+-#if YYLSP_NEEDED
+- *++yylsp = yyloc;
+-#endif
+
++
+ /* Now `shift' the result of the reduction. Determine what state
+ that goes to, based on the state we popped back to and the rule
+ number reduced by. */
+
+ yyn = yyr1[yyn];
+
+- yystate = yypgoto[yyn - YYNTBASE] + *yyssp;
+- if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
++ yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
++ if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
+ yystate = yytable[yystate];
+ else
+- yystate = yydefgoto[yyn - YYNTBASE];
++ yystate = yydefgoto[yyn - YYNTOKENS];
+
+ goto yynewstate;
+
+@@ -1399,156 +1971,130 @@
+ if (!yyerrstatus)
+ {
+ ++yynerrs;
++#if ! YYERROR_VERBOSE
++ yyerror (YY_("syntax error"));
++#else
++ {
++ YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
++ if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
++ {
++ YYSIZE_T yyalloc = 2 * yysize;
++ if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
++ yyalloc = YYSTACK_ALLOC_MAXIMUM;
++ if (yymsg != yymsgbuf)
++ YYSTACK_FREE (yymsg);
++ yymsg = (char *) YYSTACK_ALLOC (yyalloc);
++ if (yymsg)
++ yymsg_alloc = yyalloc;
++ else
++ {
++ yymsg = yymsgbuf;
++ yymsg_alloc = sizeof yymsgbuf;
++ }
++ }
+
+-#ifdef YYERROR_VERBOSE
+- yyn = yypact[yystate];
++ if (0 < yysize && yysize <= yymsg_alloc)
++ {
++ (void) yysyntax_error (yymsg, yystate, yychar);
++ yyerror (yymsg);
++ }
++ else
++ {
++ yyerror (YY_("syntax error"));
++ if (yysize != 0)
++ goto yyexhaustedlab;
++ }
++ }
++#endif
++ }
+
+- if (yyn > YYFLAG && yyn < YYLAST)
+- {
+- YYSIZE_T yysize = 0;
+- char *yymsg;
+- int yyx, yycount;
+
+- yycount = 0;
+- /* Start YYX at -YYN if negative to avoid negative indexes in
+- YYCHECK. */
+- for (yyx = yyn < 0 ? -yyn : 0;
+- yyx < (int) (sizeof (yytname) / sizeof (char *)); yyx++)
+- if (yycheck[yyx + yyn] == yyx)
+- yysize += yystrlen (yytname[yyx]) + 15, yycount++;
+- yysize += yystrlen ("parse error, unexpected ") + 1;
+- yysize += yystrlen (yytname[YYTRANSLATE (yychar)]);
+- yymsg = (char *) YYSTACK_ALLOC (yysize);
+- if (yymsg != 0)
+- {
+- char *yyp = yystpcpy (yymsg, "parse error, unexpected ");
+- yyp = yystpcpy (yyp, yytname[YYTRANSLATE (yychar)]);
+
+- if (yycount < 5)
+- {
+- yycount = 0;
+- for (yyx = yyn < 0 ? -yyn : 0;
+- yyx < (int) (sizeof (yytname) / sizeof (char *));
+- yyx++)
+- if (yycheck[yyx + yyn] == yyx)
+- {
+- const char *yyq = ! yycount ? ", expecting " : " or ";
+- yyp = yystpcpy (yyp, yyq);
+- yyp = yystpcpy (yyp, yytname[yyx]);
+- yycount++;
+- }
+- }
+- yyerror (yymsg);
+- YYSTACK_FREE (yymsg);
+- }
+- else
+- yyerror ("parse error; also virtual memory exhausted");
+- }
+- else
+-#endif /* defined (YYERROR_VERBOSE) */
+- yyerror ("parse error");
+- }
+- goto yyerrlab1;
+-
+-
+-/*--------------------------------------------------.
+-| yyerrlab1 -- error raised explicitly by an action |
+-`--------------------------------------------------*/
+-yyerrlab1:
+ if (yyerrstatus == 3)
+ {
+- /* If just tried and failed to reuse lookahead token after an
++ /* If just tried and failed to reuse look-ahead token after an
+ error, discard it. */
+
+- /* return failure if at end of input */
+- if (yychar == YYEOF)
+- YYABORT;
+- YYDPRINTF ((stderr, "Discarding token %d (%s).\n",
+- yychar, yytname[yychar1]));
+- yychar = YYEMPTY;
++ if (yychar <= YYEOF)
++ {
++ /* Return failure if at end of input. */
++ if (yychar == YYEOF)
++ YYABORT;
++ }
++ else
++ {
++ yydestruct ("Error: discarding",
++ yytoken, &yylval);
++ yychar = YYEMPTY;
++ }
+ }
+
+- /* Else will try to reuse lookahead token after shifting the error
++ /* Else will try to reuse look-ahead token after shifting the error
+ token. */
++ goto yyerrlab1;
+
+- yyerrstatus = 3; /* Each real token shifted decrements this */
+
+- goto yyerrhandle;
++/*---------------------------------------------------.
++| yyerrorlab -- error raised explicitly by YYERROR. |
++`---------------------------------------------------*/
++yyerrorlab:
+
++ /* Pacify compilers like GCC when the user code never invokes
++ YYERROR and the label yyerrorlab therefore never appears in user
++ code. */
++ if (/*CONSTCOND*/ 0)
++ goto yyerrorlab;
+
+-/*-------------------------------------------------------------------.
+-| yyerrdefault -- current state does not do anything special for the |
+-| error token. |
+-`-------------------------------------------------------------------*/
+-yyerrdefault:
+-#if 0
+- /* This is wrong; only states that explicitly want error tokens
+- should shift them. */
++ /* Do not reclaim the symbols of the rule which action triggered
++ this YYERROR. */
++ YYPOPSTACK (yylen);
++ yylen = 0;
++ YY_STACK_PRINT (yyss, yyssp);
++ yystate = *yyssp;
++ goto yyerrlab1;
+
+- /* If its default is to accept any token, ok. Otherwise pop it. */
+- yyn = yydefact[yystate];
+- if (yyn)
+- goto yydefault;
+-#endif
+
++/*-------------------------------------------------------------.
++| yyerrlab1 -- common code for both syntax error and YYERROR. |
++`-------------------------------------------------------------*/
++yyerrlab1:
++ yyerrstatus = 3; /* Each real token shifted decrements this. */
+
+-/*---------------------------------------------------------------.
+-| yyerrpop -- pop the current state because it cannot handle the |
+-| error token |
+-`---------------------------------------------------------------*/
+-yyerrpop:
+- if (yyssp == yyss)
+- YYABORT;
+- yyvsp--;
+- yystate = *--yyssp;
+-#if YYLSP_NEEDED
+- yylsp--;
+-#endif
+-
+-#if YYDEBUG
+- if (yydebug)
++ for (;;)
+ {
+- short *yyssp1 = yyss - 1;
+- YYFPRINTF (stderr, "Error: state stack now");
+- while (yyssp1 != yyssp)
+- YYFPRINTF (stderr, " %d", *++yyssp1);
+- YYFPRINTF (stderr, "\n");
+- }
+-#endif
++ yyn = yypact[yystate];
++ if (yyn != YYPACT_NINF)
++ {
++ yyn += YYTERROR;
++ if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
++ {
++ yyn = yytable[yyn];
++ if (0 < yyn)
++ break;
++ }
++ }
+
+-/*--------------.
+-| yyerrhandle. |
+-`--------------*/
+-yyerrhandle:
+- yyn = yypact[yystate];
+- if (yyn == YYFLAG)
+- goto yyerrdefault;
++ /* Pop the current state because it cannot handle the error token. */
++ if (yyssp == yyss)
++ YYABORT;
+
+- yyn += YYTERROR;
+- if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
+- goto yyerrdefault;
+
+- yyn = yytable[yyn];
+- if (yyn < 0)
+- {
+- if (yyn == YYFLAG)
+- goto yyerrpop;
+- yyn = -yyn;
+- goto yyreduce;
++ yydestruct ("Error: popping",
++ yystos[yystate], yyvsp);
++ YYPOPSTACK (1);
++ yystate = *yyssp;
++ YY_STACK_PRINT (yyss, yyssp);
+ }
+- else if (yyn == 0)
+- goto yyerrpop;
+
+ if (yyn == YYFINAL)
+ YYACCEPT;
+
+- YYDPRINTF ((stderr, "Shifting error token, "));
+-
+ *++yyvsp = yylval;
+-#if YYLSP_NEEDED
+- *++yylsp = yylloc;
+-#endif
+
++
++ /* Shift the error token. */
++ YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
++
+ yystate = yyn;
+ goto yynewstate;
+
+@@ -1567,26 +2113,48 @@
+ yyresult = 1;
+ goto yyreturn;
+
+-/*---------------------------------------------.
+-| yyoverflowab -- parser overflow comes here. |
+-`---------------------------------------------*/
+-yyoverflowlab:
+- yyerror ("parser stack overflow");
++#ifndef yyoverflow
++/*-------------------------------------------------.
++| yyexhaustedlab -- memory exhaustion comes here. |
++`-------------------------------------------------*/
++yyexhaustedlab:
++ yyerror (YY_("memory exhausted"));
+ yyresult = 2;
+ /* Fall through. */
++#endif
+
+ yyreturn:
++ if (yychar != YYEOF && yychar != YYEMPTY)
++ yydestruct ("Cleanup: discarding lookahead",
++ yytoken, &yylval);
++ /* Do not reclaim the symbols of the rule which action triggered
++ this YYABORT or YYACCEPT. */
++ YYPOPSTACK (yylen);
++ YY_STACK_PRINT (yyss, yyssp);
++ while (yyssp != yyss)
++ {
++ yydestruct ("Cleanup: popping",
++ yystos[*yyssp], yyvsp);
++ YYPOPSTACK (1);
++ }
+ #ifndef yyoverflow
+ if (yyss != yyssa)
+ YYSTACK_FREE (yyss);
+ #endif
+- return yyresult;
++#if YYERROR_VERBOSE
++ if (yymsg != yymsgbuf)
++ YYSTACK_FREE (yymsg);
++#endif
++ /* Make sure YYID is used. */
++ return YYID (yyresult);
+ }
+-#line 216 "parseholiday.y"
+
++
++#line 233 "parseholiday.y"
++
+
+ /*** Private Yacc callbacks and helper functions ***/
+-static void kcalerror(char *msg)
++static void kcalerror(const char *msg)
+ {
+ fprintf(stderr, "%s: %s in line %d of %s\n", progname,
+ msg, kcallineno+1, filename);
+@@ -1600,7 +2168,7 @@
+ int *wkday, int *julian, int *weeknum)
+ {
+ struct tm tm;
+- time_t time;
++ time_t ttime;
+
+ tm.tm_sec = 0;
+ tm.tm_min = 0;
+@@ -1608,7 +2176,7 @@
+ tm.tm_mday = day;
+ tm.tm_mon = month;
+ tm.tm_year = year;
+- time = tm_to_time(&tm);
++ ttime = tm_to_time(&tm);
+ if (wkday)
+ *wkday = tm.tm_wday;
+ if (julian)
+@@ -1617,7 +2185,7 @@
+ *weeknum = 0
+ ? tm.tm_yday / 7
+ : tm.tm_yday ? ((tm.tm_yday - 1) /7) + 1 : 0;
+- return(time == -1 || day != tm.tm_mday ? 0 : time);
++ return(ttime == -1 || day != tm.tm_mday ? 0 : ttime);
+ }
+
+ static time_t tm_to_time(struct tm *tm)
+@@ -1649,8 +2217,8 @@
+ {
+ int min_month = 0, max_month = 11;
+ int min_num = 0, max_num = 4;
+- int m, n, d, l, mlen, wday1;
+- int dup = 0;
++ int mn, n, dy, l, mlen, wday1;
++ int ddup = 0;
+
+ if (month != ANY)
+ min_month = max_month = month-1;
+@@ -1660,19 +2228,19 @@
+ min_num = max_num = num-1;
+
+ holiday_name = yacc_string;
+- for (m=min_month; m <= max_month; m++) {
+- (void)date_to_time(1, m, parse_year, &wday1, 0, 0);
+- d = (wday-1 - (wday1-1) +7) % 7 + 1;
+- mlen = monthlen[m] + (m==1 && ISLEAPYEAR(parse_year));
++ for (mn=min_month; mn <= max_month; mn++) {
++ (void)date_to_time(1, mn, parse_year, &wday1, 0, 0);
++ dy = (wday-1 - (wday1-1) +7) % 7 + 1;
++ mlen = monthlen[mn] + (mn==1 && ISLEAPYEAR(parse_year));
+ if (num == LAST)
+ for (l=0; l < length; l++)
+- setliteraldate(m, d+28<=mlen ? d+28 : d+21,
+- off+l, &dup);
++ setliteraldate(mn, dy+28<=mlen ? dy+28 : dy+21,
++ off+l, &ddup);
+ else
+- for (d+=min_num*7, n=min_num; n <= max_num; n++, d+=7)
+- if (d >= 1 && d <= mlen)
++ for (dy+=min_num*7, n=min_num; n <= max_num; n++, dy+=7)
++ if (dy >= 1 && dy <= mlen)
+ for (l=0; l < length; l++)
+- setliteraldate(m,d,off+l,&dup);
++ setliteraldate(mn,dy,off+l,&ddup);
+ }
+ }
+
+@@ -1687,8 +2255,8 @@
+ {
+ int min_month = 0, max_month = 11;
+ int min_day = 1, max_day = 31;
+- int m, d, nd, l, wday1;
+- int dup = 0;
++ int mn, dy, nd, l, wday1;
++ int ddup = 0;
+
+ if (year != ANY) {
+ year %= 100;
+@@ -1704,25 +2272,46 @@
+ min_day = max_day = day;
+
+ holiday_name = yacc_string;
+- for (m=min_month; m <= max_month; m++)
++ for (mn=min_month; mn <= max_month; mn++)
+ if (day == LAST) {
+- (void)date_to_time(monthlen[m], m, parse_year,
++ (void)date_to_time(monthlen[mn], mn, parse_year,
+ &wday1, 0, 0);
+ nd = (((wday - wday1 + 7) % 7) -
+ ((rel == BEFORE) ? 7 : 0)) % 7;
+ for (l=0; l < length; l++)
+- setliteraldate(m,monthlen[m]+nd, off+l, &dup);
++ setliteraldate(mn,monthlen[mn]+nd, off+l, &ddup);
+ } else
+- for (d=min_day; d <= max_day; d++) {
+- (void)date_to_time(d, m, parse_year,
++ for (dy=min_day; dy <= max_day; dy++) {
++ (void)date_to_time(dy, mn, parse_year,
+ &wday1, 0, 0);
+ nd = (((wday - wday1 + 7) % 7) -
+ ((rel == BEFORE) ? 7 : 0)) % 7;
+ for (l=0; l < length; l++)
+- setliteraldate(m, d+nd, off+l, &dup);
++ setliteraldate(mn, dy+nd, off+l, &ddup);
+ }
+ }
+
++static int conditionalOffset( int day, int month, int year, int cond )
++{
++printf("ConditionalOffset: %i.%i.%i, condition=%i\n", day, month, year, cond );
++ int off = 0;
++ int wday = 0;
++ (void)date_to_time( day, month, year, &wday, 0, 0);
++ if ( wday == 0 ) { wday = 7; } /* sunday is 7, not 0 */
++printf("Date is a %i\n", wday );
++ if ( cond & (1<<wday) ) {
++printf(" Matches condition\n");
++ /* condition matches -> higher 8 bits contain the possible days to shift to */
++ int to = (cond >> 8);
++printf(" To condition: %i\n", to);
++ while ( !(to & (1<<((wday+off)%7))) && (off < 8) ) {
++ ++off;
++ }
++printf(" Resulting offset: %i\n", off);
++ }
++ if ( off >= 8 ) return 0;
++ else return off;
++}
+
+ /*
+ * set holiday by date. Ignore holidays in the wrong year. The code is
+@@ -1730,12 +2319,12 @@
+ * the month).
+ */
+
+-static void setdate(int month, int day, int year, int off, int length)
++static void setdate(int month, int day, int year, int off, int conditionaloff, int length)
+ {
+ int min_month = 0, max_month = 11;
+ int min_day = 1, max_day = 31;
+- int m, d, l;
+- int dup = 0;
++ int mn, dy, l;
++ int ddup = 0;
+
+ if (year != ANY) {
+ year %= 100;
+@@ -1751,14 +2340,24 @@
+ min_day = max_day = day;
+
+ holiday_name = yacc_string;
+- for (m=min_month; m <= max_month; m++)
+- if (day == LAST)
++ /** TODO: Include the conditionaloff variable. */
++ /** The encoding of the conditional offset is:
++ 8 lower bits: conditions to shift (bit-register, bit 1=mon, ..., bit 7=sun)
++ 8 higher bits: weekday to shift to (bit-register, bit 1=mon, ..., bit 7=sun)
++ */
++ for (mn=min_month; mn <= max_month; mn++) {
++ if (day == LAST) {
++ int newoff = off + conditionalOffset( monthlen[mn], mn, parse_year, conditionaloff );
+ for (l=0; l < length; l++)
+- setliteraldate(m, monthlen[m], off+l, &dup);
+- else
+- for (d=min_day; d <= max_day; d++)
++ setliteraldate(mn, monthlen[mn], newoff+l, &ddup);
++ } else {
++ for (dy=min_day; dy <= max_day; dy++) {
++ int newoff = off + conditionalOffset( dy, mn, parse_year, conditionaloff );
+ for (l=0; l < length; l++)
+- setliteraldate(m, d, off+l, &dup);
++ setliteraldate(mn, dy, newoff+l, &ddup);
++ }
++ }
++ }
+ }
+
+
+@@ -1768,25 +2367,34 @@
+ * array. There are two of these, for full-line holidays (they take away one
+ * appointment line in the month calendar daybox) and "small" holidays, which
+ * appear next to the day number. If the day is already some other holiday,
+- * ignore the new one. <dup> is information stored for parse_holidays(), it
++ * add a new item to the singly-linked list and insert the holiday there.
++ * <ddup> is information stored for parse_holidays(), it
+ * will free() the holiday name only if its dup field is 0 (because many
+ * string fields can point to the same string, which was allocated only once
+ * by the lexer, and should therefore only be freed once).
+ */
+
+-static void setliteraldate(int month, int day, int off, int *dup)
++static void setliteraldate(int month, int day, int off, int *ddup)
+ {
+ int julian = JULIAN(month, day) + off;
+ /* struct holiday *hp = yacc_small ? &sm_holiday[julian]
+ : &holiday[julian]; */
+- struct holiday *hp = &holiday[julian];
++ struct holiday *hp = 0;
+
+- if (julian >= 0 && julian <= 365 && !hp->string) {
+- if (!*dup)
++ if (julian >= 0 && julian <= 365 ) {
++ hp = &holidays[julian];
++ if ( hp->string ) {
++ while (hp->next) { hp = hp->next; }
++ hp->next = malloc( sizeof(struct holiday)*2 );
++ hp = hp->next;
++ hp->next = 0;
++ }
++ if (!*ddup)
+ holiday_name = strdup(holiday_name);
+ hp->string = holiday_name;
+ hp->color = (yacc_stringcolor == 0) ? yacc_daycolor : yacc_stringcolor;
+- hp->dup = (*dup)++;
++ hp->dup = (*ddup)++;
++
+ }
+ }
+
+@@ -1797,22 +2405,29 @@
+
+ static void seteaster(int off, int length)
+ {
+- int dup = 0; /* flag for later free() */
++ int ddup = 0; /* flag for later free() */
+ int julian = easter_julian + off;
+ /* struct holiday *hp = yacc_small ? &sm_holiday[julian]
+- : &holiday[julian];*/
+- struct holiday *hp = &holiday[julian];
++ : &holidays[julian];*/
++ struct holiday *hp = 0;
+
+ holiday_name = yacc_string;
+ while (length-- > 0) {
+- if (julian >= 0 && julian <= 365 && !hp->string) {
+- if (!dup)
++ if (julian >= 0 && julian <= 365 ) {
++ hp = &holidays[julian];
++ if ( hp->string ) {
++ while (hp->next) { hp = hp->next; }
++ hp->next = malloc( sizeof(struct holiday)*2 );
++ hp = hp->next;
++ hp->next = 0;
++ }
++ if (!ddup)
+ holiday_name = strdup(holiday_name);
+ hp->string = holiday_name;
+ hp->color = (yacc_stringcolor == 0) ? yacc_daycolor : yacc_stringcolor;
+- hp->dup = dup++;
++ hp->dup = ddup++;
+ }
+- julian++, hp++;
++ julian++;
+ }
+ }
+
+@@ -1861,7 +2476,7 @@
+ *
+ * day_from_name (str) gets day from symbolic name
+ * day_from_easter () gets day as easter sunday
+- * day_from_monthday (m, d) gets <day> from <month/day>
++ * day_from_monthday (month, day) gets <day> from <month/day>
+ * day_from_wday (day, wday, num) gets num-th day (wday) after <day> day
+ * monthday_from_day (day, *m, *d, *y) gets month/day/cur_year from <day>
+ */
+@@ -1872,7 +2487,7 @@
+ char *name;
+
+ for (i=0; i < 366; i++) {
+- name = holiday[i].string;
++ name = holidays[i].string;
+ if (name && !strcmp(str, name))
+ return(i);
+ }
+@@ -1886,28 +2501,28 @@
+ }
+
+
+-static int day_from_monthday(int m, int d)
++static int day_from_monthday(int month, int day)
+ {
+- if (m == 13)
++ if (month == 13)
+ return(365 + ISLEAPYEAR(parse_year));
+- return(JULIAN(m - 1, d));
++ return(JULIAN(month - 1, day));
+ }
+
+
+-static void monthday_from_day(int day, int *m, int *d, int *y)
++static void monthday_from_day(int day, int *mn, int *dy, int *yr)
+ {
+ int i, len;
+
+- *y = parse_year;
+- *m = 0;
+- *d = 0;
++ *yr = parse_year;
++ *mn = 0;
++ *dy = 0;
+ if (day < 0)
+ return;
+ for (i=0; i < 12; i++) {
+ len = monthlen[i] + (i == 1 && ISLEAPYEAR(parse_year));
+ if (day < len) {
+- *m = i + 1;
+- *d = day + 1;
++ *mn = i + 1;
++ *dy = day + 1;
+ break;
+ }
+ day -= len;
+@@ -1925,34 +2540,18 @@
+ return (day);
+ }
+
+-static char *resolve_tilde(char *path)
++static void initialize()
+ {
+- struct passwd *pw; /* for searching home dirs */
+- static char pathbuf[512]; /* path with ~ expanded */
+- char *p, *q; /* username copy pointers */
+- char *home = 0; /* home dir (if ~ in path) */
+-
+- if (*path != '~')
+- return(path);
+-
+- if (!path[1] || path[1] == '/') {
+- *pathbuf = 0;
+- if (!(home = getenv("HOME")))
+- home = getenv("home");
+- } else {
+- for (p=path+1, q=pathbuf; *p && *p != '/'; p++, q++)
+- *q = *p;
+- *q = 0;
+- if ((pw = getpwnam(pathbuf)))
+- home = pw->pw_dir;
++ initialized = 1;
++ register struct holiday *hp;
++ register int dy;
++ for (hp=holidays, dy=0; dy < 366; dy++, hp++)
++ {
++ hp->color = 0;
++ hp->dup = 0;
++ hp->string = 0;
++ hp->next = 0;
+ }
+- if (!home) {
+- fprintf(stderr, "%s: can't evaluate ~%s in %s, using .\n",
+- progname, pathbuf, path);
+- home = ".";
+- }
+- sprintf(pathbuf, "%s/%s", home, path+1);
+- return(pathbuf);
+ }
+
+ /*** Public Functions ***/
+@@ -1964,13 +2563,13 @@
+ * Return an error message if an error occurred, 0 otherwise.
+ */
+
+-char *parse_holidays(const char *holidays, int year, short force)
++char *parse_holidays(const char *holidayfile, int year, short force)
+ {
+ register struct holiday *hp;
+- register int d, n;
++ register int dy;
+ short piped = 0;
+- char buf[200];
+- char *kdedir;
++ if (!initialized)
++ initialize();
+
+ if (year == parse_year && !force)
+ return(0);
+@@ -1979,14 +2578,24 @@
+ parse_year = year;
+ easter_julian = calc_easter(year + 1900);
+
+- for (hp=holiday, d=0; d < 366; d++, hp++)
++ for (hp=holidays, dy=0; dy < 366; dy++, hp++)
+ {
+ hp->color = 0;
+ if (hp->string) {
+- if (!hp->dup)
+- free(hp->string);
+- hp->string = 0;
++ if (!hp->dup )
++ free(hp->string);
++ hp->string = 0;
+ }
++ struct holiday *nx = hp->next;
++ hp->next = 0;
++ while (nx) {
++ if ( nx->string && !nx->dup ) {
++ free( nx->string );
++ }
++ struct holiday *nxtmp=nx;
++ nx = nxtmp->next;
++ free( nxtmp );
++ }
+ }
+ /* for (hp=sm_holiday, d=0; d < 366; d++, hp++)
+ if (hp->string) {
+@@ -1995,7 +2604,7 @@
+ hp->string = 0;
+ }*/
+
+- filename = holidays;
++ filename = holidayfile;
+ if (access(filename, R_OK)) return(0);
+ kcalin = fopen(filename, "r");
+ if (!kcalin) return(0);
+@@ -2008,3 +2617,4 @@
+
+ return(0);
+ }
++
+Index: libkholidays/scanholiday.lex
+===================================================================
+--- libkholidays/scanholiday.lex (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ libkholidays/scanholiday.lex (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -54,7 +54,9 @@
+ day ;
+ days ;
+ on ;
++to ;
+ in { return(IN); }
++if { return(IF); }
+ plus { return(PLUS); }
+ minus { return(MINUS); }
+ small { return(SMALL); }
+@@ -62,6 +64,7 @@
+ leapyear { return(LEAPYEAR); }
+ easter { return(EASTER); }
+ length { return(LENGTH); }
++shift { return(SHIFT); }
+
+ black { kcallval.ival = 1; return(COLOR); }
+ red { kcallval.ival = 2; return(COLOR); }
+Index: libkholidays/kholidays.cpp
+===================================================================
+--- libkholidays/kholidays.cpp (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ libkholidays/kholidays.cpp (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -21,6 +21,7 @@
+ #include <qfile.h>
+ #include <kapplication.h>
+ #include <kstandarddirs.h>
++#include <kdebug.h>
+
+ #include "kholidays.h"
+ #include "kholidays_version.h"
+@@ -32,8 +33,9 @@
+ char *string; /* name of holiday, 0=not a holiday */
+ int color; /* color code, see scanholiday.lex */
+ unsigned short dup; /* reference count */
++ holiday *next; /* single-linked list if more than one holida appears on a given date */
+ };
+- extern struct holiday holiday[366];
++ extern struct holiday holidays[366];
+ }
+
+ QStringList KHolidays::locations()
+@@ -69,17 +71,22 @@
+
+ QString KHolidays::shortText( const QDate &date )
+ {
+- return getHoliday( date );
++ QValueList<KHoliday> lst = getHolidays( date );
++ if ( !lst.isEmpty() )
++ return lst.first().text;
++ else return QString::null;
+ }
+
+ bool KHolidays::parseFile( const QDate &date )
+ {
++// kdDebug()<<"KHolidays::parseFile( date=" << date << ")"<<endl;
+ int lastYear = 0; //current year less 1900
+
+- if ( mHolidayFile.isNull() || mHolidayFile.isEmpty() || date.isNull() )
++ if ( mHolidayFile.isNull() || mHolidayFile.isEmpty() || date.isNull() || !date.isValid() )
+ return false;
+
+- if ( ( mYearLast == 0 ) || ( date.year() != mYearLast ) ) {
++ if ( ( date.year() != mYearLast ) || ( mYearLast == 0 ) ) {
++// kdDebug()<<kdBacktrace();
+ mYearLast = date.year();
+ lastYear = date.year() - 1900; // silly parse_year takes 2 digit year...
+ parse_holidays( QFile::encodeName( mHolidayFile ), lastYear, 1 );
+@@ -90,19 +97,34 @@
+
+ QString KHolidays::getHoliday( const QDate &date )
+ {
+- if ( !parseFile( date ) ) return QString::null;
++ QValueList<KHoliday> lst = getHolidays( date );
++ if ( !lst.isEmpty() )
++ return lst.first().text;
++ else return QString::null;
++}
+
+- if ( holiday[date.dayOfYear()-1].string ) {
+- return QString::fromUtf8( holiday[date.dayOfYear()-1].string );
+- } else {
+- return QString::null;
++QValueList<KHoliday> KHolidays::getHolidays( const QDate &date )
++{
++ QValueList<KHoliday> list;
++ if ( !parseFile( date ) ) return list;
++ struct holiday *hd = &holidays[date.dayOfYear()-1];
++ while ( hd ) {
++ if ( hd->string ) {
++ KHoliday holiday;
++ holiday.text = QString::fromUtf8( hd->string );
++ holiday.shortText = holiday.text;
++ holiday.Category = (hd->color == 2/*red*/) || (hd->color == 9/*weekend*/) ? HOLIDAY : WORKDAY;
++ list.append( holiday );
++ }
++ hd = hd->next;
+ }
++ return list;
+ }
+
+ int KHolidays::category( const QDate &date )
+ {
+ if ( !parseFile(date) ) return WORKDAY;
+
+- return (holiday[date.dayOfYear()-1].color == 2/*red*/) ||
+- (holiday[date.dayOfYear()-1].color == 9/*weekend*/) ? HOLIDAY : WORKDAY;
++ return (holidays[date.dayOfYear()-1].color == 2/*red*/) ||
++ (holidays[date.dayOfYear()-1].color == 9/*weekend*/) ? HOLIDAY : WORKDAY;
+ }
+Index: libkholidays/Makefile.am
+===================================================================
+--- libkholidays/Makefile.am (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ libkholidays/Makefile.am (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -19,7 +19,7 @@
+ # $(YACC) -p kcal -d -o parseholiday.c parseholiday.y
+ #
+ #scanholiday.c: parseholiday.h
+-# $(LEX) -Pkcal -B -oscanholiday.c scanholiday.lex
++# $(LEX) -Pkcal -B -i -oscanholiday.c scanholiday.lex
+ #
+ #clean:
+ # -rm -f scanholiday.c parseholiday.h parseholiday.c
+Index: libkholidays/parseholiday.h
+===================================================================
+--- libkholidays/parseholiday.h (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ libkholidays/parseholiday.h (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -1,35 +1,110 @@
+-#ifndef BISON_PARSEHOLIDAY_H
+-# define BISON_PARSEHOLIDAY_H
++/* A Bison parser, made by GNU Bison 2.3. */
+
+-#ifndef YYSTYPE
+-typedef union { int ival; char *sval; } yystype;
+-# define YYSTYPE yystype
++/* Skeleton interface for Bison's Yacc-like parsers in C
++
++ Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
++ Free Software Foundation, Inc.
++
++ This program is free software; you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 2, or (at your option)
++ any later version.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program; if not, write to the Free Software
++ Foundation, Inc., 51 Franklin Street, Fifth Floor,
++ Boston, MA 02110-1301, USA. */
++
++/* As a special exception, you may create a larger work that contains
++ part or all of the Bison parser skeleton and distribute that work
++ under terms of your choice, so long as that work isn't itself a
++ parser generator using the skeleton or a modified version thereof
++ as a parser skeleton. Alternatively, if you modify or redistribute
++ the parser skeleton itself, you may (at your option) remove this
++ special exception, which will cause the skeleton and the resulting
++ Bison output files to be licensed under the GNU General Public
++ License without this special exception.
++
++ This special exception was added by the Free Software Foundation in
++ version 2.2 of Bison. */
++
++/* Tokens. */
++#ifndef YYTOKENTYPE
++# define YYTOKENTYPE
++ /* Put the tokens into the symbol table, so that GDB and other debuggers
++ know about them. */
++ enum yytokentype {
++ NUMBER = 258,
++ MONTH = 259,
++ WDAY = 260,
++ COLOR = 261,
++ STRING = 262,
++ IN = 263,
++ PLUS = 264,
++ MINUS = 265,
++ SMALL = 266,
++ CYEAR = 267,
++ LEAPYEAR = 268,
++ SHIFT = 269,
++ IF = 270,
++ LENGTH = 271,
++ EASTER = 272,
++ EQ = 273,
++ NE = 274,
++ LE = 275,
++ GE = 276,
++ LT = 277,
++ GT = 278,
++ OR = 279,
++ AND = 280,
++ UMINUS = 281
++ };
++#endif
++/* Tokens. */
++#define NUMBER 258
++#define MONTH 259
++#define WDAY 260
++#define COLOR 261
++#define STRING 262
++#define IN 263
++#define PLUS 264
++#define MINUS 265
++#define SMALL 266
++#define CYEAR 267
++#define LEAPYEAR 268
++#define SHIFT 269
++#define IF 270
++#define LENGTH 271
++#define EASTER 272
++#define EQ 273
++#define NE 274
++#define LE 275
++#define GE 276
++#define LT 277
++#define GT 278
++#define OR 279
++#define AND 280
++#define UMINUS 281
++
++
++
++
++#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
++typedef union YYSTYPE
++#line 109 "parseholiday.y"
++{ int ival; char *sval; }
++/* Line 1529 of yacc.c. */
++#line 103 "parseholiday.h"
++ YYSTYPE;
++# define yystype YYSTYPE /* obsolescent; will be withdrawn */
++# define YYSTYPE_IS_DECLARED 1
+ # define YYSTYPE_IS_TRIVIAL 1
+ #endif
+-# define NUMBER 257
+-# define MONTH 258
+-# define WDAY 259
+-# define COLOR 260
+-# define STRING 261
+-# define IN 262
+-# define PLUS 263
+-# define MINUS 264
+-# define SMALL 265
+-# define CYEAR 266
+-# define LEAPYEAR 267
+-# define LENGTH 268
+-# define EASTER 269
+-# define EQ 270
+-# define NE 271
+-# define LE 272
+-# define GE 273
+-# define LT 274
+-# define GT 275
+-# define OR 276
+-# define AND 277
+-# define UMINUS 278
+
+-
+ extern YYSTYPE kcallval;
+
+-#endif /* not BISON_PARSEHOLIDAY_H */
+Index: libkholidays/parseholiday.y
+===================================================================
+--- libkholidays/parseholiday.y (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ libkholidays/parseholiday.y (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -14,8 +14,9 @@
+ * arrays. If force is set, re-eval even
+ * if year is the same as last time.
+ *
+- * Taken from plan by Thomas Driemeyer (thomas at bitrot.de)
+- * Adapted for use in KOrganizer by Preston Brown (pbrown at kde.org)
++ * Taken from plan by Thomas Driemeyer <thomas at bitrot.de>
++ * Adapted for use in KOrganizer by Preston Brown <pbrown at kde.org> and
++ * Reinhold Kainhofer <reinhold at kainhofer.com>
+ */
+
+ #include <config.h>
+@@ -48,22 +49,24 @@
+ #define ANY 0
+ #define BEFORE -1
+ #define AFTER -2
++/**** Public forward declarations ****/
++char *parse_holidays(const char *holidays, int year, short force);
+
+ /**** Private forward declarations ****/
+ extern int kcallex(void); /* external lexical analyzer */
+-static void kcalerror(char *s);
++static void kcalerror(const char *s);
+ static time_t date_to_time(int day, int month, int year,
+ int *wkday, int *julian, int *weeknum);
+ static time_t tm_to_time(struct tm *tm);
+ static int day_from_name(char *str);
+ static int day_from_easter(void);
+-static int day_from_monthday(int m, int d);
++static int day_from_monthday(int month, int day);
+ static int day_from_wday(int day, int wday, int num);
+ static void monthday_from_day(int day, int *m, int *d, int *y);
+-static int calc_easter();
+-static void setliteraldate();
+-static void seteaster();
+-static void setdate(int month, int day, int year, int off, int length);
++static int calc_easter(int year);
++static void setliteraldate(int month, int day, int off, int *ddup);
++static void seteaster(int off, int length);
++static void setdate(int month, int day, int year, int off, int conditionaloff, int length);
+ static void setwday(int num, int wday, int month, int off, int length);
+ static void setdoff(int wday, int rel, int month, int day,
+ int year, int off, int length);
+@@ -89,22 +92,25 @@
+ 212, 243, 273,
+ 304, 334 };
+
++/* struct holiday;*/
+ struct holiday {
+ char *string; /* name of holiday, 0=not a holiday */
+ int color;
+ unsigned short dup; /* reference count */
++ struct holiday *next;
+ };
+
+-struct holiday holiday[366]; /* info for each day, separate for */
++struct holiday holidays[366]; /* info for each day, separate for */
+ /*struct holiday sm_holiday[366];*/ /* full-line texts under, and small */
+ /* texts next to day number */
++static int initialized=0;
+ %}
+
+ %union { int ival; char *sval; }
+-%type <ival> color offset length expr pexpr number month reldate
++%type <ival> color offset conditionaloffset length expr pexpr number month reldate wdaycondition
+ %token <ival> NUMBER MONTH WDAY COLOR
+ %token <sval> STRING
+-%token IN PLUS MINUS SMALL CYEAR LEAPYEAR
++%token IN PLUS MINUS SMALL CYEAR LEAPYEAR SHIFT IF
+ %token LENGTH EASTER EQ NE LE GE LT GT
+
+ %left OR
+@@ -135,7 +141,7 @@
+ ;
+
+ entry : EASTER offset length { seteaster($2, $3); }
+- | date offset length { setdate( m, d, y, $2, $3);}
++ | date offset conditionaloffset length { setdate( m, d, y, $2, $3, $4);}
+ | WDAY offset length { setwday( 0, $1, 0, $2, $3);}
+ | pexpr WDAY offset length { setwday($1, $2, 0, $3, $4);}
+ | pexpr WDAY IN month offset length { setwday($1, $2, $4, $5, $6);}
+@@ -147,6 +153,15 @@
+ | MINUS expr { $$ = -$2; }
+ ;
+
++ conditionaloffset : { $$ = 0; }
++ | SHIFT wdaycondition IF wdaycondition { $$ = ($2<<8) | $4;printf("Shift to %i if %i\n", $2, $4); }
++ ;
++
++ wdaycondition : { $$ = 0; }
++ | WDAY { $$ = (1<<$1); }
++ | WDAY OR wdaycondition { $$ = (1<<$1) | $3; }
++ ;
++
+ length : { $$ = 1; }
+ | LENGTH expr { $$ = $2; }
+ ;
+@@ -179,10 +194,10 @@
+ ($1, $2); }
+ | WDAY pexpr pexpr { $$ = day_from_wday($3, $1,
+ $2 == -1 ? -1 : 0); }
+- | pexpr WDAY IN month { int d=day_from_monthday($4,1);
++ | pexpr WDAY IN month { int day=day_from_monthday($4,1);
+ $$ = $1 == 999
+- ? day_from_wday(d+1,$2,-1)
+- : day_from_wday(d,$2,$1-1);}
++ ? day_from_wday(day+1,$2,-1)
++ : day_from_wday(day,$2,$1-1);}
+ ;
+
+ month : MONTH | pexpr;
+@@ -218,7 +233,7 @@
+ %%
+
+ /*** Private Yacc callbacks and helper functions ***/
+-static void kcalerror(char *msg)
++static void kcalerror(const char *msg)
+ {
+ fprintf(stderr, "%s: %s in line %d of %s\n", progname,
+ msg, kcallineno+1, filename);
+@@ -232,7 +247,7 @@
+ int *wkday, int *julian, int *weeknum)
+ {
+ struct tm tm;
+- time_t time;
++ time_t ttime;
+
+ tm.tm_sec = 0;
+ tm.tm_min = 0;
+@@ -240,7 +255,7 @@
+ tm.tm_mday = day;
+ tm.tm_mon = month;
+ tm.tm_year = year;
+- time = tm_to_time(&tm);
++ ttime = tm_to_time(&tm);
+ if (wkday)
+ *wkday = tm.tm_wday;
+ if (julian)
+@@ -249,7 +264,7 @@
+ *weeknum = 0
+ ? tm.tm_yday / 7
+ : tm.tm_yday ? ((tm.tm_yday - 1) /7) + 1 : 0;
+- return(time == -1 || day != tm.tm_mday ? 0 : time);
++ return(ttime == -1 || day != tm.tm_mday ? 0 : ttime);
+ }
+
+ static time_t tm_to_time(struct tm *tm)
+@@ -281,8 +296,8 @@
+ {
+ int min_month = 0, max_month = 11;
+ int min_num = 0, max_num = 4;
+- int m, n, d, l, mlen, wday1;
+- int dup = 0;
++ int mn, n, dy, l, mlen, wday1;
++ int ddup = 0;
+
+ if (month != ANY)
+ min_month = max_month = month-1;
+@@ -292,19 +307,19 @@
+ min_num = max_num = num-1;
+
+ holiday_name = yacc_string;
+- for (m=min_month; m <= max_month; m++) {
+- (void)date_to_time(1, m, parse_year, &wday1, 0, 0);
+- d = (wday-1 - (wday1-1) +7) % 7 + 1;
+- mlen = monthlen[m] + (m==1 && ISLEAPYEAR(parse_year));
++ for (mn=min_month; mn <= max_month; mn++) {
++ (void)date_to_time(1, mn, parse_year, &wday1, 0, 0);
++ dy = (wday-1 - (wday1-1) +7) % 7 + 1;
++ mlen = monthlen[mn] + (mn==1 && ISLEAPYEAR(parse_year));
+ if (num == LAST)
+ for (l=0; l < length; l++)
+- setliteraldate(m, d+28<=mlen ? d+28 : d+21,
+- off+l, &dup);
++ setliteraldate(mn, dy+28<=mlen ? dy+28 : dy+21,
++ off+l, &ddup);
+ else
+- for (d+=min_num*7, n=min_num; n <= max_num; n++, d+=7)
+- if (d >= 1 && d <= mlen)
++ for (dy+=min_num*7, n=min_num; n <= max_num; n++, dy+=7)
++ if (dy >= 1 && dy <= mlen)
+ for (l=0; l < length; l++)
+- setliteraldate(m,d,off+l,&dup);
++ setliteraldate(mn,dy,off+l,&ddup);
+ }
+ }
+
+@@ -319,8 +334,8 @@
+ {
+ int min_month = 0, max_month = 11;
+ int min_day = 1, max_day = 31;
+- int m, d, nd, l, wday1;
+- int dup = 0;
++ int mn, dy, nd, l, wday1;
++ int ddup = 0;
+
+ if (year != ANY) {
+ year %= 100;
+@@ -336,25 +351,46 @@
+ min_day = max_day = day;
+
+ holiday_name = yacc_string;
+- for (m=min_month; m <= max_month; m++)
++ for (mn=min_month; mn <= max_month; mn++)
+ if (day == LAST) {
+- (void)date_to_time(monthlen[m], m, parse_year,
++ (void)date_to_time(monthlen[mn], mn, parse_year,
+ &wday1, 0, 0);
+ nd = (((wday - wday1 + 7) % 7) -
+ ((rel == BEFORE) ? 7 : 0)) % 7;
+ for (l=0; l < length; l++)
+- setliteraldate(m,monthlen[m]+nd, off+l, &dup);
++ setliteraldate(mn,monthlen[mn]+nd, off+l, &ddup);
+ } else
+- for (d=min_day; d <= max_day; d++) {
+- (void)date_to_time(d, m, parse_year,
++ for (dy=min_day; dy <= max_day; dy++) {
++ (void)date_to_time(dy, mn, parse_year,
+ &wday1, 0, 0);
+ nd = (((wday - wday1 + 7) % 7) -
+ ((rel == BEFORE) ? 7 : 0)) % 7;
+ for (l=0; l < length; l++)
+- setliteraldate(m, d+nd, off+l, &dup);
++ setliteraldate(mn, dy+nd, off+l, &ddup);
+ }
+ }
+
++static int conditionalOffset( int day, int month, int year, int cond )
++{
++printf("ConditionalOffset: %i.%i.%i, condition=%i\n", day, month, year, cond );
++ int off = 0;
++ int wday = 0;
++ (void)date_to_time( day, month, year, &wday, 0, 0);
++ if ( wday == 0 ) { wday = 7; } /* sunday is 7, not 0 */
++printf("Date is a %i\n", wday );
++ if ( cond & (1<<wday) ) {
++printf(" Matches condition\n");
++ /* condition matches -> higher 8 bits contain the possible days to shift to */
++ int to = (cond >> 8);
++printf(" To condition: %i\n", to);
++ while ( !(to & (1<<((wday+off)%7))) && (off < 8) ) {
++ ++off;
++ }
++printf(" Resulting offset: %i\n", off);
++ }
++ if ( off >= 8 ) return 0;
++ else return off;
++}
+
+ /*
+ * set holiday by date. Ignore holidays in the wrong year. The code is
+@@ -362,12 +398,12 @@
+ * the month).
+ */
+
+-static void setdate(int month, int day, int year, int off, int length)
++static void setdate(int month, int day, int year, int off, int conditionaloff, int length)
+ {
+ int min_month = 0, max_month = 11;
+ int min_day = 1, max_day = 31;
+- int m, d, l;
+- int dup = 0;
++ int mn, dy, l;
++ int ddup = 0;
+
+ if (year != ANY) {
+ year %= 100;
+@@ -383,14 +419,24 @@
+ min_day = max_day = day;
+
+ holiday_name = yacc_string;
+- for (m=min_month; m <= max_month; m++)
+- if (day == LAST)
++ /** TODO: Include the conditionaloff variable. */
++ /** The encoding of the conditional offset is:
++ 8 lower bits: conditions to shift (bit-register, bit 1=mon, ..., bit 7=sun)
++ 8 higher bits: weekday to shift to (bit-register, bit 1=mon, ..., bit 7=sun)
++ */
++ for (mn=min_month; mn <= max_month; mn++) {
++ if (day == LAST) {
++ int newoff = off + conditionalOffset( monthlen[mn], mn, parse_year, conditionaloff );
+ for (l=0; l < length; l++)
+- setliteraldate(m, monthlen[m], off+l, &dup);
+- else
+- for (d=min_day; d <= max_day; d++)
++ setliteraldate(mn, monthlen[mn], newoff+l, &ddup);
++ } else {
++ for (dy=min_day; dy <= max_day; dy++) {
++ int newoff = off + conditionalOffset( dy, mn, parse_year, conditionaloff );
+ for (l=0; l < length; l++)
+- setliteraldate(m, d, off+l, &dup);
++ setliteraldate(mn, dy, newoff+l, &ddup);
++ }
++ }
++ }
+ }
+
+
+@@ -400,25 +446,34 @@
+ * array. There are two of these, for full-line holidays (they take away one
+ * appointment line in the month calendar daybox) and "small" holidays, which
+ * appear next to the day number. If the day is already some other holiday,
+- * ignore the new one. <dup> is information stored for parse_holidays(), it
++ * add a new item to the singly-linked list and insert the holiday there.
++ * <ddup> is information stored for parse_holidays(), it
+ * will free() the holiday name only if its dup field is 0 (because many
+ * string fields can point to the same string, which was allocated only once
+ * by the lexer, and should therefore only be freed once).
+ */
+
+-static void setliteraldate(int month, int day, int off, int *dup)
++static void setliteraldate(int month, int day, int off, int *ddup)
+ {
+ int julian = JULIAN(month, day) + off;
+ /* struct holiday *hp = yacc_small ? &sm_holiday[julian]
+ : &holiday[julian]; */
+- struct holiday *hp = &holiday[julian];
++ struct holiday *hp = 0;
+
+- if (julian >= 0 && julian <= 365 && !hp->string) {
+- if (!*dup)
++ if (julian >= 0 && julian <= 365 ) {
++ hp = &holidays[julian];
++ if ( hp->string ) {
++ while (hp->next) { hp = hp->next; }
++ hp->next = malloc( sizeof(struct holiday)*2 );
++ hp = hp->next;
++ hp->next = 0;
++ }
++ if (!*ddup)
+ holiday_name = strdup(holiday_name);
+ hp->string = holiday_name;
+ hp->color = (yacc_stringcolor == 0) ? yacc_daycolor : yacc_stringcolor;
+- hp->dup = (*dup)++;
++ hp->dup = (*ddup)++;
++
+ }
+ }
+
+@@ -429,22 +484,29 @@
+
+ static void seteaster(int off, int length)
+ {
+- int dup = 0; /* flag for later free() */
++ int ddup = 0; /* flag for later free() */
+ int julian = easter_julian + off;
+ /* struct holiday *hp = yacc_small ? &sm_holiday[julian]
+- : &holiday[julian];*/
+- struct holiday *hp = &holiday[julian];
++ : &holidays[julian];*/
++ struct holiday *hp = 0;
+
+ holiday_name = yacc_string;
+ while (length-- > 0) {
+- if (julian >= 0 && julian <= 365 && !hp->string) {
+- if (!dup)
++ if (julian >= 0 && julian <= 365 ) {
++ hp = &holidays[julian];
++ if ( hp->string ) {
++ while (hp->next) { hp = hp->next; }
++ hp->next = malloc( sizeof(struct holiday)*2 );
++ hp = hp->next;
++ hp->next = 0;
++ }
++ if (!ddup)
+ holiday_name = strdup(holiday_name);
+ hp->string = holiday_name;
+ hp->color = (yacc_stringcolor == 0) ? yacc_daycolor : yacc_stringcolor;
+- hp->dup = dup++;
++ hp->dup = ddup++;
+ }
+- julian++, hp++;
++ julian++;
+ }
+ }
+
+@@ -493,7 +555,7 @@
+ *
+ * day_from_name (str) gets day from symbolic name
+ * day_from_easter () gets day as easter sunday
+- * day_from_monthday (m, d) gets <day> from <month/day>
++ * day_from_monthday (month, day) gets <day> from <month/day>
+ * day_from_wday (day, wday, num) gets num-th day (wday) after <day> day
+ * monthday_from_day (day, *m, *d, *y) gets month/day/cur_year from <day>
+ */
+@@ -504,7 +566,7 @@
+ char *name;
+
+ for (i=0; i < 366; i++) {
+- name = holiday[i].string;
++ name = holidays[i].string;
+ if (name && !strcmp(str, name))
+ return(i);
+ }
+@@ -518,28 +580,28 @@
+ }
+
+
+-static int day_from_monthday(int m, int d)
++static int day_from_monthday(int month, int day)
+ {
+- if (m == 13)
++ if (month == 13)
+ return(365 + ISLEAPYEAR(parse_year));
+- return(JULIAN(m - 1, d));
++ return(JULIAN(month - 1, day));
+ }
+
+
+-static void monthday_from_day(int day, int *m, int *d, int *y)
++static void monthday_from_day(int day, int *mn, int *dy, int *yr)
+ {
+ int i, len;
+
+- *y = parse_year;
+- *m = 0;
+- *d = 0;
++ *yr = parse_year;
++ *mn = 0;
++ *dy = 0;
+ if (day < 0)
+ return;
+ for (i=0; i < 12; i++) {
+ len = monthlen[i] + (i == 1 && ISLEAPYEAR(parse_year));
+ if (day < len) {
+- *m = i + 1;
+- *d = day + 1;
++ *mn = i + 1;
++ *dy = day + 1;
+ break;
+ }
+ day -= len;
+@@ -557,34 +619,18 @@
+ return (day);
+ }
+
+-static char *resolve_tilde(char *path)
++static void initialize()
+ {
+- struct passwd *pw; /* for searching home dirs */
+- static char pathbuf[512]; /* path with ~ expanded */
+- char *p, *q; /* username copy pointers */
+- char *home = 0; /* home dir (if ~ in path) */
+-
+- if (*path != '~')
+- return(path);
+-
+- if (!path[1] || path[1] == '/') {
+- *pathbuf = 0;
+- if (!(home = getenv("HOME")))
+- home = getenv("home");
+- } else {
+- for (p=path+1, q=pathbuf; *p && *p != '/'; p++, q++)
+- *q = *p;
+- *q = 0;
+- if ((pw = getpwnam(pathbuf)))
+- home = pw->pw_dir;
++ initialized = 1;
++ register struct holiday *hp;
++ register int dy;
++ for (hp=holidays, dy=0; dy < 366; dy++, hp++)
++ {
++ hp->color = 0;
++ hp->dup = 0;
++ hp->string = 0;
++ hp->next = 0;
+ }
+- if (!home) {
+- fprintf(stderr, "%s: can't evaluate ~%s in %s, using .\n",
+- progname, pathbuf, path);
+- home = ".";
+- }
+- sprintf(pathbuf, "%s/%s", home, path+1);
+- return(pathbuf);
+ }
+
+ /*** Public Functions ***/
+@@ -596,13 +642,13 @@
+ * Return an error message if an error occurred, 0 otherwise.
+ */
+
+-char *parse_holidays(const char *holidays, int year, short force)
++char *parse_holidays(const char *holidayfile, int year, short force)
+ {
+ register struct holiday *hp;
+- register int d, n;
++ register int dy;
+ short piped = 0;
+- char buf[200];
+- char *kdedir;
++ if (!initialized)
++ initialize();
+
+ if (year == parse_year && !force)
+ return(0);
+@@ -611,14 +657,24 @@
+ parse_year = year;
+ easter_julian = calc_easter(year + 1900);
+
+- for (hp=holiday, d=0; d < 366; d++, hp++)
++ for (hp=holidays, dy=0; dy < 366; dy++, hp++)
+ {
+ hp->color = 0;
+ if (hp->string) {
+- if (!hp->dup)
+- free(hp->string);
+- hp->string = 0;
++ if (!hp->dup )
++ free(hp->string);
++ hp->string = 0;
+ }
++ struct holiday *nx = hp->next;
++ hp->next = 0;
++ while (nx) {
++ if ( nx->string && !nx->dup ) {
++ free( nx->string );
++ }
++ struct holiday *nxtmp=nx;
++ nx = nxtmp->next;
++ free( nxtmp );
++ }
+ }
+ /* for (hp=sm_holiday, d=0; d < 366; d++, hp++)
+ if (hp->string) {
+@@ -627,7 +683,7 @@
+ hp->string = 0;
+ }*/
+
+- filename = holidays;
++ filename = holidayfile;
+ if (access(filename, R_OK)) return(0);
+ kcalin = fopen(filename, "r");
+ if (!kcalin) return(0);
+Index: libkholidays/kholidays.h
+===================================================================
+--- libkholidays/kholidays.h (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ libkholidays/kholidays.h (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -23,9 +23,16 @@
+ #include <qstring.h>
+ #include <qstringlist.h>
+ #include <qdatetime.h>
++#include <qvaluelist.h>
+
+ #include <kdepimmacros.h>
+
++struct KHoliday {
++ QString text;
++ QString shortText;
++ int Category;
++};
++
+ class KDE_EXPORT KHolidays {
+ public:
+ /**
+@@ -41,12 +48,13 @@
+ /// return the location with which this object was constructed
+ QString location() const;
+
+- QString shortText( const QDate& );
++ QValueList<KHoliday> getHolidays( const QDate& );
++
++ KDE_DEPRECATED QString shortText( const QDate& );
++ KDE_DEPRECATED QString getHoliday( const QDate& );
+
+- QString getHoliday( const QDate& );
+-
+ enum { WORKDAY, HOLIDAY };
+- int category( const QDate& );
++ KDE_DEPRECATED int category( const QDate& );
+
+ private:
+ bool parseFile( const QDate& );
+Index: plugins/kmail/bodypartformatter/text_calendar.desktop
+===================================================================
+--- plugins/kmail/bodypartformatter/text_calendar.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ plugins/kmail/bodypartformatter/text_calendar.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -64,6 +64,7 @@
+ Comment[tr]=text/calendar için bir gövde biçimleyici eklentisi
+ Comment[uk]=ÐÑÑлок ÑоÑмаÑÑÐ²Ð°Ð½Ð½Ñ Ð´Ð»Ñ text/calendar
+ Comment[zh_CN]=text/calendar çæ ¼å¼åæä»¶
++Comment[zh_TW]=text/calendar æ ¼å¼å夿ç¨å¼
+
+ [Plugin]
+ Type=text/calendar
+Index: plugins/kmail/bodypartformatter/text_vcard.desktop
+===================================================================
+--- plugins/kmail/bodypartformatter/text_vcard.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ plugins/kmail/bodypartformatter/text_vcard.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -65,6 +65,7 @@
+ Comment[tr]=text/vcard için bir gövde biçimleyici eklentisi
+ Comment[uk]=ÐÑÑлок ÑоÑмаÑÑÐ²Ð°Ð½Ð½Ñ Ð´Ð»Ñ text/vcard
+ Comment[zh_CN]=text/vcard çæ ¼å¼åæä»¶
++Comment[zh_TW]=text/vCard æ ¼å¼å夿ç¨å¼
+
+ [Plugin]
+ Type=text/x-vcard
+Index: plugins/kmail/bodypartformatter/text_xdiff.desktop
+===================================================================
+--- plugins/kmail/bodypartformatter/text_xdiff.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ plugins/kmail/bodypartformatter/text_xdiff.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -53,6 +53,7 @@
+ Comment[pt]=Um 'plugin' de formatação para text/x-diff
+ Comment[pt_BR]=Um plug-in formatador de componente para o tipo text/x-diff
+ Comment[ru]=ФоÑмаÑиÑование text/x-diff
++Comment[sk]=Modul pre formátovanie tela pre text/x-diff
+ Comment[sl]=Oblikovalni vstavek za text/x-diff
+ Comment[sr]=ÐÑикÑÑÑак за ÑоÑмаÑиÑаÑе Ñела за text/x-diff
+ Comment[sr at Latn]=PrikljuÄak za formatitanje tela za text/x-diff
+@@ -61,6 +62,7 @@
+ Comment[tr]=text/x-diff için bir gövde biçimleyici eklentisi
+ Comment[uk]=ÐÑÑлок ÑоÑмаÑÑÐ²Ð°Ð½Ð½Ñ Ð´Ð»Ñ text/x-diff
+ Comment[zh_CN]=text/x-diff çæ ¼å¼åæä»¶
++Comment[zh_TW]=text/x-diff æ ¼å¼å夿ç¨å¼
+ [Plugin]
+ Type=text/x-diff
+ X-KDE-Library=libkmail_bodypartformatter_text_xdiff
+Index: kitchensync/multisynk/multisynk.desktop
+===================================================================
+--- kitchensync/multisynk/multisynk.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kitchensync/multisynk/multisynk.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -1,6 +1,7 @@
+ [Desktop Entry]
+ Encoding=UTF-8
+ Name=MultiSynK
++Name[sk]=MultiSynk
+ Name[sv]=Multisynk
+ GenericName=Synchronization
+ GenericName[bg]=СинÑ
ÑонизаÑиÑ
+@@ -32,6 +33,7 @@
+ GenericName[pt]=Sincronização
+ GenericName[pt_BR]=Gerenciador de Sincronização
+ GenericName[ru]=СинÑ
ÑонизаÑиÑ
++GenericName[sk]=Synchronizácia
+ GenericName[sl]=Usklajevanje
+ GenericName[sr]=СинÑ
ÑонизаÑиÑа
+ GenericName[sr at Latn]=Sinhronizacija
+Index: kitchensync/kitchensync/debugger/debugger.desktop
+===================================================================
+--- kitchensync/kitchensync/debugger/debugger.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kitchensync/kitchensync/debugger/debugger.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -43,6 +43,7 @@
+ Name[tr]=Konnector Hata Ayıklayıcı
+ Name[uk]=Ðневадник Konnector
+ Name[zh_CN]=Konnector è°è¯ç¨åº
++Name[zh_TW]=Konnector é¤é¯å¨
+ Icon=
+ ServiceTypes=KitchenSync/ActionPart
+ X-KDE-Library=libksync_debugger
+Index: kitchensync/kitchensync/viewer/viewer.desktop
+===================================================================
+--- kitchensync/kitchensync/viewer/viewer.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kitchensync/kitchensync/viewer/viewer.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -41,6 +41,7 @@
+ Name[tr]=Veri Gösterici
+ Name[uk]=ÐеÑеглÑд даниÑ
+ Name[zh_CN]=æ°æ®æ¥çå¨
++Name[zh_TW]=è³ææª¢è¦å¨
+ Icon=
+ ServiceTypes=KitchenSync/ActionPart
+ X-KDE-Library=libksync_viewer
+Index: kitchensync/kitchensync/plucker/kitchensync-pluck-rdf.desktop
+===================================================================
+--- kitchensync/kitchensync/plucker/kitchensync-pluck-rdf.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kitchensync/kitchensync/plucker/kitchensync-pluck-rdf.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -31,6 +31,7 @@
+ Name[pt]=Adicionar ao 'Plugin' Plucker do KitchenSync
+ Name[pt_BR]=Adicionar ao Plug-in Plucker do KitchenSync
+ Name[ru]=ÐобавиÑÑ Ð² модÑÐ»Ñ KitchenSync Plucker
++Name[sk]=Modul pre KitchenSync Plucker
+ Name[sl]=Dodaj k vstavku Plucker za KitchenSync
+ Name[sr]=ÐÑикÑÑÑак за додаваÑе Ñ KitchenSync Plucker
+ Name[sr at Latn]=PrikljuÄak za dodavanje u KitchenSync Plucker
+@@ -38,5 +39,6 @@
+ Name[tr]=KitchenSync Plucker Eklentisine Ekle
+ Name[uk]=ÐодаÑи до вÑÑÐ»ÐºÑ Plucker Ñ KitchenSync
+ Name[zh_CN]=æ·»å å° KitchenSync Plucker æä»¶
++Name[zh_TW]=Add to KitchenSync Plucker 夿ç¨å¼
+ Exec=dcop kitchensync PluckerInterface "addPluckerFeed(KURL)" %u
+ Icon=knode
+Index: kitchensync/kitchensync/plucker/kitchensync-pluck.desktop
+===================================================================
+--- kitchensync/kitchensync/plucker/kitchensync-pluck.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kitchensync/kitchensync/plucker/kitchensync-pluck.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -31,6 +31,7 @@
+ Name[pt]=Adicionar ao 'Plugin' Plucker do KitchenSync
+ Name[pt_BR]=Adicionar ao Plug-in Plucker do KitchenSync
+ Name[ru]=ÐобавиÑÑ Ð² модÑÐ»Ñ KitchenSync Plucker
++Name[sk]=Modul pre KitchenSync Plucker
+ Name[sl]=Dodaj k vstavku Plucker za KitchenSync
+ Name[sr]=ÐÑикÑÑÑак за додаваÑе Ñ KitchenSync Plucker
+ Name[sr at Latn]=PrikljuÄak za dodavanje u KitchenSync Plucker
+@@ -38,5 +39,6 @@
+ Name[tr]=KitchenSync Plucker Eklentisine Ekle
+ Name[uk]=ÐодаÑи до вÑÑÐ»ÐºÑ Plucker Ñ KitchenSync
+ Name[zh_CN]=æ·»å å° KitchenSync Plucker æä»¶
++Name[zh_TW]=Add to KitchenSync Plucker 夿ç¨å¼
+ Exec=dcop kitchensync PluckerInterface "addPluckerUrl(KURL)" %u
+ Icon=knode
+Index: kitchensync/kitchensync/backup/restore.desktop
+===================================================================
+--- kitchensync/kitchensync/backup/restore.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kitchensync/kitchensync/backup/restore.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -38,6 +38,7 @@
+ Name[tr]=Konnector Geri Yükleme
+ Name[uk]=ÐÑÐ´Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Konnector
+ Name[zh_CN]=Konnector æ¢å¤
++Name[zh_TW]=Konnector å復
+ Icon=
+ ServiceTypes=KitchenSync/ActionPart
+ X-KDE-Library=libksync_restore
+Index: kitchensync/kitchensync/backup/backup.desktop
+===================================================================
+--- kitchensync/kitchensync/backup/backup.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kitchensync/kitchensync/backup/backup.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -41,6 +41,7 @@
+ Name[tr]=Konnector YedeÄi
+ Name[uk]=РезеÑвна копÑÑ Konnector
+ Name[zh_CN]=Konnector å¤ä»½
++Name[zh_TW]=Konnector å份
+ Icon=
+ ServiceTypes=KitchenSync/ActionPart
+ X-KDE-Library=libksync_backup
+Index: kitchensync/libkonnector2/plugins/threadedkonnector/threadedkonnector.desktop
+===================================================================
+--- kitchensync/libkonnector2/plugins/threadedkonnector/threadedkonnector.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kitchensync/libkonnector2/plugins/threadedkonnector/threadedkonnector.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -30,6 +30,7 @@
+ Name[pt]=Conector de Demonstração para uma Implementação Multitarefa
+ Name[pt_BR]=Konnector de demonstração para uma implementação com linhas de execução
+ Name[ru]=ÐемонÑÑÑаÑионнÑй коннекÑÐ¾Ñ Ð´Ð»Ñ ÑеализаÑии ниÑей
++Name[sk]=Demo konektor pre implementáciu s vláknami
+ Name[sl]=Demonstracijski povezovalnik za nitensko implementacijo
+ Name[sr]=ÐемонÑÑÑаÑиони konnector за ниÑÐ½Ñ Ð¸Ð¼Ð¿Ð»ÐµÐ¼ÐµÐ½ÑаÑиÑÑ
+ Name[sr at Latn]=Demonstracioni konnector za nitnu implementaciju
+Index: kitchensync/libkonnector2/filter.desktop
+===================================================================
+--- kitchensync/libkonnector2/filter.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kitchensync/libkonnector2/filter.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -29,6 +29,7 @@
+ Comment[pt]=Filtro para o Conector KitchenSync
+ Comment[pt_BR]=Filtro para o Konnector do KitchenSync
+ Comment[ru]=ФилÑÑÑ Ð´Ð»Ñ KitchenSync Konnector
++Comment[sk]=Filter pre KitchenSync Konnector
+ Comment[sl]=Fstavek za Konnector KitchenSync
+ Comment[sr]=ФилÑÐµÑ Ð·Ð° KitchenSync Konnector
+ Comment[sr at Latn]=Filter za KitchenSync Konnector
+@@ -37,6 +38,7 @@
+ Comment[tr]=KitchenSync Konnector için filtre
+ Comment[uk]=ФÑлÑÑÑ Ð´Ð»Ñ KitchenSync Konnector
+ Comment[zh_CN]=KitchenSync Konnector çè¿æ»¤å¨
++Comment[zh_TW]=KitchenSync Konnector éæ¿¾å¨
+ Name=KitchenSyncFilter
+ Name[bg]=ФилÑÑÑ Ð·Ð° KitchenSync
+ Name[de]=KitchenSync-Filter
+Index: kitchensync/libkonnector2/filters/calendarfilter.desktop
+===================================================================
+--- kitchensync/libkonnector2/filters/calendarfilter.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kitchensync/libkonnector2/filters/calendarfilter.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -35,6 +35,7 @@
+ Name[pt]=Filtro de Calendário
+ Name[pt_BR]=Filtro de Calendário
+ Name[ru]=ФилÑÑÑ ÐºÐ°Ð»ÐµÐ½Ð´Ð°ÑÑ
++Name[sk]=Filter kalendára
+ Name[sl]=Filter za koledar
+ Name[sr]=ФилÑÐµÑ ÐºÐ°Ð»ÐµÐ½Ð´Ð°Ñа
+ Name[sr at Latn]=Filter kalendara
+@@ -43,6 +44,7 @@
+ Name[tr]=Takvim Süzgeci
+ Name[uk]=ФÑлÑÑÑ ÐалендаÑÑ
+ Name[zh_CN]=æ¥åè¿æ»¤å¨
++Name[zh_TW]=è¡äºæé濾å¨
+
+ Comment=Filters events and todos in a calendar
+ Comment[bg]=ФилÑÑиÑане на ÑÑбиÑиÑÑа и задаÑиÑе в календаÑа
+@@ -72,6 +74,7 @@
+ Comment[pt]=Filtra eventos e a-fazeres num calendário
+ Comment[pt_BR]=Filtra eventos e tarefas em um calendário
+ Comment[ru]=ФилÑÑÑ ÑобÑÑий и Ð·Ð°Ð´Ð°Ñ ÐºÐ°Ð»ÐµÐ½Ð´Ð°ÑÑ
++Comment[sk]=Filtruje udalosti a úlohy v kalendári
+ Comment[sl]=Filtrira dogodke in opravila v koledarju
+ Comment[sr]=ФилÑÑиÑа догаÑаÑе и обавезе Ñ ÐºÐ°Ð»ÐµÐ½Ð´Ð°ÑÑ
+ Comment[sr at Latn]=Filtrira dogaÄaje i obaveze u kalendaru
+@@ -80,3 +83,4 @@
+ Comment[tr]=Bir takvimdeki olayları ve yapılacakları süzer
+ Comment[uk]=ФÑлÑÑÑÑÑ Ð¿Ð¾Ð´ÑÑ Ñ Ð·Ð°Ð²Ð´Ð°Ð½Ð½Ñ Ð² календаÑÑ
+ Comment[zh_CN]=è¿æ»¤æ¥åä¸çäºä»¶åå¾
å
++Comment[zh_TW]=è¡äºæä¸äºä»¶èå¾
辦äºé
éæ¿¾å¨
+Index: kitchensync/libkonnector2/filters/addressbookfilter.desktop
+===================================================================
+--- kitchensync/libkonnector2/filters/addressbookfilter.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kitchensync/libkonnector2/filters/addressbookfilter.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -35,6 +35,7 @@
+ Name[pt]=Filtro de Livro de Endereço
+ Name[pt_BR]=Filtro do Livro de Endereços
+ Name[ru]=ФилÑÑÑ Ð°Ð´ÑеÑной книги
++Name[sk]=Filter adresára
+ Name[sl]=Filter za adresar
+ Name[sr]=ФилÑÐµÑ Ð°Ð´ÑеÑаÑа
+ Name[sr at Latn]=Filter adresara
+@@ -43,6 +44,7 @@
+ Name[tr]=Adres Defteri Süzgeci
+ Name[uk]=ФÑлÑÑÑ Ð°Ð´ÑеÑÐ½Ð¾Ñ ÐºÐ½Ð¸Ð³Ð¸
+ Name[zh_CN]=å°åç°¿è¿æ»¤å¨
++Name[zh_TW]=éè¨ééæ¿¾å¨
+
+ Comment=Filters contacts in an address book
+ Comment[bg]=ФилÑÑиÑане на конÑакÑиÑе в адÑеÑника
+@@ -72,6 +74,7 @@
+ Comment[pt]=Filtra contactos num livros de endereços
+ Comment[pt_BR]=Filtra contatos num livro de endereços
+ Comment[ru]=ФилÑÑÑ ÐºÐ¾Ð½ÑакÑов адÑеÑной книги
++Comment[sk]=Filtruje kontakty v adresári
+ Comment[sl]=Filtrira stike v adresarju
+ Comment[sr]=ФилÑÑиÑа конÑакÑе Ñ Ð°Ð´ÑеÑаÑÑ
+ Comment[sr at Latn]=Filtrira kontakte u adresaru
+@@ -80,3 +83,4 @@
+ Comment[tr]=Bir adres defterindeki baÄlantıları süzer
+ Comment[uk]=ФÑлÑÑÑÑÑ ÐºÐ¾Ð½ÑакÑи в адÑеÑнÑй книзÑ
+ Comment[zh_CN]=è¿æ»¤å°åç°¿ä¸çè系人
++Comment[zh_TW]=éè¨éä¸è¯çµ¡äººé濾å¨
+Index: kitchensync/libkonnector2/konnector.desktop
+===================================================================
+--- kitchensync/libkonnector2/konnector.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kitchensync/libkonnector2/konnector.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -51,7 +51,7 @@
+ Comment[ven]=Dzithalutshedzo dza Konnector
+ Comment[xh]=Iinkcazelo ze Konnector
+ Comment[zh_CN]=Konnector å®ä¹
+-Comment[zh_TW]=Kontour å®ç¾©
++Comment[zh_TW]=Konnector å®ç¾©
+ Comment[zu]=Izincazelo ze-Konnector
+ Name=Konnector
+ Name[cs]=Konektor
+Index: libkdepim/kxface.h
+===================================================================
+--- libkdepim/kxface.h (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ libkdepim/kxface.h (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -5,7 +5,7 @@
+ Copyright (c) James Ashton - Sydney University - June 1990.
+
+ Additions for KDE:
+- Copyright (c) 2004 Jakob Schröter <js at camaya.net>
++ Copyright (c) 2004 Jakob Schröter <js at camaya.net>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+Index: libkdepim/komposer/plugins/default/defaulteditor.desktop
+===================================================================
+--- libkdepim/komposer/plugins/default/defaulteditor.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ libkdepim/komposer/plugins/default/defaulteditor.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -44,6 +44,7 @@
+ Name[pt]=Editor Kompositor
+ Name[pt_BR]=Editor do Komposer
+ Name[ru]=РедакÑÐ¾Ñ Komposer
++Name[sk]=Editor Komposer
+ Name[sl]=Urejevalnik Komposer
+ Name[sr]=УÑеÑÐ¸Ð²Ð°Ñ Komposer-а
+ Name[sr at Latn]=UreÄivaÄ Komposer-a
+@@ -52,6 +53,7 @@
+ Name[tr]=Komposer Düzenleyicisi
+ Name[uk]=РедакÑÐ¾Ñ Komposer
+ Name[zh_CN]=Komposer ç¼è¾å¨
++Name[zh_TW]=Komposer 編輯å¨
+ Comment=Komposer default editor
+ Comment[bg]=ÐодÑазбиÑÐ°Ñ Ñе ÑедакÑÐ¾Ñ Ð·Ð° Komposer
+ Comment[ca]=Editor predeterminat de Komposer
+@@ -81,6 +83,7 @@
+ Comment[pt]=Editor predefinido Kompositor
+ Comment[pt_BR]=Editor padrão do Komposer
+ Comment[ru]=РедакÑÐ¾Ñ Komposer по ÑмолÑаниÑ
++Comment[sk]=Štandardný editor Komposer
+ Comment[sl]=Privzeti urejevalnik Komposer
+ Comment[sr]=ÐодÑазÑмевани Komposer-ов ÑÑеÑиваÑ
+ Comment[sr at Latn]=Podrazumevani Komposer-ov ureÄivaÄ
+@@ -89,3 +92,4 @@
+ Comment[tr]=Ãntanımlı Komposer düzenleyicisi
+ Comment[uk]=Типовий ÑедакÑÐ¾Ñ Komposer
+ Comment[zh_CN]=Komposer é»è®¤ç¼è¾å¨
++Comment[zh_TW]=Komposer é è¨ç·¨è¼¯å¨
+Index: libkdepim/komposer/core/komposerplugin.desktop
+===================================================================
+--- libkdepim/komposer/core/komposerplugin.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ libkdepim/komposer/core/komposerplugin.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -46,6 +46,7 @@
+ Name[tr]=Komposer Eklentisi
+ Name[uk]=ÐÑÑлок Komposer
+ Name[zh_CN]=Komposer æä»¶
++Name[zh_TW]=Komposer 夿ç¨å¼
+
+ [PropertyDef::X-Komposer-Version]
+ Type=int
+Index: libkdepim/komposer/core/komposereditor.desktop
+===================================================================
+--- libkdepim/komposer/core/komposereditor.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ libkdepim/komposer/core/komposereditor.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -44,6 +44,7 @@
+ Comment[tr]=Komposer Düzenleyicisi
+ Comment[uk]=РедакÑÐ¾Ñ Komposer
+ Comment[zh_CN]=Komposer ç¼è¾å¨
++Comment[zh_TW]=Komposer 編輯å¨
+
+ [PropertyDef::X-Komposer-Weight]
+ Type=int
+Index: libkdepim/kxface.cpp
+===================================================================
+--- libkdepim/kxface.cpp (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ libkdepim/kxface.cpp (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -5,7 +5,7 @@
+ Copyright (c) James Ashton - Sydney University - June 1990.
+
+ Additions for KDE:
+- Copyright (c) 2004 Jakob Schröter <js at camaya.net>
++ Copyright (c) 2004 Jakob Schröter <js at camaya.net>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+@@ -583,6 +583,8 @@
+ default : GEN(g_40);
+ }
+ break;
++ /* i runs from 0 to WIDTH-1, so case can never occur. I leave the code in
++ because it appears exactly like this in the original compface code.
+ case WIDTH :
+ switch (j)
+ {
+@@ -591,6 +593,7 @@
+ default : GEN(g_30);
+ }
+ break;
++ */
+ default :
+ switch (j)
+ {
+Index: libkdepim/addresseelineedit.cpp
+===================================================================
+--- libkdepim/addresseelineedit.cpp (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ libkdepim/addresseelineedit.cpp (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -815,7 +815,7 @@
+ completionBox()->isVisible() ) {
+ QKeyEvent *ke = static_cast<QKeyEvent*>( e );
+ unsigned int currentIndex = completionBox()->currentItem();
+- if ( ke->key() == Key_Up ) {
++ if ( ke->key() == Key_Up || ke->key() == Key_Backtab ) {
+ //kdDebug() << "EVENTFILTER: Key_Up currentIndex=" << currentIndex << endl;
+ // figure out if the item we would be moving to is one we want
+ // to ignore. If so, go one further
+Index: libkcal/localdir.desktop
+===================================================================
+--- libkcal/localdir.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ libkcal/localdir.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -44,6 +44,7 @@
+ Name[tr]=Yerel Dizindeki Takvim
+ Name[uk]=ÐÐ°Ð»ÐµÐ½Ð´Ð°Ñ Ñ Ð»Ð¾ÐºÐ°Ð»ÑÐ½Ð¾Ð¼Ñ ÐºÐ°ÑалозÑ
+ Name[zh_CN]=æ¬å°ç®å½ä¸çæ¥å
++Name[zh_TW]=æ¬å°ç®éä¸çè¡äºæ
+ X-KDE-Library=kcal_localdir
+ Type=Service
+ ServiceTypes=KResources/Plugin
+Index: libkcal/local.desktop
+===================================================================
+--- libkcal/local.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ libkcal/local.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -44,6 +44,7 @@
+ Name[tr]=Yerel Dosyadaki Takvim
+ Name[uk]=ÐÐ°Ð»ÐµÐ½Ð´Ð°Ñ Ñ Ð»Ð¾ÐºÐ°Ð»ÑÐ½Ð¾Ð¼Ñ ÑайлÑ
+ Name[zh_CN]=æ¬å°æä»¶ä¸çæ¥å
++Name[zh_TW]=æ¬å°æªæ¡ä¸çè¡äºæ
+ X-KDE-Library=kcal_local
+ Type=Service
+ ServiceTypes=KResources/Plugin
+Index: libkcal/kcal_manager.desktop
+===================================================================
+--- libkcal/kcal_manager.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ libkcal/kcal_manager.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -23,7 +23,7 @@
+ Name[hu]=Naptár
+ Name[is]=Dagatal
+ Name[it]=Calendario
+-Name[ja]=ã«ã¬ã³ã
++Name[ja]=ã«ã¬ã³ãã¼
+ Name[km]=ááááá·áá·á
+ Name[lt]=Kalendorius
+ Name[ms]=Kalendar
+@@ -48,6 +48,7 @@
+ Name[uk]=ÐалендаÑ
+ Name[uz]=ÐалендаÑ
+ Name[zh_CN]=æ¥å
++Name[zh_TW]=è¡äºæ
+ Type=Service
+ ServiceTypes=KResources/Manager
+
+Index: libkcal/htmlexport.cpp
+===================================================================
+--- libkcal/htmlexport.cpp (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ libkcal/htmlexport.cpp (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -695,7 +695,11 @@
+
+ void HtmlExport::addHoliday( const QDate &date, const QString &name)
+ {
+- mHolidayMap[date] = name;
++ if ( mHolidayMap[date].isEmpty() ) {
++ mHolidayMap[date] = name;
++ } else {
++ mHolidayMap[date] = i18n("list of holidays", "%1, %2").arg(mHolidayMap[date]).arg(name);
++ }
+ }
+
+ QDate HtmlExport::fromDate() const
+Index: kpilot/conduits/sysinfoconduit/sysinfo_conduit.desktop
+===================================================================
+--- kpilot/conduits/sysinfoconduit/sysinfo_conduit.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kpilot/conduits/sysinfoconduit/sysinfo_conduit.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -18,7 +18,7 @@
+ Comment[hi]=यह à¤à¤¨à¥à¤¡à¥à¤¯à¥à¤à¤ à¤à¤ªà¤à¥ हà¥à¤à¤£à¥à¤¡à¤¹à¥à¤²à¥à¤¡ à¤à¥ बारॠमà¥à¤ à¤à¤¾à¤¨à¤à¤¾à¤°à¥ लिà¤à¤¤à¤¾ हॠतथा à¤à¤ फ़ाà¤à¤² मà¥à¤ सिà¤à¤ à¤à¤°à¤¤à¤¾ हà¥.
+ Comment[hu]=Ezzel a csatolóval fájlba lehet kiÃratni a kéziszámÃtógép és a szinkronizálás jellemzÅit
+ Comment[is]=Ãessi rás skrifar upplýsingar um lófatölvuna þÃna og samstillinguna à skrá.
+-Comment[it]=QUesto conduit scrive in un file informazioni sul tuo palmare.
++Comment[it]=Questo conduit scrive in un file informazioni sul tuo palmare.
+ Comment[ja]=ãã®ã³ã³ã¸ããã¯ããªãã®ãã³ããã«ãã®æ
å ±ãæ¸ãåºãããã¡ã¤ã«ã«åæãã¾ãã
+ Comment[km]=áááááâáááâáááááâáááááá¶áâá¢ááá¸âá§áááááâáá½áááâááááâá¢ááá áá·á áá¶áâáááá¾âáááá¶ááááá áá
âá¯ááá¶áâáá½á á
+ Comment[ms]=Saluran ini menulis maklumat tentang komputer telapak dan segerakan ke fail.
+@@ -40,6 +40,7 @@
+ Comment[tr]=Bu bileÅen, el bilgisayarınızın bilgilerini bir dosyaya yazar.
+ Comment[uk]=Цей акведÑк запиÑÑÑ ÑнÑоÑмаÑÑÑ Ð¿Ñо киÑенÑковий пÑиÑÑÑÑй Ñ ÑинÑ
ÑонÑзаÑÑÑ Ñ Ñайл.
+ Comment[zh_CN]=æ¤ç®¡éåå
¥æ¨ææè®¾å¤çä¿¡æ¯ï¼å¹¶åæ¥è³ä¸æä»¶ã
++Comment[zh_TW]=æ¤è»é«å°æ¨ç handheld è³è¨å¯«å
¥æªæ¡ã
+ Name=System Information
+ Name[be]=СÑÑÑÑÐ¼Ð½Ð°Ñ ÑнÑаÑмаÑÑÑ
+ Name[br]=Titouroù diwar-benn ar reizhiad
+@@ -86,6 +87,7 @@
+ Name[uk]=СиÑÑемна ÑнÑоÑмаÑÑÑ
+ Name[uz]=Тизим ҳаÒида маÑлÑмоÑ
+ Name[zh_CN]=ç³»ç»ä¿¡æ¯
++Name[zh_TW]=系統è³è¨
+ Implemented=file
+ ServiceTypes=KPilotConduit
+ X-KDE-Library=conduit_sysinfo
+Index: kpilot/conduits/notepadconduit/notepad-conduit.desktop
+===================================================================
+--- kpilot/conduits/notepadconduit/notepad-conduit.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kpilot/conduits/notepadconduit/notepad-conduit.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -43,6 +43,7 @@
+ Comment[pt]=Esta conduta salvaguarda desenhos NotePad para uma pasta local.
+ Comment[pt_BR]=Este conduÃte faz backup de desenhos do NotePad em uma pasta local.
+ Comment[ru]=Ðанал ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ ÑезеÑвнÑÑ
копий пÑимеÑаний в локалÑной папке.
++Comment[sk]=Táto spojka zálohuje poznámky NotePad do lokálneho prieÄinku.
+ Comment[sl]=Ta veznik arhivira risanja z NotePadom v krajevno mapo.
+ Comment[sr]=ÐÐ²Ð°Ñ Ð¿Ñовод пÑави ÑезеÑвне копиÑе NotePad ÑÑÑежа Ñ Ð»Ð¾ÐºÐ°Ð»Ð½Ñ ÑаÑÑиклÑ.
+ Comment[sr at Latn]=Ovaj provod pravi rezervne kopije NotePad crteža u lokalnu fasciklu.
+@@ -51,6 +52,7 @@
+ Comment[tr]=Bu bileÅen, NotePad çizimlerini yerel bir dosyaya aktarır veya alır.
+ Comment[uk]=Цей акведÑк ÑÑвоÑÑÑ ÑезеÑÐ²Ð½Ñ ÐºÐ¾Ð¿ÑÑ Ð½Ð¾ÑаÑок Ñ Ð»Ð¾ÐºÐ°Ð»ÑнÑй ÑеÑÑ.
+ Comment[zh_CN]=æ¤ç®¡éå°è®°äºæ¬çç»å¾ä¿åå°æ¬å°æä»¶å¤¹ã
++Comment[zh_TW]=æ¤è»é«å份 NotePad ç«çåå°æ¬å°ç«¯è³æå¤¾ã
+ Implemented=file
+ ServiceTypes=KPilotConduit
+ X-KDE-Library=conduit_notepad
+Index: kpilot/conduits/memofileconduit/memofile-conduit.desktop
+===================================================================
+--- kpilot/conduits/memofileconduit/memofile-conduit.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kpilot/conduits/memofileconduit/memofile-conduit.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -28,12 +28,14 @@
+ Name[pt]=Ficheiro Memorando
+ Name[pt_BR]=Arquivo Memo
+ Name[ru]=ÐамеÑка
++Name[sk]=Memo súbor
+ Name[sl]=Datoteka z opombami
+ Name[sv]=Anteckningsfil
+ Name[ta]=à®®à¯à®®à¯ à®à¯à®ªà¯à®ªà¯
+ Name[tr]=Hatırlatma Dosyası
+ Name[uk]=Файл пÑимÑÑки
+ Name[zh_CN]=å¤å¿æä»¶
++Name[zh_TW]=Memo æª
+ Comment=This conduit syncs your handheld memos with a local directory.
+ Comment[bg]=СинÑ
ÑонизаÑÐ¸Ñ Ð½Ð° бележкиÑе на ÐÐÐ Ñ Ð¼Ð¾Ð±Ð¸Ð»Ð½Ð¸ ÑÑÑÑойÑÑва.
+ Comment[ca]=Aquest conducte sincronitza les notes de l'agenda electrònica amb un directori local.
+@@ -60,6 +62,7 @@
+ Comment[pt]=Esta conduta sincroniza os memorandos do seu PDA com uma pasta local.
+ Comment[pt_BR]=Este conduÃte sincroniza as anotações no seu handheld com um diretório local.
+ Comment[ru]=Ðанал ÑинÑ
ÑонизаÑии замеÑок ÐÐРи KDE.
++Comment[sk]=Táto spojka synchronizuje adresár vášho prenosného zariadenia s lokálnym prieÄinkom.
+ Comment[sl]=Ta veznik usklajuje opombe v roÄnem raÄunalniku s krajevnim imenikom.
+ Comment[sr]=ÐÐ²Ð°Ñ Ð¿Ñовод ÑинÑ
ÑонизÑÑе белеÑке на ваÑем ÑÑÑном ÑаÑÑнаÑÑ Ñа локалним диÑекÑоÑиÑÑмом.
+ Comment[sr at Latn]=Ovaj provod sinhronizuje beleÅ¡ke na vaÅ¡em ruÄnom raÄunaru sa lokalnim direktorijumom.
+@@ -68,6 +71,7 @@
+ Comment[tr]=Bu bileÅen el bilgisayarı hatırlatmalarını yerel bir dosyaya aktarır veya alır.
+ Comment[uk]=Цей акведÑк ÑинÑ
ÑонÑзÑÑ Ð¿ÑимÑÑки киÑенÑкового пÑиÑÑÑÐ¾Ñ Ð· локалÑним каÑалогом.
+ Comment[zh_CN]=æ¤ç®¡éä¼å°æ¨ææè®¾å¤ä¸çå¤å¿ä¸æ¬å°ç®å½åæ¥ã
++Comment[zh_TW]=æ¤è»é«åæ¥æ¨ç handheld memo 忬å°ç«¯ç®éã
+ Implemented=file
+ ServiceTypes=KPilotConduit
+ X-KDE-Library=conduit_memofile
+Index: kpilot/conduits/timeconduit/time_conduit.desktop
+===================================================================
+--- kpilot/conduits/timeconduit/time_conduit.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kpilot/conduits/timeconduit/time_conduit.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -40,6 +40,7 @@
+ Comment[tr]=Bu bileÅen, el bilgisayarınızın saatini PC saatine bakarak ayarlar.
+ Comment[uk]=Цей акведÑк ÑинÑ
ÑонÑзÑÑ ÑÐ°Ñ Ñ ÐºÐ¸ÑенÑÐºÐ¾Ð²Ð¾Ð¼Ñ Ð¿ÑиÑÑÑÐ¾Ñ Ð· ÑаÑом комп'ÑÑеÑа.
+ Comment[zh_CN]=æ¤ç®¡éææ¨ææè®¾å¤çæ¶é´ä¸çµè忥ã
++Comment[zh_TW]=æ¤è»é«ç¶ç± PC æéè¨å®æ¨ç handheld æéã
+ Name=Time Synchronization
+ Name[be]=СÑнÑ
ÑанÑзаÑÑÑ ÑаÑÑ
+ Name[bs]=Sinhronizacija vremena
+@@ -83,6 +84,7 @@
+ Name[tr]=Zaman Senkronizasyonu
+ Name[uk]=СинÑ
ÑонÑзаÑÑÑ ÑаÑÑ
+ Name[zh_CN]=æ¶é´åæ¥
++Name[zh_TW]=æå»åæ¥å
+ Implemented=file
+ ServiceTypes=KPilotConduit
+ X-KDE-Library=conduit_time
+Index: kpilot/conduits/perlconduit/perl-conduit.desktop
+===================================================================
+--- kpilot/conduits/perlconduit/perl-conduit.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kpilot/conduits/perlconduit/perl-conduit.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -16,6 +16,7 @@
+ Name[fr]=Perl (exemple)
+ Name[ga]=Perl (Sampla)
+ Name[gl]=Perl (Mostra)
++Name[he]=Perl (×××××)
+ Name[hu]=Perl (példa)
+ Name[is]=Perl (Dæmi)
+ Name[it]=Perl (esempio)
+@@ -42,6 +43,7 @@
+ Name[tr]=Perl (Ãrnek)
+ Name[uk]=Perl (зÑазок)
+ Name[zh_CN]=Perl (ä¾å)
++Name[zh_TW]=Perl (ç¯ä¾)
+ Comment=This sample conduit runs a Perl interpreter.
+ Comment[bg]=ÐÑÐ¸Ð¼ÐµÑ Ð·Ð° изпÑлнение на инÑеÑпÑеÑаÑоÑа на Perl
+ Comment[bs]=Ovaj conduit poziva Perl interpreter.
+@@ -81,6 +83,7 @@
+ Comment[tr]=Bu bileÅen, bir Perl yorumlayıcısını çalıÅtırır.
+ Comment[uk]=Цей акведÑк запÑÑÐºÐ°Ñ ÑнÑеÑпÑеÑаÑÐ¾Ñ Perl.
+ Comment[zh_CN]=æ¤ç¤ºä¾ç®¡éè¿è¡ Perl è§£éå¨ã
++Comment[zh_TW]=æ¤ç¯ä¾å·è¡ Perl ç´è¯å¨ã
+ Implemented=file
+ ServiceTypes=KPilotConduit
+ X-KDE-Library=conduit_perl
+Index: kpilot/conduits/docconduit/kpalmdoc.desktop
+===================================================================
+--- kpilot/conduits/docconduit/kpalmdoc.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kpilot/conduits/docconduit/kpalmdoc.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -48,6 +48,7 @@
+ GenericName[tr]=PalmDOC Ãevirici
+ GenericName[uk]=ÐеÑеÑвоÑÑÐ²Ð°Ñ PalmDOC
+ GenericName[zh_CN]=PalmDOC 转æ¢å¨
++GenericName[zh_TW]=PalmDOC è½æå¨
+ Exec=kpalmdoc
+ Icon=kpalmdoc
+ Type=Application
+Index: kpilot/conduits/docconduit/doc_conduit.desktop
+===================================================================
+--- kpilot/conduits/docconduit/doc_conduit.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kpilot/conduits/docconduit/doc_conduit.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -28,6 +28,7 @@
+ Comment[pt]=Adiciona ficheiros de texto ao seu PDA, indicado para os leitores de DOC.
+ Comment[pt_BR]=Adiciona arquivos de texto ao seu handheld, adequado para leitors de DOC.
+ Comment[ru]=ÐеÑÐµÐ½Ð¾Ñ ÑекÑÑовÑÑ
Ñайлов на ÐÐÐ.
++Comment[sk]=Pridá textové súbory do ruÄného zariadenia, vhodné pre ÄÃtanie DOC.
+ Comment[sl]=V vaÅ¡ roÄni raÄunalnik doda besedilne datoteke, primerne za bralnike DOC.
+ Comment[sr]=ÐодаÑе ÑекÑÑÑалне ÑаÑлове ваÑем ÑÑÑном ÑаÑÑнаÑÑ, погодне за DOC ÑиÑаÑе.
+ Comment[sr at Latn]=Dodaje tekstualne fajlove vaÅ¡em ruÄnom raÄunaru, pogodne za DOC ÄitaÄe.
+@@ -36,6 +37,7 @@
+ Comment[tr]=Metin dosyalarını el bilgisayarınıza ekler, DOC biçimi okuyucuları için uygundur.
+ Comment[uk]=ÐÐ¾Ð´Ð°Ñ ÑекÑÑÐ¾Ð²Ñ Ñайли до ваÑого киÑенÑкового пÑиÑÑÑÐ¾Ñ Ñак, Ñо вони ÑиÑаÑимÑÑÑÑÑ Ñ Ð¿ÐµÑеглÑдаÑаÑ
DOC.
+ Comment[zh_CN]=å°ææ¬æä»¶æ·»å å°æ¨çææè®¾å¤ä¸ï¼ä»¥ä¾¿éå DOC é
读ç¨åºã
++Comment[zh_TW]=æ°å¢æåå°æ¨ç handheldã
+ Name=Palm DOC
+ Name[ca]=DOC de Palm
+ Name[cy]=DOC Palm
+Index: kpilot/conduits/malconduit/mal_conduit.desktop
+===================================================================
+--- kpilot/conduits/malconduit/mal_conduit.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kpilot/conduits/malconduit/mal_conduit.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -70,6 +70,7 @@
+ Comment[pt]=Sincroniza o AvantGo (ou, genericamente, o conteúdo de um servidor de MAL) para o dispositivo móvel. Isto permite-lhe ver as páginas Web no dispositivo móvel sem estar ligado, como o seu horário de cinema ou TV ou ainda qualquer outra página Web.
+ Comment[pt_BR]=Sincroniza AvantGo (ou geralmente o conteúodo de um servidor MAL) com o handheld. Isto permite que você visualize páginas web offline no handheld, por exemplo a grade do cinema ou TV, ou qualquer outra página.
+ Comment[ru]=СинÑ
ÑонизаÑÐ¸Ñ AvantGo (ÑодеÑжимого ÑеÑвеÑов MAL) Ñ ÐÐÐ. ÐÑо Ð¿Ð¾Ð·Ð²Ð¾Ð»Ð¸Ñ Ð²Ð°Ð¼ пÑоÑмаÑÑиваÑÑ Ð²ÐµÐ±-ÑÑÑаниÑÑ Ð±ÐµÐ· подклÑÑÐµÐ½Ð¸Ñ Ðº ÐнÑеÑнеÑ.
++Comment[sk]=Synchronizuje AvantGo (alebo vÅ¡eobecne obsah MAL servera) s ruÄným zariadenÃm. Toto umožnà vidieÅ¥ webovské stránky bez pripojenia na ruÄnom zariadenÃ, ako sú programy kina alebo TV, alebo hociakej webovskej stránky.
+ Comment[sl]=Uskladi AvantGo (oziroma v sploÅ¡nem vsebino strežnika MAL) na roÄnem raÄunalniku. S tem si lahko na njem ogledujete spletne strani brez povezave, kot so razpored kino predstav ali pa TV spored ali pa katerokoli drugo spletno stran.
+ Comment[sr]=СинÑ
ÑонизÑÑе AvantGo (или ÑопÑÑено ÑадÑÐ¶Ð°Ñ MAL ÑеÑвеÑа) Ñа ÑÑÑним ÑаÑÑнаÑом. Ðво вам омогÑÑава да на ÑÑÑном ÑаÑÑнаÑÑ Ð¿ÑегледаÑе веб ÑÑÑане ван везе, као биоÑкопÑки или ТРпÑогÑам, или било коÑÑ Ð´ÑÑÐ³Ñ Ð²ÐµÐ± ÑÑÑанÑ.
+ Comment[sr at Latn]=Sinhronizuje AvantGo (ili uopÅ¡teno sadržaj MAL servera) sa ruÄnim raÄunarom. Ovo vam omoguÄava da na ruÄnom raÄunaru pregledate veb strane van veze, kao bioskopski ili TV program, ili bilo koju drugu veb stranu.
+@@ -78,6 +79,7 @@
+ Comment[tr]=AvantGo içeriÄini (ya da genel olarak MAL sunucuları içeriÄini) el bilgisayarı ile birleÅtirir. Bu, web sayfalarını el bilgisayarınızda çevirim dıÅı olarak görüntülemenizi saÄlar.
+ Comment[uk]=СинÑ
ÑонÑзаÑÑÑ AvantGo (або вмÑÑÑ ÑеÑвеÑÑв MAL) на киÑенÑковий пÑиÑÑÑÑй . Це дозволÑÑ Ð¿ÐµÑеглÑдаÑи веб-ÑÑоÑÑнки на киÑенÑÐºÐ¾Ð²Ð¾Ð¼Ñ Ð¿ÑиÑÑÑÐ¾Ñ Ð±ÐµÐ· з'ÑÐ´Ð½Ð°Ð½Ð½Ñ Ð· ÐнÑеÑнеÑом.
+ Comment[zh_CN]=å° AvantGo(æ MAL æå¡å¨çå
容)忥尿æè®¾å¤ä¸ãè¿å
许æ¨å¨ææè®¾å¤ä¸è±æºæ¥ç Web é¡µï¼æ¯å¦å½±è®¯ãçµè§èç®æ¶é´è¡¨æä»»ä½å
¶å®ç½é¡µã
++Comment[zh_TW]=忥 AvantGo (æé常çºä¸ MAL 伺æå¨å
§å®¹) è handheldã
+ Implemented=file
+ ServiceTypes=KPilotConduit
+ X-KDE-Library=conduit_mal
+Index: kpilot/conduits/popmail/popmail-conduit.desktop
+===================================================================
+--- kpilot/conduits/popmail/popmail-conduit.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kpilot/conduits/popmail/popmail-conduit.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -27,6 +27,7 @@
+ Comment[pt]=Enviar e-mail do seu dispositivo móvel através do KMail.
+ Comment[pt_BR]=Envia e-mail do seu handheld através do Kmail.
+ Comment[ru]=ÐÑпÑавка поÑÑÑ Ñ ÐÐÐ ÑеÑез KMail.
++Comment[sk]=Pošle poštu z prenosného zariadenia cez KMail.
+ Comment[sl]=PoÅ¡ljite poÅ¡to z vaÅ¡ega roÄnega raÄunalnika preko KMaila.
+ Comment[sr]=ÐоÑаÑиÑе поÑÑÑ Ñа ваÑег ÑÑÑног ÑаÑÑнаÑа кÑоз KMail.
+ Comment[sr at Latn]=PoÅ¡aljite poÅ¡tu sa vaÅ¡eg ruÄnog raÄunara kroz KMail.
+@@ -35,6 +36,7 @@
+ Comment[tr]=El bilgisayarınızdan KMail aracılıÄı ile e-posta gönderir.
+ Comment[uk]=ÐÑдÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð¿Ð¾ÑÑи з киÑенÑкового пÑиÑÑÑÐ¾Ñ ÑеÑез KMail.
+ Comment[zh_CN]=éè¿ KMail 仿¨çææè®¾å¤åéé®ä»¶ã
++Comment[zh_TW]=éé KMail éåºæ¨ handheld çä¿¡ä»¶ã
+ Name=Mail
+ Name[be]=ÐоÑÑа
+ Name[br]=Lizher
+@@ -82,6 +84,7 @@
+ Name[uk]=ÐоÑÑа
+ Name[uz]=ХаÑ-Ñ
абаÑ
+ Name[zh_CN]=é®ä»¶
++Name[zh_TW]=éµä»¶
+ Implemented=file
+ ServiceTypes=KPilotConduit
+ X-KDE-Library=conduit_popmail
+Index: kpilot/conduits/knotes/knotes-conduit.desktop
+===================================================================
+--- kpilot/conduits/knotes/knotes-conduit.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kpilot/conduits/knotes/knotes-conduit.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -42,6 +42,7 @@
+ Comment[tr]=Bu kanal KNotes ile el bilgisayarınızı senkronize etmenize olanak saÄlar
+ Comment[uk]=Цей акведÑк ÑинÑ
ÑонÑзÑÑ Memo Pad з Ñижневиком KNotes.
+ Comment[zh_CN]=æ¤ç®¡éå°ä¼å°æ¨çå¤å¿ç¨åºä¸ KNotes 忥ã
++Comment[zh_TW]=æ¤è»é«å° KNote è Memo Pad æç¨ç¨å¼åæ¥ã
+ Name=KNotes / Memos
+ Name[be]=K ÐаÑаÑкÑ
+ Name[bg]=KNotes/Memos
+Index: kpilot/conduits/pythonconduit/python-conduit.desktop
+===================================================================
+--- kpilot/conduits/pythonconduit/python-conduit.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kpilot/conduits/pythonconduit/python-conduit.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -16,6 +16,7 @@
+ Name[fr]=Python (exemple)
+ Name[ga]=Python (Sampla)
+ Name[gl]=Python (Mostra)
++Name[he]=Python (×××××)
+ Name[hu]=Python (példa)
+ Name[is]=Python (Dæmi)
+ Name[it]=Python (esempio)
+@@ -42,6 +43,7 @@
+ Name[tr]=Python (Ãrnek)
+ Name[uk]=Python (зÑазок)
+ Name[zh_CN]=Python (ä¾å)
++Name[zh_TW]=Python (ç¯ä¾)
+ Comment=This sample conduit runs a Python interpreter.
+ Comment[bg]=ÐÑÐ¸Ð¼ÐµÑ Ð·Ð° изпÑлнение на инÑеÑпÑеÑаÑоÑа на Python
+ Comment[bs]=Ovaj conduit pozivan Python interpreter.
+@@ -81,6 +83,7 @@
+ Comment[tr]=Bu bileÅen, bir Python yorumlayıcısını çalıÅtırır.
+ Comment[uk]=Цей акведÑк запÑÑÐºÐ°Ñ ÑнÑеÑпÑеÑаÑÐ¾Ñ Python.
+ Comment[zh_CN]=æ¤ç¤ºä¾ç®¡éè¿è¡ Python è§£éå¨ã
++Comment[zh_TW]=æ¤ç¯ä¾å·è¡ Python ç´è¯å¨ã
+ Implemented=file
+ ServiceTypes=KPilotConduit
+ X-KDE-Library=conduit_python
+Index: kpilot/conduits/null/null-conduit.desktop
+===================================================================
+--- kpilot/conduits/null/null-conduit.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kpilot/conduits/null/null-conduit.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -48,6 +48,7 @@
+ Comment[tr]=Bu kanal herhangi bir iÅlem yapmaz.
+ Comment[uk]=Цей акведÑк нÑÑого не ÑобиÑÑ.
+ Comment[zh_CN]=æ¤ç®¡éä¸åä»»ä½äºã
++Comment[zh_TW]=ä¸åä»»ä½äºã
+ Implemented=file
+ ServiceTypes=KPilotConduit
+ X-KDE-Library=conduit_null
+Index: kpilot/conduits/vcalconduit/todo-conduit.desktop
+===================================================================
+--- kpilot/conduits/vcalconduit/todo-conduit.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kpilot/conduits/vcalconduit/todo-conduit.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -40,6 +40,7 @@
+ Comment[tr]=Bu bileÅen el bilgisayarınızdaki Yapılacaklar Listesini KOrganizer ile birleÅtirir.
+ Comment[uk]=Цей акведÑк ÑинÑ
ÑонÑзÑÑ ÑпиÑок Ð·Ð°Ð²Ð´Ð°Ð½Ñ ÐºÐ¸ÑенÑкового пÑиÑÑÑÐ¾Ñ Ð· Ñижневиком KOrganizer.
+ Comment[zh_CN]=æ¤ç®¡éä¼å°æ¨çå¾
ååè¡¨ä¸ KOrganizer 忥ã
++Comment[zh_TW]=æ¤è»é«å°æ¨ç handheld è KOrganizer çå¾
辦äºé
æ¸
å®åæ¥ã
+ Name=ToDos (KOrganizer)
+ Name[be]=ÐаданÑÐ½Ñ (K ÐÑганÑзаÑаÑ)
+ Name[br]=Traoù d'ober (KOrganizer)
+@@ -56,6 +57,7 @@
+ Name[fr]=Tâches (KOrganizer)
+ Name[ga]=Tascanna (KOrganizer)
+ Name[gl]=Pendentes (KOrganizer)
++Name[he]=××××ת (×ר××× ×ת)
+ Name[hu]=Feladatok (KOrganizer)
+ Name[is]=Verkþáttalistar (KOrganizer)
+ Name[it]=Cose da fare (KOrganizer)
+@@ -82,6 +84,7 @@
+ Name[tr]=Yapılacaklar (KOrganizer)
+ Name[uk]=ÐÐ°Ð²Ð´Ð°Ð½Ð½Ñ (KOrganizer)
+ Name[zh_CN]=å¾
åäºé¡¹ (KOrganizer)
++Name[zh_TW]=å¾
辦äºé
(KOrganizer)
+ Implemented=file
+ ServiceTypes=KPilotConduit
+ X-KDE-Library=conduit_todo
+Index: kpilot/conduits/vcalconduit/vcal-conduit.desktop
+===================================================================
+--- kpilot/conduits/vcalconduit/vcal-conduit.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kpilot/conduits/vcalconduit/vcal-conduit.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -17,10 +17,11 @@
+ Name[fr]=Agenda (KOrganizer)
+ Name[ga]=Féilire (KOrganizer)
+ Name[gl]=Calendario (KOrganizer)
++Name[he]=××× ×©× × (×ר××× ×ת)
+ Name[hu]=Naptár (KOrganizer)
+ Name[is]=Dagbók (KOrganizer)
+ Name[it]=Calendario (KOrganizer)
+-Name[ja]=ã«ã¬ã³ã (KOrganizer)
++Name[ja]=ã«ã¬ã³ãã¼ (KOrganizer)
+ Name[km]=ááááá·áá·á (KOrganizer)
+ Name[lt]=Kalendorius (KOrganizer)
+ Name[ms]=Kalendar (KOrganizer)
+@@ -43,6 +44,7 @@
+ Name[tr]=Takvim (KOrganizer)
+ Name[uk]=ÐÐ°Ð»ÐµÐ½Ð´Ð°Ñ (KOrganizer)
+ Name[zh_CN]=æ¥å (KOrganizer)
++Name[zh_TW]=è¡äºæ(KOrganizer)
+ Comment=This conduit synchronizes your handheld with the KOrganizer datebook.
+ Comment[bg]=СинÑ
ÑонизаÑÐ¸Ñ Ð½Ð° календаÑа на мобилно ÑÑÑÑойÑÑво Ñ Ð¾ÑганизаÑоÑа в ÐÐÐ.
+ Comment[ca]=Aquest conducte sincronitza la vostra agenda electrònica amb la llibreta de dates de KOrganizer.
+@@ -69,6 +71,7 @@
+ Comment[pt]=Esta conduta sincroniza o seu dispositivo móvel com a agenda do KOrganizer.
+ Comment[pt_BR]=Este ConduÃte sincroniza seu handheld com a agenda do KOrganizer.
+ Comment[ru]=Ðанал ÑинÑ
ÑонизаÑии календаÑÑ ÐÐРи оÑганайзеÑа KDE.
++Comment[sk]=Táto spojka synchronizuje prenosné zariadenie s KOrganizer.
+ Comment[sl]=Ta veznik uskladni vaÅ¡ roÄni raÄunalnik z dnevnikom KOrganizerja.
+ Comment[sr]=ÐÐ²Ð°Ñ Ð¿Ñовод ÑинÑ
ÑонизÑÑе Ð²Ð°Ñ ÑÑÑни ÑаÑÑÐ½Ð°Ñ Ñа KOrganizer-овом кÑигом даÑÑма.
+ Comment[sr at Latn]=Ovaj provod sinhronizuje vaÅ¡ ruÄni raÄunar sa KOrganizer-ovom knjigom datuma.
+@@ -77,6 +80,7 @@
+ Comment[tr]=Bu bileÅen el bilgisayarınızı KOrganizer'daki randevu defteriyle senkronize eder.
+ Comment[uk]=Цей акведÑк ÑинÑ
ÑонÑзÑÑ Ð²Ð°Ñ ÐºÐ¸ÑенÑковий пÑиÑÑÑÑй з Ñижневиком KOrganizer.
+ Comment[zh_CN]=æ¤ç®¡éä¼å°æ¨çææè®¾å¤ä¸ KOrganizer çæ¥ç¨å®æåæ¥ã
++Comment[zh_TW]=æ¤è»é«å°æ¨ç handheld æ¥æè KOrganizer 忥ã
+ Implemented=file
+ ServiceTypes=KPilotConduit
+ X-KDE-Library=conduit_vcal
+Index: kpilot/conduits/abbrowserconduit/abbrowser_conduit.desktop
+===================================================================
+--- kpilot/conduits/abbrowserconduit/abbrowser_conduit.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kpilot/conduits/abbrowserconduit/abbrowser_conduit.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -41,6 +41,7 @@
+ Comment[tr]=Bu bileÅen el bilgisayarı adres defteri ile KDE'ninkini birleÅtirir.
+ Comment[uk]=Цей акведÑк ÑинÑ
ÑонÑзÑÑ Ð°Ð´ÑеÑÐ½Ñ ÐºÐ½Ð¸Ð³Ñ ÐºÐ¸ÑенÑкового пÑиÑÑÑÐ¾Ñ Ð· адÑеÑÐ½Ð¾Ñ ÐºÐ½Ð¸Ð³Ð¾Ñ KDE.
+ Comment[zh_CN]=æ¤ç®¡éä¼å°æ¨çææè®¾å¤ä¸ KDE çå°åç°¿åæ¥ã
++Comment[zh_TW]=æ¤è»é«è®æ¨æ KDE éè¨éèæééè¨é忥ã
+ Name=Addressbook
+ Name[ar]=Ø¯ÙØªØ± Ø§ÙØ¹ÙاÙÙÙ
+ Name[az]=Ãnvan DÉftÉri
+@@ -91,6 +92,7 @@
+ Name[uk]=ÐдÑеÑна книга
+ Name[uz]=ÐÐ°Ð½Ð·Ð¸Ð»Ð»Ð°Ñ Ð´Ð°ÑÑаÑи
+ Name[zh_CN]=å°åç°¿
++Name[zh_TW]=éè¨é
+ Implemented=file
+ ServiceTypes=KPilotConduit
+ X-KDE-Library=conduit_address
+Index: kpilot/kpilot/kpilot_config.desktop
+===================================================================
+--- kpilot/kpilot/kpilot_config.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kpilot/kpilot/kpilot_config.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -53,6 +53,7 @@
+ Name[tr]=KPilot Yapılandırması
+ Name[uk]=ÐалаÑÑÑÐ²Ð°Ð½Ð½Ñ KPilot
+ Name[zh_CN]=KPilot é
ç½®
++Name[zh_TW]=KPilot è¨å®
+ Comment=KPilot Main Configuration
+ Comment[bg]=Ðлавни наÑÑÑойки на KPilot
+ Comment[bs]=KPilot glavno podešavanje
+@@ -93,6 +94,7 @@
+ Comment[tr]=KPilot Ana Yapılandırması
+ Comment[uk]=ÐагалÑÐ½Ñ Ð¿Ð°ÑамеÑÑи KPilot
+ Comment[zh_CN]=KPilot 主è¦é
ç½®
++Comment[zh_TW]=KPilot 主è¨å®
+ Keywords=kpilot,main
+ Keywords[bg]=главни, наÑÑÑойки, мобилен, мобилни, ÑÑÑÑойÑÑво, ÑÑÑÑойÑÑва, kpilot, main
+ Keywords[ca]=kpilot,principal
+Index: knotes/KNotesAppIface.h
+===================================================================
+--- knotes/KNotesAppIface.h (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ knotes/KNotesAppIface.h (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -96,6 +96,29 @@
+ virtual ASYNC setText( const QString& noteId, const QString& newText ) = 0;
+
+ /**
++ * Returns the foreground/text color of a note.
++ * @param noteId the id of the note in question
++ * @return the foreground/text color as a QString
++ */
++ virtual QString fgColor( const QString& noteId ) const = 0;
++
++ /**
++ * Returns the background color of a note.
++ * @param noteId the id of the note in question
++ * @return the background color as a QString
++ */
++ virtual QString bgColor( const QString& noteId ) const = 0;
++
++ /**
++ * Sets the color (foreground and background color) of a note.
++ * @param noteId the id of the note
++ * @param fgColor the new text color for the note
++ * @param bgColor the new background color for the note
++ */
++ virtual ASYNC setColor( const QString& noteId, const QString& fgColor,
++ const QString& bgColor ) = 0;
++
++ /**
+ * Returns the title/name of a note.
+ * @param noteId the id of the note in question
+ * @return the name as a QString
+Index: knotes/knotesapp.h
+===================================================================
+--- knotes/knotesapp.h (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ knotes/knotesapp.h (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -72,6 +72,12 @@
+ void setName( const QString& id, const QString& newName );
+ void setText( const QString& id, const QString& newText );
+
++ QString fgColor( const QString& id ) const;
++ QString bgColor( const QString& id ) const;
++
++ void setColor( const QString& id, const QString& fgColor,
++ const QString& bgColor );
++
+ QMap<QString,QString> notes() const;
+
+ void sync( const QString& app );
+Index: knotes/knote.cpp
+===================================================================
+--- knotes/knote.cpp (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ knotes/knote.cpp (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -372,7 +372,7 @@
+ void KNote::slotKill( bool force )
+ {
+ if ( !force &&
+- KMessageBox::warningContinueCancel( this,
++ KMessageBox::warningContinueCancel( this,
+ i18n("<qt>Do you really want to delete note <b>%1</b>?</qt>").arg( m_label->text() ),
+ i18n("Confirm Delete"), KGuiItem( i18n("&Delete"), "editdelete" ),
+ "ConfirmDeleteNote"
+@@ -474,6 +474,80 @@
+ saveData();
+ }
+
++QColor KNote::fgColor() const
++{
++ return m_config->fgColor();
++}
++
++QColor KNote::bgColor() const
++{
++ return m_config->bgColor();
++}
++
++void KNote::setColor( const QColor& fg, const QColor& bg )
++{
++ m_journal->setCustomProperty( "KNotes", "FgColor", fg.name() );
++ m_journal->setCustomProperty( "KNotes", "BgColor", bg.name() );
++ m_config->setFgColor( fg );
++ m_config->setBgColor( bg );
++
++ m_journal->updated(); // because setCustomProperty() doesn't call it!!
++ emit sigDataChanged();
++ m_config->writeConfig();
++
++ QPalette newpalette = palette();
++ newpalette.setColor( QColorGroup::Background, bg );
++ newpalette.setColor( QColorGroup::Foreground, fg );
++ newpalette.setColor( QColorGroup::Base, bg ); // text background
++ newpalette.setColor( QColorGroup::Text, fg ); // text color
++ newpalette.setColor( QColorGroup::Button, bg );
++ newpalette.setColor( QColorGroup::ButtonText, fg );
++
++// newpalette.setColor( QColorGroup::Highlight, bg );
++// newpalette.setColor( QColorGroup::HighlightedText, fg );
++
++ // the shadow
++ newpalette.setColor( QColorGroup::Midlight, bg.light(150) );
++ newpalette.setColor( QColorGroup::Shadow, bg.dark(116) );
++ newpalette.setColor( QColorGroup::Light, bg.light(180) );
++ if ( s_ppOffset )
++ newpalette.setColor( QColorGroup::Dark, bg.dark(200) );
++ else
++ newpalette.setColor( QColorGroup::Dark, bg.dark(108) );
++ setPalette( newpalette );
++
++ // set the text color
++ m_editor->setTextColor( fg );
++
++ // set the background color or gradient
++ updateBackground();
++
++ // set darker value for the hide button...
++ QPalette darker = palette();
++ darker.setColor( QColorGroup::Button, bg.dark(116) );
++ m_button->setPalette( darker );
++
++ // update the icon color
++ KIconEffect effect;
++ QPixmap icon = effect.apply( kapp->icon(), KIconEffect::Colorize, 1, bg, false );
++ QPixmap miniIcon = effect.apply( kapp->miniIcon(), KIconEffect::Colorize, 1, bg, false );
++ KWin::setIcons( winId(), icon, miniIcon );
++
++ // set the color for the selection used to highlight the find stuff
++ QColor sel = palette().color( QPalette::Active, QColorGroup::Base ).dark();
++ if ( sel == Qt::black )
++ sel = palette().color( QPalette::Active, QColorGroup::Base ).light();
++
++ m_editor->setSelectionAttributes( 1, sel, true );
++
++ // update the color of the fold
++ createFold();
++
++ // update the color of the title
++ updateFocus();
++ emit sigColorChanged();
++}
++
+ void KNote::find( const QString& pattern, long options )
+ {
+ delete m_find;
+@@ -926,61 +1000,6 @@
+ KWin::setOnDesktop( winId(), desktop );
+ }
+
+-void KNote::setColor( const QColor &fg, const QColor &bg )
+-{
+- QPalette newpalette = palette();
+- newpalette.setColor( QColorGroup::Background, bg );
+- newpalette.setColor( QColorGroup::Foreground, fg );
+- newpalette.setColor( QColorGroup::Base, bg ); // text background
+- newpalette.setColor( QColorGroup::Text, fg ); // text color
+- newpalette.setColor( QColorGroup::Button, bg );
+- newpalette.setColor( QColorGroup::ButtonText, fg );
+-
+-// newpalette.setColor( QColorGroup::Highlight, bg );
+-// newpalette.setColor( QColorGroup::HighlightedText, fg );
+-
+- // the shadow
+- newpalette.setColor( QColorGroup::Midlight, bg.light(150) );
+- newpalette.setColor( QColorGroup::Shadow, bg.dark(116) );
+- newpalette.setColor( QColorGroup::Light, bg.light(180) );
+- if ( s_ppOffset )
+- newpalette.setColor( QColorGroup::Dark, bg.dark(200) );
+- else
+- newpalette.setColor( QColorGroup::Dark, bg.dark(108) );
+- setPalette( newpalette );
+-
+- // set the text color
+- m_editor->setTextColor( fg );
+-
+- // set the background color or gradient
+- updateBackground();
+-
+- // set darker value for the hide button...
+- QPalette darker = palette();
+- darker.setColor( QColorGroup::Button, bg.dark(116) );
+- m_button->setPalette( darker );
+-
+- // update the icon color
+- KIconEffect effect;
+- QPixmap icon = effect.apply( kapp->icon(), KIconEffect::Colorize, 1, bg, false );
+- QPixmap miniIcon = effect.apply( kapp->miniIcon(), KIconEffect::Colorize, 1, bg, false );
+- KWin::setIcons( winId(), icon, miniIcon );
+-
+- // set the color for the selection used to highlight the find stuff
+- QColor sel = palette().color( QPalette::Active, QColorGroup::Base ).dark();
+- if ( sel == Qt::black )
+- sel = palette().color( QPalette::Active, QColorGroup::Base ).light();
+-
+- m_editor->setSelectionAttributes( 1, sel, true );
+-
+- // update the color of the fold
+- createFold();
+-
+- // update the color of the title
+- updateFocus();
+- emit sigColorChanged();
+-}
+-
+ void KNote::createFold()
+ {
+ QPixmap fold( 15, 15 );
+@@ -1243,11 +1262,7 @@
+
+ QColor bg;
+ if ( KColorDrag::decode( e, bg ) )
+- {
+ setColor( paletteForegroundColor(), bg );
+- m_journal->setCustomProperty( "KNotes", "BgColor", bg.name() );
+- m_config->setBgColor( bg );
+- }
+ }
+
+ bool KNote::focusNextPrevChild( bool )
+Index: knotes/local.desktop
+===================================================================
+--- knotes/local.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ knotes/local.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -43,6 +43,7 @@
+ Name[tr]=Yerel Dosyadaki Notlar
+ Name[uk]=ÐоÑаÑки Ñ Ð»Ð¾ÐºÐ°Ð»ÑÐ½Ð¾Ð¼Ñ ÑайлÑ
+ Name[zh_CN]=æ¬å°æä»¶ä¸çç¬è®°
++Name[zh_TW]=æ¬å°æªåå¿é
+ X-KDE-Library=knotes_local
+ Type=Service
+ ServiceTypes=KResources/Plugin
+Index: knotes/knotesapp.cpp
+===================================================================
+--- knotes/knotesapp.cpp (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ knotes/knotesapp.cpp (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -355,6 +355,33 @@
+ kdWarning(5500) << "setText: no note with id: " << id << endl;
+ }
+
++QString KNotesApp::fgColor( const QString& id ) const
++{
++ KNote* note = m_noteList[id];
++ if ( note )
++ return note->fgColor().name();
++ else
++ return QString::null;
++}
++
++QString KNotesApp::bgColor( const QString& id ) const
++{
++ KNote* note = m_noteList[id];
++ if ( note )
++ return note->bgColor().name();
++ else
++ return QString::null;
++}
++
++void KNotesApp::setColor( const QString& id, const QString& fgColor, const QString& bgColor )
++{
++ KNote* note = m_noteList[id];
++ if ( note )
++ note->setColor( QColor( fgColor ), QColor( bgColor ) );
++ else
++ kdWarning(5500) << "setColor: no note with id: " << id << endl;
++}
++
+ void KNotesApp::sync( const QString& app )
+ {
+ QDictIterator<KNote> it( m_noteList );
+Index: knotes/ChangeLog
+===================================================================
+--- knotes/ChangeLog (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ knotes/ChangeLog (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -2,6 +2,10 @@
+ ====================
+
+
++2006/06/10 Michael Brade <brade at kde.org>
++
++ * added DCOP methods to get and change the color of a note
++
+ 2006/02/20 Michael Brade <brade at kde.org>
+
+ * fixed #115009: since it doesn't seem clearly visible that the "Lock" menu
+Index: knotes/knotes_manager.desktop
+===================================================================
+--- knotes/knotes_manager.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ knotes/knotes_manager.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -45,6 +45,7 @@
+ Name[uk]=ÐÑимÑÑки
+ Name[uz]=Ðзма Ñ
оÑиÑа
+ Name[zh_CN]=便笺
++Name[zh_TW]=åå¿é
+ Type=Service
+ ServiceTypes=KResources/Manager
+
+Index: knotes/knote.h
+===================================================================
+--- knotes/knote.h (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ knotes/knote.h (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -1,7 +1,7 @@
+ /*******************************************************************
+ KNotes -- Notes for the KDE project
+
+- Copyright (c) 1997-2005, The KNotes Developers
++ Copyright (c) 1997-2006, The KNotes Developers
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+@@ -60,6 +60,7 @@
+ void saveConfig() const;
+
+ QString noteId() const;
++
+ QString name() const;
+ QString text() const;
+ QString plainText() const;
+@@ -67,6 +68,10 @@
+ void setName( const QString& name );
+ void setText( const QString& text );
+
++ QColor fgColor() const;
++ QColor bgColor() const;
++ void setColor( const QColor& fg, const QColor& bg );
++
+ void find( const QString& pattern, long options );
+
+ bool isModified() const;
+@@ -136,8 +141,6 @@
+ void updateLabelAlignment();
+ void updateBackground( int offset = -1 );
+
+- void setColor( const QColor&, const QColor& );
+-
+ void createFold();
+
+ void toDesktop( int desktop );
+Index: kontact/plugins/test/kptestplugin.desktop
+===================================================================
+--- kontact/plugins/test/kptestplugin.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kontact/plugins/test/kptestplugin.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -26,6 +26,7 @@
+ Comment[fi]=Kontactin testiliitännäinen
+ Comment[fr]=Module de test pour Kontact
+ Comment[gl]=Extensión de Proba para Kontact
++Comment[he]=ת×סף × ×ס××× ×¢××ר Kontact
+ Comment[hi]=à¤à¥à¤¨à¥à¤à¥à¤à¥à¤ à¤à¤¾à¤à¤ पà¥à¤²à¤à¤à¤¨
+ Comment[hu]=Kontact tesztmodul
+ Comment[is]=Kontact prufu Ãforrit
+@@ -54,6 +55,7 @@
+ Comment[uk]=ТеÑÑовий вÑÑлок Kontact
+ Comment[uz]=Kontact ÑÑÑн ÑÐ¸Ð½Ð°Ñ Ð¿Ð»Ð°Ð³Ð¸Ð½Ð¸
+ Comment[zh_CN]=Kontact Test æä»¶
++Comment[zh_TW]=Kontact æ¸¬è©¦å¤æç¨å¼
+ Name=TestPlugin
+ Name[be]=ТÑÑÑавае дапаÑненÑне
+ Name[ca]=Endollable de prova
+@@ -93,3 +95,4 @@
+ Name[uk]=ТеÑÑовий вÑÑлок
+ Name[ven]=Lingani Plugin
+ Name[zh_CN]=Test æä»¶
++Name[zh_TW]=æ¸¬è©¦å¤æç¨å¼
+Index: kontact/plugins/akregator/akregatorplugin.desktop
+===================================================================
+--- kontact/plugins/akregator/akregatorplugin.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kontact/plugins/akregator/akregatorplugin.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -43,6 +43,7 @@
+ Comment[pt]='Plugin' Akregator
+ Comment[pt_BR]=Plugin do Akregator
+ Comment[ru]=ÐодÑÐ»Ñ Akregator
++Comment[sk]=Modul Akregator
+ Comment[sl]=Vstavek Akregator
+ Comment[sr]=ÐÑикÑÑÑак Akregator-а
+ Comment[sr at Latn]=PrikljuÄak Akregator-a
+@@ -52,13 +53,14 @@
+ Comment[uk]=ÐÑÑлок Akregator
+ Comment[uz]=Akregator плагини
+ Comment[zh_CN]=Akregator æä»¶
++Comment[zh_TW]=Akregator 夿ç¨å¼
+ Name=Feeds
+ Name[bg]=Ðовини
+ Name[ca]=Enllaços
+ Name[cs]=Kanály
+ Name[da]=Kilder
+ Name[de]=Nachrichten
+-Name[el]=ÎιÏÏοÎÏ
++Name[el]=ΡοÎÏ
+ Name[es]=OrÃgenes
+ Name[et]=Kanalid
+ Name[eu]=Iturriak
+@@ -79,6 +81,7 @@
+ Name[pt]=Fontes
+ Name[pt_BR]=Fontes de NotÃcias
+ Name[ru]=ÐенÑÑ Ð½Ð¾Ð²Ð¾ÑÑей
++Name[sk]=KÅmitka
+ Name[sl]=Viri
+ Name[sr]=Ðоводи
+ Name[sr at Latn]=Dovodi
+Index: kontact/plugins/akregator/akregatorplugin3.2.desktop
+===================================================================
+--- kontact/plugins/akregator/akregatorplugin3.2.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kontact/plugins/akregator/akregatorplugin3.2.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -42,6 +42,7 @@
+ Comment[pt]='Plugin' Akregator
+ Comment[pt_BR]=Plugin do Akregator
+ Comment[ru]=ÐодÑÐ»Ñ Akregator
++Comment[sk]=Modul Akregator
+ Comment[sl]=Vstavek Akregator
+ Comment[sr]=ÐÑикÑÑÑак Akregator-а
+ Comment[sr at Latn]=PrikljuÄak Akregator-a
+@@ -51,13 +52,14 @@
+ Comment[uk]=ÐÑÑлок Akregator
+ Comment[uz]=Akregator плагини
+ Comment[zh_CN]=Akregator æä»¶
++Comment[zh_TW]=Akregator 夿ç¨å¼
+ Name=Feeds
+ Name[bg]=Ðовини
+ Name[ca]=Enllaços
+ Name[cs]=Kanály
+ Name[da]=Kilder
+ Name[de]=Nachrichten
+-Name[el]=ÎιÏÏοÎÏ
++Name[el]=ΡοÎÏ
+ Name[es]=OrÃgenes
+ Name[et]=Kanalid
+ Name[eu]=Iturriak
+@@ -78,6 +80,7 @@
+ Name[pt]=Fontes
+ Name[pt_BR]=Fontes de NotÃcias
+ Name[ru]=ÐенÑÑ Ð½Ð¾Ð²Ð¾ÑÑей
++Name[sk]=KÅmitka
+ Name[sl]=Viri
+ Name[sr]=Ðоводи
+ Name[sr at Latn]=Dovodi
+Index: kontact/plugins/kitchensync/kitchensync.desktop
+===================================================================
+--- kontact/plugins/kitchensync/kitchensync.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kontact/plugins/kitchensync/kitchensync.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -57,6 +57,7 @@
+ Comment[tr]=KitchenSync Eklentisi
+ Comment[uk]=ÐÑÑлок KitchenSync
+ Comment[zh_CN]=KitchenSync æä»¶
++Comment[zh_TW]=KitchenSync 夿ç¨å¼
+ Name=Synchronization
+ Name[ar]=تزاÙ
Ù
+ Name[be]=СÑнÑ
ÑанÑзаÑÑÑ
+@@ -105,3 +106,4 @@
+ Name[uk]=СинÑ
ÑонÑзаÑÑÑ
+ Name[uz]=ТенглаÑÑиÑиÑ
+ Name[zh_CN]=忥
++Name[zh_TW]=忥
+Index: kontact/plugins/karm/karmplugin.desktop
+===================================================================
+--- kontact/plugins/karm/karmplugin.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kontact/plugins/karm/karmplugin.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -42,6 +42,7 @@
+ Comment[pt]='Plugin' KArm
+ Comment[pt_BR]=Plugin do KArm
+ Comment[ru]=ÐодÑÐ»Ñ KArm
++Comment[sk]=Modul KArm
+ Comment[sl]=Vstavek za KArm
+ Comment[sr]=ÐÑикÑÑÑак KArm-а
+ Comment[sr at Latn]=PrikljuÄak KArm-a
+@@ -50,6 +51,7 @@
+ Comment[uk]=ÐÑÑлок KArm
+ Comment[uz]=KArm плагини
+ Comment[zh_CN]=KArm æä»¶
++Comment[zh_TW]=KArm 夿ç¨å¼
+
+ Name=KArm
+ Name[af]=Karm
+Index: kontact/plugins/summary/kcmkontactsummary.desktop
+===================================================================
+--- kontact/plugins/summary/kcmkontactsummary.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kontact/plugins/summary/kcmkontactsummary.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -24,6 +24,7 @@
+ Name[fi]=Komponentit
+ Name[fr]=Composants
+ Name[ga]=Comhpháirteanna
++Name[he]=ר×××××
+ Name[hu]=Komponensek
+ Name[is]=Einingar
+ Name[it]=Componenti
+@@ -39,6 +40,7 @@
+ Name[pt]=Componentes
+ Name[pt_BR]=Componentes
+ Name[ru]=ÐомпоненÑÑ
++Name[sk]=Komponenty
+ Name[sl]=Komponente
+ Name[sr]=ÐомпоненÑе
+ Name[sr at Latn]=Komponente
+@@ -48,6 +50,7 @@
+ Name[uk]=ÐомпоненÑи
+ Name[uz]=ÒиÑмлаÑ
+ Name[zh_CN]=ç»ä»¶
++Name[zh_TW]=å
ä»¶
+ Comment=General Configuration of Kontact's Summary View
+ Comment[bg]=ÐаÑÑÑойка на обобÑениеÑо
+ Comment[bs]=Opšte podešavanje Kontactovog prozora Sažetak
+@@ -87,3 +90,4 @@
+ Comment[tr]=Kontact'ın Ãzet Görünümü için Genel Yapılandırma
+ Comment[uk]=ÐагалÑÐ½Ñ Ð¿Ð°ÑамеÑÑи пÑдÑÑмкÑв Kontact
+ Comment[zh_CN]=Kontact æ¦è§è§å¾ç常è§é
ç½®
++Comment[zh_TW]=Kontacts æè¦æª¢è¦çä¸è¬è¨å®
+Index: kontact/plugins/summary/summaryplugin.desktop
+===================================================================
+--- kontact/plugins/summary/summaryplugin.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kontact/plugins/summary/summaryplugin.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -54,6 +54,7 @@
+ Comment[tr]=Kontact Ãzet Gösterim Eklentisi
+ Comment[uk]=ÐÑÑлок Kontact Ð´Ð»Ñ Ð¿ÐµÑеглÑÐ´Ñ Ð·Ð²ÐµÐ´ÐµÐ½Ñ
+ Comment[zh_CN]=Kontact æ¦è§è§å¾æä»¶
++Comment[zh_TW]=Kontact æè¦æª¢è¦å¤æç¨å¼
+ Name=Summary
+ Name[br]=Diverrañ
+ Name[bs]=Sažetak
+@@ -100,5 +101,6 @@
+ Name[uk]=ÐведеннÑ
+ Name[uz]=ҲиÑобоÑ
+ Name[zh_CN]=æ¦è§
++Name[zh_TW]=æè¦
+ #Always last
+ InitialPreference=0
+Index: kontact/plugins/kmail/kmailplugin.desktop
+===================================================================
+--- kontact/plugins/kmail/kmailplugin.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kontact/plugins/kmail/kmailplugin.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -64,6 +64,7 @@
+ Comment[uk]=ÐÑÑлок елекÑÑÐ¾Ð½Ð½Ð¾Ñ Ð¿Ð¾ÑÑи Kontact
+ Comment[uz]=Kontact ÑÑÑн KMail плагини
+ Comment[zh_CN]=Kontact KMail æä»¶
++Comment[zh_TW]=Kontact KMail 夿ç¨å¼
+ Name=Mail
+ Name[be]=ÐоÑÑа
+ Name[br]=Lizher
+@@ -111,3 +112,4 @@
+ Name[uk]=ÐоÑÑа
+ Name[uz]=ХаÑ-Ñ
абаÑ
+ Name[zh_CN]=é®ä»¶
++Name[zh_TW]=éµä»¶
+Index: kontact/plugins/kmail/kcmkmailsummary.desktop
+===================================================================
+--- kontact/plugins/kmail/kcmkmailsummary.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kontact/plugins/kmail/kcmkmailsummary.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -58,6 +58,7 @@
+ Name[uk]=ÐоÑÑа
+ Name[uz]=ХаÑ-Ñ
абаÑ
+ Name[zh_CN]=é®ä»¶
++Name[zh_TW]=éµä»¶
+ Comment=Mail Summary Setup
+ Comment[bg]=ÐаÑÑÑойки на обобÑениеÑо на пиÑмаÑа
+ Comment[bs]=Postavke mail sažetka
+@@ -99,6 +100,7 @@
+ Comment[tr]=E-posta Ãzeti Yapılandırması
+ Comment[uk]=ÐалаÑÑÑÐ²Ð°Ð½Ð½Ñ Ð¿ÑдÑÑÐ¼ÐºÑ Ð¿Ð¾ÑÑи
+ Comment[zh_CN]=é®ä»¶æè¦è®¾ç½®
++Comment[zh_TW]=éµä»¶æè¦è¨å®
+ Keywords=email, summary, configure, settings
+ Keywords[bg]=ÑезÑме, обÑо, обобÑение, поÑенÑки, клиенÑ, е-поÑа, email, summary, configure, settings
+ Keywords[bs]=email, summary, configure, settings, sažetak, postavke
+@@ -114,6 +116,7 @@
+ Keywords[fr]=message,messagerie,courrier,résumé,vue,configurer,paramètres,paramètre
+ Keywords[ga]=rÃomhphost, achoimre, cumraigh, socruithe
+ Keywords[gl]=email, resumo, configurar, opcións
++Keywords[he]=email, summary, configure, settings, ×××"×, תקצ×ר, תצ×ר×, ×××רת, ××××, ×××ר, ×××ר ×××§×ר×× ×
+ Keywords[hu]=e-mail,áttekintés,konfigurálás,beállÃtások
+ Keywords[is]=tölvupóstur, yfirlit, stillingar, stilla
+ Keywords[it]=posta elettronica, email, sommario, configura, impostazioni
+Index: kontact/plugins/weather/weatherplugin.desktop
+===================================================================
+--- kontact/plugins/weather/weatherplugin.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kontact/plugins/weather/weatherplugin.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -61,6 +61,7 @@
+ Comment[uk]=ÐÑÑлок погоди Kontact
+ Comment[uz]=Kontact ÑÑÑн об-ҳаво плагини
+ Comment[zh_CN]=Kontact å¤©æ°æä»¶
++Comment[zh_TW]=Kontact å¤©æ°£å¤æç¨å¼
+ Name=Weather Service
+ Name[br]=Servij an amzer
+ Name[ca]=Servei meteorològic
+@@ -75,6 +76,7 @@
+ Name[fi]=Sääpalvelu
+ Name[fr]=KWeatherService
+ Name[ga]=SeirbhÃs Aimsire
++Name[he]=ש×ר×ת ××× ××××ר
+ Name[hu]=IdÅjárás
+ Name[is]=Veðurþjónusta
+ Name[it]=Servizio meteorologico
+@@ -89,6 +91,7 @@
+ Name[pt]=Serviço Meteorológico
+ Name[pt_BR]=Serviço de Previsão do Tempo
+ Name[ru]=Ðогода
++Name[sk]=Služba poÄasie
+ Name[sl]=Vremenska storitev
+ Name[sr]=ÐÑеме
+ Name[sr at Latn]=Vreme
+@@ -97,3 +100,4 @@
+ Name[uk]=СлÑжба погоди
+ Name[uz]=Ðб-ҳаво Ñ
измаÑи
+ Name[zh_CN]=å¤©æ°æå¡
++Name[zh_TW]=天氣æå
+Index: kontact/plugins/multisynk/multisynk.desktop
+===================================================================
+--- kontact/plugins/multisynk/multisynk.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kontact/plugins/multisynk/multisynk.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -41,6 +41,7 @@
+ Comment[pt]='Plugin' MultiSynk
+ Comment[pt_BR]=Plugin do MultiSynk
+ Comment[ru]=СинÑ
ÑонизаÑиÑ
++Comment[sk]=Modul MultiSynk
+ Comment[sl]=Vstavek MultiSynk
+ Comment[sr]=ÐÑикÑÑÑак MultiSynk-а
+ Comment[sr at Latn]=PrikljuÄak MultiSynk-a
+@@ -50,6 +51,7 @@
+ Comment[uk]=ÐÑÑлок MultiSynk
+ Comment[uz]=MultiSynk плагини
+ Comment[zh_CN]=MultiSynk æä»¶
++Comment[zh_TW]=MultiSynk 夿ç¨å¼
+ Name=Synchronization
+ Name[ar]=تزاÙ
Ù
+ Name[be]=СÑнÑ
ÑанÑзаÑÑÑ
+@@ -98,3 +100,4 @@
+ Name[uk]=СинÑ
ÑонÑзаÑÑÑ
+ Name[uz]=ТенглаÑÑиÑиÑ
+ Name[zh_CN]=忥
++Name[zh_TW]=忥
+Index: kontact/plugins/knode/knodeplugin.desktop
+===================================================================
+--- kontact/plugins/knode/knodeplugin.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kontact/plugins/knode/knodeplugin.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -61,6 +61,7 @@
+ Comment[uk]=ÐÑÑлок новин (KNode) Kontact
+ Comment[uz]=Kontact ÑÑÑн KNode плагини
+ Comment[zh_CN]=Kontact KNode æä»¶
++Comment[zh_TW]=Kontact KNode 夿ç¨å¼
+ Name=News
+ Name[be]=ÐавÑнÑ
+ Name[br]=Keleier
+@@ -108,3 +109,4 @@
+ Name[uk]=Ðовини
+ Name[uz]=ЯнгиликлаÑ
+ Name[zh_CN]=æ°é»
++Name[zh_TW]=æ°è
+Index: kontact/plugins/specialdates/kcmsdsummary.desktop
+===================================================================
+--- kontact/plugins/specialdates/kcmsdsummary.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kontact/plugins/specialdates/kcmsdsummary.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -24,6 +24,7 @@
+ Name[fi]=Erikoispäivät
+ Name[fr]=Dates particulières
+ Name[ga]=Dátaà Speisialta
++Name[he]=ת×ר×××× ×××××××
+ Name[hu]=Fontos dátumok
+ Name[is]=Sérstakir dagar
+ Name[it]=Date speciali
+@@ -39,6 +40,7 @@
+ Name[pt]=Datas Especiais
+ Name[pt_BR]=Datas Especiais
+ Name[ru]=ÐÑобÑе даÑÑ
++Name[sk]=Špeciálne dátumy
+ Name[sl]=Posebni datumi
+ Name[sr]=ÐоÑебни даÑÑми
+ Name[sr at Latn]=Posebni datumi
+@@ -48,6 +50,7 @@
+ Name[uk]=ÐÑÐ¾Ð±Ð»Ð¸Ð²Ñ Ð´Ð°Ñи
+ Name[uz]=ÐаÑ
ÑÑÑ ÐºÑнлаÑ
+ Name[zh_CN]=ç¹æ®æ¥æ
++Name[zh_TW]=ç¹æ®æ¥æ
+ Comment=Special Dates Summary Setup
+ Comment[bg]=ÐаÑÑÑойки на ÑпеÑиалниÑе ÑлÑÑаи
+ Comment[ca]=Configuració del resum de les dates especials
+@@ -60,6 +63,7 @@
+ Comment[eu]=Data berezien laburpenen konfigurazioa
+ Comment[fi]=Erikoispäivien yhteenvedon asetukset
+ Comment[fr]=Configuration du résumé des dates particulières
++Comment[he]=תצ×רת ת×ר×××× ×××××××
+ Comment[hu]=A fontos dátumok áttekintÅjének beállÃtásai
+ Comment[is]=Yfirlitsuppsetning sérstakra daga
+ Comment[it]=Impostazioni per le date speciali
+@@ -75,6 +79,7 @@
+ Comment[pt]=Configuração do Sumário de Datas Especiais
+ Comment[pt_BR]=Configuração do Resumo de Datas Especiais
+ Comment[ru]=ÐаÑÑÑойка оÑобÑÑ
даÑ
++Comment[sk]=Nastavenie súhrnu špeciálnych dátumov
+ Comment[sl]=Nastavitve povzetka posebnih datumov
+ Comment[sr]=ÐодеÑаваÑе ÑажеÑка поÑебниÑ
даÑÑма
+ Comment[sr at Latn]=Podešavanje sažetka posebnih datuma
+@@ -83,6 +88,7 @@
+ Comment[tr]=Ãzel Tarih Ãzeti Yapılandırması
+ Comment[uk]=ÐалаÑÑÑÐ²Ð°Ð½Ð½Ñ Ð¿ÑдÑÑÐ¼ÐºÑ Ð¾ÑобливиÑ
даÑ
+ Comment[zh_CN]=ç¹æ®æ¥ææè¦è®¾ç½®
++Comment[zh_TW]=ç¹æ®æ¥ææè¦è¨å®
+ Keywords=birthday, anniversary, holiday, configure, settings
+ Keywords[bg]=Ñождени, Ñожден, дни, ден, годиÑнина, годиÑнини, обобÑение, birthday, anniversary, configure, settings
+ Keywords[ca]=data de naixement, aniversari, vacances, configuració, arranjament
+Index: kontact/plugins/specialdates/specialdatesplugin.desktop
+===================================================================
+--- kontact/plugins/specialdates/specialdatesplugin.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kontact/plugins/specialdates/specialdatesplugin.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -27,6 +27,7 @@
+ Name[fi]=Erikoispäivät
+ Name[fr]=Dates particulières
+ Name[ga]=Dátaà Speisialta
++Name[he]=ת×ר×××× ×××××××
+ Name[hu]=Fontos dátumok
+ Name[is]=Sérstakir dagar
+ Name[it]=Date speciali
+@@ -42,6 +43,7 @@
+ Name[pt]=Datas Especiais
+ Name[pt_BR]=Datas Especiais
+ Name[ru]=ÐÑобÑе даÑÑ
++Name[sk]=Špeciálne dátumy
+ Name[sl]=Posebni datumi
+ Name[sr]=ÐоÑебни даÑÑми
+ Name[sr at Latn]=Posebni datumi
+@@ -51,6 +53,7 @@
+ Name[uk]=ÐÑÐ¾Ð±Ð»Ð¸Ð²Ñ Ð´Ð°Ñи
+ Name[uz]=ÐаÑ
ÑÑÑ ÐºÑнлаÑ
+ Name[zh_CN]=ç¹æ®æ¥æ
++Name[zh_TW]=ç¹æ®æ¥æ
+ Comment=Special Dates Plugin
+ Comment[bg]=ÐÑиÑÑавка за ÑпеÑиални ÑлÑÑаи
+ Comment[ca]=Endollable de dates especials
+@@ -63,6 +66,7 @@
+ Comment[eu]=Data berezien plugin-a
+ Comment[fi]=Kalenteriliitännäinen
+ Comment[fr]=Module de dates particulières
++Comment[he]=ת×סף ת×ר×××× ×ש××××
+ Comment[hu]=Fontos dátumok bÅvÃtÅmodul
+ Comment[is]=Sérstakir dagar Ãforrit
+ Comment[it]=Plugin per le date speciali
+@@ -78,6 +82,7 @@
+ Comment[pt]='Plugin' de Datas Especiais
+ Comment[pt_BR]=Plugin de Datas Especiais
+ Comment[ru]=ÐÑобÑе даÑÑ
++Comment[sk]=Modul špeciálnych dátumov
+ Comment[sl]=Vstavek za posebne datume
+ Comment[sr]=ÐÑикÑÑÑак за поÑебне даÑÑме
+ Comment[sr at Latn]=PrikljuÄak za posebne datume
+@@ -86,3 +91,4 @@
+ Comment[tr]=Ãzel Tarihler Eklentisi
+ Comment[uk]=ÐÑÑлок оÑобливиÑ
даÑ
+ Comment[zh_CN]=ç¹æ®æ¥ææä»¶
++Comment[zh_TW]=ç¹æ®æ¥æå¤æç¨å¼
+Index: kontact/plugins/specialdates/sdsummarywidget.cpp
+===================================================================
+--- kontact/plugins/specialdates/sdsummarywidget.cpp (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kontact/plugins/specialdates/sdsummarywidget.cpp (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -359,13 +359,14 @@
+ for ( dt=QDate::currentDate();
+ dt<=QDate::currentDate().addDays( mDaysAhead - 1 );
+ dt=dt.addDays(1) ) {
+- QString holstring = mHolidays->shortText( dt );
+- if ( !holstring.isNull() && !holstring.isEmpty() ) {
++ QValueList<KHoliday> holidays = mHolidays->getHolidays( dt );
++ QValueList<KHoliday>::ConstIterator it = holidays.begin();
++ for ( ; it != holidays.end(); ++it ) {
+ SDEntry entry;
+ entry.type = IncidenceTypeEvent;
+- entry.category = CategoryHoliday;
++ entry.category = ((*it).Category==KHolidays::HOLIDAY)?CategoryHoliday:CategoryOther;
+ entry.date = dt;
+- entry.summary = holstring;
++ entry.summary = (*it).text;
+ dateDiff( dt, entry.daysTo, entry.yearsOld );
+ entry.yearsOld = -1; //ignore age of holidays
+ entry.span = 1;
+Index: kontact/plugins/kpilot/kpilotplugin.desktop
+===================================================================
+--- kontact/plugins/kpilot/kpilotplugin.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kontact/plugins/kpilot/kpilotplugin.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -60,6 +60,7 @@
+ Comment[uk]=ÐÑÑлок Kontact Ð´Ð»Ñ KPilot
+ Comment[uz]=Kontact ÑÑÑн KPilot плагини
+ Comment[zh_CN]=Kontact KPilot æä»¶
++Comment[zh_TW]=Kontact KPilot 夿ç¨å¼
+ Name=KPilot Configuration
+ Name[be]=ÐанÑÑгÑÑаÑÑÑ KPilot
+ Name[br]=Kefluniadur KPilot
+@@ -102,3 +103,4 @@
+ Name[tr]=KPilot Yapılandırması
+ Name[uk]=ÐалаÑÑÑÐ²Ð°Ð½Ð½Ñ KPilot
+ Name[zh_CN]=KPilot é
ç½®
++Name[zh_TW]=KPilot è¨å®
+Index: kontact/plugins/knotes/knotesplugin.desktop
+===================================================================
+--- kontact/plugins/knotes/knotesplugin.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kontact/plugins/knotes/knotesplugin.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -60,6 +60,7 @@
+ Comment[uk]=ÐÑÑлок пÑимÑÑок (KNotes) Kontact
+ Comment[uz]=Kontact ÑÑÑн KNotes плагини
+ Comment[zh_CN]=Kontact KNotes æä»¶
++Comment[zh_TW]=Kontact KNotes 夿ç¨å¼
+ Name=Notes
+ Name[be]=ÐаÑаÑкÑ
+ Name[br]=Notennoù
+@@ -104,3 +105,4 @@
+ Name[uk]=ÐÑимÑÑки
+ Name[uz]=Ðзма Ñ
оÑиÑа
+ Name[zh_CN]=便笺
++Name[zh_TW]=åå¿é
+Index: kontact/plugins/korganizer/kcmkorgsummary.desktop
+===================================================================
+--- kontact/plugins/korganizer/kcmkorgsummary.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kontact/plugins/korganizer/kcmkorgsummary.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -22,6 +22,7 @@
+ Name[eu]=Hitzorduak eta egitekoak
+ Name[fi]=Tapaamiset ja tehtävät
+ Name[fr]=Ãvènements et tâches
++Name[he]=פ××ש×ת ×××××ת
+ Name[hu]=Találkozók és feladatok
+ Name[is]=Fundir og verkþættir
+ Name[it]=Appuntamenti e cose da fare
+@@ -36,12 +37,14 @@
+ Name[pt]=Compromissos e A-fazeres
+ Name[pt_BR]=Compromissos e Tarefas
+ Name[ru]=ÐÑÑÑеÑи и задаÑи
++Name[sk]=Pripomienky a úlohy
+ Name[sl]=Sestanki in opravila
+ Name[sr]=СаÑÑанÑи и обавезе
+ Name[sr at Latn]=Sastanci i obaveze
+ Name[sv]=Möten och uppgifter
+ Name[uk]=ÐÑÑÑÑÑÑÑ Ñ Ð·Ð°Ð²Ð´Ð°Ð½Ð½Ñ
+ Name[zh_CN]=约ä¼åå¾
å
++Name[zh_TW]=ç´æèå¾
辦äºé
+ Comment=Appointments and To-dos Summary Setup
+ Comment[bg]=ÐÑиÑÑавка за обобÑен пÑеглед на ÑÑеÑиÑе и задаÑиÑе
+ Comment[ca]=Configuració del resum de cites i tasques pendents
+@@ -68,12 +71,14 @@
+ Comment[pt]=Configuração do Sumário de Compromissos e A-fazeres
+ Comment[pt_BR]=Configuração do Resumo de Compromissos e Tarefas
+ Comment[ru]=ÐаÑÑÑойка показа вÑÑÑÐµÑ Ð¸ задаÑ
++Comment[sk]=Nastavenie súhrnu pripomienok a úloh
+ Comment[sl]=Nastavitve povzetka sestankov in opravil
+ Comment[sr]=ÐодеÑаваÑе ÑажеÑка ÑаÑÑанака и обавеза
+ Comment[sr at Latn]=Podešavanje sažetka sastanaka i obaveza
+ Comment[sv]=Inställning av översikt över möten och uppgifter
+ Comment[uk]=ÐалаÑÑÑÐ²Ð°Ð½Ð½Ñ Ð·Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð·ÑÑÑÑÑÑей Ñ Ð·Ð°Ð²Ð´Ð°Ð½Ñ
+ Comment[zh_CN]=约ä¼åå¾
åæè¦è®¾ç½®
++Comment[zh_TW]=ç´æèå¾
辦äºé
æè¦è¨å®
+ Keywords=calendar, todos, configure, settings
+ Keywords[be]=калÑндаÑ, заданÑнÑ, наÑÑÑоÑÑÑ, наÑÑÑойкÑ, calendar, todos, configure, settings
+ Keywords[bg]=календаÑ, задаÑи, оÑганизаÑоÑ, calendar, todos, configure, settings
+@@ -90,6 +95,7 @@
+ Keywords[fr]=calendrier,agenda,tâches,configurer,paramètres,paramètre
+ Keywords[ga]=féilire, tascanna, cumraigh, socruithe
+ Keywords[gl]=calendario, pendentes, configurar, opcións
++Keywords[he]=calendar, todos, configure, settings, ××××, ×××× ××, ×ש×××ת, ××××ת, ×××ר×ת, תצ×ר×
+ Keywords[hu]=naptár,feladatok,konfigurálás,beállÃtások
+ Keywords[is]=dagatal, verkþættir, stillingar, stilla
+ Keywords[it]=calendario, cose da fare, configura, impostazioni
+Index: kontact/plugins/korganizer/todoplugin.desktop
+===================================================================
+--- kontact/plugins/korganizer/todoplugin.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kontact/plugins/korganizer/todoplugin.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -44,6 +44,7 @@
+ Comment[pt]='Plugin' de A-Fazer do KOrganizer para o Kontact
+ Comment[pt_BR]=Plug-in de Lista de Pendências do KOrganizer para Kontact
+ Comment[ru]=ÐадаÑи
++Comment[sk]=KOrganizer modul zoznamu úloh pre Kontact
+ Comment[sl]=Vstavek opravil KOrganizerja za Kontact
+ Comment[sr]=ÐÑикÑÑÑак Kontact-а за KOrganizer-Ð¾Ð²Ñ Ð»Ð¸ÑÑÑ Ð¿Ð¾Ñлова
+ Comment[sr at Latn]=PrikljuÄak Kontact-a za KOrganizer-ovu listu poslova
+@@ -52,6 +53,7 @@
+ Comment[tr]=Kontact KOrganizer Yapılacaklar Listesi Eklentisi
+ Comment[uk]=ÐÑÑлок ÑпиÑÐºÑ Ð·Ð°Ð²Ð´Ð°Ð½Ñ KOrganizer Ð´Ð»Ñ Kontact
+ Comment[zh_CN]=Kontact KOrganizer å¾
忏
åæä»¶
++Comment[zh_TW]=Kontact KOrganizer å¾
辦äºé
夿ç¨å¼
+ Name=To-do List
+ Name[br]=Roll an traoù d'ober
+ Name[ca]=Pendents
+@@ -83,6 +85,7 @@
+ Name[pt]=Lista de A-Fazeres
+ Name[pt_BR]=Lista de Pendências
+ Name[ru]=ÐадаÑи
++Name[sk]=Zoznam úloh
+ Name[sl]=Seznam opravil
+ Name[sr]=ÐиÑÑа поÑлова
+ Name[sr at Latn]=Lista poslova
+@@ -92,3 +95,4 @@
+ Name[uk]=СпиÑок завданÑ
+ Name[uz]=ÐазиÑалаÑ
+ Name[zh_CN]=å¾
忏
å
++Name[zh_TW]=å¾
辦äºé
æ¸
å®
+Index: kontact/plugins/korganizer/journalplugin.desktop
+===================================================================
+--- kontact/plugins/korganizer/journalplugin.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kontact/plugins/korganizer/journalplugin.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -43,6 +43,7 @@
+ Comment[pt]='Plugin' de Diários do KOrganizer para o Kontact
+ Comment[pt_BR]=Plug-in de Diário do KOrganizer para o Kontact
+ Comment[ru]=ÐÑÑнал
++Comment[sk]=Modul Kontact KOrganizer žurnálu
+ Comment[sl]=Vstavek dnevnika KOrganizer za Kontact
+ Comment[sr]=ÐÑикÑÑÑак Kontact-а за KOrganizer Journal
+ Comment[sr at Latn]=PrikljuÄak Kontact-a za KOrganizer Journal
+@@ -51,6 +52,7 @@
+ Comment[tr]=Kontact KOrganizer Günlük Eklentisi
+ Comment[uk]=ÐÑÑлок жÑÑÐ½Ð°Ð»Ñ Ð´Ð»Ñ (KOrganizer) Kontact
+ Comment[zh_CN]=Kontact KOrganizer æ¥è®°æä»¶
++Comment[zh_TW]=Kontact KOrganizer Journal 夿ç¨å¼
+ Name=Journal
+ Name[br]=Deizlevr
+ Name[ca]=Diari
+@@ -78,9 +80,11 @@
+ Name[pt]=Diário
+ Name[pt_BR]=Diário
+ Name[ru]=ÐÑÑнал
++Name[sk]=Žurnál
+ Name[sl]=Dnevnik
+ Name[ta]=பதà¯à®¤à®¿à®°à®¿à®à¯
+ Name[tr]=Günlük
+ Name[uk]=ÐÑÑнал
+ Name[uz]=ÐÑндалик
+ Name[zh_CN]=æ¥è®°
++Name[zh_TW]=æ¥èª
+Index: kontact/plugins/korganizer/korganizerplugin.desktop
+===================================================================
+--- kontact/plugins/korganizer/korganizerplugin.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kontact/plugins/korganizer/korganizerplugin.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -34,6 +34,7 @@
+ Comment[fr]=Module KOrganizer pour Kontact
+ Comment[ga]=Breiseán KOrganizer le haghaidh Kontact
+ Comment[gl]=Extensión de KOrganizer para Kontact
++Comment[he]=ת×סף KOrganizer ×¢××ר Kontact
+ Comment[hi]=à¤à¥à¤¨à¥à¤à¥à¤à¥à¤ à¤à¥-à¤à¤°à¥à¤à¥à¤¨à¤¾à¤à¤à¤¼à¤° पà¥à¤²à¤à¤à¤¨
+ Comment[hu]=Kontact KOrganizer-bÅvÃtÅmodul
+ Comment[is]=Kontact KOrganizer Ãforrit
+@@ -62,6 +63,7 @@
+ Comment[uk]=ÐÑÑлок календаÑÑ KOrganizer Ð´Ð»Ñ Kontact
+ Comment[uz]=Kontact ÑÑÑн KOrganizer плагини
+ Comment[zh_CN]=Kontact KOrganizer æä»¶
++Comment[zh_TW]=Kontact KOrganizer 夿ç¨å¼
+ Name=Calendar
+ Name[be]=ÐалÑндаÑ
+ Name[br]=Deiziadur
+@@ -84,7 +86,7 @@
+ Name[hu]=Naptár
+ Name[is]=Dagatal
+ Name[it]=Calendario
+-Name[ja]=ã«ã¬ã³ã
++Name[ja]=ã«ã¬ã³ãã¼
+ Name[km]=ááááá·áá·á
+ Name[lt]=Kalendorius
+ Name[ms]=Kalendar
+@@ -109,3 +111,4 @@
+ Name[uk]=ÐалендаÑ
+ Name[uz]=ÐалендаÑ
+ Name[zh_CN]=æ¥å
++Name[zh_TW]=è¡äºæ
+Index: kontact/plugins/kaddressbook/kaddressbookplugin.desktop
+===================================================================
+--- kontact/plugins/kaddressbook/kaddressbookplugin.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kontact/plugins/kaddressbook/kaddressbookplugin.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -62,6 +62,7 @@
+ Comment[uk]=ÐÑÑлок адÑеÑÐ½Ð¾Ñ ÐºÐ½Ð¸Ð³Ð¸ Kontact
+ Comment[uz]=Kontact ÑÑÑн KAddressBook плагини
+ Comment[zh_CN]=Kontact KAddressbook æä»¶
++Comment[zh_TW]=Kontact KAddressBook 夿ç¨å¼
+ Name=Contacts
+ Name[be]=ÐанÑакÑÑ
+ Name[br]=Darempredoù
+@@ -109,3 +110,4 @@
+ Name[uk]=ÐонÑакÑи
+ Name[uz]=ÐлоÒалаÑ
+ Name[zh_CN]=è系人
++Name[zh_TW]=è¯çµ¡äºº
+Index: kontact/plugins/newsticker/kcmkontactknt.desktop
+===================================================================
+--- kontact/plugins/newsticker/kcmkontactknt.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kontact/plugins/newsticker/kcmkontactknt.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -27,6 +27,7 @@
+ Name[fi]=Uutisnäytin
+ Name[fr]=Téléscripteur de nouvelles
+ Name[gl]=Colector de Novas
++Name[he]=××ש×ת רצ×ת
+ Name[hi]=नà¥à¤¯à¥à¤ à¤à¤¿à¤à¤°
+ Name[hr]=Ticker sa novostima
+ Name[hu]=RSS hÃrmegjelenÃtÅ
+@@ -60,6 +61,7 @@
+ Name[vi]=Trình kiá»m tra news
+ Name[xh]=Umchola-choli weendaba
+ Name[zh_CN]=æ°é»ç¹ç¹é
++Name[zh_TW]=æ°è顯示å¨
+ Name[zu]=Umlungiseleli Wezindaba
+ Comment=News Ticker Summary Setup
+ Comment[bg]=ÐаÑÑÑойки на обобÑениеÑо на новиниÑе
+@@ -73,6 +75,7 @@
+ Comment[eu]=Berri markatzailearen laburpenaren konfigurazioa
+ Comment[fi]=Uutisnäyttimen yhteenvedon asetukset
+ Comment[fr]=Configuration du résumé du téléscripteur de nouvelles
++Comment[he]=×××ר×ת תקצ×ר ××ש×ת רצ×ת
+ Comment[hu]=A hÃrmegjelenÃtŠáttekintÅjének beállÃtásai
+ Comment[is]=Uppsetning á yfirliti yfir fréttastrimla
+ Comment[it]=Impostazioni sommario ticker notizie
+@@ -87,12 +90,14 @@
+ Comment[pt]=Configuração do Sumário do Extractor de NotÃcias
+ Comment[pt_BR]=Configuração de Resumo de NotÃcias
+ Comment[ru]=ÐаÑÑÑойка дайджеÑÑа новоÑÑей
++Comment[sk]=Nastavenie súhrnu správ
+ Comment[sl]=Nastavitve povzetka novic
+ Comment[sr]=ÐодеÑаваÑе ÑажеÑка пÑиказиваÑа веÑÑи
+ Comment[sr at Latn]=Podešavanje sažetka prikazivanja vesti
+ Comment[sv]=Inställning av nyhetsövervakningsöversikt
+ Comment[uk]=ÐалаÑÑÑÐ²Ð°Ð½Ð½Ñ Ð·Ð²ÐµÐ´ÐµÐ½Ð½Ñ ÑÑÑÑÑки новин
+ Comment[zh_CN]=æ°é»ç¹ç¹éæè¦è®¾ç½®
++Comment[zh_TW]=æ°èé¡¯ç¤ºå¨æè¦è¨å®
+ Keywords=news ticker, configure, settings
+ Keywords[bg]=новини, изÑоÑник, наÑÑÑойки, news ticker, configure, settings
+ Keywords[bs]=news ticker, configure, settings, vijesti, newsticker, podešavanje
+Index: kontact/plugins/newsticker/newstickerplugin.desktop
+===================================================================
+--- kontact/plugins/newsticker/newstickerplugin.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kontact/plugins/newsticker/newstickerplugin.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -30,6 +30,7 @@
+ Comment[fr]=Module NewsTicker pour Kontact
+ Comment[ga]=Breiseán NewsTicker le haghaidh Kontact
+ Comment[gl]=Extensión de NewsTicker para Kontact
++Comment[he]=ת×סף ××ש×ת רצ×ת ×¢××ר Kontact
+ Comment[hu]=Kontact KNewsTicker-bÅvÃtÅmodul
+ Comment[is]=Kontact fréttastrimils-Ãforrit
+ Comment[it]=Plugin Kontact Ticker Notizie
+@@ -55,6 +56,7 @@
+ Comment[tr]=Kontact Haberİzleyici Eklentisi
+ Comment[uk]=ÐÑÑлок ÑÑÑÑÑки новин Kontact
+ Comment[zh_CN]=Kontact æ°é»ç¹ç¹éæä»¶
++Comment[zh_TW]=Kontact NewsTicker 夿ç¨å¼
+ Name=NewsTicker
+ Name[ca]=Teletip de notÃcies
+ Name[da]=Nyhedstelegraf
+@@ -64,6 +66,7 @@
+ Name[et]=Uudistejälgija
+ Name[fi]=Uutisnäytin
+ Name[fr]=Téléscripteur de nouvelles
++Name[he]=××ש×ת רצ×ת
+ Name[hu]=RSS hÃrmegjelenÃtÅ
+ Name[is]=Fréttastrimill
+ Name[it]=Ticker notizie
+Index: kontact/interfaces/kontactplugin.desktop
+===================================================================
+--- kontact/interfaces/kontactplugin.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kontact/interfaces/kontactplugin.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -47,6 +47,7 @@
+ Name[uk]=ÐÑÑлок Kontact
+ Name[uz]=Kontact ÑÑÑн плагин
+ Name[zh_CN]=Kontact æä»¶
++Name[zh_TW]=Kontack 夿ç¨å¼
+
+ [PropertyDef::X-KDE-KontactPluginVersion]
+ Type=int
+Index: kontact/src/kontact.setdlg
+===================================================================
+--- kontact/src/kontact.setdlg (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kontact/src/kontact.setdlg (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -45,6 +45,7 @@
+ Name[uk]=ÐведеннÑ
+ Name[uz]=ҲиÑобоÑ
+ Name[zh_CN]=æ¦è§
++Name[zh_TW]=æè¦
+ Comment=Summary View
+ Comment[bg]=ÐбобÑение
+ Comment[ca]=Vista resum
+@@ -57,6 +58,7 @@
+ Comment[eu]=Laburpen ikuspegia
+ Comment[fi]=Yhteenvetonäyttö
+ Comment[fr]=Vue résumée
++Comment[he]=תצ××ת תקצ×ר
+ Comment[hu]=ÃttekintÅ nézet
+ Comment[is]=Yfirlitssýn
+ Comment[it]=Vista sommario
+@@ -72,6 +74,7 @@
+ Comment[pt]=Vista Sumária
+ Comment[pt_BR]=Sumário
+ Comment[ru]=Ðид дайджеÑÑа
++Comment[sk]=Súhrnný pohľad
+ Comment[sl]=Pogled povzetka
+ Comment[sr]=ÐÑиказ ÑажеÑка
+ Comment[sr at Latn]=Prikaz sažetka
+@@ -80,6 +83,7 @@
+ Comment[tr]=Ãzet Görünüm
+ Comment[uk]=ÐиглÑд коÑоÑкого пÑдÑÑмкÑ
+ Comment[zh_CN]=æè¦è§å¾
++Comment[zh_TW]=æè¦æª¢è¦
+ Weight=100
+ Icon=kontact_summary
+
+@@ -131,6 +135,7 @@
+ Name[uk]=ÐоÑÑа
+ Name[uz]=ХаÑ-Ñ
абаÑ
+ Name[zh_CN]=é®ä»¶
++Name[zh_TW]=éµä»¶
+ Comment=Mail Component
+ Comment[be]=ÐампанÑÐ½Ñ "ÐоÑÑа"
+ Comment[bg]=ÐодÑл за е-поÑа
+@@ -145,6 +150,7 @@
+ Comment[eu]=Posta osagaia
+ Comment[fi]=Sähköpostiohjelma
+ Comment[fr]=Composant messagerie
++Comment[he]=ר××× ×××ר
+ Comment[hu]=LevelezÅkomponens
+ Comment[is]=Pósthluti
+ Comment[it]=Componente posta
+@@ -160,6 +166,7 @@
+ Comment[pt]=Componente de E-mail
+ Comment[pt_BR]=Componente de Email
+ Comment[ru]=ÐÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ KMail
++Comment[sk]=Komponent pošty
+ Comment[sl]=Poštna komponenta
+ Comment[sr]=ÐоÑÑанÑка компоненÑа
+ Comment[sr at Latn]=Poštanska komponenta
+@@ -168,6 +175,7 @@
+ Comment[tr]=E-posta BileÅeni
+ Comment[uk]=ÐÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ Ð¿Ð¾ÑÑи
+ Comment[zh_CN]=é®ä»¶ç»ä»¶
++Comment[zh_TW]=éµä»¶å
ä»¶
+ Weight=200
+ Icon=kontact_mail
+
+@@ -219,6 +227,7 @@
+ Name[uk]=ÐонÑакÑи
+ Name[uz]=ÐлоÒалаÑ
+ Name[zh_CN]=è系人
++Name[zh_TW]=è¯çµ¡äºº
+ Comment=Address Book Component
+ Comment[be]=ÐампанÑÐ½Ñ "ÐдÑаÑÐ½Ð°Ñ ÐºÐ½Ñга"
+ Comment[bg]=ÐодÑл за адÑеÑника
+@@ -232,6 +241,7 @@
+ Comment[eu]=Helbide-liburu osagaia
+ Comment[fi]=Osoitekirja
+ Comment[fr]=Composant de carnet d'adresses
++Comment[he]=ר××× ×¤× ×§×¡ ×ת×××ת
+ Comment[hu]=CÃmjegyzék-komponens
+ Comment[is]=Vistfangahluti
+ Comment[it]=Componente rubrica indirizzi
+@@ -247,6 +257,7 @@
+ Comment[pt]=Componente de Livro de Endereços
+ Comment[pt_BR]=Componente de Livro de Endereços
+ Comment[ru]=ÐÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ Ð°Ð´ÑеÑной книги
++Comment[sk]=Komponent adresára
+ Comment[sl]=Komponenta za adresar
+ Comment[sr]=ÐомпоненÑа адÑеÑаÑа
+ Comment[sr at Latn]=Komponenta adresara
+@@ -255,6 +266,7 @@
+ Comment[tr]=Adres Defteri BileÅeni
+ Comment[uk]=ÐÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ Ð°Ð´ÑеÑÐ½Ð¾Ñ ÐºÐ½Ð¸Ð³Ð¸
+ Comment[zh_CN]=å°åç°¿ç»ä»¶
++Comment[zh_TW]=éè¨éå
ä»¶
+ Weight=300
+ Icon=kontact_contacts
+
+@@ -270,6 +282,7 @@
+ Name[eu]=Data berezien laburpena
+ Name[fi]=Erikoispäivien yhteenveto
+ Name[fr]=Résumé des dates particulières
++Name[he]=תקצ×ר ת×ר×××× ×××××××
+ Name[hu]=A fontos dátumok áttekintÅje
+ Name[is]=Yfirlit sérstakra daga
+ Name[it]=Sommario date speciali
+@@ -285,6 +298,7 @@
+ Name[pt]=Sumário de Datas Especiais
+ Name[pt_BR]=Resumo de Datas Especiais
+ Name[ru]=ÐайджеÑÑ Ð¾ÑобÑÑ
даÑ
++Name[sk]=Súhrn špeciálnych dátumov
+ Name[sl]=Povzetek posebnih datumov
+ Name[sr]=СажеÑак поÑебниÑ
даÑÑма
+ Name[sr at Latn]=Sažetak posebnih datuma
+@@ -293,6 +307,7 @@
+ Name[tr]=Ãzel Tarihler Ãzeti
+ Name[uk]=ÐоÑоÑкий пÑдÑÑмок оÑобливиÑ
даÑ
+ Name[zh_CN]=ç¹æ®æ¥ææè¦
++Name[zh_TW]=ç¹æ®æ¥ææè¦
+ Comment=Special Dates Summary Component
+ Comment[bg]=ÐодÑл за обобÑение на ÑпеÑиалниÑе ÑлÑÑаи
+ Comment[ca]=Component pel resum de dates especials
+@@ -305,6 +320,7 @@
+ Comment[eu]=Data berezien laburpenaren osagaia
+ Comment[fi]=Erikoispäivien yhteenvedon komponentti
+ Comment[fr]=Composant de résumé des dates particulières
++Comment[he]=ר××× ×ª×ר×××× ×ש××××
+ Comment[hu]=A fontos dátumok áttekintŠkomponense
+ Comment[is]=Yfirlitshluti sérstakra daga
+ Comment[it]=Componente sommario per le date speciali
+@@ -320,6 +336,7 @@
+ Comment[pt]=Componente de Sumário de Datas Especiais
+ Comment[pt_BR]=Componente de Datas Especiais
+ Comment[ru]=ÐÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ Ð´Ð°Ð¹Ð´Ð¶ÐµÑÑа оÑобÑÑ
даÑ
++Comment[sk]=Komponent súhrnu špeciálnych dátumov
+ Comment[sl]=Komponenta za povzetke posebnih datumov
+ Comment[sr]=ÐомпоненÑа ÑажеÑка поÑебниÑ
даÑÑма
+ Comment[sr at Latn]=Komponenta sažetka posebnih datuma
+@@ -328,6 +345,7 @@
+ Comment[tr]=Ãzel Tarihler Ãzeti BileÅeni
+ Comment[uk]=ÐÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ ÐºÐ¾ÑоÑкого пÑдÑÑÐ¼ÐºÑ Ð¾ÑобливиÑ
даÑ
+ Comment[zh_CN]=ç¹æ®æ¥ææè¦ç»ä»¶
++Comment[zh_TW]=ç¹æ®æ¥ææè¦å
ä»¶
+ Weight=310
+ Icon=cookie
+
+@@ -354,7 +372,7 @@
+ Name[hu]=Naptár
+ Name[is]=Dagatal
+ Name[it]=Calendario
+-Name[ja]=ã«ã¬ã³ã
++Name[ja]=ã«ã¬ã³ãã¼
+ Name[km]=ááááá·áá·á
+ Name[lt]=Kalendorius
+ Name[ms]=Kalendar
+@@ -379,6 +397,7 @@
+ Name[uk]=ÐалендаÑ
+ Name[uz]=ÐалендаÑ
+ Name[zh_CN]=æ¥å
++Name[zh_TW]=è¡äºæ
+ Comment=Calendar Component
+ Comment[be]=ÐампанÑÐ½Ñ "ÐалендаÑ"
+ Comment[bg]=ÐодÑл за календаÑа
+@@ -392,6 +411,7 @@
+ Comment[eu]=Egutegi osagaia
+ Comment[fi]=Kalenterikomponentti
+ Comment[fr]=Composant d'agenda
++Comment[he]=ר××× ××× ×©× ×
+ Comment[hu]=NaptárkezelŠkomponens
+ Comment[is]=Dagatalshluti
+ Comment[it]=Componente calendario
+@@ -407,6 +427,7 @@
+ Comment[pt]=Componente de Calendário
+ Comment[pt_BR]=Componente de Calendário
+ Comment[ru]=ÐÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ ÐºÐ°Ð»ÐµÐ½Ð´Ð°ÑÑ
++Comment[sk]=Komponent kalendára
+ Comment[sl]=Komponenta za koledar
+ Comment[sr]=ÐомпоненÑа календаÑа
+ Comment[sr at Latn]=Komponenta kalendara
+@@ -415,6 +436,7 @@
+ Comment[tr]=Takvim BileÅeni
+ Comment[uk]=ÐÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ ÐºÐ°Ð»ÐµÐ½Ð´Ð°ÑÑ
+ Comment[zh_CN]=æ¥åç»ä»¶
++Comment[zh_TW]=è¡äºæå
ä»¶
+ Weight=400
+ Icon=kontact_date
+
+@@ -466,6 +488,7 @@
+ Name[uk]=Ðовини
+ Name[uz]=ЯнгиликлаÑ
+ Name[zh_CN]=æ°é»
++Name[zh_TW]=æ°è
+ Comment=News Component
+ Comment[be]=ÐампанÑÐ½Ñ "ÐавÑнÑ"
+ Comment[bg]=ÐодÑл за новиниÑе
+@@ -479,6 +502,7 @@
+ Comment[eu]=Berrien osagaia
+ Comment[fi]=Uutiskomponentti
+ Comment[fr]=Composant de Nouvelles
++Comment[he]=ר××× ××ש×ת
+ Comment[hu]=HÃrkezelÅ komponens
+ Comment[is]=Fréttahluti
+ Comment[it]=Componente news
+@@ -494,6 +518,7 @@
+ Comment[pt]=Componente de NotÃcias
+ Comment[pt_BR]=Componente de NotÃcias
+ Comment[ru]=ÐÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ Ð½Ð¾Ð²Ð¾ÑÑей
++Comment[sk]=Komponent správ
+ Comment[sl]=Komponenta za novice
+ Comment[sr]=ÐомпоненÑа веÑÑи
+ Comment[sr at Latn]=Komponenta vesti
+@@ -502,6 +527,7 @@
+ Comment[tr]=Haber Grubu BileÅeni
+ Comment[uk]=ÐÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ Ð½Ð¾Ð²Ð¸Ð½
+ Comment[zh_CN]=æ°é»ç»ä»¶
++Comment[zh_TW]=æ°èå
ä»¶
+ Weight=500
+ Icon=kontact_news
+
+@@ -523,6 +549,7 @@
+ Name[fr]=Météo
+ Name[ga]=Aimsir
+ Name[gl]=O Tempo
++Name[he]=××× ××××ר
+ Name[hi]=वà¥à¤¦à¤°
+ Name[hu]=IdÅjárás
+ Name[is]=Veður
+@@ -552,6 +579,7 @@
+ Name[uk]=Ðогода
+ Name[uz]=Ðб-ҳаво
+ Name[zh_CN]=天æ°
++Name[zh_TW]=天氣
+ Comment=Weather Information
+ Comment[be]=ÐнÑаÑмаÑÑÑ Ð¿Ñа надвоÑâе
+ Comment[bg]=ÐнÑоÑмаÑÐ¸Ñ Ð·Ð° вÑемеÑо
+@@ -568,6 +596,7 @@
+ Comment[fi]=Säätiedot
+ Comment[fr]=Informations météo
+ Comment[ga]=Eolas faoin aimsir
++Comment[he]=××××¢ ××××ת ××× ×××××ר
+ Comment[hu]=IdÅjárási adatok
+ Comment[is]=Veðurupplýsingar
+ Comment[it]=Informazioni meteorologiche
+@@ -583,6 +612,7 @@
+ Comment[pt]=Informações Meteorológicas
+ Comment[pt_BR]=Informações sobre o Clima
+ Comment[ru]=ÐнÑоÑмаÑÐ¸Ñ Ð¾ погоде
++Comment[sk]=Informácie o poÄasÃ
+ Comment[sl]=Podatki o vremenu
+ Comment[sr]=ÐнÑоÑмаÑиÑе о вÑеменÑ
+ Comment[sr at Latn]=Informacije o vremenu
+@@ -592,6 +622,7 @@
+ Comment[uk]=ÐнÑоÑмаÑÑÑ Ð¿Ñо погодÑ
+ Comment[uz]=Ðб-ҳаво ҳаÒида маÑлÑмоÑ
+ Comment[zh_CN]=天æ°ä¿¡æ¯
++Comment[zh_TW]=天氣è³è¨
+ Weight=1000
+ Icon=kweather
+
+@@ -612,6 +643,7 @@
+ Name[fi]=Uutisnäytin
+ Name[fr]=Téléscripteur de nouvelles
+ Name[gl]=Colector de Novas
++Name[he]=××ש×ת רצ×ת
+ Name[hi]=नà¥à¤¯à¥à¤ à¤à¤¿à¤à¤°
+ Name[hr]=Ticker sa novostima
+ Name[hu]=RSS hÃrmegjelenÃtÅ
+@@ -645,6 +677,7 @@
+ Name[vi]=Trình kiá»m tra news
+ Name[xh]=Umchola-choli weendaba
+ Name[zh_CN]=æ°é»ç¹ç¹é
++Name[zh_TW]=æ°è顯示å¨
+ Name[zu]=Umlungiseleli Wezindaba
+ Comment=News Ticker Component
+ Comment[bg]=ÐÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ Ð·Ð° новини
+@@ -673,6 +706,7 @@
+ Comment[pt]=Componente de Fontes de NotÃcias
+ Comment[pt_BR]=Componente Mostrador de NotÃcias
+ Comment[ru]=ÐÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ Ð»ÐµÐ½ÑÑ Ð½Ð¾Ð²Ð¾ÑÑей
++Comment[sk]=Komponent zdrojov správ
+ Comment[sl]=Komponenta prikazovalnika novic
+ Comment[sr]=ÐомпоненÑа оÑкÑÑаваÑа веÑÑи
+ Comment[sr at Latn]=Komponenta otkucavaÄa vesti
+@@ -681,5 +715,6 @@
+ Comment[tr]=Haber İzleyici BileÅeni
+ Comment[uk]=ÐÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ ÑмÑжки новин
+ Comment[zh_CN]=æ°é»ç¹ç¹éç»ä»¶
++Comment[zh_TW]=æ°è顯示å
ä»¶
+ Weight=1100
+ Icon=knode
+Index: kontact/src/Kontact.desktop
+===================================================================
+--- kontact/src/Kontact.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kontact/src/Kontact.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -27,7 +27,7 @@
+ GenericName[he]=×× ×× ××××¢ ××ש×
+ GenericName[hi]=निà¤à¥ à¤à¤¾à¤¨à¤à¤¾à¤°à¥ पà¥à¤°à¤¬à¤à¤§à¤
+ GenericName[hu]=InformációkezelÅ
+-GenericName[is]=Persónuupplýsinga stjórnandi
++GenericName[is]=Persónulegur upplýsingastjórnandi
+ GenericName[it]=Gestione informazioni personali
+ GenericName[ja]=å人æ
å ±ããã¼ã¸ã£
+ GenericName[km]=áááááá·áá¸âáááááááááâáááááá¶áâáááá¶ááâáááá½á
+@@ -54,6 +54,7 @@
+ GenericName[uk]=ÐÐµÐ½ÐµÐ´Ð¶ÐµÑ Ð¾ÑобиÑÑÐ¾Ñ ÑнÑоÑмаÑÑÑ
+ GenericName[uz]=ШаÑ
Ñий маÑлÑÐ¼Ð¾Ñ Ð±Ð¾ÑÒаÑÑвÑиÑи
+ GenericName[zh_CN]=个人信æ¯ç®¡çå¨
++GenericName[zh_TW]=å人è³è¨ç®¡çè
+ Terminal=false
+ X-KDE-StartupNotify=true
+ Categories=Qt;KDE;Office;
+Index: kandy/src/kandy.desktop
+===================================================================
+--- kandy/src/kandy.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kandy/src/kandy.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -42,6 +42,7 @@
+ Comment[tr]=Cep telefonları ile adres defteri paylaÅımı için araç
+ Comment[uk]=ÐнÑÑÑÑÐ¼ÐµÐ½Ñ Ð´Ð»Ñ ÑинÑ
ÑонÑзаÑÑÑ Ð´Ð°Ð½Ð¸Ñ
адÑеÑÐ½Ð¾Ñ ÐºÐ½Ð¸Ð³Ð¸ з мобÑлÑним ÑелеÑоном
+ Comment[zh_CN]=å°å°åç°¿æ°æ®ä¸ç§»å¨çµè¯åæ¥çå·¥å
·
++Comment[zh_TW]=å°éè¨éèææ©åæ¥çå·¥å
·
+ Exec=kandy %i %m -caption "%c"
+ Icon=kandy
+ Type=Application
+Index: ktnef/gui/ktnef.desktop
+===================================================================
+--- ktnef/gui/ktnef.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ ktnef/gui/ktnef.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -30,6 +30,7 @@
+ GenericName[pt]=Visualizador de Ficheiros TNEF
+ GenericName[pt_BR]=Visualizador de Arquivos TNEF
+ GenericName[ru]=ÐÑоÑмоÑÑ Ñайлов TNEF
++GenericName[sk]=PrehliadaÄ súborov TNEF
+ GenericName[sl]=Pregledovalnik datotek TNEF
+ GenericName[sr]=ÐÑÐ¸ÐºÐ°Ð·Ð¸Ð²Ð°Ñ TNEF ÑаÑлова
+ GenericName[sr at Latn]=PrikazivaÄ TNEF fajlova
+@@ -38,6 +39,7 @@
+ GenericName[tr]=TNEF Dosya Göstericisi
+ GenericName[uk]=ÐеÑеглÑÐ´Ð°Ñ ÑайлÑв TNEF
+ GenericName[zh_CN]=TNEF æä»¶æ¥çå¨
++GenericName[zh_TW]=TNEF æªæ¡æª¢è¦å¨
+ Exec=ktnef %i %m -caption "%c"
+ Icon=ktnef
+ Type=Application
+@@ -84,6 +86,7 @@
+ Comment[tr]=TNEF dosyaları için gösterici/çıkarıcı
+ Comment[uk]=ÐеÑеглÑдаÑ/ÑозпаковÑÐ²Ð°Ñ ÑайлÑв TNEF
+ Comment[zh_CN]=TNEF æä»¶çæ¥ç/æåå¨
++Comment[zh_TW]=TNEF æªæ¡æª¢è¦å¨
+ Terminal=false
+ MimeType=application/ms-tnef;
+ Categories=Qt;KDE;Utility;X-KDE-Utilities-PIM;
+Index: ktnef/gui/ms-tnef.desktop
+===================================================================
+--- ktnef/gui/ms-tnef.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ ktnef/gui/ms-tnef.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -49,3 +49,4 @@
+ Comment[uk]=Файл TNEF
+ Comment[uz]=TNEF-Ñайли
+ Comment[zh_CN]=TNEF æä»¶
++Comment[zh_TW]=TNEF æªæ¡
+Index: kfile-plugins/rfc822/kfile_rfc822.desktop
+===================================================================
+--- kfile-plugins/rfc822/kfile_rfc822.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kfile-plugins/rfc822/kfile_rfc822.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -47,6 +47,7 @@
+ Name[tr]=E-Posta Bilgisi
+ Name[uk]=ÐнÑоÑмаÑÑÑ Ð¿Ñо повÑÐ´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ ÐµÐ». поÑÑи
+ Name[zh_CN]=çµåé®ä»¶ä¿¡æ¯
++Name[zh_TW]=é»åéµä»¶è³è¨
+ ServiceTypes=KFilePlugin
+ X-KDE-Library=kfile_rfc822
+ MimeType=message/rfc822
+Index: kfile-plugins/ics/kfile_ics.desktop
+===================================================================
+--- kfile-plugins/ics/kfile_ics.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kfile-plugins/ics/kfile_ics.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -32,6 +32,7 @@
+ Name[pt]=Informação ICS
+ Name[pt_BR]=Informações ICS
+ Name[ru]=ÐнÑоÑмаÑÐ¸Ñ ICS
++Name[sk]=Informácie o ICS
+ Name[sl]=Podatki ICS
+ Name[sr]=ICS инÑоÑмаÑиÑе
+ Name[sr at Latn]=ICS informacije
+@@ -40,6 +41,7 @@
+ Name[tr]=ICS bilgisi
+ Name[uk]=ÐнÑоÑмаÑÑÑ Ð¿Ñо ICS
+ Name[zh_CN]=ICS ä¿¡æ¯
++Name[zh_TW]=ICS è³è¨
+ ServiceTypes=KFilePlugin
+ X-KDE-Library=kfile_ics
+ MimeType=text/calendar
+Index: kfile-plugins/palm-databases/kfile_palm.desktop
+===================================================================
+--- kfile-plugins/palm-databases/kfile_palm.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ kfile-plugins/palm-databases/kfile_palm.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -16,6 +16,7 @@
+ Name[eu]=PalmOS datu-base informazioa
+ Name[fi]=PalmOS-tietokannan tiedot
+ Name[fr]=Informations sur les bases de données PalmOS
++Name[ga]=Eolas faoin Bhunachar Sonraà PalmOS
+ Name[he]=××××¢ ××××ת ×ס×ס ×× ×ª×× ×× ×©× PalmOS
+ Name[hu]=PalmOS adatbázis-jellemzÅk
+ Name[is]=PalmOS gagnagrunnsupplýsingar
+@@ -43,6 +44,7 @@
+ Name[tr]=PalmOS Veritabanı Bilgisi
+ Name[uk]=ÐнÑоÑмаÑÑÑ Ð¿Ñо Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð¸Ñ
PalmOS
+ Name[zh_CN]=PalmOS æ°æ®åºä¿¡æ¯
++Name[zh_TW]=PalmOS è³æåº«è³è¨
+ ServiceTypes=KFilePlugin
+ X-KDE-Library=kfile_palm
+ MimeType=application/vnd.palm
+Index: korganizer/korganizer_configfonts.desktop
+===================================================================
+--- korganizer/korganizer_configfonts.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ korganizer/korganizer_configfonts.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -32,6 +32,7 @@
+ Name[fr]=Polices
+ Name[ga]=Clónna
+ Name[gl]=Fontes
++Name[he]=×××¤× ××
+ Name[hi]=फ़à¥à¤¨à¥à¤à¥à¤¸
+ Name[hr]=Pisma
+ Name[hu]=BetűtÃpusok
+@@ -68,6 +69,7 @@
+ Name[vi]=Phông
+ Name[xh]=Ubungakanani bamagama
+ Name[zh_CN]=åä½
++Name[zh_TW]=åå
+ Comment=KOrganizer Fonts Configuration
+ Comment[ar]=إعداد Ø®Ø·ÙØ· KOrganizer
+ Comment[be]=ÐанÑÑгÑÑаÑÑÑ ÑÑÑÑÑÐ¾Ñ "K ÐÑганÑзаÑаÑа"
+@@ -85,6 +87,7 @@
+ Comment[fi]=Korganizer kirjasinten asetukset
+ Comment[fr]=Configuration des polices de KOrganizer
+ Comment[gl]=Configuración de Fontes de KOrganizer
++Comment[he]=×××ר×ת ×××¤× ×× ×©× ××ר××× ××
+ Comment[hi]=à¤à¥-à¤à¤°à¥à¤à¥à¤¨à¤¾à¤à¤à¤¼à¤° फ़à¥à¤¨à¥à¤à¥à¤¸ à¤à¥à¤¨à¥à¤«à¤¼à¤¿à¤à¤°à¥à¤¶à¤¨
+ Comment[hu]=KOrganizer betűtÃpus-beállÃtások
+ Comment[is]=KOrganizer leturstillingar
+@@ -113,6 +116,7 @@
+ Comment[tr]=KOrganizer Yazıtipi Yapılandırması
+ Comment[uk]=ÐалаÑÑÑÐ²Ð°Ð½Ð½Ñ ÑÑиÑÑÑв Ñ KOrganizer
+ Comment[zh_CN]=KOrganizer åä½é
ç½®
++Comment[zh_TW]=KOrganizer ååè¨å®
+ Keywords=korganizer,fonts
+ Keywords[be]=K ÐÑганÑзаÑаÑ,ÑÑÑÑÑÑ,korganizer,fonts
+ Keywords[bg]=оÑганизаÑоÑ, ÑÑиÑÑове, наÑÑÑойки, korganizer, fonts
+@@ -130,6 +134,7 @@
+ Keywords[fr]=KOrganizer,polices
+ Keywords[ga]=korganizer,clónna,clófhoirne
+ Keywords[gl]=korganizer,fontes
++Keywords[he]=korganizer,fonts,×ר××× ×ת,×××¤× ××,××פ×,פ×× ×,פ×× ×××
+ Keywords[hi]=à¤à¥-à¤à¤°à¥à¤à¥à¤¨à¤¾à¤à¤à¤¼à¤°,फ़à¥à¤¨à¥à¤à¥à¤¸
+ Keywords[hu]=korganizer,betűtÃpusok
+ Keywords[is]=korganizer,letur
+Index: korganizer/kogroupware.cpp
+===================================================================
+--- korganizer/kogroupware.cpp (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ korganizer/kogroupware.cpp (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -263,7 +263,7 @@
+ "with the organizers calendar. Do you really want "
+ "to edit it?" );
+ rc = KMessageBox::warningYesNo( parent, txt );
+- return ( rc == KMessageBox::Continue );
++ return ( rc == KMessageBox::Yes );
+ }
+ } else {
+ kdWarning(5850) << "Groupware messages for Journals are not implemented yet!" << endl;
+Index: korganizer/koglobals.cpp
+===================================================================
+--- korganizer/koglobals.cpp (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ korganizer/koglobals.cpp (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -141,10 +141,17 @@
+ return SmallIconSet( name, size, mOwnInstance );
+ }
+
+-QString KOGlobals::holiday( const QDate &date )
++QStringList KOGlobals::holiday( const QDate &date )
+ {
+- if ( mHolidays ) return mHolidays->shortText( date );
+- else return QString::null;
++ QStringList hdays;
++
++ if ( !mHolidays ) return hdays;
++ QValueList<KHoliday> list = mHolidays->getHolidays( date );
++ QValueList<KHoliday>::ConstIterator it = list.begin();
++ for ( ; it != list.end(); ++it ) {
++ hdays.append( (*it).text );
++ }
++ return hdays;
+ }
+
+ bool KOGlobals::isWorkDay( const QDate &date )
+@@ -152,12 +159,14 @@
+ int mask( ~( KOPrefs::instance()->mWorkWeekMask ) );
+
+ bool nonWorkDay = ( mask & ( 1 << ( date.dayOfWeek() - 1 ) ) );
+-
+- nonWorkDay = nonWorkDay
+- || ( KOPrefs::instance()->mExcludeHolidays
+- && ( mHolidays
+- && ( mHolidays->category( date ) == KHolidays::HOLIDAY ) ) );
+-
++ if ( KOPrefs::instance()->mExcludeHolidays && mHolidays ) {
++ QValueList<KHoliday> list = mHolidays->getHolidays( date );
++ QValueList<KHoliday>::ConstIterator it = list.begin();
++ for ( ; it != list.end(); ++it ) {
++ nonWorkDay = nonWorkDay
++ || ( (*it).Category == KHolidays::HOLIDAY );
++ }
++ }
+ return !nonWorkDay;
+ }
+
+Index: korganizer/korganizer_configplugins.desktop
+===================================================================
+--- korganizer/korganizer_configplugins.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ korganizer/korganizer_configplugins.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -28,6 +28,7 @@
+ Name[fi]=Liitännäiset
+ Name[fr]=Modules externes
+ Name[ga]=Breiseáin
++Name[he]=ת×ספ××
+ Name[hu]=BÅvÃtÅmodulok
+ Name[is]=Ãforrit
+ Name[it]=Plugin
+@@ -42,6 +43,7 @@
+ Name[pt]='Plugins'
+ Name[ru]=ÐодÑли
+ Name[rw]=Amacomeka
++Name[sk]=Moduly
+ Name[sl]=Vstavki
+ Name[sr]=ÐÑикÑÑÑÑи
+ Name[sr at Latn]=PrikljuÄci
+@@ -51,6 +53,7 @@
+ Name[uk]=ÐÑÑлки
+ Name[uz]=ÐлагинлаÑ
+ Name[zh_CN]=æä»¶
++Name[zh_TW]=夿ç¨å¼
+ Comment=KOrganizer Plugin Configuration
+ Comment[be]=ÐанÑÑгÑÑаÑÑÑ Ð´Ð°Ð¿Ð°ÑненÑнÑÑ "K ÐÑганÑзаÑаÑа"
+ Comment[bg]=ÐаÑÑÑойки на пÑиÑÑавкиÑе за KOrganizer
+@@ -65,6 +68,7 @@
+ Comment[eu]=KOrganizer-en plugin konfigurazioa
+ Comment[fi]=KOrganizerin liitännäisen asetukset
+ Comment[fr]=Configuration du module KOrganizer
++Comment[he]=×××ר×ת ת×סף ××ר××× ×ת
+ Comment[hu]=A KOrganizer bÅvÃtÅmodul beállÃtásai
+ Comment[is]=Stillingar KOrganizer Ãforrita
+ Comment[it]=Configurazione plugin KOrganizer
+@@ -80,6 +84,7 @@
+ Comment[pt]=Configuração de 'Plugins' do KOrganizer
+ Comment[pt_BR]=Configuração dos Plugins do KOrganizer
+ Comment[ru]=ÐаÑÑÑойки модÑлей оÑганайзеÑа KDE
++Comment[sk]=Nastavenie modulu KOrganizer
+ Comment[sl]=Nastavitve vstavka KOrganizerja
+ Comment[sr]=ÐодеÑаваÑе пÑикÑÑÑака KOrganizer-а
+ Comment[sr at Latn]=PodeÅ¡avanje prikljuÄaka KOrganizer-a
+@@ -88,6 +93,7 @@
+ Comment[tr]=KOrganizer Eklenti Yapılandırması
+ Comment[uk]=ÐÑÑлок налаÑÑÑÐ²Ð°Ð½Ð½Ñ KOrganizer
+ Comment[zh_CN]=KOrganizer æä»¶é
ç½®
++Comment[zh_TW]=KOrganizer夿ç¨å¼è¨å®
+ Keywords=korganizer,plugin,module
+ Keywords[be]=K ÐÑганÑзаÑаÑ,дапаÑненÑне,модÑлÑ,korganizer,plugin,module
+ Keywords[bg]=оÑганизаÑоÑ, модÑл, пÑиÑÑавка, korganizer, plugin, module
+@@ -102,6 +108,7 @@
+ Keywords[fi]=korganizer,liitännäinen,moduuli
+ Keywords[fr]=KOrganizer,module
+ Keywords[ga]=korganizer,breiseán,modúl
++Keywords[he]=korganizer,plugin,module,×××××,ת×סף,×ר××× ×ת
+ Keywords[hu]=korganizer,bÅvÃtÅmodul,modul
+ Keywords[is]=korganizer,Ãforrit,eining
+ Keywords[it]=korganizer,plugin,modulo
+Index: korganizer/korganizer_configtime.desktop
+===================================================================
+--- korganizer/korganizer_configtime.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ korganizer/korganizer_configtime.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -31,6 +31,7 @@
+ Name[fr]=Date et heure
+ Name[ga]=Am & Dáta
+ Name[gl]=Hora e Data
++Name[he]=ת×ר×× ×שע×
+ Name[hi]=तारà¥à¤à¤¼ व समय
+ Name[hu]=Dátum és idÅ
+ Name[is]=TÃmi og dagsetning
+@@ -60,6 +61,7 @@
+ Name[uk]=Ð§Ð°Ñ Ñа даÑа
+ Name[uz]=Сана ва ваÒÑ
+ Name[zh_CN]=æ¶é´åæ¥æ
++Name[zh_TW]=æéèæ¥æ
+ Comment=KOrganizer Time Configuration
+ Comment[ar]=إعداد ÙÙØª KOrganizer
+ Comment[be]=ÐанÑÑгÑÑаÑÑÑ ÑаÑÑ "K ÐÑганÑзаÑаÑа"
+@@ -77,6 +79,7 @@
+ Comment[fi]=KOrganizerin aika-asetukset
+ Comment[fr]=Configuration de l'heure de KOrganizer
+ Comment[gl]=Configuración de Hora de KOrganizer
++Comment[he]=×××ר×ת ×©×¢× ××ר××× ×ת
+ Comment[hi]=à¤à¥-à¤à¤°à¥à¤à¥à¤¨à¤¾à¤à¤à¤¼à¤° समय à¤à¥à¤¨à¥à¤«à¤¼à¤¿à¤à¤°à¥à¤¶à¤¨
+ Comment[hu]=KOrganizer dátum- és idÅbeállÃtások
+ Comment[is]=KOrganizer tÃmastillingar
+@@ -104,6 +107,7 @@
+ Comment[tr]=KOrganizer Zaman Yapılandırması
+ Comment[uk]=ÐалаÑÑÑÐ²Ð°Ð½Ð½Ñ ÑаÑÑ Ñа даÑи в KOrganizer
+ Comment[zh_CN]=KOrganizer æ¶é´é
ç½®
++Comment[zh_TW]=KOrganizer æéè¨å®
+ Keywords=korganizer,time
+ Keywords[be]=K ÐÑганÑзаÑаÑ,ÑаÑ,korganizer,time
+ Keywords[bg]=оÑганизаÑоÑ, даÑа, ÑаÑ, наÑÑÑойки, korganizer, time
+@@ -122,6 +126,7 @@
+ Keywords[fr]=KOrganizer,date
+ Keywords[ga]=korganizer,am
+ Keywords[gl]=korganizer,hora
++Keywords[he]=korganizer,time,×ר××× ×ת,שע×
+ Keywords[hi]=à¤à¥-à¤à¤°à¥à¤à¥à¤¨à¤¾à¤à¤à¤¼à¤°,समय
+ Keywords[hu]=korganizer,idÅ
+ Keywords[is]=korganizer,tÃmi
+Index: korganizer/korganizer_configgroupscheduling.desktop
+===================================================================
+--- korganizer/korganizer_configgroupscheduling.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ korganizer/korganizer_configgroupscheduling.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -56,6 +56,7 @@
+ Name[tr]=Group Zamanlama
+ Name[uk]=Розклад гÑÑп
+ Name[zh_CN]=ç»æ¥ç¨å®æ
++Name[zh_TW]=ç¾¤çµæç¨
+ Comment=KOrganizer Group Scheduling Configuration
+ Comment[ar]=إعداد جدÙÙØ© Ù
جÙ
ÙØ¹Ø© KOrganizer
+ Comment[bg]=ÐаÑÑÑойки на ÑазпиÑание за KOrganizer
+@@ -99,6 +100,7 @@
+ Comment[tr]=KOrganizer Grup Zamanlama Yapılandırması
+ Comment[uk]=ÐалаÑÑÑÐ²Ð°Ð½Ð½Ñ Ð³ÑÑпового ÑÐ¾Ð·ÐºÐ»Ð°Ð´Ñ Ð² KOrganizer
+ Comment[zh_CN]=Korganizer ç»æ¥ç¨å®æé
ç½®
++Comment[zh_TW]=KOrganizer ç¾¤çµæç¨è¨å®
+ Keywords=korganizer,group,scheduling
+ Keywords[bg]=оÑганизаÑоÑ, ÑазпиÑание, наÑÑÑойки, korganizer, group, scheduling
+ Keywords[bs]=korganizer,group,scheduling,rasporeÄivanje,grupa,grupe
+Index: korganizer/kocorehelper.cpp
+===================================================================
+--- korganizer/kocorehelper.cpp (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ korganizer/kocorehelper.cpp (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -40,5 +40,5 @@
+
+ QString KOCoreHelper::holidayString( const QDate &dt )
+ {
+- return KOGlobals::self()->holiday( dt );
++ return KOGlobals::self()->holiday( dt ).join( i18n("delimiter for joining holiday names", ", " ) );
+ }
+Index: korganizer/actionmanager.cpp
+===================================================================
+--- korganizer/actionmanager.cpp (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ korganizer/actionmanager.cpp (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -1039,8 +1039,13 @@
+ QDate cdate = settings->dateStart().date();
+ QDate qd2 = settings->dateEnd().date();
+ while ( cdate <= qd2 ) {
+- if ( !KOGlobals::self()->holiday( cdate ).isEmpty() )
+- mExport.addHoliday( cdate, KOGlobals::self()->holiday( cdate ) );
++ QStringList holidays = KOGlobals::self()->holiday( cdate );
++ if ( !holidays.isEmpty() ) {
++ QStringList::ConstIterator it = holidays.begin();
++ for ( ; it != holidays.end(); ++it ) {
++ mExport.addHoliday( cdate, *it );
++ }
++ }
+ cdate = cdate.addDays( 1 );
+ }
+
+Index: korganizer/koglobals.h
+===================================================================
+--- korganizer/koglobals.h (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ korganizer/koglobals.h (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -59,7 +59,7 @@
+ QPixmap smallIcon( const QString& name );
+ QIconSet smallIconSet( const QString& name, int size = 0 );
+
+- QString holiday( const QDate & );
++ QStringList holiday( const QDate & );
+ bool isWorkDay( const QDate & );
+
+ /**
+Index: korganizer/korgac/korgac.desktop
+===================================================================
+--- korganizer/korgac/korgac.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ korganizer/korgac/korgac.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -27,12 +27,14 @@
+ Name[pt]=Cliente de Avisos do KOrganizer
+ Name[pt_BR]=Cliente do Alarme do KOrganizer
+ Name[ru]=Ð£Ð²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ KOrganizer
++Name[sk]=Klient pripomienok pre KOrganizer
+ Name[sl]=Odjemalec za opomnik KOrganizerja
+ Name[sr]=ÐлиÑÐµÐ½Ñ Ð¿Ð¾Ð´ÑеÑника KOrganizer-а
+ Name[sr at Latn]=Klijent podsetnika KOrganizer-a
+ Name[sv]=Korganizer-påminnelseklient
+ Name[uk]=ÐлÑÑÐ½Ñ Ð½Ð°Ð³Ð°Ð´ÑÐ²Ð°Ð½Ñ KOrganizer
+ Name[zh_CN]=KOrganizer 宿¶å¨å®¢æ·ç«¯ç¨åº
++Name[zh_TW]=KOrganizer æé客æ¶ç«¯ç¨å¼
+ Exec=korgac --miniicon korganizer
+ Icon=korganizer
+ Type=Application
+@@ -62,12 +64,14 @@
+ GenericName[pt]=Cliente do Servidor de Avisos do KOrganizer
+ GenericName[pt_BR]=Cliente do Servidor de Alarme do KOrganizer
+ GenericName[ru]=ÐÐ»Ð¸ÐµÐ½Ñ ÑлÑÐ¶Ð±Ñ Ñведомлений KOrganizer
++GenericName[sk]=Klient KOrganizer pre démona pripomienok
+ GenericName[sl]=Pritajeni odjemalec za opomnik KOrganizerja
+ GenericName[sr]=ÐлиÑÐµÐ½Ñ Ð´ÐµÐ¼Ð¾Ð½Ð° подÑеÑника KOrganizer-а
+ GenericName[sr at Latn]=Klijent demona podsetnika KOrganizer-a
+ GenericName[sv]=Korganizer-alarmdemonklient
+ GenericName[uk]=Ðаемон клÑÑнÑа нагадÑÐ²Ð°Ð½Ð½Ñ Ð´Ð»Ñ KOrganizer
+ GenericName[zh_CN]=KOrganizer 宿¶å®æ¤è¿ç¨ç客æ·ç«¯ç¨åº
++GenericName[zh_TW]=KOrganizr æéå®è·ç¨å¼å®¢æ¶ç«¯
+ Terminal=false
+ X-KDE-autostart-after=panel
+ X-KDE-autostart-condition=korgacrc:General:Autostart:true
+Index: korganizer/interfaces/calendar/calendarplugin.desktop
+===================================================================
+--- korganizer/interfaces/calendar/calendarplugin.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ korganizer/interfaces/calendar/calendarplugin.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -63,7 +63,7 @@
+ Comment[vi]=Plugin lá»ch
+ Comment[xh]=Ikhalenda ye Plugin
+ Comment[zh_CN]=æ¥åæä»¶
+-Comment[zh_TW]=Calendar 夿ç¨å¼
++Comment[zh_TW]=è¡äºæå¤æç¨å¼
+ Comment[zu]=Iplagi Yekhalanda
+
+ [PropertyDef::X-KDE-KOrganizer-HasSettings]
+Index: korganizer/interfaces/calendar/calendardecoration.desktop
+===================================================================
+--- korganizer/interfaces/calendar/calendardecoration.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ korganizer/interfaces/calendar/calendardecoration.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -59,5 +59,5 @@
+ Comment[vi]=Plugin phá»i trà lá»ch
+ Comment[xh]=Ikhalenda Yohombiso lwe Plugin
+ Comment[zh_CN]=æ¥åè£
饰æä»¶
+-Comment[zh_TW]=Calendar æåè£é£¾å¤æç¨å¼
++Comment[zh_TW]=è¡äºææåè£é£¾å¤æç¨å¼
+ Comment[zu]=Ikhalenda Yeplagi Yokuhlobisa
+Index: korganizer/komonthview.cpp
+===================================================================
+--- korganizer/komonthview.cpp (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ korganizer/komonthview.cpp (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -896,8 +896,8 @@
+ mCells[i]->setHoliday( isHoliday );
+
+ // add holiday, if present
+- QString hstring( KOGlobals::self()->holiday( date ) );
+- mCells[i]->setHolidayString( hstring );
++ QStringList holidays( KOGlobals::self()->holiday( date ) );
++ mCells[i]->setHolidayString( holidays.join( i18n("delimiter for joining holiday names", ", " ) ) );
+ }
+
+ updateView();
+Index: korganizer/kodaymatrix.cpp
+===================================================================
+--- korganizer/kodaymatrix.cpp (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ korganizer/kodaymatrix.cpp (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -99,7 +99,7 @@
+ const int KODayMatrix::NUMDAYS = 42;
+
+ KODayMatrix::KODayMatrix( QWidget *parent, const char *name )
+- : QFrame( parent, name ), mCalendar( 0 ), mStartDate( 1970, 1, 1 )
++ : QFrame( parent, name ), mCalendar( 0 ), mStartDate()
+ {
+ // initialize dynamic arrays
+ mDays = new QDate[ NUMDAYS ];
+@@ -179,8 +179,10 @@
+
+ void KODayMatrix::setSelectedDaysFrom( const QDate &start, const QDate &end )
+ {
+- mSelStart = mStartDate.daysTo( start );
+- mSelEnd = mStartDate.daysTo( end );
++ if ( mStartDate.isValid() ) {
++ mSelStart = mStartDate.daysTo( start );
++ mSelEnd = mStartDate.daysTo( end );
++ }
+ }
+
+ void KODayMatrix::clearSelection()
+@@ -190,6 +192,7 @@
+
+ void KODayMatrix::recalculateToday()
+ {
++ if ( !mStartDate.isValid() ) return;
+ mToday = -1;
+ for ( int i = 0; i < NUMDAYS; i++ ) {
+ mDays[ i ] = mStartDate.addDays( i );
+@@ -212,7 +215,8 @@
+
+ void KODayMatrix::updateView( const QDate &actdate )
+ {
+-// kdDebug(5850) << "KODayMatrix::updateView() " << actdate.toString() << endl;
++ kdDebug(5850) << "KODayMatrix::updateView() " << actdate << ", day start="<<mStartDate<< endl;
++ if ( !actdate.isValid() ) return;
+
+ //flag to indicate if the starting day of the matrix has changed by this call
+ bool daychanged = false;
+@@ -250,16 +254,16 @@
+ updateEvents();
+ for( int i = 0; i < NUMDAYS; i++ ) {
+ //if it is a holy day then draw it red. Sundays are consider holidays, too
+- QString holiStr = KOGlobals::self()->holiday( mDays[ i ] );
++ QStringList holidays = KOGlobals::self()->holiday( mDays[ i ] );
++ QString holiStr = QString::null;
+
+ if ( ( KOGlobals::self()->calendarSystem()->dayOfWeek( mDays[ i ] ) ==
+ KOGlobals::self()->calendarSystem()->weekDayOfPray() ) ||
+- !holiStr.isEmpty() ) {
++ !holidays.isEmpty() ) {
++ if ( !holidays.isEmpty() ) holiStr = holidays.join( i18n("delimiter for joining holiday names", ", " ) );
+ if ( holiStr.isNull() ) holiStr = "";
+- mHolidays[ i ] = holiStr;
+- } else {
+- mHolidays[ i ] = QString::null;
+ }
++ mHolidays[ i ] = holiStr;
+ }
+ }
+
+Index: korganizer/koeditorrecurrence.cpp
+===================================================================
+--- korganizer/koeditorrecurrence.cpp (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ korganizer/koeditorrecurrence.cpp (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -1171,7 +1171,7 @@
+ mYearly->setFrequency( 1 );
+ mYearly->setByDay( from.date().dayOfYear() );
+ mYearly->setByPos( ( from.date().day() - 1 ) / 7 + 1,
+- from.date().dayOfWeek() - 1, from.date().month() );
++ from.date().dayOfWeek(), from.date().month() );
+ mYearly->setByMonth( from.date().day(), from.date().month() );
+ }
+
+Index: korganizer/plugins/datenums/datenums.desktop
+===================================================================
+--- korganizer/plugins/datenums/datenums.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ korganizer/plugins/datenums/datenums.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -14,10 +14,11 @@
+ Name[eu]=Egutegientzako data zenbakiak
+ Name[fi]=Päivämääräliitännäinen kalentereihin
+ Name[fr]=Module de numérotation des jours
++Name[he]=ת×סף ××¡×¤×¨× ×ª×ר×××× ×××××ת ×©× ×
+ Name[hu]=DátumkezelÅ bÅvÃtÅmodul naptárakhoz
+ Name[is]=Ãforrit fyrir númer dags á dagatali
+ Name[it]=Plugin delle date per i calendari
+-Name[ja]=ã«ã¬ã³ãã®æ¥ä»ãã©ã°ã¤ã³
++Name[ja]=ã«ã¬ã³ãã¼ã®æ¥ä»ãã©ã°ã¤ã³
+ Name[km]=áááááá·áá¸âáááá½áâáááâáá¶áááá·á
ááááâááááá¶ááâááááá·áá·á
+ Name[lt]=Datų numerių priedas kalendoriams
+ Name[ms]=Plugin Bilangan Tarikh untuk Kalendar
+@@ -39,6 +40,7 @@
+ Name[tr]=Takvimler için Tarih Rakamları Eklentisi
+ Name[uk]=ÐÑÑлок Ð´Ð°Ñ Ð´Ð»Ñ ÐºÐ°Ð»ÐµÐ½Ð´Ð°ÑÑв
+ Name[zh_CN]=æ¥åçæ¥ææ°åæä»¶
++Name[zh_TW]=è¡äºææ¥ææ¸å夿ç¨å¼
+ Comment=For each day this plugin shows its daynumber of the year at the top of the agenda view. For example, February 1 is day 32 of the year.
+ Comment[bg]=ÐÑиÑÑавкаÑа ÑлÑжи за показване на Ð´ÐµÐ½Ñ Ð¾Ñ Ð½Ð°ÑалоÑо на годинаÑа. ÐÑимеÑно, 1-ви ÑевÑÑаÑи е 32-Ð¸Ñ Ð´ÐµÐ½ Ð¾Ñ Ð³Ð¾Ð´Ð¸Ð½Ð°Ñа.
+ Comment[ca]=Per cada dÃa, aquest endollable mostra el número de dÃa de l'any al capdamunt de la vista d'agenda. Per exemple, 1 de Febrer és el dia 32 de l'any.
+@@ -66,6 +68,7 @@
+ Comment[pt]=Para cada dia, este 'plugin' mostra o seu número de dia do ano no topo da agenda. Por exemplo, o dia 1 de Fevereiro é o dia 32 do ano.
+ Comment[pt_BR]=Para cada dia, esse plugin mostra o número do dia no topo da visão de agenda. Por exemplo, 1º de fevereiro é o dia 32 do ano.
+ Comment[ru]=ÐÑÐ¾Ñ Ð¼Ð¾Ð´ÑÐ»Ñ Ð¿Ð¾ÐºÐ°Ð·ÑÐ²Ð°ÐµÑ Ð½Ð¾Ð¼ÐµÑ Ð´Ð½Ñ Ð² Ð³Ð¾Ð´Ñ Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ даÑÑ. ÐапÑимеÑ, Ð´Ð»Ñ 1 ÑевÑÐ°Ð»Ñ Ð±ÑÐ´ÐµÑ Ð¿Ð¾ÐºÐ°Ð·Ð°Ð½ Ð½Ð¾Ð¼ÐµÑ 32.
++Comment[sk]=Tento modul pre každý deÅ zobrazà jeho ÄÃslo dÅa v roku navrchu pohľadu agendy. NaprÃklad 1. február je deÅ ÄÃslo 32 v roku.
+ Comment[sl]=Za vsak dan ta vstavek prikazuje številko dneva v letu na vrhu praikaza agende. Npr., 1. februar je 32. dan v letu.
+ Comment[sr]=Ðа Ñваки даÑÑм Ð¾Ð²Ð°Ñ Ð¿ÑикÑÑÑак пÑиказÑÑе Ñегов бÑÐ¾Ñ Ð´Ð°Ð½Ð° Ñ Ð³Ð¾Ð´Ð¸Ð½Ð¸ на вÑÑ
Ñ Ð¿Ñиказа ÑаÑпоÑеда. Ðа пÑимеÑ, 1. ÑебÑÑÐ°Ñ Ñе 32. дан Ñ Ð³Ð¾Ð´Ð¸Ð½Ð¸.
+ Comment[sr at Latn]=Za svaki datum ovaj prikljuÄak prikazuje njegov broj dana u godini na vrhu prikaza rasporeda. Na primer, 1. februar je 32. dan u godini.
+@@ -74,6 +77,7 @@
+ Comment[tr]=Bu eklenti, her gün için tarih bilgisini gün sayısı olarak ajanda görünümünün yukarısında gösterir. ÃrneÄin, 1 Åubat yılın 32. günüdür.
+ Comment[uk]=Цей вÑÑлок показÑÑ Ð·Ð²ÐµÑÑ
Ñ Ð¿ÐµÑеглÑÐ´Ñ Ñоденника Ð½Ð¾Ð¼ÐµÑ Ð´Ð»Ñ ÐºÐ¾Ð¶Ð½Ð¾Ð³Ð¾ Ð´Ð½Ñ ÑокÑ. ÐапÑиклад, 1-го лÑÑого - Ñе 32 Ð´ÐµÐ½Ñ ÑокÑ.
+ Comment[zh_CN]=æ¤æä»¶å¯å¯¹æ¯å¤©å¨è®®äºæ¥ç¨è§å¾ä¸ä¸æ¹æ¾ç¤ºè¯¥æ¥å¨ä¸å¹´ä¸çåºå·ãä¾å¦ï¼2æ1æ¥æ¯ä¸å¹´ç第32天ã
++Comment[zh_TW]=å°æ¯ä¸å¤©ï¼æ¤å¤æç¨å¼æé¡¯ç¤ºéæ¯ä¸å¹´ä¸ç第幾天ã
+ Type=Service
+ ServiceTypes=Calendar/Plugin,Calendar/Decoration
+ X-KDE-KOrganizer-HasSettings=true
+Index: korganizer/plugins/projectview/projectview.desktop
+===================================================================
+--- korganizer/plugins/projectview/projectview.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ korganizer/plugins/projectview/projectview.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -85,6 +85,7 @@
+ Comment[pt]=Este 'plugin' oferece uma vista de planeamento de projectos para o KOrganizer (como as vistas de itens por-fazer ou mensais). Se activar este 'plugin', poderá mudar para a vista de projecto e ver a sua lista de itens por-fazer como num planeador de projectos.
+ Comment[pt_BR]=Este plugin fornece uma visão de planejamento de projeto para o KOrganizer (como as visões de pendências ou de mês). Se você ativar este plugin, você pode mudar para a visão de projeto e ver a sua lista de pendências como num software de planejamento de projetos.
+ Comment[ru]=ÐÑÐ¾Ñ Ð¼Ð¾Ð´ÑÐ»Ñ Ð¿Ð¾ÐºÐ°Ð·ÑÐ²Ð°ÐµÑ Ð¿ÑÐ¾ÐµÐºÑ Ð´Ð»Ñ Ð¾ÑганайзеÑа KDE. ÐÑли Ð²Ñ Ð¿Ð¾Ð´ÐºÐ»ÑÑиÑе ÑÑÐ¾Ñ Ð¼Ð¾Ð´ÑлÑ, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе поÑмоÑÑеÑÑ Ð²Ð°Ñи задаÑи в виде пÑоекÑа.
++Comment[sk]=Tento modul poskytuje pohľad na plánovanie projektu pre KOrganizer (ako sú úlohy alebo mesaÄné pohľady). Ak povolÃte tento modul, môžete prepÃnaÅ¥ projektový pohľad a pohľad na zoznam úloh ako plánovaÄ projektu.
+ Comment[sl]=Ta vstavek prikazuje projektno naÄrtovanje za KOrganizer (kot prikaz opravil ali meseÄni prikaz). Äe omogoÄite ta vstavek, lahko preklopite na projektni prikaz in si ogledate seznam opravil kot v projektnem prikazu.
+ Comment[sr]=ÐÐ²Ð°Ñ Ð¿ÑикÑÑÑак пÑÑжа пÑиказ планиÑаÑа пÑоÑекÑа за KOrganizer (као меÑеÑни или пÑикази задаÑака). Ðко ÑкÑÑÑиÑе Ð¾Ð²Ð°Ñ Ð¿ÑикÑÑÑак, можеÑе Ñе пÑебаÑиÑи на пÑиказ пÑоÑекÑа и ÑазгледаÑи ÑвоÑÑ Ð»Ð¸ÑÑÑ Ð¿Ð¾Ñлова Ñ Ð¿Ð»Ð°Ð½ÐµÑÑ Ð¿ÑоÑекÑа.
+ Comment[sr at Latn]=Ovaj prikljuÄak pruža prikaz planiranja projekta za KOrganizer (kao meseÄni ili prikazi zadataka). Ako ukljuÄite ovaj prikljuÄak, možete se prebaciti na prikaz projekta i razgledati svoju listu poslova u planeru projekta.
+@@ -93,6 +94,7 @@
+ Comment[tr]=Bu eklenti, KOrganizer için bir proje planı görünümü saÄlar (yapılacaklar ve aylık görünüm gibi). EÄer bu eklentiyi aktif hale getirirseniz, proje görünümüne geçebilir ve yapılacaklar listenizi proje planlayıcısı Åeklinde görüntüleyebilirsiniz.
+ Comment[uk]=Цей вÑÑлок показÑÑ Ð²Ð¸Ð³Ð»Ñд планÑÐ²Ð°Ð½Ð½Ñ Ð¿ÑоекÑÑв Ñ KOrganizer (подÑбно до виглÑдÑв Ð·Ð°Ð²Ð´Ð°Ð½Ñ Ð°Ð±Ð¾ мÑÑÑÑного). ЯкÑо ÑвÑмкнÑÑи Ñей вÑÑлок, Ñо можна пеÑеглÑдаÑи Ð²Ð°Ñ ÑпиÑок Ð·Ð°Ð²Ð´Ð°Ð½Ñ Ñ Ð²Ð¸Ð³Ð»ÑÐ´Ñ Ð¿Ð»Ð°Ð½Ð¾Ð²Ð¸ÐºÐ° пÑоекÑÑв.
+ Comment[zh_CN]=æ¤æä»¶ä¸º KOrganizer æä¾äºé¡¹ç®è§åè§å¾(类似äºå¾
åææè§å¾)ã妿æ¨å¯ç¨äºæ¤æä»¶ï¼æ¨å¯ä»¥å项ç®è§åç¨åºé£æ ·åæ¢å°é¡¹ç®è§å¾å¹¶æ¥çæ¨çå¾
忏
åã
++Comment[zh_TW]=æ¤å¤æç¨å¼æä¾ KOrganizer å°æ¡è¨ç«æª¢è¦ã妿æ¨é忤夿ç¨å¼ï¼æ¨å¯ä»¥åæå°æ¡æª¢è¦èå¾
辦äºé
æ¸
å®ã
+ Type=Service
+ ServiceTypes=KOrganizer/Part
+ X-KDE-KOrganizer-HasSettings=false
+Index: korganizer/plugins/exchange/exchange.desktop
+===================================================================
+--- korganizer/plugins/exchange/exchange.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ korganizer/plugins/exchange/exchange.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -42,6 +42,7 @@
+ Name[tr]=KOrganizer için Microsoft Exchange 2000 Eklentisi
+ Name[uk]=ÐÑÑлок Microsoft Exchange 2000 Ð´Ð»Ñ KOrganizer
+ Name[zh_CN]=KOrganizer ç Microsoft Exchange 2000 æä»¶
++Name[zh_TW]=KOrganizer ç Microsoft Exchange 2000 夿ç¨å¼
+ Comment=This plugin allows korganizer users to work with Microsoft Exchange 2000 groupware servers.
+ Comment[bg]=ÐÑиÑÑавкаÑа ÑлÑжи за вÑÑзка на Korganizer ÑÑÑ ÑÑÑвÑÑа Microsoft Exchange 2000 groupware.
+ Comment[ca]=Aquest endollable permet els usuaris de korganizer treballar amb servidors groupware Microsoft Exchange 2000.
+@@ -69,6 +70,7 @@
+ Comment[pt]=Este 'plugin' permite aos utilizadores do KOrganizer lidarem com servidores de 'groupware' do Microsoft Exchange 2000.
+ Comment[pt_BR]=Esse plugin permite que o KOrganizer conecte-se à servidores groupware Microsoft Exchance 2000
+ Comment[ru]=ÐÑÐ¾Ñ Ð¼Ð¾Ð´ÑÐ»Ñ Ð¿Ð¾Ð·Ð²Ð¾Ð»ÑÐµÑ Ð¿Ð¾Ð»ÑзоваÑелÑм оÑганайзеÑа ÑабоÑаÑÑ Ñ ÑеÑвеÑами ÑовмеÑÑной ÑабоÑÑ Microsoft Exchange 2000.
++Comment[sk]=Tento modul umožnÃ, aby korganizer užÃvatelia pracovali s Microsoft Exchange 2000 groupware servermi.
+ Comment[sl]=Ta vstavke omogoÄa uporabnikom KOrganizerja delo s strežniki Microsoft Exchange 2000.
+ Comment[sr]=ÐÐ²Ð°Ñ Ð¿ÑикÑÑÑак омогÑÑава коÑиÑниÑима KOrganizer-а да Ñаде Ñа Microsoft-овим Exchange 2000 groupware ÑеÑвеÑима.
+ Comment[sr at Latn]=Ovaj prikljuÄak omoguÄava korisnicima KOrganizer-a da rade sa Microsoft-ovim Exchange 2000 groupware serverima.
+@@ -77,6 +79,7 @@
+ Comment[tr]=Bu eklenti KOrganizer kullanıcılarının Microsoft Exchange 2000 sunucuları ile çalıÅabilmelerini saÄlar.
+ Comment[uk]=Цей вÑÑлок дозволÑÑ ÐºÐ¾ÑиÑÑÑваÑам korganizer пÑаÑÑваÑи з ÑеÑвеÑами гÑÑповоÑ ÑобоÑи Microsoft Exchange 2000.
+ Comment[zh_CN]=æ¤æä»¶å
许 KOrganizer ç¨æ·ä¸ Microsoft Exchange 2000 群件æå¡å¨ååå·¥ä½ã
++Comment[zh_TW]=éå夿ç¨å¼å
許 KOrganizer 使ç¨è
è Microsoft Exchange 2000 群çµä¼ºæå¨ä¸èµ·å·¥ä½ã
+ Type=Service
+ ServiceTypes=KOrganizer/Part
+ X-KDE-KOrganizer-HasSettings=false
+Index: korganizer/plugins/printing/whatsnext/whatsnextprint.desktop
+===================================================================
+--- korganizer/plugins/printing/whatsnext/whatsnextprint.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ korganizer/plugins/printing/whatsnext/whatsnextprint.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -27,6 +27,7 @@
+ Name[pt]=Estilo de Impressão "O Que Se Segue"
+ Name[pt_BR]=Estilo de impressão "A Seguir"
+ Name[ru]=СÑÐ¸Ð»Ñ Ð¿ÐµÑаÑи дайджеÑÑа "ЧÑо далÑÑе?"
++Name[sk]=Å týl tlaÄe Äo nasleduje
+ Name[sl]=Slog tiskanja v obliki »Kaj je naslednje«
+ Name[sr]=СÑил ÑÑампе âШÑа Ñе ÑледеÑеâ
+ Name[sr at Latn]=Stil Å¡tampe âÅ ta je sledeÄeâ
+@@ -35,6 +36,7 @@
+ Name[tr]=Sıradaki Nedir Yazdırma Tarzı
+ Name[uk]=СÑÐ¸Ð»Ñ Ð´ÑÑÐºÑ "Що далÑ?"
+ Name[zh_CN]=䏿¥å®ææå°æ ·å¼
++Name[zh_TW]=ãä¸ä¸åæ¯ä»éº¼ãåå°é¢¨æ ¼
+ Comment=This plugin allows you to print out a list of all upcoming events and to-dos.
+ Comment[bg]=ÐÑиÑÑавкаÑа ÑлÑжи за пеÑÐ°Ñ Ð½Ð° бÑдеÑи ÑÑбиÑÐ¸Ñ Ð¸ задаÑи в ÑпиÑÑÑна ÑоÑма.
+ Comment[ca]=Aquest endollable us permet imprimir una llista de tots els esdeveniments i tasques pendents propers.
+@@ -50,7 +52,7 @@
+ Comment[hu]=Ezzel a modullal kinyomtathatók a rövidesen aktuálissá váló feladatok és események.
+ Comment[is]=Ãetta Ãforrit gerir þér kleyft að prenta út lista yfir alla væntanlega atburði og verkþætti.
+ Comment[it]=Questo plugin vi permette di stampare una lista dei prossimi eventi e cose da fare.
+-Comment[ja]=æ¬ãã©ã°ã¤ã³ã«ãããå°æ¥ã®å
¨ã¦ã®ã¤ãã³ãã to-do ã®ãªã¹ããå°å·ã§ããããã«ãªãã¾ãã
++Comment[ja]=æ¬ãã©ã°ã¤ã³ã«ãããå°æ¥ã®ãã¹ã¦ã®ã¤ãã³ãã to-do ã®ãªã¹ããå°å·ã§ããããã«ãªãã¾ãã
+ Comment[km]=áááááá·áá¸âáááá½áâáááâá¢áá»áááá¶áâá²ááâá¢áááâááááá»áááâááááá¸âááâáááá¹áááá·áá¶ááá áá·á áá¶ááá¶áâáááá¼áâáááá¾âááááááááá¶áá
+ Comment[lt]=Å is priedas leidžia spausdinti sÄ
raÅ¡Ä
visų artÄjanÄių įvykių ir darbų.
+ Comment[ms]=Plugin ini membenarkan anda mencetak senarai semua peristiwa dan tugasan mendatang.
+@@ -62,6 +64,7 @@
+ Comment[pt]=Este 'plugin' permite-lhe imprimir uma lista com todos os eventos e itens por-fazer próximos.
+ Comment[pt_BR]=Este plugin permite que você imprima uma lista de todos os eventos e pendências que estão por vir.
+ Comment[ru]=ÐÑÐ¾Ñ Ð¼Ð¾Ð´ÑÐ»Ñ Ð¿Ð¾Ð·Ð²Ð¾Ð»ÑÐµÑ Ð¿ÐµÑаÑаÑÑ ÑпиÑок бÑдÑÑиÑ
ÑобÑÑий и задаÑ.
++Comment[sk]=Tento modul umožnà vytlaÄiÅ¥ zoznam vÅ¡etkých nadchádzajúcich udalostà a úloh.
+ Comment[sl]=Ta vstavek vam omogoÄa natis seznama vseh prihahajoÄih dogodkov in ÄakajoÄih opravil.
+ Comment[sr]=ÐÐ²Ð°Ñ Ð¿ÑикÑÑÑак вам омогÑÑава да одÑÑампаÑе лиÑÑÑ ÑвиÑ
наÑÑÑпаÑÑÑиÑ
догаÑаÑа и поÑлова.
+ Comment[sr at Latn]=Ovaj prikljuÄak vam omoguÄava da odÅ¡tampate listu svih nastupajuÄih dogaÄaja i poslova.
+@@ -70,6 +73,7 @@
+ Comment[tr]=Bu eklenti, sıradaki olayları ve yapılacaklar listesini bir liste biçiminde yazdırmanızı saÄlar.
+ Comment[uk]=Цей вÑÑлок дозволÑÑ Ð´ÑÑкÑваÑи ÑпиÑок вÑÑÑ
майбÑÑнÑÑ
подÑй Ñа завданÑ.
+ Comment[zh_CN]=æ¤æä»¶å
è®¸æ¨æå°ææå³å°å°è¾¾çäºä»¶å代åäºå®ã
++Comment[zh_TW]=æ¤å¤æç¨å¼å
許æ¨å°åºå³å°ç¼ççäºä»¶èå¾
辦äºé
æ¸
å®ã
+ Type=Service
+ ServiceTypes=Calendar/Plugin,KOrganizer/PrintPlugin
+ X-KDE-KOrganizer-HasSettings=false
+Index: korganizer/plugins/printing/journal/journalprint.desktop
+===================================================================
+--- korganizer/plugins/printing/journal/journalprint.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ korganizer/plugins/printing/journal/journalprint.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -27,6 +27,7 @@
+ Name[pt]=Estilo de Impressão em Diário
+ Name[pt_BR]=Estilo de Impressão de Diário
+ Name[ru]=СÑÐ¸Ð»Ñ Ð¿ÐµÑаÑи жÑÑнала
++Name[sk]=Å týl tlaÄe žurnálu
+ Name[sl]=Dnevniški slog tiskanja
+ Name[sr]=ÐневниÑки ÑÑил ÑÑампе
+ Name[sr at Latn]=DnevniÄki stil Å¡tampe
+@@ -35,6 +36,7 @@
+ Name[tr]=Günlük Yazdırma Tarzı
+ Name[uk]=СÑÐ¸Ð»Ñ Ð´ÑÑÐºÑ Ð¶ÑÑналом
+ Name[zh_CN]=æ¥è®°æå°æ ·å¼
++Name[zh_TW]=æ¥èªåå°é¢¨æ ¼
+ Comment=This plugin allows you to print out journal entries (diary entries).
+ Comment[bg]=ÐÑиÑÑавкаÑа ÑлÑжи за пеÑÐ°Ñ Ð½Ð° дневника.
+ Comment[ca]=Aquest endollable us permet imprimir entrades del diari.
+@@ -62,6 +64,7 @@
+ Comment[pt]=Este diário permite-lhe imprimir os itens de diário.
+ Comment[pt_BR]=Esse estilo lhe permite imprimir entradas de diário
+ Comment[ru]=ÐÑÐ¾Ñ Ð¼Ð¾Ð´ÑÐ»Ñ Ð¿Ð¾Ð·Ð²Ð¾Ð»ÑÐµÑ Ð¿ÐµÑаÑаÑÑ Ð¶ÑÑнал в виде дневника.
++Comment[sk]=Tento modul umožnà vytlaÄiÅ¥ položky žurnálu (dennÃkové položky).
+ Comment[sl]=Ta vstavek vam omogoÄa natis vnosov v dnevnik.
+ Comment[sr]=ÐÐ²Ð°Ñ Ð¿ÑикÑÑÑак вам омогÑÑава да одÑÑампаÑе ÑноÑе из дневника.
+ Comment[sr at Latn]=Ovaj prikljuÄak vam omoguÄava da odÅ¡tampate unose iz dnevnika.
+@@ -70,6 +73,7 @@
+ Comment[tr]=Bu eklenti, günlük giriÅlerinizi yazıcıdan çıkartmanızı saÄlar.
+ Comment[uk]=Цей жÑÑнал Ð½Ð°Ð´Ð°Ñ Ð¼Ð¾Ð¶Ð»Ð¸Ð²ÑÑÑÑ Ð´ÑÑкÑваÑи запиÑи жÑÑÐ½Ð°Ð»Ñ (запиÑи Ñоденника).
+ Comment[zh_CN]=æ¤æä»¶å
è®¸æ¨æå°æ¥è®°é¡¹ç®ã
++Comment[zh_TW]=æ¤å¤æç¨å¼è®æ¨å°åºæ¥èªé
ç®ã
+ Type=Service
+ ServiceTypes=Calendar/Plugin,KOrganizer/PrintPlugin
+ X-KDE-KOrganizer-HasSettings=false
+Index: korganizer/plugins/printing/list/listprint.desktop
+===================================================================
+--- korganizer/plugins/printing/list/listprint.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ korganizer/plugins/printing/list/listprint.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -27,6 +27,7 @@
+ Name[pt]=Estilo de Impressão em Lista
+ Name[pt_BR]=Estilo de Impressão em Lista
+ Name[ru]=СÑÐ¸Ð»Ñ Ð¿ÐµÑаÑи ÑпиÑка
++Name[sk]=Å týl tlaÄe zoznamu
+ Name[sl]=Slog tiskanja v obliki list
+ Name[sr]=ÐиÑÑаÑÑÑи ÑÑил ÑÑампе
+ Name[sr at Latn]=ListajuÄi stil Å¡tampe
+@@ -35,6 +36,7 @@
+ Name[tr]=Liste Yazdırma Tarzı
+ Name[uk]=СÑÐ¸Ð»Ñ Ð´ÑÑÐºÑ ÑпиÑком
+ Name[zh_CN]=å表æå°æ ·å¼
++Name[zh_TW]=æ¸
å®åå°é¢¨æ ¼
+ Comment=This plugin allows you to print out events and to-dos in list form.
+ Comment[bg]=ÐÑиÑÑавкаÑа ÑлÑжи за пеÑÐ°Ñ Ð½Ð° ÑÑбиÑиÑÑа и задаÑиÑе в ÑпиÑÑÑна ÑоÑма.
+ Comment[ca]=Aquest endollable permet imprimir esdeveniments i tasques pendents en forma de llista.
+@@ -62,6 +64,7 @@
+ Comment[pt]=Este 'plugin' permite-lhe imprimir os eventos e os itens por-fazer no formato de uma lista.
+ Comment[pt_BR]=Este plugin permite que você imprima eventos e pendências em forma de lista.
+ Comment[ru]=ÐÑÐ¾Ñ Ð¼Ð¾Ð´ÑÐ»Ñ Ð¿Ð¾Ð·Ð²Ð¾Ð»ÑÐµÑ Ð¿ÐµÑаÑаÑÑ ÑпиÑок ÑобÑÑий и задаÑ.
++Comment[sk]=Tento modul umožnà vytlaÄiÅ¥ udalosti a úlohy vo forme zoznamu.
+ Comment[sl]=Ta vstavek vam omogoÄa natis dogodkov in ÄakajoÄih opravil v obliki seznama.
+ Comment[sr]=ÐÐ²Ð°Ñ Ð¿ÑикÑÑÑак вам омогÑÑава да одÑÑампаÑе догаÑаÑе и обавезе Ñ Ð¾Ð±Ð»Ð¸ÐºÑ Ð»Ð¸ÑÑе.
+ Comment[sr at Latn]=Ovaj prikljuÄak vam omoguÄava da odÅ¡tampate dogaÄaje i obaveze u obliku liste.
+@@ -70,6 +73,7 @@
+ Comment[tr]=Bu eklenti, olayları ve yapılacaklar listesini bir liste biçiminde yazdırmanızı saÄlar.
+ Comment[uk]=Цей вÑÑлок дозволÑÑ Ð´ÑÑкÑваÑи подÑÑ Ñ Ð·Ð°Ð²Ð´Ð°Ð½Ð½Ñ Ñ Ð²Ð¸Ð³Ð»ÑÐ´Ñ ÑпиÑкÑ.
+ Comment[zh_CN]=æ¤æä»¶å
许æ¨ä»¥åè¡¨æ ¼å¼æå°äºä»¶åå¾
åäºå®ã
++Comment[zh_TW]=æ¤å¤æç¨å¼å
許æ¨ä»¥æ¸
宿 ¼å¼å°åºäºä»¶èå¾
辦äºé
ã
+ Type=Service
+ ServiceTypes=Calendar/Plugin,KOrganizer/PrintPlugin
+ X-KDE-KOrganizer-HasSettings=false
+Index: korganizer/plugins/timespanview/timespanview.desktop
+===================================================================
+--- korganizer/plugins/timespanview/timespanview.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ korganizer/plugins/timespanview/timespanview.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -27,6 +27,7 @@
+ Name[pt]='Plugin' de Vista de Intervalo de Tempo para o KOrganizer
+ Name[pt_BR]=Plugin de Visualização de PerÃodo de Tempo Para o KOrganizer
+ Name[ru]=ÐиагÑамма ÐанÑа Ð´Ð»Ñ KOrganizer
++Name[sk]=KOrganizer modul pre projektový pohľad
+ Name[sl]=Vstavek za Äasovni prikaz za KOrganizer
+ Name[sr]=ÐÑикÑÑÑак KOrganizer-а за пÑиказ вÑеменÑког ÑаÑпона
+ Name[sr at Latn]=PrikljuÄak KOrganizer-a za prikaz vremenskog raspona
+@@ -35,6 +36,7 @@
+ Name[tr]=KOrganizer için Zaman Dilimi Görünümü Eklentisi
+ Name[uk]=ÐÑÑлок пеÑеглÑдÑ пеÑÑодÑ ÑаÑÑ Ð´Ð»Ñ KOrganizer
+ Name[zh_CN]=KOrganizer çæ¶é´è·¨åº¦æ¥çæä»¶
++Name[zh_TW]=KOrganizer æé檢è¦å¤æç¨å¼
+ Comment=This plugin provides a timespan view for korganizer (like the to-do or month views). If you enable this plugin, you can switch to the timespan view and view your events like in a Gantt diagram.
+ Comment[bg]=ÐÑиÑÑавкаÑа ÑлÑжи за пÑеглед на ÑÑбиÑиÑÑа и задаÑиÑе в зададен пеÑиод Ð¾Ñ Ð²Ñеме.
+ Comment[ca]=Aquest endollable proporciona una vista d'un perÃode temporal per a KOrganizer (com ara les vistes de pendents o mensual). Si habiliteu aquest endollable, podeu canviar a la vista de perÃode temporal i veure els esdeveniments com en un diagrama de Gantt.
+@@ -61,6 +63,7 @@
+ Comment[pt]=Este 'plugin' oferece uma vista de distribuição temporal para o KOrganizer (como as vistas de itens por-fazer ou mensais). Se activar este 'plugin', poderá mudar para a vista de distribuição temporal e ver os seus eventos como num diagrama de Gantt.
+ Comment[pt_BR]=Este plugin fornece uma visão de perÃodo de tempo para o KOrganizer (como a visão de pendências e do mês). Se você ativar este plugin, você pode mudar para a visão de perÃodo de tempo e ver seus eventos como num diagrama de Gantt.
+ Comment[ru]=ÐÑÐ¾Ñ Ð¼Ð¾Ð´ÑÐ»Ñ Ð¿Ð¾ÐºÐ°Ð·ÑÐ²Ð°ÐµÑ Ð´Ð¸Ð°Ð³ÑÐ°Ð¼Ð¼Ñ ÐанÑа Ð´Ð»Ñ Ð¾ÑганайзеÑа KDE. ÐÑли Ð²Ñ Ð¿Ð¾Ð´ÐºÐ»ÑÑиÑе ÑÑÐ¾Ñ Ð¼Ð¾Ð´ÑлÑ, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе поÑмоÑÑеÑÑ Ð²Ð°Ñи ÑобÑÑÐ¸Ñ Ð² виде диагÑÐ°Ð¼Ð¼Ñ ÐанÑа.
++Comment[sk]=Tento modul poskytuje projektový pohľad pre korganizer (ako sú úlohy alebo mesaÄné pohľady). Ak povolÃte tento modul, môžete prepÃnaÅ¥ projektový pohľad a pohľad na udalosti ako je Gantt diagram.
+ Comment[sl]=Ta vstavek ponuja Äasovni prikaz za KOrganizer (kot prikaz opravil ali meseÄni prikaz). Äe omogoÄite ta vstavek, lahko preklopite na Äasovni prikaz in si ogledate dogodke kot v Ganttovem diagramu.
+ Comment[sr]=ÐÐ²Ð°Ñ Ð¿ÑикÑÑÑак пÑÑжа пÑиказ вÑеменÑког ÑаÑпона за KOrganizer (као меÑеÑни или пÑикази поÑлова). Ðко ÑкÑÑÑиÑе Ð¾Ð²Ð°Ñ Ð¿ÑикÑÑÑак, можеÑе Ñе пÑебаÑиÑи на пÑиказ вÑеменÑког ÑаÑпона и ÑазгледаÑи ÑвоÑе догаÑаÑе као Ñ ÐанÑовом диÑагÑамÑ.
+ Comment[sr at Latn]=Ovaj prikljuÄak pruža prikaz vremenskog raspona za KOrganizer (kao meseÄni ili prikazi poslova). Ako ukljuÄite ovaj prikljuÄak, možete se prebaciti na prikaz vremenskog raspona i razgledati svoje dogaÄaje kao u Gantovom dijagramu.
+@@ -69,6 +72,7 @@
+ Comment[tr]=Bu eklenti, KOrganizer için zaman dilimi görünümü saÄlar (yapılacaklar listesi ya da aylık görünüm gibi). EÄer bu eklentiyi aktif hale getirirseniz, zaman dilimi görünümüne geçebilir ve olayları Gantt diyagramı Åeklinde görüntüleyebilirsiniz.
+ Comment[uk]=Цей вÑÑлок показÑÑ Ð²Ð¸Ð³Ð»Ñд дÑагÑами ÐанÑа Ð´Ð»Ñ korganizer (подÑбно до виглÑÐ´Ñ Ð·Ð°Ð²Ð´Ð°Ð½Ñ Ñа мÑÑÑÑного). ЯкÑо ÑвÑмкнÑÑи Ñей вÑÑлок, Ñо можна пеÑеглÑдаÑи ваÑÑ Ð¿Ð¾Ð´ÑÑ Ñ Ð²Ð¸Ð³Ð»ÑÐ´Ñ Ð´ÑагÑами ÐанÑа.
+ Comment[zh_CN]=æ¤æä»¶ä¸º KOrganizer æä¾äºæ¶é´è·¨åº¦è§å¾(类似äºå¾
åææè§å¾)ã妿æ¨å¯ç¨äºæ¤æä»¶ï¼æ¨å¯ä»¥åçç¹å¾ç¨åºé£æ ·åæ¢å°æ¶é´è·¨åº¦è§å¾å¹¶æ¥çæ¨çäºä»¶ã
++Comment[zh_TW]=æ¤å¤æç¨å¼æä¾æéæª¢è¦æ¨¡å¼ã妿æ¨é忤夿ç¨å¼ï¼æ¨å¯ä»¥åææé檢è¦ï¼è®æ¨ä½¿ç¨é¡ä¼¼çç¹åçå形便ª¢è¦äºä»¶ã
+ Type=Service
+ ServiceTypes=KOrganizer/Part
+ X-KDE-KOrganizer-HasSettings=false
+Index: korganizer/plugins/hebrew/hebrew.desktop
+===================================================================
+--- korganizer/plugins/hebrew/hebrew.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ korganizer/plugins/hebrew/hebrew.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -41,6 +41,7 @@
+ Name[tr]=İbrani Takvimi Eklentisi
+ Name[uk]=ÐÑÑлок ÑвÑейÑÑкого календаÑÑ
+ Name[zh_CN]=ç¹å¤ªææ¥åæä»¶
++Name[zh_TW]=ç¶å¤ªè¡äºæå¤æç¨å¼
+ Comment=Shows all dates in korganizer also in the Jewish calendar system.
+ Comment[bg]=ÐÑиÑÑавкаÑа ÑлÑжи за показване на даÑиÑе ÑпоÑед евÑейÑÐºÐ¸Ñ ÐºÐ°Ð»ÐµÐ½Ð´Ð°Ñ.
+ Comment[ca]=Mostra totes les dates a korganizer també en el sistema del calendari jueu.
+@@ -53,10 +54,11 @@
+ Comment[eu]=korganizer-en data guztiak egutegi judutar sisteman ere erakusten ditu.
+ Comment[fi]=Näyttää kaikki päivät KOrganizerissa myös Juutalaisen kalenterijärjestelmän mukaan.
+ Comment[fr]=Affiche toutes les dates de KOrganizer selon le calendrier Juif
++Comment[he]=×צ×× ×ת ×× ×ת×ר×××× ××ר××× ×ת ×× ×××× ××©× × ××¢×ר×
+ Comment[hu]=A KOrganizer dátumait kiÃrja a hagyományos zsidó naptár szerint is.
+ Comment[is]=Sýna alla dagsetningar à KOrganizer sem eru einnig à dagatali gyðinga.
+ Comment[it]=Mostra tutte le date in korganizer secondo il calendario ebraico.
+-Comment[ja]=korganizer ã®å
¨ã¦ã®æ¥ä»ãã¦ãã¤æ¦ã§ã表示ããã
++Comment[ja]=korganizer ã®ãã¹ã¦ã®æ¥ä»ãã¦ãã¤æ¦ã§ã表示ãã¾ãã
+ Comment[km]=áááá á¶áâáá¶áááá·á
ááááâáá¶ááá¢ááâáááá»á korganizer áá
âáááá»áâááááááááâááááá·áá·á Jewish á
+ Comment[lt]=Rodo visas dienas kalendoriuje taip pat ir žydų kalendoriaus sistema.
+ Comment[ms]=Memaparkan semua tarikh dalam korganizer dan juga dalam sistem kalendar Yahudi.
+@@ -68,6 +70,7 @@
+ Comment[pt]=Mostra todas as datas no KOrganizer também no sistema de calendários Judeu.
+ Comment[pt_BR]=Mostra todas as datas no KOrganizer também no sistema de calendário judaico
+ Comment[ru]=ÐоказÑваÑÑ Ð²Ñе даÑÑ Ð¿Ð¾ евÑейÑÐºÐ¾Ð¼Ñ ÐºÐ°Ð»ÐµÐ½Ð´Ð°ÑÑ.
++Comment[sk]=Zobrazà všetky dátumy v korganizer tiež aj židovskom kalendári.
+ Comment[sl]=Prikaže vse datume v KOrganizerju; tudi v židovskem koledarskem sistemu.
+ Comment[sr]=ÐÑиказÑÑе Ñве даÑÑме Ñ KOrganizer-Ñ Ð¸ по ÑевÑеÑÑком календаÑÑком ÑиÑÑемÑ.
+ Comment[sr at Latn]=Prikazuje sve datume u KOrganizer-u i po jevrejskom kalendarskom sistemu.
+@@ -76,6 +79,7 @@
+ Comment[tr]=KOrganizer'da tüm tarihleri İbrani takvimine göre gösterir.
+ Comment[uk]=ÐоказÑÑ Ð²ÑÑ Ð´Ð°Ñи в korganizer Ñакож Ñ Ð² ÑиÑÑÐµÐ¼Ñ ÑвÑейÑÑкого календаÑÑ.
+ Comment[zh_CN]=å¨ KOrganizer 䏿¾ç¤ºç¹å¤ªææ¥åç³»ç»çå
¨é¨æ¥æã
++Comment[zh_TW]=顯示ææç¶å¤ªè¡äºæçæ¥æ
+ Type=Service
+ ServiceTypes=Calendar/Plugin,Calendar/Decoration
+ X-KDE-KOrganizer-HasSettings=true
+Index: korganizer/korganizer_configfreebusy.desktop
+===================================================================
+--- korganizer/korganizer_configfreebusy.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ korganizer/korganizer_configfreebusy.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -54,6 +54,7 @@
+ Name[uk]=ÐÑлÑний/зайнÑÑий ÑаÑ
+ Name[uz]=ÐÑÑ/Ðанд
+ Name[zh_CN]=å¿/é²
++Name[zh_TW]=è¡ç¨è³è¨
+ Comment=KOrganizer Free/Busy Configuration
+ Comment[bg]=ÐаÑÑÑойки на Ñвободно/заеÑо за KOrganizer
+ Comment[bs]=KOrganizer podešavanje za Slobodan/Zauzet
+@@ -95,6 +96,7 @@
+ Comment[tr]=KOrganizer BoÅ/MeÅgul Yapılandırması
+ Comment[uk]=ÐалаÑÑÑÐ²Ð°Ð½Ð½Ñ Ð²ÑлÑного/зайнÑÑого ÑаÑÑ Ð² KOrganizer
+ Comment[zh_CN]=KOrganizer 空é²/å¿ç¢é
ç½®
++Comment[zh_TW]=KOrganizer è¡ç¨è³è¨è¨å®
+ Keywords=korganizer,freebusy,scheduling
+ Keywords[bg]=оÑганизаÑоÑ, Ñвободно, заеÑо, наÑÑÑойки, korganizer, freebusy, scheduling
+ Keywords[bs]=korganizer,freebusy,scheduling,raspored
+Index: korganizer/korganizer.desktop
+===================================================================
+--- korganizer/korganizer.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ korganizer/korganizer.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -19,7 +19,7 @@
+ Comment[fi]=Kalenteri ja ajanhallintaohjelma
+ Comment[fr]=Calendrier et agenda personnel
+ Comment[gl]=Programa de Calendario e Axenda
+-Comment[he]=ת××× ×ת ××× ×©× ×
++Comment[he]=ת××× ××ת ××× ×©× × ×ת×××× ×ש×××ת
+ Comment[hi]=à¤à¥à¤²à¥à¤¨à¥à¤¡à¤° तथा समय-सारणॠपà¥à¤°à¥à¤à¥à¤°à¤¾à¤®
+ Comment[hr]=Kalendar i rokovnik
+ Comment[hu]=HatáridÅnapló és eseményszervezÅ
+@@ -58,7 +58,7 @@
+ Comment[vi]=Chương trình lá»ch và kế hoạch
+ Comment[xh]=Ikhalenda no Dweliso lwenkqubo Yokucwangcisa
+ Comment[zh_CN]=æ¥å忥ç¨å®æç¨åº
+-Comment[zh_TW]=æ¥æèè¡ç¨ç®¡çç¨å¼
++Comment[zh_TW]=è¡äºæèæç¨è»é«
+ Comment[zu]=Ikhalenda kanye Neprogramu Yokugcina isikhathi
+ Exec=korganizer %u
+ Icon=korganizer
+@@ -97,6 +97,7 @@
+ GenericName[fi]=Henkilökohtainen ajanhallintaohjelma
+ GenericName[fr]=Organiseur personnel
+ GenericName[gl]=Organizador Persoal
++GenericName[he]=×× ×× ××× ××ש×
+ GenericName[hi]=निà¤à¥ पà¥à¤°à¤¬à¤à¤§à¤
+ GenericName[hu]=HatáridÅnapló
+ GenericName[is]=Persónuleg skipulagsbók
+@@ -125,6 +126,7 @@
+ GenericName[uk]=ÐеÑÑоналÑний Ñижневик
+ GenericName[uz]=ШаÑ
Ñий оÑганайзеÑ
+ GenericName[zh_CN]=个人æ¥ç¨å®æ
++GenericName[zh_TW]=å人è¡ç¨çµç¹è»é«
+ ServiceTypes=Browser/View,DCOP/Organizer
+ X-KDE-Library=libkorganizerpart
+ X-KDE-StartupNotify=true
+Index: korganizer/dcopcalendar.desktop
+===================================================================
+--- korganizer/dcopcalendar.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ korganizer/dcopcalendar.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -20,6 +20,7 @@
+ Comment[fi]=Kalenteri DCOP-rajapinnalla
+ Comment[fr]=Organiseur avec une interface DCOP
+ Comment[gl]=Organizador con interface DCOP
++Comment[he]=×ר××× ×× ×¢× ××שק DCOP
+ Comment[hi]=डà¥à¤à¥à¤ª à¤à¤à¤à¤°à¤«à¥à¤¸ सहित à¤à¤°à¥à¤à¥à¤¨à¤¾à¤à¤à¤¼à¤°
+ Comment[hu]=HatáridÅnapló DCOP-felülettel
+ Comment[is]=Skipuleggjari með DCOP viðmóti
+@@ -47,3 +48,4 @@
+ Comment[tr]=DCOP arayüzü ile Organizer
+ Comment[uk]=Тижневик з ÑнÑеÑÑейÑом DCOP
+ Comment[zh_CN]=å
·æ DCOP æ¥å£ç PDA
++Comment[zh_TW]=æ DCOP ä»é¢ç Organizer
+Index: korganizer/korganizer_configcolors.desktop
+===================================================================
+--- korganizer/korganizer_configcolors.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ korganizer/korganizer_configcolors.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -33,6 +33,7 @@
+ Name[fr]=Couleurs
+ Name[ga]=Dathanna
+ Name[gl]=Cores
++Name[he]=צ××¢××
+ Name[hi]=रà¤à¤
+ Name[hr]=Boje
+ Name[hu]=SzÃnek
+@@ -71,6 +72,7 @@
+ Name[vi]=MÃ u
+ Name[xh]=Imibala
+ Name[zh_CN]=é¢è²
++Name[zh_TW]=é¡è²
+ Name[zu]=Imibala
+ Comment=KOrganizer Colors Configuration
+ Comment[ar]=إعداد Ø£ÙÙØ§Ù KOrganizer
+@@ -90,6 +92,7 @@
+ Comment[fi]=KOrganizer värien asetukset
+ Comment[fr]=Configuration des couleurs de KOrganizer
+ Comment[gl]=Configuración de Cores de KOrganizer
++Comment[he]=×××ר×ת צ××¢×× ×©× ××ר××× ×ת
+ Comment[hi]=à¤à¥-à¤à¤°à¥à¤à¥à¤¨à¤¾à¤à¤à¤¼à¤° रà¤à¤ à¤à¥à¤¨à¥à¤«à¤¼à¤¿à¤à¤°à¥à¤¶à¤¨
+ Comment[hu]=KOrganizer szÃnbeállÃtások
+ Comment[is]=KOrganizer litastillingar
+@@ -118,6 +121,7 @@
+ Comment[tr]=KOrganizer Renk Yapılandırması
+ Comment[uk]=ÐалаÑÑÑÐ²Ð°Ð½Ð½Ñ ÐºÐ¾Ð»ÑоÑÑв Ñ KOrganizer
+ Comment[zh_CN]=KOrganizer é¢è²é
ç½®
++Comment[zh_TW]=KOrganizer é¡è²è¨å®
+ Keywords=korganizer,colors
+ Keywords[be]=K ÐÑганÑзаÑаÑ,колеÑÑ,korganizer,colors
+ Keywords[bg]=оÑганизаÑоÑ, ÑвеÑове, наÑÑÑойки, korganizer, colors
+@@ -136,6 +140,7 @@
+ Keywords[fr]=KOrganizer,couleurs
+ Keywords[ga]=korganizer,dathanna
+ Keywords[gl]=korganizer,cores
++Keywords[he]=korganizer,colors, ×ר××× ×ת, צ××¢××
+ Keywords[hi]=à¤à¥-à¤à¤°à¥à¤à¥à¤¨à¤¾à¤à¤à¤¼à¤°,रà¤à¤
+ Keywords[hu]=korganizer,szÃnek
+ Keywords[is]=korganizer,litir
+Index: korganizer/korganizer_configdesignerfields.desktop
+===================================================================
+--- korganizer/korganizer_configdesignerfields.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ korganizer/korganizer_configdesignerfields.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -98,6 +98,7 @@
+ Comment[tr]=Ãzel Sayfaları Yapılandır
+ Comment[uk]=ÐалаÑÑÑÐ²Ð°Ð½Ð½Ñ Ð½ÐµÑиповиÑ
ÑÑоÑÑнок
+ Comment[zh_CN]=é
ç½®å®å¶é¡µ
++Comment[zh_TW]=è¨å® Custom Pages
+ Keywords=korganizer, configure, settings, custom fields
+ Keywords[bg]=оÑганизаÑоÑ, наÑÑÑойки, korganizer, configure, settings, custom fields
+ Keywords[ca]=korganizer, configura, opcions, camps a mida
+Index: korganizer/koagendaview.cpp
+===================================================================
+--- korganizer/koagendaview.cpp (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ korganizer/koagendaview.cpp (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -775,15 +775,14 @@
+ dayLayout->addWidget(dayLabel);
+
+ // if a holiday region is selected, show the holiday name
+- if ( KOGlobals::self()->holidays() ) {
+- QString text = KOGlobals::self()->holidays()->shortText( date );
+- if ( !text.isEmpty() ) {
+- // use a KOAlternateLabel so when the text doesn't fit any more a tooltip is used
+- KOAlternateLabel*label = new KOAlternateLabel( text, text, QString::null, mDayLabels );
+- label->setMinimumWidth(1);
+- label->setAlignment(AlignCenter);
+- dayLayout->addWidget(label);
+- }
++ QStringList texts = KOGlobals::self()->holiday( date );
++ QStringList::ConstIterator textit = texts.begin();
++ for ( ; textit != texts.end(); ++textit ) {
++ // use a KOAlternateLabel so when the text doesn't fit any more a tooltip is used
++ KOAlternateLabel*label = new KOAlternateLabel( (*textit), (*textit), QString::null, mDayLabels );
++ label->setMinimumWidth(1);
++ label->setAlignment(AlignCenter);
++ dayLayout->addWidget(label);
+ }
+
+ #ifndef KORG_NOPLUGINS
+Index: korganizer/korganizer_configgroupautomation.desktop
+===================================================================
+--- korganizer/korganizer_configgroupautomation.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ korganizer/korganizer_configgroupautomation.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -55,6 +55,7 @@
+ Name[tr]=Grup Otomasyonu
+ Name[uk]=ÐвÑомаÑизаÑÑÑ Ð³ÑÑп
+ Name[zh_CN]=ç»èªå¨å
++Name[zh_TW]=群çµèªåå
+ Comment=KOrganizer Group Automation Configuration
+ Comment[bg]=ÐаÑÑÑойки на оÑганизаÑÐ¸Ñ Ð·Ð° KOrganizer
+ Comment[bs]=KOrganizer podešavanje automatizacije grupe
+@@ -97,6 +98,7 @@
+ Comment[tr]=KOrganizer Grup Otomasyon Yapılandırması
+ Comment[uk]=ÐалаÑÑÑÐ²Ð°Ð½Ð½Ñ Ð°Ð²ÑомаÑизаÑÑÑ Ð³ÑÑп Ñ KOrganizer
+ Comment[zh_CN]=KOrganizer ç»èªå¨åé
ç½®
++Comment[zh_TW]=KOrganizer 群çµèªååè¨å®
+ Keywords=korganizer,group,automation
+ Keywords[bg]=оÑганизаÑоÑ, оÑганизаÑиÑ, наÑÑÑойки, korganizer, group, automation
+ Keywords[bs]=korganizer,group,automation,automatizacija,grupa,grupe
+Index: korganizer/korganizer_configviews.desktop
+===================================================================
+--- korganizer/korganizer_configviews.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ korganizer/korganizer_configviews.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -31,6 +31,7 @@
+ Name[fr]=Vues
+ Name[ga]=Amhairc
+ Name[gl]=Vistas
++Name[he]=תצ×××ת
+ Name[hi]=दà¥à¤¶à¥à¤¯
+ Name[hu]=Nézetek
+ Name[is]=Sýn
+@@ -60,6 +61,7 @@
+ Name[uk]=ÐеÑеглÑди
+ Name[uz]=ÐÑÑиниÑлаÑ
+ Name[zh_CN]=è§å¾
++Name[zh_TW]=檢è¦
+ Comment=KOrganizer View Configuration
+ Comment[be]=ÐанÑÑгÑÑаÑÑÑ Ð²ÑглÑÐ´Ñ "K ÐÑганÑзаÑаÑа"
+ Comment[bg]=ÐаÑÑÑойки на изгледи за KOrganizer
+@@ -102,6 +104,7 @@
+ Comment[tr]=KOrganizer Görünüm Yapılandırması
+ Comment[uk]=ÐалаÑÑÑÐ²Ð°Ð½Ð½Ñ Ð¿ÐµÑеглÑдÑв Ñ KOrganizer
+ Comment[zh_CN]=KOrganizer è§å¾é
ç½®
++Comment[zh_TW]=KOrganizer 檢è¦è¨å®
+ Keywords=korganizer,view
+ Keywords[be]=K ÐÑганÑзаÑаÑ,вÑглÑд,korganizer,view
+ Keywords[bg]=оÑганизаÑоÑ, изглед, изгледи, наÑÑÑойки, korganizer, view
+Index: korganizer/korganizer-import.desktop
+===================================================================
+--- korganizer/korganizer-import.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ korganizer/korganizer-import.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -23,6 +23,7 @@
+ Name[fi]=Tuo kalenteri
+ Name[fr]=Importer un calendrier
+ Name[ga]=Iompórtáil Féilire
++Name[he]=××××× ××× ×©× ×
+ Name[hu]=Naptár importálása
+ Name[is]=Flytja inn dagatal
+ Name[it]=Importa calendario
+@@ -38,6 +39,7 @@
+ Name[pt]=Importar Calendário
+ Name[pt_BR]=Importar Calendário
+ Name[ru]=ÐмпоÑÑ ÐºÐ°Ð»ÐµÐ½Ð´Ð°ÑÑ
++Name[sk]=Import kalendára
+ Name[sl]=Uvozi koledar
+ Name[sr]=Увези календаÑ
+ Name[sr at Latn]=Uvezi kalendar
+@@ -46,6 +48,7 @@
+ Name[tr]=Takvim Aktar
+ Name[uk]=ÐмпоÑÑ ÐºÐ°Ð»ÐµÐ½Ð´Ð°ÑÑ
+ Name[zh_CN]=导å
¥æ¥å
++Name[zh_TW]=å¯å
¥è¡äºæ
+ ServiceTypes=Browser/View,DCOP/Organizer
+ X-KDE-Library=libkorganizerpart
+ X-KDE-StartupNotify=true
+Index: korganizer/koeditoralarms.cpp
+===================================================================
+--- korganizer/koeditoralarms.cpp (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ korganizer/koeditoralarms.cpp (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -137,7 +137,7 @@
+
+ KOEditorAlarms::KOEditorAlarms( KCal::Alarm::List *alarms, QWidget *parent,
+ const char *name )
+- : KDialogBase( parent, name, true, i18n("Edit Reminders"), Ok | Apply | Cancel ), mAlarms( alarms )
++ : KDialogBase( parent, name, true, i18n("Edit Reminders"), Ok | Apply | Cancel ), mAlarms( alarms ),mCurrentItem(0L)
+ {
+ setMainWidget( mWidget = new KOEditorAlarms_base( this ) );
+ mWidget->mAlarmList->setColumnWidthMode( 0, QListView::Maximum );
+Index: korganizer/korganizer_configmain.desktop
+===================================================================
+--- korganizer/korganizer_configmain.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ korganizer/korganizer_configmain.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -29,6 +29,7 @@
+ Name[fr]=Personnel
+ Name[ga]=Pearsanta
+ Name[gl]=Persoal
++Name[he]=××ש×
+ Name[hi]=निà¤à¥
+ Name[hu]=AlapbeállÃtások
+ Name[is]=Persónulegt
+@@ -57,6 +58,7 @@
+ Name[uk]=ÐÑобиÑÑÑ
+ Name[uz]=ШаÑ
Ñий
+ Name[zh_CN]=个人
++Name[zh_TW]=å人
+ Comment=KOrganizer Main Configuration
+ Comment[bg]=Ðлавни наÑÑÑойки за KOrganizer
+ Comment[br]=Kefluniadur kentañ KOrganizer
+@@ -74,6 +76,7 @@
+ Comment[fr]=Configuration principale de KOrganizer
+ Comment[ga]=PrÃomhchumraÃocht KOrganizer
+ Comment[gl]=Configuración Principal de KOrganizer
++Comment[he]=תצ××¨× ×¨×ש×ת ×©× ××ר××× ×ת
+ Comment[hi]=à¤à¥-à¤à¤°à¥à¤à¥à¤¨à¤¾à¤à¤à¤¼à¤° मà¥à¤à¥à¤¯ à¤à¥à¤¨à¥à¤«à¤¼à¤¿à¤à¤°à¥à¤¶à¤¨
+ Comment[hu]=A KOrganizer alapbeállÃtásai
+ Comment[is]=Aðalstillingar KOrganizer
+@@ -101,6 +104,7 @@
+ Comment[tr]=KOrganizer Temel Yapılandırması
+ Comment[uk]=ÐалаÑÑÑÐ²Ð°Ð½Ð½Ñ Ð¾ÑобиÑÑиÑ
даниÑ
Ñ KOrganizer
+ Comment[zh_CN]=KOrganizer 主è¦é
ç½®
++Comment[zh_TW]=KOrganizer 主è¨å®
+ Keywords=korganizer,main,personal
+ Keywords[bg]=оÑганизаÑоÑ, главни, пеÑÑонални, наÑÑÑойки, korganizer, main, personal
+ Keywords[bs]=korganizer,main,personal,liÄno
+@@ -116,6 +120,7 @@
+ Keywords[fi]=korganizer,pää,henkilökohtainen
+ Keywords[fr]=KOrganizer,principal,personnel
+ Keywords[gl]=korganizer,principal,persoal
++Keywords[he]=korganizer,main,personal,×ר××× ×ת,תצ×ר×,×××ר×,×××ר×ת
+ Keywords[hi]=à¤à¥-à¤à¤°à¥à¤à¥à¤¨à¤¾à¤à¤à¤¼à¤°,मà¥à¤à¥à¤¯,निà¤à¥
+ Keywords[hu]=korganizer,alapbeállÃtások,személyes
+ Keywords[is]=korganizer,aðal,persónulegt
+Index: konsolekalendar/konsolekalendar.desktop
+===================================================================
+--- konsolekalendar/konsolekalendar.desktop (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ konsolekalendar/konsolekalendar.desktop (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -5,7 +5,7 @@
+ Name[de]=Konsolen-Kalender
+ Name[hi]=à¤à¤à¤¸à¥à¤²-à¤à¥à¤²à¥à¤à¤¡à¤°
+ Name[hu]=Konsole-naptár
+-Name[ja]=ã³ã³ã½ã¼ã«ã«ã¬ã³ã
++Name[ja]=ã³ã³ã½ã¼ã«ã«ã¬ã³ãã¼
+ Name[ms]=Kalendar Konsole
+ Name[nb]=KonsoleKalender
+ Name[nds]=Konsole-Kalenner
+Index: konsolekalendar/main.cpp
+===================================================================
+--- konsolekalendar/main.cpp (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ konsolekalendar/main.cpp (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -681,9 +681,8 @@
+ << endl;
+
+ if ( remote ) {
+- //TODO: uncomment after 3.5 string freeze
+- //cout << i18n( "Attempting to create a remote file %1" ).
+- // arg( variables.getCalendarFile() ).local8Bit() << endl;
++ cout << i18n( "Attempting to create a remote file %1" ).
++ arg( variables.getCalendarFile() ).local8Bit() << endl;
+ return 1;
+ } else {
+ if ( exists ) {
+Index: mimelib/dwstring.cpp
+===================================================================
+--- mimelib/dwstring.cpp (.../tags/KDE/3.5.3/kdepim) (revision 555847)
++++ mimelib/dwstring.cpp (.../branches/KDE/3.5/kdepim) (revision 555847)
+@@ -227,6 +227,7 @@
+ static int pagesize = -1;
+ if (pagesize < 0)
+ pagesize = getpagesize();
++ assert(pagesize != 0);
+ int tell = ftell(aFile);
+ mPageMod = tell % pagesize;
+ mSize = aSize;
+
+Property changes on: .
+___________________________________________________________________
+Name: svn:externals
+ + admin https://svn.kde.org/home/kde/branches/KDE/3.5/kde-common/admin
+
+
Added: trunk/packages/kdepim/debian/patches/02_fix_admin_cvs.diff
===================================================================
--- trunk/packages/kdepim/debian/patches/02_fix_admin_cvs.diff 2006-08-07 22:42:46 UTC (rev 4307)
+++ trunk/packages/kdepim/debian/patches/02_fix_admin_cvs.diff 2006-08-07 22:47:01 UTC (rev 4308)
@@ -0,0 +1,20 @@
+--- admin/cvs.sh 2006/05/23 10:01:43 543983
++++ admin/cvs.sh 2006/06/28 19:26:30 555946
+@@ -32,7 +32,7 @@
+ required_autoconf_version="2.53 or newer"
+ AUTOCONF_VERSION=`$AUTOCONF --version | head -n 1`
+ case $AUTOCONF_VERSION in
+- Autoconf*2.5* | autoconf*2.5* ) : ;;
++ Autoconf*2.5* | autoconf*2.5* | autoconf*2.6* ) : ;;
+ "" )
+ echo "*** AUTOCONF NOT FOUND!."
+ echo "*** KDE requires autoconf $required_autoconf_version"
+@@ -47,7 +47,7 @@
+
+ AUTOHEADER_VERSION=`$AUTOHEADER --version | head -n 1`
+ case $AUTOHEADER_VERSION in
+- Autoconf*2.5* | autoheader*2.5* ) : ;;
++ Autoconf*2.5* | autoheader*2.5* | autoheader*2.6* ) : ;;
+ "" )
+ echo "*** AUTOHEADER NOT FOUND!."
+ echo "*** KDE requires autoheader $required_autoconf_version"
Added: trunk/packages/kdepim/debian/patches/14_kmail_filter_icons.diff
===================================================================
--- trunk/packages/kdepim/debian/patches/14_kmail_filter_icons.diff 2006-08-07 22:42:46 UTC (rev 4307)
+++ trunk/packages/kdepim/debian/patches/14_kmail_filter_icons.diff 2006-08-07 22:47:01 UTC (rev 4308)
@@ -0,0 +1,64 @@
+diff -urN kdepim-3.5.3.old/kmail/kmail-3.5-filter-icons.pl kdepim-3.5.3/kmail/kmail-3.5-filter-icons.pl
+--- kdepim-3.5.3.old/kmail/kmail-3.5-filter-icons.pl 1969-12-31 19:00:00.000000000 -0500
++++ kdepim-3.5.3/kmail/kmail-3.5-filter-icons.pl 2006-06-28 11:53:16.000000000 -0400
+@@ -0,0 +1,22 @@
++#!/usr/bin/perl -w
++
++use strict;
++
++# This script updates some configuration keys
++
++# read the whole config file
++my $currentGroup = "";
++my %configFile;
++while ( <> ) {
++ chomp; # eat the trailing '\n'
++ next if ( /^$/ ); # skip empty lines
++ next if ( /^\#/ ); # skip comments
++ if ( /^\[/ ) { # group begin
++ $currentGroup = $_;
++ next;
++ } elsif ( $currentGroup =~ /^\[Filter #[0-9]+\]$/ && /^Icon=/ ) {
++ my ($key,$value) = split /=/;
++ print "# DELETE $currentGroup$key\n${currentGroup}\nIcon=mail_spam\n" if $value eq "mark_as_spam";
++ print "# DELETE $currentGroup$key\n${currentGroup}\nIcon=mail_ham\n" if $value eq "mark_as_ham";
++ }
++}
+diff -urN kdepim-3.5.3.old/kmail/kmail.upd kdepim-3.5.3/kmail/kmail.upd
+--- kdepim-3.5.3.old/kmail/kmail.upd 2006-06-28 11:44:36.000000000 -0400
++++ kdepim-3.5.3/kmail/kmail.upd 2006-06-28 11:54:13.000000000 -0400
+@@ -158,6 +158,10 @@
+ Id=3.4.1
+ File=kmailrc
+ Script=kmail-3.4.1-update-status-filters.pl,perl
++# Update icon names for spam/ham filters
++Id=3.5-filter-icons
++File=kmailrc
++Script=kmail-3.5-filter-icons.pl,perl
+ # Remove the stored size so that we get a reasonable default now that we have 2 columns in the folder selection dialog
+ Id=3.5.4
+ File=kmailrc
+diff -urN kdepim-3.5.3.old/kmail/kmstartup.cpp kdepim-3.5.3/kmail/kmstartup.cpp
+--- kdepim-3.5.3.old/kmail/kmstartup.cpp 2006-06-28 11:44:36.000000000 -0400
++++ kdepim-3.5.3/kmail/kmstartup.cpp 2006-06-28 11:54:44.000000000 -0400
+@@ -114,6 +114,7 @@
+ "3.4a",
+ "3.4b",
+ "3.4.1",
++ "3.5-filter-icons",
+ "3.5.4"
+ };
+ static const int numUpdates = sizeof updates / sizeof *updates;
+diff -urN kdepim-3.5.3.old/kmail/Makefile.am kdepim-3.5.3/kmail/Makefile.am
+--- kdepim-3.5.3.old/kmail/Makefile.am 2006-06-28 11:44:37.000000000 -0400
++++ kdepim-3.5.3/kmail/Makefile.am 2006-06-28 11:55:21.000000000 -0400
+@@ -175,7 +175,8 @@
+ kmail-3.3-misc.pl \
+ kmail-3.3b1-misc.pl \
+ kmail-3.4-misc.pl \
+- kmail-3.4.1-update-status-filters.pl
++ kmail-3.4.1-update-status-filters.pl \
++ kmail-3.5-filter-icons.pl
+
+ confdir = $(kde_confdir)
+ conf_DATA = kmail.antispamrc kmail.antivirusrc
Added: trunk/packages/kdepim/debian/patches/15_groupwise_alpha.diff
===================================================================
--- trunk/packages/kdepim/debian/patches/15_groupwise_alpha.diff 2006-08-07 22:42:46 UTC (rev 4307)
+++ trunk/packages/kdepim/debian/patches/15_groupwise_alpha.diff 2006-08-07 22:47:01 UTC (rev 4308)
@@ -0,0 +1,12 @@
+diff -urN kdepim-3.5.3.old/kresources/groupwise/soap/stdsoap2.h kdepim-3.5.3/kresources/groupwise/soap/stdsoap2.h
+--- kdepim-3.5.3.old/kresources/groupwise/soap/stdsoap2.h 2006-05-22 14:10:45.000000000 -0400
++++ kdepim-3.5.3/kresources/groupwise/soap/stdsoap2.h 2006-07-01 11:20:04.000000000 -0400
+@@ -170,7 +170,7 @@
+ # endif
+ #endif
+
+-#ifdef __alpha
++#ifdef __osf__
+ # ifndef TRU64
+ # define TRU64
+ # endif
Added: trunk/packages/kdepim/debian/po/cs.po
===================================================================
--- trunk/packages/kdepim/debian/po/cs.po 2006-08-07 22:42:46 UTC (rev 4307)
+++ trunk/packages/kdepim/debian/po/cs.po 2006-08-07 22:47:01 UTC (rev 4308)
@@ -0,0 +1,68 @@
+#
+# Translators, if you are not familiar with the PO format, gettext
+# documentation is worth reading, especially sections dedicated to
+# this format, e.g. by running:
+# info -n '(gettext)PO Files'
+# info -n '(gettext)Header Entry'
+#
+# Some information specific to po-debconf are available at
+# /usr/share/doc/po-debconf/README-trans
+# or http://www.debian.org/intl/l10n/po-debconf/README-trans
+#
+# Developers do not need to manually edit POT or PO files.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: kdepim\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2004-04-26 22:44-0500\n"
+"PO-Revision-Date: 2005-01-09 10:31+0100\n"
+"Last-Translator: Miroslav Kure <kurem at debian.cz>\n"
+"Language-Team: Czech <provoz at debian.cz>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-2\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. Type: select
+#. choices
+#: ../kpilot.templates:3
+msgid "None, ttyS0, ttyS1, ttyS2, ttyS3, ircomm0, ttyUSB0, ttyUSB1"
+msgstr "¾ádný, ttyS0, ttyS1, ttyS2, ttyS3, ircomm0, ttyUSB0, ttyUSB1"
+
+#. Type: select
+#. description
+#: ../kpilot.templates:4
+msgid "Which communication port to use with the Palm?"
+msgstr "Který port pou¾ít pro komunikaci s Palmem?"
+
+#. Type: select
+#. description
+#: ../kpilot.templates:4
+msgid ""
+"A symbolic file /dev/pilot may be created to the port use to talk to the "
+"Palm."
+msgstr ""
+"Na zvolený port mù¾e být vytvoøen symbolický odkaz /dev/pilot."
+
+#. Type: select
+#. description
+#: ../kpilot.templates:4
+msgid ""
+"ttyS? are the four serial ports, ircomm0 is the IrDA (infra red) port, "
+"ttyUSB? are the USB ports."
+msgstr ""
+"ttyS? jsou ètyøi sériové porty, ircomm0 je IrDA (infraèervený) port, "
+"ttyUSB? jsou USB porty."
+
+#. Type: select
+#. description
+#: ../kpilot.templates:4
+msgid ""
+"To ease the use of the Palm connected to the port its access rights will be "
+"lowered to allow access to any user. If it is a security problem for you, "
+"select \"None\" and manage the link and its access rights yourself."
+msgstr ""
+"Abychom zjednodu¹ili pou¾ívání pøipojeného Palmu, budou na daném portu "
+"sní¾ena práva tak, aby povolila pøístup ka¾dému u¾ivateli. Pokud to pro "
+"vás pøedstavuje bezpeènostní problém, vyberte \"¾ádný\" a spravujte odkaz "
+"a jeho práva ruènì."
Added: trunk/packages/kdepim/debian/po/eu.po
===================================================================
--- trunk/packages/kdepim/debian/po/eu.po 2006-08-07 22:42:46 UTC (rev 4307)
+++ trunk/packages/kdepim/debian/po/eu.po 2006-08-07 22:47:01 UTC (rev 4308)
@@ -0,0 +1,55 @@
+#
+# Translators, if you are not familiar with the PO format, gettext
+# documentation is worth reading, especially sections dedicated to
+# this format, e.g. by running:
+# info -n '(gettext)PO Files'
+# info -n '(gettext)Header Entry'
+#
+# Some information specific to po-debconf are available at
+# /usr/share/doc/po-debconf/README-trans
+# or http://www.debian.org/intl/l10n/po-debconf/README-trans
+#
+# Developers do not need to manually edit POT or PO files.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: kdepim_4:3.5.2-1\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2004-04-26 22:44-0500\n"
+"PO-Revision-Date: 2006-06-21 12:44+0200\n"
+"Last-Translator: Piarres Beobide <pi at beobide.net>\n"
+"Language-Team: Librezale <Librezale at librezale.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Pootle 0.9\n"
+
+#. Type: select
+#. choices
+#: ../kpilot.templates:3
+msgid "None, ttyS0, ttyS1, ttyS2, ttyS3, ircomm0, ttyUSB0, ttyUSB1"
+msgstr "Batez, ttyS0, ttyS1, ttyS2, ttyS3, ircomm0, ttyUSB0, ttyUSB1"
+
+#. Type: select
+#. description
+#: ../kpilot.templates:4
+msgid "Which communication port to use with the Palm?"
+msgstr "Palm-arekin harremanetarako zein komunikazio ataka erabiliko duzu?"
+
+#. Type: select
+#. description
+#: ../kpilot.templates:4
+msgid "A symbolic file /dev/pilot may be created to the port use to talk to the Palm."
+msgstr "Palm-arekin harremanetarako erabiliko den atakara /dev/pilot lotura sinbolikoa sortuko da."
+
+#. Type: select
+#. description
+#: ../kpilot.templates:4
+msgid "ttyS? are the four serial ports, ircomm0 is the IrDA (infra red) port, ttyUSB? are the USB ports."
+msgstr "ttyS? lau ataka serialak dira, ircomm0 IrDA (infra gorri) ataka da, ttyUSB? USB atakak dira."
+
+#. Type: select
+#. description
+#: ../kpilot.templates:4
+msgid "To ease the use of the Palm connected to the port its access rights will be lowered to allow access to any user. If it is a security problem for you, select \"None\" and manage the link and its access rights yourself."
+msgstr "Palm erabilera errazteko konektaturik dagoen atakaren baimenak edozeinek erabili ahal izateko konfiguratuko dira. Hau zuretzat segurtasun arazo bat izan badaiteke \"Batez\" aukeratu eta lotura baimenak eskuz ezarri."
Added: trunk/packages/kdepim/debian/po/gl.po
===================================================================
--- trunk/packages/kdepim/debian/po/gl.po 2006-08-07 22:42:46 UTC (rev 4307)
+++ trunk/packages/kdepim/debian/po/gl.po 2006-08-07 22:47:01 UTC (rev 4308)
@@ -0,0 +1,69 @@
+#
+# Translators, if you are not familiar with the PO format, gettext
+# documentation is worth reading, especially sections dedicated to
+# this format, e.g. by running:
+# info -n '(gettext)PO Files'
+# info -n '(gettext)Header Entry'
+#
+# Some information specific to po-debconf are available at
+# /usr/share/doc/po-debconf/README-trans
+# or http://www.debian.org/intl/l10n/po-debconf/README-trans
+#
+# Developers do not need to manually edit POT or PO files.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: kdepim\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2004-04-26 22:44-0500\n"
+"PO-Revision-Date: 2006-04-07 09:59+0200\n"
+"Last-Translator: Jacobo Tarrio <jtarrio at debian.org>\n"
+"Language-Team: Galician <trasno at ceu.fi.udc.es>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. Type: select
+#. choices
+#: ../kpilot.templates:3
+msgid "None, ttyS0, ttyS1, ttyS2, ttyS3, ircomm0, ttyUSB0, ttyUSB1"
+msgstr "Ningún, ttyS0, ttyS1, ttyS2, ttyS3, ircomm0, ttyUSB0, ttyUSB1"
+
+#. Type: select
+#. description
+#: ../kpilot.templates:4
+msgid "Which communication port to use with the Palm?"
+msgstr "¿Que porto de comunicación quere empregar co Palm?"
+
+#. Type: select
+#. description
+#: ../kpilot.templates:4
+msgid ""
+"A symbolic file /dev/pilot may be created to the port use to talk to the "
+"Palm."
+msgstr ""
+"Pódese crear unha ligazón simbólica /dev/pilot ao porto que se emprega para "
+"falar co Palm."
+
+#. Type: select
+#. description
+#: ../kpilot.templates:4
+msgid ""
+"ttyS? are the four serial ports, ircomm0 is the IrDA (infra red) port, "
+"ttyUSB? are the USB ports."
+msgstr ""
+"ttyS? son os catro portos serie, ircomm0 é o porto IrDA (infravermello), "
+"ttyUSB? son os portos USB."
+
+#. Type: select
+#. description
+#: ../kpilot.templates:4
+msgid ""
+"To ease the use of the Palm connected to the port its access rights will be "
+"lowered to allow access to any user. If it is a security problem for you, "
+"select \"None\" and manage the link and its access rights yourself."
+msgstr ""
+"Para facilitar o emprego do Palm conectado ao porto hanse reducir os seus "
+"dereitos de acceso para permitir acceso a calquera usuario. Se é un problema "
+"de seguridade, escolla \"Ningún\" e xestione vostede a ligazón e os dereitos "
+"de acceso."
Added: trunk/packages/kdepim/debian/po/lt.po
===================================================================
--- trunk/packages/kdepim/debian/po/lt.po 2006-08-07 22:42:46 UTC (rev 4307)
+++ trunk/packages/kdepim/debian/po/lt.po 2006-08-07 22:47:01 UTC (rev 4308)
@@ -0,0 +1,71 @@
+# translation of kdepim_4:3.5.2-1_templates.po to Lithuanian
+#
+# Translators, if you are not familiar with the PO format, gettext
+# documentation is worth reading, especially sections dedicated to
+# this format, e.g. by running:
+# info -n '(gettext)PO Files'
+# info -n '(gettext)Header Entry'
+# Some information specific to po-debconf are available at
+# /usr/share/doc/po-debconf/README-trans
+# or http://www.debian.org/intl/l10n/po-debconf/README-trans#
+# Developers do not need to manually edit POT or PO files.
+#
+# Gintautas Miliauskas <gintas at akl.lt>, 2006.
+msgid ""
+msgstr ""
+"Project-Id-Version: kdepim_4:3.5.2-1_templates\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2004-04-26 22:44-0500\n"
+"PO-Revision-Date: 2006-06-19 16:40+0300\n"
+"Last-Translator: Gintautas Miliauskas <gintas at akl.lt>\n"
+"Language-Team: Lithuanian <komp_lt at konferencijos.lt>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.2\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"(n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+#. Type: select
+#. choices
+#: ../kpilot.templates:3
+msgid "None, ttyS0, ttyS1, ttyS2, ttyS3, ircomm0, ttyUSB0, ttyUSB1"
+msgstr "Joks, ttyS0, ttyS1, ttyS2, ttyS3, ircomm0, ttyUSB0, ttyUSB1"
+
+#. Type: select
+#. description
+#: ../kpilot.templates:4
+msgid "Which communication port to use with the Palm?"
+msgstr "Kurį komunikacijos prievadÄ
su Palm įrenginiu naudoti?"
+
+#. Type: select
+#. description
+#: ../kpilot.templates:4
+msgid ""
+"A symbolic file /dev/pilot may be created to the port use to talk to the "
+"Palm."
+msgstr ""
+"Gali bÅ«ti sukurta simbolinÄ nuoroda /dev/pilot bendravimui su Palm "
+"įrenginiu."
+
+#. Type: select
+#. description
+#: ../kpilot.templates:4
+msgid ""
+"ttyS? are the four serial ports, ircomm0 is the IrDA (infra red) port, "
+"ttyUSB? are the USB ports."
+msgstr ""
+"ttyS? - keturi nuoseklieji prievadai, ircomm0 - IrDA (infraraudonųjų "
+"spindulių) prievadas, ttyUSB? - USB prievadai."
+
+#. Type: select
+#. description
+#: ../kpilot.templates:4
+msgid ""
+"To ease the use of the Palm connected to the port its access rights will be "
+"lowered to allow access to any user. If it is a security problem for you, "
+"select \"None\" and manage the link and its access rights yourself."
+msgstr ""
+"Kad bÅ«tų lengviau naudotis Palm įrenginiu, atitinkamo prievado teisÄs "
+"bus pakeistos, kad visi naudotojai galÄtų juo naudotis. Jei tai "
+"nepriimtina, pasirinkite \"Joks\" ir patys nustatykite jungties teises."
Added: trunk/packages/kdepim/debian/po/ru.po
===================================================================
--- trunk/packages/kdepim/debian/po/ru.po 2006-08-07 22:42:46 UTC (rev 4307)
+++ trunk/packages/kdepim/debian/po/ru.po 2006-08-07 22:47:01 UTC (rev 4308)
@@ -0,0 +1,67 @@
+# translation of kdepim_4:3.5.2-1_ru.po to Russian
+#
+# Translators, if you are not familiar with the PO format, gettext
+# documentation is worth reading, especially sections dedicated to
+# this format, e.g. by running:
+# info -n '(gettext)PO Files'
+# info -n '(gettext)Header Entry'
+# Some information specific to po-debconf are available at
+# /usr/share/doc/po-debconf/README-trans
+# or http://www.debian.org/intl/l10n/po-debconf/README-trans#
+# Developers do not need to manually edit POT or PO files.
+# Yuriy Talakan' <yt at amur.elektra.ru>, 2006.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: kdepim_4:3.5.2-1_ru\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2004-04-26 22:44-0500\n"
+"PO-Revision-Date: 2006-05-14 21:59+1000\n"
+"Last-Translator: Yuriy Talakan' <yt at amur.elektra.ru>\n"
+"Language-Team: Russian <debian-l10n-russian at lists.debian.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.9.1\n"
+
+#. Type: select
+#. choices
+#: ../kpilot.templates:3
+msgid "None, ttyS0, ttyS1, ttyS2, ttyS3, ircomm0, ttyUSB0, ttyUSB1"
+msgstr "ÐеÑ, ttyS0, ttyS1, ttyS2, ttyS3, ircomm0, ttyUSB0, ttyUSB1"
+
+#. Type: select
+#. description
+#: ../kpilot.templates:4
+msgid "Which communication port to use with the Palm?"
+msgstr "Ðакой коммÑникаÑионнÑй поÑÑ Ð¸ÑполÑзÑеÑÑÑ Palm?"
+
+#. Type: select
+#. description
+#: ../kpilot.templates:4
+msgid ""
+"A symbolic file /dev/pilot may be created to the port use to talk to the "
+"Palm."
+msgstr "Ðожно ÑоздаÑÑ ÑимволиÑеÑкÑÑ ÑÑÑÐ»ÐºÑ /dev/pilot на поÑÑ, иÑполÑзÑемÑй Ð´Ð»Ñ Ð¾Ð±ÑÐµÐ½Ð¸Ñ Ñ Palm."
+
+#. Type: select
+#. description
+#: ../kpilot.templates:4
+msgid ""
+"ttyS? are the four serial ports, ircomm0 is the IrDA (infra red) port, "
+"ttyUSB? are the USB ports."
+msgstr ""
+"ttyS? ÑÑо ÑеÑÑÑе поÑледоваÑелÑнÑÑ
поÑÑа, ircomm0 ÑÑо IrDA (инÑÑакÑаÑнÑй) поÑÑ, "
+"ttyUSB? ÑÑо поÑÑÑ USB."
+
+#. Type: select
+#. description
+#: ../kpilot.templates:4
+msgid ""
+"To ease the use of the Palm connected to the port its access rights will be "
+"lowered to allow access to any user. If it is a security problem for you, "
+"select \"None\" and manage the link and its access rights yourself."
+msgstr ""
+"ÐÐ»Ñ Ð¾Ð±Ð»ÐµÐ³ÑÐµÐ½Ð¸Ñ ÑабоÑÑ Ñ Ð¿Ð¾Ð´ÐºÐ»ÑÑеннÑм Palm, пÑава доÑÑÑпа к поÑÑÑ Ð±ÑдÑÑ Ð¿Ð¾Ð½Ð¸Ð¶ÐµÐ½Ñ, ÑÑÐ¾Ð±Ñ Ð¿Ð¾Ð·Ð²Ð¾Ð»Ð¸ÑÑ Ð´Ð¾ÑÑÑп лÑÐ±Ð¾Ð¼Ñ Ð¿Ð¾Ð»ÑзоваÑелÑ. ÐÑли Ð´Ð»Ñ Ð²Ð°Ñ ÑÑо пÑоблема безопаÑноÑÑи, "
+"вÑбеÑиÑе \"ÐеÑ\", и ÑпÑавлÑйÑе ÑÑÑлкой и пÑавами ÑамоÑÑоÑÑелÑно."
+
Added: trunk/packages/kdepim/debian/po/sv.po
===================================================================
--- trunk/packages/kdepim/debian/po/sv.po 2006-08-07 22:42:46 UTC (rev 4307)
+++ trunk/packages/kdepim/debian/po/sv.po 2006-08-07 22:47:01 UTC (rev 4308)
@@ -0,0 +1,66 @@
+# Translators, if you are not familiar with the PO format, gettext
+# documentation is worth reading, especially sections dedicated to
+# this format, e.g. by running:
+# info -n '(gettext)PO Files'
+# info -n '(gettext)Header Entry'
+# Some information specific to po-debconf are available at
+# /usr/share/doc/po-debconf/README-trans
+# or http://www.debian.org/intl/l10n/po-debconf/README-trans
+# Developers do not need to manually edit POT or PO files.
+# , fuzzy
+#
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: kdepim 4:3.4.2-2\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2004-04-26 22:44-0500\n"
+"PO-Revision-Date: 2005-10-11 12:26+0200\n"
+"Last-Translator: Daniel Nylander <po at danielnylander.se>\n"
+"Language-Team: Swedish <sv at li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+"Content-Transfer-Encoding: 8bit"
+
+#. Type: select
+#. choices
+#: ../kpilot.templates:3
+msgid "None, ttyS0, ttyS1, ttyS2, ttyS3, ircomm0, ttyUSB0, ttyUSB1"
+msgstr "Ingen, ttyS0, ttyS1, ttyS2, ttyS3, ircomm0, ttyUSB0, ttyUSB1"
+
+#. Type: select
+#. description
+#: ../kpilot.templates:4
+msgid "Which communication port to use with the Palm?"
+msgstr "Vilken kommunikationsport ska användas med din Palm?"
+
+#. Type: select
+#. description
+#: ../kpilot.templates:4
+msgid ""
+"A symbolic file /dev/pilot may be created to the port use to talk to the "
+"Palm."
+msgstr ""
+"En symbolisk länkfil /dev/pilot kommer att skapas och användas för att prata med din Palm."
+
+#. Type: select
+#. description
+#: ../kpilot.templates:4
+msgid ""
+"ttyS? are the four serial ports, ircomm0 is the IrDA (infra red) port, "
+"ttyUSB? are the USB ports."
+msgstr ""
+"ttyS? är fyra seriellportar, ircomm0 är IrDA (infraröd) porten, ttyUSB? är USB-portarna."
+
+#. Type: select
+#. description
+#: ../kpilot.templates:4
+msgid ""
+"To ease the use of the Palm connected to the port its access rights will be "
+"lowered to allow access to any user. If it is a security problem for you, "
+"select \"None\" and manage the link and its access rights yourself."
+msgstr ""
+"För att förenkla användningen av den Palm som är ansluten till porten kommer rättigheterna "
+"att sänkas för att ge tillgång till alla användare. Om det är ett säkerhetsproblem för dig, "
+"välj då \"Ingen\" och hantera länken och dess rättigheter själv."
+
Modified: trunk/packages/kdepim/debian/rules
===================================================================
--- trunk/packages/kdepim/debian/rules 2006-08-07 22:42:46 UTC (rev 4307)
+++ trunk/packages/kdepim/debian/rules 2006-08-07 22:47:01 UTC (rev 4308)
@@ -5,7 +5,7 @@
include /usr/share/cdbs/1/rules/tarball.mk
include /usr/share/cdbs/1/rules/debhelper.mk
include debian/cdbs/debian-qt-kde.mk
-include /usr/share/cdbs/1/rules/simple-patchsys.mk
+include debian/cdbs/simple-patchsys.mk
include /usr/share/cdbs/1/rules/utils.mk
DEB_KDE_CVS_MAKE := yes
@@ -33,12 +33,13 @@
rm -f debian/stamp-libtool-update
rm -f debian/patches/common/02_autotools_update.diff \
debian/patches/common/03_libtool_update.diff
+ rm -f $(DEB_TAR_SRCDIR).tar.bz2.cdbs-config_list
DEB_INSTALL_DOCS_ALL :=
DEB_INSTALL_CHANGELOGS_ALL = $(shell for f in ChangeLog CHANGELOG CHANGES; do if test -s $(DEB_SRCDIR)/$(cdbs_curpkg)/$$f; then echo $(DEB_SRCDIR)/$(cdbs_curpkg)/$$f; break; fi; done)
-shlibs_ver=4:3.5.0
+shlibs_ver=4:3.5.3
DEB_DH_MAKESHLIBS_ARGS_libindex0 := -V'libindex0 (>= $(shlibs_ver))'
DEB_DH_MAKESHLIBS_ARGS_libkcal2b := -V'libkcal2b (>= $(shlibs_ver))'
DEB_DH_MAKESHLIBS_ARGS_libkdenetwork2 := -V'libkdenetwork2 (>= $(shlibs_ver))'
@@ -85,18 +86,5 @@
debian/libkcal2b/usr/lib/kde3/kcal_kabc.so \
-dDepends
-###
-
-GCC4_ICES_HERE := arm m68k hppa
-DEB_BUILD_ARCH ?= $(shell dpkg-architecture -qDEB_BUILD_ARCH)
-
-ifneq (,$(findstring $(DEB_BUILD_ARCH),$(GCC4_ICES_HERE)))
- export CC=gcc-3.4
- export CPP=cpp-3.4
- export CXX=g++-3.4
-endif
-
-###
-
test-shlibdeps:
@echo $(DEB_DH_SHLIBDEPS_ARGS_kontact)
More information about the pkg-kde-commits
mailing list