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>&amp;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