Branch 'kolab/integration/4.13.0' - 114 commits - akonadi/calendar akonadi/CMakeLists.txt akonadi/collectioncombobox.cpp akonadi/collection.cpp akonadi/collectioncreatejob.cpp akonadi/collectionfetchjob.cpp akonadi/collectionfetchscope.cpp akonadi/collectionfetchscope.h akonadi/collection.h akonadi/collectionidentificationattribute.cpp akonadi/collectionidentificationattribute.h akonadi/collectionmodifyjob.cpp akonadi/collectionpathresolver.cpp akonadi/collectionpathresolver_p.h akonadi/collection_p.h akonadi/collectionrequester.cpp akonadi/collectionrequester.h akonadi/collectionsync.cpp akonadi/contact akonadi/entity.cpp akonadi/entitytreemodel.cpp akonadi/entitytreemodel.h akonadi/entitytreemodel_p.cpp akonadi/entitytreemodel_p.h akonadi/item.cpp akonadi/itemcreatejob.cpp akonadi/itemfetchscope.cpp akonadi/itemfetchscope.h akonadi/itemfetchscope_p.h akonadi/item.h akonadi/itemmodifyjob.cpp akonadi/itemmodifyjob_p.h akonadi/item_p.h akonadi/itemserializer.cpp akonadi/itemsync.cpp akonadi/kmime akonadi/pastehelper.cpp akonadi/protocolhelper.cpp akonadi/protocolhelper_p.h akonadi/resourcebase.cpp akonadi/resourcescheduler.cpp akonadi/resourcescheduler_p.h akonadi/session.cpp akonadi/session_p.h akonadi/socialutils akonadi/standardactionmanager.cpp akonadi/tagcreatejob.h akonadi/tagdeletejob.h akonadi/tagfetchjob.cpp akonadi/tagfetchjob.h akonadi/tagfetchscope.cpp akonadi/tagfetchscope.h akonadi/tagmanagementdialog.cpp akonadi/tagmodifyjob.h akonadi/tests akonadi/xml kabc/plugins kabc/vcardparser kcalcore/tests kholidays/holidayregion.cpp kholidays/holidays kholidays/parsers kholidays/tests kimap/fetchjob.cpp kimap/fetchjob.h kimap/getmetadatajob.cpp kimap/getmetadatajob.h kimap/loginjob.cpp kimap/loginjob.h kimap/storejob.cpp kimap/storejob.h kimap/tests kldap/ldapconfigwidget.cpp kresources/kresources.desktop kresources/kresources_manager.desktop mailtransport/smtpconfigwidget.cpp mailtransport/tests
Christian Mollekopf
mollekopf at kolabsys.com
Mon Aug 11 11:06:32 CEST 2014
akonadi/CMakeLists.txt | 7
akonadi/calendar/etmcalendar.cpp | 8
akonadi/calendar/itiphandlerhelper_p.cpp | 2
akonadi/calendar/mailclient_p.cpp | 12
akonadi/collection.cpp | 80
akonadi/collection.h | 109
akonadi/collection_p.h | 27
akonadi/collectioncombobox.cpp | 1
akonadi/collectioncreatejob.cpp | 4
akonadi/collectionfetchjob.cpp | 52
akonadi/collectionfetchscope.cpp | 43
akonadi/collectionfetchscope.h | 65
akonadi/collectionidentificationattribute.cpp | 97
akonadi/collectionidentificationattribute.h | 67
akonadi/collectionmodifyjob.cpp | 11
akonadi/collectionpathresolver.cpp | 39
akonadi/collectionpathresolver_p.h | 16
akonadi/collectionrequester.cpp | 16
akonadi/collectionrequester.h | 3
akonadi/collectionsync.cpp | 29
akonadi/contact/editor/im/protocols/googletalkprotocol.desktop | 2
akonadi/contact/emailaddressselectionwidget.cpp | 26
akonadi/contact/emailaddressselectionwidget.h | 8
akonadi/contact/kcm/akonadicontact_actions.desktop | 3
akonadi/entity.cpp | 5
akonadi/entitytreemodel.cpp | 62
akonadi/entitytreemodel.h | 66
akonadi/entitytreemodel_p.cpp | 538 +-
akonadi/entitytreemodel_p.h | 38
akonadi/item.cpp | 10
akonadi/item.h | 23
akonadi/item_p.h | 1
akonadi/itemcreatejob.cpp | 30
akonadi/itemfetchscope.cpp | 27
akonadi/itemfetchscope.h | 60
akonadi/itemfetchscope_p.h | 7
akonadi/itemmodifyjob.cpp | 58
akonadi/itemmodifyjob_p.h | 1
akonadi/itemserializer.cpp | 17
akonadi/itemsync.cpp | 3
akonadi/kmime/specialmailcollectionstesting.cpp | 3
akonadi/kmime/tests/CMakeLists.txt | 11
akonadi/kmime/tests/localfolderstest.cpp | 12
akonadi/kmime/tests/unittestenv/config.xml | 2
akonadi/kmime/tests/unittestenv/xdgconfig/akonadi/akonadiserverrc | 3
akonadi/pastehelper.cpp | 222 -
akonadi/protocolhelper.cpp | 186
akonadi/protocolhelper_p.h | 13
akonadi/resourcebase.cpp | 45
akonadi/resourcescheduler.cpp | 3
akonadi/resourcescheduler_p.h | 8
akonadi/session.cpp | 4
akonadi/session_p.h | 2
akonadi/socialutils/serializer/akonadi_serializer_socialfeeditem.desktop | 2
akonadi/standardactionmanager.cpp | 6
akonadi/tagcreatejob.h | 2
akonadi/tagdeletejob.h | 4
akonadi/tagfetchjob.cpp | 6
akonadi/tagfetchjob.h | 70
akonadi/tagfetchscope.cpp | 19
akonadi/tagfetchscope.h | 17
akonadi/tagmanagementdialog.cpp | 2
akonadi/tagmodifyjob.h | 2
akonadi/tests/CMakeLists.txt | 10
akonadi/tests/collectionattributetest.cpp | 17
akonadi/tests/collectionattributetest.h | 1
akonadi/tests/collectionjobtest.cpp | 270 +
akonadi/tests/collectionjobtest.h | 6
akonadi/tests/collectionsynctest.cpp | 5
akonadi/tests/entitytreemodeltest.cpp | 80
akonadi/tests/etmpopulationtest.cpp | 402 ++
akonadi/tests/fakeakonadiservercommand.cpp | 4
akonadi/tests/fakeakonadiservercommand.h | 7
akonadi/tests/itemdeletetest.cpp | 1
akonadi/tests/itemsynctest.cpp | 24
akonadi/tests/itemtest.cpp | 28
akonadi/tests/itemtest.h | 3
akonadi/tests/monitortest.cpp | 77
akonadi/tests/resourceschedulertest.cpp | 8
akonadi/tests/tagtest.cpp | 246 +
akonadi/tests/testresource/CMakeLists.txt | 27
akonadi/tests/testresource/knutresource.cpp | 6
akonadi/tests/testresource/knutresource.desktop | 4
akonadi/tests/testsearchplugin/akonaditestsearchplugin.desktop | 4
akonadi/tests/unittestenv/kdehome/testdata-res1.xml | 2
akonadi/xml/akonadi-xml.xsd | 18
akonadi/xml/format_p.h | 4
akonadi/xml/xmldocument.cpp | 5
akonadi/xml/xmldocument.h | 5
akonadi/xml/xmlreader.cpp | 44
akonadi/xml/xmlreader.h | 10
kabc/plugins/dir/dir.desktop | 2
kabc/plugins/file/file.desktop | 2
kabc/plugins/ldapkio/resourceldapkioconfig.cpp | 18
kabc/plugins/ldapkio/resourceldapkioconfig.h | 3
kabc/plugins/net/net.desktop | 2
kabc/vcardparser/testread2.cpp | 2
kcalcore/tests/testicaltimezones.cpp | 8
kholidays/holidayregion.cpp | 33
kholidays/holidays/plan2/holiday_ar_es | 118
kholidays/holidays/plan2/holiday_at_de | 82
kholidays/holidays/plan2/holiday_au-act_en-gb | 28
kholidays/holidays/plan2/holiday_au-nsw_en-gb | 24
kholidays/holidays/plan2/holiday_au-nt_en-gb | 30
kholidays/holidays/plan2/holiday_au-qld_en-gb | 20
kholidays/holidays/plan2/holiday_au-sa_en-gb | 26
kholidays/holidays/plan2/holiday_au-tas_en-gb | 28
kholidays/holidays/plan2/holiday_au-vic_en-gb | 26
kholidays/holidays/plan2/holiday_au-wa_en-gb | 26
kholidays/holidays/plan2/holiday_ba-srp_sr | 58
kholidays/holidays/plan2/holiday_ba-srp_sr at ijekavian | 58
kholidays/holidays/plan2/holiday_ba-srp_sr at ijekavianlatin | 58
kholidays/holidays/plan2/holiday_ba-srp_sr at latin | 58
kholidays/holidays/plan2/holiday_bb_en-gb | 66
kholidays/holidays/plan2/holiday_be_fr | 56
kholidays/holidays/plan2/holiday_be_nl | 56
kholidays/holidays/plan2/holiday_be_wa | 56
kholidays/holidays/plan2/holiday_bg_bg | 26
kholidays/holidays/plan2/holiday_br_pt-br | 194
kholidays/holidays/plan2/holiday_by_be | 178
kholidays/holidays/plan2/holiday_ca-qc_fr | 28
kholidays/holidays/plan2/holiday_ca_en-gb | 32
kholidays/holidays/plan2/holiday_ch_de | 22
kholidays/holidays/plan2/holiday_ch_fr | 22
kholidays/holidays/plan2/holiday_ch_it | 30
kholidays/holidays/plan2/holiday_cl_es | 59
kholidays/holidays/plan2/holiday_cn_zh-cn | 57
kholidays/holidays/plan2/holiday_co_es | 40
kholidays/holidays/plan2/holiday_cr_en | 26
kholidays/holidays/plan2/holiday_cr_es | 26
kholidays/holidays/plan2/holiday_cz_cs | 32
kholidays/holidays/plan2/holiday_de-by_de | 90
kholidays/holidays/plan2/holiday_de_de | 50
kholidays/holidays/plan2/holiday_dk_da | 104
kholidays/holidays/plan2/holiday_dz_ar | 26
kholidays/holidays/plan2/holiday_dz_fr | 26
kholidays/holidays/plan2/holiday_ee_et | 83
kholidays/holidays/plan2/holiday_eg_ar | 20
kholidays/holidays/plan2/holiday_es-ct_ca | 38
kholidays/holidays/plan2/holiday_es_es | 80
kholidays/holidays/plan2/holiday_fi_fi | 104
kholidays/holidays/plan2/holiday_fr_fr | 82
kholidays/holidays/plan2/holiday_gb-eaw_en-gb | 30
kholidays/holidays/plan2/holiday_gb-nir_en-gb | 38
kholidays/holidays/plan2/holiday_gb-sct_en-gb | 40
kholidays/holidays/plan2/holiday_gf_fr | 76
kholidays/holidays/plan2/holiday_gp_fr | 78
kholidays/holidays/plan2/holiday_gr_el | 339 -
kholidays/holidays/plan2/holiday_gr_el_nameday | 274 +
kholidays/holidays/plan2/holiday_gt_es | 46
kholidays/holidays/plan2/holiday_hk_en-gb | 288 -
kholidays/holidays/plan2/holiday_hk_zh-cn | 288 -
kholidays/holidays/plan2/holiday_hr_hr | 96
kholidays/holidays/plan2/holiday_hu_hu | 62
kholidays/holidays/plan2/holiday_id_en-us | 118
kholidays/holidays/plan2/holiday_id_id | 118
kholidays/holidays/plan2/holiday_ie_en-gb | 22
kholidays/holidays/plan2/holiday_ie_ga | 64
kholidays/holidays/plan2/holiday_il_en-us | 60
kholidays/holidays/plan2/holiday_il_he | 50
kholidays/holidays/plan2/holiday_in_en-gb | 11
kholidays/holidays/plan2/holiday_ir_en-us | 44
kholidays/holidays/plan2/holiday_ir_fa | 44
kholidays/holidays/plan2/holiday_is_is | 84
kholidays/holidays/plan2/holiday_it-bz_de | 54
kholidays/holidays/plan2/holiday_it_it | 82
kholidays/holidays/plan2/holiday_jm_en-gb | 28
kholidays/holidays/plan2/holiday_jp_en-us | 74
kholidays/holidays/plan2/holiday_jp_ja | 74
kholidays/holidays/plan2/holiday_kr_ko | 94
kholidays/holidays/plan2/holiday_kz_kk | 134
kholidays/holidays/plan2/holiday_kz_ru | 134
kholidays/holidays/plan2/holiday_lt_lt | 44
kholidays/holidays/plan2/holiday_lu_fr | 24
kholidays/holidays/plan2/holiday_lu_lb | 24
kholidays/holidays/plan2/holiday_lv_lv | 80
kholidays/holidays/plan2/holiday_ma_ar | 26
kholidays/holidays/plan2/holiday_ma_fr | 26
kholidays/holidays/plan2/holiday_mq_fr | 78
kholidays/holidays/plan2/holiday_mx_es | 48
kholidays/holidays/plan2/holiday_na_en-gb | 28
kholidays/holidays/plan2/holiday_nc_fr | 76
kholidays/holidays/plan2/holiday_nl_nl | 95
kholidays/holidays/plan2/holiday_no_nb | 101
kholidays/holidays/plan2/holiday_no_nn | 100
kholidays/holidays/plan2/holiday_nz_en-gb | 116
kholidays/holidays/plan2/holiday_pa_en | 68
kholidays/holidays/plan2/holiday_pa_es | 68
kholidays/holidays/plan2/holiday_pe_es | 26
kholidays/holidays/plan2/holiday_pf_fr | 76
kholidays/holidays/plan2/holiday_pl_pl | 66
kholidays/holidays/plan2/holiday_pt_pt | 44
kholidays/holidays/plan2/holiday_py_es | 22
kholidays/holidays/plan2/holiday_re_fr | 76
kholidays/holidays/plan2/holiday_ro_ro | 26
kholidays/holidays/plan2/holiday_rs_sr | 62
kholidays/holidays/plan2/holiday_rs_sr at ijekavian | 62
kholidays/holidays/plan2/holiday_rs_sr at ijekavianlatin | 62
kholidays/holidays/plan2/holiday_rs_sr at latin | 62
kholidays/holidays/plan2/holiday_ru_ru | 198
kholidays/holidays/plan2/holiday_se_sv | 64
kholidays/holidays/plan2/holiday_sg_en-gb | 40
kholidays/holidays/plan2/holiday_si_sl | 38
kholidays/holidays/plan2/holiday_sk_sk | 46
kholidays/holidays/plan2/holiday_sm_it | 92
kholidays/holidays/plan2/holiday_th_en-gb | 36
kholidays/holidays/plan2/holiday_tr_en-gb | 142
kholidays/holidays/plan2/holiday_tr_tr | 142
kholidays/holidays/plan2/holiday_ua_uk | 308 -
kholidays/holidays/plan2/holiday_us_en-us | 74
kholidays/holidays/plan2/holiday_uy_es | 32
kholidays/holidays/plan2/holiday_wf_fr | 78
kholidays/holidays/plan2/holiday_yt_fr | 78
kholidays/holidays/plan2/holiday_za_en-gb | 24
kholidays/parsers/plan2/holidayparserdriverplan.cpp | 15
kholidays/parsers/plan2/holidayparserdriverplan_p.h | 6
kholidays/parsers/plan2/holidayparserplan.cpp | 1067 +++--
kholidays/parsers/plan2/holidayparserplan.hpp | 159
kholidays/parsers/plan2/holidayparserplan.ypp | 27
kholidays/parsers/plan2/holidayscannerplan.cpp | 1994 +++++-----
kholidays/parsers/plan2/holidayscannerplan.lpp | 23
kholidays/parsers/plan2/location.hh | 58
kholidays/parsers/plan2/position.hh | 75
kholidays/parsers/plan2/stack.hh | 48
kholidays/tests/holiday_gb-eaw_en-gb_Test | 68
kholidays/tests/testholidayregion.h | 2
kimap/fetchjob.cpp | 67
kimap/fetchjob.h | 95
kimap/getmetadatajob.cpp | 18
kimap/getmetadatajob.h | 24
kimap/loginjob.cpp | 2
kimap/loginjob.h | 3
kimap/storejob.cpp | 66
kimap/storejob.h | 3
kimap/tests/fetchjobtest.cpp | 71
kimap/tests/kimaptest/fakeserver.cpp | 9
kimap/tests/kimaptest/fakeserver.h | 7
kldap/ldapconfigwidget.cpp | 6
kresources/kresources.desktop | 3
kresources/kresources_manager.desktop | 4
mailtransport/smtpconfigwidget.cpp | 18
mailtransport/tests/CMakeLists.txt | 4
mailtransport/tests/transportmgr.cpp | 5
243 files changed, 9586 insertions(+), 6337 deletions(-)
New commits:
commit 4d4a185b4433835e592422ff695744b2547ed133
Merge: ea947bb 4435bcb
Author: Christian Mollekopf <chrigi_1 at fastmail.fm>
Date: Mon Aug 11 11:00:11 2014 +0200
Add dialog box when we don't find capabilities
(cherry picked from commit 1a04ba54247c37620f651c974614744c4217cbc9)
diff --cc akonadi/calendar/itiphandlerhelper_p.cpp
index ba7e2c2,2af8f3f..b9f1036
--- a/akonadi/calendar/itiphandlerhelper_p.cpp
+++ b/akonadi/calendar/itiphandlerhelper_p.cpp
@@@ -179,10 -219,12 +219,12 @@@ void ITIPHandlerHelper::sendIncidenceCr
/// When we created the incidence, we *must* be the organizer.
if (!weAreOrganizerOf(incidence)) {
- kError() << "We should be the organizer of this incidence!"
+ kWarning() << "Creating incidence which has another organizer! Will skip sending invitations."
<< "; email= " << incidence->organizer()->email()
<< "; thatIsMe() = " << Akonadi::CalendarUtils::thatIsMe(incidence->organizer()->email());
- return ITIPHandlerHelper::ResultFailAbortUpdate;
+ emit sendIncidenceCreatedMessageFinished(ITIPHandlerHelper::ResultFailAbortUpdate, method, incidence);
+ emit finished(ITIPHandlerHelper::ResultFailAbortUpdate, QString());
+ return;
}
if (!weNeedToSendMailFor(incidence)) {
commit ea947bbfd763ab4b2ce12648f23bed7532a200a9
Author: Christian Mollekopf <chrigi_1 at fastmail.fm>
Date: Sun Aug 10 14:02:25 2014 +0200
ResourceBase: Sync referenced collections.
diff --git a/akonadi/resourcebase.cpp b/akonadi/resourcebase.cpp
index 9dbc187..d11f216 100644
--- a/akonadi/resourcebase.cpp
+++ b/akonadi/resourcebase.cpp
@@ -1100,7 +1100,7 @@ void ResourceBasePrivate::slotCollectionListDone(KJob *job)
const Collection::List list = static_cast<CollectionFetchJob *>(job)->collections();
Q_FOREACH (const Collection &collection, list) {
//We also get collections that should not be synced but are part of the tree.
- if (collection.shouldList(Collection::ListSync)) {
+ if (collection.shouldList(Collection::ListSync) || collection.referenced()) {
scheduler->scheduleSync(collection);
}
}
commit bba53c16dd74055a760035f6033799e30c838331
Author: Christian Mollekopf <chrigi_1 at fastmail.fm>
Date: Sat Aug 9 16:39:31 2014 +0200
CollectionFetchJob: Support for fetching ancestor attributes.
diff --git a/akonadi/collectionfetchjob.cpp b/akonadi/collectionfetchjob.cpp
index 0d70dea..4223c90 100644
--- a/akonadi/collectionfetchjob.cpp
+++ b/akonadi/collectionfetchjob.cpp
@@ -302,6 +302,10 @@ void CollectionFetchJob::doStart()
Q_ASSERT(false);
}
}
+ Q_FOREACH (const QByteArray &ancestorAttributes, d->mScope.ancestorAttributes()) {
+ options.append("ANCESTORATTR");
+ options.append(ancestorAttributes);
+ }
command += ImapParser::join(filter, " ") + ") (" + ImapParser::join(options, " ") + ")\n";
d->writeData(command);
diff --git a/akonadi/collectionfetchscope.cpp b/akonadi/collectionfetchscope.cpp
index 18c6509..2b71309 100644
--- a/akonadi/collectionfetchscope.cpp
+++ b/akonadi/collectionfetchscope.cpp
@@ -43,6 +43,7 @@ public:
ancestorDepth = other.ancestorDepth;
statistics = other.statistics;
listFilter = other.listFilter;
+ ancestorAttributes = other.ancestorAttributes;
}
public:
@@ -51,6 +52,7 @@ public:
CollectionFetchScope::AncestorRetrieval ancestorDepth;
bool statistics;
CollectionFetchScope::ListFilter listFilter;
+ QSet<QByteArray> ancestorAttributes;
};
CollectionFetchScope::CollectionFetchScope()
@@ -150,5 +152,19 @@ void CollectionFetchScope::setListFilter(CollectionFetchScope::ListFilter listFi
d->listFilter = listFilter;
}
+QSet<QByteArray> CollectionFetchScope::ancestorAttributes() const
+{
+ return d->ancestorAttributes;
+}
+
+void CollectionFetchScope::fetchAncestorAttribute(const QByteArray &type, bool fetch)
+{
+ if (fetch) {
+ d->ancestorAttributes.insert(type);
+ } else {
+ d->ancestorAttributes.remove(type);
+ }
+}
+
}
diff --git a/akonadi/collectionfetchscope.h b/akonadi/collectionfetchscope.h
index a857930..5acd591 100644
--- a/akonadi/collectionfetchscope.h
+++ b/akonadi/collectionfetchscope.h
@@ -24,6 +24,7 @@
#include "akonadi_export.h"
#include <QtCore/QSharedDataPointer>
+#include <QtCore/QSet>
class QStringList;
@@ -217,6 +218,34 @@ public:
AncestorRetrieval ancestorRetrieval() const;
/**
+ * Returns all explicitly fetched attributes.
+ *
+ * Undefined if fetchAllAttributes() returns true.
+ *
+ * @see fetchAttribute()
+ */
+ QSet<QByteArray> ancestorAttributes() const;
+
+ /**
+ * Sets whether the attribute of the given @p type should be fetched.
+ *
+ * @param type The attribute type to fetch.
+ * @param fetch @c true if the attribute should be fetched, @c false otherwise.
+ */
+ void fetchAncestorAttribute(const QByteArray &type, bool fetch = true);
+
+ /**
+ * Sets whether the attribute of the requested type should be fetched.
+ *
+ * @param fetch @c true if the attribute should be fetched, @c false otherwise.
+ */
+ template <typename T> inline void fetchAncestorAttribute(bool fetch = true)
+ {
+ T dummy;
+ fetchAncestorAttribute(dummy.type(), fetch);
+ }
+
+ /**
* Returns @c true if there is nothing to fetch.
*/
bool isEmpty() const;
diff --git a/akonadi/protocolhelper.cpp b/akonadi/protocolhelper.cpp
index 3d49666..82b70d5 100644
--- a/akonadi/protocolhelper.cpp
+++ b/akonadi/protocolhelper.cpp
@@ -116,7 +116,7 @@ void ProtocolHelper::parseAncestors( const QByteArray &data, Entity *entity, int
for ( int i = 0; i < ancestors.count(); ++i ) {
parentIds.clear();
ImapParser::parseParenthesizedList( ancestors[ i ], parentIds );
- if ( parentIds.size() != 2 )
+ if ( parentIds.size() < 2 )
break;
const Collection::Id uid = parentIds[ 0 ].toLongLong();
@@ -127,6 +127,15 @@ void ProtocolHelper::parseAncestors( const QByteArray &data, Entity *entity, int
current->parentCollection().setId( uid );
current->parentCollection().setRemoteId( QString::fromUtf8( parentIds[ 1 ] ) );
+ for ( int q = 2; q < parentIds.count(); q += 2 ) {
+ const QByteArray &attrType = parentIds[q];
+ const QByteArray &attrValue = parentIds[q + 1];
+ Attribute* attr = AttributeFactory::createAttribute( attrType );
+ Q_ASSERT( attr );
+ attr->deserialize( attrValue );
+ current->parentCollection().addAttribute( attr );
+ }
+
current = ¤t->parentCollection();
}
}
diff --git a/akonadi/tests/collectionjobtest.cpp b/akonadi/tests/collectionjobtest.cpp
index 59155dd..b6cb398 100644
--- a/akonadi/tests/collectionjobtest.cpp
+++ b/akonadi/tests/collectionjobtest.cpp
@@ -766,6 +766,37 @@ void CollectionJobTest::testAncestorRetrieval()
QCOMPARE( col, col2 );
}
+void CollectionJobTest::testAncestorAttributeRetrieval()
+{
+ Akonadi::Collection baseCol;
+ {
+ baseCol.setParentCollection(Akonadi::Collection(res1ColId));
+ baseCol.setName("base");
+ baseCol.attribute<TestAttribute>( Collection::AddIfMissing )->data = "new";
+ Akonadi::CollectionCreateJob *create = new Akonadi::CollectionCreateJob(baseCol);
+ AKVERIFYEXEC(create);
+ baseCol = create->collection();
+ }
+ {
+ Akonadi::Collection col;
+ col.setParentCollection(baseCol);
+ col.setName("enabled");
+ Akonadi::CollectionCreateJob *create = new Akonadi::CollectionCreateJob(col);
+ AKVERIFYEXEC(create);
+
+ CollectionFetchJob *job = new CollectionFetchJob(create->collection(), CollectionFetchJob::Base);
+ job->fetchScope().setAncestorRetrieval(CollectionFetchScope::All);
+ job->fetchScope().fetchAncestorAttribute<TestAttribute>(CollectionFetchScope::All);
+ AKVERIFYEXEC(job);
+ Akonadi::Collection result = job->collections().first();
+ QCOMPARE(result.parentCollection().hasAttribute<TestAttribute>(), true);
+ }
+
+ //Cleanup
+ CollectionDeleteJob *deleteJob = new CollectionDeleteJob(baseCol);
+ AKVERIFYEXEC(deleteJob);
+}
+
void CollectionJobTest::testListPreference()
{
Akonadi::Collection baseCol;
diff --git a/akonadi/tests/collectionjobtest.h b/akonadi/tests/collectionjobtest.h
index 14b0fd0..cd71d3c 100644
--- a/akonadi/tests/collectionjobtest.h
+++ b/akonadi/tests/collectionjobtest.h
@@ -52,6 +52,7 @@ class CollectionJobTest : public QObject
void testRidCreateDelete_data();
void testRidCreateDelete();
void testAncestorRetrieval();
+ void testAncestorAttributeRetrieval();
void testListPreference();
void testReference();
};
commit d8d0f85a609dff818ef8812cbe0d57f934c89911
Author: Christian Mollekopf <chrigi_1 at fastmail.fm>
Date: Sat Aug 9 16:38:17 2014 +0200
CollectionComboBox: Set listfilter
diff --git a/akonadi/collectioncombobox.cpp b/akonadi/collectioncombobox.cpp
index 800d5e6..050e270 100644
--- a/akonadi/collectioncombobox.cpp
+++ b/akonadi/collectioncombobox.cpp
@@ -59,6 +59,7 @@ public:
mModel = new EntityTreeModel(mMonitor, mParent);
mModel->setItemPopulationStrategy(EntityTreeModel::NoItemPopulation);
+ mModel->setListFilter(CollectionFetchScope::Display);
mBaseModel = mModel;
}
commit fe08944c5f0097b77f8f986d2c14ce32159e0e22
Author: Christian Mollekopf <chrigi_1 at fastmail.fm>
Date: Thu Aug 7 17:40:29 2014 +0200
CollectionSync: Detect enabled changes.
diff --git a/akonadi/collectionsync.cpp b/akonadi/collectionsync.cpp
index c9afbfb..e516bd9 100644
--- a/akonadi/collectionsync.cpp
+++ b/akonadi/collectionsync.cpp
@@ -412,6 +412,9 @@ public:
if (!(localCollection.cachePolicy() == remoteCollection.cachePolicy())) {
return true;
}
+ if (localCollection.enabled() != remoteCollection.enabled()) {
+ return true;
+ }
// CollectionModifyJob adds the remote attributes to the local collection
foreach (const Attribute *attr, remoteCollection.attributes()) {
commit ebf5c3f224bb420217ee400ea40429b37ec55374
Author: Christian Mollekopf <chrigi_1 at fastmail.fm>
Date: Thu Aug 7 17:36:50 2014 +0200
Collection: Always the changelog to changed when set.
Otherwise setEnabled(true) will still not result in the value getting
updated (since the default value is true as well).
diff --git a/akonadi/collection.cpp b/akonadi/collection.cpp
index 153e4bc..701fb6a 100644
--- a/akonadi/collection.cpp
+++ b/akonadi/collection.cpp
@@ -274,9 +274,7 @@ void Collection::setEnabled(bool enabled)
{
Q_D(Collection);
- if (enabled != d->enabled) {
- d->enabledChanged = true;
- }
+ d->enabledChanged = true;
d->enabled = enabled;
}
@@ -341,9 +339,7 @@ void Collection::setReferenced(bool referenced)
{
Q_D(Collection);
- if (d->referenced != referenced) {
- d->referencedChanged = true;
- }
+ d->referencedChanged = true;
d->referenced = referenced;
}
commit d6370e1784499da93142f282c3260084587e4efb
Author: Christian Mollekopf <chrigi_1 at fastmail.fm>
Date: Wed Aug 6 22:05:28 2014 +0200
ETM: Removed unnecessary debug output
diff --git a/akonadi/entitytreemodel_p.cpp b/akonadi/entitytreemodel_p.cpp
index 8d24973..3a09ed9 100644
--- a/akonadi/entitytreemodel_p.cpp
+++ b/akonadi/entitytreemodel_p.cpp
@@ -482,7 +482,6 @@ void EntityTreeModelPrivate::collectionsFetched(const Akonadi::Collection::List
collectionIt.next();
const Collection::Id topCollectionId = collectionIt.key();
- kDebug() << "Subtree: " << topCollectionId << collectionIt.value();
Q_ASSERT(!m_collections.contains(topCollectionId));
Collection topCollection = collectionsToInsert.value(topCollectionId);
commit 7b05455878771c6222f3dcecb47c9b832f35fff5
Author: Christian Mollekopf <chrigi_1 at fastmail.fm>
Date: Wed Aug 6 19:36:05 2014 +0200
KIMAP: API for multiple folders
diff --git a/kimap/getmetadatajob.cpp b/kimap/getmetadatajob.cpp
index 4cfc333..5d6d417 100644
--- a/kimap/getmetadatajob.cpp
+++ b/kimap/getmetadatajob.cpp
@@ -234,7 +234,13 @@ QMap<QByteArray, QMap<QByteArray, QByteArray> > GetMetaDataJob::allMetaData(cons
QMap<QByteArray, QByteArray> GetMetaDataJob::allMetaData() const
{
Q_D( const GetMetaDataJob );
- const QMap<QByteArray, QMap<QByteArray, QByteArray> > &entries = d->metadata[d->mailBox];
+ return allMetaDataForMailbox(d->mailBox);
+}
+
+QMap<QByteArray, QByteArray> GetMetaDataJob::allMetaDataForMailbox(const QString &mailbox) const
+{
+ Q_D( const GetMetaDataJob );
+ const QMap<QByteArray, QMap<QByteArray, QByteArray> > &entries = d->metadata[mailbox];
QMap<QByteArray, QByteArray> map;
foreach(const QByteArray &entry, entries.keys()) {
const QMap<QByteArray, QByteArray> &values = entries[entry];
@@ -245,3 +251,13 @@ QMap<QByteArray, QByteArray> GetMetaDataJob::allMetaData() const
return map;
}
+QHash<QString, QMap<QByteArray, QByteArray> > GetMetaDataJob::allMetaDataForMailboxes() const
+{
+ Q_D( const GetMetaDataJob );
+ QHash<QString, QMap<QByteArray, QByteArray> > mailboxHash;
+ Q_FOREACH (const QString &mailbox, d->metadata.keys()) {
+ mailboxHash.insert(mailbox, allMetaDataForMailbox(mailbox));
+ }
+ return mailboxHash;
+}
+
diff --git a/kimap/getmetadatajob.h b/kimap/getmetadatajob.h
index 772e29e..cd0ad12 100644
--- a/kimap/getmetadatajob.h
+++ b/kimap/getmetadatajob.h
@@ -223,8 +223,8 @@ class KIMAP_EXPORT GetMetaDataJob : public MetaDataJobBase
QMap<QByteArray, QMap<QByteArray, QByteArray> > allMetaData( const QString &mailBox ) const;
/**
- * Get all the metadata.
- *
+ * Get all the metadata for the mailbox set with setMailBox().
+ *
* Note that the returned map uses METADATA style entries (with a /shared or /private prefix typically),
* also in ANNOTATEMORE mode.
*
@@ -232,6 +232,26 @@ class KIMAP_EXPORT GetMetaDataJob : public MetaDataJobBase
*/
QMap<QByteArray, QByteArray> allMetaData() const;
+ /**
+ * Get all the metadata for the mailbox.
+ *
+ * Note that the returned map uses METADATA style entries (with a /shared or /private prefix typically),
+ * also in ANNOTATEMORE mode.
+ *
+ * @return a map from metadata entry names to values
+ */
+ QMap<QByteArray, QByteArray> allMetaDataForMailbox(const QString &mailbox) const;
+
+ /**
+ * Get all the metadata for for all mailboxes.
+ *
+ * Note that the returned map uses METADATA style entries (with a /shared or /private prefix typically),
+ * also in ANNOTATEMORE mode.
+ *
+ * @return a map in the form (mailbox, (entry, value))
+ */
+ QHash<QString, QMap<QByteArray, QByteArray> > allMetaDataForMailboxes() const;
+
protected:
virtual void doStart();
virtual void handleResponse( const Message &response );
commit a2295b09e32d9e4748564482914727cbc31a4a08
Author: Christian Mollekopf <chrigi_1 at fastmail.fm>
Date: Wed Aug 6 22:00:21 2014 +0200
ETM: Fixed subtree algorithm in collectionsFetched.
The implemented algorithm relied on specific listing order. It had two problems:
* the subTreesToInsert were IMO never correctly built (the algorithm only works
if children come first, and then it still inserted a parent-child pair to much).
* collectionsToInsert would be overwritten with a dummy collection from the ancestor chain
unless the actual collection comes last in the list (again, depends on listing order)
With this patch the algorithm becomes order independent.
Although the original patch inserted hidden collections in case it has non-hidden
children, this patch removes this behaviour since isHidden recursively checks all ancestors.
(so this scenario shouldn't be possible).
isHidden is potentially broken though since the HIDDEN attribute is probably not
available in the ancestor chain.
REVIEW: 119628
diff --git a/akonadi/entitytreemodel_p.cpp b/akonadi/entitytreemodel_p.cpp
index 3212ade..8d24973 100644
--- a/akonadi/entitytreemodel_p.cpp
+++ b/akonadi/entitytreemodel_p.cpp
@@ -380,6 +380,18 @@ void EntityTreeModelPrivate::collectionListFetched(const Akonadi::Collection::Li
}
}
+static QSet<Collection::Id> getChildren(Collection::Id parent, const QHash<Collection::Id, Collection::Id> &childParentMap)
+{
+ QSet<Collection::Id> children;
+ Q_FOREACH (Collection::Id c, childParentMap.keys()) {
+ if (childParentMap.value(c) == parent) {
+ children << c;
+ children += getChildren(c, childParentMap);
+ }
+ }
+ return children;
+}
+
void EntityTreeModelPrivate::collectionsFetched(const Akonadi::Collection::List &collections)
{
Q_Q(EntityTreeModel);
@@ -389,22 +401,13 @@ void EntityTreeModelPrivate::collectionsFetched(const Akonadi::Collection::List
QListIterator<Akonadi::Collection> it(collections);
QHash<Collection::Id, Collection> collectionsToInsert;
- QHash<Collection::Id, QVector<Collection::Id> > subTreesToInsert;
- QHash<Collection::Id, Collection> parents;
while (it.hasNext()) {
const Collection collection = it.next();
const Collection::Id collectionId = collection.id();
- // If a collection is hidden, we still need to put it in the model if it has a
- // non-hidden child. We rely on the fact that children will be returned
- // first and will be in collectionsToInsert (if returned in this batch)
- // or will already be in the model as a dummy node in m_collections
- // if returned and processed in an earlier batch.
- if (isHidden(collection) &&
- !collectionsToInsert.contains(collectionId) &&
- !m_collections.contains(collectionId)) {
+ if (isHidden(collection)) {
continue;
}
@@ -428,49 +431,69 @@ void EntityTreeModelPrivate::collectionsFetched(const Akonadi::Collection::List
retrieveAncestors(collection, false);
}
- Collection parent = collection;
+ collectionsToInsert.insert(collectionId, collection);
+ }
+
+ //Build a list of subtrees to insert, with the root of the subtree on the left, and the complete subtree including root on the right
+ QHash<Collection::Id, QSet<Collection::Id> > subTreesToInsert;
+ {
+ //Build a child-parent map that allows us to build the subtrees afterwards
+ QHash<Collection::Id, Collection::Id> childParentMap;
+ Q_FOREACH (const Collection &col, collectionsToInsert) {
+ childParentMap.insert(col.id(), col.parentCollection().id());
- while (!m_collections.contains(parent.parentCollection().id())) {
- if (!subTreesToInsert[parent.parentCollection().id()].contains(parent.parentCollection().id())) {
- subTreesToInsert[parent.parentCollection().id()].append(parent.parentCollection().id());
- collectionsToInsert.insert(parent.parentCollection().id(), parent.parentCollection());
- }
+ //Complete the subtree up to the last known parent
+ Collection parent = col.parentCollection();
+ while (parent.isValid() && parent != m_rootCollection && !m_collections.contains(parent.id())) {
+ childParentMap.insert(parent.id(), parent.parentCollection().id());
- foreach (Collection::Id collectionId, subTreesToInsert.take(parent.id())) {
- if (!subTreesToInsert[parent.parentCollection().id()].contains(collectionId)) {
- subTreesToInsert[parent.parentCollection().id()].append(collectionId);
+ if (!collectionsToInsert.contains(parent.id())) {
+ collectionsToInsert.insert(parent.id(), parent);
}
+ parent = parent.parentCollection();
}
-
- parent = parent.parentCollection();
}
- if (!subTreesToInsert[parent.id()].contains(collectionId)) {
- subTreesToInsert[parent.id()].append(collectionId);
+ QSet<Collection::Id> parents;
+
+ //Find toplevel parents of the subtrees
+ Q_FOREACH (Collection::Id c, childParentMap.keys()) {
+ //The child has a parent without parent (it's a toplevel node that is not yet in m_collections)
+ if (!childParentMap.contains(childParentMap.value(c))) {
+ Q_ASSERT(!m_collections.contains(c));
+ parents << c;
+ }
}
- collectionsToInsert.insert(collectionId, collection);
- if (!parents.contains(parent.id())) {
- parents.insert(parent.id(), parent.parentCollection());
+ //Find children of each subtree
+ Q_FOREACH (Collection::Id p, parents) {
+ QSet<Collection::Id> children;
+ //We add the parent itself as well so it can be inserted below as part of the same loop
+ children << p;
+ children += getChildren(p, childParentMap);
+ subTreesToInsert[p] = children;
}
}
const int row = 0;
- QHashIterator<Collection::Id, QVector<Collection::Id> > collectionIt(subTreesToInsert);
+ QHashIterator<Collection::Id, QSet<Collection::Id> > collectionIt(subTreesToInsert);
while (collectionIt.hasNext()) {
collectionIt.next();
const Collection::Id topCollectionId = collectionIt.key();
+ kDebug() << "Subtree: " << topCollectionId << collectionIt.value();
Q_ASSERT(!m_collections.contains(topCollectionId));
+ Collection topCollection = collectionsToInsert.value(topCollectionId);
+ Q_ASSERT(topCollection.isValid());
- Q_ASSERT(parents.contains(topCollectionId));
- const QModelIndex parentIndex = indexForCollection(parents.value(topCollectionId));
+ //The toplevels parent must already be part of the model
+ Q_ASSERT(m_collections.contains(topCollection.parentCollection().id()));
+ const QModelIndex parentIndex = indexForCollection(topCollection.parentCollection());
q->beginInsertRows(parentIndex, row, row);
Q_ASSERT(!collectionIt.value().isEmpty());
- Q_ASSERT(m_collections.contains(parents.value(topCollectionId).id()));
foreach (Collection::Id collectionId, collectionIt.value()) {
const Collection collection = collectionsToInsert.take(collectionId);
commit d4038bafcbfebfbb9a156d656ee9f0fd7ca0ba76
Author: Dan Vrátil <dvratil at redhat.com>
Date: Tue Aug 5 18:39:27 2014 +0200
Session: flush the logfile when server response is received, too
diff --git a/akonadi/session.cpp b/akonadi/session.cpp
index f91a880..ec6bc28 100644
--- a/akonadi/session.cpp
+++ b/akonadi/session.cpp
@@ -198,6 +198,7 @@ void SessionPrivate::dataReceived()
if (logFile) {
logFile->write("S: " + parser->data());
+ logFile->flush();
}
// handle login response
commit 2fe7f5f4f20441e1e750d605da58d9776256c420
Author: Dan Vrátil <dvratil at redhat.com>
Date: Tue Aug 5 17:34:22 2014 +0200
Adapt CollectionSyncTest to Akonadi changes
Since the change in LIST implementation in Akonadi, the collections are returned
in a different order. This adapts the test to that change.
diff --git a/akonadi/tests/collectionsynctest.cpp b/akonadi/tests/collectionsynctest.cpp
index f418228..9da0b28 100644
--- a/akonadi/tests/collectionsynctest.cpp
+++ b/akonadi/tests/collectionsynctest.cpp
@@ -164,8 +164,9 @@ class CollectionSyncTest : public QObject
QCOMPARE( resultCols.count(), origCols.count() );
Collection::List delCols;
- delCols << resultCols.front();
- resultCols.pop_front();
+ delCols << resultCols.last();
+ resultCols.pop_back();
+
// ### not implemented yet I guess
#if 0
commit db901360cff6b968ca8c4a24fafc38e2f5b15bfd
Author: Kevin Ottens <ervin at kde.org>
Date: Tue Aug 5 16:07:15 2014 +0200
Make it build
Conflicts:
akonadi/resourcebase.cpp
diff --git a/akonadi/resourcebase.cpp b/akonadi/resourcebase.cpp
index c2b49f4..9dbc187 100644
--- a/akonadi/resourcebase.cpp
+++ b/akonadi/resourcebase.cpp
@@ -726,6 +726,9 @@ void ResourceBasePrivate::changeCommittedResult(KJob *job)
}
mChangeRecorder->d_ptr->invalidateCache(static_cast<CollectionModifyJob *>(job)->collection());
} else {
+ if (job->error()) {
+ emit q->error(i18nc("@info", "Updating local items failed: %1.", job->errorText()));
+ }
// Item and tag cache is invalidated by modify job
}
commit 9bda5c2939aad818de5a4573da7b1bed3ec223e5
Author: Dan Vrátil <dvratil at redhat.com>
Date: Tue Aug 5 14:54:05 2014 +0200
Don't mass-modify committed changes from ResourceBase
The resource could have changed RIDs of the items, and mass-changing
RIDs is not supported by the server, so the RID change would never be
applied. Instead we run an ItemModifyJob for each item passed to
changesCommitted() and wrap them into single TransactionSequence.
This should fix some bugs with item moves on IMAP.
Reviewed-by: Christian Mollekopf
diff --git a/akonadi/resourcebase.cpp b/akonadi/resourcebase.cpp
index 7a7b5f3..c2b49f4 100644
--- a/akonadi/resourcebase.cpp
+++ b/akonadi/resourcebase.cpp
@@ -693,12 +693,18 @@ void ResourceBase::changeCommitted(const Item &item)
void ResourceBase::changesCommitted(const Item::List &items)
{
- ItemModifyJob *job = new ItemModifyJob(items);
- job->d_func()->setClean();
- job->disableRevisionCheck(); // TODO: remove, but where/how do we handle the error?
- job->setIgnorePayload(true); // we only want to reset the dirty flag and update the remote id
- job->setUpdateGid(true); // allow resources to update GID too
- connect(job, SIGNAL(finished(KJob*)), this, SLOT(changeCommittedResult(KJob*)));
+ TransactionSequence *transaction = new TransactionSequence(this);
+ connect(transaction, SIGNAL(finished(KJob*)),
+ this, SLOT(changeCommittedResult(KJob*)));
+
+ // Modify the items one-by-one, because STORE does not support mass RID change
+ Q_FOREACH (const Item &item, items) {
+ ItemModifyJob *job = new ItemModifyJob(item, transaction);
+ job->d_func()->setClean();
+ job->disableRevisionCheck(); // TODO: remove, but where/how do we handle the error?
+ job->setIgnorePayload(true); // we only want to reset the dirty flag and update the remote id
+ job->setUpdateGid(true); // allow resources to update GID too
+ }
}
void ResourceBase::changeCommitted(const Collection &collection)
@@ -709,6 +715,10 @@ void ResourceBase::changeCommitted(const Collection &collection)
void ResourceBasePrivate::changeCommittedResult(KJob *job)
{
+ if (job->error()) {
+ kWarning() << job->errorText();
+ }
+
Q_Q(ResourceBase);
if (qobject_cast<CollectionModifyJob *>(job)) {
if (job->error()) {
@@ -716,7 +726,6 @@ void ResourceBasePrivate::changeCommittedResult(KJob *job)
}
mChangeRecorder->d_ptr->invalidateCache(static_cast<CollectionModifyJob *>(job)->collection());
} else {
- // TODO: Error handling for item changes?
// Item and tag cache is invalidated by modify job
}
commit 02ec544bfc72d4a7cacef3f9a4a46fe795c71f77
Author: Christian Mollekopf <chrigi_1 at fastmail.fm>
Date: Tue Aug 5 13:45:21 2014 +0200
ItemSync: debug output
diff --git a/akonadi/itemsync.cpp b/akonadi/itemsync.cpp
index 9f833e6..d1ed81f 100644
--- a/akonadi/itemsync.cpp
+++ b/akonadi/itemsync.cpp
@@ -173,6 +173,7 @@ void ItemSyncPrivate::checkDone()
if (allProcessed() && !mFinished) {
// prevent double result emission, can happen since checkDone() is called from all over the place
+ kDebug() << "finished";
mFinished = true;
q->emitResult();
}
@@ -493,6 +494,7 @@ void ItemSync::deliveryDone()
void ItemSync::slotResult(KJob *job)
{
if (job->error()) {
+ kWarning() << "Error during ItemSync: " << job->errorString();
// pretent there were no errors
Akonadi::Job::removeSubjob(job);
// propagate the first error we got but continue, we might still be fed with stuff from a resource
@@ -508,6 +510,7 @@ void ItemSync::slotResult(KJob *job)
void ItemSync::rollback()
{
Q_D(ItemSync);
+ kWarning() << "The item sync is being rolled-back.";
setError(UserCanceled);
if (d->mCurrentTransaction) {
d->mCurrentTransaction->rollback();
commit a93abf588d3551285d00e4816cca2ac66984d4a9
Author: Christian Mollekopf <chrigi_1 at fastmail.fm>
Date: Wed Jul 30 15:03:14 2014 +0200
Fetch tags with items.
This patch allows to fetch the full tags with the item instead of only
id's.
REVIEW: 119469
diff --git a/akonadi/itemfetchscope.cpp b/akonadi/itemfetchscope.cpp
index b5677df..3baaf1a 100644
--- a/akonadi/itemfetchscope.cpp
+++ b/akonadi/itemfetchscope.cpp
@@ -194,6 +194,21 @@ bool ItemFetchScope::fetchTags() const
return d->mFetchTags;
}
+void ItemFetchScope::setTagFetchScope(const TagFetchScope &tagFetchScope)
+{
+ d->mTagFetchScope = tagFetchScope;
+}
+
+TagFetchScope &ItemFetchScope::tagFetchScope()
+{
+ return d->mTagFetchScope;
+}
+
+TagFetchScope ItemFetchScope::tagFetchScope() const
+{
+ return d->mTagFetchScope;
+}
+
void ItemFetchScope::setFetchVirtualReferences(bool fetchVRefs)
{
d->mFetchVRefs = fetchVRefs;
diff --git a/akonadi/itemfetchscope.h b/akonadi/itemfetchscope.h
index 7200ad9..bb01461 100644
--- a/akonadi/itemfetchscope.h
+++ b/akonadi/itemfetchscope.h
@@ -31,6 +31,7 @@ template <typename T> class QSet;
namespace Akonadi {
class ItemFetchScopePrivate;
+class TagFetchScope;
/**
* @short Specifies which parts of an item should be fetched from the Akonadi storage.
@@ -346,6 +347,49 @@ public:
bool fetchTags() const;
/**
+ * Sets the tag fetch scope.
+ *
+ * The TagFetchScope controls how much of an tags's data is fetched
+ * from the server.
+ *
+ * By default setFetchIdOnly is set to true on the tag fetch scope.
+ *
+ * @param fetchScope The new fetch scope for tag fetch operations.
+ * @see fetchScope()
+ * @since 4.15
+ */
+ void setTagFetchScope(const TagFetchScope &fetchScope);
+
+ /**
+ * Returns the tag fetch scope.
+ *
+ * Since this returns a reference it can be used to conveniently modify the
+ * current scope in-place, i.e. by calling a method on the returned reference
+ * without storing it in a local variable. See the TagFetchScope documentation
+ * for an example.
+ *
+ * By default setFetchIdOnly is set to true on the tag fetch scope.
+ *
+ * @return a reference to the current tag fetch scope
+ *
+ * @see setFetchScope() for replacing the current tag fetch scope
+ * @since 4.15
+ */
+ TagFetchScope &tagFetchScope();
+
+ /**
+ * Returns the tag fetch scope.
+ *
+ * By default setFetchIdOnly is set to true on the tag fetch scope.
+ *
+ * @return a reference to the current tag fetch scope
+ *
+ * @see setFetchScope() for replacing the current tag fetch scope
+ * @since 4.15
+ */
+ TagFetchScope tagFetchScope() const;
+
+ /**
* Returns whether to fetch list of virtual collections the item is linked to
*
* @param fetchVRefs whether or not to fetch virtualc references
diff --git a/akonadi/itemfetchscope_p.h b/akonadi/itemfetchscope_p.h
index d3668d4..3dda8bf 100644
--- a/akonadi/itemfetchscope_p.h
+++ b/akonadi/itemfetchscope_p.h
@@ -24,6 +24,7 @@
#include <QtCore/QString>
#include <KDE/KDateTime>
#include "itemfetchscope.h"
+#include "tagfetchscope.h"
namespace Akonadi {
@@ -46,6 +47,7 @@ public:
, mFetchTags(false)
, mFetchVRefs(false)
{
+ mTagFetchScope.setFetchIdOnly(true);
}
ItemFetchScopePrivate(const ItemFetchScopePrivate &other)
@@ -64,6 +66,7 @@ public:
mFetchRid = other.mFetchRid;
mFetchGid = other.mFetchGid;
mFetchTags = other.mFetchTags;
+ mTagFetchScope = other.mTagFetchScope;
mFetchVRefs = other.mFetchVRefs;
}
@@ -81,6 +84,7 @@ public:
bool mFetchRid;
bool mFetchGid;
bool mFetchTags;
+ TagFetchScope mTagFetchScope;
bool mFetchVRefs;
};
diff --git a/akonadi/protocolhelper.cpp b/akonadi/protocolhelper.cpp
index 53bb5a9..3d49666 100644
--- a/akonadi/protocolhelper.cpp
+++ b/akonadi/protocolhelper.cpp
@@ -26,6 +26,7 @@
#include "itemserializer_p.h"
#include "itemserializerplugin.h"
#include "servermanager.h"
+#include "tagfetchscope.h"
#include <akonadi/private/xdgbasedirs_p.h>
#include <QtCore/QDateTime>
@@ -445,8 +446,12 @@ QByteArray ProtocolHelper::itemFetchScopeToByteArray( const ItemFetchScope &fetc
command += " " AKONADI_PARAM_REMOTEID " " AKONADI_PARAM_REMOTEREVISION;
if ( fetchScope.fetchGid() )
command += " GID";
- if ( fetchScope.fetchTags() )
+ if ( fetchScope.fetchTags() ) {
command += " TAGS";
+ if ( !fetchScope.tagFetchScope().fetchIdOnly() ) {
+ command += " " + ProtocolHelper::tagFetchScopeToByteArray( fetchScope.tagFetchScope() );
+ }
+ }
if ( fetchScope.fetchVirtualReferences() )
command += " VIRTREF";
if ( fetchScope.fetchModificationTime() )
@@ -460,6 +465,18 @@ QByteArray ProtocolHelper::itemFetchScopeToByteArray( const ItemFetchScope &fetc
return command;
}
+QByteArray ProtocolHelper::tagFetchScopeToByteArray( const TagFetchScope &fetchScope )
+{
+ QByteArray command;
+
+ command += "(UID";
+ Q_FOREACH (const QByteArray &part, fetchScope.attributes()) {
+ command += ' ' + ProtocolHelper::encodePartIdentifier(ProtocolHelper::PartAttribute, part);
+ }
+ command += ")";
+ return command;
+}
+
void ProtocolHelper::parseItemFetchResult( const QList<QByteArray> &lineTokens, Item &item, ProtocolHelperValuePool *valuePool )
{
// create a new item object
@@ -536,15 +553,27 @@ void ProtocolHelper::parseItemFetchResult( const QList<QByteArray> &lineTokens,
item.setFlags( convertedFlags );
}
} else if ( key == "TAGS" ) {
- ImapSet set;
- ImapParser::parseSequenceSet( lineTokens[i + 1], set );
Tag::List tags;
- Q_FOREACH ( const ImapInterval &interval, set.intervals() ) {
- Q_ASSERT( interval.hasDefinedBegin() );
- Q_ASSERT( interval.hasDefinedEnd() );
- for ( qint64 i = interval.begin(); i <= interval.end(); i++ ) {
- //TODO use value pool when tag is shared data
- tags << Tag( i );
+ if ( lineTokens[i + 1].startsWith("(") ) {
+ QList<QByteArray> tagsData;
+ ImapParser::parseParenthesizedList( lineTokens[i + 1], tagsData );
+ Q_FOREACH (const QByteArray &t, tagsData) {
+ QList<QByteArray> tagParts;
+ ImapParser::parseParenthesizedList( t, tagParts );
+ Tag tag;
+ parseTagFetchResult(tagParts, tag);
+ tags << tag;
+ }
+ } else {
+ ImapSet set;
+ ImapParser::parseSequenceSet( lineTokens[i + 1], set );
+ Q_FOREACH ( const ImapInterval &interval, set.intervals() ) {
+ Q_ASSERT( interval.hasDefinedBegin() );
+ Q_ASSERT( interval.hasDefinedEnd() );
+ for ( qint64 i = interval.begin(); i <= interval.end(); i++ ) {
+ //TODO use value pool when tag is shared data
+ tags << Tag( i );
+ }
}
}
item.setTags( tags );
diff --git a/akonadi/protocolhelper_p.h b/akonadi/protocolhelper_p.h
index 844d636..b25a0e3 100644
--- a/akonadi/protocolhelper_p.h
+++ b/akonadi/protocolhelper_p.h
@@ -224,6 +224,11 @@ public:
static QByteArray itemFetchScopeToByteArray(const ItemFetchScope &fetchScope);
/**
+ Converts a given TagFetchScope object into a protocol representation.
+ */
+ static QByteArray tagFetchScopeToByteArray( const TagFetchScope &fetchScope );
+
+ /**
Parses a single line from an item fetch job result into an Item object.
*/
static void parseItemFetchResult(const QList<QByteArray> &lineTokens, Item &item, ProtocolHelperValuePool *valuePool = 0);
diff --git a/akonadi/tagfetchjob.cpp b/akonadi/tagfetchjob.cpp
index ff518a8..e4fadab 100644
--- a/akonadi/tagfetchjob.cpp
+++ b/akonadi/tagfetchjob.cpp
@@ -134,11 +134,7 @@ void TagFetchJob::doStart()
return;
}
}
- command += " (UID";
- Q_FOREACH (const QByteArray &part, d->mFetchScope.attributes()) {
- command += ' ' + ProtocolHelper::encodePartIdentifier(ProtocolHelper::PartAttribute, part);
- }
- command += ")\n";
+ command += " " + ProtocolHelper::tagFetchScopeToByteArray(d->mFetchScope) + "\n";
d->writeData(command);
}
diff --git a/akonadi/tagfetchscope.cpp b/akonadi/tagfetchscope.cpp
index 5313f64..9f58db8 100644
--- a/akonadi/tagfetchscope.cpp
+++ b/akonadi/tagfetchscope.cpp
@@ -24,7 +24,13 @@ using namespace Akonadi;
struct Akonadi::TagFetchScope::Private
{
+ Private()
+ : mFetchIdOnly(false)
+ {
+ }
+
QSet<QByteArray> mAttributes;
+ bool mFetchIdOnly;
};
TagFetchScope::TagFetchScope()
@@ -46,6 +52,7 @@ TagFetchScope::TagFetchScope(const TagFetchScope &other)
TagFetchScope &TagFetchScope::operator=(const TagFetchScope &other)
{
d->mAttributes = other.d->mAttributes;
+ d->mFetchIdOnly = other.d->mFetchIdOnly;
return *this;
}
@@ -62,3 +69,15 @@ void TagFetchScope::fetchAttribute(const QByteArray &type, bool fetch)
d->mAttributes.remove(type);
}
}
+
+void TagFetchScope::setFetchIdOnly(bool idOnly)
+{
+ d->mFetchIdOnly = idOnly;
+ d->mAttributes.clear();
+}
+
+bool TagFetchScope::fetchIdOnly() const
+{
+ return d->mFetchIdOnly;
+}
+
diff --git a/akonadi/tagfetchscope.h b/akonadi/tagfetchscope.h
index a63bfb3..25dd141 100644
--- a/akonadi/tagfetchscope.h
+++ b/akonadi/tagfetchscope.h
@@ -85,6 +85,23 @@ public:
fetchAttribute(dummy.type(), fetch);
}
+ /**
+ * Sets wether only the id or the complete tag should be fetched.
+ *
+ * The default is @c false.
+ *
+ * @since 4.15
+ */
+ void setFetchIdOnly(bool fetchIdOnly);
+
+ /**
+ * Sets wether only the id of the tags should be retieved or the complete tag.
+ *
+ * @see tagFetchScope()
+ * @since 4.15
+ */
+ bool fetchIdOnly() const;
+
private:
class Private;
//@cond PRIVATE
diff --git a/akonadi/tests/tagtest.cpp b/akonadi/tests/tagtest.cpp
index 40fe12b..915237c 100644
--- a/akonadi/tests/tagtest.cpp
+++ b/akonadi/tests/tagtest.cpp
@@ -55,6 +55,8 @@ private Q_SLOTS:
void testAttributes();
void testTagItem();
void testRIDIsolation();
+ void testFetchTagIdWithItem();
+ void testFetchFullTagWithItem();
void testModifyItemWithTagByGID();
void testModifyItemWithTagByRID();
void testMonitor();
@@ -409,6 +411,79 @@ void TagTest::testTagItem()
AKVERIFYEXEC(deleteJob);
}
+void TagTest::testFetchTagIdWithItem()
+{
+ const Collection res3 = Collection( collectionIdFromPath( "res3" ) );
+ Tag tag;
+ {
+ TagCreateJob *createjob = new TagCreateJob(Tag("gid1"), this);
+ AKVERIFYEXEC(createjob);
+ tag = createjob->tag();
+ }
+
+ Item item1;
+ {
+ item1.setMimeType( "application/octet-stream" );
+ ItemCreateJob *append = new ItemCreateJob(item1, res3, this);
+ AKVERIFYEXEC(append);
+ item1 = append->item();
+
+ // FIXME This should also be possible with create, but isn't
+ item1.setTag(tag);
+
+ ItemModifyJob *modJob = new ItemModifyJob(item1, this);
+ AKVERIFYEXEC(modJob);
+ }
+
+ ItemFetchJob *fetchJob = new ItemFetchJob(item1, this);
+ fetchJob->fetchScope().setFetchTags(true);
+ fetchJob->fetchScope().tagFetchScope().setFetchIdOnly(true);
+ AKVERIFYEXEC(fetchJob);
+ QCOMPARE(fetchJob->items().first().tags().size(), 1);
+ Tag t = fetchJob->items().first().tags().first();
+ QCOMPARE(t.id(), tag.id());
+ QVERIFY(t.gid().isEmpty());
+
+ TagDeleteJob *deleteJob = new TagDeleteJob(tag, this);
+ AKVERIFYEXEC(deleteJob);
+}
+
+void TagTest::testFetchFullTagWithItem()
+{
+ const Collection res3 = Collection( collectionIdFromPath( "res3" ) );
+ Tag tag;
+ {
+ TagCreateJob *createjob = new TagCreateJob(Tag("gid1"), this);
+ AKVERIFYEXEC(createjob);
+ tag = createjob->tag();
+ }
+
+ Item item1;
+ {
+ item1.setMimeType( "application/octet-stream" );
+ ItemCreateJob *append = new ItemCreateJob(item1, res3, this);
+ AKVERIFYEXEC(append);
+ item1 = append->item();
+ //FIXME This should also be possible with create, but isn't
+ item1.setTag(tag);
+ }
+
+ ItemModifyJob *modJob = new ItemModifyJob(item1, this);
+ AKVERIFYEXEC(modJob);
+
+ ItemFetchJob *fetchJob = new ItemFetchJob(item1, this);
+ fetchJob->fetchScope().setFetchTags(true);
+ fetchJob->fetchScope().tagFetchScope().setFetchIdOnly(false);
+ AKVERIFYEXEC(fetchJob);
+ QCOMPARE(fetchJob->items().first().tags().size(), 1);
+ Tag t = fetchJob->items().first().tags().first();
+ QCOMPARE(t, tag);
+ QVERIFY(!t.gid().isEmpty());
+
+ TagDeleteJob *deleteJob = new TagDeleteJob(tag, this);
+ AKVERIFYEXEC(deleteJob);
+}
+
void TagTest::testModifyItemWithTagByGID()
{
const Collection res3 = Collection( collectionIdFromPath( "res3" ) );
@@ -498,9 +573,10 @@ void TagTest::testMonitor()
{
QSignalSpy addedSpy(&monitor, SIGNAL(tagAdded(Akonadi::Tag)));
QVERIFY(addedSpy.isValid());
- Tag tag("gid2");
- tag.attribute<Akonadi::TagAttribute>(AttributeEntity::AddIfMissing);
- QVERIFY(tag.hasAttribute<Akonadi::TagAttribute>());
+ Tag tag;
+ tag.setGid("gid2");
+ tag.setName("name2");
+ tag.setType("type2");
TagCreateJob *createjob = new TagCreateJob(tag, this);
AKVERIFYEXEC(createjob);
//We usually pick up signals from the previous tests as well (due to server-side notification caching)
@@ -511,6 +587,19 @@ void TagTest::testMonitor()
}
{
+ QSignalSpy modifedSpy(&monitor, SIGNAL(tagChanged(Akonadi::Tag)));
+ QVERIFY(modifedSpy.isValid());
+ createdTag.setName("name3");
+
+ TagModifyJob *modJob = new TagModifyJob(createdTag, this);
+ AKVERIFYEXEC(modJob);
+ //We usually pick up signals from the previous tests as well (due to server-side notification caching)
+ QTRY_VERIFY(modifedSpy.count() >= 1);
+ QTRY_COMPARE(modifedSpy.last().first().value<Akonadi::Tag>().id(), createdTag.id());
+ QVERIFY(modifedSpy.last().first().value<Akonadi::Tag>().hasAttribute<Akonadi::TagAttribute>());
+ }
+
+ {
QSignalSpy removedSpy(&monitor, SIGNAL(tagRemoved(Akonadi::Tag)));
QVERIFY(removedSpy.isValid());
TagDeleteJob *deletejob = new TagDeleteJob(createdTag, this);
commit 334a7e40f334412aaec0b7aa74096b5aeb0b64ea
Author: l10n daemon script <scripty at kde.org>
Date: Wed Jul 30 04:20:17 2014 +0000
SVN_SILENT made messages (.desktop file)
Conflicts:
akonadi/tests/testsearchplugin/akonaditestsearchplugin.desktop
diff --git a/akonadi/tests/testsearchplugin/akonaditestsearchplugin.desktop b/akonadi/tests/testsearchplugin/akonaditestsearchplugin.desktop
index e291d38..4c0a2a8 100644
--- a/akonadi/tests/testsearchplugin/akonaditestsearchplugin.desktop
+++ b/akonadi/tests/testsearchplugin/akonaditestsearchplugin.desktop
@@ -13,7 +13,7 @@ Name[et]=Akonadi otsingu testplugin
Name[fi]=Akonadin hakuliitännäinen testaustarkoituksiin
Name[fr]=Module externe de test pour les recherches Akonadi
Name[hu]=Akonadi teszt keresés bÅvÃtmény
-Name[ia]=Plug-in de cerca de essayo de Akonadi
+Name[it]=Estensione di test per la ricerca di Akonadi
Name[it]=Plugin di ricerca di test per Akonadi
Name[ko]=Akonadi í
ì¤í¸ ê²ì íë¬ê·¸ì¸
Name[nb]=Akonadi test-tillegg for søk
commit 1fff9ae12a23bab248168d7a7c035677bd614854
Author: Montel Laurent <montel at kde.org>
Date: Tue Jul 29 13:19:28 2014 +0200
Fix crash
diff --git a/kabc/vcardparser/testread2.cpp b/kabc/vcardparser/testread2.cpp
index a670392..fb17b87 100644
--- a/kabc/vcardparser/testread2.cpp
+++ b/kabc/vcardparser/testread2.cpp
@@ -43,7 +43,7 @@ int main()
Addressee::List::iterator itr1;
Addressee::List::iterator itr2;
for ( itr1 = l.begin(), itr2 = parsed.begin();
- itr1 != l.end(); ++itr1, ++itr2 ) {
+ itr1 != l.end() && itr2 != parsed.end(); ++itr1, ++itr2 ) {
if ( ( *itr1 ).fullEmail() == ( *itr2 ).fullEmail() &&
( *itr1 ).organization() == ( *itr2 ).organization() &&
( *itr1 ).phoneNumbers() == ( *itr2 ).phoneNumbers() &&
commit 5cdfbdcb3695e75fe492c2a9b075358049f83038
Author: Sandro Knauà <knauss at kolabsys.com>
Date: Tue Jul 1 16:36:02 2014 +0200
Make MailClient interceptable
REVIEW: 119432
diff --git a/akonadi/calendar/freebusymanager.cpp b/akonadi/calendar/freebusymanager.cpp
index bf64dab..28359ac 100644
--- a/akonadi/calendar/freebusymanager.cpp
+++ b/akonadi/calendar/freebusymanager.cpp
@@ -913,7 +913,7 @@ void FreeBusyManager::mailFreeBusy(int daysToPublish, QWidget *parentWidget)
QPointer<PublishDialog> publishdlg = new PublishDialog();
if (publishdlg->exec() == QDialog::Accepted) {
// Send the mail
- MailScheduler *scheduler = new MailScheduler();
+ MailScheduler *scheduler = new MailScheduler(/*factory=*/0, this);
connect(scheduler, SIGNAL(transactionFinished(Akonadi::Scheduler::Result,QString))
, d, SLOT(processMailSchedulerResult(Akonadi::Scheduler::Result,QString)));
d->mParentWidgetForMailling = parentWidget;
diff --git a/akonadi/calendar/incidencechanger.cpp b/akonadi/calendar/incidencechanger.cpp
index aafa8d5..79d0f49 100644
--- a/akonadi/calendar/incidencechanger.cpp
+++ b/akonadi/calendar/incidencechanger.cpp
@@ -132,10 +132,11 @@ ConflictPreventer* ConflictPreventer::self()
return &sConflictPreventerPrivate->instance;
}
-IncidenceChanger::Private::Private(bool enableHistory, IncidenceChanger *qq) : q(qq)
+IncidenceChanger::Private::Private(bool enableHistory, ITIPHandlerComponentFactory *factory, IncidenceChanger *qq) : q(qq)
{
mLatestChangeId = 0;
mShowDialogsOnError = true;
+ mFactory = factory ? factory : new ITIPHandlerComponentFactory(this);
mHistory = enableHistory ? new History(this) : 0;
mUseHistory = enableHistory;
mDestinationPolicy = DestinationPolicyDefault;
@@ -423,7 +424,7 @@ bool IncidenceChanger::Private::handleInvitationsBeforeChange(const Change::Ptr
{
bool result = true;
if (mGroupwareCommunication) {
- ITIPHandlerHelper handler(change->parentWidget); // TODO make async
+ ITIPHandlerHelper handler(mFactory, change->parentWidget); // TODO make async
if (m_invitationPolicy == InvitationPolicySend) {
handler.setDefaultAction(ITIPHandlerHelper::ActionSendMessage);
@@ -510,7 +511,7 @@ bool IncidenceChanger::Private::handleInvitationsBeforeChange(const Change::Ptr
bool IncidenceChanger::Private::handleInvitationsAfterChange(const Change::Ptr &change)
{
if (change->useGroupwareCommunication) {
- ITIPHandlerHelper handler(change->parentWidget); // TODO make async
+ ITIPHandlerHelper handler(mFactory, change->parentWidget); // TODO make async
const bool alwaysSend = m_invitationPolicy == InvitationPolicySend;
const bool neverSend = m_invitationPolicy == InvitationPolicyDontSend;
@@ -571,7 +572,7 @@ bool IncidenceChanger::Private::handleInvitationsAfterChange(const Change::Ptr &
}
if (notifyOrganizer) {
- MailScheduler scheduler; // TODO make async
+ MailScheduler scheduler(mFactory, change->parentWidget); // TODO make async
scheduler.performTransaction(incidence, KCalCore::iTIPReply);
}
}
@@ -633,12 +634,18 @@ bool IncidenceChanger::Private::myAttendeeStatusChanged(const Incidence::Ptr &ne
}
IncidenceChanger::IncidenceChanger(QObject *parent) : QObject(parent)
- , d(new Private(/**history=*/true, this))
+ , d(new Private(/**history=*/true, /*factory=*/0, this))
+{
+}
+
+
+IncidenceChanger::IncidenceChanger(ITIPHandlerComponentFactory *factory, QObject *parent) : QObject(parent)
+ , d(new Private(/**history=*/true, factory, this))
{
}
IncidenceChanger::IncidenceChanger(bool enableHistory, QObject *parent) : QObject(parent)
- , d(new Private(enableHistory, this))
+ , d(new Private(enableHistory, /*factory=*/0, this))
{
}
@@ -1030,7 +1037,7 @@ void IncidenceChanger::setHistoryEnabled(bool enable)
if (d->mUseHistory != enable) {
d->mUseHistory = enable;
if (enable && !d->mHistory)
- d->mHistory = new History(this);
+ d->mHistory = new History(d);
}
}
diff --git a/akonadi/calendar/incidencechanger.h b/akonadi/calendar/incidencechanger.h
index 858e487..da1a8e7 100644
--- a/akonadi/calendar/incidencechanger.h
+++ b/akonadi/calendar/incidencechanger.h
@@ -22,6 +22,8 @@
#include "akonadi-calendar_export.h"
+#include "itiphandler.h"
+
#include <akonadi/item.h>
#include <akonadi/collection.h>
#include <kcalcore/incidence.h>
@@ -134,11 +136,21 @@ public:
/**
* Creates a new IncidenceChanger instance.
+ * creates a default ITIPHandlerComponentFactory object.
* @param parent parent QObject
*/
explicit IncidenceChanger(QObject *parent = 0);
/**
+ * Creates a new IncidenceChanger instance.
+ * @param factory factory for creating dialogs and the mail transport job. To create a default
+ * factory set factory == 0
+ * @param parent parent QObject
+ * @since 4.15
+ */
+ explicit IncidenceChanger(ITIPHandlerComponentFactory *factory, QObject *parent);
+
+ /**
* Destroys this IncidenceChanger instance.
*/
~IncidenceChanger();
diff --git a/akonadi/calendar/incidencechanger_p.h b/akonadi/calendar/incidencechanger_p.h
index 82bdfa1..eb08eb1 100644
--- a/akonadi/calendar/incidencechanger_p.h
+++ b/akonadi/calendar/incidencechanger_p.h
@@ -250,7 +250,7 @@ class IncidenceChanger::Private : public QObject
{
Q_OBJECT
public:
- explicit Private(bool enableHistory, IncidenceChanger *mIncidenceChanger);
+ explicit Private(bool enableHistory, ITIPHandlerComponentFactory *factory, IncidenceChanger *mIncidenceChanger);
~Private();
void loadCollections(); // async-loading of list of writable collections
@@ -350,6 +350,7 @@ public:
IncidenceChanger::InvitationPolicy m_invitationPolicy;
+ ITIPHandlerComponentFactory *mFactory;
private:
IncidenceChanger *q;
};
diff --git a/akonadi/calendar/itiphandler.cpp b/akonadi/calendar/itiphandler.cpp
index 2b72199..a4bc9f1 100644
--- a/akonadi/calendar/itiphandler.cpp
+++ b/akonadi/calendar/itiphandler.cpp
@@ -38,6 +38,7 @@
#include <kcalutils/stringify.h>
#include <kpimidentities/identitymanager.h>
+#include <mailtransport/messagequeuejob.h>
#include <mailtransport/transportmanager.h>
#include <KMessageBox>
@@ -59,8 +60,31 @@ GroupwareUiDelegate::~GroupwareUiDelegate()
{
}
+ITIPHandlerComponentFactory::ITIPHandlerComponentFactory(QObject *parent)
+ : QObject(parent)
+{
+}
+
+ITIPHandlerComponentFactory::~ITIPHandlerComponentFactory()
+{
+}
+
+MailTransport::MessageQueueJob *ITIPHandlerComponentFactory::createMessageQueueJob(const KCalCore::IncidenceBase::Ptr &incidence, const KPIMIdentities::Identity &identity, QObject *parent)
+{
+ Q_UNUSED(incidence);
+ Q_UNUSED(identity);
+ return new MailTransport::MessageQueueJob(parent);
+}
+
ITIPHandler::ITIPHandler(QObject *parent) : QObject(parent)
- , d(new Private(this))
+ , d(new Private(/*factory=*/0, this))
+{
+ qRegisterMetaType<Akonadi::ITIPHandler::Result>("Akonadi::ITIPHandler::Result");
+}
+
+
+ITIPHandler::ITIPHandler(ITIPHandlerComponentFactory *factory, QObject *parent) : QObject(parent)
+ , d(new Private(factory, this))
{
qRegisterMetaType<Akonadi::ITIPHandler::Result>("Akonadi::ITIPHandler::Result");
}
@@ -347,7 +371,7 @@ void ITIPHandler::sendAsICalendar(const KCalCore::Incidence::Ptr &originalIncide
const QString from = Akonadi::CalendarUtils::email();
const bool bccMe = Akonadi::CalendarSettings::self()->bcc();
const QString messageText = format.createScheduleMessage(incidence, KCalCore::iTIPRequest);
- MailClient *mailer = new MailClient();
+ MailClient *mailer = new MailClient(d->m_factory);
d->m_queuedInvitation.incidence = incidence;
connect(mailer, SIGNAL(finished(Akonadi::MailClient::Result,QString)),
d, SLOT(finishSendAsICalendar(Akonadi::MailScheduler::Result,QString)));
diff --git a/akonadi/calendar/itiphandler.h b/akonadi/calendar/itiphandler.h
index 5c581e7..dcbc6b6 100644
--- a/akonadi/calendar/itiphandler.h
+++ b/akonadi/calendar/itiphandler.h
@@ -35,6 +35,14 @@
#include <QString>
#include <QWidget>
+namespace MailTransport {
+ class MessageQueueJob;
+}
+
+namespace KPIMIdentities {
+ class Identity;
+}
+
namespace Akonadi {
/**
@@ -52,6 +60,33 @@ public:
};
/**
+ * @short Factory to create MailTransport::MessageQueueJob jobs.
+ * @since 4.15
+ */
+class AKONADI_CALENDAR_EXPORT ITIPHandlerComponentFactory : public QObject
+{
+ Q_OBJECT
+public:
+ /*
+ * Created a new ITIPHandlerComponentFactory object.
+ */
+ explicit ITIPHandlerComponentFactory(QObject *parent = 0);
+
+ /*
+ * deletes the object.
+ */
+ virtual ~ITIPHandlerComponentFactory();
+
+ /*
+ * @return A new MailTransport::MessageQueueJob object
+ * @param incidence related to the mail
+ * @param identity that is the mail sender
+ * @param parent of the MailTransport::MessageQueueJob object
+ */
+ virtual MailTransport::MessageQueueJob* createMessageQueueJob(const KCalCore::IncidenceBase::Ptr &incidence, const KPIMIdentities::Identity &identity, QObject *parent = 0);
+};
+
+/**
* @short Handles sending of iTip messages aswell as processing incoming ones.
* @since 4.11
*/
@@ -67,10 +102,17 @@ public:
/**
* Creates a new ITIPHandler instance.
+ * creates a default ITIPHandlerComponentFactory object.
*/
explicit ITIPHandler(QObject *parent = 0);
/**
+ * Create a new ITIPHandler instance.
+ * @param factory is set to 0 a new factory is created.
+ * @since 4.15
+ */
+ explicit ITIPHandler(ITIPHandlerComponentFactory *factory, QObject *parent);
+ /**
* Destroys this instance.
*/
~ITIPHandler();
diff --git a/akonadi/calendar/itiphandler_p.cpp b/akonadi/calendar/itiphandler_p.cpp
index e62b72b..db1de2f 100644
--- a/akonadi/calendar/itiphandler_p.cpp
+++ b/akonadi/calendar/itiphandler_p.cpp
@@ -25,15 +25,17 @@
using namespace Akonadi;
-ITIPHandler::Private::Private(ITIPHandler *qq) : m_calendarLoadError(false)
- , m_scheduler(new MailScheduler(qq))
+ITIPHandler::Private::Private(ITIPHandlerComponentFactory *factory, ITIPHandler *qq) : m_calendarLoadError(false)
+ , m_factory(factory ? factory : new ITIPHandlerComponentFactory(this))
+ , m_scheduler(new MailScheduler(m_factory, qq))
, m_method(KCalCore::iTIPNoMethod)
- , m_helper(new ITIPHandlerHelper()) //TODO parent
+ , m_helper(new ITIPHandlerHelper(m_factory))
, m_currentOperation(OperationNone)
, m_uiDelegate(0)
, m_showDialogsOnError(true)
, q(qq)
{
+ m_helper->setParent(this);
connect(m_scheduler, SIGNAL(transactionFinished(Akonadi::Scheduler::Result,QString)),
SLOT(onSchedulerFinished(Akonadi::Scheduler::Result,QString)));
diff --git a/akonadi/calendar/itiphandler_p.h b/akonadi/calendar/itiphandler_p.h
index 35e895a..63040b2 100644
--- a/akonadi/calendar/itiphandler_p.h
+++ b/akonadi/calendar/itiphandler_p.h
@@ -58,7 +58,7 @@ class ITIPHandler::Private : public QObject
{
Q_OBJECT
public:
- Private(ITIPHandler *q);
+ Private(ITIPHandlerComponentFactory *factory, ITIPHandler *q);
void finishProcessiTIPMessage(Akonadi::MailScheduler::Result, const QString &errorMessage);
void finishSendiTIPMessage(Akonadi::MailScheduler::Result, const QString &errorMessage);
@@ -74,6 +74,7 @@ public:
Invitation m_queuedInvitation;
bool m_calendarLoadError;
CalendarBase::Ptr m_calendar;
+ ITIPHandlerComponentFactory *m_factory;
MailScheduler *m_scheduler;
KCalCore::Incidence::Ptr m_incidence;
KCalCore::iTIPMethod m_method; // METHOD field of ical rfc of incoming invitation
diff --git a/akonadi/calendar/itiphandlerhelper_p.cpp b/akonadi/calendar/itiphandlerhelper_p.cpp
index ee3b68a..ba7e2c2 100644
--- a/akonadi/calendar/itiphandlerhelper_p.cpp
+++ b/akonadi/calendar/itiphandlerhelper_p.cpp
@@ -148,10 +148,10 @@ bool ITIPHandlerHelper::weNeedToSendMailFor(const KCalCore::Incidence::Ptr &inci
incidence->attendees().first()->email() != incidence->organizer()->email();
}
-ITIPHandlerHelper::ITIPHandlerHelper(QWidget *parent)
+ITIPHandlerHelper::ITIPHandlerHelper(ITIPHandlerComponentFactory *factory, QWidget *parent)
: mDefaultAction(ITIPHandlerHelper::ActionAsk)
, mParent(parent)
- , m_scheduler(new MailScheduler(parent))
+ , m_scheduler(new MailScheduler(factory, parent))
, m_status(StatusNone)
{
connect(m_scheduler, SIGNAL(transactionFinished(Akonadi::Scheduler::Result,QString)),
diff --git a/akonadi/calendar/itiphandlerhelper_p.h b/akonadi/calendar/itiphandlerhelper_p.h
index 11bc6de..6b8ee6d 100644
--- a/akonadi/calendar/itiphandlerhelper_p.h
+++ b/akonadi/calendar/itiphandlerhelper_p.h
@@ -67,7 +67,7 @@ class ITIPHandlerHelper : public QObject
{
Q_OBJECT
public:
- explicit ITIPHandlerHelper(QWidget *parent = 0); // TODO
+ explicit ITIPHandlerHelper(ITIPHandlerComponentFactory *factory, QWidget *parent = 0);
~ITIPHandlerHelper();
enum SendResult {
diff --git a/akonadi/calendar/mailclient_p.cpp b/akonadi/calendar/mailclient_p.cpp
index c08e75e..0d71b78 100644
--- a/akonadi/calendar/mailclient_p.cpp
+++ b/akonadi/calendar/mailclient_p.cpp
@@ -45,10 +45,9 @@
using namespace Akonadi;
-bool Akonadi::MailClient::sRunningUnitTests = false;
-UnitTestResult::List MailClient::sUnitTestResults;
-MailClient::MailClient(QObject *parent) : QObject(parent)
+MailClient::MailClient(ITIPHandlerComponentFactory *factory, QObject *parent) : QObject(parent)
+ , mFactory(factory ? factory : new ITIPHandlerComponentFactory(this))
{
}
@@ -124,7 +123,7 @@ void MailClient::mailAttendees(const KCalCore::IncidenceBase::Ptr &incidence,
const QString body = KCalUtils::IncidenceFormatter::mailBodyStr(incidence,
KSystemTimeZones::local());
- send(identity, from, to, cc, subject, body, false, bccMe, attachment, mailTransport);
+ send(incidence, identity, from, to, cc, subject, body, false, bccMe, attachment, mailTransport);
}
void MailClient::mailOrganizer(const KCalCore::IncidenceBase::Ptr &incidence,
@@ -148,7 +147,7 @@ void MailClient::mailOrganizer(const KCalCore::IncidenceBase::Ptr &incidence,
const QString body = KCalUtils::IncidenceFormatter::mailBodyStr(incidence,
KSystemTimeZones::local());
- send(identity, from, to, QString(), subject, body, false, bccMe, attachment, mailTransport);
+ send(incidence, identity, from, to, QString(), subject, body, false, bccMe, attachment, mailTransport);
}
void MailClient::mailTo(const KCalCore::IncidenceBase::Ptr &incidence,
@@ -169,7 +168,7 @@ void MailClient::mailTo(const KCalCore::IncidenceBase::Ptr &incidence,
const QString body = KCalUtils::IncidenceFormatter::mailBodyStr(incidence,
KSystemTimeZones::local());
- send(identity, from, recipients, QString(), subject, body, false,
+ send(incidence, identity, from, recipients, QString(), subject, body, false,
bccMe, attachment, mailTransport);
}
@@ -184,13 +183,13 @@ static QStringList extractEmailAndNormalize(const QString &email)
return normalizedEmail;
}
-void MailClient::send(const KPIMIdentities::Identity &identity,
+void MailClient::send(const KCalCore::IncidenceBase::Ptr &incidence,
+ const KPIMIdentities::Identity &identity,
const QString &from, const QString &_to,
const QString &cc, const QString &subject,
const QString &body, bool hidden, bool bccMe,
const QString &attachment, const QString &mailTransport)
{
- Q_UNUSED(identity);
Q_UNUSED(hidden);
UnitTestResult unitTestResult;
@@ -215,9 +214,6 @@ void MailClient::send(const KPIMIdentities::Identity &identity,
<< "\nAttachment:\n" << attachment
<< "\nmailTransport: " << mailTransport;
- QTime timer;
- timer.start();
-
MailTransport::Transport *transport =
MailTransport::TransportManager::self()->transportByName(mailTransport);
@@ -327,7 +323,7 @@ void MailClient::send(const KPIMIdentities::Identity &identity,
message->assemble();
// Put the newly created item in the MessageQueueJob.
- MailTransport::MessageQueueJob *qjob = new MailTransport::MessageQueueJob(this);
+ MailTransport::MessageQueueJob *qjob = mFactory->createMessageQueueJob(incidence, identity, this);
qjob->transportAttribute().setTransportId(transportId);
qjob->sentBehaviourAttribute().setSentBehaviour(
MailTransport::SentBehaviourAttribute::MoveToDefaultSentCollection);
@@ -359,25 +355,9 @@ void MailClient::send(const KPIMIdentities::Identity &identity,
qjob->addressAttribute().setBcc(bccStringList);
}
- if (sRunningUnitTests) {
- unitTestResult.message = message;
- unitTestResult.from = finalFrom;
- unitTestResult.to = toStringList;
- unitTestResult.cc = ccStringList;
- unitTestResult.bcc = bccStringList;
- unitTestResult.transportId = transportId;
- sUnitTestResults << unitTestResult;
- qjob->deleteLater();
-
- QMetaObject::invokeMethod(this, "finished", Qt::QueuedConnection,
- Q_ARG(Akonadi::MailClient::Result, ResultSuccess),
- Q_ARG(QString, QString()));
-
- } else {
- qjob->setMessage(message);
- connect(qjob, SIGNAL(finished(KJob*)), SLOT(handleQueueJobFinished(KJob*)));
- qjob->start();
- }
+ qjob->setMessage(message);
+ connect(qjob, SIGNAL(finished(KJob*)), SLOT(handleQueueJobFinished(KJob*)));
+ qjob->start();
}
void MailClient::handleQueueJobFinished(KJob *job)
@@ -387,7 +367,6 @@ void MailClient::handleQueueJobFinished(KJob *job)
emit finished(ResultQueueJobError, i18n("Error queuing message in outbox: %1",
job->errorText()));
} else {
- kDebug() << "Mail queued";
emit finished(ResultSuccess, QString());
}
}
diff --git a/akonadi/calendar/mailclient_p.h b/akonadi/calendar/mailclient_p.h
index c284806..702a0e0 100644
--- a/akonadi/calendar/mailclient_p.h
+++ b/akonadi/calendar/mailclient_p.h
@@ -23,6 +23,7 @@
#define AKONADI_MAILCLIENT_P_H
#include "akonadi-calendar_export.h"
+#include "itiphandler.h"
#include <kcalcore/incidencebase.h>
#include <kmime/kmime_message.h>
#include <QObject>
@@ -45,19 +46,19 @@ class Identity;
class KJob;
namespace Akonadi {
-
#ifdef PLEASE_TEST_INVITATIONS
#define EXPORT_MAILCLIENT AKONADI_CALENDAR_EXPORT
#else
#define EXPORT_MAILCLIENT
#endif
+class ITIPHandlerComponentFactory;
+
class EXPORT_MAILCLIENT MailClient : public QObject
{
Q_OBJECT
public:
-
enum Result {
ResultSuccess,
ResultNoAttendees,
@@ -67,29 +68,30 @@ public:
ResultQueueJobError
};
- explicit MailClient(QObject *parent = 0);
+ explicit MailClient(ITIPHandlerComponentFactory *factory, QObject *parent = 0);
~MailClient();
- void mailAttendees(const KCalCore::IncidenceBase::Ptr &,
+ void mailAttendees(const KCalCore::IncidenceBase::Ptr &incidence,
const KPIMIdentities::Identity &identity,
bool bccMe, const QString &attachment=QString(),
const QString &mailTransport = QString());
- void mailOrganizer(const KCalCore::IncidenceBase::Ptr &,
+ void mailOrganizer(const KCalCore::IncidenceBase::Ptr &incidence,
const KPIMIdentities::Identity &identity,
const QString &from, bool bccMe,
const QString &attachment=QString(),
const QString &sub=QString(),
const QString &mailTransport = QString());
- void mailTo(const KCalCore::IncidenceBase::Ptr &, const KPIMIdentities::Identity &identity,
+ void mailTo(const KCalCore::IncidenceBase::Ptr &incidence, const KPIMIdentities::Identity &identity,
const QString &from, bool bccMe, const QString &recipients,
- const QString &attachment=QString(), const QString &mailTransport = QString());
+ const QString &attachment = QString(), const QString &mailTransport = QString());
/**
Sends mail with specified from, to and subject field and body as text.
If bcc is set, send a blind carbon copy to the sender
+ @param incidence is the incidence, that is sended
@param identity is the Identity of the sender
@param from is the address of the sender of the message
@param to a list of addresses to receive the message
@@ -103,7 +105,7 @@ public:
@param mailTransport defines the mail transport method. See here the
kdepimlibs/mailtransport library.
*/
- void send(const KPIMIdentities::Identity &identity, const QString &from, const QString &to,
+ void send(const KCalCore::IncidenceBase::Ptr &incidence, const KPIMIdentities::Identity &identity, const QString &from, const QString &to,
const QString &cc, const QString &subject, const QString &body,
bool hidden=false, bool bccMe=false, const QString &attachment=QString(),
const QString &mailTransport = QString());
@@ -116,12 +118,11 @@ Q_SIGNALS:
public:
// For unit-test usage, since we can't depend on kdepim-runtime on jenkins
- static UnitTestResult::List sUnitTestResults;
- static bool sRunningUnitTests;
+ ITIPHandlerComponentFactory *mFactory;
};
}
Q_DECLARE_METATYPE(Akonadi::MailClient::Result)
-#endif
+#endif
\ No newline at end of file
diff --git a/akonadi/calendar/mailscheduler_p.cpp b/akonadi/calendar/mailscheduler_p.cpp
index cfeebd0..907a11a 100644
--- a/akonadi/calendar/mailscheduler_p.cpp
+++ b/akonadi/calendar/mailscheduler_p.cpp
@@ -44,12 +44,12 @@ public:
MailClient *m_mailer;
};
-MailScheduler::MailScheduler(QObject *parent) : Scheduler(parent)
+MailScheduler::MailScheduler(ITIPHandlerComponentFactory *factory, QObject *parent) : Scheduler(parent)
, d(new Private())
-
{
d->m_identityManager = new IdentityManager(/*ro=*/true, this);
- d->m_mailer = new MailClient();
+ d->m_mailer = new MailClient(factory, parent);
+
connect(d->m_mailer, SIGNAL(finished(Akonadi::MailClient::Result,QString)),
SLOT(onMailerFinished(Akonadi::MailClient::Result,QString)));
}
diff --git a/akonadi/calendar/mailscheduler_p.h b/akonadi/calendar/mailscheduler_p.h
index cdbdd87..58c8c4f 100644
--- a/akonadi/calendar/mailscheduler_p.h
+++ b/akonadi/calendar/mailscheduler_p.h
@@ -47,7 +47,7 @@ public:
/**
* @param calendar Must be a valid and loaded calendar.
*/
- explicit MailScheduler(QObject *parent = 0);
+ explicit MailScheduler(ITIPHandlerComponentFactory *factory, QObject *parent = 0);
~MailScheduler();
/** reimp */
@@ -63,6 +63,7 @@ public:
KCalCore::iTIPMethod method,
const QString &recipients);
+
/** Returns the directory where the free-busy information is stored */
/** reimp*/ QString freeBusyDir() const;
diff --git a/akonadi/calendar/tests/itiphandlertest.cpp b/akonadi/calendar/tests/itiphandlertest.cpp
index f1167e1..92c9e37 100644
--- a/akonadi/calendar/tests/itiphandlertest.cpp
+++ b/akonadi/calendar/tests/itiphandlertest.cpp
@@ -30,6 +30,7 @@
#include <akonadi/collectionfetchscope.h>
#include <akonadi/itemfetchscope.h>
#include <akonadi/qtest_akonadi.h>
+#include <mailtransport/messagequeuejob.h>
#include <kcalcore/event.h>
@@ -47,15 +48,61 @@ Q_DECLARE_METATYPE(QList<int>)
static const char *s_ourEmail = "unittests at dev.nul"; // change also in kdepimlibs/akonadi/calendar/tests/unittestenv/kdehome/share/config
static const char *s_outEmail2 = "identity2 at kde.org";
+class FakeMessageQueueJob : public MailTransport::MessageQueueJob
+{
+public:
+ explicit FakeMessageQueueJob(QObject *parent = 0) : MailTransport::MessageQueueJob(parent)
+ {
+ }
+
+ virtual void start()
+ {
+ UnitTestResult unitTestResult;
+ unitTestResult.message = message();
+ unitTestResult.from = addressAttribute().from();
+ unitTestResult.to = addressAttribute().to();
+ unitTestResult.cc = addressAttribute().cc();
+ unitTestResult.bcc = addressAttribute().bcc();
+ unitTestResult.transportId = transportAttribute().transportId();
+ FakeMessageQueueJob::sUnitTestResults << unitTestResult;
+
+ setError(Akonadi::MailClient::ResultSuccess);
+ setErrorText(QString());
+
+ emitResult();
+ }
+
+ static UnitTestResult::List sUnitTestResults;
+};
+
+
+UnitTestResult::List FakeMessageQueueJob::sUnitTestResults;
+
+class FakeITIPHandlerComponentFactory : public ITIPHandlerComponentFactory
+{
+public:
+ FakeITIPHandlerComponentFactory(QObject *parent = 0) : ITIPHandlerComponentFactory(parent)
+ {
+ }
+
+ virtual MailTransport::MessageQueueJob *createMessageQueueJob(const KCalCore::IncidenceBase::Ptr &incidence, const KPIMIdentities::Identity &identity, QObject *parent = 0)
+ {
+ Q_UNUSED(incidence);
+ Q_UNUSED(identity);
+ return new FakeMessageQueueJob(parent);
+ }
+};
+
+
+
void ITIPHandlerTest::initTestCase()
{
AkonadiTest::checkTestIsIsolated();
m_pendingItipMessageSignal = 0;
m_pendingIncidenceChangerSignal = 0;
- MailClient::sRunningUnitTests = true;
m_itipHandler = 0;
m_cancelExpected = false;
- m_changer = new IncidenceChanger(this);
+ m_changer = new IncidenceChanger(new FakeITIPHandlerComponentFactory(this), this);
m_changer->setHistoryEnabled(false);
m_changer->setGroupwareCommunication(true);
m_changer->setInvitationPolicy(IncidenceChanger::InvitationPolicySend); // don't show dialogs
@@ -190,7 +237,7 @@ void ITIPHandlerTest::testProcessITIPMessage()
QFETCH(int, expectedNumIncidences);
QFETCH(KCalCore::Attendee::PartStat, expectedPartStat);
- MailClient::sUnitTestResults.clear();
+ FakeMessageQueueJob::sUnitTestResults.clear();
createITIPHandler();
m_expectedResult = expectedResult;
@@ -262,7 +309,7 @@ void ITIPHandlerTest::testProcessITIPMessages()
const QString receiver = QLatin1String(s_ourEmail);
- MailClient::sUnitTestResults.clear();
+ FakeMessageQueueJob::sUnitTestResults.clear();
createITIPHandler();
m_expectedResult = Akonadi::ITIPHandler::ResultSuccess;
@@ -319,7 +366,7 @@ void ITIPHandlerTest::testProcessITIPMessageCancel()
QFETCH(QString, incidenceUid);
const QString receiver = QLatin1String(s_ourEmail);
- MailClient::sUnitTestResults.clear();
+ FakeMessageQueueJob::sUnitTestResults.clear();
createITIPHandler();
m_expectedResult = Akonadi::ITIPHandler::ResultSuccess;
@@ -476,7 +523,7 @@ void ITIPHandlerTest::testOutgoingInvitations()
KCalCore::Incidence::Ptr incidence = item.payload<KCalCore::Incidence::Ptr>();
m_pendingIncidenceChangerSignal = 1;
- MailClient::sUnitTestResults.clear();
+ FakeMessageQueueJob::sUnitTestResults.clear();
m_changer->setInvitationPolicy(invitationPolicy);
m_cancelExpected = userCancels;
@@ -485,7 +532,7 @@ void ITIPHandlerTest::testOutgoingInvitations()
case IncidenceChanger::ChangeTypeCreate:
m_changer->createIncidence(incidence, mCollection);
waitForIt();
- QCOMPARE(MailClient::sUnitTestResults.count(), expectedEmailCount);
+ QCOMPARE(FakeMessageQueueJob::sUnitTestResults.count(), expectedEmailCount);
break;
case IncidenceChanger::ChangeTypeModify: {
// Create if first, so we have something to modify
@@ -493,7 +540,7 @@ void ITIPHandlerTest::testOutgoingInvitations()
m_changer->createIncidence(incidence, mCollection);
waitForIt();
m_changer->setGroupwareCommunication(true);
- QCOMPARE(MailClient::sUnitTestResults.count(), 0);
+ QCOMPARE(FakeMessageQueueJob::sUnitTestResults.count(), 0);
QVERIFY(mLastInsertedItem.isValid());
m_pendingIncidenceChangerSignal = 1;
@@ -502,7 +549,7 @@ void ITIPHandlerTest::testOutgoingInvitations()
int changeId = m_changer->modifyIncidence(mLastInsertedItem, oldIncidence);
QVERIFY(changeId != 1);
waitForIt();
- QCOMPARE(MailClient::sUnitTestResults.count(), expectedEmailCount);
+ QCOMPARE(FakeMessageQueueJob::sUnitTestResults.count(), expectedEmailCount);
}
break;
case IncidenceChanger::ChangeTypeDelete:
@@ -511,13 +558,13 @@ void ITIPHandlerTest::testOutgoingInvitations()
m_changer->createIncidence(incidence, mCollection);
waitForIt();
m_changer->setGroupwareCommunication(true);
- QCOMPARE(MailClient::sUnitTestResults.count(), 0);
+ QCOMPARE(FakeMessageQueueJob::sUnitTestResults.count(), 0);
QVERIFY(mLastInsertedItem.isValid());
m_pendingIncidenceChangerSignal = 1;
m_changer->deleteIncidence(mLastInsertedItem);
waitForIt();
- QCOMPARE(MailClient::sUnitTestResults.count(), expectedEmailCount);
+ QCOMPARE(FakeMessageQueueJob::sUnitTestResults.count(), expectedEmailCount);
break;
default:
Q_ASSERT(false);
@@ -571,7 +618,7 @@ void ITIPHandlerTest::cleanup()
void ITIPHandlerTest::createITIPHandler()
{
- m_itipHandler = new Akonadi::ITIPHandler();
+ m_itipHandler = new Akonadi::ITIPHandler(new FakeITIPHandlerComponentFactory(this), this);
m_itipHandler->setShowDialogsOnError(false);
connect(m_itipHandler, SIGNAL(iTipMessageProcessed(Akonadi::ITIPHandler::Result,QString)),
SLOT(oniTipMessageProcessed(Akonadi::ITIPHandler::Result,QString)));
@@ -594,7 +641,7 @@ void ITIPHandlerTest::processItip(const QString &icaldata, const QString &receiv
// 0 e-mails are sent because the status update e-mail is sent by
// kmail's text_calendar.cpp.
- QCOMPARE(MailClient::sUnitTestResults.count(), 0);
+ QCOMPARE(FakeMessageQueueJob::sUnitTestResults.count(), 0);
items = calendarItems();
@@ -676,7 +723,6 @@ void ITIPHandlerTest::onModifyFinished(int changeId, const Item &item,
if (m_pendingIncidenceChangerSignal == 0) {
stopWaiting();
}
- kDebug() << "Got result " << resultCode << m_cancelExpected;
QCOMPARE(resultCode, m_cancelExpected ? IncidenceChanger::ResultCodeUserCanceled
: IncidenceChanger::ResultCodeSuccess);
}
diff --git a/akonadi/calendar/tests/mailclienttest.cpp b/akonadi/calendar/tests/mailclienttest.cpp
index 8235b31..4417bfa 100644
--- a/akonadi/calendar/tests/mailclienttest.cpp
+++ b/akonadi/calendar/tests/mailclienttest.cpp
@@ -38,6 +38,50 @@ using namespace Akonadi;
Q_DECLARE_METATYPE(KPIMIdentities::Identity)
Q_DECLARE_METATYPE(KCalCore::Incidence::Ptr)
+class FakeMessageQueueJob : public MailTransport::MessageQueueJob
+{
+public:
+ explicit FakeMessageQueueJob(QObject *parent = 0) : MailTransport::MessageQueueJob(parent)
+ {
+ }
+
+ virtual void start()
+ {
+ UnitTestResult unitTestResult;
+ unitTestResult.message = message();
+ unitTestResult.from = addressAttribute().from();
+ unitTestResult.to = addressAttribute().to();
+ unitTestResult.cc = addressAttribute().cc();
+ unitTestResult.bcc = addressAttribute().bcc();
+ unitTestResult.transportId = transportAttribute().transportId();
+ FakeMessageQueueJob::sUnitTestResults << unitTestResult;
+
+ setError(Akonadi::MailClient::ResultSuccess);
+ setErrorText(QString());
+
+ emitResult();
+ }
+
+ static UnitTestResult::List sUnitTestResults;
+};
+
+UnitTestResult::List FakeMessageQueueJob::sUnitTestResults;
+
+class FakeITIPHandlerComponentFactory : public ITIPHandlerComponentFactory
+{
+public:
+ explicit FakeITIPHandlerComponentFactory(QObject *parent = 0) : ITIPHandlerComponentFactory(parent)
+ {
+ }
+
+ virtual MailTransport::MessageQueueJob *createMessageQueueJob(const KCalCore::IncidenceBase::Ptr &incidence, const KPIMIdentities::Identity &identity, QObject *parent = 0)
+ {
+ Q_UNUSED(incidence);
+ Q_UNUSED(identity);
+ return new FakeMessageQueueJob(parent);
+ }
+};
+
class MailClientTest : public QObject
{
Q_OBJECT
@@ -55,8 +99,7 @@ private Q_SLOTS:
AkonadiTest::checkTestIsIsolated();
mPendingSignals = 0;
- mMailClient = new MailClient(this);
- mMailClient->sRunningUnitTests = true;
+ mMailClient = new MailClient(new FakeITIPHandlerComponentFactory(this), this);
mLastResult = MailClient::ResultSuccess;
connect(mMailClient, SIGNAL(finished(Akonadi::MailClient::Result,QString)),
SLOT(handleFinished(Akonadi::MailClient::Result,QString)));
@@ -193,7 +236,8 @@ private Q_SLOTS:
QFETCH(QStringList, expectedToList);
QFETCH(QStringList, expectedCcList);
QFETCH(QStringList, expectedBccList);
- mMailClient->sUnitTestResults.clear();
+
+ FakeMessageQueueJob::sUnitTestResults.clear();
mPendingSignals = 1;
mMailClient->mailAttendees(incidence, identity, bccMe, attachment, transport);
@@ -206,10 +250,10 @@ private Q_SLOTS:
}
UnitTestResult unitTestResult;
- if (mMailClient->sUnitTestResults.isEmpty()) {
+ if (FakeMessageQueueJob::sUnitTestResults.isEmpty()) {
qDebug() << "mail results are empty";
} else {
- unitTestResult = mMailClient->sUnitTestResults.first();
+ unitTestResult = FakeMessageQueueJob::sUnitTestResults.first();
}
if (expectedTransportId != -1 && unitTestResult.transportId != expectedTransportId) {
@@ -287,14 +331,14 @@ private Q_SLOTS:
QFETCH(QStringList, expectedToList);
QFETCH(QStringList, expectedBccList);
QFETCH(QString, expectedSubject);
- mMailClient->sUnitTestResults.clear();
+ FakeMessageQueueJob::sUnitTestResults.clear();
mPendingSignals = 1;
mMailClient->mailOrganizer(incidence, identity, from, bccMe, attachment, subject, transport);
waitForSignals();
QCOMPARE(mLastResult, expectedResult);
- UnitTestResult unitTestResult = mMailClient->sUnitTestResults.first();
+ UnitTestResult unitTestResult = FakeMessageQueueJob::sUnitTestResults.first();
if (expectedTransportId != -1)
QCOMPARE(unitTestResult.transportId, expectedTransportId);
@@ -354,13 +398,13 @@ private Q_SLOTS:
QFETCH(QString, expectedFrom);
QFETCH(QStringList, expectedToList);
QFETCH(QStringList, expectedBccList);
- mMailClient->sUnitTestResults.clear();
+ FakeMessageQueueJob::sUnitTestResults.clear();
mPendingSignals = 1;
mMailClient->mailTo(incidence, identity, from, bccMe, recipients, attachment, transport);
waitForSignals();
QCOMPARE(mLastResult, expectedResult);
- UnitTestResult unitTestResult = mMailClient->sUnitTestResults.first();
+ UnitTestResult unitTestResult = FakeMessageQueueJob::sUnitTestResults.first();
if (expectedTransportId != -1)
QCOMPARE(unitTestResult.transportId, expectedTransportId);
commit eccf06218235cebdafb53cd74ec97c98471f96f8
Author: Dan Vrátil <dvratil at redhat.com>
Date: Tue Jul 29 11:26:15 2014 +0200
CollectionSync: split transaction into multiple smaller transactions
The transaction actually starts a database transaction on Akonadi side and
it turns out that DB backends don't handle transactions with thousands of
INSERT statements very well (we noticed a big performance drop when executing
the queries).
This patch splits the one big transaction into smaller transactions of 100
operations (CollectionCreateJob). As result, creating 100,000 collections
takes much less time.
REVIEW: 119491
diff --git a/akonadi/collectionsync.cpp b/akonadi/collectionsync.cpp
index 1a9f760..c9afbfb 100644
--- a/akonadi/collectionsync.cpp
+++ b/akonadi/collectionsync.cpp
@@ -503,6 +503,13 @@ public:
create->setProperty(LOCAL_NODE, QVariant::fromValue(localParent));
create->setProperty(REMOTE_NODE, QVariant::fromValue(remoteNode));
connect(create, SIGNAL(result(KJob*)), q, SLOT(createLocalCollectionResult(KJob*)));
+
+ // Commit transaction after every 100 collections are created,
+ // otherwise it overlads database journal and things get veeery slow
+ if (pendingJobs % 100 == 0) {
+ currentTransaction->commit();
+ createTransaction();
+ }
}
}
@@ -618,6 +625,14 @@ public:
checkDone();
}
+ void createTransaction()
+ {
+ currentTransaction = new TransactionSequence(q);
+ currentTransaction->setAutomaticCommittingEnabled(false);
+ q->connect(currentTransaction, SIGNAL(finished(KJob*)),
+ q, SLOT(transactionSequenceResult(KJob*)));
+ }
+
/**
Check update necessity.
*/
@@ -632,9 +647,7 @@ public:
// Since there are differences with the remote collections we need to sync. Start a transaction here.
Q_ASSERT(!currentTransaction);
- currentTransaction = new TransactionSequence(q);
- currentTransaction->setAutomaticCommittingEnabled(false);
- q->connect(currentTransaction, SIGNAL(result(KJob*)), SLOT(transactionSequenceResult(KJob*)));
+ createTransaction();
// Now that a transaction is started we need to fetch local collections again and do the update
q->doStart();
@@ -647,7 +660,11 @@ public:
return; // handled by the base class
}
- q->emitResult();
+ // If this was the last transaction, then finish, otherwise there's
+ // a new transaction in the queue already
+ if (job == currentTransaction) {
+ q->emitResult();
+ }
}
/**
@@ -814,6 +831,7 @@ void CollectionSync::setRemoteCollections(const Collection::List &changedCollect
void CollectionSync::doStart()
{
d->resetNodeTree();
+ d->knownLocalCollections = 0;
Job *parent = (d->currentTransaction ? static_cast<Job *>(d->currentTransaction) : static_cast<Job *>(this));
CollectionFetchJob *job = new CollectionFetchJob(Collection::root(), CollectionFetchJob::Recursive, parent);
job->fetchScope().setResource(d->resourceId);
commit 3380e815ee9a326f07bf18df42ea47e90657ced9
Author: Dan Vrátil <dvratil at redhat.com>
Date: Fri Jul 25 12:11:25 2014 +0200
TagTest: add test to test RID isolation
This case tests whether tags are correctly merged when created from
two different resources with different RIDs, and whether the RID is
only exposed to resource that owns it.
diff --git a/akonadi/tests/tagtest.cpp b/akonadi/tests/tagtest.cpp
index f3e2c96..40fe12b 100644
--- a/akonadi/tests/tagtest.cpp
+++ b/akonadi/tests/tagtest.cpp
@@ -54,6 +54,7 @@ private Q_SLOTS:
void testCreateMerge();
void testAttributes();
void testTagItem();
+ void testRIDIsolation();
void testModifyItemWithTagByGID();
void testModifyItemWithTagByRID();
void testMonitor();
@@ -135,6 +136,65 @@ void TagTest::testRID()
}
}
+void TagTest::testRIDIsolation()
+{
+ {
+ ResourceSelectJob *select = new ResourceSelectJob("akonadi_knut_resource_0");
+ AKVERIFYEXEC(select);
+ }
+
+ Tag tag;
+ tag.setGid("gid");
+ tag.setType("mytype");
+ tag.setRemoteId("rid_0");
+
+ TagCreateJob *createJob = new TagCreateJob(tag, this);
+ AKVERIFYEXEC(createJob);
+ QVERIFY(createJob->tag().isValid());
+
+ qint64 tagId;
+ {
+ TagFetchJob *fetchJob = new TagFetchJob(this);
+ AKVERIFYEXEC(fetchJob);
+ QCOMPARE(fetchJob->tags().count(), 1);
+ QCOMPARE(fetchJob->tags().first().gid(), QByteArray("gid"));
+ QCOMPARE(fetchJob->tags().first().type(), QByteArray("mytype"));
+ QCOMPARE(fetchJob->tags().first().remoteId(), QByteArray("rid_0"));
+ tagId = fetchJob->tags().first().id();
+ }
+
+ {
+ ResourceSelectJob *select = new ResourceSelectJob("akonadi_knut_resource_1");
+ AKVERIFYEXEC(select);
+ }
+
+ tag.setRemoteId("rid_1");
+ createJob = new TagCreateJob(tag, this);
+ createJob->setMergeIfExisting(true);
+ AKVERIFYEXEC(createJob);
+ QVERIFY(createJob->tag().isValid());
+
+ {
+ TagFetchJob *fetchJob = new TagFetchJob(this);
+ AKVERIFYEXEC(fetchJob);
+ QCOMPARE(fetchJob->tags().count(), 1);
+ QCOMPARE(fetchJob->tags().first().gid(), QByteArray("gid"));
+ QCOMPARE(fetchJob->tags().first().type(), QByteArray("mytype"));
+ QCOMPARE(fetchJob->tags().first().remoteId(), QByteArray("rid_1"));
+
+ QCOMPARE(fetchJob->tags().first().id(), tagId);
+
+ }
+
+ TagDeleteJob *deleteJob = new TagDeleteJob(Tag(tagId), this);
+ AKVERIFYEXEC(deleteJob);
+
+ {
+ ResourceSelectJob *select = new ResourceSelectJob("");
+ AKVERIFYEXEC(select);
+ }
+}
+
void TagTest::testDelete()
{
Tag tag1;
@@ -344,6 +404,9 @@ void TagTest::testTagItem()
fetchJob->fetchScope().setFetchTags(true);
AKVERIFYEXEC(fetchJob);
QCOMPARE(fetchJob->items().first().tags().size(), 1);
+
+ TagDeleteJob *deleteJob = new TagDeleteJob(tag, this);
+ AKVERIFYEXEC(deleteJob);
}
void TagTest::testModifyItemWithTagByGID()
@@ -375,6 +438,10 @@ void TagTest::testModifyItemWithTagByGID()
fetchJob->fetchScope().setFetchTags(true);
AKVERIFYEXEC(fetchJob);
QCOMPARE(fetchJob->items().first().tags().size(), 1);
+
+
+ TagDeleteJob *deleteJob = new TagDeleteJob(fetchJob->items().first().tags().first(), this);
+ AKVERIFYEXEC(deleteJob);
}
void TagTest::testModifyItemWithTagByRID()
@@ -411,6 +478,10 @@ void TagTest::testModifyItemWithTagByRID()
fetchJob->fetchScope().setFetchTags(true);
AKVERIFYEXEC(fetchJob);
QCOMPARE(fetchJob->items().first().tags().size(), 1);
+
+ TagDeleteJob *deleteJob = new TagDeleteJob(fetchJob->items().first().tags().first(), this);
+ AKVERIFYEXEC(deleteJob);
+
{
ResourceSelectJob *select = new ResourceSelectJob("");
AKVERIFYEXEC(select);
commit 9196e1fcde6d2fe0af7e3ea04f30b41d058f5a44
Author: Montel Laurent <montel at kde.org>
Date: Fri Jul 25 13:40:23 2014 +0200
Fix Bug 337625 - Cannot add email address to a contact without an email adress.
FIXED-IN: 4.14
BUG: 337625
Conflicts:
CMakeLists.txt
diff --git a/akonadi/contact/emailaddressselectionwidget.cpp b/akonadi/contact/emailaddressselectionwidget.cpp
index aa8bd39..a58d9ad 100644
--- a/akonadi/contact/emailaddressselectionwidget.cpp
+++ b/akonadi/contact/emailaddressselectionwidget.cpp
@@ -81,8 +81,8 @@ class SearchLineEdit : public KLineEdit
class EmailAddressSelectionWidget::Private
{
public:
- Private( EmailAddressSelectionWidget *qq, QAbstractItemModel *model )
- : q( qq ), mModel( model )
+ Private( bool showOnlyContactWithEmail, EmailAddressSelectionWidget *qq, QAbstractItemModel *model )
+ : q( qq ), mModel( model ), mShowOnlyContactWithEmail(showOnlyContactWithEmail)
{
init();
}
@@ -95,6 +95,7 @@ class EmailAddressSelectionWidget::Private
SearchLineEdit *mSearchLine;
Akonadi::EntityTreeView *mView;
EmailAddressSelectionProxyModel *mSelectionModel;
+ bool mShowOnlyContactWithEmail;
};
void EmailAddressSelectionWidget::Private::init()
@@ -146,7 +147,8 @@ void EmailAddressSelectionWidget::Private::init()
layout->addWidget( mView );
Akonadi::ContactsFilterProxyModel *filter = new Akonadi::ContactsFilterProxyModel( q );
- filter->setFilterFlags( ContactsFilterProxyModel::HasEmail );
+ if (mShowOnlyContactWithEmail)
+ filter->setFilterFlags( ContactsFilterProxyModel::HasEmail );
filter->setExcludeVirtualCollections( true );
filter->setSourceModel( mModel );
@@ -170,13 +172,19 @@ void EmailAddressSelectionWidget::Private::init()
EmailAddressSelectionWidget::EmailAddressSelectionWidget( QWidget * parent )
: QWidget( parent ),
- d( new Private( this, 0 ) )
+ d( new Private( true, this, 0 ) )
{
}
EmailAddressSelectionWidget::EmailAddressSelectionWidget( QAbstractItemModel *model, QWidget * parent )
: QWidget( parent ),
- d( new Private( this, model ) )
+ d( new Private( true, this, model ) )
+{
+}
+
+EmailAddressSelectionWidget::EmailAddressSelectionWidget( bool showOnlyContactWithEmail, QAbstractItemModel *model, QWidget * parent )
+ : QWidget( parent ),
+ d( new Private( showOnlyContactWithEmail ,this, model ) )
{
}
@@ -200,8 +208,12 @@ EmailAddressSelection::List EmailAddressSelectionWidget::selectedAddresses() con
selection.d->mEmailAddress = index.data( EmailAddressSelectionProxyModel::EmailAddressRole ).toString();
selection.d->mItem = index.data( ContactsTreeModel::ItemRole ).value<Akonadi::Item>();
- if ( !selection.d->mEmailAddress.isEmpty() ) {
- selections << selection;
+ if ( d->mShowOnlyContactWithEmail ) {
+ if ( !selection.d->mEmailAddress.isEmpty() ) {
+ selections << selection;
+ }
+ } else {
+ selections << selection;
}
}
diff --git a/akonadi/contact/emailaddressselectionwidget.h b/akonadi/contact/emailaddressselectionwidget.h
index b8a6bff..ca35905 100644
--- a/akonadi/contact/emailaddressselectionwidget.h
+++ b/akonadi/contact/emailaddressselectionwidget.h
@@ -84,6 +84,14 @@ class AKONADI_CONTACT_EXPORT EmailAddressSelectionWidget : public QWidget
explicit EmailAddressSelectionWidget( QAbstractItemModel *model, QWidget *parent = 0 );
/**
+ * @brief Creates a new email address selection widget.
+ * @param showOnlyContactWithEmail Allow to specify if you want to see only contact with email (by default yes in other constructor)
+ * @param model A custom ContactsTreeModel based model to use.
+ * @param parent The parent widget.
+ */
+ explicit EmailAddressSelectionWidget( bool showOnlyContactWithEmail, QAbstractItemModel *model = 0, QWidget *parent = 0 );
+
+ /**
* Destroys the email address selection widget.
*/
~EmailAddressSelectionWidget();
commit 4d2596e7c49acb6c03442d7b5325bcaa10db3b4c
Author: Dan Vrátil <dvratil at redhat.com>
Date: Fri Jul 25 12:08:50 2014 +0200
Fix TagTest
After adding support for Tags into Knut, the database is now pre-populated
with a single tag. This tag is however interfering with this test, so we
remove it from Akonadi when starting the testcase.
diff --git a/akonadi/tests/tagtest.cpp b/akonadi/tests/tagtest.cpp
index 137f733..f3e2c96 100644
--- a/akonadi/tests/tagtest.cpp
+++ b/akonadi/tests/tagtest.cpp
@@ -67,6 +67,13 @@ void TagTest::initTestCase()
qRegisterMetaType<Akonadi::Tag>();
qRegisterMetaType<QSet<Akonadi::Tag> >();
qRegisterMetaType<Akonadi::Item::List>();
+
+ // Delete the default Knut tag - it's interfering with this test
+ TagFetchJob *fetchJob = new TagFetchJob(this);
+ AKVERIFYEXEC(fetchJob);
+ QCOMPARE(fetchJob->tags().size(), 1);
+ TagDeleteJob *deleteJob = new TagDeleteJob(fetchJob->tags().first(), this);
+ AKVERIFYEXEC(deleteJob);
}
void TagTest::testCreateFetch()
commit 1dee3a0e83e91802a99553788b865b26773c22ae
Author: l10n daemon script <scripty at kde.org>
Date: Fri Jul 25 05:41:04 2014 +0000
SVN_SILENT made messages (.desktop file)
diff --git a/akonadi/contact/editor/im/kaddressbookimprotocol.desktop b/akonadi/contact/editor/im/kaddressbookimprotocol.desktop
index 27907c6..4425d5d 100644
--- a/akonadi/contact/editor/im/kaddressbookimprotocol.desktop
+++ b/akonadi/contact/editor/im/kaddressbookimprotocol.desktop
@@ -13,6 +13,7 @@ Name[el]=Î ÏÏÏÏκολλο ÏÏιγμιαίÏν μηνÏ
μάÏÏν KAddressbo
Name[en_GB]=KAddressbook Instant Messaging Protocol
Name[eo]=KAddressbook RapidmesaÄila Protokolo
Name[es]=Protocolo de mensajerÃa instantánea de KAddressbook
+Name[et]=KDE aadressiraamatu kiirsuhtlusprotokoll
Name[fi]=KAddressbookin pikaviestinyhteyskäytäntö
Name[fr]=Protocole de messagerie instantanée KAddressBook
Name[ga]=Prótacal Teachtaireachtaà Meandaracha KAddressbook
diff --git a/akonadi/contact/editor/im/protocols/aimprotocol.desktop b/akonadi/contact/editor/im/protocols/aimprotocol.desktop
index 104ef5d..075a1ef 100644
--- a/akonadi/contact/editor/im/protocols/aimprotocol.desktop
+++ b/akonadi/contact/editor/im/protocols/aimprotocol.desktop
@@ -14,6 +14,7 @@ Comment[el]=Î ÏÏÏÏκολλο AIM
Comment[en_GB]=AIM Protocol
Comment[eo]=AIM-Protokolo
Comment[es]=Protocolo AIM
+Comment[et]=AIM protokoll
Comment[fi]=AIM-yhteyskäytäntö
Comment[fr]=Protocole AIM
Comment[ga]=Prótacal AIM
@@ -62,6 +63,7 @@ Name[el]=AIM
Name[en_GB]=AIM
Name[eo]=AIM
Name[es]=AIM
+Name[et]=AIM
Name[fi]=AIM
Name[fr]=AIM
Name[ga]=AIM
diff --git a/akonadi/contact/editor/im/protocols/gaduprotocol.desktop b/akonadi/contact/editor/im/protocols/gaduprotocol.desktop
index 37f898e..2bf46b8 100644
--- a/akonadi/contact/editor/im/protocols/gaduprotocol.desktop
+++ b/akonadi/contact/editor/im/protocols/gaduprotocol.desktop
@@ -14,6 +14,7 @@ Comment[el]=Î ÏÏÏÏκολλο Gadu-Gadu
Comment[en_GB]=Gadu-Gadu Protocol
Comment[eo]=Gadu-Gadu Protokolo
Comment[es]=Protocolo Gadu-Gadu
+Comment[et]=Gadu-Gadu protokoll
Comment[fi]=Gadu-Gadu-yhteyskäytäntö
Comment[fr]=Protocole Gadu-Gadu
Comment[ga]=Prótacal Gadu-Gadu
@@ -62,6 +63,7 @@ Name[el]=Gadu-Gadu
Name[en_GB]=Gadu-Gadu
Name[eo]=Gadu-Gadu
Name[es]=Gadu-Gadu
+Name[et]=Gadu-Gadu
Name[fi]=Gadu-Gadu
Name[fr]=Gadu-Gadu
Name[ga]=Gadu-Gadu
diff --git a/akonadi/contact/editor/im/protocols/googletalkprotocol.desktop b/akonadi/contact/editor/im/protocols/googletalkprotocol.desktop
index 71febbc..3e81a6d 100644
--- a/akonadi/contact/editor/im/protocols/googletalkprotocol.desktop
+++ b/akonadi/contact/editor/im/protocols/googletalkprotocol.desktop
@@ -13,6 +13,7 @@ Comment[de]=Google Talk
Comment[el]=Google Talk
Comment[en_GB]=Google Talk
Comment[es]=Google Talk
+Comment[et]=Google Talk
Comment[fi]=Google Talk
Comment[fr]=Google Talk
Comment[gl]=Google Talk
@@ -52,6 +53,7 @@ Name[de]=Google Talk
Name[el]=Google Talk
Name[en_GB]=Google Talk
Name[es]=Google Talk
+Name[et]=Google Talk
Name[fi]=Google Talk
Name[fr]=Google Talk
Name[gl]=Google Talk
diff --git a/akonadi/contact/editor/im/protocols/groupwiseprotocol.desktop b/akonadi/contact/editor/im/protocols/groupwiseprotocol.desktop
index 431fbef..b283236 100644
--- a/akonadi/contact/editor/im/protocols/groupwiseprotocol.desktop
+++ b/akonadi/contact/editor/im/protocols/groupwiseprotocol.desktop
@@ -14,6 +14,7 @@ Comment[el]=ÎÏοÏÏολÎÎ±Ï Î¼Î·Î½Ï
μάÏÏν Novell GroupWise
Comment[en_GB]=Novell GroupWise Messenger
Comment[eo]=Novell GroupWise mesaÄilo
Comment[es]=MensajerÃa de Novell GroupWise
+Comment[et]=Novell GroupWise Messenger
Comment[fi]=Novell Groupwise -pikaviestin
Comment[fr]=Messagerie « GroupWise Novell »
Comment[ga]=Teachtaire Novell GroupWise
@@ -62,6 +63,7 @@ Name[el]=GroupWise
Name[en_GB]=GroupWise
Name[eo]=GroupWise
Name[es]=GroupWise
+Name[et]=GroupWise
Name[fi]=GroupWise
Name[fr]=GroupWise
Name[ga]=GroupWise
diff --git a/akonadi/contact/editor/im/protocols/icqprotocol.desktop b/akonadi/contact/editor/im/protocols/icqprotocol.desktop
index 2082ecc..f0c1f56 100644
--- a/akonadi/contact/editor/im/protocols/icqprotocol.desktop
+++ b/akonadi/contact/editor/im/protocols/icqprotocol.desktop
@@ -14,6 +14,7 @@ Comment[el]=Î ÏÏÏÏκολλο ICQ
Comment[en_GB]=ICQ Protocol
Comment[eo]=ICQ Protokolo
Comment[es]=Protocolo ICQ
+Comment[et]=ICQ protokoll
Comment[fi]=ICQ-yhteyskäytäntö
Comment[fr]=Protocole ICQ
Comment[ga]=Prótacal ICQ
@@ -62,6 +63,7 @@ Name[el]=ICQ
Name[en_GB]=ICQ
Name[eo]=ICQ
Name[es]=ICQ
+Name[et]=ICQ
Name[fi]=ICQ
Name[fr]=ICQ
Name[ga]=ICQ
diff --git a/akonadi/contact/editor/im/protocols/ircprotocol.desktop b/akonadi/contact/editor/im/protocols/ircprotocol.desktop
index cbdf5d2..ff47cf5 100644
--- a/akonadi/contact/editor/im/protocols/ircprotocol.desktop
+++ b/akonadi/contact/editor/im/protocols/ircprotocol.desktop
@@ -14,6 +14,7 @@ Comment[el]=ÎιαδικÏÏ
ακή ÏÏ
νομιλία
Comment[en_GB]=Internet Relay Chat
Comment[eo]=Interreta plusenda babilado
Comment[es]=Internet Relay Chat
+Comment[et]=Rühmadiskussioon internetis
Comment[fi]=Internet Relay Chat
Comment[fr]=Internet Relay Chat
Comment[ga]=Internet Relay Chat
@@ -61,6 +62,7 @@ Name[el]=IRC
Name[en_GB]=IRC
Name[eo]=IRC
Name[es]=IRC
+Name[et]=IRC
Name[fi]=IRC
Name[fr]=IRC
Name[ga]=IRC
diff --git a/akonadi/contact/editor/im/protocols/jabberprotocol.desktop b/akonadi/contact/editor/im/protocols/jabberprotocol.desktop
index 26caa2c..f493947 100644
--- a/akonadi/contact/editor/im/protocols/jabberprotocol.desktop
+++ b/akonadi/contact/editor/im/protocols/jabberprotocol.desktop
@@ -14,6 +14,7 @@ Comment[el]=Î ÏÏÏÏκολλο Jabber
Comment[en_GB]=Jabber Protocol
Comment[eo]=Jabber Protokolo
Comment[es]=Protocolo Jabber
+Comment[et]=Jabberi protokoll
Comment[fi]=Jabber-yhteyskäytäntö
Comment[fr]=Protocole Jabber
Comment[ga]=Prótacal Jabber
@@ -62,6 +63,7 @@ Name[el]=Jabber
Name[en_GB]=Jabber
Name[eo]=Jabber
Name[es]=Jabber
+Name[et]=Jabber
Name[fi]=Jabber
Name[fr]=Jabber
Name[ga]=Jabber
diff --git a/akonadi/contact/editor/im/protocols/meanwhileprotocol.desktop b/akonadi/contact/editor/im/protocols/meanwhileprotocol.desktop
index a5f736a..9b69f00 100644
--- a/akonadi/contact/editor/im/protocols/meanwhileprotocol.desktop
+++ b/akonadi/contact/editor/im/protocols/meanwhileprotocol.desktop
@@ -14,6 +14,7 @@ Comment[el]=Î ÏÏÏÏκολλο Meanwhile
Comment[en_GB]=Meanwhile Protocol
Comment[eo]=Meanwhile Protokolo
Comment[es]=Protocolo Meanwhile
+Comment[et]=Meanwhile'i protokoll
Comment[fi]=Meanwhile-yhteyskäytäntö
Comment[fr]=Protocole Meanwhile
Comment[ga]=Prótacal Meanwhile
@@ -62,6 +63,7 @@ Name[el]=Meanwhile
Name[en_GB]=Meanwhile
Name[eo]=Meanwhile
Name[es]=Meanwhile
+Name[et]=Meanwhile
Name[fi]=Meanwhile
Name[fr]=Meanwhile
Name[ga]=Meanwhile
diff --git a/akonadi/contact/editor/im/protocols/msnprotocol.desktop b/akonadi/contact/editor/im/protocols/msnprotocol.desktop
index ce8f44f..354460a 100644
--- a/akonadi/contact/editor/im/protocols/msnprotocol.desktop
+++ b/akonadi/contact/editor/im/protocols/msnprotocol.desktop
@@ -14,6 +14,7 @@ Comment[el]=ÎÏοÏÏολÎÎ±Ï Î¼Î·Î½Ï
μάÏÏν MSN
Comment[en_GB]=MSN Messenger
Comment[eo]=MSN MesaÄilo
Comment[es]=MSN Messenger
+Comment[et]=MSN Messenger
Comment[fi]=MSN Messenger
Comment[fr]=Messagerie MSN
Comment[ga]=MSN Messenger
@@ -62,6 +63,7 @@ Name[el]=ÎÏοÏÏολÎÎ±Ï Î¼Î·Î½Ï
μάÏÏν MSN
Name[en_GB]=MSN Messenger
Name[eo]=MSN mesaÄilo
Name[es]=MSN Messenger
+Name[et]=MSN Messenger
Name[fi]=MSN Messenger
Name[fr]=Messagerie MSN
Name[ga]=MSN Messenger
diff --git a/akonadi/contact/editor/im/protocols/skypeprotocol.desktop b/akonadi/contact/editor/im/protocols/skypeprotocol.desktop
index a2c81a6..f6ad208 100644
--- a/akonadi/contact/editor/im/protocols/skypeprotocol.desktop
+++ b/akonadi/contact/editor/im/protocols/skypeprotocol.desktop
@@ -14,6 +14,7 @@ Comment[el]=ÎιαδικÏÏ
ακή ÏηλεÏÏνία Skype
Comment[en_GB]=Skype Internet Telephony
Comment[eo]=Skype Interreta Telefonado
Comment[es]=TelefonÃa por Internet de Skype
+Comment[et]=Internetitelefon Skype
Comment[fi]=Skype-internetpuhelin
Comment[fr]=Téléphonie Internet Skype
Comment[ga]=TeileafónaÃocht IdirlÃn Skype
@@ -61,6 +62,7 @@ Name[el]=Skype
Name[en_GB]=Skype
Name[eo]=kype
Name[es]=Skype
+Name[et]=Skype
Name[fi]=Skype
Name[fr]=Skype
Name[ga]=Skype
diff --git a/akonadi/contact/editor/im/protocols/smsprotocol.desktop b/akonadi/contact/editor/im/protocols/smsprotocol.desktop
index d5fa38c..20e0f0b 100644
--- a/akonadi/contact/editor/im/protocols/smsprotocol.desktop
+++ b/akonadi/contact/editor/im/protocols/smsprotocol.desktop
@@ -14,6 +14,7 @@ Comment[el]=Î ÏÏÏÏκολλο SMS
Comment[en_GB]=SMS Protocol
Comment[eo]=SMS Protokolo
Comment[es]=Protocolo SMS
+Comment[et]=SMS protokoll
Comment[fi]=Tekstiviestiyhteyskäytäntö
Comment[fr]=Protocole SMS
Comment[ga]=Prótacal SMS
@@ -62,6 +63,7 @@ Name[el]=SMS
Name[en_GB]=SMS
Name[eo]=SMS
Name[es]=SMS
+Name[et]=SMS
Name[fi]=Tekstiviesti
Name[fr]=SMS
Name[ga]=SMS
diff --git a/akonadi/contact/editor/im/protocols/yahooprotocol.desktop b/akonadi/contact/editor/im/protocols/yahooprotocol.desktop
index b400057..f259e53 100644
--- a/akonadi/contact/editor/im/protocols/yahooprotocol.desktop
+++ b/akonadi/contact/editor/im/protocols/yahooprotocol.desktop
@@ -14,6 +14,7 @@ Comment[el]=Î ÏÏÏÏκολλο Yahoo
Comment[en_GB]=Yahoo Protocol
Comment[eo]=Yahoo Protokolo
Comment[es]=Protocolo Yahoo
+Comment[et]=Yahoo protokoll
Comment[fi]=Yahoo-yhteyskäytäntö
Comment[fr]=Protocole Yahoo
Comment[ga]=Prótacal Yahoo
@@ -62,6 +63,7 @@ Name[el]=Yahoo
Name[en_GB]=Yahoo
Name[eo]=Yahoo
Name[es]=Yahoo
+Name[et]=Yahoo
Name[fi]=Yahoo
Name[fr]=Yahoo
Name[ga]=Yahoo
diff --git a/akonadi/contact/kcm/akonadicontact_actions.desktop b/akonadi/contact/kcm/akonadicontact_actions.desktop
index e06de2d..0718189 100644
--- a/akonadi/contact/kcm/akonadicontact_actions.desktop
+++ b/akonadi/contact/kcm/akonadicontact_actions.desktop
@@ -19,6 +19,7 @@ Name[de]=Kontakt-Aktionen
Name[el]=ÎνÎÏÎ³ÎµÎ¹ÎµÏ ÎµÏαÏÏν
Name[en_GB]=Contact Actions
Name[es]=Acciones de contactos
+Name[et]=Kontaktitoimingud
Name[fi]=Yhteystietotoiminnot
Name[fr]=Actions sur les contacts
Name[ga]=GnÃomhartha Teagmhála
@@ -69,6 +70,7 @@ Comment[de]=Kontakt-Aktionen einrichten
Comment[el]=ÎιαμÏÏÏÏÏη ÏÏν ενεÏγειÏν ÏÏν εÏαÏÏν
Comment[en_GB]=Configure the Contact Actions
Comment[es]=Configurar las acciones de contactos
+Comment[et]=Kontaktitoimingute seadistamine
Comment[fi]=Yhteystietotoimintojen asetukset
Comment[fr]=Configurer les actions sur les contacts
Comment[ga]=Cumraigh na GnÃomhartha Teagmhála
@@ -117,6 +119,7 @@ X-KDE-Keywords[de]=kaddressbook, configure, settings, contact, actions
X-KDE-Keywords[el]=kaddressbook, διαμÏÏÏÏÏη, ÏÏ
θμίÏειÏ, εÏαÏή, ενÎÏγειεÏ
X-KDE-Keywords[en_GB]=kaddressbook, configure, settings, contact, actions
X-KDE-Keywords[es]=kaddressbook, configurar, preferencias, contacto, acciones
+X-KDE-Keywords[et]=kde aadressiraamat, seadistamine, seadistused, kontakt, toimingud
X-KDE-Keywords[fi]=kaddressbook, asetukset, yhteystieto, toiminnot
X-KDE-Keywords[fr]=KAddressBook, configuration, paramètres, contacts, actions
X-KDE-Keywords[ga]=kaddressbook, cumraigh, cumraÃocht, socruithe, teagmháil, gnÃomhartha
diff --git a/akonadi/socialutils/serializer/akonadi_serializer_socialfeeditem.desktop b/akonadi/socialutils/serializer/akonadi_serializer_socialfeeditem.desktop
index 242dfd0..dfce256 100644
--- a/akonadi/socialutils/serializer/akonadi_serializer_socialfeeditem.desktop
+++ b/akonadi/socialutils/serializer/akonadi_serializer_socialfeeditem.desktop
@@ -8,6 +8,7 @@ Name[de]=SocialFeedItem-Serialisierung
Name[el]=Î ÏÏγÏαμμα γÏÎ±Î¼Î¼Î¹ÎºÎ®Ï Î´Î¹Î¬ÏÎ±Î¾Î·Ï SocialFeedItem
Name[en_GB]=SocialFeedItem Serializer
Name[es]=Serializador SocialFeedItem
+Name[et]=SocialFeedItemi jadasti
Name[fi]=SocialFeedItem-serialisoija
Name[fr]=Sérialiseur « SocialFeedItem »
Name[gl]=Serializador SocialFeedItem
@@ -45,6 +46,7 @@ Comment[de]=Akonadi-Modul zur Serialisierung für SocialFeedItem
Comment[el]=Îνα ÏÏÏÏθεÏο γÏÎ±Î¼Î¼Î¹ÎºÎ®Ï Î´Î¹Î¬ÏÎ±Î¾Î·Ï ÏοÏ
Akonadi για Ïο SocialFeedItem
Comment[en_GB]=An Akonadi serializer plugin for SocialFeedItem
Comment[es]=Un complemento de serializador Akonadi para SocialFeedItem
+Comment[et]=Akonadi SocialFeedItemi jadastamisplugin
Comment[fi]=Akonadi-serialisoijaliitännäinen SocialFeedItemille
Comment[fr]=Un module externe de sérialisation Akonadi pour « SocialFeedItem »
Comment[gl]=Un complemento serializador de Akonadi para SocialFeedItem.
diff --git a/akonadi/tests/testresource/knutresource.desktop b/akonadi/tests/testresource/knutresource.desktop
index c6277a6..286511d 100644
--- a/akonadi/tests/testresource/knutresource.desktop
+++ b/akonadi/tests/testresource/knutresource.desktop
@@ -9,6 +9,7 @@ Name[de]=Knut
Name[el]=Knut
Name[en_GB]=Knut
Name[es]=Knut
+Name[et]=Knut
Name[fi]=Knut
Name[fr]=Knut
Name[gl]=Knut
@@ -45,6 +46,7 @@ Comment[de]=Agent für die Fehlersuche
Comment[el]=Î ÏάκÏοÏÎ±Ï Î³Î¹Î± αÏοÏÏαλμάÏÏÏη
Comment[en_GB]=An agent for debugging purpose
Comment[es]=Un agente para el propósito de depuración
+Comment[et]=Silumiseks mõeldud agent
Comment[fi]=Vianjäljitykseen tarkoitettu agentti
Comment[fr]=Un agent à des fins de débogage
Comment[gl]=Un axente de depuración
diff --git a/akonadi/tests/testsearchplugin/akonaditestsearchplugin.desktop b/akonadi/tests/testsearchplugin/akonaditestsearchplugin.desktop
index c9085ce..e291d38 100644
--- a/akonadi/tests/testsearchplugin/akonaditestsearchplugin.desktop
+++ b/akonadi/tests/testsearchplugin/akonaditestsearchplugin.desktop
@@ -9,6 +9,7 @@ Name[de]=Akonadi-Testsuchmodul
Name[el]=Î ÏÏÏθεÏο δοκιμαÏÏÎ¹ÎºÎ®Ï Î±Î½Î±Î¶Î®ÏηÏÎ·Ï Akonadi
Name[en_GB]=Akonadi Test Search Plugin
Name[es]=Complemento de prueba de búsqueda de Akonadi
+Name[et]=Akonadi otsingu testplugin
Name[fi]=Akonadin hakuliitännäinen testaustarkoituksiin
Name[fr]=Module externe de test pour les recherches Akonadi
Name[hu]=Akonadi teszt keresés bÅvÃtmény
diff --git a/kabc/formats/binary.desktop b/kabc/formats/binary.desktop
index 67b83f8..2f31b04 100644
--- a/kabc/formats/binary.desktop
+++ b/kabc/formats/binary.desktop
@@ -10,6 +10,7 @@ Name[de]=Binär
Name[el]=ÎÏ
αδικÏ
Name[en_GB]=Binary
Name[es]=Binario
+Name[et]=Binaar
Name[fi]=Binaari
Name[fr]=Binaire
Name[ga]=Dénártha
diff --git a/kabc/kabc_manager.desktop b/kabc/kabc_manager.desktop
index d908940..c9c8790 100644
--- a/kabc/kabc_manager.desktop
+++ b/kabc/kabc_manager.desktop
@@ -12,6 +12,7 @@ Name[el]=ÎÏαÏÎÏ
Name[en_GB]=Contacts
Name[eo]=Kontaktoj
Name[es]=Contactos
+Name[et]=Kontaktid
Name[fi]=Yhteystiedot
Name[fr]=Contacts
Name[ga]=Teagmhálacha
diff --git a/kabc/plugins/dir/dir.desktop b/kabc/plugins/dir/dir.desktop
index ed99365..131dd36 100644
--- a/kabc/plugins/dir/dir.desktop
+++ b/kabc/plugins/dir/dir.desktop
@@ -10,6 +10,7 @@ Name[el]=ΦάκελοÏ
Name[en_GB]=Folder
Name[eo]=Dosierujo
Name[es]=Carpeta
+Name[et]=Kataloog
Name[fi]=Kansio
Name[fr]=Dossier
Name[ga]=Fillteán
@@ -60,6 +61,7 @@ Comment[de]=Ermöglicht Zugriff auf Kontakte, die in einzelnen Dateien in einem
Comment[el]=Î ÏοÏÏÎÏει ÏÏÏÏβαÏη Ïε εÏαÏÎÏ, αÏοθηκεÏ
μÎÎ½ÎµÏ Ïε ξεÏÏÏιÏÏά αÏÏεία, Ïε Îνα δοÏμÎνο Ïάκελο. Î¥ÏοÏÏηÏίζει ÏÏ
Ïικά αÏÏεία vCard και Î¬Î»Î»ÎµÏ Î¼Î¿ÏÏÎÏ Î±ÏÏείÏν ανάλογα με Ïη διαθεÏιμÏÏηÏα ÏÏν ÏÏÏÏθεÏÏν.
Comment[en_GB]=Provides access to contacts, each stored in a single file, in a given folder. Supports standard vCard file and other formats depending on availability of plugins.
Comment[es]=Proporciona acceso a los contactos, cada uno almacenado en un archivo diferente, dentro de una carpeta determinada. Admite archivos vCard estándar y otros formatos dependiendo de la disponibilidad de los complementos.
+Comment[et]=Võimaldab kasutada eraldi failidesse salvestatud kontakte määratud kataloogis. Toetab standardseid vCard-faile ja teisi vorminguid sõltuvalt pluginate olemasolust.
Comment[fi]=Tarjoaa pääsyn annetun kansion yksittäisiin tiedostoihin tallennettuihin yhteystietoihin. Tukee vakiomuotoista vCard-tiedostoa sekä muita tiedostomuotoja liitännäisistä riippuen.
Comment[fr]=Fournit un accès aux contacts dont chacun est enregistré dans un fichier, dans le dossier indiqué. Le format « vCard » et d'autres formats sont pris en charge selon les modules externes disponibles.
Comment[gl]=Fornece acceso aos contactos, cada un gardado nun ficheiro nun cartafol dado. Admite ficheiros vCard estándar e outros formatos, en función da dispoñibilidade de engadidos.
diff --git a/kabc/plugins/file/file.desktop b/kabc/plugins/file/file.desktop
index 2df65ae..55f75ea 100644
--- a/kabc/plugins/file/file.desktop
+++ b/kabc/plugins/file/file.desktop
@@ -11,6 +11,7 @@ Name[el]=ÎÏÏείο
Name[en_GB]=File
Name[eo]=Dosiero
Name[es]=Archivo
+Name[et]=Fail
Name[fi]=Tiedosto
Name[fr]=Fichier
Name[ga]=Comhad
@@ -65,6 +66,7 @@ Comment[de]=Ermöglicht Zugriff auf Kontakte, die in einer einzigen Datei lokal
Comment[el]=Î ÏοÏÏÎÏει ÏÏÏÏβαÏη Ïε εÏαÏÎÏ, αÏοθηκεÏ
μÎÎ½ÎµÏ Ïε Îνα ÏοÏÎ¹ÎºÏ Î±ÏÏείο. Î¥ÏοÏÏηÏίζει ÏÏ
Ïικά αÏÏεία vCard και Î¬Î»Î»ÎµÏ Î¼Î¿ÏÏÎÏ Î±ÏÏείÏν ανάλογα με Ïη διαθεÏιμÏÏηÏα ÏÏν ÏÏÏÏθεÏÏν.
Comment[en_GB]=Provides access to contacts stored in a single local file. Supports standard vCard files and other formats depending on available plugins.
Comment[es]=Proporciona acceso a los contactos almacenados en un único archivo local. Admite archivos vCard estándar y otros formatos dependiendo de la disponibilidad de los complementos.
+Comment[et]=Võimaldab kasutada kohalikku faili salvestatud kontakte. Toetab standardseid vCard-faile ja teisi vorminguid sõltuvalt pluginate olemasolust.
Comment[fi]=Tarjoaa pääsyn yksittäiseen paikalliseen tiedostoon tallennettuihin yhteystietoihin. Tukee vakiomuotoisia vCard-tiedostoja sekä muita tiedostomuotoja liitännäisistä riippuen.
Comment[fr]=Fournit un accès aux contacts enregistrés dans un unique fichier local. Le format « vCard » et d'autres formats sont pris en charge selon les modules externes disponibles.
Comment[gl]=Fornece acceso a contactos gardados nun único ficheiro local. Admite ficheiros vCard estándar e outros formatos en función dos engadidos dispoñÃbeis.
diff --git a/kabc/plugins/ldapkio/ldapkio.desktop b/kabc/plugins/ldapkio/ldapkio.desktop
index 25255c9..112cf90 100644
--- a/kabc/plugins/ldapkio/ldapkio.desktop
+++ b/kabc/plugins/ldapkio/ldapkio.desktop
@@ -11,6 +11,7 @@ Name[el]=LDAP
Name[en_GB]=LDAP
Name[eo]=LDAP
Name[es]=LDAP
+Name[et]=LDAP
Name[fi]=LDAP
Name[fr]=LDAP
Name[ga]=LDAP
@@ -65,6 +66,7 @@ Comment[de]=Ermöglicht Zugriff auf Kontakte, die auf einem LDAP-Server gespeich
Comment[el]=Î ÏοÏÏÎÏει ÏÏÏÏβαÏη Ïε εÏαÏÎÏ, αÏοθηκεÏ
μÎÎ½ÎµÏ Ïε Îναν εξÏ
ÏηÏεÏηÏή καÏαλÏγοÏ
LDAP
Comment[en_GB]=Provides access to contacts stored on a LDAP directory server
Comment[es]=Provee acceso a los contactos almacenados en un servidor de directorios LDAP
+Comment[et]=Võimaldab kasutada LDAP kataloogiserverisse salvestatud kontakte
Comment[fi]=Tarjoaa pääsyn LDAP-hakemistopalvelimelle tallennettuihin yhteystietoihin
Comment[fr]=Fournit un accès aux contacts enregistrés dans un annuaire LDAP
Comment[ga]=SoláthraÃonn sé seo rochtain ar theagmhálacha atá stóráilte in eolaire LDAP
diff --git a/kabc/plugins/net/net.desktop b/kabc/plugins/net/net.desktop
index 1aa3aec..bb17087 100644
--- a/kabc/plugins/net/net.desktop
+++ b/kabc/plugins/net/net.desktop
@@ -11,6 +11,7 @@ Name[el]=ÎίκÏÏ
ο
Name[en_GB]=Network
Name[eo]=Reto
Name[es]=Red
+Name[et]=Võrk
Name[fi]=Verkko
Name[fr]=Réseau
Name[ga]=LÃonra
@@ -65,6 +66,7 @@ Comment[de]=Ermöglicht Zugriff auf Kontakte in entfernten Dateien durch das KIO
Comment[el]=Î ÏοÏÏÎÏει ÏÏÏÏβαÏη Ïε εÏαÏÎÏ Ïε αÏομακÏÏ
ÏμÎνα αÏÏεία με Ïη ÏÏήÏη ÏοÏ
ÏÏ
ÏÏήμαÏÎ¿Ï KIO ÏοÏ
KDE. Î¥ÏοÏÏηÏίζει ÏÏ
Ïικά αÏÏεία vCard και Î¬Î»Î»ÎµÏ Î¼Î¿ÏÏÎÏ Î±ÏÏείÏν ανάλογα με Ïη διαθεÏιμÏÏηÏα ÏÏν ÏÏÏÏθεÏÏν.
Comment[en_GB]=Provides access to contacts in remote files using KDE's network framework KIO. Supports standard vCard files and other formats depending on available plugins.
Comment[es]=Proporciona acceso a los contactos en un archivo remoto utilizando la infraestructura de red KIO de KDE. Admite archivos vCard estándar y otros formatos dependiendo en la disponibilidad de los complementos.
+Comment[et]=Võimaldab kasutada võrgufaile KDE võrguraamistiku KIO abil. Toetab standardseid vCard-faile ja teisi vorminguid sõltuvalt pluginate olemasolust.
Comment[fi]=Tarjoaa pääsyn etätiedostoissa oleviin yhteystietoihin KDE:n verkkokehyksen KIOn välityksellä. Tukee vakiomuotoisia vCard-tiedostoja sekä muita tiedostomuotoja liitännäisistä riippuen.
Comment[fr]=Fournit un accès aux contacts enregistrés dans des fichiers distants en utilisant le mécanisme réseau KIO de KDE. Le format « vCard » et d'autres formats sont pris en charge selon les modules externes disponibles.
Comment[gl]=Fornece acceso a contactos gardados en ficheiros remotos mediante a infraestrutura de rede KIO, de KDE. Admite ficheiros vCard estándar e outros formatos en función dos engadidos dispoñÃbeis.
diff --git a/kcal/kcal_manager.desktop b/kcal/kcal_manager.desktop
index dd9573e..282549e 100644
--- a/kcal/kcal_manager.desktop
+++ b/kcal/kcal_manager.desktop
@@ -12,6 +12,7 @@ Name[el]=ÎμεÏολÏγιο
Name[en_GB]=Calendar
Name[eo]=Kalendaro
Name[es]=Calendario
+Name[et]=Kalender
Name[fi]=Kalenteri
Name[fr]=Calendrier
Name[ga]=Féilire
diff --git a/kcal/localdir.desktop b/kcal/localdir.desktop
index 4c73f76..664adb2 100644
--- a/kcal/localdir.desktop
+++ b/kcal/localdir.desktop
@@ -10,6 +10,7 @@ Name[de]=Kalender in lokalem Ordner
Name[el]=ÎμεÏολÏγιο Ïε ÏοÏÎ¹ÎºÏ ÎºÎ±Ïάλογο
Name[en_GB]=Calendar in Local Directory
Name[es]=Calendario en directorio local
+Name[et]=Kalender kohalikus kataloogis
Name[fi]=Kalenteri paikallisessa kansiossa
Name[fr]=Calendrier dans un dossier local
Name[ga]=Féilire i gComhadlann Logánta
@@ -61,6 +62,7 @@ Comment[de]=Ermöglicht Zugriff auf Kalender, die jeweils in einzelnen Dateien i
Comment[el]=Î ÏοÏÏÎÏει ÏÏÏÏβαÏη Ïε ανÏικείμενα ημεÏολογίοÏ
, αÏοθηκεÏ
μÎνα Ïε ξεÏÏÏιÏÏά αÏÏεία, Ïε Îνα δοÏμÎνο καÏάλογο
Comment[en_GB]=Provides access to calendar items, each stored in a single file, in a given directory
Comment[es]=Provee acceso a elementos de un calendario, cada uno almacenado en un archivo diferente, dentro de un directorio determinado
+Comment[et]=Võimaldab kasutada eraldi failidesse salvestatud kalendrielemente määratud kataloogis
Comment[fi]=Tarjoaa pääsyn annetun kansion erillisiin tiedostoihin tallennettuihin kalenteritietueisiin
Comment[fr]=Fournit un accès à des entrées d'agenda, chaque élément étant enregistré dans un fichier unique, dans le dossier indiqué
Comment[ga]=SoláthraÃonn sé seo rochtain ar mhÃreanna féilire, gach ceann stóráilte i gcomhad aonair, i gcomhadlann sonraithe
diff --git a/kioslave/sieve/sieve.protocol b/kioslave/sieve/sieve.protocol
index ce62b67..6333da2 100644
--- a/kioslave/sieve/sieve.protocol
+++ b/kioslave/sieve/sieve.protocol
@@ -22,6 +22,7 @@ Description[de]=Ein Ein-/Ausgabemodul für das Mailfilter-Protokoll Sieve
Description[el]=Îνα ioslave για Ïο ÏÏÏÏÏκολλο ÏιλÏÏαÏίÏμαÏÎ¿Ï Î±Î»Î»Î·Î»Î¿Î³ÏαÏÎ¯Î±Ï Sieve
Description[en_GB]=An ioslave for the Sieve mail filtering protocol
Description[es]=Un esclavo de E/S para el protocolo de filtrado de correo Sieve
+Description[et]=Sieve kirjade filtreerimise protokolli IO-moodul
Description[fi]=I/O-asiakas Sieve-postinsuodatusyhteyskäytännölle
Description[fr]=Un module d'entrées / sorties pour le protocole de filtrage de messagerie « Sieve »
Description[ga]=Sclábhaà I/A le haghaidh prótacail scagtha rÃomhphoist Sieve
diff --git a/kontactinterface/kontactplugin.desktop b/kontactinterface/kontactplugin.desktop
index a33a0c1..5ebe951 100644
--- a/kontactinterface/kontactplugin.desktop
+++ b/kontactinterface/kontactplugin.desktop
@@ -11,6 +11,7 @@ Name[de]=Kontact-Modul
Name[el]=Î ÏÏÏθεÏο Kontact
Name[en_GB]=Kontact Plugin
Name[es]=Complemento de Kontact
+Name[et]=Kontacti plugin
Name[fi]=Kontact-liitännäinen
Name[fr]=Module externe pour Kontact
Name[ga]=Breiseán Kontact
diff --git a/kresources/kresources.desktop b/kresources/kresources.desktop
index 33b5da1..6f36326 100644
--- a/kresources/kresources.desktop
+++ b/kresources/kresources.desktop
@@ -19,6 +19,7 @@ Name[de]=KDE-Ressourcen
Name[el]=Î ÏÏοι ÏοÏ
KDE
Name[en_GB]=KDE Resources
Name[es]=Recursos KDE
+Name[et]=KDE ressursid
Name[fi]=KDE-resurssit
Name[fr]=Ressources KDE
Name[ga]=Acmhainnà KDE
@@ -73,6 +74,7 @@ Comment[de]=KDE-Ressourcen einrichten
Comment[el]=ÎιαμÏÏÏÏÏη ÏÏÏÏν ÏοÏ
KDE
Comment[en_GB]=Configure KDE Resources
Comment[es]=Configurar recursos de KDE
+Comment[et]=KDE ressursside seadistamine
Comment[fi]=KDE-resurssien asetukset
Comment[fr]=Configurer les ressources KDE
Comment[ga]=Cumraigh Acmhainnà KDE
@@ -124,6 +126,7 @@ X-KDE-Keywords[de]=resources,konnector resource,contact resource,calendar resour
X-KDE-Keywords[el]=ÏÏÏοι,ÏÏÏÎ¿Ï konnector,εÏαÏή,ÏÏÏοÏ,ÏÏÏÎ¿Ï Î·Î¼ÎµÏολογίοÏ
,ÏÏÏÎ¿Ï ÏημειÏÏεÏν,ÏÏÏÎ¿Ï ÎµÎ¹Î´Î¿ÏοιήÏεÏν,imap
X-KDE-Keywords[en_GB]=resources,connector resource,contact resource,calendar resource,notes resource,alarm resource,imap
X-KDE-Keywords[es]=recursos,recurso de conector,recurso de contacto,recurso de calendario,recurso de notas,recurso de alarma,imap
+X-KDE-Keywords[et]=ressursid,konnektor,ressurss,kontaktiressurss,kalendriressurss,märkmeressurss,häireressurss,imap
X-KDE-Keywords[fi]=resurssit,konnector-resurssi,yhteystietoresurssi,kalenteriresurssi,muistiinpanoresurssi,hälytysresurssi,imap
X-KDE-Keywords[fr]=ressources, ressource connecteur, ressource contact, ressource agenda, ressource notes, ressource alarme, imap
X-KDE-Keywords[ga]=acmhainnÃ,acmhainn konnector,acmhainn teagmhála,acmhainn fhéilire,acmhainn nótaÃ,acmhainn aláraim,imap
diff --git a/kresources/kresources_manager.desktop b/kresources/kresources_manager.desktop
index b1a5e25..8dfa587 100644
--- a/kresources/kresources_manager.desktop
+++ b/kresources/kresources_manager.desktop
@@ -9,6 +9,7 @@ Name[de]=Ressourcenverwaltung
Name[el]=ÎιαÏειÏιÏÏÎ®Ï KResources
Name[en_GB]=KResources Manager
Name[es]=Gestor de KResources
+Name[et]=KDE ressursside haldur
Name[fi]=KResources-hallinta
Name[fr]=Gestionnaire de ressources
Name[ga]=Bainisteoir KResources
@@ -64,6 +65,7 @@ Comment[de]=Ressourcenverwaltung
Comment[el]=ÎιαÏειÏιÏÏÎ®Ï KResources
Comment[en_GB]=KResources Manager
Comment[es]=Gestor de KResources
+Comment[et]=KDE ressursside haldur
Comment[fi]=KResources-hallinta
Comment[fr]=Gestionnaire KResources
Comment[ga]=Bainisteoir KResources
diff --git a/kresources/kresources_plugin.desktop b/kresources/kresources_plugin.desktop
index 628769c..5aae84c 100644
--- a/kresources/kresources_plugin.desktop
+++ b/kresources/kresources_plugin.desktop
@@ -9,6 +9,7 @@ Name[de]=KRessourcen-Modul
Name[el]=Î ÏÏÏθεÏο KResources
Name[en_GB]=KResources Plugin
Name[es]=Complemento de KResources
+Name[et]=KDE ressursside plugin
Name[fi]=KResources-liitännäinen
Name[fr]=Module externe KResources
Name[ga]=Breiseán KResources
@@ -63,6 +64,7 @@ Comment[de]=Modul für KRessourcen-Grundgerüst
Comment[el]=Î ÏÏÏθεÏο ÏλαιÏίοÏ
εÏγαÏÎ¯Î±Ï ÏοÏ
KResource
Comment[en_GB]=KResources Framework Plugin
Comment[es]=Complemento de infraestructura de KResources
+Comment[et]=KDE ressursside raamistiku plugin
Comment[fi]=KResources-kehysliitännäinen
Comment[fr]=Module externe d'environnement KResources
Comment[ga]=Breiseán Creatlaà KResources
diff --git a/mailtransport/kcm_mailtransport.desktop b/mailtransport/kcm_mailtransport.desktop
index f0587b3..cd91956 100644
--- a/mailtransport/kcm_mailtransport.desktop
+++ b/mailtransport/kcm_mailtransport.desktop
@@ -22,6 +22,7 @@ Name[de]=Versandart
Name[el]=ÎÏÏÎ¹Î¿Ï Î¼ÎµÏαÏοÏÎαÏ
Name[en_GB]=Mail Transport
Name[es]=Transporte de correo
+Name[et]=Kirja saatmise viis
Name[fi]=Postinvälitys
Name[fr]=Transport de courrier électronique
Name[ga]=Iompar RÃomhphoist
commit f0c55b0e2e83f2db73c2d728dcdada4f5bc5ade2
Author: Sandro Knauà <knauss at kolabsys.com>
Date: Sun Jul 20 13:04:37 2014 +0200
Use fullName instead of own building the same logic
REVIEW: 119433
diff --git a/akonadi/calendar/mailclient_p.cpp b/akonadi/calendar/mailclient_p.cpp
index 94accce..c08e75e 100644
--- a/akonadi/calendar/mailclient_p.cpp
+++ b/akonadi/calendar/mailclient_p.cpp
@@ -90,20 +90,12 @@ void MailClient::mailAttendees(const KCalCore::IncidenceBase::Ptr &incidence,
continue;
}
- // Build a nice address for this attendee including the CN.
- QString tname, temail;
- const QString username = KPIMUtils::quoteNameIfNecessary(a->name());
- // ignore the return value from extractEmailAddressAndName() because
- // it will always be false since tusername does not contain "@domain".
- KPIMUtils::extractEmailAddressAndName(username, temail/*byref*/, tname/*byref*/);
- tname += QLatin1String(" <") + email + QLatin1Char('>');
-
// Optional Participants and Non-Participants are copied on the email
if (a->role() == KCalCore::Attendee::OptParticipant ||
a->role() == KCalCore::Attendee::NonParticipant) {
- ccList << tname;
+ ccList << a->fullName();
} else {
- toList << tname;
+ toList << a->fullName();
}
}
if (toList.isEmpty() && ccList.isEmpty()) {
commit 2509b4f3b372f11ba9af379203ff01645ad4c583
Author: Dan Vrátil <dvratil at redhat.com>
Date: Thu Jul 24 11:30:55 2014 +0200
ETM: Don't ignore itemChanged of items in virtual collections
It can happen that storage collection of an item is not in the ETM, but
only virtual collections containing items from that collection (see Gmail
resource for example). In that case ETM will only receive itemChanged
notifications for the virtual collections, but not for the storage one,
so the item won't be updated, because ETM does not update the original
item when the notification is detined for a virtual collection.
This change makes ETM not to ignore itemChange notifications when the
collection is virtual, but perserves the orignal parent collection.
BUG: 337665
Approved-By: Christian Mollekopf
diff --git a/akonadi/entitytreemodel_p.cpp b/akonadi/entitytreemodel_p.cpp
index 15ee48c..3212ade 100644
--- a/akonadi/entitytreemodel_p.cpp
+++ b/akonadi/entitytreemodel_p.cpp
@@ -1167,8 +1167,15 @@ void EntityTreeModelPrivate::monitoredItemChanged(const Akonadi::Item &item, con
return;
}
- //otherwise this overwrites the copy of the real collection with one of the virtual collectoin
- if (!item.parentCollection().isVirtual()) {
+ // Notifications about itemChange are always dispatched for real collection
+ // and also all virtual collections the item belongs to. In order to preserve
+ // the original storage collection when we need to have special handling for
+ // notifications for virtual collections
+ if (item.parentCollection().isVirtual()) {
+ const Collection originalParent = m_items[item.id()].parentCollection();
+ m_items[item.id()].apply(item);
+ m_items[item.id()].setParentCollection(originalParent);
+ } else {
m_items[item.id()].apply(item);
}
commit 5046b8eb6ffd53e22d91fa8a30daecf091f9db8f
Author: l10n daemon script <scripty at kde.org>
Date: Thu Jul 24 04:53:50 2014 +0000
SVN_SILENT made messages (.desktop file)
diff --git a/akonadi/contact/editor/im/kaddressbookimprotocol.desktop b/akonadi/contact/editor/im/kaddressbookimprotocol.desktop
index 4425d5d..27907c6 100644
--- a/akonadi/contact/editor/im/kaddressbookimprotocol.desktop
+++ b/akonadi/contact/editor/im/kaddressbookimprotocol.desktop
@@ -13,7 +13,6 @@ Name[el]=Î ÏÏÏÏκολλο ÏÏιγμιαίÏν μηνÏ
μάÏÏν KAddressbo
Name[en_GB]=KAddressbook Instant Messaging Protocol
Name[eo]=KAddressbook RapidmesaÄila Protokolo
Name[es]=Protocolo de mensajerÃa instantánea de KAddressbook
-Name[et]=KDE aadressiraamatu kiirsuhtlusprotokoll
Name[fi]=KAddressbookin pikaviestinyhteyskäytäntö
Name[fr]=Protocole de messagerie instantanée KAddressBook
Name[ga]=Prótacal Teachtaireachtaà Meandaracha KAddressbook
diff --git a/akonadi/contact/editor/im/protocols/aimprotocol.desktop b/akonadi/contact/editor/im/protocols/aimprotocol.desktop
index 075a1ef..104ef5d 100644
--- a/akonadi/contact/editor/im/protocols/aimprotocol.desktop
+++ b/akonadi/contact/editor/im/protocols/aimprotocol.desktop
@@ -14,7 +14,6 @@ Comment[el]=Î ÏÏÏÏκολλο AIM
Comment[en_GB]=AIM Protocol
Comment[eo]=AIM-Protokolo
Comment[es]=Protocolo AIM
-Comment[et]=AIM protokoll
Comment[fi]=AIM-yhteyskäytäntö
Comment[fr]=Protocole AIM
Comment[ga]=Prótacal AIM
@@ -63,7 +62,6 @@ Name[el]=AIM
Name[en_GB]=AIM
Name[eo]=AIM
Name[es]=AIM
-Name[et]=AIM
Name[fi]=AIM
Name[fr]=AIM
Name[ga]=AIM
diff --git a/akonadi/contact/editor/im/protocols/gaduprotocol.desktop b/akonadi/contact/editor/im/protocols/gaduprotocol.desktop
index 2bf46b8..37f898e 100644
--- a/akonadi/contact/editor/im/protocols/gaduprotocol.desktop
+++ b/akonadi/contact/editor/im/protocols/gaduprotocol.desktop
@@ -14,7 +14,6 @@ Comment[el]=Î ÏÏÏÏκολλο Gadu-Gadu
Comment[en_GB]=Gadu-Gadu Protocol
Comment[eo]=Gadu-Gadu Protokolo
Comment[es]=Protocolo Gadu-Gadu
-Comment[et]=Gadu-Gadu protokoll
Comment[fi]=Gadu-Gadu-yhteyskäytäntö
Comment[fr]=Protocole Gadu-Gadu
Comment[ga]=Prótacal Gadu-Gadu
@@ -63,7 +62,6 @@ Name[el]=Gadu-Gadu
Name[en_GB]=Gadu-Gadu
Name[eo]=Gadu-Gadu
Name[es]=Gadu-Gadu
-Name[et]=Gadu-Gadu
Name[fi]=Gadu-Gadu
Name[fr]=Gadu-Gadu
Name[ga]=Gadu-Gadu
diff --git a/akonadi/contact/editor/im/protocols/googletalkprotocol.desktop b/akonadi/contact/editor/im/protocols/googletalkprotocol.desktop
index 3e81a6d..71febbc 100644
--- a/akonadi/contact/editor/im/protocols/googletalkprotocol.desktop
+++ b/akonadi/contact/editor/im/protocols/googletalkprotocol.desktop
@@ -13,7 +13,6 @@ Comment[de]=Google Talk
Comment[el]=Google Talk
Comment[en_GB]=Google Talk
Comment[es]=Google Talk
-Comment[et]=Google Talk
Comment[fi]=Google Talk
Comment[fr]=Google Talk
Comment[gl]=Google Talk
@@ -53,7 +52,6 @@ Name[de]=Google Talk
Name[el]=Google Talk
Name[en_GB]=Google Talk
Name[es]=Google Talk
-Name[et]=Google Talk
Name[fi]=Google Talk
Name[fr]=Google Talk
Name[gl]=Google Talk
diff --git a/akonadi/contact/editor/im/protocols/groupwiseprotocol.desktop b/akonadi/contact/editor/im/protocols/groupwiseprotocol.desktop
index b283236..431fbef 100644
--- a/akonadi/contact/editor/im/protocols/groupwiseprotocol.desktop
+++ b/akonadi/contact/editor/im/protocols/groupwiseprotocol.desktop
@@ -14,7 +14,6 @@ Comment[el]=ÎÏοÏÏολÎÎ±Ï Î¼Î·Î½Ï
μάÏÏν Novell GroupWise
Comment[en_GB]=Novell GroupWise Messenger
Comment[eo]=Novell GroupWise mesaÄilo
Comment[es]=MensajerÃa de Novell GroupWise
-Comment[et]=Novell GroupWise Messenger
Comment[fi]=Novell Groupwise -pikaviestin
Comment[fr]=Messagerie « GroupWise Novell »
Comment[ga]=Teachtaire Novell GroupWise
@@ -63,7 +62,6 @@ Name[el]=GroupWise
Name[en_GB]=GroupWise
Name[eo]=GroupWise
Name[es]=GroupWise
-Name[et]=GroupWise
Name[fi]=GroupWise
Name[fr]=GroupWise
Name[ga]=GroupWise
diff --git a/akonadi/contact/editor/im/protocols/icqprotocol.desktop b/akonadi/contact/editor/im/protocols/icqprotocol.desktop
index f0c1f56..2082ecc 100644
--- a/akonadi/contact/editor/im/protocols/icqprotocol.desktop
+++ b/akonadi/contact/editor/im/protocols/icqprotocol.desktop
@@ -14,7 +14,6 @@ Comment[el]=Î ÏÏÏÏκολλο ICQ
Comment[en_GB]=ICQ Protocol
Comment[eo]=ICQ Protokolo
Comment[es]=Protocolo ICQ
-Comment[et]=ICQ protokoll
Comment[fi]=ICQ-yhteyskäytäntö
Comment[fr]=Protocole ICQ
Comment[ga]=Prótacal ICQ
@@ -63,7 +62,6 @@ Name[el]=ICQ
Name[en_GB]=ICQ
Name[eo]=ICQ
Name[es]=ICQ
-Name[et]=ICQ
Name[fi]=ICQ
Name[fr]=ICQ
Name[ga]=ICQ
diff --git a/akonadi/contact/editor/im/protocols/ircprotocol.desktop b/akonadi/contact/editor/im/protocols/ircprotocol.desktop
index ff47cf5..cbdf5d2 100644
--- a/akonadi/contact/editor/im/protocols/ircprotocol.desktop
+++ b/akonadi/contact/editor/im/protocols/ircprotocol.desktop
@@ -14,7 +14,6 @@ Comment[el]=ÎιαδικÏÏ
ακή ÏÏ
νομιλία
Comment[en_GB]=Internet Relay Chat
Comment[eo]=Interreta plusenda babilado
Comment[es]=Internet Relay Chat
-Comment[et]=Rühmadiskussioon internetis
Comment[fi]=Internet Relay Chat
Comment[fr]=Internet Relay Chat
Comment[ga]=Internet Relay Chat
@@ -62,7 +61,6 @@ Name[el]=IRC
Name[en_GB]=IRC
Name[eo]=IRC
Name[es]=IRC
-Name[et]=IRC
Name[fi]=IRC
Name[fr]=IRC
Name[ga]=IRC
diff --git a/akonadi/contact/editor/im/protocols/jabberprotocol.desktop b/akonadi/contact/editor/im/protocols/jabberprotocol.desktop
index f493947..26caa2c 100644
--- a/akonadi/contact/editor/im/protocols/jabberprotocol.desktop
+++ b/akonadi/contact/editor/im/protocols/jabberprotocol.desktop
@@ -14,7 +14,6 @@ Comment[el]=Î ÏÏÏÏκολλο Jabber
Comment[en_GB]=Jabber Protocol
Comment[eo]=Jabber Protokolo
Comment[es]=Protocolo Jabber
-Comment[et]=Jabberi protokoll
Comment[fi]=Jabber-yhteyskäytäntö
Comment[fr]=Protocole Jabber
Comment[ga]=Prótacal Jabber
@@ -63,7 +62,6 @@ Name[el]=Jabber
Name[en_GB]=Jabber
Name[eo]=Jabber
Name[es]=Jabber
-Name[et]=Jabber
Name[fi]=Jabber
Name[fr]=Jabber
Name[ga]=Jabber
diff --git a/akonadi/contact/editor/im/protocols/meanwhileprotocol.desktop b/akonadi/contact/editor/im/protocols/meanwhileprotocol.desktop
index 9b69f00..a5f736a 100644
--- a/akonadi/contact/editor/im/protocols/meanwhileprotocol.desktop
+++ b/akonadi/contact/editor/im/protocols/meanwhileprotocol.desktop
@@ -14,7 +14,6 @@ Comment[el]=Î ÏÏÏÏκολλο Meanwhile
Comment[en_GB]=Meanwhile Protocol
Comment[eo]=Meanwhile Protokolo
Comment[es]=Protocolo Meanwhile
-Comment[et]=Meanwhile'i protokoll
Comment[fi]=Meanwhile-yhteyskäytäntö
Comment[fr]=Protocole Meanwhile
Comment[ga]=Prótacal Meanwhile
@@ -63,7 +62,6 @@ Name[el]=Meanwhile
Name[en_GB]=Meanwhile
Name[eo]=Meanwhile
Name[es]=Meanwhile
-Name[et]=Meanwhile
Name[fi]=Meanwhile
Name[fr]=Meanwhile
Name[ga]=Meanwhile
diff --git a/akonadi/contact/editor/im/protocols/msnprotocol.desktop b/akonadi/contact/editor/im/protocols/msnprotocol.desktop
index 354460a..ce8f44f 100644
--- a/akonadi/contact/editor/im/protocols/msnprotocol.desktop
+++ b/akonadi/contact/editor/im/protocols/msnprotocol.desktop
@@ -14,7 +14,6 @@ Comment[el]=ÎÏοÏÏολÎÎ±Ï Î¼Î·Î½Ï
μάÏÏν MSN
Comment[en_GB]=MSN Messenger
Comment[eo]=MSN MesaÄilo
Comment[es]=MSN Messenger
-Comment[et]=MSN Messenger
Comment[fi]=MSN Messenger
Comment[fr]=Messagerie MSN
Comment[ga]=MSN Messenger
@@ -63,7 +62,6 @@ Name[el]=ÎÏοÏÏολÎÎ±Ï Î¼Î·Î½Ï
μάÏÏν MSN
Name[en_GB]=MSN Messenger
Name[eo]=MSN mesaÄilo
Name[es]=MSN Messenger
-Name[et]=MSN Messenger
Name[fi]=MSN Messenger
Name[fr]=Messagerie MSN
Name[ga]=MSN Messenger
diff --git a/akonadi/contact/editor/im/protocols/skypeprotocol.desktop b/akonadi/contact/editor/im/protocols/skypeprotocol.desktop
index f6ad208..a2c81a6 100644
--- a/akonadi/contact/editor/im/protocols/skypeprotocol.desktop
+++ b/akonadi/contact/editor/im/protocols/skypeprotocol.desktop
@@ -14,7 +14,6 @@ Comment[el]=ÎιαδικÏÏ
ακή ÏηλεÏÏνία Skype
Comment[en_GB]=Skype Internet Telephony
Comment[eo]=Skype Interreta Telefonado
Comment[es]=TelefonÃa por Internet de Skype
-Comment[et]=Internetitelefon Skype
Comment[fi]=Skype-internetpuhelin
Comment[fr]=Téléphonie Internet Skype
Comment[ga]=TeileafónaÃocht IdirlÃn Skype
@@ -62,7 +61,6 @@ Name[el]=Skype
Name[en_GB]=Skype
Name[eo]=kype
Name[es]=Skype
-Name[et]=Skype
Name[fi]=Skype
Name[fr]=Skype
Name[ga]=Skype
diff --git a/akonadi/contact/editor/im/protocols/smsprotocol.desktop b/akonadi/contact/editor/im/protocols/smsprotocol.desktop
index 20e0f0b..d5fa38c 100644
--- a/akonadi/contact/editor/im/protocols/smsprotocol.desktop
+++ b/akonadi/contact/editor/im/protocols/smsprotocol.desktop
@@ -14,7 +14,6 @@ Comment[el]=Î ÏÏÏÏκολλο SMS
Comment[en_GB]=SMS Protocol
Comment[eo]=SMS Protokolo
Comment[es]=Protocolo SMS
-Comment[et]=SMS protokoll
Comment[fi]=Tekstiviestiyhteyskäytäntö
Comment[fr]=Protocole SMS
Comment[ga]=Prótacal SMS
@@ -63,7 +62,6 @@ Name[el]=SMS
Name[en_GB]=SMS
Name[eo]=SMS
Name[es]=SMS
-Name[et]=SMS
Name[fi]=Tekstiviesti
Name[fr]=SMS
Name[ga]=SMS
diff --git a/akonadi/contact/editor/im/protocols/yahooprotocol.desktop b/akonadi/contact/editor/im/protocols/yahooprotocol.desktop
index f259e53..b400057 100644
--- a/akonadi/contact/editor/im/protocols/yahooprotocol.desktop
+++ b/akonadi/contact/editor/im/protocols/yahooprotocol.desktop
@@ -14,7 +14,6 @@ Comment[el]=Î ÏÏÏÏκολλο Yahoo
Comment[en_GB]=Yahoo Protocol
Comment[eo]=Yahoo Protokolo
Comment[es]=Protocolo Yahoo
-Comment[et]=Yahoo protokoll
Comment[fi]=Yahoo-yhteyskäytäntö
Comment[fr]=Protocole Yahoo
Comment[ga]=Prótacal Yahoo
@@ -63,7 +62,6 @@ Name[el]=Yahoo
Name[en_GB]=Yahoo
Name[eo]=Yahoo
Name[es]=Yahoo
-Name[et]=Yahoo
Name[fi]=Yahoo
Name[fr]=Yahoo
Name[ga]=Yahoo
diff --git a/akonadi/contact/kcm/akonadicontact_actions.desktop b/akonadi/contact/kcm/akonadicontact_actions.desktop
index 0718189..e06de2d 100644
--- a/akonadi/contact/kcm/akonadicontact_actions.desktop
+++ b/akonadi/contact/kcm/akonadicontact_actions.desktop
@@ -19,7 +19,6 @@ Name[de]=Kontakt-Aktionen
Name[el]=ÎνÎÏÎ³ÎµÎ¹ÎµÏ ÎµÏαÏÏν
Name[en_GB]=Contact Actions
Name[es]=Acciones de contactos
-Name[et]=Kontaktitoimingud
Name[fi]=Yhteystietotoiminnot
Name[fr]=Actions sur les contacts
Name[ga]=GnÃomhartha Teagmhála
@@ -70,7 +69,6 @@ Comment[de]=Kontakt-Aktionen einrichten
Comment[el]=ÎιαμÏÏÏÏÏη ÏÏν ενεÏγειÏν ÏÏν εÏαÏÏν
Comment[en_GB]=Configure the Contact Actions
Comment[es]=Configurar las acciones de contactos
-Comment[et]=Kontaktitoimingute seadistamine
Comment[fi]=Yhteystietotoimintojen asetukset
Comment[fr]=Configurer les actions sur les contacts
Comment[ga]=Cumraigh na GnÃomhartha Teagmhála
@@ -119,7 +117,6 @@ X-KDE-Keywords[de]=kaddressbook, configure, settings, contact, actions
X-KDE-Keywords[el]=kaddressbook, διαμÏÏÏÏÏη, ÏÏ
θμίÏειÏ, εÏαÏή, ενÎÏγειεÏ
X-KDE-Keywords[en_GB]=kaddressbook, configure, settings, contact, actions
X-KDE-Keywords[es]=kaddressbook, configurar, preferencias, contacto, acciones
-X-KDE-Keywords[et]=kde aadressiraamat, seadistamine, seadistused, kontakt, toimingud
X-KDE-Keywords[fi]=kaddressbook, asetukset, yhteystieto, toiminnot
X-KDE-Keywords[fr]=KAddressBook, configuration, paramètres, contacts, actions
X-KDE-Keywords[ga]=kaddressbook, cumraigh, cumraÃocht, socruithe, teagmháil, gnÃomhartha
diff --git a/akonadi/socialutils/serializer/akonadi_serializer_socialfeeditem.desktop b/akonadi/socialutils/serializer/akonadi_serializer_socialfeeditem.desktop
index dfce256..242dfd0 100644
--- a/akonadi/socialutils/serializer/akonadi_serializer_socialfeeditem.desktop
+++ b/akonadi/socialutils/serializer/akonadi_serializer_socialfeeditem.desktop
@@ -8,7 +8,6 @@ Name[de]=SocialFeedItem-Serialisierung
Name[el]=Î ÏÏγÏαμμα γÏÎ±Î¼Î¼Î¹ÎºÎ®Ï Î´Î¹Î¬ÏÎ±Î¾Î·Ï SocialFeedItem
Name[en_GB]=SocialFeedItem Serializer
Name[es]=Serializador SocialFeedItem
-Name[et]=SocialFeedItemi jadasti
Name[fi]=SocialFeedItem-serialisoija
Name[fr]=Sérialiseur « SocialFeedItem »
Name[gl]=Serializador SocialFeedItem
@@ -46,7 +45,6 @@ Comment[de]=Akonadi-Modul zur Serialisierung für SocialFeedItem
Comment[el]=Îνα ÏÏÏÏθεÏο γÏÎ±Î¼Î¼Î¹ÎºÎ®Ï Î´Î¹Î¬ÏÎ±Î¾Î·Ï ÏοÏ
Akonadi για Ïο SocialFeedItem
Comment[en_GB]=An Akonadi serializer plugin for SocialFeedItem
Comment[es]=Un complemento de serializador Akonadi para SocialFeedItem
-Comment[et]=Akonadi SocialFeedItemi jadastamisplugin
Comment[fi]=Akonadi-serialisoijaliitännäinen SocialFeedItemille
Comment[fr]=Un module externe de sérialisation Akonadi pour « SocialFeedItem »
Comment[gl]=Un complemento serializador de Akonadi para SocialFeedItem.
diff --git a/kabc/formats/binary.desktop b/kabc/formats/binary.desktop
index 2f31b04..67b83f8 100644
--- a/kabc/formats/binary.desktop
+++ b/kabc/formats/binary.desktop
@@ -10,7 +10,6 @@ Name[de]=Binär
Name[el]=ÎÏ
αδικÏ
Name[en_GB]=Binary
Name[es]=Binario
-Name[et]=Binaar
Name[fi]=Binaari
Name[fr]=Binaire
Name[ga]=Dénártha
diff --git a/kabc/kabc_manager.desktop b/kabc/kabc_manager.desktop
index c9c8790..d908940 100644
--- a/kabc/kabc_manager.desktop
+++ b/kabc/kabc_manager.desktop
@@ -12,7 +12,6 @@ Name[el]=ÎÏαÏÎÏ
Name[en_GB]=Contacts
Name[eo]=Kontaktoj
Name[es]=Contactos
-Name[et]=Kontaktid
Name[fi]=Yhteystiedot
Name[fr]=Contacts
Name[ga]=Teagmhálacha
diff --git a/kabc/plugins/dir/dir.desktop b/kabc/plugins/dir/dir.desktop
index 6338a2e..ed99365 100644
--- a/kabc/plugins/dir/dir.desktop
+++ b/kabc/plugins/dir/dir.desktop
@@ -10,7 +10,6 @@ Name[el]=ΦάκελοÏ
Name[en_GB]=Folder
Name[eo]=Dosierujo
Name[es]=Carpeta
-Name[et]=Kataloog
Name[fi]=Kansio
Name[fr]=Dossier
Name[ga]=Fillteán
diff --git a/kabc/plugins/file/file.desktop b/kabc/plugins/file/file.desktop
index 553f017..2df65ae 100644
--- a/kabc/plugins/file/file.desktop
+++ b/kabc/plugins/file/file.desktop
@@ -11,7 +11,6 @@ Name[el]=ÎÏÏείο
Name[en_GB]=File
Name[eo]=Dosiero
Name[es]=Archivo
-Name[et]=Fail
Name[fi]=Tiedosto
Name[fr]=Fichier
Name[ga]=Comhad
diff --git a/kabc/plugins/ldapkio/ldapkio.desktop b/kabc/plugins/ldapkio/ldapkio.desktop
index 112cf90..25255c9 100644
--- a/kabc/plugins/ldapkio/ldapkio.desktop
+++ b/kabc/plugins/ldapkio/ldapkio.desktop
@@ -11,7 +11,6 @@ Name[el]=LDAP
Name[en_GB]=LDAP
Name[eo]=LDAP
Name[es]=LDAP
-Name[et]=LDAP
Name[fi]=LDAP
Name[fr]=LDAP
Name[ga]=LDAP
@@ -66,7 +65,6 @@ Comment[de]=Ermöglicht Zugriff auf Kontakte, die auf einem LDAP-Server gespeich
Comment[el]=Î ÏοÏÏÎÏει ÏÏÏÏβαÏη Ïε εÏαÏÎÏ, αÏοθηκεÏ
μÎÎ½ÎµÏ Ïε Îναν εξÏ
ÏηÏεÏηÏή καÏαλÏγοÏ
LDAP
Comment[en_GB]=Provides access to contacts stored on a LDAP directory server
Comment[es]=Provee acceso a los contactos almacenados en un servidor de directorios LDAP
-Comment[et]=Võimaldab kasutada LDAP kataloogiserverisse salvestatud kontakte
Comment[fi]=Tarjoaa pääsyn LDAP-hakemistopalvelimelle tallennettuihin yhteystietoihin
Comment[fr]=Fournit un accès aux contacts enregistrés dans un annuaire LDAP
Comment[ga]=SoláthraÃonn sé seo rochtain ar theagmhálacha atá stóráilte in eolaire LDAP
diff --git a/kabc/plugins/net/net.desktop b/kabc/plugins/net/net.desktop
index 54a3df3..1aa3aec 100644
--- a/kabc/plugins/net/net.desktop
+++ b/kabc/plugins/net/net.desktop
@@ -11,7 +11,6 @@ Name[el]=ÎίκÏÏ
ο
Name[en_GB]=Network
Name[eo]=Reto
Name[es]=Red
-Name[et]=Võrk
Name[fi]=Verkko
Name[fr]=Réseau
Name[ga]=LÃonra
diff --git a/kcal/kcal_manager.desktop b/kcal/kcal_manager.desktop
index 282549e..dd9573e 100644
--- a/kcal/kcal_manager.desktop
+++ b/kcal/kcal_manager.desktop
@@ -12,7 +12,6 @@ Name[el]=ÎμεÏολÏγιο
Name[en_GB]=Calendar
Name[eo]=Kalendaro
Name[es]=Calendario
-Name[et]=Kalender
Name[fi]=Kalenteri
Name[fr]=Calendrier
Name[ga]=Féilire
diff --git a/kcal/localdir.desktop b/kcal/localdir.desktop
index 664adb2..4c73f76 100644
--- a/kcal/localdir.desktop
+++ b/kcal/localdir.desktop
@@ -10,7 +10,6 @@ Name[de]=Kalender in lokalem Ordner
Name[el]=ÎμεÏολÏγιο Ïε ÏοÏÎ¹ÎºÏ ÎºÎ±Ïάλογο
Name[en_GB]=Calendar in Local Directory
Name[es]=Calendario en directorio local
-Name[et]=Kalender kohalikus kataloogis
Name[fi]=Kalenteri paikallisessa kansiossa
Name[fr]=Calendrier dans un dossier local
Name[ga]=Féilire i gComhadlann Logánta
@@ -62,7 +61,6 @@ Comment[de]=Ermöglicht Zugriff auf Kalender, die jeweils in einzelnen Dateien i
Comment[el]=Î ÏοÏÏÎÏει ÏÏÏÏβαÏη Ïε ανÏικείμενα ημεÏολογίοÏ
, αÏοθηκεÏ
μÎνα Ïε ξεÏÏÏιÏÏά αÏÏεία, Ïε Îνα δοÏμÎνο καÏάλογο
Comment[en_GB]=Provides access to calendar items, each stored in a single file, in a given directory
Comment[es]=Provee acceso a elementos de un calendario, cada uno almacenado en un archivo diferente, dentro de un directorio determinado
-Comment[et]=Võimaldab kasutada eraldi failidesse salvestatud kalendrielemente määratud kataloogis
Comment[fi]=Tarjoaa pääsyn annetun kansion erillisiin tiedostoihin tallennettuihin kalenteritietueisiin
Comment[fr]=Fournit un accès à des entrées d'agenda, chaque élément étant enregistré dans un fichier unique, dans le dossier indiqué
Comment[ga]=SoláthraÃonn sé seo rochtain ar mhÃreanna féilire, gach ceann stóráilte i gcomhad aonair, i gcomhadlann sonraithe
diff --git a/kioslave/sieve/sieve.protocol b/kioslave/sieve/sieve.protocol
index 6333da2..ce62b67 100644
--- a/kioslave/sieve/sieve.protocol
+++ b/kioslave/sieve/sieve.protocol
@@ -22,7 +22,6 @@ Description[de]=Ein Ein-/Ausgabemodul für das Mailfilter-Protokoll Sieve
Description[el]=Îνα ioslave για Ïο ÏÏÏÏÏκολλο ÏιλÏÏαÏίÏμαÏÎ¿Ï Î±Î»Î»Î·Î»Î¿Î³ÏαÏÎ¯Î±Ï Sieve
Description[en_GB]=An ioslave for the Sieve mail filtering protocol
Description[es]=Un esclavo de E/S para el protocolo de filtrado de correo Sieve
-Description[et]=Sieve kirjade filtreerimise protokolli IO-moodul
Description[fi]=I/O-asiakas Sieve-postinsuodatusyhteyskäytännölle
Description[fr]=Un module d'entrées / sorties pour le protocole de filtrage de messagerie « Sieve »
Description[ga]=Sclábhaà I/A le haghaidh prótacail scagtha rÃomhphoist Sieve
diff --git a/kontactinterface/kontactplugin.desktop b/kontactinterface/kontactplugin.desktop
index 5ebe951..a33a0c1 100644
--- a/kontactinterface/kontactplugin.desktop
+++ b/kontactinterface/kontactplugin.desktop
@@ -11,7 +11,6 @@ Name[de]=Kontact-Modul
Name[el]=Î ÏÏÏθεÏο Kontact
Name[en_GB]=Kontact Plugin
Name[es]=Complemento de Kontact
-Name[et]=Kontacti plugin
Name[fi]=Kontact-liitännäinen
Name[fr]=Module externe pour Kontact
Name[ga]=Breiseán Kontact
diff --git a/kresources/kresources.desktop b/kresources/kresources.desktop
index 6f36326..33b5da1 100644
--- a/kresources/kresources.desktop
+++ b/kresources/kresources.desktop
@@ -19,7 +19,6 @@ Name[de]=KDE-Ressourcen
Name[el]=Î ÏÏοι ÏοÏ
KDE
Name[en_GB]=KDE Resources
Name[es]=Recursos KDE
-Name[et]=KDE ressursid
Name[fi]=KDE-resurssit
Name[fr]=Ressources KDE
Name[ga]=Acmhainnà KDE
@@ -74,7 +73,6 @@ Comment[de]=KDE-Ressourcen einrichten
Comment[el]=ÎιαμÏÏÏÏÏη ÏÏÏÏν ÏοÏ
KDE
Comment[en_GB]=Configure KDE Resources
Comment[es]=Configurar recursos de KDE
-Comment[et]=KDE ressursside seadistamine
Comment[fi]=KDE-resurssien asetukset
Comment[fr]=Configurer les ressources KDE
Comment[ga]=Cumraigh Acmhainnà KDE
@@ -126,7 +124,6 @@ X-KDE-Keywords[de]=resources,konnector resource,contact resource,calendar resour
X-KDE-Keywords[el]=ÏÏÏοι,ÏÏÏÎ¿Ï konnector,εÏαÏή,ÏÏÏοÏ,ÏÏÏÎ¿Ï Î·Î¼ÎµÏολογίοÏ
,ÏÏÏÎ¿Ï ÏημειÏÏεÏν,ÏÏÏÎ¿Ï ÎµÎ¹Î´Î¿ÏοιήÏεÏν,imap
X-KDE-Keywords[en_GB]=resources,connector resource,contact resource,calendar resource,notes resource,alarm resource,imap
X-KDE-Keywords[es]=recursos,recurso de conector,recurso de contacto,recurso de calendario,recurso de notas,recurso de alarma,imap
-X-KDE-Keywords[et]=ressursid,konnektor,ressurss,kontaktiressurss,kalendriressurss,märkmeressurss,häireressurss,imap
X-KDE-Keywords[fi]=resurssit,konnector-resurssi,yhteystietoresurssi,kalenteriresurssi,muistiinpanoresurssi,hälytysresurssi,imap
X-KDE-Keywords[fr]=ressources, ressource connecteur, ressource contact, ressource agenda, ressource notes, ressource alarme, imap
X-KDE-Keywords[ga]=acmhainnÃ,acmhainn konnector,acmhainn teagmhála,acmhainn fhéilire,acmhainn nótaÃ,acmhainn aláraim,imap
diff --git a/kresources/kresources_manager.desktop b/kresources/kresources_manager.desktop
index 8dfa587..b1a5e25 100644
--- a/kresources/kresources_manager.desktop
+++ b/kresources/kresources_manager.desktop
@@ -9,7 +9,6 @@ Name[de]=Ressourcenverwaltung
Name[el]=ÎιαÏειÏιÏÏÎ®Ï KResources
Name[en_GB]=KResources Manager
Name[es]=Gestor de KResources
-Name[et]=KDE ressursside haldur
Name[fi]=KResources-hallinta
Name[fr]=Gestionnaire de ressources
Name[ga]=Bainisteoir KResources
@@ -65,7 +64,6 @@ Comment[de]=Ressourcenverwaltung
Comment[el]=ÎιαÏειÏιÏÏÎ®Ï KResources
Comment[en_GB]=KResources Manager
Comment[es]=Gestor de KResources
-Comment[et]=KDE ressursside haldur
Comment[fi]=KResources-hallinta
Comment[fr]=Gestionnaire KResources
Comment[ga]=Bainisteoir KResources
diff --git a/kresources/kresources_plugin.desktop b/kresources/kresources_plugin.desktop
index 5aae84c..628769c 100644
--- a/kresources/kresources_plugin.desktop
+++ b/kresources/kresources_plugin.desktop
@@ -9,7 +9,6 @@ Name[de]=KRessourcen-Modul
Name[el]=Î ÏÏÏθεÏο KResources
Name[en_GB]=KResources Plugin
Name[es]=Complemento de KResources
-Name[et]=KDE ressursside plugin
Name[fi]=KResources-liitännäinen
Name[fr]=Module externe KResources
Name[ga]=Breiseán KResources
@@ -64,7 +63,6 @@ Comment[de]=Modul für KRessourcen-Grundgerüst
Comment[el]=Î ÏÏÏθεÏο ÏλαιÏίοÏ
εÏγαÏÎ¯Î±Ï ÏοÏ
KResource
Comment[en_GB]=KResources Framework Plugin
Comment[es]=Complemento de infraestructura de KResources
-Comment[et]=KDE ressursside raamistiku plugin
Comment[fi]=KResources-kehysliitännäinen
Comment[fr]=Module externe d'environnement KResources
Comment[ga]=Breiseán Creatlaà KResources
diff --git a/mailtransport/kcm_mailtransport.desktop b/mailtransport/kcm_mailtransport.desktop
index cd91956..f0587b3 100644
--- a/mailtransport/kcm_mailtransport.desktop
+++ b/mailtransport/kcm_mailtransport.desktop
@@ -22,7 +22,6 @@ Name[de]=Versandart
Name[el]=ÎÏÏÎ¹Î¿Ï Î¼ÎµÏαÏοÏÎαÏ
Name[en_GB]=Mail Transport
Name[es]=Transporte de correo
-Name[et]=Kirja saatmise viis
Name[fi]=Postinvälitys
Name[fr]=Transport de courrier électronique
Name[ga]=Iompar RÃomhphoist
commit 8604cff4d7c5971c6d84af71763cb2eee729f32a
Author: Christian Mollekopf <chrigi_1 at fastmail.fm>
Date: Wed Jul 23 15:41:26 2014 +0200
ETMCalendar: Iterate over the different collections.
REVIEW: 119423
diff --git a/akonadi/calendar/etmcalendar.cpp b/akonadi/calendar/etmcalendar.cpp
index 29d51eb..9bb16d4 100644
--- a/akonadi/calendar/etmcalendar.cpp
+++ b/akonadi/calendar/etmcalendar.cpp
@@ -346,10 +346,8 @@ void ETMCalendarPrivate::onDataChanged(const QModelIndex &topLeft,
// We only update collections, because items are handled in the filtered model
Q_ASSERT(topLeft.row() <= bottomRight.row());
const int endRow = bottomRight.row();
- QModelIndex i(topLeft);
- int row = i.row();
- while (row <= endRow) {
- const Akonadi::Collection col = collectionFromIndex(i);
+ for (int row = topLeft.row(); row <= endRow; row++) {
+ const Akonadi::Collection col = collectionFromIndex(topLeft.sibling(row, 0));
if (col.isValid()) {
// Attributes might have changed, store the new collection and discard the old one
mCollectionMap.insert(col.id(), col);
commit b0ddb3436600d2c264674fdbadbe34dcd0fffac0
Author: Christian Mollekopf <chrigi_1 at fastmail.fm>
Date: Wed Jul 23 14:46:50 2014 +0200
ETMCalendar: Use listfilter to hide non-enabled collections
diff --git a/akonadi/calendar/etmcalendar.cpp b/akonadi/calendar/etmcalendar.cpp
index f0003e4..29d51eb 100644
--- a/akonadi/calendar/etmcalendar.cpp
+++ b/akonadi/calendar/etmcalendar.cpp
@@ -73,6 +73,7 @@ void ETMCalendarPrivate::init()
monitor->setCollectionMonitored(Akonadi::Collection::root());
monitor->fetchCollection(true);
monitor->setItemFetchScope(scope);
+ monitor->setAllMonitored(true);
QStringList allMimeTypes;
allMimeTypes << KCalCore::Event::eventMimeType() << KCalCore::Todo::todoMimeType()
@@ -84,6 +85,7 @@ void ETMCalendarPrivate::init()
mETM = CalendarModel::create(monitor);
mETM->setObjectName("ETM");
+ mETM->setListFilter(Akonadi::CollectionFetchScope::Display);
}
setupFilteredETM();
commit 4a447ae4f3899cf51e450ab2ca3fe95bcfa67b86
Author: Christian Mollekopf <chrigi_1 at fastmail.fm>
Date: Wed Jul 23 13:57:48 2014 +0200
added CollectionIdentificationAttribute
diff --git a/akonadi/CMakeLists.txt b/akonadi/CMakeLists.txt
index a6fc0aa..5b748c3 100644
--- a/akonadi/CMakeLists.txt
+++ b/akonadi/CMakeLists.txt
@@ -87,6 +87,7 @@ set( akonadikde_LIB_SRC
collectionfilterproxymodel.cpp
collectionfetchjob.cpp
collectionfetchscope.cpp
+ collectionidentificationattribute.cpp
collectionmodel.cpp
collectionmodel_p.cpp
collectionmodifyjob.cpp
@@ -338,6 +339,7 @@ install( FILES
collectionfilterproxymodel.h
collectionfetchjob.h
collectionfetchscope.h
+ collectionidentificationattribute.h
collectionmodel.h
collectionmodifyjob.h
collectionmovejob.h
diff --git a/akonadi/collectionidentificationattribute.cpp b/akonadi/collectionidentificationattribute.cpp
new file mode 100644
index 0000000..ae3908d
--- /dev/null
+++ b/akonadi/collectionidentificationattribute.cpp
@@ -0,0 +1,97 @@
+/*
+ Copyright (c) 2014 Christian Mollekopf <mollekopf at kolabsys.com>
+
+ This library is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or (at your
+ option) any later version.
+
+ This library 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 Library General Public
+ License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301, USA.
+*/
+
+#include "collectionidentificationattribute.h"
+
+#include "imapparser_p.h"
+
+#include <QByteArray>
+#include <QList>
+
+class CollectionIdentificationAttribute::Private
+{
+public:
+ Private() {}
+ QByteArray mFolderNamespace;
+ QByteArray mIdentifier;
+};
+
+CollectionIdentificationAttribute::CollectionIdentificationAttribute(const QByteArray &identifier, const QByteArray &folderNamespace)
+ :d(new Private)
+{
+ d->mIdentifier = identifier;
+ d->mFolderNamespace = folderNamespace;
+}
+
+CollectionIdentificationAttribute::~CollectionIdentificationAttribute()
+{
+ delete d;
+}
+
+void CollectionIdentificationAttribute::setIdentifier(const QByteArray &identifier)
+{
+ d->mIdentifier = identifier;
+}
+
+QByteArray CollectionIdentificationAttribute::identifier() const
+{
+ return d->mIdentifier;
+}
+
+void CollectionIdentificationAttribute::setCollectionNamespace(const QByteArray &ns)
+{
+ d->mFolderNamespace = ns;
+}
+
+QByteArray CollectionIdentificationAttribute::collectionNamespace() const
+{
+ return d->mFolderNamespace;
+}
+
+QByteArray CollectionIdentificationAttribute::type() const
+{
+ return "collectionidentification";
+}
+
+Akonadi::Attribute* CollectionIdentificationAttribute::clone() const
+{
+ return new CollectionIdentificationAttribute(d->mIdentifier, d->mFolderNamespace);
+}
+
+QByteArray CollectionIdentificationAttribute::serialized() const
+{
+ QList<QByteArray> l;
+ l << Akonadi::ImapParser::quote(d->mIdentifier);
+ l << Akonadi::ImapParser::quote(d->mFolderNamespace);
+ return '(' + Akonadi::ImapParser::join(l, " ") + ')';
+}
+
+void CollectionIdentificationAttribute::deserialize(const QByteArray &data)
+{
+ QList<QByteArray> l;
+ Akonadi::ImapParser::parseParenthesizedList(data, l);
+ const int size = l.size();
+ Q_ASSERT(size >= 2);
+ if (size < 2) {
+ return;
+ }
+ d->mIdentifier = l[0];
+ d->mFolderNamespace = l[1];
+}
+
diff --git a/akonadi/collectionidentificationattribute.h b/akonadi/collectionidentificationattribute.h
new file mode 100644
index 0000000..c0204c0
--- /dev/null
+++ b/akonadi/collectionidentificationattribute.h
@@ -0,0 +1,67 @@
+/*
+ Copyright (c) 2014 Christian Mollekopf <mollekopf at kolabsys.com>
+
+ This library is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or (at your
+ option) any later version.
+
+ This library 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 Library General Public
+ License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301, USA.
+*/
+
+#ifndef COLLECTIONIDENTIFICATIONATTRIBUTE_H
+#define COLLECTIONIDENTIFICATIONATTRIBUTE_H
+
+#include <akonadi/attribute.h>
+#include <QByteArray>
+
+/**
+ * @short Attribute that stores additional information on a collection that can be used for searching.
+ *
+ * Additional indexed properties that can be used for searching.
+ *
+ * @author Christian Mollekopf <mollekopf at kolabsys.com>
+ * @since 4.15
+ */
+class AKONADI_EXPORT CollectionIdentificationAttribute : public Akonadi::Attribute
+{
+public:
+ explicit CollectionIdentificationAttribute(const QByteArray &identifier = QByteArray(), const QByteArray &folderNamespace = QByteArray());
+ ~CollectionIdentificationAttribute();
+
+ /**
+ * Sets an identifier for the collection.
+ */
+ void setIdentifier(const QByteArray &);
+ QByteArray identifier() const;
+
+ /**
+ * Sets a namespace the collection is in.
+ *
+ * Initially used are:
+ * * "person" for a collection shared by a person.
+ * * "shared" for a collection shared by a person.
+ */
+ void setCollectionNamespace(const QByteArray &);
+ QByteArray collectionNamespace() const;
+ virtual QByteArray type() const;
+ virtual Attribute* clone() const;
+ virtual QByteArray serialized() const;
+ virtual void deserialize(const QByteArray &data);
+
+private:
+ //@cond PRIVATE
+ class Private;
+ Private* const d;
+ //@endcond
+};
+
+#endif
diff --git a/akonadi/tests/collectionattributetest.cpp b/akonadi/tests/collectionattributetest.cpp
index f0de6b7..92ac7e7 100644
--- a/akonadi/tests/collectionattributetest.cpp
+++ b/akonadi/tests/collectionattributetest.cpp
@@ -28,6 +28,7 @@
#include <akonadi/collectionmodifyjob.h>
#include <akonadi/collectionrightsattribute_p.h>
#include <akonadi/control.h>
+#include <akonadi/collectionidentificationattribute.h>
#include <qtest_akonadi.h>
@@ -191,3 +192,19 @@ void CollectionAttributeTest::testCollectionRightsAttribute()
QCOMPARE( attribute.rights(), rights );
}
}
+
+void CollectionAttributeTest::testCollectionIdentifcationAttribute()
+{
+ QByteArray id("identifier");
+ QByteArray ns("namespace");
+ CollectionIdentificationAttribute attribute(id, ns);
+ QCOMPARE(attribute.identifier(), id);
+ QCOMPARE(attribute.collectionNamespace(), ns);
+
+ QByteArray result = attribute.serialized();
+ CollectionIdentificationAttribute parsed;
+ parsed.deserialize(result);
+ kDebug() << parsed.identifier() << parsed.collectionNamespace() << result;;
+ QCOMPARE(parsed.identifier(), id);
+ QCOMPARE(parsed.collectionNamespace(), ns);
+}
diff --git a/akonadi/tests/collectionattributetest.h b/akonadi/tests/collectionattributetest.h
index 118857d..b78dd74 100644
--- a/akonadi/tests/collectionattributetest.h
+++ b/akonadi/tests/collectionattributetest.h
@@ -31,6 +31,7 @@ class CollectionAttributeTest : public QObject
void testAttributes();
void testDefaultAttributes();
void testCollectionRightsAttribute();
+ void testCollectionIdentifcationAttribute();
};
#endif
commit 9c2537e2078c1c74dab01f3181e5f3143d11c862
Author: Montel Laurent <montel at kde.org>
Date: Tue Jul 22 21:14:25 2014 +0200
Fix crash
diff --git a/mailtransport/tests/transportmgr.cpp b/mailtransport/tests/transportmgr.cpp
index cdb2de5..23d7031 100644
--- a/mailtransport/tests/transportmgr.cpp
+++ b/mailtransport/tests/transportmgr.cpp
@@ -79,9 +79,12 @@ void TransportMgr::editBtnClicked()
{
// NOTE: Using deprecated TransportConfigDialog here for testing purposes.
// The TransportManagementWidget uses the non-deprecated method instead.
+ const int index = mComboBox->currentTransportId();
+ if (index < 0)
+ return;
TransportConfigDialog *t =
new TransportConfigDialog(
- TransportManager::self()->transportById( mComboBox->currentTransportId() ), this );
+ TransportManager::self()->transportById( index ), this );
t->exec();
delete t;
}
commit 5ad11287fca3fc49b00fda1e362e0057c44db2bd
Author: Montel Laurent <montel at kde.org>
Date: Thu Jul 17 07:47:49 2014 +0200
Fix enable/disable. Fix change windowTitle
diff --git a/akonadi/collectionrequester.cpp b/akonadi/collectionrequester.cpp
index 02f913d..79bc982 100644
--- a/akonadi/collectionrequester.cpp
+++ b/akonadi/collectionrequester.cpp
@@ -239,4 +239,18 @@ void CollectionRequester::changeCollectionDialogOptions(CollectionDialog::Collec
}
}
+void CollectionRequester::changeEvent(QEvent *event)
+{
+ if (event->type() == QEvent::WindowTitleChange) {
+ if (d->collectionDialog) {
+ d->collectionDialog->setCaption(windowTitle());
+ }
+ } else if (event->type() == QEvent::EnabledChange) {
+ if (d->collectionDialog) {
+ d->collectionDialog->setEnabled(true);
+ }
+ }
+ KHBox::changeEvent(event);
+}
+
#include "moc_collectionrequester.cpp"
diff --git a/akonadi/collectionrequester.h b/akonadi/collectionrequester.h
index e79ac88..42e5e51 100644
--- a/akonadi/collectionrequester.h
+++ b/akonadi/collectionrequester.h
@@ -115,6 +115,9 @@ public:
*/
void changeCollectionDialogOptions(CollectionDialog::CollectionDialogOptions options);
+protected:
+ void changeEvent(QEvent * event);
+
public Q_SLOTS:
/**
* Sets the @p collection of the requester.
commit 48e222adc1fc27fbd6e63675f6a21475a68796dc
Author: l10n daemon script <scripty at kde.org>
Date: Wed Jul 16 05:00:57 2014 +0000
SVN_SILENT made messages (.desktop file)
diff --git a/akonadi/contact/kcm/akonadicontact_actions.desktop b/akonadi/contact/kcm/akonadicontact_actions.desktop
index 9e31c5b..0718189 100644
--- a/akonadi/contact/kcm/akonadicontact_actions.desktop
+++ b/akonadi/contact/kcm/akonadicontact_actions.desktop
@@ -91,7 +91,7 @@ Comment[nds]=Kontakt-Akschonen instellen
Comment[nl]=De contactpersoon-actie configureren
Comment[nn]=Set opp kontakthandlingar
Comment[pa]=ਸੰਪਰਠà¨à¨à¨¸à¨¼à¨¨ ਸੰਰà¨à¨¨à¨¾
-Comment[pl]=Konfiguruj dziaÅania kontaktu
+Comment[pl]=Ustaw dziaÅania kontaktu
Comment[pt]=Configurar as Acções do Contacto
Comment[pt_BR]=Configura as ações do contato
Comment[ro]=ConfigureazÄ acÈiunile contact
diff --git a/kresources/kresources.desktop b/kresources/kresources.desktop
index 5ebe021..6f36326 100644
--- a/kresources/kresources.desktop
+++ b/kresources/kresources.desktop
@@ -96,7 +96,7 @@ Comment[nds]=KDE Ressourcen instellen
Comment[nl]=KDE-hulpbronnen instellen
Comment[nn]=Set opp KDE-ressursar
Comment[pa]=KDE ਸਰà©à¨¤ ਸੰਰà¨à¨¨à¨¾
-Comment[pl]=Konfiguruj zasoby KDE
+Comment[pl]=Ustaw zasoby KDE
Comment[pt]=Configurar os Recursos do KDE
Comment[pt_BR]=Configura as fontes de dados do KDE
Comment[ro]=Configurare resurse KDE
diff --git a/kresources/kresources_manager.desktop b/kresources/kresources_manager.desktop
index 07f0b34..8dfa587 100644
--- a/kresources/kresources_manager.desktop
+++ b/kresources/kresources_manager.desktop
@@ -31,7 +31,7 @@ Name[nds]=KResources-Pleger
Name[nl]=KResource-beheerder
Name[nn]=KResources-handsaming
Name[pa]=à¨à©-ਰà©à¨¸à©à¨°à¨¸ ਮà©à¨¨à©à¨à¨°
-Name[pl]=Menadżer zasobów KDE (KResource)
+Name[pl]=ZarzÄ
dzanie zasobami KDE (KResource)
Name[pt]=Gestor do KResources
Name[pt_BR]=Gerenciador do KResource
Name[ro]=Gestionar KResurse
@@ -87,7 +87,7 @@ Comment[nds]=KDE-Ressourcenpleger
Comment[nl]=KResource-beheerder
Comment[nn]=KResource-handsaming
Comment[pa]=à¨à©-ਰà©à¨¸à©à¨°à¨¸ ਮà©à¨¨à©à¨à¨°
-Comment[pl]=Menadżer zasobów KDE (KResource)
+Comment[pl]=ZarzÄ
dzanie zasobami KDE (KResource)
Comment[pt]=Gestor do KResources
Comment[pt_BR]=Gerenciador do KResource
Comment[ro]=Gestionar KResurse
commit 811371038c2db0a06e7a31d1bd45d322617d0cb6
Author: Christian Mollekopf <chrigi_1 at fastmail.fm>
Date: Tue Jun 24 09:36:30 2014 +0200
Tagsupport for knutresource
REVIEW: 119236
diff --git a/akonadi/tests/testresource/knutresource.cpp b/akonadi/tests/testresource/knutresource.cpp
index 2e61dc7..3522409 100644
--- a/akonadi/tests/testresource/knutresource.cpp
+++ b/akonadi/tests/testresource/knutresource.cpp
@@ -31,6 +31,7 @@
#include <akonadi/dbusconnectionpool.h>
#include <akonadi/item.h>
#include <akonadi/itemfetchscope.h>
+#include <akonadi/tagcreatejob.h>
#include <kfiledialog.h>
#include <klocale.h>
@@ -131,6 +132,11 @@ void KnutResource::retrieveCollections()
{
const Collection::List collections = mDocument.collections();
collectionsRetrieved( collections );
+ const Tag::List tags = mDocument.tags();
+ Q_FOREACH ( const Tag &tag, tags ) {
+ TagCreateJob *createjob = new TagCreateJob(tag);
+ createjob->setMergeIfExisting(true);
+ }
}
void KnutResource::retrieveItems( const Akonadi::Collection &collection )
diff --git a/akonadi/tests/unittestenv/kdehome/testdata-res1.xml b/akonadi/tests/unittestenv/kdehome/testdata-res1.xml
index 638904c..db51834 100644
--- a/akonadi/tests/unittestenv/kdehome/testdata-res1.xml
+++ b/akonadi/tests/unittestenv/kdehome/testdata-res1.xml
@@ -18,6 +18,7 @@
<payload>testmailbody1</payload>
<attribute type="HEAD">From: <test1 at user.tst></attribute>
<flag>\FLAGGED</flag>
+ <tag>tagrid</tag>
</item>
<item rid="C" mimetype="application/octet-stream">
<payload>testmailbody2</payload>
@@ -73,4 +74,5 @@
</item>
</collection>
</collection>
+ <tag name="name" type="type" gid="taggid" rid="tagrid"></tag>
</knut>
diff --git a/akonadi/xml/akonadi-xml.xsd b/akonadi/xml/akonadi-xml.xsd
index 4dba490..661b4ff 100644
--- a/akonadi/xml/akonadi-xml.xsd
+++ b/akonadi/xml/akonadi-xml.xsd
@@ -26,6 +26,7 @@
<xsd:sequence>
<xsd:element name="collection" type="collectionType" minOccurs="0" maxOccurs="unbounded"/>
<xsd:element name="item" type="itemType" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element name="tag" type="tagType" minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
@@ -46,11 +47,22 @@
<xsd:element name="payload" type="payloadType" minOccurs="0" maxOccurs="1"/>
<xsd:element name="attribute" type="attributeType" minOccurs="0" maxOccurs="unbounded"/>
<xsd:element name="flag" type="flagType" minOccurs="0" maxOccurs="unbounded"/>
+ <xsd:element name="tag" type="tagRIDRefType" minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
<xsd:attribute name="rid" type="xsd:string" use="required"/>
<xsd:attribute name="mimetype" type="xsd:string" use="required"/>
</xsd:complexType>
+ <xsd:complexType name="tagType">
+ <xsd:sequence>
+ <xsd:element name="tag" type="tagType" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ <xsd:attribute name="rid" type="xsd:string" use="required"/>
+ <xsd:attribute name="type" type="xsd:string" use="required"/>
+ <xsd:attribute name="gid" type="xsd:string" use="required"/>
+ <xsd:attribute name="name" type="xsd:string" use="required"/>
+ </xsd:complexType>
+
<xsd:complexType name="payloadType">
<xsd:simpleContent>
<xsd:extension base="xsd:string"/>
@@ -71,4 +83,10 @@
</xsd:simpleContent>
</xsd:complexType>
+ <xsd:complexType name="tagRIDRefType">
+ <xsd:simpleContent>
+ <xsd:extension base="xsd:string"/>
+ </xsd:simpleContent>
+ </xsd:complexType>
+
</xsd:schema>
diff --git a/akonadi/xml/format_p.h b/akonadi/xml/format_p.h
index 9144797..8e9e3b4 100644
--- a/akonadi/xml/format_p.h
+++ b/akonadi/xml/format_p.h
@@ -33,6 +33,7 @@ namespace Tag {
inline QString item() { return QString::fromLatin1( "item" ); }
inline QString attribute() { return QString::fromLatin1( "attribute" ); }
inline QString flag() { return QString::fromLatin1( "flag" ); }
+ inline QString tag() { return QString::fromLatin1( "tag" ); }
inline QString payload() { return QString::fromLatin1( "payload" ); }
}
@@ -44,6 +45,9 @@ namespace Attr {
inline QString collectionName() { return QString::fromLatin1( "name" ); }
inline QString collectionContentTypes() { return QString::fromLatin1( "content" ); }
inline QString itemMimeType() { return QString::fromLatin1( "mimetype" ); }
+ inline QString name() { return QString::fromLatin1( "name" ); }
+ inline QString gid() { return QString::fromLatin1( "gid" ); }
+ inline QString type() { return QString::fromLatin1( "type" ); }
}
diff --git a/akonadi/xml/xmldocument.cpp b/akonadi/xml/xmldocument.cpp
index 0c30086..a8f7f64 100644
--- a/akonadi/xml/xmldocument.cpp
+++ b/akonadi/xml/xmldocument.cpp
@@ -271,6 +271,11 @@ Collection::List XmlDocument::collections() const
return XmlReader::readCollections( d->document.documentElement() );
}
+Tag::List XmlDocument::tags() const
+{
+ return XmlReader::readTags( d->document.documentElement() );
+}
+
Collection::List XmlDocument::childCollections(const QString& parentCollectionRid) const
{
Collection c;
diff --git a/akonadi/xml/xmldocument.h b/akonadi/xml/xmldocument.h
index 0f768cc..4e20704 100644
--- a/akonadi/xml/xmldocument.h
+++ b/akonadi/xml/xmldocument.h
@@ -114,6 +114,11 @@ class AKONADI_XML_EXPORT XmlDocument
Collection::List collections() const;
/**
+ Returns the tags defined in this document.
+ */
+ Tag::List tags() const;
+
+ /**
Returns immediate child collections of the specified parent collection.
@deprecated Not HRID aware, use childCollections( Akonadi::Collection ) instead
*/
diff --git a/akonadi/xml/xmlreader.cpp b/akonadi/xml/xmlreader.cpp
index cdd91f7..a9fe516 100644
--- a/akonadi/xml/xmlreader.cpp
+++ b/akonadi/xml/xmlreader.cpp
@@ -22,6 +22,7 @@
#include "format_p.h"
#include <akonadi/attributefactory.h>
+#include <akonadi/tag.h>
#include <QStringList>
@@ -85,6 +86,45 @@ Collection::List XmlReader::readCollections(const QDomElement& elem)
return rv;
}
+Tag XmlReader::elementToTag(const QDomElement& elem)
+{
+ if ( elem.isNull() || elem.tagName() != Format::Tag::tag() )
+ return Tag();
+
+ Tag t;
+ t.setRemoteId( elem.attribute( Format::Attr::remoteId() ).toUtf8() );
+ t.setName( elem.attribute( Format::Attr::name() ) );
+ t.setGid( elem.attribute( Format::Attr::gid() ).toUtf8() );
+ t.setType( elem.attribute( Format::Attr::type() ).toUtf8() );
+
+ //TODO Implement rid parent support in TagCreateJob first
+ // const QDomElement parentElem = elem.parentNode().toElement();
+ // if ( !parentElem.isNull() && parentElem.tagName() == Format::Tag::tag() ) {
+ // Tag parent;
+ // parent.setRemoteId( parentElem.attribute( Format::Attr::remoteId() ).toLatin1() );
+ // t.setParent( parent );
+ // }
+
+ return t;
+}
+
+Tag::List XmlReader::readTags(const QDomElement& elem)
+{
+ Tag::List rv;
+ if ( elem.isNull() )
+ return rv;
+ if ( elem.tagName() == Format::Tag::tag() )
+ rv += elementToTag( elem );
+ const QDomNodeList children = elem.childNodes();
+ for ( int i = 0; i < children.count(); i++ ) {
+ const QDomElement child = children.at( i ).toElement();
+ if ( child.isNull() || child.tagName() != Format::Tag::tag() )
+ continue;
+ rv += readTags( child );
+ }
+ return rv;
+}
+
Item XmlReader::elementToItem(const QDomElement& elem, bool includePayload)
{
Item item( elem.attribute( Format::Attr::itemMimeType(), QLatin1String("application/octet-stream") ) );
@@ -98,6 +138,10 @@ Item XmlReader::elementToItem(const QDomElement& elem, bool includePayload)
continue;
if ( subElem.tagName() == Format::Tag::flag() ) {
item.setFlag( subElem.text().toUtf8() );
+ } else if ( subElem.tagName() == Format::Tag::tag() ) {
+ Tag tag;
+ tag.setRemoteId( subElem.text().toUtf8() );
+ item.setTag( tag );
} else if ( includePayload && subElem.tagName() == Format::Tag::payload() ) {
const QByteArray payloadData = subElem.text().toUtf8();
item.setPayloadFromData( payloadData );
diff --git a/akonadi/xml/xmlreader.h b/akonadi/xml/xmlreader.h
index 98d3473..1b3a920 100644
--- a/akonadi/xml/xmlreader.h
+++ b/akonadi/xml/xmlreader.h
@@ -60,6 +60,16 @@ namespace XmlReader
AKONADI_XML_EXPORT Collection::List readCollections( const QDomElement &elem );
/**
+ Converts a tag element.
+ */
+ AKONADI_XML_EXPORT Tag elementToTag( const QDomElement &elem );
+
+ /**
+ Reads recursively all tags starting from the given DOM element.
+ */
+ AKONADI_XML_EXPORT Tag::List readTags( const QDomElement &elem );
+
+ /**
Converts an item element.
*/
AKONADI_XML_EXPORT Item elementToItem( const QDomElement &elem, bool includePayload = true );
commit 18f37d111710d4eeb8d9f30551123e6ee1b51a7c
Author: Christian Mollekopf <chrigi_1 at fastmail.fm>
Date: Fri Jul 11 22:47:53 2014 +0200
ItemModifyJob: Allow modifying items tags via Tag RID or GID
This is required for resources to provide tags with requested items.
diff --git a/akonadi/itemmodifyjob.cpp b/akonadi/itemmodifyjob.cpp
index 994047f..4d52cdf 100644
--- a/akonadi/itemmodifyjob.cpp
+++ b/akonadi/itemmodifyjob.cpp
@@ -116,6 +116,45 @@ void ItemModifyJobPrivate::setSilent( bool silent )
mSilent = silent;
}
+QByteArray ItemModifyJobPrivate::tagsToCommandParameter(const Tag::List &tags) const
+{
+ QByteArray c;
+ if (tags.first().id() >= 0) {
+ c += "TAGS";
+ c += ' ' + ProtocolHelper::tagSetToImapSequenceSet(tags);
+ } else if (std::find_if(tags.constBegin(), tags.constEnd(),
+ boost::bind(&QByteArray::isEmpty, boost::bind(&Tag::remoteId, _1)))
+ == tags.constEnd()) {
+ //All items have a remoteId
+ c += "RTAGS";
+ QList<QByteArray> rids;
+ Q_FOREACH (const Tag &object, tags) {
+ rids << ImapParser::quote(object.remoteId());
+ }
+
+ c += '(';
+ c += ImapParser::join(rids, " ");
+ c += ')';
+
+ } else if (std::find_if(tags.constBegin(), tags.constEnd(),
+ boost::bind(&QByteArray::isEmpty, boost::bind(&Tag::gid, _1)))
+ == tags.constEnd()) {
+ //All items have a gid
+ c += "GTAGS";
+ QList<QByteArray> gids;
+ Q_FOREACH (const Tag &object, tags) {
+ gids << ImapParser::quote(object.gid());
+ }
+
+ c += '(';
+ c += ImapParser::join(gids, " ");
+ c += ')';
+ } else {
+ throw Exception("Cannot identify all tags");
+ }
+ return c;
+}
+
ItemModifyJob::ItemModifyJob(const Item &item, QObject *parent)
: Job(new ItemModifyJobPrivate(this), parent)
{
@@ -205,16 +244,13 @@ QByteArray ItemModifyJobPrivate::fullCommand() const
}
if (item.d_func()->mTagsOverwritten) {
- changes << "TAGS";
- changes << ' ' + ProtocolHelper::tagSetToImapSequenceSet(item.tags());
+ changes << tagsToCommandParameter(item.tags());
} else {
if (!item.d_func()->mAddedTags.isEmpty()) {
- changes << "+TAGS";
- changes << ' ' + ProtocolHelper::tagSetToImapSequenceSet(item.d_func()->mAddedTags);
+ changes << "+" + tagsToCommandParameter(item.d_func()->mAddedTags);
}
if (!item.d_func()->mDeletedTags.isEmpty()) {
- changes << "-TAGS";
- changes << ' ' + ProtocolHelper::tagSetToImapSequenceSet(item.d_func()->mDeletedTags);
+ changes << "-" + tagsToCommandParameter(item.d_func()->mDeletedTags);
}
}
diff --git a/akonadi/itemmodifyjob_p.h b/akonadi/itemmodifyjob_p.h
index 63fb2a9..ff30b7b 100644
--- a/akonadi/itemmodifyjob_p.h
+++ b/akonadi/itemmodifyjob_p.h
@@ -49,6 +49,7 @@ public:
QString jobDebuggingString() const /*Q_DECL_OVERRIDE*/;
QByteArray fullCommand() const;
+ QByteArray tagsToCommandParameter(const Tag::List &tags) const;
void setSilent( bool silent );
diff --git a/akonadi/tests/tagtest.cpp b/akonadi/tests/tagtest.cpp
index 6595464..137f733 100644
--- a/akonadi/tests/tagtest.cpp
+++ b/akonadi/tests/tagtest.cpp
@@ -54,6 +54,8 @@ private Q_SLOTS:
void testCreateMerge();
void testAttributes();
void testTagItem();
+ void testModifyItemWithTagByGID();
+ void testModifyItemWithTagByRID();
void testMonitor();
};
@@ -337,6 +339,77 @@ void TagTest::testTagItem()
QCOMPARE(fetchJob->items().first().tags().size(), 1);
}
+void TagTest::testModifyItemWithTagByGID()
+{
+ const Collection res3 = Collection( collectionIdFromPath( "res3" ) );
+ {
+ Tag tag;
+ tag.setGid("gid2");
+ TagCreateJob *createjob = new TagCreateJob(tag, this);
+ AKVERIFYEXEC(createjob);
+ }
+
+ Item item1;
+ {
+ item1.setMimeType( "application/octet-stream" );
+ ItemCreateJob *append = new ItemCreateJob(item1, res3, this);
+ AKVERIFYEXEC(append);
+ item1 = append->item();
+ }
+
+ Tag tag;
+ tag.setGid("gid2");
+ item1.setTag(tag);
+
+ ItemModifyJob *modJob = new ItemModifyJob(item1, this);
+ AKVERIFYEXEC(modJob);
+
+ ItemFetchJob *fetchJob = new ItemFetchJob(item1, this);
+ fetchJob->fetchScope().setFetchTags(true);
+ AKVERIFYEXEC(fetchJob);
+ QCOMPARE(fetchJob->items().first().tags().size(), 1);
+}
+
+void TagTest::testModifyItemWithTagByRID()
+{
+ {
+ ResourceSelectJob *select = new ResourceSelectJob("akonadi_knut_resource_0");
+ AKVERIFYEXEC(select);
+ }
+ const Collection res3 = Collection( collectionIdFromPath( "res3" ) );
+ {
+ Tag tag;
+ tag.setGid("gid3");
+ tag.setRemoteId("rid3");
+ TagCreateJob *createjob = new TagCreateJob(tag, this);
+ AKVERIFYEXEC(createjob);
+ }
+
+ Item item1;
+ {
+ item1.setMimeType( "application/octet-stream" );
+ ItemCreateJob *append = new ItemCreateJob(item1, res3, this);
+ AKVERIFYEXEC(append);
+ item1 = append->item();
+ }
+
+ Tag tag;
+ tag.setRemoteId("rid2");
+ item1.setTag(tag);
+
+ ItemModifyJob *modJob = new ItemModifyJob(item1, this);
+ AKVERIFYEXEC(modJob);
+
+ ItemFetchJob *fetchJob = new ItemFetchJob(item1, this);
+ fetchJob->fetchScope().setFetchTags(true);
+ AKVERIFYEXEC(fetchJob);
+ QCOMPARE(fetchJob->items().first().tags().size(), 1);
+ {
+ ResourceSelectJob *select = new ResourceSelectJob("");
+ AKVERIFYEXEC(select);
+ }
+}
+
void TagTest::testMonitor()
{
Akonadi::Monitor monitor;
commit 48bd0104496c6399ca04ccd34229c722734396f2
Author: Montel Laurent <montel at kde.org>
Date: Thu Jul 10 13:17:43 2014 +0200
Show port when we found specific capabilities
diff --git a/mailtransport/smtpconfigwidget.cpp b/mailtransport/smtpconfigwidget.cpp
index 7d15bac..ac0dca7 100644
--- a/mailtransport/smtpconfigwidget.cpp
+++ b/mailtransport/smtpconfigwidget.cpp
@@ -302,6 +302,7 @@ void SMTPConfigWidget::slotFinished( QList<int> results )
if ( results.isEmpty() ) {
KMessageBox::error(this, i18n("Failed to check capabilities. Please verify port and authentication mode."), i18n("Check Capabilities Failed"));
d->serverTestFailed = true;
+ d->serverTest->deleteLater();
return;
}
@@ -319,6 +320,15 @@ void SMTPConfigWidget::slotFinished( QList<int> results )
}
d->sslCapa = d->serverTest->secureProtocols();
d->updateAuthCapbilities();
+ //Show correct port from capabilities.
+ if (d->ui.ssl->isEnabled()) {
+ const int portValue = d->serverTest->port(Transport::EnumEncryption::SSL);
+ d->ui.kcfg_port->setValue(portValue == -1 ? SMTPS_PORT : portValue);
+ } else if (d->ui.none->isEnabled()) {
+ const int portValue = d->serverTest->port(Transport::EnumEncryption::None);
+ d->ui.kcfg_port->setValue(portValue == -1 ? SMTP_PORT : portValue);
+ }
+ d->serverTest->deleteLater();
}
void SMTPConfigWidget::hostNameChanged( const QString &text )
commit f87bddc01ed4144fe843b6bb4ee5d7341b520cda
Author: Montel Laurent <montel at kde.org>
Date: Thu Jul 10 09:52:06 2014 +0200
Add dialog box when we don't find capabilities
diff --git a/mailtransport/smtpconfigwidget.cpp b/mailtransport/smtpconfigwidget.cpp
index 93b1e35..7d15bac 100644
--- a/mailtransport/smtpconfigwidget.cpp
+++ b/mailtransport/smtpconfigwidget.cpp
@@ -42,6 +42,7 @@
#include <KProtocolInfo>
#include <KDebug>
+#include <KMessageBox>
namespace {
@@ -299,6 +300,7 @@ void SMTPConfigWidget::slotFinished( QList<int> results )
// If the servertest did not find any useable authentication modes, assume the
// connection failed and don't disable any of the radioboxes.
if ( results.isEmpty() ) {
+ KMessageBox::error(this, i18n("Failed to check capabilities. Please verify port and authentication mode."), i18n("Check Capabilities Failed"));
d->serverTestFailed = true;
return;
}
commit e1694078e0b2c266571a0302ff3b05f09b7a9360
Author: Montel Laurent <montel at kde.org>
Date: Thu Jul 10 09:36:41 2014 +0200
Fix Bug 337291 - Auto detect server settings feature doesn't use selected port when creating an SMTP account
Try to port that user added.
FIXED-IN: 4.13.3
BUG: 337291
diff --git a/mailtransport/smtpconfigwidget.cpp b/mailtransport/smtpconfigwidget.cpp
index be7e49d..93b1e35 100644
--- a/mailtransport/smtpconfigwidget.cpp
+++ b/mailtransport/smtpconfigwidget.cpp
@@ -239,6 +239,12 @@ void SMTPConfigWidget::checkSmtpCapabilities()
if ( d->ui.kcfg_specifyHostname->isChecked() ) {
d->serverTest->setFakeHostname( d->ui.kcfg_localHostname->text() );
}
+ QAbstractButton *encryptionChecked = d->encryptionGroup->checkedButton();
+ if (encryptionChecked == d->ui.none) {
+ d->serverTest->setPort( Transport::EnumEncryption::None, d->ui.kcfg_port->value());
+ } else if (encryptionChecked == d->ui.ssl) {
+ d->serverTest->setPort( Transport::EnumEncryption::SSL, d->ui.kcfg_port->value());
+ }
d->serverTest->setProgressBar( d->ui.checkCapabilitiesProgress );
d->ui.checkCapabilitiesStack->setCurrentIndex( 1 );
BusyCursorHelper *busyCursorHelper = new BusyCursorHelper( d->serverTest );
commit 9846d3de0c5cb026d9bfa868db822da979fe97a5
Author: Montel Laurent <montel at kde.org>
Date: Mon Jun 30 08:26:31 2014 +0200
normalize signal/slots
diff --git a/akonadi/collectionrequester.cpp b/akonadi/collectionrequester.cpp
index 228a2ec..02f913d 100644
--- a/akonadi/collectionrequester.cpp
+++ b/akonadi/collectionrequester.cpp
@@ -89,7 +89,7 @@ void CollectionRequester::Private::_k_collectionReceived(KJob *job)
namesFetch->setProperty("OriginalCollectionId", job->property("OriginalCollectionId"));
namesFetch->fetchScope().setAncestorRetrieval(CollectionFetchScope::Parent);
connect(namesFetch, SIGNAL(finished(KJob*)),
- q, SLOT(_k_collectionsNamesReceived(KJob *)));
+ q, SLOT(_k_collectionsNamesReceived(KJob*)));
} else {
_k_collectionsNamesReceived(job);
}
diff --git a/akonadi/tests/etmpopulationtest.cpp b/akonadi/tests/etmpopulationtest.cpp
index 09e0829..7191670 100644
--- a/akonadi/tests/etmpopulationtest.cpp
+++ b/akonadi/tests/etmpopulationtest.cpp
@@ -38,9 +38,9 @@ class ModelSignalSpy : public QObject {
Q_OBJECT
public:
explicit ModelSignalSpy(QAbstractItemModel &model) {
- connect(&model, SIGNAL(rowsInserted(QModelIndex, int, int)), this, SLOT(onRowsInserted(QModelIndex,int,int)));
- connect(&model, SIGNAL(rowsRemoved(QModelIndex, int, int)), this, SLOT(onRowsRemoved(QModelIndex,int,int)));
- connect(&model, SIGNAL(rowsMoved(QModelIndex, int, int, QModelIndex, int)), this, SLOT(onRowsMoved(QModelIndex,int,int, QModelIndex, int)));
+ connect(&model, SIGNAL(rowsInserted(QModelIndex,int,int)), this, SLOT(onRowsInserted(QModelIndex,int,int)));
+ connect(&model, SIGNAL(rowsRemoved(QModelIndex,int,int)), this, SLOT(onRowsRemoved(QModelIndex,int,int)));
+ connect(&model, SIGNAL(rowsMoved(QModelIndex,int,int,QModelIndex,int)), this, SLOT(onRowsMoved(QModelIndex,int,int,QModelIndex,int)));
connect(&model, SIGNAL(dataChanged(QModelIndex,QModelIndex)), this, SLOT(onDataChanged(QModelIndex,QModelIndex)));
connect(&model, SIGNAL(layoutChanged()), this, SLOT(onLayoutChanged()));
connect(&model, SIGNAL(modelReset()), this, SLOT(onModelReset()));
diff --git a/akonadi/tests/itemsynctest.cpp b/akonadi/tests/itemsynctest.cpp
index 41a32c4..d0b7cee 100644
--- a/akonadi/tests/itemsynctest.cpp
+++ b/akonadi/tests/itemsynctest.cpp
@@ -89,9 +89,9 @@ class ItemsyncTest : public QObject
monitor.setCollectionMonitored(col);
QSignalSpy deletedSpy(&monitor, SIGNAL(itemRemoved(Akonadi::Item)));
QVERIFY(deletedSpy.isValid());
- QSignalSpy addedSpy(&monitor, SIGNAL(itemAdded(Akonadi::Item, Akonadi::Collection)));
+ QSignalSpy addedSpy(&monitor, SIGNAL(itemAdded(Akonadi::Item,Akonadi::Collection)));
QVERIFY(addedSpy.isValid());
- QSignalSpy changedSpy(&monitor, SIGNAL(itemChanged(Akonadi::Item, QSet<QByteArray>)));
+ QSignalSpy changedSpy(&monitor, SIGNAL(itemChanged(Akonadi::Item,QSet<QByteArray>)));
QVERIFY(changedSpy.isValid());
ItemSync* syncer = new ItemSync( col );
@@ -135,9 +135,9 @@ class ItemsyncTest : public QObject
monitor.setCollectionMonitored(col);
QSignalSpy deletedSpy(&monitor, SIGNAL(itemRemoved(Akonadi::Item)));
QVERIFY(deletedSpy.isValid());
- QSignalSpy addedSpy(&monitor, SIGNAL(itemAdded(Akonadi::Item, Akonadi::Collection)));
+ QSignalSpy addedSpy(&monitor, SIGNAL(itemAdded(Akonadi::Item,Akonadi::Collection)));
QVERIFY(addedSpy.isValid());
- QSignalSpy changedSpy(&monitor, SIGNAL(itemChanged(Akonadi::Item, QSet<QByteArray>)));
+ QSignalSpy changedSpy(&monitor, SIGNAL(itemChanged(Akonadi::Item,QSet<QByteArray>)));
QVERIFY(changedSpy.isValid());
ItemSync* syncer = new ItemSync( col );
@@ -199,9 +199,9 @@ class ItemsyncTest : public QObject
monitor.setCollectionMonitored(col);
QSignalSpy deletedSpy(&monitor, SIGNAL(itemRemoved(Akonadi::Item)));
QVERIFY(deletedSpy.isValid());
- QSignalSpy addedSpy(&monitor, SIGNAL(itemAdded(Akonadi::Item, Akonadi::Collection)));
+ QSignalSpy addedSpy(&monitor, SIGNAL(itemAdded(Akonadi::Item,Akonadi::Collection)));
QVERIFY(addedSpy.isValid());
- QSignalSpy changedSpy(&monitor, SIGNAL(itemChanged(Akonadi::Item, QSet<QByteArray>)));
+ QSignalSpy changedSpy(&monitor, SIGNAL(itemChanged(Akonadi::Item,QSet<QByteArray>)));
QVERIFY(changedSpy.isValid());
{
@@ -266,9 +266,9 @@ class ItemsyncTest : public QObject
monitor.setCollectionMonitored(col);
QSignalSpy deletedSpy(&monitor, SIGNAL(itemRemoved(Akonadi::Item)));
QVERIFY(deletedSpy.isValid());
- QSignalSpy addedSpy(&monitor, SIGNAL(itemAdded(Akonadi::Item, Akonadi::Collection)));
+ QSignalSpy addedSpy(&monitor, SIGNAL(itemAdded(Akonadi::Item,Akonadi::Collection)));
QVERIFY(addedSpy.isValid());
- QSignalSpy changedSpy(&monitor, SIGNAL(itemChanged(Akonadi::Item, QSet<QByteArray>)));
+ QSignalSpy changedSpy(&monitor, SIGNAL(itemChanged(Akonadi::Item,QSet<QByteArray>)));
QVERIFY(changedSpy.isValid());
ItemSync* syncer = new ItemSync( col );
@@ -320,9 +320,9 @@ class ItemsyncTest : public QObject
monitor.setCollectionMonitored(col);
QSignalSpy deletedSpy(&monitor, SIGNAL(itemRemoved(Akonadi::Item)));
QVERIFY(deletedSpy.isValid());
- QSignalSpy addedSpy(&monitor, SIGNAL(itemAdded(Akonadi::Item, Akonadi::Collection)));
+ QSignalSpy addedSpy(&monitor, SIGNAL(itemAdded(Akonadi::Item,Akonadi::Collection)));
QVERIFY(addedSpy.isValid());
- QSignalSpy changedSpy(&monitor, SIGNAL(itemChanged(Akonadi::Item, QSet<QByteArray>)));
+ QSignalSpy changedSpy(&monitor, SIGNAL(itemChanged(Akonadi::Item,QSet<QByteArray>)));
QVERIFY(changedSpy.isValid());
ItemSync* syncer = new ItemSync( col );
@@ -353,9 +353,9 @@ class ItemsyncTest : public QObject
monitor.setCollectionMonitored(col);
QSignalSpy deletedSpy(&monitor, SIGNAL(itemRemoved(Akonadi::Item)));
QVERIFY(deletedSpy.isValid());
- QSignalSpy addedSpy(&monitor, SIGNAL(itemAdded(Akonadi::Item, Akonadi::Collection)));
+ QSignalSpy addedSpy(&monitor, SIGNAL(itemAdded(Akonadi::Item,Akonadi::Collection)));
QVERIFY(addedSpy.isValid());
- QSignalSpy changedSpy(&monitor, SIGNAL(itemChanged(Akonadi::Item, QSet<QByteArray>)));
+ QSignalSpy changedSpy(&monitor, SIGNAL(itemChanged(Akonadi::Item,QSet<QByteArray>)));
QVERIFY(changedSpy.isValid());
ItemSync* syncer = new ItemSync( col );
commit f8c682e31d89718a4d301783d71bca86756e86ca
Author: Kevin Ottens <ervin at kde.org>
Date: Fri Jun 27 08:25:44 2014 +0200
Fix the copy constructor to avoid uninitialized memory
diff --git a/akonadi/collectionfetchscope.cpp b/akonadi/collectionfetchscope.cpp
index c4232df..18c6509 100644
--- a/akonadi/collectionfetchscope.cpp
+++ b/akonadi/collectionfetchscope.cpp
@@ -42,6 +42,7 @@ public:
contentMimeTypes = other.contentMimeTypes;
ancestorDepth = other.ancestorDepth;
statistics = other.statistics;
+ listFilter = other.listFilter;
}
public:
commit a28825f4d035e2bc34a927bea64c20bf3655fe01
Author: Montel Laurent <montel at kde.org>
Date: Thu Jun 26 13:29:23 2014 +0200
Fix Bug 320821 - kabc/plugins/ldapkio/ uses old Kolab LDAP option, also Kolab 3 options are missing
BUG: 320821
FIXED-IN: 4.14
Reapply patch which was reverted because it added new i18n. It's time to readd it
diff --git a/kabc/plugins/ldapkio/resourceldapkioconfig.cpp b/kabc/plugins/ldapkio/resourceldapkioconfig.cpp
index eb393fb..ecf5254 100644
--- a/kabc/plugins/ldapkio/resourceldapkioconfig.cpp
+++ b/kabc/plugins/ldapkio/resourceldapkioconfig.cpp
@@ -251,17 +251,20 @@ AttributesDialog::AttributesDialog( const QMap<QString, QString> &attributes,
mDefaultMap.insert( QLatin1String( "jpegPhoto" ), QLatin1String( "jpegPhoto" ) );
// overwrite the default values here
- QMap<QString, QString> kolabMap, netscapeMap, evolutionMap, outlookMap;
+ QMap<QString, QString> kolab2Map, kolab3Map, netscapeMap, evolutionMap, outlookMap;
- // kolab
- kolabMap.insert( QLatin1String( "formattedName" ), QLatin1String( "display-name" ) );
- kolabMap.insert( QLatin1String( "mailAlias" ), QLatin1String( "mailalias" ) );
+ // Kolab 2
+ kolab2Map.insert( QLatin1String( "formattedName" ), QLatin1String( "display-name" ) );
+ kolab2Map.insert( QLatin1String( "mailAlias" ), QLatin1String( "mailalias" ) );
+ // Kolab 3
+ kolab3Map.insert( QLatin1String( "mailAlias" ), QLatin1String( "alias" ) );
// evolution
evolutionMap.insert( QLatin1String( "formattedName" ), QLatin1String( "fileAs" ) );
mMapList.append( attributes );
- mMapList.append( kolabMap );
+ mMapList.append( kolab2Map );
+ mMapList.append( kolab3Map );
mMapList.append( netscapeMap );
mMapList.append( evolutionMap );
mMapList.append( outlookMap );
@@ -276,7 +279,8 @@ AttributesDialog::AttributesDialog( const QMap<QString, QString> &attributes,
layout->addWidget( mMapCombo, 0, 1 );
mMapCombo->addItem( i18n( "User Defined" ) );
- mMapCombo->addItem( i18n( "Kolab" ) );
+ mMapCombo->addItem( i18n( "Kolab 2" ) );
+ mMapCombo->addItem( i18n( "Kolab 3" ) );
mMapCombo->addItem( i18n( "Netscape" ) );
mMapCombo->addItem( i18n( "Evolution" ) );
mMapCombo->addItem( i18n( "Outlook" ) );
@@ -294,7 +298,7 @@ AttributesDialog::AttributesDialog( const QMap<QString, QString> &attributes,
int i, j = 0;
for ( i = 2, it = attributes.begin(); it != attributes.end(); ++it, ++i ) {
if ( mNameDict[ it.key() ].isEmpty() ) {
- i--;
+ --i;
continue;
}
if ( ( i - 2 ) == ( mNameDict.count() >> 1 ) ) {
diff --git a/kabc/plugins/ldapkio/resourceldapkioconfig.h b/kabc/plugins/ldapkio/resourceldapkioconfig.h
index f45c832..afde68e 100644
--- a/kabc/plugins/ldapkio/resourceldapkioconfig.h
+++ b/kabc/plugins/ldapkio/resourceldapkioconfig.h
@@ -85,7 +85,8 @@ class AttributesDialog : public KDialog
private:
enum {
UserMap,
- KolabMap,
+ Kolab2Map,
+ Kolab3Map,
NetscapeMap,
EvolutionMap,
OutlookMap
commit 4e1a505376dbcebec91950db865fb3c5ccf0dcf1
Author: Dan Vrátil <dvratil at redhat.com>
Date: Thu Jun 26 13:12:03 2014 +0200
KIMAP: Fix enabling of Gmail extensions
diff --git a/kimap/fetchjob.cpp b/kimap/fetchjob.cpp
index 670866f..f3a6125 100644
--- a/kimap/fetchjob.cpp
+++ b/kimap/fetchjob.cpp
@@ -171,7 +171,7 @@ bool FetchJob::setGmailExtensionsEnabled() const
void FetchJob::setGmailExtensionsEnabled( bool enabled )
{
Q_D( FetchJob );
- d->gmailEnabled = true;
+ d->gmailEnabled = enabled;
}
QMap<qint64, MessagePtr> FetchJob::messages() const
commit 50b1f705d6993655ede1558774731623a05fc0c5
Author: Dan Vrátil <dvratil at redhat.com>
Date: Wed Jun 25 15:34:15 2014 +0200
PasteHelper: support fake Item Copy/Move into virtual collections
When a resource provides it's folder hierarchy as virtual collections,
it still wants to support Copy and Move between virtual collections. In
such case, Copy == Link and Move == Unlink from source and Link to destination
collection.
For this to work, the Akonadi Item URL must contain 'parent' query item
with ID of drag source collection.
diff --git a/akonadi/pastehelper.cpp b/akonadi/pastehelper.cpp
index 468fb71..c84b646 100644
--- a/akonadi/pastehelper.cpp
+++ b/akonadi/pastehelper.cpp
@@ -21,6 +21,7 @@
#include "collectioncopyjob.h"
#include "collectionmovejob.h"
+#include "collectionfetchjob.h"
#include "item.h"
#include "itemcreatejob.h"
#include "itemcopyjob.h"
@@ -29,6 +30,7 @@
#include "linkjob.h"
#include "transactionsequence.h"
#include "session.h"
+#include "unlinkjob.h"
#include <KDebug>
#include <KUrl>
@@ -36,9 +38,188 @@
#include <QtCore/QByteArray>
#include <QtCore/QMimeData>
#include <QtCore/QStringList>
+#include <QtCore/QMutexLocker>
+
+#include <boost/bind.hpp>
using namespace Akonadi;
+class PasteHelperJob: public Akonadi::TransactionSequence
+{
+ Q_OBJECT
+
+public:
+ explicit PasteHelperJob(Qt::DropAction action, const Akonadi::Item::List &items,
+ const Akonadi::Collection::List &collections,
+ const Akonadi::Collection &destination,
+ QObject *parent = 0);
+ virtual ~PasteHelperJob();
+
+private Q_SLOTS:
+ void onDragSourceCollectionFetched(KJob *job);
+
+private:
+ void runActions();
+ void runItemsActions();
+ void runCollectionsActions();
+
+private:
+ Qt::DropAction mAction;
+ Akonadi::Item::List mItems;
+ Akonadi::Collection::List mCollections;
+ Akonadi::Collection mDestCollection;
+};
+
+PasteHelperJob::PasteHelperJob(Qt::DropAction action, const Item::List &items,
+ const Collection::List &collections,
+ const Collection &destination,
+ QObject *parent)
+ : TransactionSequence(parent)
+ , mAction(action)
+ , mItems(items)
+ , mCollections(collections)
+ , mDestCollection(destination)
+{
+ //FIXME: The below code disables transactions in otder to avoid data loss due to nested
+ //transactions (copy and colcopy in the server doesn't see the items retrieved into the cache and copies empty payloads).
+ //Remove once this is fixed properly, see the other FIXME comments.
+ setProperty("transactionsDisabled", true);
+
+ Collection dragSourceCollection;
+ if (!items.isEmpty() && items.first().parentCollection().isValid()) {
+ // Check if all items have the same parent collection ID
+ const Collection parent = items.first().parentCollection();
+ if (std::find_if(items.constBegin(), items.constEnd(),
+ boost::bind(&Entity::operator!=, boost::bind(static_cast<Collection (Item::*)() const>(&Item::parentCollection), _1), parent))
+ == items.constEnd())
+ {
+ dragSourceCollection = parent;
+ }
+ }
+
+ kDebug() << items.first().parentCollection().id() << dragSourceCollection.id();
+
+ if (dragSourceCollection.isValid()) {
+ // Disable autocommitting, because starting a Link/Unlink/Copy/Move job
+ // after the transaction has ended leaves the job hanging
+ setAutomaticCommittingEnabled(false);
+
+ CollectionFetchJob *fetch = new CollectionFetchJob(dragSourceCollection,
+ CollectionFetchJob::Base,
+ this);
+ QObject::connect(fetch, SIGNAL(finished(KJob*)),
+ this, SLOT(onDragSourceCollectionFetched(KJob*)));
+ } else {
+ runActions();
+ }
+}
+
+PasteHelperJob::~PasteHelperJob()
+{
+}
+
+void PasteHelperJob::onDragSourceCollectionFetched(KJob *job)
+{
+ CollectionFetchJob *fetch = qobject_cast<CollectionFetchJob*>(job);
+ kDebug() << fetch->error() << fetch->collections().count();
+ if (fetch->error() || fetch->collections().count() != 1) {
+ runActions();
+ commit();
+ return;
+ }
+
+
+ // If the source collection is virtual, treat copy and move actions differently
+ const Collection sourceCollection = fetch->collections().first();
+ kDebug() << "FROM: " << sourceCollection.id() << sourceCollection.name() << sourceCollection.isVirtual();
+ kDebug() << "DEST: " << mDestCollection.id() << mDestCollection.name() << mDestCollection.isVirtual();
+ kDebug() << "ACTN:" << mAction;
+ if (sourceCollection.isVirtual()) {
+ switch (mAction) {
+ case Qt::CopyAction:
+ if (mDestCollection.isVirtual()) {
+ new LinkJob(mDestCollection, mItems, this);
+ } else {
+ new ItemCopyJob(mItems, mDestCollection, this);
+ }
+ break;
+ case Qt::MoveAction:
+ new UnlinkJob(sourceCollection, mItems, this);
+ if (mDestCollection.isVirtual()) {
+ new LinkJob(mDestCollection, mItems, this);
+ } else {
+ new ItemCopyJob(mItems, mDestCollection, this);
+ }
+ break;
+ case Qt::LinkAction:
+ new LinkJob(mDestCollection, mItems, this);
+ break;
+ default:
+ Q_ASSERT(false);
+ }
+ runCollectionsActions();
+ commit();
+ } else {
+ runActions();
+ }
+
+ commit();
+}
+
+void PasteHelperJob::runActions()
+{
+ runItemsActions();
+ runCollectionsActions();
+}
+
+void PasteHelperJob::runItemsActions()
+{
+ if (mItems.isEmpty()) {
+ return;
+ }
+
+ switch (mAction) {
+ case Qt::CopyAction:
+ new ItemCopyJob(mItems, mDestCollection, this);
+ break;
+ case Qt::MoveAction:
+ new ItemMoveJob(mItems, mDestCollection, this);
+ break;
+ case Qt::LinkAction:
+ new LinkJob(mDestCollection, mItems, this);
+ break;
+ default:
+ Q_ASSERT(false); // WTF?!
+ }
+}
+
+void PasteHelperJob::runCollectionsActions()
+{
+ if (mCollections.isEmpty()) {
+ return;
+ }
+
+ switch (mAction) {
+ case Qt::CopyAction:
+ foreach (const Collection &col, mCollections) { // FIXME: remove once we have a batch job for collections as well
+ new CollectionCopyJob(col, mDestCollection, this);
+ }
+ break;
+ case Qt::MoveAction:
+ foreach (const Collection &col, mCollections) { // FIXME: remove once we have a batch job for collections as well
+ new CollectionMoveJob(col, mDestCollection, this);
+ }
+ break;
+ case Qt::LinkAction:
+ // Not supported for collections
+ break;
+ default:
+ Q_ASSERT(false); // WTF?!
+ }
+}
+
+
+
bool PasteHelper::canPaste(const QMimeData *mimeData, const Collection &collection)
{
if (!mimeData || !collection.isValid()) {
@@ -141,43 +322,22 @@ KJob *PasteHelper::pasteUriList(const QMimeData *mimeData, const Collection &des
if (collection.isValid()) {
collections.append(collection);
}
- const Item item = Item::fromUrl(url);
+ Item item = Item::fromUrl(url);
+ if (url.hasQueryItem(QLatin1String("parent"))) {
+ item.setParentCollection(Collection(url.queryItem(QLatin1String("parent")).toLongLong()));
+ }
if (item.isValid()) {
items.append(item);
}
// TODO: handle non Akonadi URLs?
}
- TransactionSequence *transaction = new TransactionSequence(session);
- //FIXME: The below code disables transactions in otder to avoid data loss due to nested
- //transactions (copy and colcopy in the server doesn't see the items retrieved into the cache and copies empty payloads).
- //Remove once this is fixed properly, see the other FIXME comments.
- transaction->setProperty("transactionsDisabled", true);
+ PasteHelperJob *job = new PasteHelperJob(action, items,
+ collections, destination,
+ session);
- switch (action) {
- case Qt::CopyAction:
- if (!items.isEmpty()) {
- new ItemCopyJob(items, destination, transaction);
- }
- foreach (const Collection &col, collections) { // FIXME: remove once we have a batch job for collections as well
- new CollectionCopyJob(col, destination, transaction);
- }
- break;
- case Qt::MoveAction:
- if (!items.isEmpty()) {
- new ItemMoveJob(items, destination, transaction);
- }
- foreach (const Collection &col, collections) { // FIXME: remove once we have a batch job for collections as well
- new CollectionMoveJob(col, destination, transaction);
- }
- break;
- case Qt::LinkAction:
- new LinkJob(destination, items, transaction);
- break;
- default:
- Q_ASSERT(false); // WTF?!
- return 0;
- }
- return transaction;
+ return job;
}
+
+#include "pastehelper.moc"
commit ccc4dc4967d93b5489039f89032eb6a8cfe3f88c
Author: Dan Vrátil <dvratil at redhat.com>
Date: Wed Jun 25 15:32:45 2014 +0200
ETM: Encode Item drag source collection into item URL in MimeData
diff --git a/akonadi/entitytreemodel.cpp b/akonadi/entitytreemodel.cpp
index 98f4e84..fbfa817 100644
--- a/akonadi/entitytreemodel.cpp
+++ b/akonadi/entitytreemodel.cpp
@@ -770,7 +770,10 @@ QMimeData *EntityTreeModel::mimeData(const QModelIndexList &indexes) const
if (Node::Collection == node->type) {
urls << d->m_collections.value(node->id).url(Collection::UrlWithName);
} else if (Node::Item == node->type) {
- urls << d->m_items.value(node->id).url(Item::UrlWithMimeType);
+ KUrl url = d->m_items.value(node->id).url(Item::Item::UrlWithMimeType);
+ // Encode the "virtual" parent
+ url.addQueryItem(QLatin1String("parent"), QString::number(node->parent));
+ urls << url;
} else { // if that happens something went horrible wrong
Q_ASSERT(false);
}
commit 7675d41eeaf2e110ce494c166e81a4952818cace
Author: Dan Vrátil <dvratil at redhat.com>
Date: Fri Jun 20 13:22:38 2014 +0200
Add support for changing X-GM-LABELS via STORE command
X-GM-LABELS are exactly likes FLAGS, except for the parameter keyword.
diff --git a/kimap/storejob.cpp b/kimap/storejob.cpp
index 980eb76..a3fd415 100644
--- a/kimap/storejob.cpp
+++ b/kimap/storejob.cpp
@@ -34,10 +34,37 @@ namespace KIMAP
StoreJobPrivate( Session *session, const QString& name ) : JobPrivate( session, name ) { }
~StoreJobPrivate() { }
+ QByteArray addFlags(const QByteArray ¶m, const MessageFlags &flags) {
+ QByteArray parameters;
+ switch ( mode ) {
+ case StoreJob::SetFlags:
+ parameters += param;
+ break;
+ case StoreJob::AppendFlags:
+ parameters += "+" + param;
+ break;
+ case StoreJob::RemoveFlags:
+ parameters += "-" + param;
+ break;
+ }
+
+ parameters += " (";
+ foreach ( const QByteArray &flag, flags ) {
+ parameters += flag + ' ';
+ }
+ if ( !flags.isEmpty() ) {
+ parameters.chop( 1 );
+ }
+ parameters += ')';
+
+ return parameters;
+ }
+
ImapSet set;
bool uidBased;
StoreJob::StoreMode mode;
MessageFlags flags;
+ MessageFlags gmLabels;
QMap<int, MessageFlags> resultingFlags;
};
@@ -93,6 +120,18 @@ MessageFlags StoreJob::flags() const
return d->flags;
}
+void StoreJob::setGMLabels( const MessageFlags &gmLabels )
+{
+ Q_D( StoreJob );
+ d->gmLabels = gmLabels;
+}
+
+MessageFlags StoreJob::gmLabels() const
+{
+ Q_D( const StoreJob );
+ return d->gmLabels;
+}
+
void StoreJob::setMode( StoreMode mode )
{
Q_D( StoreJob );
@@ -125,32 +164,21 @@ void StoreJob::doStart()
QByteArray parameters = d->set.toImapSequenceSet()+' ';
- switch ( d->mode ) {
- case SetFlags:
- parameters += "FLAGS";
- break;
- case AppendFlags:
- parameters += "+FLAGS";
- break;
- case RemoveFlags:
- parameters += "-FLAGS";
- break;
- }
-
- parameters += " (";
- foreach ( const QByteArray &flag, d->flags ) {
- parameters += flag + ' ';
+ if (!d->flags.isEmpty()) {
+ parameters += d->addFlags("FLAGS", d->flags);
}
- if ( !d->flags.isEmpty() ) {
- parameters.chop( 1 );
+ if (!d->gmLabels.isEmpty()) {
+ if (!d->flags.isEmpty()) {
+ parameters += ' ';
+ }
+ parameters += d->addFlags("X-GM-LABELS", d->gmLabels);
}
- parameters += ')';
kDebug() << parameters;
QByteArray command = "STORE";
if ( d->uidBased ) {
- command = "UID "+command;
+ command = "UID " + command;
}
d->tags << d->sessionInternal()->sendCommand( command, parameters );
diff --git a/kimap/storejob.h b/kimap/storejob.h
index 4de2f76..c75ea03 100644
--- a/kimap/storejob.h
+++ b/kimap/storejob.h
@@ -59,6 +59,9 @@ class KIMAP_EXPORT StoreJob : public Job
void setFlags( const MessageFlags &flags );
MessageFlags flags() const;
+ void setGMLabels( const MessageFlags &gmLabels );
+ MessageFlags gmLabels() const;
+
void setMode( StoreMode mode );
StoreMode mode() const;
commit 78e92780728ad486c82eaa0e5bcd0da12d04d72f
Author: Dan Vrátil <dvratil at redhat.com>
Date: Wed Jun 18 23:05:08 2014 +0200
Add support for XOAUTH2 authentication method
XOAUTH2 is used by Gmail to authenticate via OAuth tokens instead of regular
username + password.
This adds support for XOAUTH2 to KIMAP. However cyrus-sasl does not support
XOAUTH2, so this won't work out of the box, unless a 3rd-party SASL plugin
is provided.
diff --git a/kimap/loginjob.cpp b/kimap/loginjob.cpp
index b372c7e..d3473d4 100644
--- a/kimap/loginjob.cpp
+++ b/kimap/loginjob.cpp
@@ -572,6 +572,8 @@ void LoginJob::setAuthenticationMode(AuthenticationMode mode)
break;
case Anonymous: d->authMode = QLatin1String("ANONYMOUS");
break;
+ case XOAuth2: d->authMode = QLatin1String("XOAUTH2");
+ break;
default:
d->authMode = QLatin1String("");
}
diff --git a/kimap/loginjob.h b/kimap/loginjob.h
index 2c6040a..10d8a6d 100644
--- a/kimap/loginjob.h
+++ b/kimap/loginjob.h
@@ -56,7 +56,8 @@ class KIMAP_EXPORT LoginJob : public Job
DigestMD5,
NTLM,
GSSAPI,
- Anonymous
+ Anonymous,
+ XOAuth2
};
enum ErrorCode {
commit c0b72cdb0d76cd634c1603082566ea6c10ea80bf
Author: Dan Vrátil <dvratil at redhat.com>
Date: Sun Mar 30 19:01:50 2014 +0200
Add support for Gmail-specific extensions to FetchJob
Gmail supports additional X-GM-THRID, X-GM-MSGID and X-GM-LABELS parameters to
FETCH commands, which returns additional information about each email.
diff --git a/kimap/fetchjob.cpp b/kimap/fetchjob.cpp
index fa49fbd..670866f 100644
--- a/kimap/fetchjob.cpp
+++ b/kimap/fetchjob.cpp
@@ -32,8 +32,15 @@ namespace KIMAP
class FetchJobPrivate : public JobPrivate
{
public:
- FetchJobPrivate( FetchJob *job, Session *session, const QString& name ) : JobPrivate( session, name ), q( job ), uidBased( false ) { }
- ~FetchJobPrivate() { }
+ FetchJobPrivate( FetchJob *job, Session *session, const QString& name )
+ : JobPrivate( session, name )
+ , q( job )
+ , uidBased( false )
+ , gmailEnabled(false)
+ { }
+
+ ~FetchJobPrivate()
+ { }
void parseBodyStructure( const QByteArray &structure, int &pos, KMime::Content *content );
void parsePart( const QByteArray &structure, int &pos, KMime::Content *content );
@@ -50,15 +57,25 @@ namespace KIMAP
if ( !pendingParts.isEmpty() ) {
emit q->partsReceived( selectedMailBox,
pendingUids, pendingParts );
+ emit q->partsReceived( selectedMailBox,
+ pendingUids, pendingAttributes,
+ pendingParts );
}
if ( !pendingSizes.isEmpty() || !pendingFlags.isEmpty() ) {
emit q->headersReceived( selectedMailBox,
pendingUids, pendingSizes,
pendingFlags, pendingMessages );
+ emit q->headersReceived( selectedMailBox,
+ pendingUids, pendingSizes,
+ pendingAttributes, pendingFlags,
+ pendingMessages );
}
if ( !pendingMessages.isEmpty() ) {
emit q->messagesReceived( selectedMailBox,
pendingUids, pendingMessages );
+ emit q->messagesReceived( selectedMailBox,
+ pendingUids, pendingAttributes,
+ pendingMessages );
}
pendingUids.clear();
@@ -66,6 +83,7 @@ namespace KIMAP
pendingParts.clear();
pendingSizes.clear();
pendingFlags.clear();
+ pendingAttributes.clear();
}
FetchJob * const q;
@@ -74,11 +92,13 @@ namespace KIMAP
bool uidBased;
FetchJob::FetchScope scope;
QString selectedMailBox;
+ bool gmailEnabled;
QTimer emitPendingsTimer;
QMap<qint64, MessagePtr> pendingMessages;
QMap<qint64, MessageParts> pendingParts;
QMap<qint64, MessageFlags> pendingFlags;
+ QMap<qint64, MessageAttribute> pendingAttributes;
QMap<qint64, qint64> pendingSizes;
QMap<qint64, qint64> pendingUids;
};
@@ -142,6 +162,18 @@ FetchJob::FetchScope FetchJob::scope() const
return d->scope;
}
+bool FetchJob::setGmailExtensionsEnabled() const
+{
+ Q_D( const FetchJob );
+ return d->gmailEnabled;
+}
+
+void FetchJob::setGmailExtensionsEnabled( bool enabled )
+{
+ Q_D( FetchJob );
+ d->gmailEnabled = true;
+}
+
QMap<qint64, MessagePtr> FetchJob::messages() const
{
return QMap<qint64, MessagePtr>();
@@ -177,51 +209,56 @@ void FetchJob::doStart()
switch ( d->scope.mode ) {
case FetchScope::Headers:
if ( d->scope.parts.isEmpty() ) {
- parameters += "(RFC822.SIZE INTERNALDATE BODY.PEEK[HEADER.FIELDS (TO FROM MESSAGE-ID REFERENCES IN-REPLY-TO SUBJECT DATE)] FLAGS UID)";
+ parameters += "(RFC822.SIZE INTERNALDATE BODY.PEEK[HEADER.FIELDS (TO FROM MESSAGE-ID REFERENCES IN-REPLY-TO SUBJECT DATE)] FLAGS UID";
} else {
parameters += '(';
foreach ( const QByteArray &part, d->scope.parts ) {
parameters += "BODY.PEEK[" + part + ".MIME] ";
}
- parameters += "UID)";
+ parameters += "UID";
}
break;
case FetchScope::Flags:
- parameters += "(FLAGS UID)";
+ parameters += "(FLAGS UID";
break;
case FetchScope::Structure:
- parameters += "(BODYSTRUCTURE UID)";
+ parameters += "(BODYSTRUCTURE UID";
break;
case FetchScope::Content:
if ( d->scope.parts.isEmpty() ) {
- parameters += "(BODY.PEEK[] UID)";
+ parameters += "(BODY.PEEK[] UID";
} else {
parameters += '(';
foreach ( const QByteArray &part, d->scope.parts ) {
parameters += "BODY.PEEK[" + part + "] ";
}
- parameters += "UID)";
+ parameters += "UID";
}
break;
case FetchScope::Full:
- parameters += "(RFC822.SIZE INTERNALDATE BODY.PEEK[] FLAGS UID)";
+ parameters += "(RFC822.SIZE INTERNALDATE BODY.PEEK[] FLAGS UID";
break;
case FetchScope::HeaderAndContent:
if ( d->scope.parts.isEmpty() ) {
- parameters += "(BODY.PEEK[] FLAGS UID)";
+ parameters += "(BODY.PEEK[] FLAGS UID";
} else {
parameters += "(BODY.PEEK[HEADER.FIELDS (TO FROM MESSAGE-ID REFERENCES IN-REPLY-TO SUBJECT DATE)]";
foreach ( const QByteArray &part, d->scope.parts ) {
parameters += " BODY.PEEK[" + part + ".MIME] BODY.PEEK[" + part + "]"; //krazy:exclude=doublequote_chars
}
- parameters += " FLAGS UID)";
+ parameters += " FLAGS UID";
}
break;
case FetchScope::FullHeaders:
- parameters += "(RFC822.SIZE INTERNALDATE BODY.PEEK[HEADER] FLAGS UID)";
+ parameters += "(RFC822.SIZE INTERNALDATE BODY.PEEK[HEADER] FLAGS UID";
break;
}
+ if ( d->gmailEnabled ) {
+ parameters += " X-GM-LABELS X-GM-MSGID X-GM-THRID";
+ }
+ parameters += ")";
+
if ( d->scope.changedSince > 0 ) {
parameters += " (CHANGEDSINCE " + QByteArray::number( d->scope.changedSince ) + ")";
}
@@ -286,6 +323,12 @@ void FetchJob::handleResponse( const Message &response )
} else {
d->pendingFlags[id] << *it;
}
+ } else if ( str == "X-GM-LABELS" ) {
+ d->pendingAttributes.insert( id, qMakePair<QByteArray, QVariant>( "X-GM-LABELS", *it ) );
+ } else if ( str == "X-GM-THRID" ) {
+ d->pendingAttributes.insert( id, qMakePair<QByteArray, QVariant>( "X-GM-THRID", *it ) );
+ } else if ( str == "X-GM-MSGID" ) {
+ d->pendingAttributes.insert( id, qMakePair<QByteArray, QVariant>( "X-GM-MSGID", *it ) );
} else if ( str == "BODYSTRUCTURE" ) {
int pos = 0;
d->parseBodyStructure( *it, pos, message.get() );
diff --git a/kimap/fetchjob.h b/kimap/fetchjob.h
index 01a5712..68afaa0 100644
--- a/kimap/fetchjob.h
+++ b/kimap/fetchjob.h
@@ -42,6 +42,8 @@ typedef QMap<QByteArray, ContentPtr> MessageParts;
typedef boost::shared_ptr<KMime::Message> MessagePtr;
typedef QList<QByteArray> MessageFlags;
+typedef QPair<QByteArray, QVariant> MessageAttribute;
+
/**
* Fetch message data from the server
*
@@ -222,6 +224,28 @@ class KIMAP_EXPORT FetchJob : public Job
*/
FetchScope scope() const;
+ // TODO: KF5: Move this to FetchScope
+ /**
+ * Enables retrieving of Gmail-specific extensions
+ *
+ * The FETCH response will contain X-GM-MSGID, X-GM-THRID and X-GM-LABELS
+ *
+ * Do NOT enable this, unless talking to Gmail servers, otherwise the
+ * request may fail.
+ *
+ * @param enabled Whether the Gmail support should be enabled
+ * @since 4.14
+ */
+ void setGmailExtensionsEnabled(bool enabled);
+
+ /**
+ * Returns whether Gmail support is enabled
+ *
+ * @since 4.14
+ * @see setGmailExtensionsEnabled()
+ */
+ bool setGmailExtensionsEnabled() const;
+
// XXX: [alexmerry, 2010-07-24]: BIC? Behaviour change
/** @deprecated returns an empty map; use the signals instead */
KIMAP_DEPRECATED QMap<qint64, MessagePtr> messages() const;
@@ -272,6 +296,38 @@ class KIMAP_EXPORT FetchJob : public Job
const QMap<qint64, KIMAP::MessagePtr> &messages );
/**
+ * An overloaded version of headersReceived(), which includes additional attribute
+ * specified in the FETCH response, but that don't belong to actual content of the
+ * message.
+ *
+ * @param mailBox the name of the mailbox the fetch job was
+ * executed on
+ * @param uids a map from message sequence numbers to message UIDs;
+ * this will always be populated
+ * @param attrs a map from message sequence numbers to a pair of attribute
+ * name and value
+ * @param sizes a map from message sequence numbers to message sizes
+ * (sizes are in octets and refer to the transfer encoding of
+ * the message); populated if the scope is FetchScope::Full or
+ * FetchScope::Headers
+ * @param flags a map from message sequence numbers to message flags;
+ * populated if the scope is FetchScope::Flags, FetchScope::Full
+ * of FetchScope::Headers
+ * @param messages a map from message sequence numbers to message contents (including
+ * headers); populated if the scope is FetchScope::Full,
+ * FetchScope::Headers or FetchScope::Structure
+ *
+ * @overload
+ * @since 4.14
+ */
+ void headersReceived( const QString &mailBox,
+ const QMap<qint64, qint64> &uids,
+ const QMap<qint64, qint64> &sizes,
+ const QMap<qint64, KIMAP::MessageAttribute > &attrs,
+ const QMap<qint64, KIMAP::MessageFlags> &flags,
+ const QMap<qint64, KIMAP::MessagePtr> &messages );
+
+ /**
* Provides header and message results.
*
* This signal will be emitted if the requested scope mode
@@ -293,6 +349,26 @@ class KIMAP_EXPORT FetchJob : public Job
const QMap<qint64, qint64> &uids,
const QMap<qint64, KIMAP::MessagePtr> &messages );
+
+ /**
+ * An overloaded version of messagesReceived(), which includes additional attribute
+ * specified in the FETCH response, but that don't belong to actual content of the
+ * message.
+ *
+ * @param mailBox the name of the mailbox the fetch job was
+ * executed on
+ * @param uids a map from message sequence numbers to message UIDs
+ * @param attrs a map from message sequence numbers to pair of attribute
+ * name and it's value
+ * @param messages a map from message sequence numbers to message contents
+ *
+ * @overload
+ * @since 4.14
+ */
+ void messagesReceived( const QString &mailBox,
+ const QMap<qint64, qint64> &uids,
+ const QMap<qint64, KIMAP::MessageAttribute > &attrs,
+ const QMap<qint64, KIMAP::MessagePtr> &messages );
/**
* Provides header and message results.
*
@@ -314,6 +390,25 @@ class KIMAP_EXPORT FetchJob : public Job
const QMap<qint64, qint64> &uids,
const QMap<qint64, KIMAP::MessageParts> &parts );
+ /**
+ * An overloaded version of partsReceived(), which includes additional attribute
+ * specified in the FETCH response, but that don't belong to actual content of the
+ * message.
+ *
+ * @param mailBox the name of the mailbox the fetch job was
+ * executed on
+ * @param uids a map from message sequence numbers to message UIDs
+ * @param attrs a map from message sequence numbers to pair of attribute
+ * @param parts a map from message sequence numbers to message part collections
+ *
+ * @overload
+ * @since 4.14
+ */
+ void partsReceived( const QString &mailBox,
+ const QMap<qint64, qint64> &uids,
+ const QMap<qint64, KIMAP::MessageAttribute > &attrs,
+ const QMap<qint64, KIMAP::MessageParts> &parts );
+
protected:
virtual void doStart();
virtual void handleResponse(const Message &response);
diff --git a/kimap/tests/fetchjobtest.cpp b/kimap/tests/fetchjobtest.cpp
index b1c29a3..e34db86 100644
--- a/kimap/tests/fetchjobtest.cpp
+++ b/kimap/tests/fetchjobtest.cpp
@@ -40,11 +40,13 @@ private:
QMap<qint64, KIMAP::MessageFlags> m_flags;
QMap<qint64, KIMAP::MessagePtr> m_messages;
QMap<qint64, KIMAP::MessageParts> m_parts;
+ QMap<qint64, KIMAP::MessageAttribute> m_attrs;
public Q_SLOTS:
void onHeadersReceived( const QString &/*mailBox*/,
const QMap<qint64, qint64> &uids,
const QMap<qint64, qint64> &sizes,
+ const QMap<qint64, KIMAP::MessageAttribute> &attrs,
const QMap<qint64, KIMAP::MessageFlags> &flags,
const QMap<qint64, KIMAP::MessagePtr> &messages )
{
@@ -53,18 +55,27 @@ void onHeadersReceived( const QString &/*mailBox*/,
m_sizes.unite( sizes );
m_flags.unite( flags );
m_messages.unite( messages );
+ m_attrs.unite( attrs );
}
-void onMessagesReceived( QString, const QMap<qint64, qint64> uids, const QMap<qint64, KIMAP::MessagePtr> messages )
+void onMessagesReceived( const QString &/*mailbox*/,
+ const QMap<qint64, qint64> uids,
+ const QMap<qint64, KIMAP::MessageAttribute> &attrs,
+ const QMap<qint64, KIMAP::MessagePtr> &messages )
{
m_signals << "messagesReceived";
m_uids.unite( uids );
m_messages.unite( messages );
+ m_attrs.unite( attrs );
}
-void onPartsReceived( QString, QMap<qint64,qint64> /*uids*/, QMap<qint64, KIMAP::MessageParts> parts)
+void onPartsReceived( const QString &/*mailbox*/,
+ const QMap<qint64,qint64> &/*uids*/,
+ const QMap<qint64, KIMAP::MessageAttribute> &attrs,
+ const QMap<qint64, KIMAP::MessageParts> &parts)
{
m_signals << "partsReceived";
+ m_attrs.unite( attrs );
m_parts.unite( parts );
}
@@ -172,15 +183,17 @@ void testFetch()
job->setScope( scope );
connect( job, SIGNAL(headersReceived(QString,
- QMap<qint64, qint64>,
- QMap<qint64, qint64>,
- QMap<qint64, KIMAP::MessageFlags>,
- QMap<qint64, KIMAP::MessagePtr>)),
+ QMap<qint64,qint64>,
+ QMap<qint64,qint64>,
+ QMap<qint64,KIMAP::MessageAttribute>,
+ QMap<qint64,KIMAP::MessageFlags>,
+ QMap<qint64,KIMAP::MessagePtr>)),
this, SLOT(onHeadersReceived(QString,
- QMap<qint64, qint64>,
- QMap<qint64, qint64>,
- QMap<qint64, KIMAP::MessageFlags>,
- QMap<qint64, KIMAP::MessagePtr>)) );
+ QMap<qint64,qint64>,
+ QMap<qint64,qint64>,
+ QMap<qint64,KIMAP::MessageAttribute>,
+ QMap<qint64,KIMAP::MessageFlags>,
+ QMap<qint64,KIMAP::MessagePtr>)) );
bool result = job->exec();
QEXPECT_FAIL( "connection drop", "Expected failure on connection drop", Continue );
@@ -201,6 +214,7 @@ void testFetch()
m_flags.clear();
m_messages.clear();
m_parts.clear();
+ m_attrs.clear();
}
void testFetchStructure()
@@ -226,8 +240,14 @@ void testFetchStructure()
job->setSequenceSet( KIMAP::ImapSet( 1, 2 ) );
job->setScope( scope );
- connect( job, SIGNAL(messagesReceived(QString,QMap<qint64,qint64>,QMap<qint64,KIMAP::MessagePtr>)),
- SLOT(onMessagesReceived(QString,QMap<qint64,qint64>,QMap<qint64,KIMAP::MessagePtr>)) );
+ connect( job, SIGNAL(messagesReceived(QString,
+ QMap<qint64,qint64>,
+ QMap<qint64,KIMAP::MessageAttribute>,
+ QMap<qint64,KIMAP::MessagePtr>)),
+ this, SLOT(onMessagesReceived(QString,
+ QMap<qint64,qint64>,
+ QMap<qint64,KIMAP::MessageAttribute>,
+ QMap<qint64,KIMAP::MessagePtr>)) );
bool result = job->exec();
QVERIFY( result );
@@ -245,6 +265,7 @@ void testFetchStructure()
m_flags.clear();
m_messages.clear();
m_parts.clear();
+ m_attrs.clear();
}
void testFetchParts()
@@ -271,10 +292,26 @@ void testFetchParts()
job->setSequenceSet( KIMAP::ImapSet( 2, 2 ) );
job->setScope( scope );
- connect ( job, SIGNAL(headersReceived(QString,QMap<qint64,qint64>,QMap<qint64,qint64>,QMap<qint64,KIMAP::MessageFlags>,QMap<qint64,KIMAP::MessagePtr>)),
- SLOT(onHeadersReceived(QString,QMap<qint64,qint64>,QMap<qint64,qint64>,QMap<qint64,KIMAP::MessageFlags>,QMap<qint64,KIMAP::MessagePtr>)) );
- connect( job, SIGNAL(partsReceived(QString,QMap<qint64,qint64>,QMap<qint64,KIMAP::MessageParts>)),
- SLOT(onPartsReceived(QString,QMap<qint64,qint64>,QMap<qint64,KIMAP::MessageParts>)));
+ connect ( job, SIGNAL(headersReceived(QString,
+ QMap<qint64,qint64>,
+ QMap<qint64,qint64>,
+ QMap<qint64,KIMAP::MessageAttribute>,
+ QMap<qint64,KIMAP::MessageFlags>,
+ QMap<qint64,KIMAP::MessagePtr>)),
+ this, SLOT(onHeadersReceived(QString,
+ QMap<qint64,qint64>,
+ QMap<qint64,qint64>,
+ QMap<qint64,KIMAP::MessageAttribute>,
+ QMap<qint64,KIMAP::MessageFlags>,
+ QMap<qint64,KIMAP::MessagePtr>)) );
+ connect( job, SIGNAL(partsReceived(QString,
+ QMap<qint64,qint64>,
+ QMap<qint64,KIMAP::MessageAttribute>,
+ QMap<qint64,KIMAP::MessageParts>)),
+ this, SLOT(onPartsReceived(QString,
+ QMap<qint64,qint64>,
+ QMap<qint64,KIMAP::MessageAttribute>,
+ QMap<qint64,KIMAP::MessageParts>)) );
bool result = job->exec();
@@ -282,6 +319,7 @@ void testFetchParts()
QVERIFY( m_signals.count() > 0 );
QCOMPARE( m_uids.count(), 1 );
QCOMPARE( m_parts.count(), 1 );
+ QCOMPARE( m_attrs.count(), 0 );
// Check that we received the message header
QCOMPARE( m_messages[2]->messageID()->identifier(), QByteArray( "1234 at example.com" ) );
@@ -309,6 +347,7 @@ void testFetchParts()
m_flags.clear();
m_messages.clear();
m_parts.clear();
+ m_attrs.clear();
}
};
commit a25dccb4a9212b509ac8fb84897876c04b5ae9e7
Author: John Layt <jlayt at kde.org>
Date: Mon Jun 23 16:10:10 2014 +0100
Add extra religious file categories
Add extra file categories to help with splitting religious holidays.
diff --git a/kholidays/holidayregion.cpp b/kholidays/holidayregion.cpp
index 0760e58..a7610f9 100644
--- a/kholidays/holidayregion.cpp
+++ b/kholidays/holidayregion.cpp
@@ -285,6 +285,10 @@ QString HolidayRegion::name() const
typeName = i18nc( "Holiday type", "Name Days" );
} else if ( type == QLatin1String("personal") ) {
typeName = i18nc( "Holiday type", "Personal" );
+ } else if ( type == QLatin1String("christian") ) {
+ typeName = i18nc( "Holiday type", "Christian" );
+ } else if ( type == QLatin1String("anglican") ) {
+ typeName = i18nc( "Holiday type", "Anglican" );
} else if ( type == QLatin1String("catholic") ) {
typeName = i18nc( "Holiday type", "Catholic" );
} else if ( type == QLatin1String("protestant") ) {
@@ -293,8 +297,20 @@ QString HolidayRegion::name() const
typeName = i18nc( "Holiday type", "Orthodox" );
} else if ( type == QLatin1String("jewish") ) {
typeName = i18nc( "Holiday type", "Jewish" );
+ } else if ( type == QLatin1String("jewish-orthodox") ) {
+ typeName = i18nc( "Holiday type", "Jewish Orthodox" );
+ } else if ( type == QLatin1String("jewish-conservative") ) {
+ typeName = i18nc( "Holiday type", "Jewish Conservative" );
+ } else if ( type == QLatin1String("jewish-reform") ) {
+ typeName = i18nc( "Holiday type", "Jewish Reform" );
} else if ( type == QLatin1String("islamic") ) {
typeName = i18nc( "Holiday type", "Islamic" );
+ } else if ( type == QLatin1String("islamic-sunni") ) {
+ typeName = i18nc( "Holiday type", "Islamic Sunni" );
+ } else if ( type == QLatin1String("islamic-shia") ) {
+ typeName = i18nc( "Holiday type", "Islamic Shia" );
+ } else if ( type == QLatin1String("islamic-sufi") ) {
+ typeName = i18nc( "Holiday type", "Islamic Sufi" );
}
}
commit b002a48a2204b5f8afad573f83d75e8716975f15
Author: John Layt <jlayt at kde.org>
Date: Fri Jun 20 23:02:30 2014 +0100
Change Koningsdag in Netherlands holiday file
The Netherlands now has a King so change form Queen's Day to King's
Day, as well as fixing the shift rule.
CCBUG: 331219
diff --git a/kholidays/holidays/plan2/holiday_nl_nl b/kholidays/holidays/plan2/holiday_nl_nl
index ea6928a..4b24bc5 100644
--- a/kholidays/holidays/plan2/holiday_nl_nl
+++ b/kholidays/holidays/plan2/holiday_nl_nl
@@ -27,7 +27,14 @@ language "nl"
"Pasen" public religious on easter length 2 days
"Hemelvaart" public religious on easter plus 39 days
"Pinksteren" public on easter plus 49 days length 2 days
-"Koninginnedag" public on april 30 shift to monday if sunday
+: Queen's Day - Queen Beatrix 1980 - 2013 - Moves to previous day if a Sunday
+"Koninginnedag" public on ((year >= 1980 && year <= 2013) ?
+ ( ([april 30] == [sunday after ([april 30])]) ? [april 29] : [april 30] ) :
+ noop)
+: King's Day - King Willem-Alexander from 2014 onwards - Moves to previous day if a Sunday
+"Koningsdag" public on ((year >= 2014) ?
+ ( ([april 27] == [sunday after ([april 27])]) ? [april 26] : [april 27] ) :
+ noop)
"Kerstmis" public religious on december 25 length 2 days
:: Religious Holidays
commit 598866138ee5f336f1a7c8cd1be422bdba97bab9
Author: John Layt <jlayt at kde.org>
Date: Fri Jun 20 21:30:26 2014 +0100
Fix Hong Kong holiday file mistakes
Some lunar holiday dates were missing the correct year so we calculating
for all years.
CCBUG: 329525
diff --git a/kholidays/holidays/plan2/holiday_hk_en-gb b/kholidays/holidays/plan2/holiday_hk_en-gb
index be774cb..458f81d 100644
--- a/kholidays/holidays/plan2/holiday_hk_en-gb
+++ b/kholidays/holidays/plan2/holiday_hk_en-gb
@@ -54,10 +54,10 @@ description "Public Holidays for Hong Kong"
"Lunar New Year" public on 8 february 2016 length 3 days
"Lunar New Year's Eve Holiday" public on 27 january 2017
"Lunar New Year" public on 28 january 2017 length 3 days
-"Lunar New Year's Eve Holiday" public on 15 february
+"Lunar New Year's Eve Holiday" public on 15 february 2018
"Lunar New Year" public on 16 february 2018 length 3 days
"Lunar New Year" public on 5 february 2019 length 3 days
-"Lunar New Year's Eve Holiday" public on 24 january
+"Lunar New Year's Eve Holiday" public on 24 january 2020
"Lunar New Year" public on 25 january 2020 length 3 days
: Ching Ming Festival. See https://bugs.kde.org/show_bug.cgi?id=317834#c4
"Ching Ming Festival" public on 5 april 2010
diff --git a/kholidays/holidays/plan2/holiday_hk_zh-cn b/kholidays/holidays/plan2/holiday_hk_zh-cn
index b1eee42..08f641d 100644
--- a/kholidays/holidays/plan2/holiday_hk_zh-cn
+++ b/kholidays/holidays/plan2/holiday_hk_zh-cn
@@ -54,11 +54,11 @@ description "Public Holidays for Hong Kong"
"è¾²æå¹´å" public on 8 february 2016 length 3 days
"è¾²æå¹´å" public on 27 january 2017
"è¾²æå¹´å" public on 28 january 2017 length 3 days
-"è¾²æå¹´å" public on 15 february
+"è¾²æå¹´å" public on 15 february 2018
"è¾²æå¹´å" public on 16 february 2018 length 3 days
"è¾²æå¹´å" public on 5 february 2019 length 3 days
-"è¾²æå¹´å" public on 24 january
-"è¾²æå¹´å" public on 25 january 2018 length 3 days
+"è¾²æå¹´å" public on 24 january 2020
+"è¾²æå¹´å" public on 25 january 2020 length 3 days
: Ching Ming Festival. See https://bugs.kde.org/show_bug.cgi?id=317834#c4
"æ¸
æç¯" public on 5 april 2010
"æ¸
æç¯" public on 5 april 2011
commit 78bc1bc352e98034b23fb33457e6bfc714efadf5
Author: John Layt <jlayt at kde.org>
Date: Fri Jun 20 21:22:41 2014 +0100
Update Korean holiday file
Hangeul Day is a day off from 2013 onwards.
CCBUG: 322910
diff --git a/kholidays/holidays/plan2/holiday_kr_ko b/kholidays/holidays/plan2/holiday_kr_ko
index 73dcfc8..810d068 100644
--- a/kholidays/holidays/plan2/holiday_kr_ko
+++ b/kholidays/holidays/plan2/holiday_kr_ko
@@ -6,11 +6,12 @@
:: Author: John Layt <john at layt.net>
:: Park Shinjo <peremen at gmail.com>
::
-:: Updated: 2011-02-19
+:: Updated: 2014-06-20
::
:: Source: http://www.law.go.kr/%EB%B2%95%EB%A0%B9/%EA%B5%AD%EA%B2%BD%EC%9D%BC%EC%97%90%EA%B4%80%ED%95%9C%EB%B2%95%EB%A5%A0
:: http://www.law.go.kr/%EB%B2%95%EB%A0%B9/%EA%B4%80%EA%B3%B5%EC%84%9C%EC%9D%98%EA%B3%B5%ED%9C%B4%EC%9D%BC%EC%97%90%EA%B4%80%ED%95%9C%EA%B7%9C%EC%A0%95
:: http://www.law.go.kr/%EB%B2%95%EB%A0%B9/%EA%B0%81%EC%A2%85%EA%B8%B0%EB%85%90%EC%9D%BC%EB%93%B1%EC%97%90%EA%B4%80%ED%95%9C%EA%B7%9C%EC%A0%95
+:: http://www.law.go.kr/%EB%B2%95%EB%A0%B9/%EA%B4%80%EA%B3%B5%EC%84%9C%EC%9D%98%20%EA%B3%B5%ED%9C%B4%EC%9D%BC%EC%97%90%20%EA%B4%80%ED%95%9C%20%EA%B7%9C%EC%A0%95
:: http://ko.wikipedia.org/w/index.php?title=%ED%95%9C%EA%B5%AD%EC%9D%98_%EC%84%A4%EB%82%A0&oldid=6443996
:: http://ko.wikipedia.org/w/index.php?title=%EB%B6%80%EC%B2%98%EB%8B%98_%EC%98%A4%EC%8B%A0_%EB%82%A0&oldid=6444356
:: http://ko.wikipedia.org/w/index.php?title=%EC%B6%94%EC%84%9D&oldid=6506477
@@ -35,8 +36,11 @@ language "ko"
"ê´ë³µì " public on august 15
: National Foundation Day
"ê°ì²ì " public on october 3
+: Hangeul Day - Only a public holiday from 2013 onwards
+"íê¸ë " public cultural on ((year >= 2013) ? [october 9] : noop)
: Christmas Day
"í¬ë¦¬ì¤ë§ì¤" public on december 25
+
: Lunar Holidays
: Lunar New Year: Day 1 Month 1
"ì¤ë " public on 8.2.2005 length 3 days
@@ -83,8 +87,8 @@ language "ko"
:: Cultural
: Constitution Day
"ì íì " civil on july 17
-: Hangeul Day
-"íê¸ë " cultural on october 9
+: Hangeul Day - Only a public holiday from 2013 onwards
+"íê¸ë " cultural on ((year <= 2012) ? [october 9] : noop)
:: School
commit 0e5e5d81c1f5c70f596698227858bb98fa407494
Author: John Layt <jlayt at kde.org>
Date: Fri Jun 20 21:14:04 2014 +0100
Add holiday file for Barbados
New file for Barbados.
CCBUG: 313602
diff --git a/kholidays/holidays/plan2/holiday_bb_en-gb b/kholidays/holidays/plan2/holiday_bb_en-gb
new file mode 100644
index 0000000..a606a7d
--- /dev/null
+++ b/kholidays/holidays/plan2/holiday_bb_en-gb
@@ -0,0 +1,66 @@
+::
+:: Country: Barbados
+::
+:: Language: British English
+::
+:: Author: M Layne m_layne at ml1.net
+::
+:: Updated: 2014-06-20
+::
+:: Source: http://www.totallybarbados.com/barbados/About_Barbados/Local_Information/Barbados_National_Holidays/
+:: http://en.wikipedia.org/wiki/Public_holidays_in_Barbados
+
+:: Metadata
+country "BB"
+language "en_GB"
+:name "[optional - defaults to country name]"
+description "National holiday file for Barbados"
+
+:: Public Holidays
+"New Year's Day" public on january 1
+"New Year's Holiday" public on ( ( [january 1] == [sunday after ([january 1])] ) ? [monday after ([january 1])] : noop )
+"Errol Barrow Day" public on january 21
+"Errol Barrow Holiday" public on ( ( [january 21] == [sunday after ([january 21])] ) ? [monday after ([january 21])] : noop )
+"Good Friday" public religious on easter minus 2
+"Easter Monday" public on easter plus 1
+"National Heroes' Day" public on april 28
+"National Heroes' Holiday" public on ( ( [april 28] == [sunday after ([april 28])] ) ? [monday after ([april 28])] : noop )
+"Labour Day" public on may 1
+"Labour Day Holiday" public on ( ( [may 1] == [sunday after ([may 1])] ) ? [monday after ([may 1])] : noop )
+"Whit Monday" public religious on easter plus 50
+"Emancipation Day" public on august 1
+"Emancipation Holiday" public on ( ( [august 1] == [sunday after ([august 1])] ) ? [monday after ([august 1])] : noop )
+"Kadooment Day" public on first monday in august
+"Independence Day" public on november 30
+"Independence Holiday" public on ( ( [november 30] == [sunday after ([november 30])] ) ? [monday after ([november 30])] : noop )
+"Christmas" public religious on december 25
+"Christmas Day Holiday" public on ( ( [december 25] == [sunday after ([december 25])] ) ? [tuesday after ([december 25])] : noop )
+"Boxing Day" public on december 26
+"Boxing Day Holiday" public on ( ( [december 26] == [sunday after ([december 26])] ) ? [monday after ([december 26])] : noop )
+
+:: Civil
+
+:: Religious
+"Easter" religious on easter
+
+:: Government
+
+:: Financial
+
+:: Commemorative
+
+:: Cultural
+"Valentine's Day" cultural on february 14
+"Mother's Day" cultural on second sunday in may
+"Father's Day" cultural on third sunday in june
+"Halloween" cultural on october 31
+
+:: Historical
+
+:: School
+
+:: Daylight Saving (Winter/Summer Time)
+
+:: Seasons
+
+:: Name Days
commit 88272d55d0c1298b9f6e91851c3df074b549274b
Author: Christian Mollekopf <chrigi_1 at fastmail.fm>
Date: Fri Jun 20 18:17:18 2014 +0200
ETM: cleanup
diff --git a/akonadi/entitytreemodel_p.cpp b/akonadi/entitytreemodel_p.cpp
index 5bca0a8..15ee48c 100644
--- a/akonadi/entitytreemodel_p.cpp
+++ b/akonadi/entitytreemodel_p.cpp
@@ -601,8 +601,6 @@ void EntityTreeModelPrivate::monitoredMimeTypeChanged(const QString &mimeType, b
void EntityTreeModelPrivate::monitoredCollectionsChanged(const Akonadi::Collection &collection, bool monitored)
{
- Q_UNUSED(collection)
- Q_UNUSED(monitored)
if (monitored) {
const CollectionFetchJob::Type fetchType = getFetchType(m_collectionFetchStrategy);
fetchCollections(collection, CollectionFetchJob::Base);
diff --git a/akonadi/entitytreemodel_p.h b/akonadi/entitytreemodel_p.h
index a8b8ef2..ba98935 100644
--- a/akonadi/entitytreemodel_p.h
+++ b/akonadi/entitytreemodel_p.h
@@ -276,16 +276,6 @@ public:
*/
QModelIndexList indexesForItem(const Item &item) const;
- /**
- * Returns the collection for the given collection @p id.
- */
- Collection collectionForId(Collection::Id id) const;
-
- /**
- * Returns the item for the given item @p id.
- */
- Item itemForId(Item::Id id) const;
-
bool canFetchMore(const QModelIndex &parent) const;
/**
commit 35b4dbcb1e9e58e143ff8d6939082165f226e5de
Author: Christian Mollekopf <chrigi_1 at fastmail.fm>
Date: Fri Jun 20 17:56:43 2014 +0200
ETM: Only remove collections that are no longer monitored if they shouldn't be part of the model anymore.
diff --git a/akonadi/entitytreemodel_p.cpp b/akonadi/entitytreemodel_p.cpp
index 7880950..5bca0a8 100644
--- a/akonadi/entitytreemodel_p.cpp
+++ b/akonadi/entitytreemodel_p.cpp
@@ -608,7 +608,10 @@ void EntityTreeModelPrivate::monitoredCollectionsChanged(const Akonadi::Collecti
fetchCollections(collection, CollectionFetchJob::Base);
fetchCollections(collection, fetchType);
} else {
- monitoredCollectionRemoved(collection);
+ //If a collection is derefernced and no longer explicitly monitored it might still match other filters
+ if (!shouldBePartOfModel(collection)) {
+ monitoredCollectionRemoved(collection);
+ }
}
}
@@ -746,8 +749,23 @@ bool EntityTreeModelPrivate::hasChildCollection(const Collection &collection) co
{
foreach (Node *node, m_childEntities[collection.id()]) {
if (node->type == Node::Collection) {
+ const Collection subcol = m_collections[node->id];
+ if (shouldBePartOfModel(subcol)) {
+ return true;
+ }
+ }
+ }
+ return false;
+}
+
+bool EntityTreeModelPrivate::isAncestorMonitored(const Collection &collection) const
+{
+ Akonadi::Collection parent = collection.parentCollection();
+ while (parent.isValid()) {
+ if (m_monitor->collectionsMonitored().contains(parent)) {
return true;
}
+ parent = parent.parentCollection();
}
return false;
}
@@ -769,6 +787,15 @@ bool EntityTreeModelPrivate::shouldBePartOfModel(const Collection &collection) c
return true;
}
+ //We're explicitly monitoring collections, but didn't match the filter
+ if (m_mimeChecker.wantedMimeTypes().isEmpty() && !m_monitor->collectionsMonitored().isEmpty()) {
+ //The collection should be included if one of the parents is monitored
+ if (isAncestorMonitored(collection)) {
+ return true;
+ }
+ return false;
+ }
+
// Some collection trees contain multiple mimetypes. Even though server side filtering ensures we
// only get the ones we're interested in from the job, we have to filter on collections received through signals too.
if (!m_mimeChecker.wantedMimeTypes().isEmpty() &&
diff --git a/akonadi/entitytreemodel_p.h b/akonadi/entitytreemodel_p.h
index 98919ed..a8b8ef2 100644
--- a/akonadi/entitytreemodel_p.h
+++ b/akonadi/entitytreemodel_p.h
@@ -297,6 +297,7 @@ public:
*/
bool shouldBePartOfModel(const Collection &collection) const;
bool hasChildCollection(const Collection &collection) const;
+ bool isAncestorMonitored(const Collection &collection) const;
};
}
diff --git a/akonadi/tests/etmpopulationtest.cpp b/akonadi/tests/etmpopulationtest.cpp
index 3de03c0..09e0829 100644
--- a/akonadi/tests/etmpopulationtest.cpp
+++ b/akonadi/tests/etmpopulationtest.cpp
@@ -110,6 +110,9 @@ Akonadi::Collection createCollection(const QString &name, const Akonadi::Collect
CollectionCreateJob *create = new CollectionCreateJob(col);
create->exec();
+ if (create->error()) {
+ kWarning() << create->errorString();
+ }
Q_ASSERT(!create->error());
return create->collection();
}
@@ -131,6 +134,7 @@ private Q_SLOTS:
void testDisplayFilter();
void testReferenceCollection();
void testLoadingOfHiddenCollection();
+ void testSwitchFromReferenceToEnabled();
private:
Collection res;
@@ -366,6 +370,32 @@ void EtmPopulationTest::testLoadingOfHiddenCollection()
AKVERIFYEXEC(deleteJob);
}
+void EtmPopulationTest::testSwitchFromReferenceToEnabled()
+{
+ Collection col5 = createCollection(QLatin1String("col5"), monitorCol, false, QStringList() << QLatin1String("application/test") << Collection::mimeType());
+ Collection col6 = createCollection(QLatin1String("col6"), col5, true, QStringList() << QLatin1String("application/test"));
+
+ ChangeRecorder *changeRecorder = new ChangeRecorder(this);
+ InspectableETM *model = new InspectableETM(changeRecorder, this);
+ model->setItemPopulationStrategy(EntityTreeModel::ImmediatePopulation);
+ model->setCollectionFetchStrategy(EntityTreeModel::FetchCollectionsRecursive);
+ model->setListFilter(Akonadi::CollectionFetchScope::Display);
+ QTRY_VERIFY(model->isFullyPopulated());
+ model->setCollectionReferenced(col5, true);
+ QTRY_VERIFY(getIndex("col5", model).data(Akonadi::EntityTreeModel::CollectionRole).value<Akonadi::Collection>().referenced());
+
+ //Dereference and enable the collection
+ col5.setEnabled(true);
+ model->setCollectionReferenced(col5, false);
+
+ //Index and child should stay in model since both are enabled
+ QVERIFY(getIndex("col5", model).isValid());
+ QVERIFY(getIndex("col6", model).isValid());
+
+ Akonadi::CollectionDeleteJob *deleteJob = new Akonadi::CollectionDeleteJob(col5);
+ AKVERIFYEXEC(deleteJob);
+}
+
#include "etmpopulationtest.moc"
QTEST_AKONADIMAIN(EtmPopulationTest, NoGUI)
commit fe40fce08c28687212dbfc1d214caa280097fb05
Author: John Layt <jlayt at kde.org>
Date: Thu Jun 19 15:38:33 2014 +0100
Update file categories
Update th file name category tags to match the Plan2 categories.
diff --git a/kholidays/holidayregion.cpp b/kholidays/holidayregion.cpp
index d583677..0760e58 100644
--- a/kholidays/holidayregion.cpp
+++ b/kholidays/holidayregion.cpp
@@ -263,17 +263,25 @@ QString HolidayRegion::name() const
// Religious types, just simple for now
if ( type == QLatin1String("public") ) {
typeName = i18nc( "Holiday type", "Public" );
+ } else if ( type == QLatin1String("civil") ) {
+ typeName = i18nc( "Holiday type", "Civil" );
} else if ( type == QLatin1String("religious") ) {
typeName = i18nc( "Holiday type", "Religious" );
+ } else if ( type == QLatin1String("government") ) {
+ typeName = i18nc( "Holiday type", "Government" );
} else if ( type == QLatin1String("financial") ) {
typeName = i18nc( "Holiday type", "Financial" );
} else if ( type == QLatin1String("cultural") ) {
typeName = i18nc( "Holiday type", "Cultural" );
+ } else if ( type == QLatin1String("commemorative") ) {
+ typeName = i18nc( "Holiday type", "Commemorative" );
+ } else if ( type == QLatin1String("historical") ) {
+ typeName = i18nc( "Holiday type", "Historical" );
} else if ( type == QLatin1String("school") ) {
typeName = i18nc( "Holiday type", "School" );
- } else if ( type == QLatin1String("seasons") ) {
- typeName = i18nc( "Holiday type", "Seasons" );
- } else if ( type == QLatin1String("name") ) {
+ } else if ( type == QLatin1String("seasonal") ) {
+ typeName = i18nc( "Holiday type", "Seasonal" );
+ } else if ( type == QLatin1String("nameday") ) {
typeName = i18nc( "Holiday type", "Name Days" );
} else if ( type == QLatin1String("personal") ) {
typeName = i18nc( "Holiday type", "Personal" );
@@ -292,8 +300,7 @@ QString HolidayRegion::name() const
if ( !regionName.isEmpty() ) {
if ( !typeName.isEmpty() ) {
- //TODO translate when not frozen
- tempName = QString::fromLatin1( "%1 - %2" ).arg( regionName ).arg( typeName );
+ tempName = i18nc( "Holiday file display name, %1 = region name, %2 = holiday type", "%1 - %2" ).arg( regionName ).arg( typeName );
} else {
tempName = regionName;
}
commit 3a2851d11637422ec8d0ef1b0ca54b6a53078edf
Author: John Layt <jlayt at kde.org>
Date: Thu Jun 19 14:51:10 2014 +0100
Change test order
Do teh region test first.
diff --git a/kholidays/tests/testholidayregion.h b/kholidays/tests/testholidayregion.h
index a522cba..f44e735 100644
--- a/kholidays/tests/testholidayregion.h
+++ b/kholidays/tests/testholidayregion.h
@@ -37,8 +37,8 @@ private Q_SLOTS:
void testGb();
void testIran();
void testIsrael();
- void testLocations();
void testRegions();
+ void testLocations();
void testDefaultRegions();
private:
commit 3a6e5ca0c26ac5593beb6a423f341c34f53024e2
Author: John Layt <jlayt at kde.org>
Date: Thu Jun 19 14:49:16 2014 +0100
Update holiday files to new category format
Add categories to all the holiday data files. Where uncertain of a
category I have used civil by default. Please correct as appropriate.
Conflicts:
kholidays/holidays/plan2/holiday_fi_fi
diff --git a/kholidays/holidays/plan2/holiday_ar_es b/kholidays/holidays/plan2/holiday_ar_es
index 9f7fbff..1bb9133 100644
--- a/kholidays/holidays/plan2/holiday_ar_es
+++ b/kholidays/holidays/plan2/holiday_ar_es
@@ -19,63 +19,63 @@ language "es"
description "Feriados Nacionales de Argentina"
:: Public Holidays
-"Año Nuevo" weekend on january 1
-"Lunes de Carnaval" weekend on easter minus 48
-"Martes de Carnaval" weekend on easter minus 47
-"DÃa Nacional de la Memoria" weekend on march 24
-"Viernes Santo" weekend on easter minus 2
-"DÃa de los CaÃdos en Malvinas" weekend on april 2
-"DÃa del Trabajo" weekend on may 1
-"Revolución de Mayo" weekend on may 25
-"DÃa de Manuel Belgrano" weekend on june 20
-"DÃa de la Independencia" weekend on july 9
-"DÃa de San MartÃn" weekend on (third + (year == 2011)) monday in august
-"DÃa de la Raza" weekend on second monday in october
-"DÃa de la SoberanÃa" weekend on fourth monday in november
-"Inmaculada Concepción de MarÃa" weekend on december 8
-"Navidad" weekend on december 25
+"Año Nuevo" public on january 1
+"Lunes de Carnaval" public on easter minus 48
+"Martes de Carnaval" public on easter minus 47
+"DÃa Nacional de la Memoria" public on march 24
+"Viernes Santo" public on easter minus 2
+"DÃa de los CaÃdos en Malvinas" public on april 2
+"DÃa del Trabajo" public on may 1
+"Revolución de Mayo" public on may 25
+"DÃa de Manuel Belgrano" public on june 20
+"DÃa de la Independencia" public on july 9
+"DÃa de San MartÃn" public on (third + (year == 2011)) monday in august
+"DÃa de la Raza" public on second monday in october
+"DÃa de la SoberanÃa" public on fourth monday in november
+"Inmaculada Concepción de MarÃa" public on december 8
+"Navidad" public on december 25
:: Special designated holdays
-"Censo Nacional" weekend on 27.10.2010
+"Censo Nacional" public on 27.10.2010
-"Bicentenario de la Bandera" weekend on 27.02.2012
-"Bicentenario Batalla de Tucumán" weekend on 24.09.2012
+"Bicentenario de la Bandera" public on 27.02.2012
+"Bicentenario Batalla de Tucumán" public on 24.09.2012
-"Bicentenario Asamblea Año XIII" weekend on 31.01.2013
-"Bicentenario Batalla de Salta" weekend on 20.02.2013
+"Bicentenario Asamblea Año XIII" public on 31.01.2013
+"Bicentenario Batalla de Salta" public on 20.02.2013
-"Feriado TurÃstico" weekend on 25.03.2011
-"Feriado TurÃstico" weekend on 09.12.2011
+"Feriado TurÃstico" public on 25.03.2011
+"Feriado TurÃstico" public on 09.12.2011
-"Feriado TurÃstico" weekend on 30.04.2012
-"Feriado TurÃstico" weekend on 24.12.2012
+"Feriado TurÃstico" public on 30.04.2012
+"Feriado TurÃstico" public on 24.12.2012
-"Feriado TurÃstico" weekend on 01.04.2013
-"Feriado TurÃstico" weekend on 21.06.2013
+"Feriado TurÃstico" public on 01.04.2013
+"Feriado TurÃstico" public on 21.06.2013
-"Feriado TurÃstico" weekend on 02.05.2014
-"Feriado TurÃstico" weekend on 26.12.2014
+"Feriado TurÃstico" public on 02.05.2014
+"Feriado TurÃstico" public on 26.12.2014
-"Feriado TurÃstico" weekend on 23.03.2015
-"Feriado TurÃstico" weekend on 07.12.2015
+"Feriado TurÃstico" public on 23.03.2015
+"Feriado TurÃstico" public on 07.12.2015
-"Feriado TurÃstico" weekend on 08.07.2016
-"Feriado TurÃstico" weekend on 09.12.2016
+"Feriado TurÃstico" public on 08.07.2016
+"Feriado TurÃstico" public on 09.12.2016
:: Religious
:: Holidays for Jewish people
-"Pésaj (Pascuas JudÃas)" on hebrew nisan 15 length 2 days
-"Chol HaMoed Pésaj (Pascuas JudÃas)" on hebrew nisan 21 length 2 days
-"Rosh Hashana (Año Nuevo JudÃo)" on hebrew tishrey 1 length 2 days
-"Iom Kipur (DÃa del Perdón JudÃo)" on hebrew tishrey 10
+"Pésaj (Pascuas JudÃas)" religious on hebrew nisan 15 length 2 days
+"Chol HaMoed Pésaj (Pascuas JudÃas)" religious on hebrew nisan 21 length 2 days
+"Rosh Hashana (Año Nuevo JudÃo)" religious on hebrew tishrey 1 length 2 days
+"Iom Kipur (DÃa del Perdón JudÃo)" religious on hebrew tishrey 10
:: Holidays for Islamic people
-"Hégira (Año Nuevo Musulmán)" on hijri muharram 1
-"Id Al-Fitr (Fin Ayuno Musulmán)" on hijri shawwal 1
-"Eid al-Adha (Sacrificio Musulmán)" on hijri thualhijjah 10
+"Hégira (Año Nuevo Musulmán)" religious on hijri muharram 1
+"Id Al-Fitr (Fin Ayuno Musulmán)" religious on hijri shawwal 1
+"Eid al-Adha (Sacrificio Musulmán)" religious on hijri thualhijjah 10
:: Financial
@@ -86,28 +86,28 @@ description "Feriados Nacionales de Argentina"
:: Daylight Saving
:: Seasons
-"Equinoxio de otoño" on march 21
-"Solsticio de invierno" on june 21
-"Equinoxio de primavera" on september 21
-"Solsticio de verano" on december 21
+"Equinoxio de otoño" seasonal on march 21
+"Solsticio de invierno" seasonal on june 21
+"Equinoxio de primavera" seasonal on september 21
+"Solsticio de verano" seasonal on december 21
:: Name Days
:: To be sorted
-"Jueves Santo" on easter minus 3
-"DÃa de Reyes" on january 6
-"DÃa de San ValentÃn" on february 14
-"DÃa de la Mujer" on march 8
-"Sábado de Gloria" on easter minus 1
-"Domingo de Pascua" on easter
-"DÃa del Animal" on april 29
-"DÃa del Ahijado/Nieto" on second sunday in may
-"DÃa del Padre" on third sunday in june
-"DÃa del Amigo" on july 20
-"Dia del Niño" on second sunday in august
-"DÃa de la Madre" on third sunday in october
-"Halloween" on october 31
-"Noche Buena" on december 24
-"DÃa de los Inocentes" on december 28
-"Fin de Año" on december 31
+"Jueves Santo" civil on easter minus 3
+"DÃa de Reyes" civil on january 6
+"DÃa de San ValentÃn" civil on february 14
+"DÃa de la Mujer" civil on march 8
+"Sábado de Gloria" civil on easter minus 1
+"Domingo de Pascua" civil on easter
+"DÃa del Animal" civil on april 29
+"DÃa del Ahijado/Nieto" civil on second sunday in may
+"DÃa del Padre" civil on third sunday in june
+"DÃa del Amigo" civil on july 20
+"Dia del Niño" civil on second sunday in august
+"DÃa de la Madre" civil on third sunday in october
+"Halloween" civil on october 31
+"Noche Buena" civil on december 24
+"DÃa de los Inocentes" civil on december 28
+"Fin de Año" civil on december 31
diff --git a/kholidays/holidays/plan2/holiday_at_de b/kholidays/holidays/plan2/holiday_at_de
index 2982cd8..6294ef8 100644
--- a/kholidays/holidays/plan2/holiday_at_de
+++ b/kholidays/holidays/plan2/holiday_at_de
@@ -20,82 +20,82 @@ language "de"
:: Public Holidays
: New Year's Day
-"Neujahr" weekend on january 1
+"Neujahr" public on january 1
: Epiphany
-"Heilige Drei Könige" weekend on january 6
+"Heilige Drei Könige" public on january 6
: Easter Monday
-"Ostermontag" weekend on easter plus 1 day
+"Ostermontag" public on easter plus 1 day
: Ascension
-"Christi Himmelfahrt" weekend on easter plus 39 days
+"Christi Himmelfahrt" public on easter plus 39 days
: Whit Monday
-"Pfingstmontag" weekend on easter plus 50 days
+"Pfingstmontag" public on easter plus 50 days
: Corpus Christi
-"Fronleichnam" weekend on easter plus 60 days
+"Fronleichnam" public on easter plus 60 days
: National Holiday / Labour Day
-"Tag der Arbeit" weekend on may 1
+"Tag der Arbeit" public on may 1
: Assumption
-"Maria Himmelfahrt" weekend on august 15
+"Maria Himmelfahrt" public on august 15
: National Day / Declaration of Neutrality
-"Nationalfeiertag" weekend on october 26
+"Nationalfeiertag" public on october 26
: All Saints
-"Allerheiligen" weekend on november 1
+"Allerheiligen" public on november 1
: Immaculate Conception
-"Maria Empfängnis" weekend on december 8
+"Maria Empfängnis" public on december 8
: Christmas Day
-"Christtag" weekend on december 25
+"Christtag" public on december 25
: St Stephen's Day
-"Stephanitag" weekend on december 26
+"Stephanitag" public on december 26
:: State Holidays
: St Joseph in AU-K, AU-ST, AU-T, AU-V
-"Josef" on march 19
+"Josef" religious on march 19
: St Florian in AU-OÃ
-"Florian" on may 4
+"Florian" religious on may 4
: St Rupert of Salzburg in AU-S
-"Rupert" on september 24
+"Rupert" religious on september 24
: Carinthian Plebiscite in AU-K
-"Tag der Volksabstimmung" on october 10
+"Tag der Volksabstimmung" civil on october 10
: St Martin of Tours in AU-B
-"Martini" on november 11
+"Martini" religious on november 11
: St Leopold in AU-NÃ, AU-W
-"Leopoldi" on november 15
+"Leopoldi" religious on november 15
:: Collective Contract
: Part or full days off as negotiated
-"Heiliger Abend" on december 24
-"Silvester" on december 31
+"Heiliger Abend" civil on december 24
+"Silvester" civil on december 31
:: Religious
-"Rosenmontag" on easter minus 48 days
-"Faschingsdienstag" on easter minus 47 days
-"Aschermittwoch" on easter minus 46 days
-"Palmsonntag" on easter minus 7 days
-"Gründonnerstag" on easter minus 3 days
+"Rosenmontag" religious on easter minus 48 days
+"Faschingsdienstag" religious on easter minus 47 days
+"Aschermittwoch" religious on easter minus 46 days
+"Palmsonntag" religious on easter minus 7 days
+"Gründonnerstag" religious on easter minus 3 days
: Good Friday, day off for members of Reformed, Lutheran, Old Catholic and Methodist Churches
-"Karfreitag" on easter minus 2 days
-"Karsamstag" on easter minus 1 days
+"Karfreitag" religious on easter minus 2 days
+"Karsamstag" religious on easter minus 1 days
: Easter
-"Ostern" on easter
-"Pfingsten" on easter plus 49 days
-"Allerseelen" on november 2
-"Krampus" on december 5
-"Nikolaus" on december 6
-"1. Advent" on sunday before december 24 minus 21 days
-"2. Advent" on sunday before december 24 minus 14 days
-"3. Advent" on sunday before december 24 minus 7 days
-"4. Advent" on sunday before december 24
+"Ostern" religious on easter
+"Pfingsten" religious on easter plus 49 days
+"Allerseelen" religious on november 2
+"Krampus" religious on december 5
+"Nikolaus" religious on december 6
+"1. Advent" religious on sunday before december 24 minus 21 days
+"2. Advent" religious on sunday before december 24 minus 14 days
+"3. Advent" religious on sunday before december 24 minus 7 days
+"4. Advent" religious on sunday before december 24
:: Financial
:: Cultural
-"Muttertag" on second sunday in may
-"Vatertag" on second sunday in june
+"Muttertag" cultural on second sunday in may
+"Vatertag" cultural on second sunday in june
:: School
:: Daylight Saving
-"Sommerzeit" on last sunday in march
-"Winterzeit" on last sunday in october
+"Sommerzeit" seasonal on last sunday in march
+"Winterzeit" seasonal on last sunday in october
:: Seasons
diff --git a/kholidays/holidays/plan2/holiday_au-act_en-gb b/kholidays/holidays/plan2/holiday_au-act_en-gb
index dbd48a9..4d8dca0 100644
--- a/kholidays/holidays/plan2/holiday_au-act_en-gb
+++ b/kholidays/holidays/plan2/holiday_au-act_en-gb
@@ -20,18 +20,18 @@ description "State holiday file for Australian Capital Territory"
:: Public Holidays
:: State Holidays - ACT
-"New Year's Day" weekend on january 1
-"Australia Day" weekend on january 26
-"Canberra Day" weekend on second monday in march
-"Anzac Day" weekend on april 25
-"Good Friday" weekend on easter minus 2
-"Easter Saturday" weekend on easter minus 1
-"Easter Monday" weekend on easter plus 1
-"Queen's Birthday" weekend on second monday in june
-"Labour Day" weekend on first monday in october
-"Family and Community Day" weekend on first tuesday in november
-"Christmas Day" weekend on december 25
-"Boxing Day" weekend on december 26
+"New Year's Day" public on january 1
+"Australia Day" public on january 26
+"Canberra Day" public on second monday in march
+"Anzac Day" public on april 25
+"Good Friday" public on religious easter minus 2
+"Easter Saturday" public on easter minus 1
+"Easter Monday" public on easter plus 1
+"Queen's Birthday" public on second monday in june
+"Labour Day" public on first monday in october
+"Family and Community Day" public on first tuesday in november
+"Christmas Day" public on religious december 25
+"Boxing Day" public on december 26
:: Religious
@@ -42,8 +42,8 @@ description "State holiday file for Australian Capital Territory"
:: School
:: Daylight Saving
-"Daylight Saving Start" on first sunday in october
-"Daylight Saving End" on first sunday in april
+"Daylight Saving Start" seasonal on first sunday in october
+"Daylight Saving End" seasonal on first sunday in april
:: Seasons
diff --git a/kholidays/holidays/plan2/holiday_au-nsw_en-gb b/kholidays/holidays/plan2/holiday_au-nsw_en-gb
index de9ecee..f71614b 100644
--- a/kholidays/holidays/plan2/holiday_au-nsw_en-gb
+++ b/kholidays/holidays/plan2/holiday_au-nsw_en-gb
@@ -20,16 +20,16 @@ description "State holiday file for New South Wales"
:: Public Holidays
:: State Holidays - NSW
-"New Year's Day" weekend on january 1
-"Australia Day" weekend on january 26
-"Good Friday" weekend on easter minus 2
-"Easter Saturday" weekend on easter minus 1
-"Easter Monday" weekend on easter plus 1
-"Anzac Day" weekend on april 25
-"Queen's Birthday" weekend on second monday in june
-"Labour Day" weekend on first monday in october
-"Christmas Day" weekend on december 25
-"Boxing Day" weekend on december 26
+"New Year's Day" public on january 1
+"Australia Day" public on january 26
+"Good Friday" public religious on easter minus 2
+"Easter Saturday" public on easter minus 1
+"Easter Monday" public on easter plus 1
+"Anzac Day" public on april 25
+"Queen's Birthday" public on second monday in june
+"Labour Day" public on first monday in october
+"Christmas Day" public religious on december 25
+"Boxing Day" public on december 26
:: Religious
@@ -40,8 +40,8 @@ description "State holiday file for New South Wales"
:: School
:: Daylight Saving
-"Daylight Saving Start" on first sunday in october
-"Daylight Saving End" on first sunday in april
+"Daylight Saving Start" seasonal on first sunday in october
+"Daylight Saving End" seasonal on first sunday in april
:: Seasons
diff --git a/kholidays/holidays/plan2/holiday_au-nt_en-gb b/kholidays/holidays/plan2/holiday_au-nt_en-gb
index 99d4714..c524dd1 100644
--- a/kholidays/holidays/plan2/holiday_au-nt_en-gb
+++ b/kholidays/holidays/plan2/holiday_au-nt_en-gb
@@ -20,27 +20,27 @@ description "State holiday file for Nothern Territory"
:: Public Holidays
:: State Holidays - NT
-"New Year's Day" weekend on january 1
-"Australia Day" weekend on january 26
-"Anzac Day" weekend on april 25
-"Good Friday" weekend on easter minus 2
-"Easter Saturday" weekend on easter minus 1
-"Easter Monday" weekend on easter plus 1
-"May Day" weekend on first monday in may
-"Picnic Day" weekend on first monday in august
-"Queen's Birthday" weekend on second monday in june
-"Christmas Day" weekend on december 25
-"Boxing Day" weekend on december 26
+"New Year's Day" public on january 1
+"Australia Day" public on january 26
+"Anzac Day" public on april 25
+"Good Friday" public religious on easter minus 2
+"Easter Saturday" public on easter minus 1
+"Easter Monday" public on easter plus 1
+"May Day" public on first monday in may
+"Picnic Day" public on first monday in august
+"Queen's Birthday" public on second monday in june
+"Christmas Day" public religious on december 25
+"Boxing Day" public on december 26
:: Religious
:: Financial
:: Cultural
-"Alice Springs Show Day" on first friday in july
-"Tennant Creek Show Day" on second friday in july
-"Katherine Show Day" on third friday in july
-"Darwin Show Day" on last friday in july
+"Alice Springs Show Day" cultural on first friday in july
+"Tennant Creek Show Day" cultural on second friday in july
+"Katherine Show Day" cultural on third friday in july
+"Darwin Show Day" cultural on last friday in july
:: School
diff --git a/kholidays/holidays/plan2/holiday_au-qld_en-gb b/kholidays/holidays/plan2/holiday_au-qld_en-gb
index 2b63bc6..b68a846 100644
--- a/kholidays/holidays/plan2/holiday_au-qld_en-gb
+++ b/kholidays/holidays/plan2/holiday_au-qld_en-gb
@@ -20,16 +20,16 @@ description "State holiday file for Queensland"
:: Public Holidays
:: State Holidays - Queensland
-"New Year's Day" weekend on january 1
-"Australia Day" weekend on january 26
-"Good Friday" weekend on easter minus 2
-"Easter Saturday" weekend on easter minus 1
-"Easter Monday" weekend on easter plus 1
-"Anzac Day" weekend on april 25
-"Labour Day" weekend on first monday in may
-"Queen's Birthday" weekend on second monday in june
-"Christmas Day" weekend on december 25
-"Boxing Day" weekend on december 26
+"New Year's Day" public on january 1
+"Australia Day" public on january 26
+"Good Friday" public religious on easter minus 2
+"Easter Saturday" public on easter minus 1
+"Easter Monday" public on easter plus 1
+"Anzac Day" public on april 25
+"Labour Day" public on first monday in may
+"Queen's Birthday" public on second monday in june
+"Christmas Day" public religious on december 25
+"Boxing Day" public on december 26
:: Religious
diff --git a/kholidays/holidays/plan2/holiday_au-sa_en-gb b/kholidays/holidays/plan2/holiday_au-sa_en-gb
index d3a8354..167caed 100644
--- a/kholidays/holidays/plan2/holiday_au-sa_en-gb
+++ b/kholidays/holidays/plan2/holiday_au-sa_en-gb
@@ -20,17 +20,17 @@ description "State holiday file for South Australia"
:: Public Holidays
:: State Holidays - SA
-"New Year's Day" weekend on january 1
-"Australia Day" weekend on january 26
-"Adelaide Cup Day" weekend on second monday in march
-"Anzac Day" weekend on april 25
-"Good Friday" weekend on easter minus 2
-"Easter Saturday" weekend on easter minus 1
-"Easter Monday" weekend on easter plus 1
-"Queen's Birthday" weekend on second monday in june
-"Labour Day" weekend on first monday in october
-"Christmas Day" weekend on december 25
-"Proclamation Day" weekend on december 26
+"New Year's Day" public on january 1
+"Australia Day" public on january 26
+"Adelaide Cup Day" public on second monday in march
+"Anzac Day" public on april 25
+"Good Friday" public religious on easter minus 2
+"Easter Saturday" public on easter minus 1
+"Easter Monday" public on easter plus 1
+"Queen's Birthday" public on second monday in june
+"Labour Day" public on first monday in october
+"Christmas Day" public religious on december 25
+"Proclamation Day" public on december 26
:: Religious
@@ -41,8 +41,8 @@ description "State holiday file for South Australia"
:: School
:: Daylight Saving
-"Daylight Saving Start" on first sunday in october
-"Daylight Saving End" on first sunday in april
+"Daylight Saving Start" seasonal on first sunday in october
+"Daylight Saving End" seasonal on first sunday in april
:: Seasons
diff --git a/kholidays/holidays/plan2/holiday_au-tas_en-gb b/kholidays/holidays/plan2/holiday_au-tas_en-gb
index 39cb9d1..3d8cd3d 100644
--- a/kholidays/holidays/plan2/holiday_au-tas_en-gb
+++ b/kholidays/holidays/plan2/holiday_au-tas_en-gb
@@ -20,18 +20,18 @@ description "State holiday file for Tasmania"
:: Public Holidays
:: State Holidays - Tasmania
-"New Year's Day" weekend on january 1
-"Australia Day" weekend on january 26
-"Royal Hobart Regatta" weekend on second monday in february
-"Eight Hours Day" weekend on second monday in march
-"Good Friday" weekend on easter minus 2
-"Easter Monday" weekend on easter plus 1
-"Easter Tuesday" weekend on easter plus 2
-"Anzac Day" weekend on april 25
-"Recreation Day" weekend on first monday in november
-"Queen's Birthday" weekend on second monday in june
-"Christmas Day" weekend on december 25
-"Boxing Day" weekend on december 26
+"New Year's Day" public on january 1
+"Australia Day" public on january 26
+"Royal Hobart Regatta" public on second monday in february
+"Eight Hours Day" public on second monday in march
+"Good Friday" public religious on easter minus 2
+"Easter Monday" public on easter plus 1
+"Easter Tuesday" public on easter plus 2
+"Anzac Day" public on april 25
+"Recreation Day" public on first monday in november
+"Queen's Birthday" public on second monday in june
+"Christmas Day" public religious on december 25
+"Boxing Day" public on december 26
:: Religious
@@ -42,8 +42,8 @@ description "State holiday file for Tasmania"
:: School
:: Daylight Saving
-"Daylight Saving Start" on first sunday in october
-"Daylight Saving End" on first sunday in april
+"Daylight Saving Start" seasonal on first sunday in october
+"Daylight Saving End" seasonal on first sunday in april
:: Seasons
diff --git a/kholidays/holidays/plan2/holiday_au-vic_en-gb b/kholidays/holidays/plan2/holiday_au-vic_en-gb
index f16b86c..236295a 100644
--- a/kholidays/holidays/plan2/holiday_au-vic_en-gb
+++ b/kholidays/holidays/plan2/holiday_au-vic_en-gb
@@ -20,17 +20,17 @@ description "State holiday file for Victoria"
:: Public Holidays
:: State Holidays - Victoria
-"New Year's Day" weekend on january 1
-"Australia Day" weekend on january 26
-"Labour Day" weekend on second monday in march
-"Good Friday" weekend on easter minus 2
-"Easter Saturday" weekend on easter minus 1
-"Easter Monday" weekend on easter plus 1
-"Anzac Day" weekend on april 25
-"Queen's Birthday" weekend on second monday in june
-"Melbourne Cup Day" weekend on first tuesday in november
-"Christmas Day" weekend on december 25
-"Boxing Day" weekend on december 26
+"New Year's Day" public on january 1
+"Australia Day" public on january 26
+"Labour Day" public on second monday in march
+"Good Friday" public religious on easter minus 2
+"Easter Saturday" public on easter minus 1
+"Easter Monday" public on easter plus 1
+"Anzac Day" public on april 25
+"Queen's Birthday" public on second monday in june
+"Melbourne Cup Day" public on first tuesday in november
+"Christmas Day" public religious on december 25
+"Boxing Day" public on december 26
:: Religious
@@ -41,8 +41,8 @@ description "State holiday file for Victoria"
:: School
:: Daylight Saving
-"Daylight Saving Start" on first sunday in october
-"Daylight Saving End" on first sunday in april
+"Daylight Saving Start" seasonal on first sunday in october
+"Daylight Saving End" seasonal on first sunday in april
:: Seasons
diff --git a/kholidays/holidays/plan2/holiday_au-wa_en-gb b/kholidays/holidays/plan2/holiday_au-wa_en-gb
index 7861be9..b40efa7 100644
--- a/kholidays/holidays/plan2/holiday_au-wa_en-gb
+++ b/kholidays/holidays/plan2/holiday_au-wa_en-gb
@@ -20,19 +20,19 @@ description "State holiday file for Western Australia"
:: Public Holidays
:: State Holidays - WA
-"New Year's Day" weekend on january 1
-"Australia Day" weekend on january 26
-"Labour Day" weekend on first monday in march
-"Anzac Day" weekend on april 25
-"Good Friday" weekend on easter minus 2
-"Easter Monday" weekend on easter plus 1
-"Foundation Day" weekend on first monday in june
-"Queen's Birthday" weekend on 27.9.2010
-"Queen's Birthday" weekend on 3.10.2011
-"Queen's Birthday" weekend on 1.10.2012
-"Queen's Birthday" weekend on 30.9.2013
-"Christmas Day" weekend on december 25
-"Boxing Day" weekend on december 26
+"New Year's Day" public on january 1
+"Australia Day" public on january 26
+"Labour Day" public on first monday in march
+"Anzac Day" public on april 25
+"Good Friday" public religious on easter minus 2
+"Easter Monday" public on easter plus 1
+"Foundation Day" public on first monday in june
+"Queen's Birthday" public on 27.9.2010
+"Queen's Birthday" public on 3.10.2011
+"Queen's Birthday" public on 1.10.2012
+"Queen's Birthday" public on 30.9.2013
+"Christmas Day" public religious on december 25
+"Boxing Day" public on december 26
:: Religious
diff --git a/kholidays/holidays/plan2/holiday_ba-srp_sr b/kholidays/holidays/plan2/holiday_ba-srp_sr
index d22c480..3ab182c 100644
--- a/kholidays/holidays/plan2/holiday_ba-srp_sr
+++ b/kholidays/holidays/plan2/holiday_ba-srp_sr
@@ -17,48 +17,48 @@ language "sr"
:description ""
:: Public Holidays
-"Ðова година" weekend on january 1 length 2 days
-"Ðова година (неÑадни дан)" weekend on ( ( ( [january 2] == [sunday after ([january 2])] ) ) ?
+"Ðова година" public on january 1 length 2 days
+"Ðова година (неÑадни дан)" public on ( ( ( [january 2] == [sunday after ([january 2])] ) ) ?
[ monday after ([january 2]) ] : noop )
-"Ðан РепÑблике" weekend on january 9
-"ÐеÑÑнаÑодни пÑазник Ñада" weekend on may 1 length 2 days
-"ÐеÑÑнаÑодни пÑазник Ñада (неÑадни дан)" weekend on ( ( ( [may 2] == [sunday after ([may 2])] ) ) ?
+"Ðан РепÑблике" public on january 9
+"ÐеÑÑнаÑодни пÑазник Ñада" public on may 1 length 2 days
+"ÐеÑÑнаÑодни пÑазник Ñада (неÑадни дан)" public on ( ( ( [may 2] == [sunday after ([may 2])] ) ) ?
[ monday after ([may 2]) ] : noop )
-"Ðан победе над ÑаÑизмом" weekend on may 9
-"Ðан ÐпÑÑег оквиÑног ÑпоÑазÑма за Ð¼Ð¸Ñ Ñ ÐоÑни и ХеÑÑеговини" weekend on november 21
+"Ðан победе над ÑаÑизмом" public on may 9
+"Ðан ÐпÑÑег оквиÑног ÑпоÑазÑма за Ð¼Ð¸Ñ Ñ ÐоÑни и ХеÑÑеговини" public on november 21
:: Religious Holidays
-"ÐÑавоÑлавни ÐадÑи-дан" weekend on january 6
-"ÐÑавоÑлавни ÐожиÑ" weekend on january 7
-"РимокаÑолиÑки ÐадÑи-дан" weekend on december 24
-"РимокаÑолиÑки ÐожиÑ" weekend on december 25
-"ÐÑавоÑлавни Ðелики пеÑак" weekend on pascha minus 2 days
-"РимокаÑолиÑки Ðелики пеÑак" weekend on easter minus 2 days
-"ÐÑавоÑлавни ÐаÑкÑÑ" weekend on pascha length 2 days
-"РимокаÑолиÑки УÑкÑÑ" weekend on easter length 2 days
-"РамазанÑки баÑÑам" on hijri shawwal 1 length 2 days
-"ÐÑÑбан-баÑÑам" on hijri thualhijjah 10 length 2 days
+"ÐÑавоÑлавни ÐадÑи-дан" public religious on january 6
+"ÐÑавоÑлавни ÐожиÑ" public religious on january 7
+"РимокаÑолиÑки ÐадÑи-дан" public religious on december 24
+"РимокаÑолиÑки ÐожиÑ" public religious on december 25
+"ÐÑавоÑлавни Ðелики пеÑак" public religious on pascha minus 2 days
+"РимокаÑолиÑки Ðелики пеÑак" public religious on easter minus 2 days
+"ÐÑавоÑлавни ÐаÑкÑÑ" public religious on pascha length 2 days
+"РимокаÑолиÑки УÑкÑÑ" public religious on easter length 2 days
+"РамазанÑки баÑÑам" religious on hijri shawwal 1 length 2 days
+"ÐÑÑбан-баÑÑам" religious on hijri thualhijjah 10 length 2 days
:: Financial
:: Cultural
-"СÑпÑка Ðова Ðодина" on january 14
-"Ðан ÑеÑаÑа на жÑÑве Ñ
олокаÑÑÑа" on january 27
-"Ðан ÐÑвог ÑÑпÑког ÑÑÑанка" on february 15
-"Ðан ÑловенÑке пиÑменоÑÑи" on may 24
-"Ðан боÑаÑа одбÑамбено-оÑаÑбинÑког ÑаÑа" on june 28
+"СÑпÑка Ðова Ðодина" cultural on january 14
+"Ðан ÑеÑаÑа на жÑÑве Ñ
олокаÑÑÑа" cultural on january 27
+"Ðан ÐÑвог ÑÑпÑког ÑÑÑанка" cultural on february 15
+"Ðан ÑловенÑке пиÑменоÑÑи" cultural on may 24
+"Ðан боÑаÑа одбÑамбено-оÑаÑбинÑког ÑаÑа" cultural on june 28
:: School
-"СвеÑи Сава â ÑколÑка Ñлава" weekend on january 27
+"СвеÑи Сава â ÑколÑка Ñлава" public school on january 27
:: Daylight Saving
-"ÐеÑÑе ÑаÑÑнаÑе вÑемена (ÐÐТ+2)" on last sunday in march
-"ÐимÑко ÑаÑÑнаÑе вÑемена (ÐÐТ+1)" on last sunday in october
+"ÐеÑÑе ÑаÑÑнаÑе вÑемена (ÐÐТ+2)" seasonal on last sunday in march
+"ÐимÑко ÑаÑÑнаÑе вÑемена (ÐÐТ+1)" seasonal on last sunday in october
:: Seasons
-"ÐÑви дан пÑолеÑа" on march 20
-"ÐÑви дан леÑа" on june 21
-"ÐÑви дан ÑеÑени" on september 23
-"ÐÑви дан зиме" on december 22
+"ÐÑви дан пÑолеÑа" seasonal on march 20
+"ÐÑви дан леÑа" seasonal on june 21
+"ÐÑви дан ÑеÑени" seasonal on september 23
+"ÐÑви дан зиме" seasonal on december 22
:: Name Days
diff --git a/kholidays/holidays/plan2/holiday_ba-srp_sr at ijekavian b/kholidays/holidays/plan2/holiday_ba-srp_sr at ijekavian
index 95a2f95..b4c894a 100644
--- a/kholidays/holidays/plan2/holiday_ba-srp_sr at ijekavian
+++ b/kholidays/holidays/plan2/holiday_ba-srp_sr at ijekavian
@@ -17,48 +17,48 @@ language "sr at ijekavian"
:description ""
:: Public Holidays
-"Ðова година" weekend on january 1 length 2 days
-"Ðова година (неÑадни дан)" weekend on ( ( ( [january 2] == [sunday after ([january 2])] ) ) ?
+"Ðова година" public on january 1 length 2 days
+"Ðова година (неÑадни дан)" public on ( ( ( [january 2] == [sunday after ([january 2])] ) ) ?
[ monday after ([january 2]) ] : noop )
-"Ðан РепÑблике" weekend on january 9
-"ÐеÑÑнаÑодни пÑазник Ñада" weekend on may 1 length 2 days
-"ÐеÑÑнаÑодни пÑазник Ñада (неÑадни дан)" weekend on ( ( ( [may 2] == [sunday after ([may 2])] ) ) ?
+"Ðан РепÑблике" public on january 9
+"ÐеÑÑнаÑодни пÑазник Ñада" public on may 1 length 2 days
+"ÐеÑÑнаÑодни пÑазник Ñада (неÑадни дан)" public on ( ( ( [may 2] == [sunday after ([may 2])] ) ) ?
[ monday after ([may 2]) ] : noop )
-"Ðан побÑеде над ÑаÑизмом" weekend on may 9
-"Ðан ÐпÑÑег оквиÑног ÑпоÑазÑма за Ð¼Ð¸Ñ Ñ ÐоÑни и ХеÑÑеговини" weekend on november 21
+"Ðан побÑеде над ÑаÑизмом" public on may 9
+"Ðан ÐпÑÑег оквиÑног ÑпоÑазÑма за Ð¼Ð¸Ñ Ñ ÐоÑни и ХеÑÑеговини" public on november 21
:: Religious Holidays
-"ÐÑавоÑлавни ÐадÑи-дан" weekend on january 6
-"ÐÑавоÑлавни ÐожиÑ" weekend on january 7
-"РимокаÑолиÑки ÐадÑи-дан" weekend on december 24
-"РимокаÑолиÑки ÐожиÑ" weekend on december 25
-"ÐÑавоÑлавни Ðелики пеÑак" weekend on pascha minus 2 days
-"РимокаÑолиÑки Ðелики пеÑак" weekend on easter minus 2 days
-"ÐÑавоÑлавни ÐаÑкÑÑ" weekend on pascha length 2 days
-"РимокаÑолиÑки УÑкÑÑ" weekend on easter length 2 days
-"РамазанÑки баÑÑам" on hijri shawwal 1 length 2 days
-"ÐÑÑбан-баÑÑам" on hijri thualhijjah 10 length 2 days
+"ÐÑавоÑлавни ÐадÑи-дан" public religious on january 6
+"ÐÑавоÑлавни ÐожиÑ" public religious on january 7
+"РимокаÑолиÑки ÐадÑи-дан" public religious on december 24
+"РимокаÑолиÑки ÐожиÑ" public religious on december 25
+"ÐÑавоÑлавни Ðелики пеÑак" public religious on pascha minus 2 days
+"РимокаÑолиÑки Ðелики пеÑак" public religious on easter minus 2 days
+"ÐÑавоÑлавни ÐаÑкÑÑ" public religious on pascha length 2 days
+"РимокаÑолиÑки УÑкÑÑ" public religious on easter length 2 days
+"РамазанÑки баÑÑам" religious on hijri shawwal 1 length 2 days
+"ÐÑÑбан-баÑÑам" religious on hijri thualhijjah 10 length 2 days
:: Financial
:: Cultural
-"СÑпÑка Ðова Ðодина" on january 14
-"Ðан ÑÑеÑаÑа на жÑÑве Ñ
олокаÑÑÑа" on january 27
-"Ðан ÐÑвог ÑÑпÑког ÑÑÑанка" on february 15
-"Ðан ÑловенÑке пиÑменоÑÑи" on may 24
-"Ðан боÑаÑа одбÑамбено-оÑаÑбинÑког ÑаÑа" on june 28
+"СÑпÑка Ðова Ðодина" cultural on january 14
+"Ðан ÑÑеÑаÑа на жÑÑве Ñ
олокаÑÑÑа" cultural on january 27
+"Ðан ÐÑвог ÑÑпÑког ÑÑÑанка" cultural on february 15
+"Ðан ÑловенÑке пиÑменоÑÑи" cultural on may 24
+"Ðан боÑаÑа одбÑамбено-оÑаÑбинÑког ÑаÑа" cultural on june 28
:: School
-"СвеÑи Сава â ÑколÑка Ñлава" weekend on january 27
+"СвеÑи Сава â ÑколÑка Ñлава" public school on january 27
:: Daylight Saving
-"ÐеÑÑе ÑаÑÑнаÑе вÑемена (ÐÐТ+2)" on last sunday in march
-"ÐимÑко ÑаÑÑнаÑе вÑемена (ÐÐТ+1)" on last sunday in october
+"ÐеÑÑе ÑаÑÑнаÑе вÑемена (ÐÐТ+2)" seasonal on last sunday in march
+"ÐимÑко ÑаÑÑнаÑе вÑемена (ÐÐТ+1)" seasonal on last sunday in october
:: Seasons
-"ÐÑви дан пÑоÑеÑа" on march 20
-"ÐÑви дан ÑеÑа" on june 21
-"ÐÑви дан ÑеÑени" on september 23
-"ÐÑви дан зиме" on december 22
+"ÐÑви дан пÑоÑеÑа" seasonal on march 20
+"ÐÑви дан ÑеÑа" seasonal on june 21
+"ÐÑви дан ÑеÑени" seasonal on september 23
+"ÐÑви дан зиме" seasonal on december 22
:: Name Days
diff --git a/kholidays/holidays/plan2/holiday_ba-srp_sr at ijekavianlatin b/kholidays/holidays/plan2/holiday_ba-srp_sr at ijekavianlatin
index 0cb6ee8..609169b 100644
--- a/kholidays/holidays/plan2/holiday_ba-srp_sr at ijekavianlatin
+++ b/kholidays/holidays/plan2/holiday_ba-srp_sr at ijekavianlatin
@@ -17,48 +17,48 @@ language "sr at ijekavianlatin"
:description ""
:: Public Holidays
-"Nova godina" weekend on january 1 length 2 days
-"Nova godina (neradni dan)" weekend on ( ( ( [january 2] == [sunday after ([january 2])] ) ) ?
+"Nova godina" public on january 1 length 2 days
+"Nova godina (neradni dan)" public on ( ( ( [january 2] == [sunday after ([january 2])] ) ) ?
[ monday after ([january 2]) ] : noop )
-"Dan Republike" weekend on january 9
-"MeÄunarodni praznik rada" weekend on may 1 length 2 days
-"MeÄunarodni praznik rada (neradni dan)" weekend on ( ( ( [may 2] == [sunday after ([may 2])] ) ) ?
+"Dan Republike" public on january 9
+"MeÄunarodni praznik rada" public on may 1 length 2 days
+"MeÄunarodni praznik rada (neradni dan)" public on ( ( ( [may 2] == [sunday after ([may 2])] ) ) ?
[ monday after ([may 2]) ] : noop )
-"Dan pobjede nad fašizmom" weekend on may 9
-"Dan Opšteg okvirnog sporazuma za mir u Bosni i Hercegovini" weekend on november 21
+"Dan pobjede nad fašizmom" public on may 9
+"Dan Opšteg okvirnog sporazuma za mir u Bosni i Hercegovini" public on november 21
:: Religious Holidays
-"Pravoslavni Badnji-dan" weekend on january 6
-"Pravoslavni BožiÄ" weekend on january 7
-"RimokatoliÄki Badnji-dan" weekend on december 24
-"RimokatoliÄki BožiÄ" weekend on december 25
-"Pravoslavni Veliki petak" weekend on pascha minus 2 days
-"RimokatoliÄki Veliki petak" weekend on easter minus 2 days
-"Pravoslavni Vaskrs" weekend on pascha length 2 days
-"RimokatoliÄki Uskrs" weekend on easter length 2 days
-"Ramazanski bajram" on hijri shawwal 1 length 2 days
-"Kurban-bajram" on hijri thualhijjah 10 length 2 days
+"Pravoslavni Badnji-dan" public religious on january 6
+"Pravoslavni BožiÄ" public religious on january 7
+"RimokatoliÄki Badnji-dan" public religious on december 24
+"RimokatoliÄki BožiÄ" public religious on december 25
+"Pravoslavni Veliki petak" public religious on pascha minus 2 days
+"RimokatoliÄki Veliki petak" public religious on easter minus 2 days
+"Pravoslavni Vaskrs" public religious on pascha length 2 days
+"RimokatoliÄki Uskrs" public religious on easter length 2 days
+"Ramazanski bajram" religious on hijri shawwal 1 length 2 days
+"Kurban-bajram" religious on hijri thualhijjah 10 length 2 days
:: Financial
:: Cultural
-"Srpska Nova Godina" on january 14
-"Dan sjeÄanja na žrtve holokausta" on january 27
-"Dan Prvog srpskog ustanka" on february 15
-"Dan slovenske pismenosti" on may 24
-"Dan boraca odbrambeno-otadžbinskog rata" on june 28
+"Srpska Nova Godina" cultural on january 14
+"Dan sjeÄanja na žrtve holokausta" cultural on january 27
+"Dan Prvog srpskog ustanka" cultural on february 15
+"Dan slovenske pismenosti" cultural on may 24
+"Dan boraca odbrambeno-otadžbinskog rata" cultural on june 28
:: School
-"Sveti Sava â Å¡kolska slava" weekend on january 27
+"Sveti Sava â Å¡kolska slava" public school on january 27
:: Daylight Saving
-"Ljetnje raÄunanje vremena (GMT+2)" on last sunday in march
-"Zimsko raÄunanje vremena (GMT+1)" on last sunday in october
+"Ljetnje raÄunanje vremena (GMT+2)" seasonal on last sunday in march
+"Zimsko raÄunanje vremena (GMT+1)" seasonal on last sunday in october
:: Seasons
-"Prvi dan proljeÄa" on march 20
-"Prvi dan ljeta" on june 21
-"Prvi dan jeseni" on september 23
-"Prvi dan zime" on december 22
+"Prvi dan proljeÄa" seasonal on march 20
+"Prvi dan ljeta" seasonal on june 21
+"Prvi dan jeseni" seasonal on september 23
+"Prvi dan zime" seasonal on december 22
:: Name Days
diff --git a/kholidays/holidays/plan2/holiday_ba-srp_sr at latin b/kholidays/holidays/plan2/holiday_ba-srp_sr at latin
index ed856b6..2d611ed 100644
--- a/kholidays/holidays/plan2/holiday_ba-srp_sr at latin
+++ b/kholidays/holidays/plan2/holiday_ba-srp_sr at latin
@@ -17,48 +17,48 @@ language "sr at latin"
:description ""
:: Public Holidays
-"Nova godina" weekend on january 1 length 2 days
-"Nova godina (neradni dan)" weekend on ( ( ( [january 2] == [sunday after ([january 2])] ) ) ?
+"Nova godina" public on january 1 length 2 days
+"Nova godina (neradni dan)" public on ( ( ( [january 2] == [sunday after ([january 2])] ) ) ?
[ monday after ([january 2]) ] : noop )
-"Dan Republike" weekend on january 9
-"MeÄunarodni praznik rada" weekend on may 1 length 2 days
-"MeÄunarodni praznik rada (neradni dan)" weekend on ( ( ( [may 2] == [sunday after ([may 2])] ) ) ?
+"Dan Republike" public on january 9
+"MeÄunarodni praznik rada" public on may 1 length 2 days
+"MeÄunarodni praznik rada (neradni dan)" public on ( ( ( [may 2] == [sunday after ([may 2])] ) ) ?
[ monday after ([may 2]) ] : noop )
-"Dan pobede nad fašizmom" weekend on may 9
-"Dan Opšteg okvirnog sporazuma za mir u Bosni i Hercegovini" weekend on november 21
+"Dan pobede nad fašizmom" public on may 9
+"Dan Opšteg okvirnog sporazuma za mir u Bosni i Hercegovini" public on november 21
:: Religious Holidays
-"Pravoslavni Badnji-dan" weekend on january 6
-"Pravoslavni BožiÄ" weekend on january 7
-"RimokatoliÄki Badnji-dan" weekend on december 24
-"RimokatoliÄki BožiÄ" weekend on december 25
-"Pravoslavni Veliki petak" weekend on pascha minus 2 days
-"RimokatoliÄki Veliki petak" weekend on easter minus 2 days
-"Pravoslavni Vaskrs" weekend on pascha length 2 days
-"RimokatoliÄki Uskrs" weekend on easter length 2 days
-"Ramazanski bajram" on hijri shawwal 1 length 2 days
-"Kurban-bajram" on hijri thualhijjah 10 length 2 days
+"Pravoslavni Badnji-dan" public religious on january 6
+"Pravoslavni BožiÄ" public religious on january 7
+"RimokatoliÄki Badnji-dan" public religious on december 24
+"RimokatoliÄki BožiÄ" public religious on december 25
+"Pravoslavni Veliki petak" public religious on pascha minus 2 days
+"RimokatoliÄki Veliki petak" public religious on easter minus 2 days
+"Pravoslavni Vaskrs" public religious on pascha length 2 days
+"RimokatoliÄki Uskrs" public religious on easter length 2 days
+"Ramazanski bajram" religious on hijri shawwal 1 length 2 days
+"Kurban-bajram" religious on hijri thualhijjah 10 length 2 days
:: Financial
:: Cultural
-"Srpska Nova Godina" on january 14
-"Dan seÄanja na žrtve holokausta" on january 27
-"Dan Prvog srpskog ustanka" on february 15
-"Dan slovenske pismenosti" on may 24
-"Dan boraca odbrambeno-otadžbinskog rata" on june 28
+"Srpska Nova Godina" cultural on january 14
+"Dan seÄanja na žrtve holokausta" cultural on january 27
+"Dan Prvog srpskog ustanka" cultural on february 15
+"Dan slovenske pismenosti" cultural on may 24
+"Dan boraca odbrambeno-otadžbinskog rata" cultural on june 28
:: School
-"Sveti Sava â Å¡kolska slava" weekend on january 27
+"Sveti Sava â Å¡kolska slava" public school on january 27
:: Daylight Saving
-"Letnje raÄunanje vremena (GMT+2)" on last sunday in march
-"Zimsko raÄunanje vremena (GMT+1)" on last sunday in october
+"Letnje raÄunanje vremena (GMT+2)" seasonal on last sunday in march
+"Zimsko raÄunanje vremena (GMT+1)" seasonal on last sunday in october
:: Seasons
-"Prvi dan proleÄa" on march 20
-"Prvi dan leta" on june 21
-"Prvi dan jeseni" on september 23
-"Prvi dan zime" on december 22
+"Prvi dan proleÄa" seasonal on march 20
+"Prvi dan leta" seasonal on june 21
+"Prvi dan jeseni" seasonal on september 23
+"Prvi dan zime" seasonal on december 22
:: Name Days
diff --git a/kholidays/holidays/plan2/holiday_be_fr b/kholidays/holidays/plan2/holiday_be_fr
index 8c1fb05..62d51dc 100644
--- a/kholidays/holidays/plan2/holiday_be_fr
+++ b/kholidays/holidays/plan2/holiday_be_fr
@@ -19,38 +19,38 @@ language "fr"
:description "(please add description in source language) National holiday file for Belgium"
:: Public Holidays
-"Jour de l'an" weekend on january 1
-"Pâques" weekend on easter
-"Lundi de Pâques" weekend on easter plus 1 day
-"Fête du travail" weekend on may 1
-"Ascencion" weekend on easter plus 39 days
-"Pentecôte" weekend on easter plus 49 days
-"Lundi de Pentecôte" weekend on easter plus 50 days
-"Fête nationale - Férié" weekend on july 21
-"Assomption" weekend on august 15
-"Toussaint" weekend on november 1
-"Armistice" weekend on november 11
-"Noël" weekend on december 25
+"Jour de l'an" public on january 1
+"Pâques" public religious on easter
+"Lundi de Pâques" public on easter plus 1 day
+"Fête du travail" public on may 1
+"Ascencion" public religious on easter plus 39 days
+"Pentecôte" public religious on easter plus 49 days
+"Lundi de Pentecôte" public religious on easter plus 50 days
+"Fête nationale - Férié" public on july 21
+"Assomption" public religious on august 15
+"Toussaint" public on november 1
+"Armistice" public on november 11
+"Noël" public religious on december 25
:: Religious
-"Ãpiphanie" on january 6
-"Mardi-gras" on easter minus 47 days
-"Mercredi des cendres" on easter minus 46 days
-"Dimanche des rameaux" on easter minus 7 days
-"Jeudi saint" on easter minus 3 days
-"Vendredi saint" on easter minus 2 days
-"Saint Nicolas" on december 06
-"Saint-Sylvestre" on december 31
+"Ãpiphanie" religious on january 6
+"Mardi-gras" religious on easter minus 47 days
+"Mercredi des cendres" religious on easter minus 46 days
+"Dimanche des rameaux" religious on easter minus 7 days
+"Jeudi saint" religious on easter minus 3 days
+"Vendredi saint" religious on easter minus 2 days
+"Saint Nicolas" religious on december 06
+"Saint-Sylvestre" religious on december 31
:: Financial
:: Cultural
-"Fête des mères" on every second sunday in may
-"Fête des pères" on every third sunday in june
-"Fête de la Communauté flamande" on july 11
-"Fête de la Communauté française de Belgique" on september 27
-"Fêtes de Wallonie" on every third sunday in september
-"Fête de la Communauté germanophone de Belgique" on november 15
+"Fête des mères" cultural on every second sunday in may
+"Fête des pères" cultural on every third sunday in june
+"Fête de la Communauté flamande" cultural on july 11
+"Fête de la Communauté française de Belgique" cultural on september 27
+"Fêtes de Wallonie" cultural on every third sunday in september
+"Fête de la Communauté germanophone de Belgique" cultural on november 15
:: School
@@ -62,5 +62,5 @@ language "fr"
:: To be sorted
-"Chandeleur" on february 2
-"Jour des morts" on november 2
+"Chandeleur" civil on february 2
+"Jour des morts" civil on november 2
diff --git a/kholidays/holidays/plan2/holiday_be_nl b/kholidays/holidays/plan2/holiday_be_nl
index e9dbb21..22095ad 100644
--- a/kholidays/holidays/plan2/holiday_be_nl
+++ b/kholidays/holidays/plan2/holiday_be_nl
@@ -19,36 +19,36 @@ language "nl"
:description "(please add description in source language) National holiday file for Belgium"
:: Public Holidays
-"Nieuwjaar" weekend on january 1
-"Pasen - Feestdag" weekend on easter
-"Paasmaandag" weekend on easter plus 1 day
-"Feest van de Arbeid" weekend on may 1
-"Hemelvaart" weekend on easter plus 39 days
-"Pinksteren" weekend on easter plus 49 days length 2 days
-"Nationale feestdag" weekend on july 21
-"OLV Hemelvaart" weekend on august 15
-"Allerheiligen" weekend on november 1
-"Wapenstilstand" weekend on november 11
-"Kerstmis" weekend on december 25
+"Nieuwjaar" public on january 1
+"Pasen - Feestdag" public religious on easter
+"Paasmaandag" public on easter plus 1 day
+"Feest van de Arbeid" public on may 1
+"Hemelvaart" public religious on easter plus 39 days
+"Pinksteren" public religious on easter plus 49 days length 2 days
+"Nationale feestdag" public on july 21
+"OLV Hemelvaart" public on august 15
+"Allerheiligen" public on november 1
+"Wapenstilstand" public on november 11
+"Kerstmis" public religious on december 25
:: Religious
-"Driekoningen" on january 6
-"Vastenavond" on easter minus 47 days
-"Aswoensdag" on easter minus 46 days
-"Palmzondag" on easter minus 7 days
-"Witte Donderdag" on easter minus 3 days
-"Goede Vrijdag" on easter minus 2 days
-"Sinterklaas" on december 06
+"Driekoningen" religious on january 6
+"Vastenavond" religious on easter minus 47 days
+"Aswoensdag" religious on easter minus 46 days
+"Palmzondag" religious on easter minus 7 days
+"Witte Donderdag" religious on easter minus 3 days
+"Goede Vrijdag" religious on easter minus 2 days
+"Sinterklaas" religious on december 06
:: Financial
:: Cultural
-"Moederdag" on every second sunday in may
-"Vaderdag" on every second sunday in june
-"Vlaamse Gemeenschap feestdag" on july 11
-"Franse Gemeenschap feestdag" on september 27
-"Waalse feesten" on every third sunday in september
-"Duitstalige Gemeenschap feestdag" on november 15
+"Moederdag" cultural on every second sunday in may
+"Vaderdag" cultural on every second sunday in june
+"Vlaamse Gemeenschap feestdag" cultural on july 11
+"Franse Gemeenschap feestdag" cultural on september 27
+"Waalse feesten" cultural on every third sunday in september
+"Duitstalige Gemeenschap feestdag" cultural on november 15
:: School
@@ -60,7 +60,7 @@ language "nl"
:: To be sorted
-"Lichtmis" on february 2
-"Allerzielen" on november 2
-"Tweede kerstdag" on december 26
-"Oudjaar" on december 31
+"Lichtmis" civil on february 2
+"Allerzielen" civil on november 2
+"Tweede kerstdag" civil on december 26
+"Oudjaar" civil on december 31
diff --git a/kholidays/holidays/plan2/holiday_be_wa b/kholidays/holidays/plan2/holiday_be_wa
index 45c89b9..15e6e57 100644
--- a/kholidays/holidays/plan2/holiday_be_wa
+++ b/kholidays/holidays/plan2/holiday_be_wa
@@ -19,38 +19,38 @@ language "wa"
:description "(please add description in source language) National holiday file for Belgium"
:: Public Holidays
-"Novelan" weekend on january 1
-"PÃ¥ke" weekend on easter
-"Londi d' PÃ¥ke" weekend on easter plus 1 day
-"Fiesse do boutaedje" weekend on january 1
-"Assincion" weekend on easter plus 39 days
-"Céncweme (Pintcosse)" weekend on easter plus 49 days
-"Londi d' Céncweme" weekend on easter plus 50 days
-"Fiesse nacionåle" weekend on july 21
-"Grande Notru Dame" weekend on august 15
-"Tossint" weekend on november 1
-"Ã
rmistice" weekend on november 11
-"Noyé" weekend on december 25
+"Novelan" public on january 1
+"PÃ¥ke" public religious on easter
+"Londi d' PÃ¥ke" public on easter plus 1 day
+"Fiesse do boutaedje" public on january 1
+"Assincion" public religious on easter plus 39 days
+"Céncweme (Pintcosse)" public religious on easter plus 49 days
+"Londi d' Céncweme" public religious on easter plus 50 days
+"Fiesse nacionåle" public on july 21
+"Grande Notru Dame" public on august 15
+"Tossint" public on november 1
+"Ã
rmistice" public on november 11
+"Noyé" public religious on december 25
:: Religious
-"Fiesse des Rwès" on january 6
-"Crås mårdi" on easter minus 47 days
-"Mierkidi des cindes" on easter minus 46 days
-"Floreye PÃ¥ke" on easter minus 7 days
-"Djudi sint" on easter minus 3 days
-"Bon vénrdi" on easter minus 2 days
-"Sint Nicolai" on december 06
-"Sint Silvesse" on december 31
+"Fiesse des Rwès" religious on january 6
+"Crås mårdi" religious on easter minus 47 days
+"Mierkidi des cindes" religious on easter minus 46 days
+"Floreye PÃ¥ke" religious on easter minus 7 days
+"Djudi sint" religious on easter minus 3 days
+"Bon vénrdi" religious on easter minus 2 days
+"Sint Nicolai" religious on december 06
+"Sint Silvesse" religious on december 31
:: Financial
:: Cultural
-"Fiesse des méres" on every second sunday in may
-"Fiesse des péres" on every third sunday in june
-"Fiesse del Cominålté flaminde" on july 11
-"Fiesse del Cominålté francesse di Beldjike" on september 27
-"Fiesses di Walonreye" on every third sunday in september
-"Fiesse del Cominålté Tîxhon-cåzante di Belgjike" on november 15
+"Fiesse des méres" cultural on every second sunday in may
+"Fiesse des péres" cultural on every third sunday in june
+"Fiesse del Cominålté flaminde" cultural on july 11
+"Fiesse del Cominålté francesse di Beldjike" cultural on september 27
+"Fiesses di Walonreye" cultural on every third sunday in september
+"Fiesse del Cominålté Tîxhon-cåzante di Belgjike" cultural on november 15
:: School
@@ -62,5 +62,5 @@ language "wa"
:: To be sorted
-"Tchandleuse" on february 2
-"Djoû des åmes" on november 2
+"Tchandleuse" civil on february 2
+"Djoû des åmes" civil on november 2
diff --git a/kholidays/holidays/plan2/holiday_bg_bg b/kholidays/holidays/plan2/holiday_bg_bg
index 4397460..610ef5e 100644
--- a/kholidays/holidays/plan2/holiday_bg_bg
+++ b/kholidays/holidays/plan2/holiday_bg_bg
@@ -17,18 +17,18 @@ language "bg"
:description "(please add description in source language) National holiday file for Bulgaria"
:: Public Holidays
-"Ðова година" weekend on january 1
-"Ðен на ÐÑвобождениеÑо на ÐÑлгаÑÐ¸Ñ Ð¾Ñ Ð¾ÑманÑко иго" weekend on march 3
-"Ðеликден" weekend on pascha
-"Ðеликден" weekend on pascha plus 1 days
-"Ðен на ÑÑÑда" weekend on may 1
-"ÐеÑгÑовден, Ðен на Ñ
ÑабÑоÑÑÑа и ÐÑлгаÑÑкаÑа аÑмиÑ" weekend on may 6
-"Ðен на бÑлгаÑÑкаÑа пÑоÑвеÑа и кÑлÑÑÑа и на ÑлавÑнÑкаÑа пиÑменоÑÑ" weekend on may 24
-"Ðен на СÑединениеÑо на ÐÑлгаÑиÑ" weekend on september 6
-"Ðен на ÐезавиÑимоÑÑÑа на ÐÑлгаÑиÑ" weekend on september 22
-"ÐÑдни веÑеÑ" weekend on december 24
-"Ðоледа, РождеÑÑво Ð¥ÑиÑÑово" weekend on december 25
-"Ðоледа, РождеÑÑво Ð¥ÑиÑÑово" weekend on december 26
+"Ðова година" public on january 1
+"Ðен на ÐÑвобождениеÑо на ÐÑлгаÑÐ¸Ñ Ð¾Ñ Ð¾ÑманÑко иго" public on march 3
+"Ðеликден" public religious on pascha
+"Ðеликден" public on pascha plus 1 days
+"Ðен на ÑÑÑда" public on may 1
+"ÐеÑгÑовден, Ðен на Ñ
ÑабÑоÑÑÑа и ÐÑлгаÑÑкаÑа аÑмиÑ" public on may 6
+"Ðен на бÑлгаÑÑкаÑа пÑоÑвеÑа и кÑлÑÑÑа и на ÑлавÑнÑкаÑа пиÑменоÑÑ" public on may 24
+"Ðен на СÑединениеÑо на ÐÑлгаÑиÑ" public on september 6
+"Ðен на ÐезавиÑимоÑÑÑа на ÐÑлгаÑиÑ" public on september 22
+"ÐÑдни веÑеÑ" public on december 24
+"Ðоледа, РождеÑÑво Ð¥ÑиÑÑово" public religious on december 25
+"Ðоледа, РождеÑÑво Ð¥ÑиÑÑово" public on december 26
:: Religious Holidays
@@ -46,4 +46,4 @@ language "bg"
:: To be sorted
-"Ðен на наÑодниÑе бÑдиÑели - непÑиÑÑÑÑвен за вÑиÑки ÑÑебни заведениÑ" on november 1
+"Ðен на наÑодниÑе бÑдиÑели - непÑиÑÑÑÑвен за вÑиÑки ÑÑебни заведениÑ" civil on november 1
diff --git a/kholidays/holidays/plan2/holiday_br_pt-br b/kholidays/holidays/plan2/holiday_br_pt-br
index 7eb9491..f0d5241 100644
--- a/kholidays/holidays/plan2/holiday_br_pt-br
+++ b/kholidays/holidays/plan2/holiday_br_pt-br
@@ -17,39 +17,39 @@ language "pt_BR"
:description "(please add description in source language) National holiday file for Brazil"
:: Public Holidays
-"Confraternização Universal" weekend on january 1
-"Tiradentes" weekend on april 21
-"Carnaval" weekend on easter minus 48 days length 2 days
-"Paixão de Cristo" weekend on easter minus 2 days
-"Páscoa" weekend on easter
-"Corpus Christi" weekend on easter plus 60 days
-"Dia do Trabalho" weekend on may 1
-"Independência do Brasil" weekend on september 7
-"Nossa Senhora Aparecida" weekend on october 12
-"Finados" weekend on november 2
-"Proclamação da República" weekend on november 15
-"Natal" weekend on december 25
+"Confraternização Universal" public on january 1
+"Tiradentes" public on april 21
+"Carnaval" public religious on easter minus 48 days length 2 days
+"Paixão de Cristo" public religious on easter minus 2 days
+"Páscoa" public religious on easter
+"Corpus Christi" public religious on easter plus 60 days
+"Dia do Trabalho" public on may 1
+"Independência do Brasil" public on september 7
+"Nossa Senhora Aparecida" public on october 12
+"Finados" public on november 2
+"Proclamação da República" public on november 15
+"Natal" public religious on december 25
:: Religious Holidays
-"Reis Magos" on january 6
-"Cinzas" on easter minus 46 days
-"Todos os Santos" on november 1
+"Reis Magos" religious on january 6
+"Cinzas" religious on easter minus 46 days
+"Todos os Santos" religious on november 1
:: Financial
:: Cultural
-"Dia das Mães" on second sunday in may
-"Dia dos Pais" on second sunday in august
+"Dia das Mães" cultural on second sunday in may
+"Dia dos Pais" cultural on second sunday in august
:: School
:: Daylight Saving
:: Seasons
-"InÃcio do Outono" on march 22
-"InÃcio do Inverno" on june 22
-"InÃcio da Primavera" on september 22
-"InÃcio do Verão" on december 22
+"InÃcio do Outono" seasonal on march 22
+"InÃcio do Inverno" seasonal on june 22
+"InÃcio da Primavera" seasonal on september 22
+"InÃcio do Verão" seasonal on december 22
:: Name Days
@@ -57,35 +57,35 @@ language "pt_BR"
:: To be sorted
: Datas comemorativas mundiais (International commemmorative dates)
-:"Dia Mundial da Religião" on january 21
-"Dia Internacional da Mulher" on march 8
-:"Dia Mundial do Consumidor" on march 15
-:"Dia Internacional Contra a Discriminação Racial" on march 21
-:"Dia Mundial da Ãgua" on march 22
-:"Dia Internacional do Livro Infantil" on april 2
-"Dia Mundial da Saúde" on april 7
-"Dia Mundial de Combate ao Câncer" on april 8
-:"Dia Internacional do Café" on april 14
-:"Dia Mundial do Desenhista" on april 15
-:"Dia Mundial do Escoteiro" on april 23
-:"Dia Internacional da Cruz Vermelha" on may 8
-:"Dia Mundial do Enfermeiro" on may 12
-:"Dia Internacional das Telecomunicações" on may 17
-:"Dia Mundial dos Museus" on may 18
-:"Dia Internacional das Crianças VÃtimas de Agressão" on june 4
-:"Dia Mundial do Meio Ambiente" on june 5
-"Dia Internacional do Combate às Drogas" on june 26
-:"Dia Mundial da População" on july 11
-:"Dia Mundial da Alfabetização" on september 8
-:"Dia Internacional para Preservação da Camada de Ozônio" on september 16
-:"Dia Mundial da Alimentação" on october 16
-"Dia das Bruxas" on october 31
-"Dia Mundial de Ação de Graças" on november 28
-"Dia Mundial da Luta contra a AIDS" on december 1
-:"Dia Internacional das Pessoas Portadoras de Deficiência" on december 3
-:"Dia Internacional do Voluntário" on december 5
-:"Dia da Declaração dos Direitos do Homem" on december 10
-"Reveillon" on december 31
+:"Dia Mundial da Religião" commemorative on january 21
+"Dia Internacional da Mulher" commemorative on march 8
+:"Dia Mundial do Consumidor" commemorative on march 15
+:"Dia Internacional Contra a Discriminação Racial" commemorative on march 21
+:"Dia Mundial da Ãgua" commemorative on march 22
+:"Dia Internacional do Livro Infantil" commemorative on april 2
+"Dia Mundial da Saúde" commemorative on april 7
+"Dia Mundial de Combate ao Câncer" commemorative on april 8
+:"Dia Internacional do Café" commemorative on april 14
+:"Dia Mundial do Desenhista" commemorative on april 15
+:"Dia Mundial do Escoteiro" commemorative on april 23
+:"Dia Internacional da Cruz Vermelha" commemorative on may 8
+:"Dia Mundial do Enfermeiro" commemorative on may 12
+:"Dia Internacional das Telecomunicações" commemorative on may 17
+:"Dia Mundial dos Museus" commemorative on may 18
+:"Dia Internacional das Crianças VÃtimas de Agressão" commemorative on june 4
+:"Dia Mundial do Meio Ambiente" commemorative on june 5
+"Dia Internacional do Combate às Drogas" commemorative on june 26
+:"Dia Mundial da População" commemorative on july 11
+:"Dia Mundial da Alfabetização" commemorative on september 8
+:"Dia Internacional para Preservação da Camada de Ozônio" commemorative on september 16
+:"Dia Mundial da Alimentação" commemorative on october 16
+"Dia das Bruxas" commemorative on october 31
+"Dia Mundial de Ação de Graças" commemorative on november 28
+"Dia Mundial da Luta contra a AIDS" commemorative on december 1
+:"Dia Internacional das Pessoas Portadoras de Deficiência" commemorative on december 3
+:"Dia Internacional do Voluntário" commemorative on december 5
+:"Dia da Declaração dos Direitos do Homem" commemorative on december 10
+"Reveillon" commemorative on december 31
: Outras datas comemorativas (Other commemorative dates)
@@ -145,7 +145,7 @@ language "pt_BR"
:"Dia do Porteiro" on june 9
:"Dia da LÃngua Portuguesa" on june 10
:"Dia da Marinha Brasileira" on june 11
-"Dia dos Namorados" on june 12
+"Dia dos Namorados" commemorative on june 12
:"Dia do Paleontólogo" on june 15
:"Dia do QuÃmico" on june 18
:"Dia do Migrante" on june 19
@@ -185,7 +185,7 @@ language "pt_BR"
:"Dia dos Animais" on october 4
:"Dia da Promulgação da Atual Constituição Brasileira" on october 5
:"Dia da Pessoa Portadora de Deficiência FÃsica" on october 11
-"Dia da Criança" on october 12
+"Dia da Criança" commemorative on october 12
:"Dia do Agrônomo" on october 12
:"Dia do Fisioterapeuta" on october 13
:"Dia da Pecuária" on october 14
@@ -200,7 +200,7 @@ language "pt_BR"
:"Dia do Comércio" on october 30
:"Dia do Cinema Brasileiro" on november 5
:"Dia da Bandeira" on november 19
-"Dia da Consciência Negra" on november 20
+"Dia da Consciência Negra" commemorative on november 20
:"Dia do Teólogo" on november 30
:"Dia da Reforma Agrária" on november 30
:"Dia da Astronomia" on december 2
@@ -212,131 +212,131 @@ language "pt_BR"
: Datas históricas
-"Abertura dos Portos no Brasil, 1808" on january 28
-"Descobrimento do Brasil, 1500" on april 22
-"Abolição da Escravatura, 1888" on may 13
-"Golpe Militar, 1964" on march 31
-"Chegada do Homem à Lua, 1969" on june 20
-"Descobrimento da América, 1492" on october 12
-"Morte de Zumbi dos Palmares, 1695" on november 20
+"Abertura dos Portos no Brasil, 1808" historical on january 28
+"Descobrimento do Brasil, 1500" historical on april 22
+"Abolição da Escravatura, 1888" historical on may 13
+"Golpe Militar, 1964" historical on march 31
+"Chegada do Homem à Lua, 1969" historical on june 20
+"Descobrimento da América, 1492" historical on october 12
+"Morte de Zumbi dos Palmares, 1695" historical on november 20
: Feriados e datas comemorativas estaduais
:: Acre
-:"Dia do evangélico" weekend on january 23
-:"Aniversário de Acre" weekend on june 15
-:"InÃcio da Revolução Acreana" weekend on august 6
-:"Dia da Amazônia" weekend on september 5
-:"Assinatura do Tratado de Petrópolis" weekend on november 17
+:"Dia do evangélico" public on january 23
+:"Aniversário de Acre" public on june 15
+:"InÃcio da Revolução Acreana" public on august 6
+:"Dia da Amazônia" public on september 5
+:"Assinatura do Tratado de Petrópolis" public on november 17
:"Aniversário de Rio Branco" on december 28
:: Alagoas
-:"Emancipação polÃtica de Alagoas" weekend on september 16
+:"Emancipação polÃtica de Alagoas" public on september 16
:"Aniversário de Maceió" on december 5
:: Amapá
:"Aniversário de Macapá" on february 4
-:"Dia de São José" weekend on march 19
-:"Aniversário de Amapá" weekend on october 5
+:"Dia de São José" public on march 19
+:"Aniversário de Amapá" public on october 5
:: Amazonas
-:"Dia da Amazônia" weekend on september 5
+:"Dia da Amazônia" public on september 5
:"Aniversário de Manaus" on october 24
-:"Dia da Nossa Senhora da Conceição" weekend on december 8
+:"Dia da Nossa Senhora da Conceição" public on december 8
:: Bahia
:"Aniversário de Salvador" on march 29
-:"Independência da Bahia" weekend on july 2
+:"Independência da Bahia" public on july 2
:: Ceará
:"Aniversário de Fortaleza" on april 13
:: Distrito Federal
:"Aniversário de BrasÃlia" on april 21
-:"Dia do evangélico" weekend on november 30
+:"Dia do evangélico" public on november 30
:: EspÃrito Santo
-:"Colonização do solo espÃrito-santaense" weekend on may 23
+:"Colonização do solo espÃrito-santaense" public on may 23
:"Aniversário de Vitória" on september 8
-:"Dia do Servidor Público" weekend on october 28
+:"Dia do Servidor Público" public on october 28
:: Goiás
:"Aniversário de Goiânia" on october 24
-:"Dia do Servidor Público" weekend on october 28
+:"Dia do Servidor Público" public on october 28
:: Maranhão
-:"Adesão do Maranhão à Independência" weekend on july 28
+:"Adesão do Maranhão à Independência" public on july 28
:"Aniversário de São LuÃs" on september 8
-:"Dia de Nossa Senhora da Conceição" weekend on december 8
+:"Dia de Nossa Senhora da Conceição" public on december 8
:: Mato Grosso
:"Aniversário de Cuiabá" on april 8
:: Mato Grosso do Sul
:"Aniversário de Campo Grande" on august 26
-:"Criação do estado de Mato Grosso do Sul" weekend on october 11
+:"Criação do estado de Mato Grosso do Sul" public on october 11
:: Minas Gerais
:"Aniversário de Belo Horizonte" on december 12
:: Pará
:"Aniversário de Belém" on january 12
-:"Adesão do Grão-Pará à Independência do Brasil" weekend on august 15
-:"Dia da Nossa Senhora da Conceição" weekend on december 8
+:"Adesão do Grão-Pará à Independência do Brasil" public on august 15
+:"Dia da Nossa Senhora da Conceição" public on december 8
:: ParaÃba
:"Aniversário de João Pessoa" on august 5
-:"Emancipação polÃtica da ParaÃba" weekend on august 5
+:"Emancipação polÃtica da ParaÃba" public on august 5
:: Paraná
:"Aniversário de Curitiba" on march 29
-:"Emancipação polÃtica do Paraná" weekend on december 19
+:"Emancipação polÃtica do Paraná" public on december 19
:: Pernambuco
:"Revolução Pernambucana (1817)" on march 6
:"Aniversário de Recife" on march 12
:: PiauÃ
-:"Dia da Batalha de Jenipapo" weekend on march 13
+:"Dia da Batalha de Jenipapo" public on march 13
:"Aniversário de Teresina" on august 16
-:"Dia de PiauÃ" weekend on october 19
+:"Dia de PiauÃ" public on october 19
:: Rio de Janeiro
:"Aniversário da Cidade do Rio de Janeiro" on march 1
-:"Dia de São Jorge" weekend on april 23
-:"Dia do Comércio" weekend on october 15
+:"Dia de São Jorge" public on april 23
+:"Dia do Comércio" public on october 15
:: Rio Grande do Norte
-:"Dia de São Pedro" weekend on june 29
-:"Mártires de Cunhaú e Uruaçu" weekend on october 3
+:"Dia de São Pedro" public on june 29
+:"Mártires de Cunhaú e Uruaçu" public on october 3
:"Aniversário da Cidade de Natal" on december 25
:: Rio Grande do Sul
:"Aniversário de Porto Alegre" on march 26
-:"Revolução Farroupilha" weekend on september 20
+:"Revolução Farroupilha" public on september 20
:: Rondônia
-:"Criação do estado de Rondônia" weekend on january 4
-:"Dia do Evangélico" weekend on june 18
+:"Criação do estado de Rondônia" public on january 4
+:"Dia do Evangélico" public on june 18
:"Aniversário de Porto Velho" on october 2
:: Roraima
:"Aniversário de Boa Vista" on june 9
-:"Criação do estado de Roraima" weekend on october 5
+:"Criação do estado de Roraima" public on october 5
:: Santa Catarina
:"Aniversário de Florianópolis" on march 23
-:"Criação da Capitania de Santa Catarina" weekend on august 11
+:"Criação da Capitania de Santa Catarina" public on august 11
:: São Paulo
-"Aniversário da Cidade de São Paulo" on january 25
-"Revolução Constitucionalista de 1932" weekend on july 9
+"Aniversário da Cidade de São Paulo" civil on january 25
+"Revolução Constitucionalista de 1932" public on july 9
:: Sergipe
:"Aniversário de Aracaju" on march 17
-:"Autonomia polÃtica de Sergipe" weekend on july 8
+:"Autonomia polÃtica de Sergipe" public on july 8
:: Tocantins
:"Aniversário de Palmas" on may 20
-:"Criação deo estado de Tocantins" weekend on october 5
+:"Criação deo estado de Tocantins" public on october 5
diff --git a/kholidays/holidays/plan2/holiday_by_be b/kholidays/holidays/plan2/holiday_by_be
index 2fca163..4414b0a 100644
--- a/kholidays/holidays/plan2/holiday_by_be
+++ b/kholidays/holidays/plan2/holiday_by_be
@@ -17,15 +17,15 @@ language "be"
:description "(please add description in source language) National holiday file for Belarus"
:: Public Holidays
-"ÐовÑй год" weekend on january 1
-"РождеÑÑво Ð¥ÑиÑÑово (пÑавоÑлавное)" weekend on january 7
-"ÐÐµÐ½Ñ Ð¶ÐµÐ½Ñин" weekend on march 8
-"РадÑниÑа" weekend on easter plus 9
-"ÐÑаздник ÑÑÑда" weekend on may 1
-"ÐÐµÐ½Ñ ÐобедÑ" weekend on may 9
-"ÐÐµÐ½Ñ ÐезавиÑимоÑÑи РеÑпÑблики ÐелаÑÑÑÑ" weekend on july 3
-"ÐÐµÐ½Ñ ÐкÑÑбÑÑÑкой ÑеволÑÑии" weekend on november 7
-"РождеÑÑво Ð¥ÑиÑÑово (каÑолиÑеÑкое)" weekend on december 25
+"ÐовÑй год" public on january 1
+"РождеÑÑво Ð¥ÑиÑÑово (пÑавоÑлавное)" public on january 7
+"ÐÐµÐ½Ñ Ð¶ÐµÐ½Ñин" public on march 8
+"РадÑниÑа" public on easter plus 9
+"ÐÑаздник ÑÑÑда" public on may 1
+"ÐÐµÐ½Ñ ÐобедÑ" public on may 9
+"ÐÐµÐ½Ñ ÐезавиÑимоÑÑи РеÑпÑблики ÐелаÑÑÑÑ" public on july 3
+"ÐÐµÐ½Ñ ÐкÑÑбÑÑÑкой ÑеволÑÑии" public on november 7
+"РождеÑÑво Ð¥ÑиÑÑово (каÑолиÑеÑкое)" public religious on december 25
:: Religious Holidays
@@ -43,83 +43,83 @@ language "be"
:: To be sorted
-"СÑаÑÑй ÐовÑй год" on january 14
-"ÐÐµÐ½Ñ ÑÑÑденÑов (ТаÑÑÑнин денÑ)" on january 25
-"ÐÐµÐ½Ñ Ð¡Ð²ÑÑого ÐаленÑина (ÐÐµÐ½Ñ Ð²ÑеÑ
влÑбленнÑÑ
)" on february 14
-"ÐÐµÐ½Ñ Ð¼Ð¾Ð»Ð¾Ð´Ñжи в ÐелаÑÑÑи" on last sunday in june
-"ÐÐµÐ½Ñ Ð¿Ð°Ð¼ÑÑи" on november 2
-"ÐÐµÐ½Ñ ÑабоÑников ÑоÑиалÑной заÑиÑÑ" on january 5
-"ÐÐµÐ½Ñ Ð±Ð°Ð½ÐºÐ¾Ð²ÑкиÑ
и ÑинанÑовÑÑ
ÑабоÑников" on first sunday in january
-"ÐÐµÐ½Ñ ÑпаÑаÑелÑ" on january 19
-"ÐÐµÐ½Ñ Ð¸Ð½Ð¶ÐµÐ½ÐµÑнÑÑ
войÑк" on january 21
-"ÐÐµÐ½Ñ Ð±ÐµÐ»Ð¾ÑÑÑÑкой наÑки" on last sunday in january
-"ÐÐµÐ½Ñ Ð¿Ð°Ð¼ÑÑи воинов-инÑеÑнаÑионалиÑÑов" on february 15
-"ÐÐµÐ½Ñ ÑабоÑников землеÑÑÑÑоиÑелÑной и каÑÑогÑаÑо-геодезиÑеÑкой ÑлÑжбÑ" on february 21
-"ÐÐµÐ½Ñ Ð·Ð°ÑиÑников ÐÑеÑеÑÑва и ÐооÑÑженнÑÑ
Сил" on february 23
-"ÐÐµÐ½Ñ Ð¼Ð¸Ð»Ð¸Ñии" on march 4
-"ÐÐµÐ½Ñ ÐонÑÑиÑÑÑии" on march 15
-"ÐÐµÐ½Ñ Ð¿Ð¾ÑÑебиÑелÑ" on march 15
-"ÐÐµÐ½Ñ Ð²Ð½ÑÑÑенниÑ
войÑк" on march 18
-"ÐÐµÐ½Ñ ÑабоÑников бÑÑового обÑлÑÐ¶Ð¸Ð²Ð°Ð½Ð¸Ñ Ð½Ð°ÑÐµÐ»ÐµÐ½Ð¸Ñ Ð¸ жилиÑно-коммÑналÑного Ñ
озÑйÑÑва" on fourth sunday in march
-"ÐаÑÑ
а" on easter
-"ÐÐµÐ½Ñ ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð½Ð°Ñодов ÐелаÑÑÑи и РоÑÑии" on april 2
-"ÐÐµÐ½Ñ Ð³ÐµÐ¾Ð»Ð¾Ð³Ð°" on first sunday in april
-"ÐÐµÐ½Ñ Ð²Ð¾Ð¹Ñк пÑоÑивовоздÑÑной обоÑонÑ" on second sunday in april
-"ÐÐµÐ½Ñ ÑеÑнобÑлÑÑкой ÑÑагедии" on april 26
-"ÐÐµÐ½Ñ Ð¿ÐµÑаÑи" on may 5
-"ÐÐµÐ½Ñ ÑабоÑников Ñадио, ÑÐµÐ»ÐµÐ²Ð¸Ð´ÐµÐ½Ð¸Ñ Ð¸ ÑвÑзи" on may 7
-"ÐÐµÐ½Ñ ÑемÑи" on may 15
-"ÐÐµÐ½Ñ ÐоÑÑдаÑÑÑвенного Ñлага и геÑба" on second sunday in may
-"ÐÐµÐ½Ñ ÑабоÑников ÑизиÑеÑкой кÑлÑÑÑÑÑ Ð¸ ÑпоÑÑа" on third saturday in may
-"ÐÐµÐ½Ñ Ð¿Ð¾Ð³ÑаниÑника" on may 28
-"ÐÐµÐ½Ñ Ñ
имика" on last sunday in may
-"ÐÐµÐ½Ñ Ð¾Ñ
ÑÐ°Ð½Ñ Ð¾ÐºÑÑжаÑÑей ÑÑедÑ" on june 5
-"ÐÐµÐ½Ñ Ð¼ÐµÐ»Ð¸Ð¾ÑаÑоÑа" on first sunday in june
-"ÐÐµÐ½Ñ ÑабоÑников легкой пÑомÑÑленноÑÑи" on second sunday in june
-"ÐÐµÐ½Ñ Ð¼ÐµÐ´Ð¸ÑинÑкиÑ
ÑабоÑников" on third sunday in june
-"ÐÐµÐ½Ñ Ð²ÑенаÑодной памÑÑи жеÑÑв ÐÐÐ" on june 22
-"ÐÐµÐ½Ñ ÑабоÑников пÑокÑÑаÑÑÑÑ" on june 26
-"ÐÐµÐ½Ñ Ð¸Ð·Ð¾Ð±ÑеÑаÑÐµÐ»Ñ Ð¸ ÑаÑионализаÑоÑа" on last saturday in june
-"ÐÐµÐ½Ñ Ð¼Ð¾Ð»Ð¾Ð´Ñжи" on last sunday in june
-"ÐÐµÐ½Ñ ÑкономиÑÑа" on june 30
-"ÐÐµÐ½Ñ ÐºÐ¾Ð¾Ð¿ÐµÑаÑии" on first saturday in july
-"ÐÑпалÑе" on july 7
-"ÐÐµÐ½Ñ ÑабоÑников водного ÑÑанÑпоÑÑа" on first sunday in july
-"ÐÐµÐ½Ñ ÑабоÑников налоговÑÑ
оÑганов" on second sunday in july
-"ÐÐµÐ½Ñ Ð¼ÐµÑаллÑÑга" on third sunday in july
-"ÐÐµÐ½Ñ Ð¿Ð¾Ð¶Ð°Ñной ÑлÑжбÑ" on july 25
-"ÐÐµÐ½Ñ ÑабоÑников ÑоÑговли" on last sunday in july
-"ÐÐµÐ½Ñ Ð´ÐµÑанÑников" on august 2
-"ÐÐµÐ½Ñ Ð¶ÐµÐ»ÐµÐ·Ð½Ð¾Ð´Ð¾ÑожнÑÑ
войÑк" on august 6
-"ÐÐµÐ½Ñ Ð¶ÐµÐ»ÐµÐ·Ð½Ð¾Ð´Ð¾Ñожника" on first sunday in august
-"ÐÐµÐ½Ñ ÑÑÑоиÑелÑ" on second sunday in august
-"ÐÐµÐ½Ñ Ð²Ð¾ÐµÐ½Ð½Ð¾-воздÑÑнÑÑ
Ñил" on third sunday in august
-"ÐÐµÐ½Ñ ÑабоÑников гоÑÑдаÑÑÑвенной ÑÑаÑиÑÑики" on august 23
-"ÐÐµÐ½Ñ ÑаÑ
ÑеÑа" on last sunday in august
-"ÐÐµÐ½Ñ Ð·Ð½Ð°Ð½Ð¸Ð¹" on september 1
-"ÐÐµÐ½Ñ Ð±ÐµÐ»Ð¾ÑÑÑÑкой пиÑÑменноÑÑи" on first sunday in september
-"ÐÐµÐ½Ñ ÑабоÑников неÑÑÑной, газовой и Ñопливной пÑомÑÑленноÑÑи" on first sunday in september
-"ÐÐµÐ½Ñ ÑанкиÑÑов" on second sunday in september
-"ÐÐµÐ½Ñ Ð¼Ð¸Ñа" on third tuesday in september
-"ÐÐµÐ½Ñ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñек" on september 15
-"ÐÐµÐ½Ñ Ñаможенника" on september 20
-"ÐÐµÐ½Ñ ÑабоÑников леÑа" on third sunday in september
-"ÐÐµÐ½Ñ Ð¼Ð°ÑиноÑÑÑоиÑелÑ" on last sunday in september
-"ÐÐµÐ½Ñ Ð¿Ð¾Ð¶Ð¸Ð»ÑÑ
лÑдей" on october 1
-"ÐÐµÐ½Ñ Ð°ÑÑ
ивиÑÑа" on october 6
-"ÐÐµÐ½Ñ ÑÑиÑелÑ" on first sunday in october
-"ÐÐµÐ½Ñ ÑабоÑников кÑлÑÑÑÑÑ" on second sunday in october
-"ÐÐµÐ½Ñ Ð¼Ð°ÑеÑи" on october 14
-"ÐÐµÐ½Ñ ÑÑандаÑÑизаÑии" on october 14
-"ÐÐµÐ½Ñ ÑабоÑников ÑаÑмаÑевÑиÑеÑкой и микÑобиологиÑеÑкой пÑомÑÑленноÑÑи" on october 15
-"ÐÐµÐ½Ñ Ð°Ð²ÑомобилиÑÑа и доÑожника" on last sunday in october
-"ÐÐµÐ½Ñ ÑабоÑников гÑажданÑкой авиаÑии" on first sunday in november
-"ÐÐµÐ½Ñ ÑакеÑнÑÑ
войÑк и аÑÑиллеÑии" on november 19
-"ÐÐµÐ½Ñ ÑабоÑников ÑелÑÑкого Ñ
озÑйÑÑва и пеÑеÑабаÑÑваÑÑей пÑомÑÑленноÑÑи агÑопÑомÑÑленного комплекÑа" on third sunday in november
-"ÐÐµÐ½Ñ Ð¸Ð½Ð²Ð°Ð»Ð¸Ð´Ð¾Ð² РеÑпÑблики ÐелаÑÑÑÑ" on december 3
-"ÐÐµÐ½Ñ ÑÑÑаÑ
овÑÑ
ÑабоÑников" on first saturday in december
-"ÐÐµÐ½Ñ ÑÑиÑÑа" on first sunday in december
-"ÐÐµÐ½Ñ Ð¿Ñав Ñеловека" on december 10
-"ÐÐµÐ½Ñ Ð±ÐµÐ»Ð¾ÑÑÑÑкого кино" on december 17
-"ÐÐµÐ½Ñ ÑоÑÑÑдника оÑганов гоÑÑдаÑÑÑвенной безопаÑноÑÑи" on december 20
-"ÐÐµÐ½Ñ ÑнеÑгеÑика" on december 22
+"СÑаÑÑй ÐовÑй год" civil on january 14
+"ÐÐµÐ½Ñ ÑÑÑденÑов (ТаÑÑÑнин денÑ)" civil on january 25
+"ÐÐµÐ½Ñ Ð¡Ð²ÑÑого ÐаленÑина (ÐÐµÐ½Ñ Ð²ÑеÑ
влÑбленнÑÑ
)" civil on february 14
+"ÐÐµÐ½Ñ Ð¼Ð¾Ð»Ð¾Ð´Ñжи в ÐелаÑÑÑи" civil on last sunday in june
+"ÐÐµÐ½Ñ Ð¿Ð°Ð¼ÑÑи" civil on november 2
+"ÐÐµÐ½Ñ ÑабоÑников ÑоÑиалÑной заÑиÑÑ" civil on january 5
+"ÐÐµÐ½Ñ Ð±Ð°Ð½ÐºÐ¾Ð²ÑкиÑ
и ÑинанÑовÑÑ
ÑабоÑников" civil on first sunday in january
+"ÐÐµÐ½Ñ ÑпаÑаÑелÑ" civil on january 19
+"ÐÐµÐ½Ñ Ð¸Ð½Ð¶ÐµÐ½ÐµÑнÑÑ
войÑк" civil on january 21
+"ÐÐµÐ½Ñ Ð±ÐµÐ»Ð¾ÑÑÑÑкой наÑки" civil on last sunday in january
+"ÐÐµÐ½Ñ Ð¿Ð°Ð¼ÑÑи воинов-инÑеÑнаÑионалиÑÑов" civil on february 15
+"ÐÐµÐ½Ñ ÑабоÑников землеÑÑÑÑоиÑелÑной и каÑÑогÑаÑо-геодезиÑеÑкой ÑлÑжбÑ" civil on february 21
+"ÐÐµÐ½Ñ Ð·Ð°ÑиÑников ÐÑеÑеÑÑва и ÐооÑÑженнÑÑ
Сил" civil on february 23
+"ÐÐµÐ½Ñ Ð¼Ð¸Ð»Ð¸Ñии" civil on march 4
+"ÐÐµÐ½Ñ ÐонÑÑиÑÑÑии" civil on march 15
+"ÐÐµÐ½Ñ Ð¿Ð¾ÑÑебиÑелÑ" civil on march 15
+"ÐÐµÐ½Ñ Ð²Ð½ÑÑÑенниÑ
войÑк" civil on march 18
+"ÐÐµÐ½Ñ ÑабоÑников бÑÑового обÑлÑÐ¶Ð¸Ð²Ð°Ð½Ð¸Ñ Ð½Ð°ÑÐµÐ»ÐµÐ½Ð¸Ñ Ð¸ жилиÑно-коммÑналÑного Ñ
озÑйÑÑва" civil on fourth sunday in march
+"ÐаÑÑ
а" civil on easter
+"ÐÐµÐ½Ñ ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð½Ð°Ñодов ÐелаÑÑÑи и РоÑÑии" civil on april 2
+"ÐÐµÐ½Ñ Ð³ÐµÐ¾Ð»Ð¾Ð³Ð°" civil on first sunday in april
+"ÐÐµÐ½Ñ Ð²Ð¾Ð¹Ñк пÑоÑивовоздÑÑной обоÑонÑ" civil on second sunday in april
+"ÐÐµÐ½Ñ ÑеÑнобÑлÑÑкой ÑÑагедии" civil on april 26
+"ÐÐµÐ½Ñ Ð¿ÐµÑаÑи" civil on may 5
+"ÐÐµÐ½Ñ ÑабоÑников Ñадио, ÑÐµÐ»ÐµÐ²Ð¸Ð´ÐµÐ½Ð¸Ñ Ð¸ ÑвÑзи" civil on may 7
+"ÐÐµÐ½Ñ ÑемÑи" civil on may 15
+"ÐÐµÐ½Ñ ÐоÑÑдаÑÑÑвенного Ñлага и геÑба" civil on second sunday in may
+"ÐÐµÐ½Ñ ÑабоÑников ÑизиÑеÑкой кÑлÑÑÑÑÑ Ð¸ ÑпоÑÑа" civil on third saturday in may
+"ÐÐµÐ½Ñ Ð¿Ð¾Ð³ÑаниÑника" civil on may 28
+"ÐÐµÐ½Ñ Ñ
имика" civil on last sunday in may
+"ÐÐµÐ½Ñ Ð¾Ñ
ÑÐ°Ð½Ñ Ð¾ÐºÑÑжаÑÑей ÑÑедÑ" civil on june 5
+"ÐÐµÐ½Ñ Ð¼ÐµÐ»Ð¸Ð¾ÑаÑоÑа" civil on first sunday in june
+"ÐÐµÐ½Ñ ÑабоÑников легкой пÑомÑÑленноÑÑи" civil on second sunday in june
+"ÐÐµÐ½Ñ Ð¼ÐµÐ´Ð¸ÑинÑкиÑ
ÑабоÑников" civil on third sunday in june
+"ÐÐµÐ½Ñ Ð²ÑенаÑодной памÑÑи жеÑÑв ÐÐÐ" civil on june 22
+"ÐÐµÐ½Ñ ÑабоÑников пÑокÑÑаÑÑÑÑ" civil on june 26
+"ÐÐµÐ½Ñ Ð¸Ð·Ð¾Ð±ÑеÑаÑÐµÐ»Ñ Ð¸ ÑаÑионализаÑоÑа" civil on last saturday in june
+"ÐÐµÐ½Ñ Ð¼Ð¾Ð»Ð¾Ð´Ñжи" civil on last sunday in june
+"ÐÐµÐ½Ñ ÑкономиÑÑа" civil on june 30
+"ÐÐµÐ½Ñ ÐºÐ¾Ð¾Ð¿ÐµÑаÑии" civil on first saturday in july
+"ÐÑпалÑе" civil on july 7
+"ÐÐµÐ½Ñ ÑабоÑников водного ÑÑанÑпоÑÑа" civil on first sunday in july
+"ÐÐµÐ½Ñ ÑабоÑников налоговÑÑ
оÑганов" civil on second sunday in july
+"ÐÐµÐ½Ñ Ð¼ÐµÑаллÑÑга" civil on third sunday in july
+"ÐÐµÐ½Ñ Ð¿Ð¾Ð¶Ð°Ñной ÑлÑжбÑ" civil on july 25
+"ÐÐµÐ½Ñ ÑабоÑников ÑоÑговли" civil on last sunday in july
+"ÐÐµÐ½Ñ Ð´ÐµÑанÑников" civil on august 2
+"ÐÐµÐ½Ñ Ð¶ÐµÐ»ÐµÐ·Ð½Ð¾Ð´Ð¾ÑожнÑÑ
войÑк" civil on august 6
+"ÐÐµÐ½Ñ Ð¶ÐµÐ»ÐµÐ·Ð½Ð¾Ð´Ð¾Ñожника" civil on first sunday in august
+"ÐÐµÐ½Ñ ÑÑÑоиÑелÑ" civil on second sunday in august
+"ÐÐµÐ½Ñ Ð²Ð¾ÐµÐ½Ð½Ð¾-воздÑÑнÑÑ
Ñил" civil on third sunday in august
+"ÐÐµÐ½Ñ ÑабоÑников гоÑÑдаÑÑÑвенной ÑÑаÑиÑÑики" civil on august 23
+"ÐÐµÐ½Ñ ÑаÑ
ÑеÑа" civil on last sunday in august
+"ÐÐµÐ½Ñ Ð·Ð½Ð°Ð½Ð¸Ð¹" civil on september 1
+"ÐÐµÐ½Ñ Ð±ÐµÐ»Ð¾ÑÑÑÑкой пиÑÑменноÑÑи" civil on first sunday in september
+"ÐÐµÐ½Ñ ÑабоÑников неÑÑÑной, газовой и Ñопливной пÑомÑÑленноÑÑи" civil on first sunday in september
+"ÐÐµÐ½Ñ ÑанкиÑÑов" civil on second sunday in september
+"ÐÐµÐ½Ñ Ð¼Ð¸Ñа" civil on third tuesday in september
+"ÐÐµÐ½Ñ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñек" civil on september 15
+"ÐÐµÐ½Ñ Ñаможенника" civil on september 20
+"ÐÐµÐ½Ñ ÑабоÑников леÑа" civil on third sunday in september
+"ÐÐµÐ½Ñ Ð¼Ð°ÑиноÑÑÑоиÑелÑ" civil on last sunday in september
+"ÐÐµÐ½Ñ Ð¿Ð¾Ð¶Ð¸Ð»ÑÑ
лÑдей" civil on october 1
+"ÐÐµÐ½Ñ Ð°ÑÑ
ивиÑÑа" civil on october 6
+"ÐÐµÐ½Ñ ÑÑиÑелÑ" civil on first sunday in october
+"ÐÐµÐ½Ñ ÑабоÑников кÑлÑÑÑÑÑ" civil on second sunday in october
+"ÐÐµÐ½Ñ Ð¼Ð°ÑеÑи" civil on october 14
+"ÐÐµÐ½Ñ ÑÑандаÑÑизаÑии" civil on october 14
+"ÐÐµÐ½Ñ ÑабоÑников ÑаÑмаÑевÑиÑеÑкой и микÑобиологиÑеÑкой пÑомÑÑленноÑÑи" civil on october 15
+"ÐÐµÐ½Ñ Ð°Ð²ÑомобилиÑÑа и доÑожника" civil on last sunday in october
+"ÐÐµÐ½Ñ ÑабоÑников гÑажданÑкой авиаÑии" civil on first sunday in november
+"ÐÐµÐ½Ñ ÑакеÑнÑÑ
войÑк и аÑÑиллеÑии" civil on november 19
+"ÐÐµÐ½Ñ ÑабоÑников ÑелÑÑкого Ñ
озÑйÑÑва и пеÑеÑабаÑÑваÑÑей пÑомÑÑленноÑÑи агÑопÑомÑÑленного комплекÑа" civil on third sunday in november
+"ÐÐµÐ½Ñ Ð¸Ð½Ð²Ð°Ð»Ð¸Ð´Ð¾Ð² РеÑпÑблики ÐелаÑÑÑÑ" civil on december 3
+"ÐÐµÐ½Ñ ÑÑÑаÑ
овÑÑ
ÑабоÑников" civil on first saturday in december
+"ÐÐµÐ½Ñ ÑÑиÑÑа" civil on first sunday in december
+"ÐÐµÐ½Ñ Ð¿Ñав Ñеловека" civil on december 10
+"ÐÐµÐ½Ñ Ð±ÐµÐ»Ð¾ÑÑÑÑкого кино" civil on december 17
+"ÐÐµÐ½Ñ ÑоÑÑÑдника оÑганов гоÑÑдаÑÑÑвенной безопаÑноÑÑи" civil on december 20
+"ÐÐµÐ½Ñ ÑнеÑгеÑика" civil on december 22
diff --git a/kholidays/holidays/plan2/holiday_ca-qc_fr b/kholidays/holidays/plan2/holiday_ca-qc_fr
index cdf2e0f..fec9c40 100644
--- a/kholidays/holidays/plan2/holiday_ca-qc_fr
+++ b/kholidays/holidays/plan2/holiday_ca-qc_fr
@@ -17,26 +17,26 @@ language "fr"
:description "(please add description in source language) Provincial holiday file for Quebec"
:: Public Holidays
-"Jour de l'An" weekend on january 1
-"Vendredi Saint" weekend on easter minus 2 days
-"Paques" weekend on easter
-"Lundi de Paques" weekend on easter plus 1 day
-"Jour de la Reine (Fete de Dollard)" weekend on monday before may 24
-"Fete de la Confederation" weekend on july 1
-"Jour du Travail" weekend on first monday in september
-"Action de Graces" weekend on second monday in october
-"Jour du Souvenir (Armistice 1918)" weekend on november 11
-"Noel" weekend on december 25
+"Jour de l'An" public on january 1
+"Vendredi Saint" public religious on easter minus 2 days
+"Paques" public religious on easter
+"Lundi de Paques" public on easter plus 1 day
+"Jour de la Reine (Fete de Dollard)" public on monday before may 24
+"Fete de la Confederation" public on july 1
+"Jour du Travail" public on first monday in september
+"Action de Graces" public on second monday in october
+"Jour du Souvenir (Armistice 1918)" public on november 11
+"Noel" public religious on december 25
:: Religious Holidays
:: Financial
:: Cultural
-"St Valentin" on february 14
-"Fetes des Meres" on second sunday in may
-"Fetes des Peres" on third sunday in june
-"St-Jean Baptiste" on june 24
+"St Valentin" cultural on february 14
+"Fetes des Meres" cultural on second sunday in may
+"Fetes des Peres" cultural on third sunday in june
+"St-Jean Baptiste" cultural on june 24
:: School
diff --git a/kholidays/holidays/plan2/holiday_ca_en-gb b/kholidays/holidays/plan2/holiday_ca_en-gb
index 7f034fa..cba14f0 100644
--- a/kholidays/holidays/plan2/holiday_ca_en-gb
+++ b/kholidays/holidays/plan2/holiday_ca_en-gb
@@ -17,28 +17,28 @@ language "en_GB"
description "National holiday file for Canada"
:: Public Holidays
-"New Year's Day" weekend on january 1
-"Good Friday" weekend on easter minus 2 days
-"Easter" weekend on easter
-"Easter Monday" weekend on easter plus 1 day
-"Victoria Day" weekend on monday before may 24
-"Canada Day" weekend on july 1
-"Civic Holiday" weekend on first monday in august
-"Labour Day" weekend on first monday in september
-"Thanksgiving" weekend on second monday in october
-"Remembrance Day" weekend on november 11
-"Christmas" weekend on december 25
-"Boxing Day" weekend on december 26
+"New Year's Day" public on january 1
+"Good Friday" public on easter minus 2 days
+"Easter" public religious on easter
+"Easter Monday" public on easter plus 1 day
+"Victoria Day" public on monday before may 24
+"Canada Day" public on july 1
+"Civic Holiday" public on first monday in august
+"Labour Day" public on first monday in september
+"Thanksgiving" public on second monday in october
+"Remembrance Day" public on november 11
+"Christmas" public religious on december 25
+"Boxing Day" public on december 26
:: Religious
:: Financial
:: Cultural
-"Valentine's Day" on february 14
-"Mother's Day" on second sunday in may
-"Father's Day" on third sunday in june
-"St-Jean Baptiste" on june 24
+"Valentine's Day" cultural on february 14
+"Mother's Day" cultural on second sunday in may
+"Father's Day" cultural on third sunday in june
+"St-Jean Baptiste" cultural on june 24
:: School
diff --git a/kholidays/holidays/plan2/holiday_ch_de b/kholidays/holidays/plan2/holiday_ch_de
index 5b1d766..1a1f623 100644
--- a/kholidays/holidays/plan2/holiday_ch_de
+++ b/kholidays/holidays/plan2/holiday_ch_de
@@ -19,17 +19,17 @@ description "Feiertage in der Schweiz"
:: Public Holidays
-"Neujahr" weekend on january 1
-"Karfreitag" weekend on easter minus 2 days
-"Ostern" weekend on easter
-"Auffahrt" weekend on easter plus 39 days
-"Pfingsten" weekend on easter plus 49 days
-"Pfingstmontag" weekend on easter plus 50 days
-"Bundesfeier" weekend on august 1
-"Bettag" weekend on third sunday in september
-"Bettagmontag" weekend on third sunday in september plus 1 day
-"Weihnachten" weekend on december 25
-"Stefanstag" weekend on december 26
+"Neujahr" public on january 1
+"Karfreitag" public religious on easter minus 2 days
+"Ostern" public religious on easter
+"Auffahrt" public religious on easter plus 39 days
+"Pfingsten" public religious on easter plus 49 days
+"Pfingstmontag" public religious on easter plus 50 days
+"Bundesfeier" public on august 1
+"Bettag" public on third sunday in september
+"Bettagmontag" public on third sunday in september plus 1 day
+"Weihnachten" public religious on december 25
+"Stefanstag" public on december 26
:: Religious Holidays
diff --git a/kholidays/holidays/plan2/holiday_ch_fr b/kholidays/holidays/plan2/holiday_ch_fr
index 2c93fce..12a147a 100644
--- a/kholidays/holidays/plan2/holiday_ch_fr
+++ b/kholidays/holidays/plan2/holiday_ch_fr
@@ -19,19 +19,19 @@ description "Fêtes et jours fériés en Suisse"
:: Public Holidays
-"Nouvel An" weekend on january 1
-"Fête Nationale" weekend on august 1
-"Jeune Fédéral" weekend on third sunday in september
-"Lundi du Jeûne Fédéral" weekend on third sunday in september plus 1 day
+"Nouvel An" public on january 1
+"Fête Nationale" public on august 1
+"Jeune Fédéral" public on third sunday in september
+"Lundi du Jeûne Fédéral" public on third sunday in september plus 1 day
:: Religious Holidays
-"Vendredi Saint" weekend on easter minus 2 days
-"Pâques" weekend on easter
-"Ascension" weekend on easter plus 39 days
-"Pentecôte" weekend on easter plus 49 days
-"Lundi de Pentecôte" weekend on easter plus 50 days
-"Noël" weekend on december 25
-"Saint-Ãtienne" weekend on december 26
+"Vendredi Saint" public religious on easter minus 2 days
+"Pâques" public religious on easter
+"Ascension" public religious on easter plus 39 days
+"Pentecôte" public religious on easter plus 49 days
+"Lundi de Pentecôte" public religious on easter plus 50 days
+"Noël" public religious on december 25
+"Saint-Ãtienne" public religious on december 26
:: Financial
diff --git a/kholidays/holidays/plan2/holiday_ch_it b/kholidays/holidays/plan2/holiday_ch_it
index b227640..605f8e3 100644
--- a/kholidays/holidays/plan2/holiday_ch_it
+++ b/kholidays/holidays/plan2/holiday_ch_it
@@ -19,21 +19,21 @@ language "it"
:: Public Holidays
-"Capo d'anno" weekend on january 1
-"Epifania" weekend on january 6
-"San Giuseppe" weekend on march 19
-"Pasqua" weekend on easter
-"Lunedi di Pasqua" weekend on easter plus 1 day
-"Festa dei lavoratori" weekend on may 1
-"Ascensione" weekend on easter plus 39 days
-"Pentecoste" weekend on easter plus 49 days
-"Lunedi di Pentecoste" weekend on easter plus 50 days
-"Festa nazionale" weekend on august 1
-"Assunzione" weekend on august 15
-"Ognissanti" weekend on november 1
-"Immacolata" weekend on december 8
-"Natale" weekend on december 25
-"Santo Stefano" weekend on december 26
+"Capo d'anno" public on january 1
+"Epifania" public on january 6
+"San Giuseppe" public on march 19
+"Pasqua" public religious on easter
+"Lunedi di Pasqua" public religious on easter plus 1 day
+"Festa dei lavoratori" public on may 1
+"Ascensione" public religious on easter plus 39 days
+"Pentecoste" public religious on easter plus 49 days
+"Lunedi di Pentecoste" public religious on easter plus 50 days
+"Festa nazionale" public on august 1
+"Assunzione" public religious on august 15
+"Ognissanti" public on november 1
+"Immacolata" public religious on december 8
+"Natale" public religious on december 25
+"Santo Stefano" public religious on december 26
:: Religious Holidays
diff --git a/kholidays/holidays/plan2/holiday_cl_es b/kholidays/holidays/plan2/holiday_cl_es
index 95cbcd8..3b5828e 100644
--- a/kholidays/holidays/plan2/holiday_cl_es
+++ b/kholidays/holidays/plan2/holiday_cl_es
@@ -17,37 +17,38 @@ language "es"
:description "(please add description in source language) National holiday file for Chile"
:: Public Holidays
-"Año Nuevo" weekend on january 1
-"Viernes Santo" weekend on easter minus 2
-"Sabado Santo" weekend on easter minus 1
-"DÃa Nacional del Trabajador" weekend on may 1
-"DÃa de las Glorias Navales" weekend on may 21
-"San Pedro y San Pablo" weekend on (([6/29] == [tuesday after ([6/28])] ||
- [6/29] == [wednesday after ([6/28])] ||
- [6/29] == [thursday after ([6/28])] ) ?
- [monday before ([6/29])] :
- (([6/29] == [friday after ([6/28])])? [monday after ([6/29])]:[6/29]))
-"Virgen del Carmen" weekend on july 16
-"Asunción de la Virgen" weekend on august 15
-"DÃa de la Independencia" weekend on september 18
-"DÃa de las Glorias del Ejército" weekend on september 19
-"Sandwich Dieciochero" weekend on (([9/17] == [monday after ([9/16])]) ? ([9/17]) :
- (([9/20] == [friday after ([9/19])]) ? ([9/20]) : noop))
-"DÃa de la Raza" weekend on (([10/12] == [tuesday after ([10/11])] ||
- [10/12] == [wednesday after ([10/11])] ||
- [10/12] == [thursday after ([10/11])] ) ?
+"Año Nuevo" public on january 1
+"Viernes Santo" public religious on easter minus 2
+"Sabado Santo" public religious on easter minus 1
+"DÃa Nacional del Trabajador" public on may 1
+"DÃa de las Glorias Navales" public on may 21
+"San Pedro y San Pablo" public religious on (([6/29] == [tuesday after ([6/28])] ||
+ [6/29] == [wednesday after ([6/28])] ||
+ [6/29] == [thursday after ([6/28])] ) ?
+ [monday before ([6/29])] :
+ (([6/29] == [friday after ([6/28])])?
+ [monday after ([6/29])]:[6/29]))
+"Virgen del Carmen" public religious on july 16
+"Asunción de la Virgen" public religious on august 15
+"DÃa de la Independencia" public on september 18
+"DÃa de las Glorias del Ejército" public on september 19
+"Sandwich Dieciochero" public on (([9/17] == [monday after ([9/16])]) ? ([9/17]) :
+ (([9/20] == [friday after ([9/19])]) ? ([9/20]) : noop))
+"DÃa de la Raza" public on (([10/12] == [tuesday after ([10/11])] ||
+ [10/12] == [wednesday after ([10/11])] ||
+ [10/12] == [thursday after ([10/11])] ) ?
[monday before ([10/12])] :
- (([10/12] == [friday after ([10/11])]) ?
+ (([10/12] == [friday after ([10/11])]) ?
[monday after ([10/12])]:[10/12]))
-"DÃa Nacional de las Iglesias Evangélicas y Protestantes" weekend on (([10/31] == [tuesday after ([10/30])]) ?
- [friday before ([10/31])] :
- (([10/31] == [wednesday after ([10/30])]) ?
- [friday after ([10/31])] : [10/31]))
-"DÃa de Todos los Santos" weekend on november 1
-"Inmaculada Concepción de la Virgen" weekend on december 8
-"Navidad" weekend on december 25
-"Feriado Bancario de Fin de año" weekend on december 31
-"Elecciones Prescidenciales" weekend on 13.12.2009
+"DÃa Nacional de las Iglesias Evangélicas y Protestantes" public religious on (([10/31] == [tuesday after ([10/30])]) ?
+ [friday before ([10/31])] :
+ (([10/31] == [wednesday after ([10/30])]) ?
+ [friday after ([10/31])] : [10/31]))
+"DÃa de Todos los Santos" public religious on november 1
+"Inmaculada Concepción de la Virgen" public religious on december 8
+"Navidad" public religious on december 25
+"Feriado Bancario de Fin de año" public on december 31
+"Elecciones Prescidenciales" public on 13.12.2009
:: Religious
diff --git a/kholidays/holidays/plan2/holiday_cn_zh-cn b/kholidays/holidays/plan2/holiday_cn_zh-cn
index b4d10d9..c6d3621 100644
--- a/kholidays/holidays/plan2/holiday_cn_zh-cn
+++ b/kholidays/holidays/plan2/holiday_cn_zh-cn
@@ -18,11 +18,11 @@ language "zh_CN"
:: Public Holidays
: New Year
-"å
æ¦" weekend on january 1
+"å
æ¦" public on january 1
:Labor Day
-"å³å¨è" weekend on may 1
+"å³å¨è" public on may 1
:National Day
-"å½åºè" weekend on october 1 length 3 days
+"å½åºè" public on october 1 length 3 days
:: Religious
@@ -30,17 +30,17 @@ language "zh_CN"
:: Cultural
:International Women's Day
-"å½é
å¦å¥³è" on march 8
+"å½é
å¦å¥³è" cultural on march 8
:Arbor Day
-"æ¤æ è" on march 12
+"æ¤æ è" cultural on march 12
:Youth Day
-"éå¹´è" on may 4
+"éå¹´è" cultural on may 4
:Children's Day
-"å
ä¸å¿ç«¥è" on june 1
+"å
ä¸å¿ç«¥è" cultural on june 1
:CPC Founding Day
-"建å
è" on july 1
+"建å
è" cultural on july 1
:Army Day
-"建åè" on august 1
+"建åè" cultural on august 1
:: School
@@ -55,26 +55,25 @@ language "zh_CN"
::
:: Lunar calendar based holidays
:: and special free (on weekdays) / work (on weekends) arrangements for 2009
-:: yellow for free days, red for working days
:: Data from http://cnreviews.com/life/living-in-china/china_public_holiday_2009_20081210.html
:: and various en.wikipedia.org pages
::
-"èåæ¥ (day off)" weekend on 2 january 2009
-"å·¥ä½æ¥ (working day)" on 4 january 2009
-"å·¥ä½æ¥ (working day)" on 24 january 2009
-"æ¥è (Chinese New Year / Spring Festival)" weekend on 25 january 2009 length 3 days
-"èåæ¥ (day off)" weekend on 28 january 2009 length 3 days
-"å·¥ä½æ¥ (working day)" on 1 february 2009
-"å
宵è (Lantern Festival)" on 9 february 2009
-"æ¸
æè (Qing Ming Festival / Tomb Sweeping Day)" weekend on 4 april 2009
-"èåæ¥ (day off)" weekend on 6 april 2009
-"端åè (Dragon Boat Festival)" weekend on 28 may 2009
-"èåæ¥ (day off)" weekend on 29 may 2009
-"å·¥ä½æ¥ (working day)" on 31 may 2009
-"ä¸å¤è Lover's Day" on 26 august 2009
-"ä¸å
è Ghost Festival" on 3 september 2009
-"å·¥ä½æ¥ (working day)" on 27 september 2009
-"ä¸ç§è (Mid-Autumn Festival)" weekend on 3 october 2009
-"èåæ¥ (day off)" weekend on 5 october 2009 length 4 days
-"å·¥ä½æ¥ (working day)" on 10 october 2009
-"éé³è (Double Ninth Day / Elders' Day)" on 26 october 2009
+"èåæ¥ (day off)" public on 2 january 2009
+"å·¥ä½æ¥ (working day)" civil on 4 january 2009
+"å·¥ä½æ¥ (working day)" civil on 24 january 2009
+"æ¥è (Chinese New Year / Spring Festival)" public on 25 january 2009 length 3 days
+"èåæ¥ (day off)" public on 28 january 2009 length 3 days
+"å·¥ä½æ¥ (working day)" civil on 1 february 2009
+"å
宵è (Lantern Festival)" cultural on 9 february 2009
+"æ¸
æè (Qing Ming Festival / Tomb Sweeping Day)" public on 4 april 2009
+"èåæ¥ (day off)" public on 6 april 2009
+"端åè (Dragon Boat Festival)" public on 28 may 2009
+"èåæ¥ (day off)" public on 29 may 2009
+"å·¥ä½æ¥ (working day)" civil on 31 may 2009
+"ä¸å¤è Lover's Day" cultural on 26 august 2009
+"ä¸å
è Ghost Festival" cultural on 3 september 2009
+"å·¥ä½æ¥ (working day)" civil on 27 september 2009
+"ä¸ç§è (Mid-Autumn Festival)" public on 3 october 2009
+"èåæ¥ (day off)" public on 5 october 2009 length 4 days
+"å·¥ä½æ¥ (working day)" civil on 10 october 2009
+"éé³è (Double Ninth Day / Elders' Day)" cultural on 26 october 2009
diff --git a/kholidays/holidays/plan2/holiday_co_es b/kholidays/holidays/plan2/holiday_co_es
index 8193b2c..57922cf 100644
--- a/kholidays/holidays/plan2/holiday_co_es
+++ b/kholidays/holidays/plan2/holiday_co_es
@@ -18,28 +18,28 @@ language "es"
:description "(please add description in source language) National holiday file for Colombia"
:: Public Holidays
-"Año nuevo" weekend on january 1
-"EpifanÃa" weekend on monday after january 6
-"San José" weekend on monday after march 19
-"Jueves Santo" weekend on easter minus 3
-"Viernes Santo" weekend on easter minus 2
-"Ascensión de Jesús" weekend on easter plus 43
-"Corpus Christi" weekend on easter plus 64
-"Sagrado Corazón" weekend on easter plus 71
-"DÃa del Trabajo" weekend on may 1
-"San Pedro y San Pablo" weekend on monday after june 29
-"Grito de la Independencia" weekend on july 20
-"Batalla de Boyacá" weekend on august 7
-"Asunción de la Virgen" weekend on monday after august 15
-"DÃa de la Raza" weekend on monday after october 12
-"Todos los Santos" weekend on monday after november 1
-"Independencia de Cartagena" weekend on monday after november 11
-"Inmaculada Concepción" weekend on december 8
-"Navidad" weekend on december 25
+"Año nuevo" public on january 1
+"EpifanÃa" public religious on monday after january 6
+"San José" public religious on monday after march 19
+"Jueves Santo" public religious on easter minus 3
+"Viernes Santo" public religious on easter minus 2
+"Ascensión de Jesús" public religious on easter plus 43
+"Corpus Christi" public religious on easter plus 64
+"Sagrado Corazón" public religious on easter plus 71
+"DÃa del Trabajo" public on may 1
+"San Pedro y San Pablo" public religious on monday after june 29
+"Grito de la Independencia" public on july 20
+"Batalla de Boyacá" public on august 7
+"Asunción de la Virgen" public religious on monday after august 15
+"DÃa de la Raza" public on monday after october 12
+"Todos los Santos" public on monday after november 1
+"Independencia de Cartagena" public on monday after november 11
+"Inmaculada Concepción" public religious on december 8
+"Navidad" public religious on december 25
:: Religious
-"Domingo de Ramos" on easter minus 7
-"Domingo de Pascua" on easter
+"Domingo de Ramos" religious on easter minus 7
+"Domingo de Pascua" religious on easter
:: Financial
diff --git a/kholidays/holidays/plan2/holiday_cr_en b/kholidays/holidays/plan2/holiday_cr_en
index a17a54e..09f7010 100644
--- a/kholidays/holidays/plan2/holiday_cr_en
+++ b/kholidays/holidays/plan2/holiday_cr_en
@@ -19,26 +19,26 @@ language "en"
description "National holiday file for Costa Rica"
:: Public Holidays
-"New Year's Day" weekend on january 1
-"Battle of Rivas Day" weekend on april 11
-"Labor Day" weekend on may 1
-"Guanacaste Day" weekend on july 25
-"Mother's Day" weekend on august 15
-"Independence Day" weekend on september 15
+"New Year's Day" public on january 1
+"Battle of Rivas Day" public on april 11
+"Labor Day" public on may 1
+"Guanacaste Day" public on july 25
+"Mother's Day" public on august 15
+"Independence Day" public on september 15
:: Religious
-"Saint Joseph's Day" on march 19
-"Maundy Thursday" weekend on easter minus 3 days
-"Good Friday" weekend on easter minus 2 days
-"Easter" weekend on easter
-"Virgin of Los Angeles Day" on august 2
-"Christmas Day" weekend on december 25
+"Saint Joseph's Day" religious on march 19
+"Maundy Thursday" public religious on easter minus 3 days
+"Good Friday" public religious on easter minus 2 days
+"Easter" public religious on easter
+"Virgin of Los Angeles Day" religious on august 2
+"Christmas Day" public religious on december 25
:: Financial
:: Cultural
-"Meeting of Cultures Day" on october 12
+"Meeting of Cultures Day" cultural on october 12
:: School
diff --git a/kholidays/holidays/plan2/holiday_cr_es b/kholidays/holidays/plan2/holiday_cr_es
index 4fb97de..5177c67 100644
--- a/kholidays/holidays/plan2/holiday_cr_es
+++ b/kholidays/holidays/plan2/holiday_cr_es
@@ -18,25 +18,25 @@ language "es"
description "DÃas Feriados de Costa Rica"
:: Public Holidays
-"Año Nuevo" weekend on january 1
-"DÃa de Juan SantamarÃa" weekend on april 11
-"DÃa Internacional del Trabajo" weekend on may 1
-"Anexión del Partido de Nicoya a Costa Rica" weekend on july 25
-"DÃa de la Madre" weekend on august 15
-"Conmemoración de la Independencia de Costa Rica" weekend on september 15
+"Año Nuevo" public on january 1
+"DÃa de Juan SantamarÃa" public on april 11
+"DÃa Internacional del Trabajo" public on may 1
+"Anexión del Partido de Nicoya a Costa Rica" public on july 25
+"DÃa de la Madre" public on august 15
+"Conmemoración de la Independencia de Costa Rica" public on september 15
:: Religious
-"DÃa de San José" on march 19
-"Jueves Santo" weekend on easter minus 3 days
-"Viernes Santo" weekend on easter minus 2 days
-"Pascua" weekend on easter
-"dÃa de la Virgen de los Ãngeles" on august 2
-"Navidad" weekend on december 25
+"DÃa de San José" religious on march 19
+"Jueves Santo" public religious on easter minus 3 days
+"Viernes Santo" public religious on easter minus 2 days
+"Pascua" public religious on easter
+"dÃa de la Virgen de los Ãngeles" religious on august 2
+"Navidad" public religious on december 25
:: Financial
:: Cultural
-"DÃa de las Culturas" on october 12
+"DÃa de las Culturas" cultural on october 12
:: School
diff --git a/kholidays/holidays/plan2/holiday_cz_cs b/kholidays/holidays/plan2/holiday_cz_cs
index f1a2d03..3357784 100644
--- a/kholidays/holidays/plan2/holiday_cz_cs
+++ b/kholidays/holidays/plan2/holiday_cz_cs
@@ -17,28 +17,28 @@ language "cs"
:description "(please add description in source language) National holiday file for Czech Republic"
:: Public Holidays
-"Nový rok" weekend on january 1
-"Státnà svátek - Den vzniku samostatného Äeského státu" weekend on january 1
-"Velikonoce" weekend on easter
-"VelikonoÄnà pondÄlÃ" weekend on easter plus 1 days
-"Svátek práce" weekend on may 1
-"Státnà svátek - Den osvobozenÃ" weekend on may 8
-"Státnà svátek - Den slovanských vÄrozvÄstů Cyrila a MetodÄje" weekend on july 5
-"Statnà svátek - Den upálenà mistra Jana Husa" weekend on july 6
-"Státnà svátek - Den Äeské státnosti" weekend on september 28
-"Státnà svátek - Den vzniku samostatného Äeskoslovenska (1918)" weekend on october 28
-"Státnà svátek - Den boje za svobodu a demokracii" weekend on november 17
-"Å tÄdrý den" weekend on december 24
-"1. svátek vánoÄnÃ" weekend on december 25
-"2. svátek vánoÄnÃ" weekend on december 26
+"Nový rok" public on january 1
+"Státnà svátek - Den vzniku samostatného Äeského státu" public on january 1
+"Velikonoce" public religious on easter
+"VelikonoÄnà pondÄlÃ" public religious on easter plus 1 days
+"Svátek práce" public on may 1
+"Státnà svátek - Den osvobozenÃ" public on may 8
+"Státnà svátek - Den slovanských vÄrozvÄstů Cyrila a MetodÄje" public on july 5
+"Statnà svátek - Den upálenà mistra Jana Husa" public on july 6
+"Státnà svátek - Den Äeské státnosti" public on september 28
+"Státnà svátek - Den vzniku samostatného Äeskoslovenska (1918)" public on october 28
+"Státnà svátek - Den boje za svobodu a demokracii" public on november 17
+"Å tÄdrý den" public on december 24
+"1. svátek vánoÄnÃ" public religious on december 25
+"2. svátek vánoÄnÃ" public on december 26
:: Religious
-"Silvestr" on december 31
+"Silvestr" religious on december 31
:: Financial
:: Cultural
-"Mezinárodnà den žen" on march 8
+"Mezinárodnà den žen" cultural on march 8
:: School
diff --git a/kholidays/holidays/plan2/holiday_de-by_de b/kholidays/holidays/plan2/holiday_de-by_de
index 20682df..5dc68f1 100644
--- a/kholidays/holidays/plan2/holiday_de-by_de
+++ b/kholidays/holidays/plan2/holiday_de-by_de
@@ -31,61 +31,61 @@ language "de"
:description "(please add description in source language) National holiday file for Bavaria"
:: Public Holidays
-"Neujahr" weekend on january 1
-"Hl. 3 Könige" weekend on january 6
-"Karfreitag" weekend on easter minus 2 days
-"Ostern" weekend on easter length 2 days
-"Pfingsten" weekend on easter plus 49 days length 2 days
-"Christi Himmelfahrt" weekend on easter plus 39 days
-"Fronleichnam" weekend on easter plus 60 days
-"1. Mai" weekend on may 1
-"Mariä Himmelfahrt" weekend on august 15
-"Einheitstag" weekend on october 3
-"Allerheiligen" weekend on november 1
-"BuÃ- und Bettag" weekend on sunday before december 24 minus 32 days
-"Weihnachten" weekend on december 25 length 2 days
+"Neujahr" public on january 1
+"Hl. 3 Könige" public on january 6
+"Karfreitag" public cultural on easter minus 2 days
+"Ostern" public cultural on easter length 2 days
+"Pfingsten" public cultural on easter plus 49 days length 2 days
+"Christi Himmelfahrt" public cultural on easter plus 39 days
+"Fronleichnam" public cultural on easter plus 60 days
+"1. Mai" public on may 1
+"Mariä Himmelfahrt" public cultural on august 15
+"Einheitstag" public on october 3
+"Allerheiligen" public on november 1
+"BuÃ- und Bettag" public on sunday before december 24 minus 32 days
+"Weihnachten" public cultural on december 25 length 2 days
:: Religious
-"LichtmeÃ" on february 2
-"Rosenmontag" on easter minus 48 days
-"Fasching" on easter minus 47 days
-"Aschermittwoch" on easter minus 46 days
-"1. Fastensonntag" on easter minus 42 days
-"2. Fastensonntag" on easter minus 35 days
-"3. Fastensonntag" on easter minus 28 days
-"Oculi" on easter minus 28 days
-"4. Fastensonntag" on easter minus 21 days
-"5. Fastensonntag" on easter minus 14 days
-"Palmsonntag" on easter minus 7 days
-"Pankraz" on may 11
-"Servaz" on may 12
-"Bonifaz" on may 13
-"Sophie" on may 14
-"Johanni" on june 24
-"Siebenschläfer" on june 27
-"Mariä Geburt" on september 8
-"Martini" on november 11
-"Nikolaus" on december 6
-"Christkönig" on sunday before december 23 minus 28 days
-"1. Advent" on sunday before december 24 minus 21 days
-"2. Advent" on sunday before december 24 minus 14 days
-"3. Advent" on sunday before december 24 minus 7 days
-"4. Advent" on sunday before december 24
-"Hl. Abend" on december 24
-"Silvester" on december 31
+"LichtmeÃ" religious on february 2
+"Rosenmontag" religious on easter minus 48 days
+"Fasching" religious on easter minus 47 days
+"Aschermittwoch" religious on easter minus 46 days
+"1. Fastensonntag" religious on easter minus 42 days
+"2. Fastensonntag" religious on easter minus 35 days
+"3. Fastensonntag" religious on easter minus 28 days
+"Oculi" religious on easter minus 28 days
+"4. Fastensonntag" religious on easter minus 21 days
+"5. Fastensonntag" religious on easter minus 14 days
+"Palmsonntag" religious on easter minus 7 days
+"Pankraz" religious on may 11
+"Servaz" religious on may 12
+"Bonifaz" religious on may 13
+"Sophie" religious on may 14
+"Johanni" religious on june 24
+"Siebenschläfer" religious on june 27
+"Mariä Geburt" religious on september 8
+"Martini" religious on november 11
+"Nikolaus" religious on december 6
+"Christkönig" religious on sunday before december 23 minus 28 days
+"1. Advent" religious on sunday before december 24 minus 21 days
+"2. Advent" religious on sunday before december 24 minus 14 days
+"3. Advent" religious on sunday before december 24 minus 7 days
+"4. Advent" religious on sunday before december 24
+"Hl. Abend" religious on december 24
+"Silvester" religious on december 31
:: Financial
:: Cultural
-"Muttertag" on second sunday in may
-"Karwoche" on easter minus 6 days length 6 days
-"1. Wies'nsonntag" on first sunday in october minus 14 days
+"Muttertag" cultural on second sunday in may
+"Karwoche" cultural on easter minus 6 days length 6 days
+"1. Wies'nsonntag" cultural on first sunday in october minus 14 days
:: School
:: Daylight Saving
-"Sommerzeit" on last sunday in march
-"Winterzeit" on last sunday in october
+"Sommerzeit" seasonal on last sunday in march
+"Winterzeit" seasonal on last sunday in october
:: Seasons
diff --git a/kholidays/holidays/plan2/holiday_de_de b/kholidays/holidays/plan2/holiday_de_de
index 3a0a9c4..048814d 100644
--- a/kholidays/holidays/plan2/holiday_de_de
+++ b/kholidays/holidays/plan2/holiday_de_de
@@ -17,41 +17,41 @@ language "de"
:description "(please add description in source language) National holiday file for Germany"
:: Public Holidays
-"Neujahr" weekend on 1.1.
-"Karfreitag" weekend on easter minus 2 days
-"Ostern" weekend on easter length 2 days
-"Pfingsten" weekend on easter plus 49 days length 2 days
-"Himmelfahrt" weekend on easter plus 39 days
-"1. Mai" weekend on 1.5.
-"Tag d. Einheit" weekend on 3.10.
-"Weihnachten" weekend on 25.12. length 2 days
+"Neujahr" public on 1.1.
+"Karfreitag" public on easter minus 2 days
+"Ostern" public on easter length 2 days
+"Pfingsten" public on easter plus 49 days length 2 days
+"Himmelfahrt" public on easter plus 39 days
+"1. Mai" public on 1.5.
+"Tag d. Einheit" public on 3.10.
+"Weihnachten" public on 25.12. length 2 days
:: Religious
-"Hl. 3 Könige" on january 6
-"Rosenmontag" on easter minus 48 days
-"Fasching" on easter minus 47 days
-"Aschermittwoch" on easter minus 46 days
-"Fronleichnam" on easter plus 60 days
-"Reformationstag" on october 31
-"Allerheiligen" on november 1
-"Buà & Bettag" on sunday before december 24 minus 32 days
-"1. Advent" on sunday before december 24 minus 21 days
-"2. Advent" on sunday before december 24 minus 14 days
-"3. Advent" on sunday before december 24 minus 7 days
-"4. Advent" on sunday before december 24
-"Hl. Abend" on december 24
-"Silvester" on december 31
+"Hl. 3 Könige" religious on january 6
+"Rosenmontag" religious on easter minus 48 days
+"Fasching" religious on easter minus 47 days
+"Aschermittwoch" religious on easter minus 46 days
+"Fronleichnam" religious on easter plus 60 days
+"Reformationstag" religious on october 31
+"Allerheiligen" religious on november 1
+"Buà & Bettag" religious on sunday before december 24 minus 32 days
+"1. Advent" religious on sunday before december 24 minus 21 days
+"2. Advent" religious on sunday before december 24 minus 14 days
+"3. Advent" religious on sunday before december 24 minus 7 days
+"4. Advent" religious on sunday before december 24
+"Hl. Abend" religious on december 24
+"Silvester" religious on december 31
:: Financial
:: Cultural
-"Muttertag" on second sunday in may
+"Muttertag" cultural on second sunday in may
:: School
:: Daylight Saving
-"Sommerzeit" on last sunday in march
-"Winterzeit" on last sunday in october
+"Sommerzeit" seasonal on last sunday in march
+"Winterzeit" seasonal on last sunday in october
:: Seasons
diff --git a/kholidays/holidays/plan2/holiday_dk_da b/kholidays/holidays/plan2/holiday_dk_da
index 5c35ba4..a082c7a 100644
--- a/kholidays/holidays/plan2/holiday_dk_da
+++ b/kholidays/holidays/plan2/holiday_dk_da
@@ -17,69 +17,71 @@ language "da"
:description "(please add description in source language) National holiday file for Denmark"
:: Public Holidays
-"Nytårsdag" weekend on january 1
-"Fastelavn" weekend on easter minus 49 days
-"Palme søndag" weekend on easter minus 7 days
-"Skærtorsdag" weekend on easter minus 3 days
-"Langfredag" weekend on easter minus 2 days
-"PÃ¥skedag" weekend on easter
-"2. PÃ¥skedag" weekend on easter plus 1 day
-"Store bededag" weekend on easter plus 26 days
-"Kristi himmelfart" weekend on easter plus 39 days
-"Pinsedag" weekend on easter plus 49 days
-"2. Pinsedag" weekend on easter plus 50 days
-"Grundlovsdag/Fars dag" weekend on june 5
-"1. Advent" weekend on sunday before december 24 minus 21 days
-"2. Advent" weekend on sunday before december 24 minus 14 days
-"3. Advent" weekend on sunday before december 24 minus 7 days
-"4. Advent" weekend on sunday before december 24
-"Juleaftensdag" weekend on december 24
-"Juledag" weekend on december 25
-"2. Juledag" weekend on december 26
+"Nytårsdag" public on january 1
+"Fastelavn" public religious on easter minus 49 days
+"Palme søndag" public religious on easter minus 7 days
+"Skærtorsdag" public religious on easter minus 3 days
+"Langfredag" public religious on easter minus 2 days
+"PÃ¥skedag" public religious on easter
+"2. PÃ¥skedag" public religious on easter plus 1 day
+"Store bededag" public religious on easter plus 26 days
+"Kristi himmelfart" public religious on easter plus 39 days
+"Pinsedag" public religious on easter plus 49 days
+"2. Pinsedag" public religious on easter plus 50 days
+"Grundlovsdag/Fars dag" public on june 5
+"1. Advent" public religious on sunday before december 24 minus 21 days
+"2. Advent" public religious on sunday before december 24 minus 14 days
+"3. Advent" public religious on sunday before december 24 minus 7 days
+"4. Advent" public religious on sunday before december 24
+"Juleaftensdag" public on december 24
+"Juledag" public religious on december 25
+"2. Juledag" public on december 26
:: Religious
-"Hellig tre Konger" on january 6
-"Kyndelmisse" on february 2
-"Skt. Hans dag" on june 24
-"Mortensdag" on november 11
+"Hellig tre Konger" religious on january 6
+"Kyndelmisse" religious on february 2
+"Skt. Hans dag" religious on june 24
+"Mortensdag" religious on november 11
:: Financial
:: Cultural
-"Mors dag" on second sunday in may
+"Mors dag" cultural on second sunday in may
+
:: Nationale mærkedage
-"Kampen ved Myslunde 1864" on february 2
-"Stormen på København 1659" on february 11
-"Slaget på Reden 1801" on april 2
-"Danmarks Besættelse 1940" on april 9
-"Slaget ved Dybbøl 1864" on april 18
-"Danmarks befrielse 1945" on may 5
-"Kampen ved Helgoland 1864" on may 9
-"Europadagen" on may 9
-"Valdemarsdag/Genforeningsdagen 1920" on june 15
-"Slaget i Køge Bugt" on june 1
-"Slaget ved Fredericia 1849" on july 6
-"Slaget ved Isted 1850" on july 25
-"Stormen på Frederiksstad 1850" on october 4
-"FN-dag" on october 24
+"Kampen ved Myslunde 1864" cultural on february 2
+"Stormen på København 1659" cultural on february 11
+"Slaget på Reden 1801" cultural on april 2
+"Danmarks Besættelse 1940" cultural on april 9
+"Slaget ved Dybbøl 1864" cultural on april 18
+"Danmarks befrielse 1945" cultural on may 5
+"Kampen ved Helgoland 1864" cultural on may 9
+"Europadagen" cultural on may 9
+"Valdemarsdag/Genforeningsdagen 1920" cultural on june 15
+"Slaget i Køge Bugt" cultural on june 1
+"Slaget ved Fredericia 1849" cultural on july 6
+"Slaget ved Isted 1850" cultural on july 25
+"Stormen på Frederiksstad 1850" cultural on october 4
+"FN-dag" cultural on october 24
+
:: Royale fødselsdage
-"Kronprinsesse Mary" on february 5
-"Prinsesse Marie" on february 6
-"Dronning Margrete II" on april 16
-"Prinsesse Isabella" on april 21
-"Prinsesse Benedikte" on april 29
-"Kronprins Frederik" on may 26
-"Prins Joachim" on june 7
-"Prins Henrik" on june 11
-"Prins Felix" on july 22
-"Prins Nikolai" on august 28
-"Prins Christian" on october 15
+"Kronprinsesse Mary" cultural on february 5
+"Prinsesse Marie" cultural on february 6
+"Dronning Margrete II" cultural on april 16
+"Prinsesse Isabella" cultural on april 21
+"Prinsesse Benedikte" cultural on april 29
+"Kronprins Frederik" cultural on may 26
+"Prins Joachim" cultural on june 7
+"Prins Henrik" cultural on june 11
+"Prins Felix" cultural on july 22
+"Prins Nikolai" cultural on august 28
+"Prins Christian" cultural on october 15
:: School
:: Daylight Saving
-"Sommertid begynder" on last sunday in march
-"Sommertid ender" on last sunday in october
+"Sommertid begynder" seasonal on last sunday in march
+"Sommertid ender" seasonal on last sunday in october
:: Seasons
diff --git a/kholidays/holidays/plan2/holiday_dz_ar b/kholidays/holidays/plan2/holiday_dz_ar
index f49e316..9adc864 100644
--- a/kholidays/holidays/plan2/holiday_dz_ar
+++ b/kholidays/holidays/plan2/holiday_dz_ar
@@ -21,26 +21,26 @@ description "National holiday file for Algeria"
:: National Holidays
: New Year's Day
-"رأس اÙسÙØ© اÙÙ
ÙÙادÙØ©" weekend on january 1
+"رأس اÙسÙØ© اÙÙ
ÙÙادÙØ©" public on january 1
: Labour Day
-"عÙد اÙعÙ
اÙ" weekend on may 1
+"عÙد اÙعÙ
اÙ" public on may 1
: Independence Day
-"عÙد اÙإستÙÙاÙ" weekend on july 5
+"عÙد اÙإستÙÙاÙ" public on july 5
: Anniversary of the Revolution
-"Ø°Ùر٠اÙØ«Ùرة" weekend on november 1
+"Ø°Ùر٠اÙØ«Ùرة" public on november 1
:: Religious Holidays
: Islamic New Year
-"رأس اÙسÙØ© اÙÙجرÙØ©" weekend on hijri muharram 1
+"رأس اÙسÙØ© اÙÙجرÙØ©" public religious on hijri muharram 1
: Ashura
-"عاشÙراء" weekend on hijri muharram 10
+"عاشÙراء" public religious on hijri muharram 10
: Birthday of the Prophet Muhammad
-"اÙÙ
ÙÙد اÙÙبÙ٠اÙشرÙÙ" weekend on hijri rabialawal 12
+"اÙÙ
ÙÙد اÙÙبÙ٠اÙشرÙÙ" public religious on hijri rabialawal 12
: Eid el-Fitr (End of Ramadan)
-"عÙد اÙÙطر" weekend on hijri shawwal 1 length 2
+"عÙد اÙÙطر" public religious on hijri shawwal 1 length 2
: Eid al-Adha (End of the Hajj)
-"عÙد اÙأضØÙ" weekend on hijri thualhijjah 10 length 2
+"عÙد اÙأضØÙ" public religious on hijri thualhijjah 10 length 2
:: Financial
@@ -53,12 +53,12 @@ description "National holiday file for Algeria"
:: Seasons
: Spring
-"اÙربÙع" on march 20
+"اÙربÙع" seasonal on march 20
: Summer
-"اÙصÙÙ" on june 21
+"اÙصÙÙ" seasonal on june 21
: Fall
-"اÙخرÙÙ" on september 23
+"اÙخرÙÙ" seasonal on september 23
: Winter
-"اÙشتاء" on december 21
+"اÙشتاء" seasonal on december 21
:: Name Days
diff --git a/kholidays/holidays/plan2/holiday_dz_fr b/kholidays/holidays/plan2/holiday_dz_fr
index 1b9bf85..1325334 100644
--- a/kholidays/holidays/plan2/holiday_dz_fr
+++ b/kholidays/holidays/plan2/holiday_dz_fr
@@ -21,26 +21,26 @@ description "Fêtes et jours fériés en Algérie"
:: National Holidays
: New Year's Day
-"Jour de l'an" weekend on january 1
+"Jour de l'an" public on january 1
: Labour Day
-"Fête du Travail" weekend on may 1
+"Fête du Travail" public on may 1
: Independence Day
-"Fête de lâIndépendance" weekend on july 5
+"Fête de lâIndépendance" public on july 5
: Anniversary of the Revolution
-"Anniversaire de la Révolution" weekend on november 1
+"Anniversaire de la Révolution" public on november 1
:: Religious Holidays
: Islamic New Year
-"Awal muharram" weekend on hijri muharram 1
+"Awal muharram" public religious on hijri muharram 1
: Ashura
-"Achoura" weekend on hijri muharram 10
+"Achoura" public religious on hijri muharram 10
: Birthday of the Prophet Muhammad
-"Mawlid nabaoui" weekend on hijri rabialawal 12
+"Mawlid nabaoui" public religious on hijri rabialawal 12
: Eid el-Fitr (End of Ramadan)
-"Aïd el-Fitr" weekend on hijri shawwal 1 length 2
+"Aïd el-Fitr" public religious on hijri shawwal 1 length 2
: Eid al-Adha (End of the Hajj)
-"Aïd El Adha" weekend on hijri thualhijjah 10 length 2
+"Aïd El Adha" public religious on hijri thualhijjah 10 length 2
:: Financial
@@ -53,12 +53,12 @@ description "Fêtes et jours fériés en Algérie"
:: Seasons
: Spring
-"Printemps" on march 20
+"Printemps" seasonal on march 20
: Summer
-"Ãté" on june 21
+"Ãté" seasonal on june 21
: Fall
-"Automne" on september 23
+"Automne" seasonal on september 23
: Winter
-"Hiver" on december 21
+"Hiver" seasonal on december 21
:: Name Days
diff --git a/kholidays/holidays/plan2/holiday_ee_et b/kholidays/holidays/plan2/holiday_ee_et
index 79e7237..6b275a2 100644
--- a/kholidays/holidays/plan2/holiday_ee_et
+++ b/kholidays/holidays/plan2/holiday_ee_et
@@ -3,55 +3,56 @@
::
:: Language: Estonian
::
-:: Author: Hasso Tepper <hasso at estpak.ee>
-:: Marek Laane <bald at smail.ee>
+:: Author: Hasso Tepper <hasso at estpak.ee>
+:: Marek Laane <bald at smail.ee>
::
-:: Updated: 2012-04-24
+:: Updated: 2012-04-24
::
-:: Source: https://www.riigiteataja.ee/akt/109032011007
+:: Source: https://www.riigiteataja.ee/akt/109032011007
::
:: Metadata
-country "EE"
-language "et"
+country "EE"
+language "et"
:name "Eesti"
-:description "Eesti pühad ja tähtpäevad"
+description "Eesti pühad ja tähtpäevad"
:: Public Holidays
:: Rahvuspüha
-"Iseseisvuspäev" weekend on february 24
+"Iseseisvuspäev" public on february 24
:: Riigipühad
-"Uusaasta" weekend on january 1
-"Suur reede" weekend on easter minus 2 days
-"Ãlestõusmispühade 1. püha" weekend on easter
-"Kevadpüha" weekend on may 1
-"Nelipühade 1. püha" weekend on easter plus 49 days
-"Võidupüha" weekend on june 23
-"Jaanipäev" weekend on june 24
-"Taasiseseisvumispäev" weekend on august 20
-"Jõululaupäev" weekend on december 24
-"Esimene jõulupüha" weekend on december 25
-"Teine jõulupüha" weekend on december 26
+"Uusaasta" public on january 1
+"Suur reede" public religious on easter minus 2 days
+"Ãlestõusmispühade 1. püha" public religious on easter
+"Kevadpüha" public on may 1
+"Nelipühade 1. püha" public on easter plus 49 days
+"Võidupüha" public on june 23
+"Jaanipäev" public on june 24
+"Taasiseseisvumispäev" public on august 20
+"Jõululaupäev" public on december 24
+"Esimene jõulupüha" public religious on december 25
+"Teine jõulupüha" public on december 26
+
:: Riiklikud tähtpäevad
-"Kolmekuningapäev" on january 6
-"Tartu rahulepingu aastapäev" on february 2
-"Emakeelepäev" on march 14
-"Emadepäev" on second sunday in may
-"Eesti lipu päev" on june 4
-"Leinapäev" on june 14
-"Kommunismi ja natsismi ohvrite mälestuspäev" on august 23
-"Vanavanemate päev" on second sunday in september
-"Vastupanuvõitluse päev" on september 22
-"Hõimupäev" on third saturday in october
-"Hingedepäev" on november 2
-"Isadepäev" on second sunday in november
-"Taassünni päev" on november 16
+"Kolmekuningapäev" civil on january 6
+"Tartu rahulepingu aastapäev" civil on february 2
+"Emakeelepäev" civil on march 14
+"Emadepäev" civil on second sunday in may
+"Eesti lipu päev" civil on june 4
+"Leinapäev" civil on june 14
+"Kommunismi ja natsismi ohvrite mälestuspäev" civil on august 23
+"Vanavanemate päev" civil on second sunday in september
+"Vastupanuvõitluse päev" civil on september 22
+"Hõimupäev" civil on third saturday in october
+"Hingedepäev" civil on november 2
+"Isadepäev" civil on second sunday in november
+"Taassünni päev" civil on november 16
:: Religious
-"1. advent" on sunday before december 24 minus 21 days
-"2. advent" on sunday before december 24 minus 14 days
-"3. advent" on sunday before december 24 minus 7 days
-"4. advent" on sunday before december 24
+"1. advent" religious on sunday before december 24 minus 21 days
+"2. advent" religious on sunday before december 24 minus 14 days
+"3. advent" religious on sunday before december 24 minus 7 days
+"4. advent" religious on sunday before december 24
:: Financial
@@ -68,9 +69,9 @@ language "et"
:: To be sorted
:: Lipupäevad
-"Vabadussõjas võidelnute mälestuspäev" on january 3
-"Tartu rahulepingu aastapäev" on february 2
-"Euroopa päev" on may 9
-"Teadmistepäev" on september 1
+"Vabadussõjas võidelnute mälestuspäev" civil on january 3
+"Tartu rahulepingu aastapäev" civil on february 2
+"Euroopa päev" civil on may 9
+"Teadmistepäev" civil on september 1
:: Muud tähtpäevad
-"Naistepäev" on march 8
+"Naistepäev" civil on march 8
diff --git a/kholidays/holidays/plan2/holiday_eg_ar b/kholidays/holidays/plan2/holiday_eg_ar
index d4e0173..718f2ac 100644
--- a/kholidays/holidays/plan2/holiday_eg_ar
+++ b/kholidays/holidays/plan2/holiday_eg_ar
@@ -21,25 +21,25 @@ language "ar"
:: National Holidays
: Coptic Christmas
-"عÙد اÙÙ
ÙÙاد اÙÙ
جÙد" weekend on january 7
+"عÙد اÙÙ
ÙÙاد اÙÙ
جÙد" public religious on january 7
: Sham El Nessim (Spring Festival)
-"Ø´Ù
اÙÙسÙÙ
" weekend on pascha plus 1 days
+"Ø´Ù
اÙÙسÙÙ
" public on pascha plus 1 days
: Sinai Liberation Day
-"عÙد تØرÙر سÙÙاء" weekend on april 25
+"عÙد تØرÙر سÙÙاء" public on april 25
: Labour Day
-"عÙد اÙعÙ
اÙ" weekend on may 1
+"عÙد اÙعÙ
اÙ" public on may 1
: Revolution Day
-"عÙد اÙØ«Ùرة" weekend on july 23
+"عÙد اÙØ«Ùرة" public on july 23
: Armed Forces Day
-"عÙد اÙÙÙات اÙÙ
سÙØØ©" weekend on october 6
+"عÙد اÙÙÙات اÙÙ
سÙØØ©" public on october 6
: Islamic New Year
-"رأس اÙسÙØ© اÙÙجرÙØ©" weekend on hijri muharram 1
+"رأس اÙسÙØ© اÙÙجرÙØ©" public on hijri muharram 1
: Birthday of the Prophet Muhammad (Sunni)
-"اÙÙ
ÙÙد اÙÙبÙ٠اÙشرÙÙ" weekend on hijri rabialawal 12
+"اÙÙ
ÙÙد اÙÙبÙ٠اÙشرÙÙ" public religious on hijri rabialawal 12
: Eid el-Fitr (End of Ramadan)
-"عÙد اÙÙطر" weekend on hijri shawwal 1 length 3
+"عÙد اÙÙطر" public religious on hijri shawwal 1 length 3
: Eid al-Adha (End of the Hajj)
-"عÙد اÙأضØÙ" weekend on hijri thualhijjah 10 length 3
+"عÙد اÙأضØÙ" public religious on hijri thualhijjah 10 length 3
:: Religious Holidays
diff --git a/kholidays/holidays/plan2/holiday_es-ct_ca b/kholidays/holidays/plan2/holiday_es-ct_ca
index e0a0da3..6aa3b6b 100644
--- a/kholidays/holidays/plan2/holiday_es-ct_ca
+++ b/kholidays/holidays/plan2/holiday_es-ct_ca
@@ -17,29 +17,29 @@ language "ca"
:description "(please add description in source language) Regional holiday file for Catalonia"
:: Public Holidays
-"Any nou" weekend on january 1
-"Divendres Sant" weekend on easter minus 2 days
-"Primer de Maig" weekend on may 1
-"Mare de Déu d'Agost" weekend on august 15
-"Pilar" weekend on october 12
-"Tots Sants" weekend on november 1
-"Constitució" weekend on december 6
-"Immaculada" weekend on december 8
-"Nadal" weekend on december 25
+"Any nou" public on january 1
+"Divendres Sant" public religious on easter minus 2 days
+"Primer de Maig" public on may 1
+"Mare de Déu d'Agost" public on august 15
+"Pilar" public on october 12
+"Tots Sants" public religious on november 1
+"Constitució" public on december 6
+"Immaculada" public religious on december 8
+"Nadal" public religious on december 25
:: Religious Holidays
-"Reis" on january 6
-"Sant Jordi" on april 23
-"Dimecres de cendra" on easter minus 46 days
-"Dijous Sant" on easter minus 3 days
-"Pasqua" on easter
-"Dilluns de Pasqua" weekend on easter plus 1 day
-"Pentecosta" on easter plus 49 days
-"Sant Joan" on june 24
-"Sant Esteve" weekend on december 26
+"Reis" religious on january 6
+"Sant Jordi" religious on april 23
+"Dimecres de cendra" religious on easter minus 46 days
+"Dijous Sant" religious on easter minus 3 days
+"Pasqua" religious on easter
+"Dilluns de Pasqua" public religious on easter plus 1 day
+"Pentecosta" religious on easter plus 49 days
+"Sant Joan" religious on june 24
+"Sant Esteve" public religious on december 26
:: Regional Holidays of the autonomous communities
-"Diada Nacional" weekend on september 11
+"Diada Nacional" public on september 11
:: Financial
diff --git a/kholidays/holidays/plan2/holiday_es_es b/kholidays/holidays/plan2/holiday_es_es
index 00e2e9d..9e6aa8e 100644
--- a/kholidays/holidays/plan2/holiday_es_es
+++ b/kholidays/holidays/plan2/holiday_es_es
@@ -20,44 +20,44 @@ language "es"
:description "(please add description in source language) National holiday file for Spain"
:: Public Holidays
-"Año nuevo" weekend on january 1
-"Viernes Santo" weekend on easter minus 2 days
-"Fiesta del Trabajo" weekend on may 1
-"Asunción de la Virgen" weekend on august 15
-"Fiesta Nacional de España" weekend on october 12
-"Todos los Santos" weekend on november 1
-"DÃa de la Constitución Española" weekend on december 6
-"La Inmaculada Concepción" weekend on december 8
-"Natividad del Señor" weekend on december 25
+"Año nuevo" public on january 1
+"Viernes Santo" public religious on easter minus 2 days
+"Fiesta del Trabajo" public on may 1
+"Asunción de la Virgen" public religious on august 15
+"Fiesta Nacional de España" public on october 12
+"Todos los Santos" public religious on november 1
+"DÃa de la Constitución Española" public on december 6
+"La Inmaculada Concepción" public religious on december 8
+"Natividad del Señor" public religious on december 25
:: Regional Holidays of the autonomous communities
-"DÃa de AndalucÃa" on february 28
-"DÃa de las Islas Baleares" on march 1
-"San José" on march 19
-"Sant Jordi" on april 23
-"Fiesta de la Comunidad de Castilla y León" on april 23
-"DÃa de Aragón" on april 23
-"Fiesta de la Comunidad de Madrid" on may 3
-"DÃa de las Letras Gallegas" on may 17
-"DÃa de Canarias" on may 30
-"DÃa de la Región de Castilla y la Mancha" on may 31
-"DÃa de la Región de Murcia" on june 9
-"DÃa de la Rioja" on june 9
-"San Juan" on june 24
-"Santiago Apóstol" on july 25
-"DÃa de las Instituciones" on july 28
-"DÃa de la Ciudad Autónoma de Ceuta" on september 2
-"DÃa de Asturias" on september 8
-"DÃa de Extremadura" on september 8
-"Diada de Cataluña" on september 11
-"Ntra. Sra. de la Bien Aparecida" on september 15
+"DÃa de AndalucÃa" civil on february 28
+"DÃa de las Islas Baleares" civil on march 1
+"San José" civil on march 19
+"Sant Jordi" civil on april 23
+"Fiesta de la Comunidad de Castilla y León" civil on april 23
+"DÃa de Aragón" civil on april 23
+"Fiesta de la Comunidad de Madrid" civil on may 3
+"DÃa de las Letras Gallegas" civil on may 17
+"DÃa de Canarias" civil on may 30
+"DÃa de la Región de Castilla y la Mancha" civil on may 31
+"DÃa de la Región de Murcia" civil on june 9
+"DÃa de la Rioja" civil on june 9
+"San Juan" civil on june 24
+"Santiago Apóstol" civil on july 25
+"DÃa de las Instituciones" civil on july 28
+"DÃa de la Ciudad Autónoma de Ceuta" civil on september 2
+"DÃa de Asturias" civil on september 8
+"DÃa de Extremadura" civil on september 8
+"Diada de Cataluña" civil on september 11
+"Ntra. Sra. de la Bien Aparecida" civil on september 15
:: Religious Holidays
-"EpifanÃa del Señor" weekend on january 6
-"Jueves Santo" on easter minus 3 days
-"Lunes de Pascua" on easter plus 1 day
-"Pentecostes / 2º Pascua" on easter plus 50 days
-"San Esteban" on december 26
+"EpifanÃa del Señor" public religious on january 6
+"Jueves Santo" religious on easter minus 3 days
+"Lunes de Pascua" religious on easter plus 1 day
+"Pentecostes / 2º Pascua" religious on easter plus 50 days
+"San Esteban" religious on december 26
:: Financial
@@ -66,13 +66,13 @@ language "es"
:; School
:: Daylight Saving
-"Adelanto horario" on last sunday in march
-"Retraso horario" on last sunday in october
+"Adelanto horario" seasonal on last sunday in march
+"Retraso horario" seasonal on last sunday in october
:: Seasons
-"Equinoccio e inicio de primavera" on march 21
-"Solsticio e inicio de verano" on june 21
-"Equinoccio e inicio de otoño" on september 23
-"Solsticio e inicio de invierno" on december 21
+"Equinoccio e inicio de primavera" seasonal on march 21
+"Solsticio e inicio de verano" seasonal on june 21
+"Equinoccio e inicio de otoño" seasonal on september 23
+"Solsticio e inicio de invierno" seasonal on december 21
:: Name Days
diff --git a/kholidays/holidays/plan2/holiday_fi_fi b/kholidays/holidays/plan2/holiday_fi_fi
index f7ded93..39e4833 100644
--- a/kholidays/holidays/plan2/holiday_fi_fi
+++ b/kholidays/holidays/plan2/holiday_fi_fi
@@ -21,46 +21,46 @@ description "Suomen valtakunnalliset juhla- ja liputuspäivät"
:: Public Holidays
: New Year's Day
-"Uudenvuodenpäivä" weekend on 1 january
+"Uudenvuodenpäivä" public on 1 january
: Epiphany
-"Loppiainen" weekend on 6 january
+"Loppiainen" public religious on 6 january
: May Day
-"Vappu" weekend on 1 may
+"Vappu" public on 1 may
: Midsummer
-"Juhannuspäivä" weekend on saturday after 20 june
+"Juhannuspäivä" public on saturday after 20 june
: All Saints
-"Pyhäinpäivä" weekend on first saturday in november
+"Pyhäinpäivä" public religious on first saturday in november
: Independence Day
-"Itsenäisyyspäivä" weekend on 6 december
+"Itsenäisyyspäivä" public on 6 december
: Christmas Day
-"Joulupäivä" weekend on 25 december
+"Joulupäivä" public religious on 25 december
: Boxing Day
-"Tapaninpäivä" weekend on 26 december
+"Tapaninpäivä" public on 26 december
: pääsiäisen määräämät - determined by Easter
: Shrove Sunday
-"Laskiaissunnuntai" weekend on easter minus 49 days
+"Laskiaissunnuntai" public religious on easter minus 49 days
: Shrove Tuesday
-"Laskiaistiistai" on easter minus 47 days
+"Laskiaistiistai" religious on easter minus 47 days
: Annunciation
-"Marianpäivä" weekend on ( (( [sunday before ([03/28])] == [easter]) ||
- ( [sunday before ([03/28])] == ([easter] - 7)) ) ?
- ([easter] - 14) :
- [sunday before ([03/28])] )
+"Marianpäivä" public religious on ( (( [sunday before ([03/28])] == [easter]) ||
+ ( [sunday before ([03/28])] == ([easter] - 7)) ) ?
+ ([easter] - 14) :
+ [sunday before ([03/28])] )
: Palm Sunday
-"Palmusunnuntai" weekend on easter minus 7 days
+"Palmusunnuntai" public religious on easter minus 7 days
: Good Friday
-"Pitkäperjantai" weekend on easter minus 2 days
+"Pitkäperjantai" public religious on easter minus 2 days
: Easter Day
-"Pääsiäinen" weekend on easter
+"Pääsiäinen" public religious on easter
: Easter Monday
-"2. pääsiäispäivä" weekend on easter plus 1 days
+"2. pääsiäispäivä" public on easter plus 1 days
: Rogation Sunday
-"Rukoussunnnuntai" weekend on easter plus 35 days
+"Rukoussunnuntai" public religious on easter plus 35 days
: Ascension
-"Helatorstai" weekend on easter plus 39 days
+"Helatorstai" public religious on easter plus 39 days
: : Whitsunday
-"Helluntaipäivä" weekend on easter plus 49 days
+"Helluntaipäivä" public religious on easter plus 49 days
:: Religious Holidays
@@ -70,76 +70,76 @@ description "Suomen valtakunnalliset juhla- ja liputuspäivät"
: on Sundays and don't know if we really want them here
: Sleepyhead Day (not a holiday)
-"Unikeonpäivä" on 27 july
+"Unikeonpäivä" cultural on 27 july
: The First Advent Sunday
-"1. adventtisunnuntai" weekend on sunday before 24 december minus 21 days
+"1. adventtisunnuntai" public religious on sunday before 24 december minus 21 days
: The Second Advent Sunday
-"2. adventtisunnuntai" weekend on sunday before 24 december minus 14 days
+"2. adventtisunnuntai" public religious on sunday before 24 december minus 14 days
: The Third Advent Sunday
-"3. adventtisunnuntai" weekend on sunday before 24 december minus 7 days
+"3. adventtisunnuntai" public religious on sunday before 24 december minus 7 days
: The Fourth Advent Sunday
-"4. adventtisunnuntai" weekend on sunday before 24 december
+"4. adventtisunnuntai" public religious on sunday before 24 december
: Holy Innocents' Day (not a holiday)
-"Viattomien lasten päivä" on 28 december
+"Viattomien lasten päivä" religious on 28 december
:: Financial
: Enterpreneur's Day
-"Yrittäjän päivä" on 5 september
+"Yrittäjän päivä" cultural on 5 september
:: Cultural
: International Holocaust Remembrance Day
-"Vainojen uhrien muistopäivä" on 27 january
+"Vainojen uhrien muistopäivä" cultural on 27 january
: J. L. Runeberg's Day
-"Runebergin päivä" on 5 february
+"Runebergin päivä" cultural on 5 february
: Sami National Day
-"Saamelaisten kansallispäivä" on 6 february
+"Saamelaisten kansallispäivä" cultural on 6 february
: Valentine's Day
-"Ystävänpäivä" on 14 february
+"Ystävänpäivä" cultural on 14 february
: Kalevala's Day, Finnish Culture Day
-"Kalevalan päivä, suomalaisen kulttuurin päivä" on 28 february
+"Kalevalan päivä, suomalaisen kulttuurin päivä" cultural on 28 february
: International Women's Day
-"Naistenpäivä" on 8 march
+"Naistenpäivä" cultural on 8 march
: Minna Canth's Day, The Day of Equality
-"Minna Canthin päivä, tasa-arvon päivä" on 19 march
+"Minna Canthin päivä, tasa-arvon päivä" cultural on 19 march
: Michael Agricola' Day, (Finnish Language Day)
-"Agricolan päivä" on 9 april
+"Agricolan päivä" cultural on 9 april
: National Veteran's Day
-"Veteraanipäivä" on 27 april
+"Veteraanipäivä" cultural on 27 april
: Mother's Day
-"Ãitienpäivä" on second sunday in may
+"Ãitienpäivä" cultural on second sunday in may
: Europe Day
-"Eurooppa-päivä" on 9 may
+"Eurooppa-päivä" cultural on 9 may
: J. V. Snellman's Day, (The Day of Finnishness)
-"Snellmanin päivä" on 12 may
+"Snellmanin päivä" cultural on 12 may
: Remembrance Day
-"Kaatuneitten muistopäivä" on third sunday in may
+"Kaatuneitten muistopäivä" cultural on third sunday in may
: Flag Day of Defence Forces
-"Puolustusvoimien lippujuhla" on 4 june
+"Puolustusvoimien lippujuhla" cultural on 4 june
: Eino Leino's Day, (Summer and Poetry Day)
-"Eino Leinon päivä" on 6 july
+"Eino Leinon päivä" cultural on 6 july
: Aleksis Kivi's Day, (Finnish Literature Day)
-"Aleksis Kiven päivä" on 10 october
+"Aleksis Kiven päivä" cultural on 10 october
: United Nations Day
-"YK:n päivä" on 24 october
+"YK:n päivä" cultural on 24 october
: Finnish Swedish Heritage Day
-"Svenska dagen" on 6 november
+"Svenska dagen" cultural on 6 november
: Father's Day
-"Isänpäivä" on second sunday in november
+"Isänpäivä" cultural on second sunday in november
: Children's Day
-"Lapsen oikeuksien päivä" on 20 november
+"Lapsen oikeuksien päivä" cultural on 20 november
: Jean Sibelius's Day, (Finnish Music Day)
-"Jean Sibeliuksen päivä" on 8 december
+"Jean Sibeliuksen päivä" cultural on 8 december
:: School
:: Daylight Saving
-"Kesäaika alkaa (+1 tunti)" on last sunday in march
-"Kesäaika päättyy (-1 tunti)" on last sunday in october
+"Kesäaika alkaa (+1 tunti)" seasonal on last sunday in march
+"Kesäaika päättyy (-1 tunti)" seasonal on last sunday in october
:: Seasons
@@ -153,4 +153,4 @@ description "Suomen valtakunnalliset juhla- ja liputuspäivät"
:: To be sorted
: Leap Day
-"Karkauspäivä" on 29 february
+"Karkauspäivä" seasonal on 29 february
diff --git a/kholidays/holidays/plan2/holiday_fr_fr b/kholidays/holidays/plan2/holiday_fr_fr
index 92bc238..0bc2b96 100644
--- a/kholidays/holidays/plan2/holiday_fr_fr
+++ b/kholidays/holidays/plan2/holiday_fr_fr
@@ -33,98 +33,98 @@ description "Fêtes et jours fériés en France"
:: Public Holidays - Fêtes civiles et jours fériés
: New Year's Day
-"Jour de l'an" weekend on january 1
+"Jour de l'an" public on january 1
: Easter
-"Pâques" weekend on easter length 2 days
-"Ascension" weekend on easter plus 39 days
-"Pentecôte" weekend on easter plus 49 days length 2 days
+"Pâques" public religious on easter length 2 days
+"Ascension" public religious on easter plus 39 days
+"Pentecôte" public religious on easter plus 49 days length 2 days
: Labor day
-"Fête du Travail" weekend on may 1
+"Fête du Travail" public on may 1
: WW2 armistice
-"Fête de la Victoire" weekend on may 8
+"Fête de la Victoire" public on may 8
: National day
-"Fête nationale" weekend on july 14
+"Fête nationale" public on july 14
: Assumption
-"Assomption" weekend on august 15
+"Assomption" public religious on august 15
: All saints day
-"Toussaint" weekend on november 1
+"Toussaint" public religious on november 1
: WW1 armistice
-"Armistice de 1918" weekend on november 11
+"Armistice de 1918" public on november 11
: Christmas day
-"Noël" weekend on december 25
+"Noël" public religious on december 25
:: Territorial and Regional holidays
: Alsace
: Good Friday
-:"Vendredi saint" weekend on easter minus 2 days
-:"St Ãtienne" weekend on december 26
+:"Vendredi saint" public religious on easter minus 2 days
+:"St Ãtienne" public religious on december 26
: Moselle
: Good Friday
-:"Vendredi saint" weekend on easter minus 2 days
-:"St Ãtienne" weekend on december 26
+:"Vendredi saint" public religious on easter minus 2 days
+:"St Ãtienne" public religious on december 26
:: Religious - Fêtes religieuses
-"Ãpiphanie" on first sunday in january
+"Ãpiphanie" religious on first sunday in january
: Presentation of Jesus at the Temple
-"Chandeleur" on february 2
-"Mardi Gras" on easter minus 47 days
+"Chandeleur" religious on february 2
+"Mardi Gras" religious on easter minus 47 days
: Ash Wednesday
-"Mercredi des Cendres" on easter minus 46 days
+"Mercredi des Cendres" religious on easter minus 46 days
: Good Friday
-"Vendredi saint" on easter minus 2 days
+"Vendredi saint" religious on easter minus 2 days
: Day of the dead
-"Fête des morts" on november 2
-"St Ãtienne" on december 26
+"Fête des morts" religious on november 2
+"St Ãtienne" religious on december 26
:: Financial
:: Cultural - Fêtes civiles non fériées
: Valentine's day
-"Fête des amoureux" on february 14
+"Fête des amoureux" cultural on february 14
: Grandmothers' day
-"Fête des grands-mères" on first sunday in march
+"Fête des grands-mères" cultural on first sunday in march
: Remembrance of the Deportees
-"Souvenir des Déportés" on last sunday in april
+"Souvenir des Déportés" commemorative on last sunday in april
: Europe day
-"Journée de l'Europe" on may 9
+"Journée de l'Europe" cultural on may 9
: Remembrance of slavery
-"Mémoire de l'esclavage" on may 10
+"Mémoire de l'esclavage" commemorative on may 10
: Neighbors' day
-"Fête des voisins" on last tuesday in may
+"Fête des voisins" cultural on last tuesday in may
: Mothers' day, move if clashes with Pentecost
-"Fête des mères" ( ( [last sunday in may] == ([easter] + 49 days) ) ? [first sunday in june] : [last sunday in may] )
+"Fête des mères" cultural on ( ( [last sunday in may] == ([easter] + 49 days) ) ? [first sunday in june] : [last sunday in may] )
: or 'first sunday in june' if same day as Pentecôte
: Fathers' day
-"Fête des pères" on third sunday in june
+"Fête des pères" cultural on third sunday in june
: Fatalities in the 1st Indochina war
-"Morts en Indochine" on june 8
+"Morts en Indochine" commemorative on june 8
: Music day
-"Fête de la Musique" on june 21
+"Fête de la Musique" cultural on june 21
: St John
-"Fête de la Saint Jean" on june 24
+"Fête de la Saint Jean" cultural on june 24
: Homage to the Harkis
-"Hommage aux Harkis" on september 25
+"Hommage aux Harkis" commemorative on september 25
: Fatalities in the Algerian war
-"Morts en Algérie" on december 5
+"Morts en Algérie" commemorative on december 5
:: School
:: Daylight Saving
: summer
-"Heure d'été" on last sunday in march
+"Heure d'été" seasonal on last sunday in march
: winter
-"Heure d'hiver" on last sunday in october
+"Heure d'hiver" seasonal on last sunday in october
:: Seasons
: Spring
-"Printemps" on march 20
+"Printemps" seasonal on march 20
: Summer
-"Ãté" on june 21
+"Ãté" seasonal on june 21
: Fall
-"Automne" on september 23
+"Automne" seasonal on september 23
: Winter
-"Hiver" on december 21
+"Hiver" seasonal on december 21
:: Name Days
diff --git a/kholidays/holidays/plan2/holiday_gb-eaw_en-gb b/kholidays/holidays/plan2/holiday_gb-eaw_en-gb
index 0ceef22..96e7c1e 100644
--- a/kholidays/holidays/plan2/holiday_gb-eaw_en-gb
+++ b/kholidays/holidays/plan2/holiday_gb-eaw_en-gb
@@ -19,23 +19,23 @@ language "en_GB"
description "National holiday file for England and Wales"
:: Public Holidays
-"New Years Day" weekend on january 1
-"New Years Day Bank Holiday" weekend on ( (([january 1] == [saturday after ([january 1])]) || ([january 1] == [sunday after ([january 1])])) ?
+"New Years Day" public on january 1
+"New Years Day Bank Holiday" public on ( (([january 1] == [saturday after ([january 1])]) || ([january 1] == [sunday after ([january 1])])) ?
[monday after ([january 1])] :
noop )
-"Good Friday" weekend on easter minus 2
-"Easter Monday" weekend on easter plus 1
-"Royal Wedding" weekend on 29.4.2011
-"Early May Bank Holiday" weekend on first monday in may
-"Spring Bank Holiday" weekend on ((year == 2012) ? [june 4] : [last monday in may])
-"Diamond Jubilee Holiday" weekend on 5.6.2012
-"Summer Bank Holiday" weekend on last monday in august
-"Christmas Day" weekend on december 25
-"Christmas Day Bank Holiday" weekend on ( (([december 25] == [saturday after ([december 25])]) || ([december 25] == [sunday after ([december 25])])) ?
+"Good Friday" public religious on easter minus 2
+"Easter Monday" public on easter plus 1
+"Royal Wedding" public on 29.4.2011
+"Early May Bank Holiday" public on first monday in may
+"Spring Bank Holiday" public on ((year == 2012) ? [june 4] : [last monday in may])
+"Diamond Jubilee Holiday" public on 5.6.2012
+"Summer Bank Holiday" public on last monday in august
+"Christmas Day" public religious on december 25
+"Christmas Day Bank Holiday" public on ( (([december 25] == [saturday after ([december 25])]) || ([december 25] == [sunday after ([december 25])])) ?
[monday after ([december 25])] :
noop )
-"Boxing Day" weekend on december 26
-"Boxing Day Bank Holiday" weekend on ( ([december 26] == [saturday after ([december 25])] ) ?
+"Boxing Day" public on december 26
+"Boxing Day Bank Holiday" public on ( ([december 26] == [saturday after ([december 25])] ) ?
[monday after ([december 25])] :
(([december 26] == [sunday after ([december 25])] || [december 26] == [monday after ([december 25])]) ?
[tuesday after ([december 25])] :
@@ -50,8 +50,8 @@ description "National holiday file for England and Wales"
:: School
:: Daylight Saving
-"British Summer Time starts" on last sunday in march
-"British Summer Time ends" on last sunday in october
+"British Summer Time starts" seasonal on last sunday in march
+"British Summer Time ends" seasonal on last sunday in october
:: Seasons
diff --git a/kholidays/holidays/plan2/holiday_gb-nir_en-gb b/kholidays/holidays/plan2/holiday_gb-nir_en-gb
index 200407b..a8b575b 100644
--- a/kholidays/holidays/plan2/holiday_gb-nir_en-gb
+++ b/kholidays/holidays/plan2/holiday_gb-nir_en-gb
@@ -19,35 +19,35 @@ language "en_GB"
description "National holiday file for Northern Ireland"
:: Public Holidays
-"New Years Day" weekend on january 1
-"New Years Day Bank Holiday" weekend on ( (([january 1] == [saturday after ([january 1])]) ||
+"New Years Day" public on january 1
+"New Years Day Bank Holiday" public on ( (([january 1] == [saturday after ([january 1])]) ||
([january 1] == [sunday after ([january 1])])) ?
[monday after ([january 1])] :
noop )
-"St Patrick's Day" weekend on march 17
-"St Patrick's Day Bank Holiday" weekend on ( (([march 17] == [saturday after ([march 17])]) ||
+"St Patrick's Day" public on march 17
+"St Patrick's Day Bank Holiday" public on ( (([march 17] == [saturday after ([march 17])]) ||
([march 17] == [sunday after ([march 17])])) ?
[monday after ([march 17])] :
noop )
-"Good Friday" weekend on easter minus 2
-"Easter Monday" weekend on easter plus 1
-"Royal Wedding" weekend on 29.4.2011
-"Early May Bank Holiday" weekend on first monday in may
-"Spring Bank Holiday" weekend on ((year == 2012) ? [june 4] : [last monday in may])
-"Diamond Jubilee Holiday" weekend on 5.6.2012
-"Battle of the Boyne (Orangemen's Day)" weekend on july 12
-"Battle of the Boyne Bank Holiday" weekend on ( (([july 12] == [saturday after ([july 12])]) ||
+"Good Friday" public religious on easter minus 2
+"Easter Monday" public on easter plus 1
+"Royal Wedding" public on 29.4.2011
+"Early May Bank Holiday" public on first monday in may
+"Spring Bank Holiday" public on ((year == 2012) ? [june 4] : [last monday in may])
+"Diamond Jubilee Holiday" public on 5.6.2012
+"Battle of the Boyne (Orangemen's Day)" public on july 12
+"Battle of the Boyne Bank Holiday" public on ( (([july 12] == [saturday after ([july 12])]) ||
([july 12] == [sunday after ([july 12])])) ?
[monday after ([july 12])] :
noop )
-"Summer Bank Holiday" weekend on last monday in august
-"Christmas Day" weekend on december 25
-"Christmas Day Bank Holiday" weekend on ( (([december 25] == [saturday after ([december 25])]) ||
+"Summer Bank Holiday" public on last monday in august
+"Christmas Day" public religious on december 25
+"Christmas Day Bank Holiday" public on ( (([december 25] == [saturday after ([december 25])]) ||
([december 25] == [sunday after ([december 25])])) ?
[monday after ([december 25])] :
noop )
-"Boxing Day" weekend on december 26
-"Boxing Day Bank Holiday" weekend on ( ([december 26] == [saturday after ([december 25])] ) ?
+"Boxing Day" public on december 26
+"Boxing Day Bank Holiday" public on ( ([december 26] == [saturday after ([december 25])] ) ?
[monday after ([december 25])] :
(([december 26] == [sunday after ([december 25])] ||
[december 26] == [monday after ([december 25])]) ?
@@ -63,8 +63,8 @@ description "National holiday file for Northern Ireland"
:: School
:: Daylight Saving
-"British Summer Time starts" on last sunday in march
-"British Summer Time ends" on last sunday in october
+"British Summer Time starts" seasonal on last sunday in march
+"British Summer Time ends" seasonal on last sunday in october
:: Seasons
diff --git a/kholidays/holidays/plan2/holiday_gb-sct_en-gb b/kholidays/holidays/plan2/holiday_gb-sct_en-gb
index c4be874..903ef21 100644
--- a/kholidays/holidays/plan2/holiday_gb-sct_en-gb
+++ b/kholidays/holidays/plan2/holiday_gb-sct_en-gb
@@ -28,28 +28,28 @@ language "en_GB"
description "National holiday file for Scotland"
:: Public Holidays
-"New Year's Day" weekend on january 1
-"New Year's Day Substitute Holiday" weekend on ( (([january 1] == [saturday after ([january 1])]) ||
+"New Year's Day" public on january 1
+"New Year's Day Substitute Holiday" public on ( (([january 1] == [saturday after ([january 1])]) ||
([january 1] == [sunday after ([january 1])])) ?
[monday after ([january 1])] :
noop )
-"2nd January" weekend on january 2
-"2nd January Substitute Holiday" weekend on ( ([january 2] == [saturday after ([january 1])] ) ?
+"2nd January" public on january 2
+"2nd January Substitute Holiday" public on ( ([january 2] == [saturday after ([january 1])] ) ?
[monday after ([january 1])] :
((([january 2] == [sunday after ([january 1])]) ||
([january 2] == [monday after ([january 1])])) ?
[tuesday after ([january 1])] :
noop ) )
-"Royal Wedding" weekend on 29.4.2011
-"Early May Bank Holiday" weekend on first monday in may
-"Diamond Jubilee Holiday" weekend on 5.6.2012
-"Christmas Day" weekend on december 25
-"Christmas Day Substitute Holiday" weekend on ( (([december 25] == [saturday after ([december 25])]) ||
+"Royal Wedding" public on 29.4.2011
+"Early May Bank Holiday" public on first monday in may
+"Diamond Jubilee Holiday" public on 5.6.2012
+"Christmas Day" public religious on december 25
+"Christmas Day Substitute Holiday" public on ( (([december 25] == [saturday after ([december 25])]) ||
([december 25] == [sunday after ([december 25])])) ?
[monday after ([december 25])] :
noop )
-"Boxing Day" weekend on december 26
-"Boxing Day Substitute Holiday" weekend on ( ([december 26] == [saturday after ([december 25])] ) ?
+"Boxing Day" public on december 26
+"Boxing Day Substitute Holiday" public on ( ([december 26] == [saturday after ([december 25])] ) ?
[monday after ([december 25])] :
(([december 26] == [sunday after ([december 25])] ||
([december 26] == [monday after ([december 25])])) ?
@@ -59,21 +59,21 @@ description "National holiday file for Scotland"
:: Religious
:: Financial
-"Good Friday Bank Holiday" on easter minus 2
-"Spring Bank Holiday" on ((year == 2012) ? [june 4] : [last monday in may])
-"Summer Bank Holiday" on first monday in august
-"St Andrew's Day Bank Holiday" on ( (([november 30] == [saturday after ([november 30])]) ||
- ([november 30] == [sunday after ([november 30])])) ?
- [monday after ([november 30])] :
- ([november 30]) )
+"Good Friday Bank Holiday" religious on easter minus 2
+"Spring Bank Holiday" civil on ((year == 2012) ? [june 4] : [last monday in may])
+"Summer Bank Holiday" civil on first monday in august
+"St Andrew's Day Bank Holiday" civil on ( (([november 30] == [saturday after ([november 30])]) ||
+ ([november 30] == [sunday after ([november 30])])) ?
+ [monday after ([november 30])] :
+ ([november 30]) )
:: Cultural
:: School
:: Daylight Saving
-"British Summer Time starts" on last sunday in march
-"British Summer Time ends" on last sunday in october
+"British Summer Time starts" seasonal on last sunday in march
+"British Summer Time ends" seasonal on last sunday in october
:: Seasons
diff --git a/kholidays/holidays/plan2/holiday_gf_fr b/kholidays/holidays/plan2/holiday_gf_fr
index ed2e4dc..96de2d5 100644
--- a/kholidays/holidays/plan2/holiday_gf_fr
+++ b/kholidays/holidays/plan2/holiday_gf_fr
@@ -33,90 +33,90 @@ description "Fêtes et jours fériés en Guyane"
:: Public Holidays - Fêtes civiles et jours fériés
: New Year's Day
-"Jour de l'an" weekend on january 1
+"Jour de l'an" public on january 1
: Easter
-"Pâques" weekend on easter length 2 days
-"Ascension" weekend on easter plus 39 days
-"Pentecôte" weekend on easter plus 49 days length 2 days
+"Pâques" public religious on easter length 2 days
+"Ascension" public religious on easter plus 39 days
+"Pentecôte" public religious on easter plus 49 days length 2 days
: Labor day
-"Fête du Travail" weekend on may 1
+"Fête du Travail" public on may 1
: WW2 armistice
-"Fête de la Victoire" weekend on may 8
+"Fête de la Victoire" public on may 8
: National day
-"Fête nationale" weekend on july 14
+"Fête nationale" public on july 14
: Assumption
-"Assomption" weekend on august 15
+"Assomption" public on august 15
: All saints day
-"Toussaint" weekend on november 1
+"Toussaint" public on november 1
: WW1 armistice
-"Armistice de 1918" weekend on november 11
+"Armistice de 1918" public on november 11
: Christmas day
-"Noël" weekend on december 25
+"Noël" public religious on december 25
:: Territorial and Regional holidays
: Abolition of Slavery
-"Abolition de l'esclavage" weekend on june 10
+"Abolition de l'esclavage" public on june 10
:: Religious - Fêtes religieuses
-"Ãpiphanie" on first sunday in january
+"Ãpiphanie" religious on first sunday in january
: Presentation of Jesus at the Temple
-"Chandeleur" on february 2
-"Mardi Gras" on easter minus 47 days
+"Chandeleur" religious on february 2
+"Mardi Gras" religious on easter minus 47 days
: Ash Wednesday
-"Mercredi des Cendres" on easter minus 46 days
+"Mercredi des Cendres" religious on easter minus 46 days
: Good Friday
-"Vendredi saint" on easter minus 2 days
+"Vendredi saint" religious on easter minus 2 days
: Day of the dead
-"Fête des morts" on november 2
-"St Ãtienne" on december 26
+"Fête des morts" religious on november 2
+"St Ãtienne" religious on december 26
:: Financial
:: Cultural - Fêtes civiles non fériées
: Valentine's day
-"Fête des amoureux" on february 14
+"Fête des amoureux" cultural on february 14
: Grandmothers' day
-"Fête des grands-mères" on first sunday in march
+"Fête des grands-mères" cultural on first sunday in march
: Remembrance of the Deportees
-"Souvenir des Déportés" on last sunday in april
+"Souvenir des Déportés" commemorative on last sunday in april
: Europe day
-"Journée de l'Europe" on may 9
+"Journée de l'Europe" cultural on may 9
: Remembrance of slavery
-"Mémoire de l'esclavage" on may 10
+"Mémoire de l'esclavage" commemorative on may 10
: Neighbors' day
-"Fête des voisins" on last tuesday in may
+"Fête des voisins" cultural on last tuesday in may
: Mothers' day, move if clashes with Pentecost
-"Fête des mères" ( ( [last sunday in may] == ([easter] + 49 days) ) ? [first sunday in june] : [last sunday in may] )
+"Fête des mères" cultural on ( ( [last sunday in may] == ([easter] + 49 days) ) ? [first sunday in june] : [last sunday in may] )
: or 'first sunday in june' if same day as Pentecôte
: Fathers' day
-"Fête des pères" on third sunday in june
+"Fête des pères" cultural on third sunday in june
: Fatalities in the 1st Indochina war
-"Morts en Indochine" on june 8
+"Morts en Indochine" commemorative on june 8
: Music day
-"Fête de la Musique" on june 21
+"Fête de la Musique" cultural on june 21
: St John
-"Fête de la Saint Jean" on june 24
+"Fête de la Saint Jean" cultural on june 24
: Homage to the Harkis
-"Hommage aux Harkis" on september 25
+"Hommage aux Harkis" commemorative on september 25
: Fatalities in the Algerian war
-"Morts en Algérie" on december 5
+"Morts en Algérie" commemorative on december 5
:: School
:: Daylight Saving
: summer
-"Heure d'été" on last sunday in march
+"Heure d'été" seasonal on last sunday in march
: winter
-"Heure d'hiver" on last sunday in october
+"Heure d'hiver" seasonal on last sunday in october
:: Seasons
: Spring
-"Printemps" on march 20
+"Printemps" seasonal on march 20
: Summer
-"Ãté" on june 21
+"Ãté" seasonal on june 21
: Fall
-"Automne" on september 23
+"Automne" seasonal on september 23
: Winter
-"Hiver" on december 21
+"Hiver" seasonal on december 21
:: Name Days
diff --git a/kholidays/holidays/plan2/holiday_gp_fr b/kholidays/holidays/plan2/holiday_gp_fr
index 4e8c6cd..0029a24 100644
--- a/kholidays/holidays/plan2/holiday_gp_fr
+++ b/kholidays/holidays/plan2/holiday_gp_fr
@@ -33,91 +33,91 @@ description "Fêtes et jours fériés en Guadeloupe"
:: Public Holidays - Fêtes civiles et jours fériés
: New Year's Day
-"Jour de l'an" weekend on january 1
+"Jour de l'an" public on january 1
: Easter
-"Pâques" weekend on easter length 2 days
-"Ascension" weekend on easter plus 39 days
-"Pentecôte" weekend on easter plus 49 days length 2 days
+"Pâques" public religious on easter length 2 days
+"Ascension" public religious on easter plus 39 days
+"Pentecôte" public religious on easter plus 49 days length 2 days
: Labor day
-"Fête du Travail" weekend on may 1
+"Fête du Travail" public on may 1
: WW2 armistice
-"Fête de la Victoire" weekend on may 8
+"Fête de la Victoire" public on may 8
: National day
-"Fête nationale" weekend on july 14
+"Fête nationale" public on july 14
: Assumption
-"Assomption" weekend on august 15
+"Assomption" public on august 15
: All saints day
-"Toussaint" weekend on november 1
+"Toussaint" public on november 1
: WW1 armistice
-"Armistice de 1918" weekend on november 11
+"Armistice de 1918" public on november 11
: Christmas day
-"Noël" weekend on december 25
+"Noël" public religious on december 25
:: Territorial and Regional holidays
: Good Friday
-"Vendredi saint" weekend on easter minus 2 days
+"Vendredi saint" public on easter minus 2 days
: Abolition of Slavery
-"Abolition de l'esclavage" weekend on may 27
-"Fête Victor Schoelcher" weekend on july 21
-"St Ãtienne" weekend on december 26
+"Abolition de l'esclavage" public on may 27
+"Fête Victor Schoelcher" public on july 21
+"St Ãtienne" public on december 26
:: Religious - Fêtes religieuses
-"Ãpiphanie" on first sunday in january
+"Ãpiphanie" religious on first sunday in january
: Presentation of Jesus at the Temple
-"Chandeleur" on february 2
-"Mardi Gras" on easter minus 47 days
+"Chandeleur" religious on february 2
+"Mardi Gras" religious on easter minus 47 days
: Ash Wednesday
-"Mercredi des Cendres" on easter minus 46 days
+"Mercredi des Cendres" religious on easter minus 46 days
: Day of the dead
-"Fête des morts" on november 2
+"Fête des morts" religious on november 2
:: Financial
:: Cultural - Fêtes civiles non fériées
: Valentine's day
-"Fête des amoureux" on february 14
+"Fête des amoureux" cultural on february 14
: Grandmothers' day
-"Fête des grands-mères" on first sunday in march
+"Fête des grands-mères" cultural on first sunday in march
: Remembrance of the Deportees
-"Souvenir des Déportés" on last sunday in april
+"Souvenir des Déportés" commemorative on last sunday in april
: Europe day
-"Journée de l'Europe" on may 9
+"Journée de l'Europe" cultural on may 9
: Remembrance of slavery
-"Mémoire de l'esclavage" on may 10
+"Mémoire de l'esclavage" commemorative on may 10
: Neighbors' day
-"Fête des voisins" on last tuesday in may
+"Fête des voisins" cultural on last tuesday in may
: Mothers' day, move if clashes with Pentecost
-"Fête des mères" ( ( [last sunday in may] == ([easter] + 49 days) ) ? [first sunday in june] : [last sunday in may] )
+"Fête des mères" cultural on ( ( [last sunday in may] == ([easter] + 49 days) ) ? [first sunday in june] : [last sunday in may] )
: or 'first sunday in june' if same day as Pentecôte
: Fathers' day
-"Fête des pères" on third sunday in june
+"Fête des pères" cultural on third sunday in june
: Fatalities in the 1st Indochina war
-"Morts en Indochine" on june 8
+"Morts en Indochine" commemorative on june 8
: Music day
-"Fête de la Musique" on june 21
+"Fête de la Musique" cultural on june 21
: St John
-"Fête de la Saint Jean" on june 24
+"Fête de la Saint Jean" cultural on june 24
: Homage to the Harkis
-"Hommage aux Harkis" on september 25
+"Hommage aux Harkis" commemorative on september 25
: Fatalities in the Algerian war
-"Morts en Algérie" on december 5
+"Morts en Algérie" commemorative on december 5
:: School
:: Daylight Saving
: summer
-"Heure d'été" on last sunday in march
+"Heure d'été" seasonal on last sunday in march
: winter
-"Heure d'hiver" on last sunday in october
+"Heure d'hiver" seasonal on last sunday in october
:: Seasons
: Spring
-"Printemps" on march 20
+"Printemps" seasonal on march 20
: Summer
-"Ãté" on june 21
+"Ãté" seasonal on june 21
: Fall
-"Automne" on september 23
+"Automne" seasonal on september 23
: Winter
-"Hiver" on december 21
+"Hiver" seasonal on december 21
:: Name Days
diff --git a/kholidays/holidays/plan2/holiday_gr_el b/kholidays/holidays/plan2/holiday_gr_el
index 36c4bb4..f03fd19 100644
--- a/kholidays/holidays/plan2/holiday_gr_el
+++ b/kholidays/holidays/plan2/holiday_gr_el
@@ -15,24 +15,24 @@
country "GR"
language "el"
: "National holiday file for Greece"
-:description "ÎοÏÏÎÏ ÎºÎ±Î¹ αÏÎ³Î¯ÎµÏ ÏÏην Îλλάδα"
+description "ÎοÏÏÎÏ ÎºÎ±Î¹ αÏÎ³Î¯ÎµÏ ÏÏην Îλλάδα"
:: Public Holidays - ÎημÏÏÎ¹ÎµÏ Î±ÏγίεÏ
-"Î ÏÏÏοÏÏονιά" weekend on january 1
-"Îγια ÎεοÏάνεια" weekend on january 6
-"Î ÏÏÏομαγιά" weekend on may 1
-"ÎÏÎÏÎµÎ¹Î¿Ï ÏοÏ
ÎΧÎ" weekend on october 28
-"ÎÏÎÏÎµÎ¹Î¿Ï ÏÎ·Ï ÎµÏανάÏÏαÏÎ·Ï ÏοÏ
1821" weekend on march 25
-"ÎαθαÏή ÎεÏ
ÏÎÏα" weekend on pascha minus 48 days
-"Îεγάλη ΠαÏαÏκεÏ
ή" weekend on pascha minus 2 days
-"Îεγάλο ΣάββαÏο" weekend on pascha minus 1 days
-"Το Îγιον ΠάÏÏα" weekend on pascha
-"ÎεÏ
ÏÎÏα ÏοÏ
ΠάÏÏα" weekend on pascha plus 1 days
-"ÎγίοÏ
ΠνεÏμαÏοÏ" weekend on pascha plus 50 days
-"ÎοίμηÏη ÏÎ·Ï ÎεοÏÏκοÏ
" weekend on august 15
-"ÎαÏία, ÎάÏιοÏ, ΠαναγιÏÏηÏ, ΠαναγιÏÏα, ÎÎÏÏοινα, ÎεοÏÏκηÏ" weekend on august 15
-"ΧÏιÏÏοÏγεννα" weekend on december 25
-"ΣÏÎ½Î±Î¾Î¹Ï ÎεοÏÏκοÏ
" weekend on december 26
+"Î ÏÏÏοÏÏονιά" public on january 1
+"Îγια ÎεοÏάνεια" public on january 6
+"Î ÏÏÏομαγιά" public on may 1
+"ÎÏÎÏÎµÎ¹Î¿Ï ÏοÏ
ÎΧÎ" public on october 28
+"ÎÏÎÏÎµÎ¹Î¿Ï ÏÎ·Ï ÎµÏανάÏÏαÏÎ·Ï ÏοÏ
1821" public on march 25
+"ÎαθαÏή ÎεÏ
ÏÎÏα" public religious on pascha minus 48 days
+"Îεγάλη ΠαÏαÏκεÏ
ή" public religious on pascha minus 2 days
+"Îεγάλο ΣάββαÏο" public religious on pascha minus 1 days
+"Το Îγιον ΠάÏÏα" public religious on pascha
+"ÎεÏ
ÏÎÏα ÏοÏ
ΠάÏÏα" public on pascha plus 1 days
+"ÎγίοÏ
ΠνεÏμαÏοÏ" public religious on pascha plus 50 days
+"ÎοίμηÏη ÏÎ·Ï ÎεοÏÏκοÏ
" public on august 15
+"ÎαÏία, ÎάÏιοÏ, ΠαναγιÏÏηÏ, ΠαναγιÏÏα, ÎÎÏÏοινα, ÎεοÏÏκηÏ" public on august 15
+"ΧÏιÏÏοÏγεννα" public religious on december 25
+"ΣÏÎ½Î±Î¾Î¹Ï ÎεοÏÏκοÏ
" public on december 26
:: Religious - ÎÏηÏκεÏ
ÏικÎÏ
@@ -40,298 +40,41 @@ language "el"
:: Cultural
: Mothers' day,
-"ÎιοÏÏή ÏÎ·Ï Î¼Î·ÏÎÏαÏ" on second sunday in may
+"ÎιοÏÏή ÏÎ·Ï Î¼Î·ÏÎÏαÏ" cultural on second sunday in may
: Fathers' day
-"ÎιοÏÏή ÏοÏ
ÏαÏÎÏα" on third sunday in june
+"ÎιοÏÏή ÏοÏ
ÏαÏÎÏα" cultural on third sunday in june
:: School - ΣÏολικÎÏ ÎÏγίεÏ
-"ÎξÎγεÏÏη ÏοÏ
ΠολÏ
ÏεÏνείοÏ
(ΣÏολική ÎÏγία)" on november 17
+"ÎξÎγεÏÏη ÏοÏ
ΠολÏ
ÏεÏνείοÏ
(ΣÏολική ÎÏγία)" school on november 17
:: Daylight Saving
: summer
-"ÎεÏινή ÏÏα (1 ÏÏα μÏÏοÏÏά)" on last sunday in march
+"ÎεÏινή ÏÏα (1 ÏÏα μÏÏοÏÏά)" seasonal on last sunday in march
:winter
-"ΧειμεÏινή ÏÏα (1 ÏÏα ÏίÏÏ)" on last sunday in october
+"ΧειμεÏινή ÏÏα (1 ÏÏα ÏίÏÏ)" seasonal on last sunday in october
:: Seasons
:: To be sorted, it's all Greek to me :-)
-:: Name Days - ÎνομαÏÏικÎÏ ÎµÎ¿ÏÏÎÏ
-
-"ÎαÏίληÏ, ÎαÏιλική, ÎαÏιλεία, Îίβιαν" on january 1
-"ΣÏ
λβÎÏÏÏοÏ" on january 2
-"ÎεÏνη" on january 5
-"ΦÏÏηÏ, ΦÏÏεινή, ÎεοÏάνηÏ, ÎεοÏανία, Φανή, ÎοÏδάνηÏ, ÎεανÏ, ÎÏ
Ïανία, ÎεοÏοÏλα" on january 6
-"ÎÏάννηÏ, ÎÏάννα, Î ÏÏδÏομοÏ" on january 7
-"ÎγάθÏν, Îομινίκη, ΠαÏθÎνα, ÎÏÏοÏ" on january 8
-"ÎεοδÏÏηÏ, ÎεοδοÏία" on january 11
-"ΤαÏιάνα, ΤαÏιανή" on january 12
-"ÎνÏÏνηÏ, ÎνÏÏνία" on january 17
-"ÎθανάÏιοÏ, ÎθαναÏία, ÎÏÏιλλοÏ" on january 18
-"ÎακάÏιοÏ" on january 19
-"ÎÏ
θÏμηÏ, ÎÏ
θÏ
μία, ΦαβιανÏÏ" on january 20
-"Îγνή, ÎάξιμοÏ, ÎεÏÏÏ
ÏοÏ, ΠάÏÏοκλοÏ" on january 21
-"ΤιμÏθεοÏ, ÎναÏÏάÏιοÏ, ÎναÏÏαÏία" on january 22
-"ÎγαθάγγελοÏ" on january 23
-"ÎÎνη, ΦίλÏναÏ, ÎÏÏιμάÏ" on january 24
-"ÎÏηγÏÏηÏ, ÎÏηγοÏία, ÎαÏγαÏίÏα" on january 25
-"ÎενοÏÏν" on january 26
-"ΧάÏιÏ, ΠαλλάδιοÏ" on january 28
-"ÎαÏÏοÏ, ΧÏÏ
Ïή, ΤÏιÏν ÎεÏαÏÏÏν (ΣÏολική ÎÏγία)" on january 30
-"ÎÏ
δοξία, ÎÏÏοÏ" on january 31
-"ΤÏÏÏÏναÏ" on february 1
-"Î¥ÏαÏανÏή" on february 2
-"ΣÏαμάÏ-ηÏ/ία, ΣÏ
μεÏ-ν/νή, ΣιμÏνη, ÎÏημάκηÏ, ÎÏημίνα, ÎαλαμαÏή" on february 3
-"ÎÏίδÏÏοÏ, ÎάÏιμοÏ, ÎαÏίμη" on february 4
-"Îγαθή" on february 5
-"ΦÏÏηÏ" on february 6
-"ΠαÏθÎνιοÏ, ΠαÏθενία" on february 7
-"ÎαÏαÏίαÏ, ÎαÏαÏοÏλα" on february 8
-"ÎάÏκελοÏ, ÎικηÏÏÏοÏ, Îίκη" on february 9
-"ΧαÏάλαμÏοÏ, ΧαÏαλαμÏία, ΧαÏίκλεια, ΧαÏίλαοÏ, ΧαÏοÏλα" on february 10
-"ÎλάÏηÏ, ÎλαÏία, ÎοδÏÏήÏ, ÎοδÏÏα, ÎÏ
γή " on february 11
-"ÎελÎÏηÏ, ΠλÏÏίνοÏ" on february 12
-"Î ÏίÏκιλλα" on february 13
-"ΧλÏη" on sunday after ([february 13])
-"ÎαλενÏίνοÏ, ÎαλενÏίνη, ημÎÏα ÏÏν εÏÏÏεÏ
μÎνÏν" on february 14
-"ÎÏ
ÏÎβιοÏ, ÎÏ
Ïεβία" on february 15
-"ΠάμÏιλοÏ, ΠαμÏίλη, ΣÎλεÏ
κοÏ, ΣελεÏκη" on february 16
-"ÎÎÏν, ÎγαÏηÏÏÏ" on february 18
-"ΦιλοθÎη" on february 19
-"ÎνθοÏÏα" on february 22
-"ΠολÏκαÏÏοÏ" on february 23
-"ΠοÏÏÏÏηÏ, ΦÏÏεινή" on february 26
-"ÎαÏιάννα, ÎÏκληÏιÏÏ" on february 28
-"ÎÏ
δοκία, ΧαÏίÏιοÏ" on march 1
-"ÎÏ
θαλία" on march 2
-"ÎλεÏνικοÏ, Îλεονίκη" on march 3
-"ÎÏÏÎλαοÏ, EÏ
λÏγιοÏ" on march 5
-"ÎÏÏÏιοÏ" on march 6
-"ÎÏ
γÎνιοÏ, ÎÏ
γενία" on march 7
-"ÎÏμήÏ, ÎεοÏÏλακÏοÏ, ΠαγκÏÏμια ÎμÎÏα ÏÎ·Ï ÎÏ
ναίκαÏ" on march 8
-"ΣμάÏαγδοÏ, ΣμαÏάγδα, Îλιάνα, ÎεÏνÏιοÏ, ÎεονÏία, ÎÏ
ÏίμαÏÎ¿Ï ÎÏ
ÏιμαÏη" on march 9
-"ÎάνθοÏ, ÎανθοÏλα, ΣαÏάνÏÎ·Ï Î£Î±ÏανÏοÏλα, ΦιλοκÏήμÏν" on march 9
-"ÎεÏδÏÏÎ¿Ï ÎεοδÏÏα, ÎÏδοÏ, ÎÏδη, ÎαλλήÏ, Îάλεια, ΣÏÏÏÏνιοÏ, ΣÏÏÏονία" on march 11
-"ÎÏξάνÏÏα, ΡÏξάνη, OÏθοδÏξηÏ," on march 12
-"ÎÎανδÏοÏ" on march 13
-"ÎενÎδικÏοÏ, ÎενεδίκÏη" on march 14
-"ÎγάÏιοÏ" on march 15
-"ΧÏιÏÏÏδοÏ
λοÏ, ÎοÏ
λιανÏÏ" on march 16
-"ÎλÎξιοÏ, Îλεξία" on march 17
-"ΧÏÏÏανθοÏ, ΧÏÏ
Ïάνθη" on march 19
-"ÎÏÏÏοÏ, ÎÏοÏοÏλα" on march 22
-"ÎÏ
αγγελιÏμÏÏ ÏÎ·Ï ÎεοÏÏκοÏ
" on march 25
-"ÎÏ
άγγελοÏ, ÎÏ
αγγελία" on march 25
-"ΠοÏλιοÏ, ΣÏλαÏ, ΣÏλια" on march 26
-"ÎÏ
δία, ÎακεδÏνιοÏ, ÎακεδονοÏλα" on march 27
-"ÎÏ
ÏÏÏιοÏ, ÎÏ
ÏÏ
Ïία" on april 6
-"ÎÏÏήÏ, ÎÏÏηÏίνα" on april 9
-"ÎημοÏθÎνηÏ, ÎÏακλήÏ, ÎιλÏιάδηÏ, ΠεÏικλήÏ, ΣοÏοκλήÏ, ÎÏαμεινÏνδαÏ" on april 10
-"ÎμηÏοÏ, ΠελοÏίδαÏ, ΠαÏμενίÏν, ΠολÏβιοÏ, ÎναξιμÎνηÏ, ΦοιλοÏοίμην, ΦίληÏ" on april 10
-"ÎÏίÏÏαÏÏοÏ, ÎÏμαÎÏ" on april 14
-"ÎεÏνίδαÏ, ÎάζαÏοÏ" on april 15
-"ÎάÏοÏ, ÎάÏα, ÎάÏνη, Îαλήνη, Χιονία" on april 16
-"Îαθαναήλ, ÎÎαÏÏοÏ, ÎιάÏÏοÏ" on april 22
-"ÎεÏÏγιοÏ, ÎεÏÏγία" on ( ( ([april 23]) >= ([pascha]) ) ? ([april 23]) : ([pascha] + 1) )
-"ÎλιÏάβεÏ, ÎÏιλλÎαÏ" on april 24
-"ÎάÏκοÏ, Îίκη, ΡαÏαήλ" on ( ( ([april 23]) >= ([pascha]) ) ? ([april 25]) : ([pascha] + 2) )
-"Îίκη" on april 25
-"ÎÏή, Πηγή" on april 28
-"ÎάÏÏναÏ" on april 29
-"ÎάκÏβοÏ, ÎÏμάÏ, ÎÏμαή, ÎÏημίνα" on april 30
-"ÎεÏεμίαÏ" on may 1
-"ÎÏÏεÏοÏ, ÎÏÏÎÏια" on may 2
-"ΡοδÏÏη, Îενία" on may 3
-"ÎιÏήνη, EιÏηναίοÏ, ÎÏ
ÏÏαίμ" on may 5
-"ÎÏ
ÏοÏÏÏα" on may 7
-"ÎεολÏγοÏ" on may 8
-"ΧÏιÏÏÏÏοÏοÏ, ÎÏαÎαÏ" on may 9
-"ΣίμÏν" on may 10
-"AÏμÏδιοÏ,ÎεθÏδιοÏ, ÎλÏ
μÏία" on may 11
-"ÎÏιÏάνειοÏ" on may 12
-"ÎλÏ
κεÏία" on may 13
-"ÎιοÏÏή ÏÎ·Ï ÎηÏÎÏαÏ, ÎÏιÏÏοÏÎληÏ" on may 14
-"Îαλή" on may 15
-"ÎνδÏÏνικοÏ, ÎνδÏονίκη, ÎοÏ
νία" on may 17
-"ÎοÏ
λία, ÎαλάÏεια" on may 18
-"ÎεÏκÏιÏÏοÏ, Îαγδαληνή, ΠαÏÏίκιοÏ" on may 19
-"ÎÏ
δία" on may 20
-"ÎÏνÏÏανÏίνοÏ, ÎÏνÏÏανÏίνα, ÎλÎνη" on may 21
-"ÎιμίλιοÏ, Îιμιλία, ÎμÏ
" on may 22
-"ÎαÏκιανή" on may 24
-"ÎεοδοÏία" on may 29
-"Î ÏÏÏοÏ, ÎεÏÎλη, ÎοÏ
ÏÏίνοÏ, ÎνάληÏη" on june 1
-"ÎικηÏÏÏοÏ, ÎαÏίνοÏ" on june 2
-"Î¥ÏάÏιοÏ, Î¥ÏαÏία" on june 3
-"ÎάÏθα" on june 4
-"AÏÏλλÏν, ÎÏÏÏθεοÏ, ÎÏÏοθÎα, Σελήνη, ÎίκανδÏοÏ" on june 5
-"ÎαλλιÏÏη" on june 8
-"Ροδάνθη" on june 9
-"ÎαÏθολομαίοÏ, ÎαÏνάβαÏ" on june 11
-"ÎνοÏÏÏιοÏ" on june 12
-"ÎλιÏαίοÏ" on june 14
-"ÎÏ
γοÏ
ÏÏίνοÏ, ÎÏ
γοÏÏÏα, ÎεÏÏνÏ
μοÏ, ÎÏνικα, ÎÏÏανÏία" on june 15
-"ÎιοÏÏή ÏοÏ
ÏαÏÎÏα" on june 16
-"ÎÏαÏμοÏ, ÎÏαÏμία, AγίÏν ΠάνÏÏν" on june 18
-"ΠαÎÏιοÏ, ÎÏÏιμάÏ, ÎήÏηÏ" on june 19
-"ÎÏ
ÏÎβιοÏ, ÎÏ
Ïεβία" on june 22
-"ÎÏιÏÏοκλήÏ" on june 23
-"ΦεβÏÏνία, ÎÏÏÏαÏ" on june 25
-"ÎεÏμανÏÏ" on june 28
-"Î ÎÏÏοÏ, Î ÎÏÏα, ΠαÏλοÏ, ΠαÏ
λίνα" on june 29
-"ÎÏÏÏÏολοÏ, ÎÏοÏÏολία, ÎελίÏÏν" on june 30
-"ÎÏγÏÏηÏ, ÎÏγÏ
ÏÏ, ÎοÏμάÏ, ÎαμιανÏÏ, ÎνάÏγÏ
ÏοÏ" on july 1
-"ΥάκινθοÏ, ÎοÏ
μÏοÏ
λία" on july 3
-"ÎοÏ
κία" on july 4
-"ÎÏ
κίαÏ, ÎÏκιοÏ, ÎÏ
κία, " on july 6
-"ÎÏ
Ïιακή" on july 7
-"ÎεÏÏιλοÏ, Î ÏοκÏÏιοÏ" on july 8
-"ÎÏ
Ïημία, Îλγα" on july 11
-"ÎεÏονίκη, ÎεÏενίκη " on july 12
-"ΣάÏα" on july 13
-"ÎκÏλαÏ, ÎικÏδημοÏ" on july 14
-"ÎλαδίμηÏοÏ, ÎοÏ
λίÏÏα, ÎήÏÏ
κοÏ" on july 15
-"ÎαÏίνα" on july 17
-"ÎιμίλιοÏ, Îιμιλία" on july 18
-"ÎλίαÏ, Îλιάνα" on july 20
-"Îαγδαληνή, ÎαÏκÎλλα, ÎαÏιλÎνα" on july 22
-"ΦÏκάÏ" on july 23
-"ÎθηναγÏÏαÏ" on july 24
-"Îννα, ÎλÏ
μÏία" on july 25
-"ΠαÏαÏκεÏ
ή, ΠαÏαÏκεÏ
άÏ, ÎÏÏη" on july 26
-"ΠανÏελήÏ" on july 27
-"ÎιÏήνη, ΧÏÏ
ÏοβαλάνÏηÏ, ÎαλάνÏηÏ, ΧÏÏ
ÏοβαλάνÏοÏ
, ÎκάκιοÏ" on july 28
-"ÎαλλίνικοÏ" on july 29
-"ÎνδÏÏνικοÏ, ÎνδÏονίκη" on july 30
-"ÎÏÏήÏ, ÎÏÏηÏίνα" on july 31
-"ÎάÏκελοÏ" on august 1
-"ΣÏÏήÏηÏ, ΣÏÏηÏία, ÎÏ
μοÏÏία, ÎμμÏ
, ÎοÏÏοÏλα" on august 6
-"ÎÏÏÎÏιοÏ, ÎÏÏεÏία" on august 7
-"ΤÏιανÏάÏÏ
λλοÏ, ΤÏιανÏαÏÏ
λλιά" on august 8
-"ΡÏμανÏÏ" on august 9
-"ÎαÏ
ÏÎνÏηÏ, ÎαÏ
ÏενÏία, ÎÏ
λαμÏία, ÎÏÏÏλÏ
ÏοÏ, ÎÏÏ " on august 10
-"ÎεÏάÏιμοÏ, ÎλκιβιάδηÏ, ÎιομήδηÏ, ΣαÏάνÏηÏ" on august 16
-"ÎεÏ
κοθÎα, ÎÏÏÏν, ÎίÏκα" on august 17
-"ΦλÏÏα" on august 18
-"ΣαμοÏ
ήλ, ÎεοÏάÏηÏ" on august 20
-"AγαθÏνικοÏ" on august 22
-"ÎοÏμάÏ" on august 24
-"ÎαÏθολομαίοÏ, ΤίÏοÏ" on august 25
-"ÎαÏαλία, ÎνδÏιανÏÏ, ÎνδÏιανή" on august 26
-"ΦανοÏÏιοÏ, ΦανοÏ
Ïία, ÎÏκαδία" on august 27
-"ÎεοÏίÏÏη" on august 29
-"ÎλÎξανδÏοÏ" on august 30
-"ÎδαμάνÏιοÏ, ÎδαμανÏία, Îθηνά, ÎνÏιγÏνη, ÎÏÏαÏία, ÎÏÏοδίÏη, ÎÏδÏνη" on september 1
-"ÎλÏινίκη, ÎÏαÏμία, ÎÏαÏÏ, ÎÏ
ÏÎÏÏη, Îάλεια, ÎεανÏ, ÎαλλίÏÏη, ÎλειÏ, Îλεονίκη" on september 1
-"ÎλεοÏάÏÏα, ÎοÏαλία, ÎαÏγαÏίÏα, ÎαÏιάνθη, ÎελÎÏιοÏ, ÎελÏομÎνη, ÎÏ
Ïανία" on september 1
-"ΠανδÏÏα, ΠηνελÏÏη, ΠολÏ
μνία, ΠολÏ
νίκη, ΣαÏÏÏ, ΣÏ
μεÏν, ΤεÏÏιÏÏÏη, ΧάιδÏ" on september 1
-"ÎνθιμοÏ, ΠολÏδÏÏοÏ, Φοίβη" on september 3
-"ÎÏμιÏνη, ÎÏÏ
ÏήÏ" on september 4
-"ÎαÏαÏίαÏ" on september 5
-"ÎαÏÏιανή, ΣÏζÏν" on september 7
-"ÎÏακείμ" on september 9
-"ÎÏάÏÏη, ÎÏάÏÏοÏ, ÎηÏÏοδÏÏα, ΠοÏ
λÏεÏία" on september 10
-"ÎÏ
ανθία" on september 11
-"ÎÏιÏÏείδηÏ, ÎοÏνήλιοÏ" on september 13
-"ΣÏαÏÏοÏ, ΣÏαÏ
ÏοÏλα" on september 14
-"ÎικήÏαÏ, ÎηÏÏαÏίÏν" on september 15
-"ÎÏ
Ïημία" on september 16
-"ΣοÏία, ÎλÏίδα, ÎγάÏη, ΠίÏÏη, ΣÏνια" on september 17
-"ÎÏιάδνη" on september 18
-"ÎÏ
ÏÏάθιοÏ, ÎÏ
ÏÏαθία" on september 20
-"ÎÏναÏ" on september 21
-"ΦÏκάÏ, ÎÏγÏαÏιά" on september 22
-"ΠολÏ
ξÎνη, ÎανθίÏÏη, ÎάνθιÏÏοÏ" on september 23
-"ÎÎκλα, ÎÏ
ÏÏίνη, ÎÏ
ÏÏÏ" on september 24
-"ÎÏ
ÏÏοÏÏνη" on september 25
-"ÎήνÏν" on september 27
-"ÎÏ
ÏιάκοÏ, ÎÏ
Ïιακή" on september 29
-"ÎηÏεÏία" on october 1
-"ÎÏ
ÏÏιανÏÏ" on october 2
-"ÎιονÏÏηÏ, ÎιονÏ
Ïία" on october 3
-"ÎεÏÏθεοÏ, ΦÏαγκίÏκοÏ" on october 4
-"ΧαÏιÏινή" on october 5
-"ΣÎÏγιοÏ, ΠολÏ
ÏÏÏνηÏ, ΧÏÏνηÏ" on october 7
-"Πελαγία" on october 8
-"ÎÏ
λάμÏιοÏ, ÎÏ
λαμÏία" on october 10
-"ÎνδÏομάÏη, ÎνδÏÏμαÏοÏ" on october 12
-"Îγαθονίκη, ΦλÏÏÎνÏιοÏ, ΦλÏÏενÏία" on october 13
-"ÎοÏ
κιανÏÏ" on october 15
-"ÎοÏ
κάÏ" on october 18
-"ÎεÏάÏιμοÏ, ÎÏÏÎμιοÏ" on october 20
-"ΣÏκÏάÏηÏ, ΧÏιÏÏÏδοÏ
λοÏ, ÎÏ
ÏÏοÏ
λα" on october 21
-"ÎβÎÏκιοÏ" on october 22
-"ÎάκÏβοÏ" on october 23
-"ΧÏÏ
ÏάÏηÏ" on october 25
-"ÎημήÏÏιοÏ, ÎήμηÏÏα, Îανάη" on october 26
-"ÎÎÏÏοÏαÏ" on october 27
-"Îηνοβία, ÎλεÏÏαÏ, ÎαÏκιανÏÏ" on october 30
-"ÎÏιÏÏÏβοÏ
λοÏ" on october 31
-"ÎÏγÏÏηÏ, ÎÏγÏ
ÏÏ, ÎοÏμάÏ, ÎαμιανÏÏ, ÎνάÏγÏ
ÏοÏ" on november 1
-"ÎÏθÏνιοÏ, ÎÏθονία" on november 2
-"ÎÏαννίκη" on november 4
-"ÎίνοÏ" on november 5
-"ÎεονάÏδοÏ" on november 6
-"ÎθηνÏδÏÏοÏ" on november 7
-"ΣÏαμάÏιοÏ, ΣÏαμαÏία, ÎιÏάληÏ, ÎαβÏιήλ, ÎαβÏιÎλα" on november 8
-"ΤαξιάÏÏηÏ, ÎγγελοÏ, Îγγελική, ÎαÏίνα, ΣεÏαÏείμ" on november 8
-"ÎεκÏάÏιοÏ, ÎεκÏαÏία" on november 9
-"ÎÏÎÏÏηÏ" on november 10
-"ÎηνάÏ, Mήνα, ÎίκÏÏÏ, ÎικÏÏÏία" on november 11
-"ΧÏÏ
ÏÏÏÏομοÏ" on november 13
-"ΦίλιÏÏοÏ" on november 14
-"ÎαÏθαίοÏ, ÎÏιγÎνεια" on november 16
-"ΠλάÏÏναÏ" on november 18
-"ÎαÏία, ÎάÏιοÏ" on november 21
-"ΦιλήμÏν" on november 22
-"ÎεÏÏÏη" on november 23
-"ÎαÏεÏίνα, ÎεÏκοÏÏιοÏ" on november 25
-"ΣÏÎλιοÏ, ΣÏÎλλα, ΣÏÎÏγιοÏ" on november 26
-"ΦαίδÏα" on november 29
-"ÎνδÏÎαÏ, ÎνδÏιάνα" on november 30
-"ÎεÏκληÏοÏ, ÎακÏβ" on december 1
-"ÎαÏβάÏα, ÎαμαÏκηνÏÏ" on december 4
-"ΣάββαÏ, ΣαββοÏλα, ÎιογÎνηÏ" on december 5
-"ÎίκοÏ, ÎικολÎÏα" on december 6
-"ÎμβÏÏÏιοÏ" on december 7
-"Îννα" on december 9
-"ÎαÏÏν, Îδάμ, ÎαÏ
ίδ, Îανάη, ÎÏα, ÎÏαάκ, ÎÏβ, ΡαÏήλ, ΡοÏ
μÏίνη" on sunday after ([december 11])
-"ΣÏÏÏοÏ, ΣÏÏ
ÏιδοÏλα" on december 12
-"ÎÏ
ÏÏÏάÏιοÏ, ÎοÏ
κάÏ, ÎοÏ
κία, ÎÏηÏ" on december 13
-"ÎλεÏ
θÎÏιοÏ, ÎλεÏ
θεÏία, Îνθή, ΣÏλβια" on december 15
-"ÎιονÏÏηÏ, ÎιονÏ
Ïία, Îανιήλ, ΡεβÎκα, ΣεβαÏÏιανÏÏ, ΣεβαÏÏή" on december 17
-"ÎαÏÏν, Îδάμ, ÎÏαάκ, ΡαÏήλ, ΣάÏα" on december 17
-"ÎγλαÎα" on december 19
-"ÎγνάÏιοÏ" on december 20
-"ÎεμιÏÏοκλήÏ, ÎοÏ
λία" on december 21
-"ÎναÏÏαÏία" on december 22
-"ÎÏ
γÎνιοÏ, ÎÏ
γενία" on december 24
-"ΧÏήÏÏοÏ, ΧÏιÏÏίνα, ΧÏÏÏα" on december 25
-"ÎανÏληÏ, ÎμμανοÏ
Îλα" on december 26
-"ΣÏÎÏανοÏ, ΣÏεÏανία" on december 27
-"ÎÏμνα" on december 28
-"ÎÏÏήÏ" on december 30
-
-
:: ÎινηÏÎÏ ÎµÎ¿ÏÏÎÏ
-"ΤελÏνοÏ
και ΦαÏιÏαίοÏ
- ÎÏÏή ΤÏιÏδίοÏ
" on pascha minus 70 days
-"ΤοÏ
ÎÏÏÏοÏ
" on pascha minus 63 days
-"ΤÏικνοÏÎμÏÏη" on pascha minus 59 days
-"ÎÏ
Ïιακή ÏÏν ÎÏÏκÏεÏ" on pascha minus 56 days
-"ΤÏ
ÏοÏάγοÏ
" on pascha minus 49 days
-"ÎεÏδÏÏοÏ, ÎεοδÏÏα, ÎÏÏα, ÎÏδηÏ, ÎÏδοÏ, ÎÏÏηÏ" on pascha minus 43 days
-"ÎÏ
Ïιακή ÏÎ·Ï ÎÏθοδοξίαÏ" on pascha minus 42 days
-"ΣάββαÏο ÏοÏ
ÎαζάÏοÏ
" on pascha minus 8 days
-"ÎÏ
Ïιακή ÏÏν ÎαÎÏν" on pascha minus 7 days
-"Îεγάλη ÎεÏ
ÏÎÏα" on pascha minus 6 days
-"Îεγάλη ΤÏίÏη" on pascha minus 5 days
-"Îεγάλη ΤεÏάÏÏη" on pascha minus 4 days
-"Îεγάλη Î ÎμÏÏη" on pascha minus 3 days
-"ÎναÏÏάÏιοÏ, ÎναÏÏαÏία, ÎάμÏÏοÏ, ÎαμÏÏινή, ΠαÏÏÎ¬Î»Î·Ï " on pascha
-"ΡαÏαήλ, ÎιÏήνη" on pascha plus 2 days
-"Πηγή, ÎήÏηÏ, ÎηÏοÏλα, ÎήÏιμοÏ, ÎÏή, ÎÏηÏ" on pascha plus 5 days
-"ΤοÏ
ÎÏμά" on pascha plus 7 days
-"ÎνάληÏη ÏοÏ
ΧÏιÏÏοÏ" on pascha plus 39 days
-"ΠενÏηκοÏÏή" on pascha plus 49 days
-"Îγ. ΠάνÏÏν" on pascha plus 56 days
+"ΤελÏνοÏ
και ΦαÏιÏαίοÏ
- ÎÏÏή ΤÏιÏδίοÏ
" religious on pascha minus 70 days
+"ΤοÏ
ÎÏÏÏοÏ
" religious on pascha minus 63 days
+"ΤÏικνοÏÎμÏÏη" religious on pascha minus 59 days
+"ÎÏ
Ïιακή ÏÏν ÎÏÏκÏεÏ" religious on pascha minus 56 days
+"ΤÏ
ÏοÏάγοÏ
" religious on pascha minus 49 days
+"ÎεÏδÏÏοÏ, ÎεοδÏÏα, ÎÏÏα, ÎÏδηÏ, ÎÏδοÏ, ÎÏÏηÏ" religious on pascha minus 43 days
+"ÎÏ
Ïιακή ÏÎ·Ï ÎÏθοδοξίαÏ" religious on pascha minus 42 days
+"ΣάββαÏο ÏοÏ
ÎαζάÏοÏ
" religious on pascha minus 8 days
+"ÎÏ
Ïιακή ÏÏν ÎαÎÏν" religious on pascha minus 7 days
+"Îεγάλη ÎεÏ
ÏÎÏα" religious on pascha minus 6 days
+"Îεγάλη ΤÏίÏη" religious on pascha minus 5 days
+"Îεγάλη ΤεÏάÏÏη" religious on pascha minus 4 days
+"Îεγάλη Î ÎμÏÏη" religious on pascha minus 3 days
+"ÎναÏÏάÏιοÏ, ÎναÏÏαÏία, ÎάμÏÏοÏ, ÎαμÏÏινή, ΠαÏÏÎ¬Î»Î·Ï " religious on pascha
+"ΡαÏαήλ, ÎιÏήνη" religious on pascha plus 2 days
+"Πηγή, ÎήÏηÏ, ÎηÏοÏλα, ÎήÏιμοÏ, ÎÏή, ÎÏηÏ" religious on pascha plus 5 days
+"ΤοÏ
ÎÏμά" religious on pascha plus 7 days
+"ÎνάληÏη ÏοÏ
ΧÏιÏÏοÏ" religious on pascha plus 39 days
+"ΠενÏηκοÏÏή" religious on pascha plus 49 days
+"Îγ. ΠάνÏÏν" religious on pascha plus 56 days
diff --git a/kholidays/holidays/plan2/holiday_gr_el_nameday b/kholidays/holidays/plan2/holiday_gr_el_nameday
new file mode 100644
index 0000000..058328e
--- /dev/null
+++ b/kholidays/holidays/plan2/holiday_gr_el_nameday
@@ -0,0 +1,274 @@
+::
+:: Country: Greece
+::
+:: Language: Greek
+::
+:: Author: capthookb <praktoreio2002 at yahoo.gr>
+:: Dimitrios Glentadakis <dglent at gmail.com>
+:: Marios Andreopoulos <opensource at andmarios.com>
+:: Updated: 2014-04-25
+::
+:: Source: http://www.eortologio.gr/index_uk.php
+:: http://www.argies.gr/
+
+:: Metadata
+country "GR"
+language "el"
+: "Name Day holiday file for Greece"
+description "ÎνομαÏÏικÎÏ ÎµÎ¿ÏÏÎÏ"
+
+:: Name Days - ÎνομαÏÏικÎÏ ÎµÎ¿ÏÏÎÏ
+
+"ÎαÏίληÏ, ÎαÏιλική, ÎαÏιλεία, Îίβιαν" nameday on january 1
+"ΣÏ
λβÎÏÏÏοÏ" nameday on january 2
+"ÎεÏνη" nameday on january 5
+"ΦÏÏηÏ, ΦÏÏεινή, ÎεοÏάνηÏ, ÎεοÏανία, Φανή, ÎοÏδάνηÏ, ÎεανÏ, ÎÏ
Ïανία, ÎεοÏοÏλα" nameday on january 6
+"ÎÏάννηÏ, ÎÏάννα, Î ÏÏδÏομοÏ" nameday on january 7
+"ÎγάθÏν, Îομινίκη, ΠαÏθÎνα, ÎÏÏοÏ" nameday on january 8
+"ÎεοδÏÏηÏ, ÎεοδοÏία" nameday on january 11
+"ΤαÏιάνα, ΤαÏιανή" nameday on january 12
+"ÎνÏÏνηÏ, ÎνÏÏνία" nameday on january 17
+"ÎθανάÏιοÏ, ÎθαναÏία, ÎÏÏιλλοÏ" nameday on january 18
+"ÎακάÏιοÏ" nameday on january 19
+"ÎÏ
θÏμηÏ, ÎÏ
θÏ
μία, ΦαβιανÏÏ" nameday on january 20
+"Îγνή, ÎάξιμοÏ, ÎεÏÏÏ
ÏοÏ, ΠάÏÏοκλοÏ" nameday on january 21
+"ΤιμÏθεοÏ, ÎναÏÏάÏιοÏ, ÎναÏÏαÏία" nameday on january 22
+"ÎγαθάγγελοÏ" nameday on january 23
+"ÎÎνη, ΦίλÏναÏ, ÎÏÏιμάÏ" nameday on january 24
+"ÎÏηγÏÏηÏ, ÎÏηγοÏία, ÎαÏγαÏίÏα" nameday on january 25
+"ÎενοÏÏν" nameday on january 26
+"ΧάÏιÏ, ΠαλλάδιοÏ" nameday on january 28
+"ÎαÏÏοÏ, ΧÏÏ
Ïή, ΤÏιÏν ÎεÏαÏÏÏν (ΣÏολική ÎÏγία)" nameday on january 30
+"ÎÏ
δοξία, ÎÏÏοÏ" nameday on january 31
+"ΤÏÏÏÏναÏ" nameday on february 1
+"Î¥ÏαÏανÏή" nameday on february 2
+"ΣÏαμάÏ-ηÏ/ία, ΣÏ
μεÏ-ν/νή, ΣιμÏνη, ÎÏημάκηÏ, ÎÏημίνα, ÎαλαμαÏή" nameday on february 3
+"ÎÏίδÏÏοÏ, ÎάÏιμοÏ, ÎαÏίμη" nameday on february 4
+"Îγαθή" nameday on february 5
+"ΦÏÏηÏ" nameday on february 6
+"ΠαÏθÎνιοÏ, ΠαÏθενία" nameday on february 7
+"ÎαÏαÏίαÏ, ÎαÏαÏοÏλα" nameday on february 8
+"ÎάÏκελοÏ, ÎικηÏÏÏοÏ, Îίκη" nameday on february 9
+"ΧαÏάλαμÏοÏ, ΧαÏαλαμÏία, ΧαÏίκλεια, ΧαÏίλαοÏ, ΧαÏοÏλα" nameday on february 10
+"ÎλάÏηÏ, ÎλαÏία, ÎοδÏÏήÏ, ÎοδÏÏα, ÎÏ
γή " nameday on february 11
+"ÎελÎÏηÏ, ΠλÏÏίνοÏ" nameday on february 12
+"Î ÏίÏκιλλα" nameday on february 13
+"ΧλÏη" nameday on sunday after ([february 13])
+"ÎαλενÏίνοÏ, ÎαλενÏίνη, ημÎÏα ÏÏν εÏÏÏεÏ
μÎνÏν" nameday on february 14
+"ÎÏ
ÏÎβιοÏ, ÎÏ
Ïεβία" nameday on february 15
+"ΠάμÏιλοÏ, ΠαμÏίλη, ΣÎλεÏ
κοÏ, ΣελεÏκη" nameday on february 16
+"ÎÎÏν, ÎγαÏηÏÏÏ" nameday on february 18
+"ΦιλοθÎη" nameday on february 19
+"ÎνθοÏÏα" nameday on february 22
+"ΠολÏκαÏÏοÏ" nameday on february 23
+"ΠοÏÏÏÏηÏ, ΦÏÏεινή" nameday on february 26
+"ÎαÏιάννα, ÎÏκληÏιÏÏ" nameday on february 28
+"ÎÏ
δοκία, ΧαÏίÏιοÏ" nameday on march 1
+"ÎÏ
θαλία" nameday on march 2
+"ÎλεÏνικοÏ, Îλεονίκη" nameday on march 3
+"ÎÏÏÎλαοÏ, EÏ
λÏγιοÏ" nameday on march 5
+"ÎÏÏÏιοÏ" nameday on march 6
+"ÎÏ
γÎνιοÏ, ÎÏ
γενία" nameday on march 7
+"ÎÏμήÏ, ÎεοÏÏλακÏοÏ, ΠαγκÏÏμια ÎμÎÏα ÏÎ·Ï ÎÏ
ναίκαÏ" nameday on march 8
+"ΣμάÏαγδοÏ, ΣμαÏάγδα, Îλιάνα, ÎεÏνÏιοÏ, ÎεονÏία, ÎÏ
ÏίμαÏÎ¿Ï ÎÏ
ÏιμαÏη" nameday on march 9
+"ÎάνθοÏ, ÎανθοÏλα, ΣαÏάνÏÎ·Ï Î£Î±ÏανÏοÏλα, ΦιλοκÏήμÏν" nameday on march 9
+"ÎεÏδÏÏÎ¿Ï ÎεοδÏÏα, ÎÏδοÏ, ÎÏδη, ÎαλλήÏ, Îάλεια, ΣÏÏÏÏνιοÏ, ΣÏÏÏονία" nameday on march 11
+"ÎÏξάνÏÏα, ΡÏξάνη, OÏθοδÏξηÏ," nameday on march 12
+"ÎÎανδÏοÏ" nameday on march 13
+"ÎενÎδικÏοÏ, ÎενεδίκÏη" nameday on march 14
+"ÎγάÏιοÏ" nameday on march 15
+"ΧÏιÏÏÏδοÏ
λοÏ, ÎοÏ
λιανÏÏ" nameday on march 16
+"ÎλÎξιοÏ, Îλεξία" nameday on march 17
+"ΧÏÏÏανθοÏ, ΧÏÏ
Ïάνθη" nameday on march 19
+"ÎÏÏÏοÏ, ÎÏοÏοÏλα" nameday on march 22
+"ÎÏ
αγγελιÏμÏÏ ÏÎ·Ï ÎεοÏÏκοÏ
" nameday on march 25
+"ÎÏ
άγγελοÏ, ÎÏ
αγγελία" nameday on march 25
+"ΠοÏλιοÏ, ΣÏλαÏ, ΣÏλια" nameday on march 26
+"ÎÏ
δία, ÎακεδÏνιοÏ, ÎακεδονοÏλα" nameday on march 27
+"ÎÏ
ÏÏÏιοÏ, ÎÏ
ÏÏ
Ïία" nameday on april 6
+"ÎÏÏήÏ, ÎÏÏηÏίνα" nameday on april 9
+"ÎημοÏθÎνηÏ, ÎÏακλήÏ, ÎιλÏιάδηÏ, ΠεÏικλήÏ, ΣοÏοκλήÏ, ÎÏαμεινÏνδαÏ" nameday on april 10
+"ÎμηÏοÏ, ΠελοÏίδαÏ, ΠαÏμενίÏν, ΠολÏβιοÏ, ÎναξιμÎνηÏ, ΦοιλοÏοίμην, ΦίληÏ" nameday on april 10
+"ÎÏίÏÏαÏÏοÏ, ÎÏμαÎÏ" nameday on april 14
+"ÎεÏνίδαÏ, ÎάζαÏοÏ" nameday on april 15
+"ÎάÏοÏ, ÎάÏα, ÎάÏνη, Îαλήνη, Χιονία" nameday on april 16
+"Îαθαναήλ, ÎÎαÏÏοÏ, ÎιάÏÏοÏ" nameday on april 22
+"ÎεÏÏγιοÏ, ÎεÏÏγία" nameday on ( ( ([april 23]) >= ([pascha]) ) ? ([april 23]) : ([pascha] + 1) )
+"ÎλιÏάβεÏ, ÎÏιλλÎαÏ" nameday on april 24
+"ÎάÏκοÏ, Îίκη, ΡαÏαήλ" nameday on ( ( ([april 23]) >= ([pascha]) ) ? ([april 25]) : ([pascha] + 2) )
+"Îίκη" nameday on april 25
+"ÎÏή, Πηγή" nameday on april 28
+"ÎάÏÏναÏ" nameday on april 29
+"ÎάκÏβοÏ, ÎÏμάÏ, ÎÏμαή, ÎÏημίνα" nameday on april 30
+"ÎεÏεμίαÏ" nameday on may 1
+"ÎÏÏεÏοÏ, ÎÏÏÎÏια" nameday on may 2
+"ΡοδÏÏη, Îενία" nameday on may 3
+"ÎιÏήνη, EιÏηναίοÏ, ÎÏ
ÏÏαίμ" nameday on may 5
+"ÎÏ
ÏοÏÏÏα" nameday on may 7
+"ÎεολÏγοÏ" nameday on may 8
+"ΧÏιÏÏÏÏοÏοÏ, ÎÏαÎαÏ" nameday on may 9
+"ΣίμÏν" nameday on may 10
+"AÏμÏδιοÏ,ÎεθÏδιοÏ, ÎλÏ
μÏία" nameday on may 11
+"ÎÏιÏάνειοÏ" nameday on may 12
+"ÎλÏ
κεÏία" nameday on may 13
+"ÎιοÏÏή ÏÎ·Ï ÎηÏÎÏαÏ, ÎÏιÏÏοÏÎληÏ" nameday on may 14
+"Îαλή" nameday on may 15
+"ÎνδÏÏνικοÏ, ÎνδÏονίκη, ÎοÏ
νία" nameday on may 17
+"ÎοÏ
λία, ÎαλάÏεια" nameday on may 18
+"ÎεÏκÏιÏÏοÏ, Îαγδαληνή, ΠαÏÏίκιοÏ" nameday on may 19
+"ÎÏ
δία" nameday on may 20
+"ÎÏνÏÏανÏίνοÏ, ÎÏνÏÏανÏίνα, ÎλÎνη" nameday on may 21
+"ÎιμίλιοÏ, Îιμιλία, ÎμÏ
" nameday on may 22
+"ÎαÏκιανή" nameday on may 24
+"ÎεοδοÏία" nameday on may 29
+"Î ÏÏÏοÏ, ÎεÏÎλη, ÎοÏ
ÏÏίνοÏ, ÎνάληÏη" nameday on june 1
+"ÎικηÏÏÏοÏ, ÎαÏίνοÏ" nameday on june 2
+"Î¥ÏάÏιοÏ, Î¥ÏαÏία" nameday on june 3
+"ÎάÏθα" nameday on june 4
+"AÏÏλλÏν, ÎÏÏÏθεοÏ, ÎÏÏοθÎα, Σελήνη, ÎίκανδÏοÏ" nameday on june 5
+"ÎαλλιÏÏη" nameday on june 8
+"Ροδάνθη" nameday on june 9
+"ÎαÏθολομαίοÏ, ÎαÏνάβαÏ" nameday on june 11
+"ÎνοÏÏÏιοÏ" nameday on june 12
+"ÎλιÏαίοÏ" nameday on june 14
+"ÎÏ
γοÏ
ÏÏίνοÏ, ÎÏ
γοÏÏÏα, ÎεÏÏνÏ
μοÏ, ÎÏνικα, ÎÏÏανÏία" nameday on june 15
+"ÎιοÏÏή ÏοÏ
ÏαÏÎÏα" nameday on june 16
+"ÎÏαÏμοÏ, ÎÏαÏμία, AγίÏν ΠάνÏÏν" nameday on june 18
+"ΠαÎÏιοÏ, ÎÏÏιμάÏ, ÎήÏηÏ" nameday on june 19
+"ÎÏ
ÏÎβιοÏ, ÎÏ
Ïεβία" nameday on june 22
+"ÎÏιÏÏοκλήÏ" nameday on june 23
+"ΦεβÏÏνία, ÎÏÏÏαÏ" nameday on june 25
+"ÎεÏμανÏÏ" nameday on june 28
+"Î ÎÏÏοÏ, Î ÎÏÏα, ΠαÏλοÏ, ΠαÏ
λίνα" nameday on june 29
+"ÎÏÏÏÏολοÏ, ÎÏοÏÏολία, ÎελίÏÏν" nameday on june 30
+"ÎÏγÏÏηÏ, ÎÏγÏ
ÏÏ, ÎοÏμάÏ, ÎαμιανÏÏ, ÎνάÏγÏ
ÏοÏ" nameday on july 1
+"ΥάκινθοÏ, ÎοÏ
μÏοÏ
λία" nameday on july 3
+"ÎοÏ
κία" nameday on july 4
+"ÎÏ
κίαÏ, ÎÏκιοÏ, ÎÏ
κία, " nameday on july 6
+"ÎÏ
Ïιακή" nameday on july 7
+"ÎεÏÏιλοÏ, Î ÏοκÏÏιοÏ" nameday on july 8
+"ÎÏ
Ïημία, Îλγα" nameday on july 11
+"ÎεÏονίκη, ÎεÏενίκη " nameday on july 12
+"ΣάÏα" nameday on july 13
+"ÎκÏλαÏ, ÎικÏδημοÏ" nameday on july 14
+"ÎλαδίμηÏοÏ, ÎοÏ
λίÏÏα, ÎήÏÏ
κοÏ" nameday on july 15
+"ÎαÏίνα" nameday on july 17
+"ÎιμίλιοÏ, Îιμιλία" nameday on july 18
+"ÎλίαÏ, Îλιάνα" nameday on july 20
+"Îαγδαληνή, ÎαÏκÎλλα, ÎαÏιλÎνα" nameday on july 22
+"ΦÏκάÏ" nameday on july 23
+"ÎθηναγÏÏαÏ" nameday on july 24
+"Îννα, ÎλÏ
μÏία" nameday on july 25
+"ΠαÏαÏκεÏ
ή, ΠαÏαÏκεÏ
άÏ, ÎÏÏη" nameday on july 26
+"ΠανÏελήÏ" nameday on july 27
+"ÎιÏήνη, ΧÏÏ
ÏοβαλάνÏηÏ, ÎαλάνÏηÏ, ΧÏÏ
ÏοβαλάνÏοÏ
, ÎκάκιοÏ" nameday on july 28
+"ÎαλλίνικοÏ" nameday on july 29
+"ÎνδÏÏνικοÏ, ÎνδÏονίκη" nameday on july 30
+"ÎÏÏήÏ, ÎÏÏηÏίνα" nameday on july 31
+"ÎάÏκελοÏ" nameday on august 1
+"ΣÏÏήÏηÏ, ΣÏÏηÏία, ÎÏ
μοÏÏία, ÎμμÏ
, ÎοÏÏοÏλα" nameday on august 6
+"ÎÏÏÎÏιοÏ, ÎÏÏεÏία" nameday on august 7
+"ΤÏιανÏάÏÏ
λλοÏ, ΤÏιανÏαÏÏ
λλιά" nameday on august 8
+"ΡÏμανÏÏ" nameday on august 9
+"ÎαÏ
ÏÎνÏηÏ, ÎαÏ
ÏενÏία, ÎÏ
λαμÏία, ÎÏÏÏλÏ
ÏοÏ, ÎÏÏ " nameday on august 10
+"ÎεÏάÏιμοÏ, ÎλκιβιάδηÏ, ÎιομήδηÏ, ΣαÏάνÏηÏ" nameday on august 16
+"ÎεÏ
κοθÎα, ÎÏÏÏν, ÎίÏκα" nameday on august 17
+"ΦλÏÏα" nameday on august 18
+"ΣαμοÏ
ήλ, ÎεοÏάÏηÏ" nameday on august 20
+"AγαθÏνικοÏ" nameday on august 22
+"ÎοÏμάÏ" nameday on august 24
+"ÎαÏθολομαίοÏ, ΤίÏοÏ" nameday on august 25
+"ÎαÏαλία, ÎνδÏιανÏÏ, ÎνδÏιανή" nameday on august 26
+"ΦανοÏÏιοÏ, ΦανοÏ
Ïία, ÎÏκαδία" nameday on august 27
+"ÎεοÏίÏÏη" nameday on august 29
+"ÎλÎξανδÏοÏ" nameday on august 30
+"ÎδαμάνÏιοÏ, ÎδαμανÏία, Îθηνά, ÎνÏιγÏνη, ÎÏÏαÏία, ÎÏÏοδίÏη, ÎÏδÏνη" nameday on september 1
+"ÎλÏινίκη, ÎÏαÏμία, ÎÏαÏÏ, ÎÏ
ÏÎÏÏη, Îάλεια, ÎεανÏ, ÎαλλίÏÏη, ÎλειÏ, Îλεονίκη" nameday on september 1
+"ÎλεοÏάÏÏα, ÎοÏαλία, ÎαÏγαÏίÏα, ÎαÏιάνθη, ÎελÎÏιοÏ, ÎελÏομÎνη, ÎÏ
Ïανία" nameday on september 1
+"ΠανδÏÏα, ΠηνελÏÏη, ΠολÏ
μνία, ΠολÏ
νίκη, ΣαÏÏÏ, ΣÏ
μεÏν, ΤεÏÏιÏÏÏη, ΧάιδÏ" nameday on september 1
+"ÎνθιμοÏ, ΠολÏδÏÏοÏ, Φοίβη" nameday on september 3
+"ÎÏμιÏνη, ÎÏÏ
ÏήÏ" nameday on september 4
+"ÎαÏαÏίαÏ" nameday on september 5
+"ÎαÏÏιανή, ΣÏζÏν" nameday on september 7
+"ÎÏακείμ" nameday on september 9
+"ÎÏάÏÏη, ÎÏάÏÏοÏ, ÎηÏÏοδÏÏα, ΠοÏ
λÏεÏία" nameday on september 10
+"ÎÏ
ανθία" nameday on september 11
+"ÎÏιÏÏείδηÏ, ÎοÏνήλιοÏ" nameday on september 13
+"ΣÏαÏÏοÏ, ΣÏαÏ
ÏοÏλα" nameday on september 14
+"ÎικήÏαÏ, ÎηÏÏαÏίÏν" nameday on september 15
+"ÎÏ
Ïημία" nameday on september 16
+"ΣοÏία, ÎλÏίδα, ÎγάÏη, ΠίÏÏη, ΣÏνια" nameday on september 17
+"ÎÏιάδνη" nameday on september 18
+"ÎÏ
ÏÏάθιοÏ, ÎÏ
ÏÏαθία" nameday on september 20
+"ÎÏναÏ" nameday on september 21
+"ΦÏκάÏ, ÎÏγÏαÏιά" nameday on september 22
+"ΠολÏ
ξÎνη, ÎανθίÏÏη, ÎάνθιÏÏοÏ" nameday on september 23
+"ÎÎκλα, ÎÏ
ÏÏίνη, ÎÏ
ÏÏÏ" nameday on september 24
+"ÎÏ
ÏÏοÏÏνη" nameday on september 25
+"ÎήνÏν" nameday on september 27
+"ÎÏ
ÏιάκοÏ, ÎÏ
Ïιακή" nameday on september 29
+"ÎηÏεÏία" nameday on october 1
+"ÎÏ
ÏÏιανÏÏ" nameday on october 2
+"ÎιονÏÏηÏ, ÎιονÏ
Ïία" nameday on october 3
+"ÎεÏÏθεοÏ, ΦÏαγκίÏκοÏ" nameday on october 4
+"ΧαÏιÏινή" nameday on october 5
+"ΣÎÏγιοÏ, ΠολÏ
ÏÏÏνηÏ, ΧÏÏνηÏ" nameday on october 7
+"Πελαγία" nameday on october 8
+"ÎÏ
λάμÏιοÏ, ÎÏ
λαμÏία" nameday on october 10
+"ÎνδÏομάÏη, ÎνδÏÏμαÏοÏ" nameday on october 12
+"Îγαθονίκη, ΦλÏÏÎνÏιοÏ, ΦλÏÏενÏία" nameday on october 13
+"ÎοÏ
κιανÏÏ" nameday on october 15
+"ÎοÏ
κάÏ" nameday on october 18
+"ÎεÏάÏιμοÏ, ÎÏÏÎμιοÏ" nameday on october 20
+"ΣÏκÏάÏηÏ, ΧÏιÏÏÏδοÏ
λοÏ, ÎÏ
ÏÏοÏ
λα" nameday on october 21
+"ÎβÎÏκιοÏ" nameday on october 22
+"ÎάκÏβοÏ" nameday on october 23
+"ΧÏÏ
ÏάÏηÏ" nameday on october 25
+"ÎημήÏÏιοÏ, ÎήμηÏÏα, Îανάη" nameday on october 26
+"ÎÎÏÏοÏαÏ" nameday on october 27
+"Îηνοβία, ÎλεÏÏαÏ, ÎαÏκιανÏÏ" nameday on october 30
+"ÎÏιÏÏÏβοÏ
λοÏ" nameday on october 31
+"ÎÏγÏÏηÏ, ÎÏγÏ
ÏÏ, ÎοÏμάÏ, ÎαμιανÏÏ, ÎνάÏγÏ
ÏοÏ" nameday on november 1
+"ÎÏθÏνιοÏ, ÎÏθονία" nameday on november 2
+"ÎÏαννίκη" nameday on november 4
+"ÎίνοÏ" nameday on november 5
+"ÎεονάÏδοÏ" nameday on november 6
+"ÎθηνÏδÏÏοÏ" nameday on november 7
+"ΣÏαμάÏιοÏ, ΣÏαμαÏία, ÎιÏάληÏ, ÎαβÏιήλ, ÎαβÏιÎλα" nameday on november 8
+"ΤαξιάÏÏηÏ, ÎγγελοÏ, Îγγελική, ÎαÏίνα, ΣεÏαÏείμ" nameday on november 8
+"ÎεκÏάÏιοÏ, ÎεκÏαÏία" nameday on november 9
+"ÎÏÎÏÏηÏ" nameday on november 10
+"ÎηνάÏ, Mήνα, ÎίκÏÏÏ, ÎικÏÏÏία" nameday on november 11
+"ΧÏÏ
ÏÏÏÏομοÏ" nameday on november 13
+"ΦίλιÏÏοÏ" nameday on november 14
+"ÎαÏθαίοÏ, ÎÏιγÎνεια" nameday on november 16
+"ΠλάÏÏναÏ" nameday on november 18
+"ÎαÏία, ÎάÏιοÏ" nameday on november 21
+"ΦιλήμÏν" nameday on november 22
+"ÎεÏÏÏη" nameday on november 23
+"ÎαÏεÏίνα, ÎεÏκοÏÏιοÏ" nameday on november 25
+"ΣÏÎλιοÏ, ΣÏÎλλα, ΣÏÎÏγιοÏ" nameday on november 26
+"ΦαίδÏα" nameday on november 29
+"ÎνδÏÎαÏ, ÎνδÏιάνα" nameday on november 30
+"ÎεÏκληÏοÏ, ÎακÏβ" nameday on december 1
+"ÎαÏβάÏα, ÎαμαÏκηνÏÏ" nameday on december 4
+"ΣάββαÏ, ΣαββοÏλα, ÎιογÎνηÏ" nameday on december 5
+"ÎίκοÏ, ÎικολÎÏα" nameday on december 6
+"ÎμβÏÏÏιοÏ" nameday on december 7
+"Îννα" nameday on december 9
+"ÎαÏÏν, Îδάμ, ÎαÏ
ίδ, Îανάη, ÎÏα, ÎÏαάκ, ÎÏβ, ΡαÏήλ, ΡοÏ
μÏίνη" nameday on sunday after ([december 11])
+"ΣÏÏÏοÏ, ΣÏÏ
ÏιδοÏλα" nameday on december 12
+"ÎÏ
ÏÏÏάÏιοÏ, ÎοÏ
κάÏ, ÎοÏ
κία, ÎÏηÏ" nameday on december 13
+"ÎλεÏ
θÎÏιοÏ, ÎλεÏ
θεÏία, Îνθή, ΣÏλβια" nameday on december 15
+"ÎιονÏÏηÏ, ÎιονÏ
Ïία, Îανιήλ, ΡεβÎκα, ΣεβαÏÏιανÏÏ, ΣεβαÏÏή" nameday on december 17
+"ÎαÏÏν, Îδάμ, ÎÏαάκ, ΡαÏήλ, ΣάÏα" nameday on december 17
+"ÎγλαÎα" nameday on december 19
+"ÎγνάÏιοÏ" nameday on december 20
+"ÎεμιÏÏοκλήÏ, ÎοÏ
λία" nameday on december 21
+"ÎναÏÏαÏία" nameday on december 22
+"ÎÏ
γÎνιοÏ, ÎÏ
γενία" nameday on december 24
+"ΧÏήÏÏοÏ, ΧÏιÏÏίνα, ΧÏÏÏα" nameday on december 25
+"ÎανÏληÏ, ÎμμανοÏ
Îλα" nameday on december 26
+"ΣÏÎÏανοÏ, ΣÏεÏανία" nameday on december 27
+"ÎÏμνα" nameday on december 28
+"ÎÏÏήÏ" nameday on december 30
diff --git a/kholidays/holidays/plan2/holiday_gt_es b/kholidays/holidays/plan2/holiday_gt_es
index 5af4495..4b6d650 100644
--- a/kholidays/holidays/plan2/holiday_gt_es
+++ b/kholidays/holidays/plan2/holiday_gt_es
@@ -17,27 +17,27 @@ language "es"
:description "(please add description in source language) National holiday file for Guatemala"
:: Public Holidays
-"Año nuevo" weekend on january 1
-"Reyes" weekend on january 6
-"Trabajo" weekend on march 19
-"Jueves Santo" weekend on easter minus 3 days
-"Viernes Santo" weekend on easter minus 2 days
-"Pentecostes" weekend on easter plus 49 days
-"Ejército" weekend on may 1
-"Virgen de la Asunción" weekend on august 15
-"Independencia" weekend on september 15
-"Revolucion de 1944" weekend on october 20
-"Todos los Santos" weekend on november 1
-"Nochebuena" weekend on december 24
-"Navidad" weekend on december 25
-"Fin de año" weekend on december 31
+"Año nuevo" public on january 1
+"Reyes" public on january 6
+"Trabajo" public on march 19
+"Jueves Santo" public on easter minus 3 days
+"Viernes Santo" public on easter minus 2 days
+"Pentecostes" public on easter plus 49 days
+"Ejército" public on may 1
+"Virgen de la Asunción" public on august 15
+"Independencia" public on september 15
+"Revolucion de 1944" public on october 20
+"Todos los Santos" public on november 1
+"Nochebuena" public on december 24
+"Navidad" public on december 25
+"Fin de año" public on december 31
:: Religious
-"Pascua" on easter
-"Miércoles de ceniza" on easter minus 46 days
-"Ascension" on easter plus 39 days
-"Trinidad" on easter plus 56 days
-"Corpus Christi" on easter plus 60 days
+"Pascua" religious on easter
+"Miércoles de ceniza" religious on easter minus 46 days
+"Ascension" religious on easter plus 39 days
+"Trinidad" religious on easter plus 56 days
+"Corpus Christi" religious on easter plus 60 days
:: Financial
@@ -48,9 +48,9 @@ language "es"
:: Daylight Saving
:: Seasons
-"Llega la Primavera" on march 20
-"Llega el Verano" on june 21
-"Llega el Otoño" on september 23
-"Llega el Invierno" on december 22
+"Llega la Primavera" seasonal on march 20
+"Llega el Verano" seasonal on june 21
+"Llega el Otoño" seasonal on september 23
+"Llega el Invierno" seasonal on december 22
:: Name Days
diff --git a/kholidays/holidays/plan2/holiday_hk_en-gb b/kholidays/holidays/plan2/holiday_hk_en-gb
index 9a51f72..be774cb 100644
--- a/kholidays/holidays/plan2/holiday_hk_en-gb
+++ b/kholidays/holidays/plan2/holiday_hk_en-gb
@@ -22,138 +22,138 @@ description "Public Holidays for Hong Kong"
:: Public/Statutory Holidays
: The first day of january (or if that day is a Sunday, then the following day)
-"New Year's Day" weekend on january 1
-"New Year's Day Holiday" weekend on ( ( [january 1] == [sunday after ([january 1])]) ?
+"New Year's Day" public on january 1
+"New Year's Day Holiday" public on ( ( [january 1] == [sunday after ([january 1])]) ?
[monday after ([january 1])] :
noop )
: Lunar New Year, Days 1-3 of Month 1
: (and if any day is a Sunday, then the day preceding Lunar New Year's Day)
-"Lunar New Year's Eve Holiday" weekend on 4 february 2000
-"Lunar New Year" weekend on 5 february 2000 length 3 days
-"Lunar New Year's Eve Holiday" weekend on 23 january 2001
-"Lunar New Year" weekend on 24 january 2001 length 3 days
-"Lunar New Year" weekend on 12 february 2002 length 3 days
-"Lunar New Year's Eve Holiday" weekend on 31 january 2003
-"Lunar New Year" weekend on 1 february 2003 length 3 days
-"Lunar New Year" weekend on 22 january 2004 length 3 days
-"Lunar New Year" weekend on 9 february 2005 length 3 days
-"Lunar New Year's Eve Holiday" weekend on 28 january 2006
-"Lunar New Year" weekend on 29 january 2006 length 3 days
-"Lunar New Year's Eve Holiday" weekend on 17 february 2007
-"Lunar New Year" weekend on 18 february 2007 length 3 days
-"Lunar New Year" weekend on 7 february 2008 length 3 days
-"Lunar New Year" weekend on 26 january 2009 length 3 days
-"Lunar New Year's Eve Holiday" weekend on 13 february 2010
-"Lunar New Year" weekend on 14 february 2010 length 3 days
-"Lunar New Year" weekend on 3 february 2011 length 3 days
-"Lunar New Year" weekend on 23 january 2012 length 3 days
-"Lunar New Year" weekend on 10 february 2013 length 3 days
-"Lunar New Year's Eve Holiday" weekend on 30 january 2014
-"Lunar New Year" weekend on 31 january 2014 length 3 days
-"Lunar New Year" weekend on 19 february 2015 length 3 days
-"Lunar New Year" weekend on 8 february 2016 length 3 days
-"Lunar New Year's Eve Holiday" weekend on 27 january 2017
-"Lunar New Year" weekend on 28 january 2017 length 3 days
-"Lunar New Year's Eve Holiday" weekend on 15 february
-"Lunar New Year" weekend on 16 february 2018 length 3 days
-"Lunar New Year" weekend on 5 february 2019 length 3 days
-"Lunar New Year's Eve Holiday" weekend on 24 january
-"Lunar New Year" weekend on 25 january 2020 length 3 days
+"Lunar New Year's Eve Holiday" public on 4 february 2000
+"Lunar New Year" public on 5 february 2000 length 3 days
+"Lunar New Year's Eve Holiday" public on 23 january 2001
+"Lunar New Year" public on 24 january 2001 length 3 days
+"Lunar New Year" public on 12 february 2002 length 3 days
+"Lunar New Year's Eve Holiday" public on 31 january 2003
+"Lunar New Year" public on 1 february 2003 length 3 days
+"Lunar New Year" public on 22 january 2004 length 3 days
+"Lunar New Year" public on 9 february 2005 length 3 days
+"Lunar New Year's Eve Holiday" public on 28 january 2006
+"Lunar New Year" public on 29 january 2006 length 3 days
+"Lunar New Year's Eve Holiday" public on 17 february 2007
+"Lunar New Year" public on 18 february 2007 length 3 days
+"Lunar New Year" public on 7 february 2008 length 3 days
+"Lunar New Year" public on 26 january 2009 length 3 days
+"Lunar New Year's Eve Holiday" public on 13 february 2010
+"Lunar New Year" public on 14 february 2010 length 3 days
+"Lunar New Year" public on 3 february 2011 length 3 days
+"Lunar New Year" public on 23 january 2012 length 3 days
+"Lunar New Year" public on 10 february 2013 length 3 days
+"Lunar New Year's Eve Holiday" public on 30 january 2014
+"Lunar New Year" public on 31 january 2014 length 3 days
+"Lunar New Year" public on 19 february 2015 length 3 days
+"Lunar New Year" public on 8 february 2016 length 3 days
+"Lunar New Year's Eve Holiday" public on 27 january 2017
+"Lunar New Year" public on 28 january 2017 length 3 days
+"Lunar New Year's Eve Holiday" public on 15 february
+"Lunar New Year" public on 16 february 2018 length 3 days
+"Lunar New Year" public on 5 february 2019 length 3 days
+"Lunar New Year's Eve Holiday" public on 24 january
+"Lunar New Year" public on 25 january 2020 length 3 days
: Ching Ming Festival. See https://bugs.kde.org/show_bug.cgi?id=317834#c4
-"Ching Ming Festival" weekend on 5 april 2010
-"Ching Ming Festival" weekend on 5 april 2011
-"Ching Ming Festival" weekend on 4 april 2012
-"Ching Ming Festival" weekend on 4 april 2013
-"Ching Ming Festival" weekend on 5 april 2014
-"Ching Ming Festival" weekend on 5 april 2015
-"Ching Ming Festival" weekend on 4 april 2016
-"Ching Ming Festival" weekend on 4 april 2017
-"Ching Ming Festival" weekend on 5 april 2018
-"Ching Ming Festival" weekend on 5 april 2019
-"Ching Ming Festival" weekend on 4 april 2020
+"Ching Ming Festival" public on 5 april 2010
+"Ching Ming Festival" public on 5 april 2011
+"Ching Ming Festival" public on 4 april 2012
+"Ching Ming Festival" public on 4 april 2013
+"Ching Ming Festival" public on 5 april 2014
+"Ching Ming Festival" public on 5 april 2015
+"Ching Ming Festival" public on 4 april 2016
+"Ching Ming Festival" public on 4 april 2017
+"Ching Ming Festival" public on 5 april 2018
+"Ching Ming Festival" public on 5 april 2019
+"Ching Ming Festival" public on 4 april 2020
: Labour Day (or if that day is a Sunday, then the following day)
-"Labour Day" weekend on may 1
-"Labour Day Holiday" weekend on ( ( [may 1] == [sunday after ([may 1])]) ?
+"Labour Day" public on may 1
+"Labour Day Holiday" public on ( ( [may 1] == [sunday after ([may 1])]) ?
[monday after ([may 1])] :
noop )
: Tuen Ng Festival Day 5 of Month 5 (or if that day is a Sunday, then the following day)
-"Tuen Ng Festival" weekend on 6 june 2000
-"Tuen Ng Festival" weekend on 25 june 2001
-"Tuen Ng Festival" weekend on 15 june 2002
-"Tuen Ng Festival" weekend on 4 june 2003
-"Tuen Ng Festival" weekend on 22 june 2004
-"Tuen Ng Festival" weekend on 11 june 2005
-"Tuen Ng Festival" weekend on 31 may 2006
-"Tuen Ng Festival" weekend on 19 june 2007
-"Tuen Ng Festival" weekend on 8 June 2008
-"Tuen Ng Festival Holiday" weekend on 9 June 2008
-"Tuen Ng Festival" weekend on 27 may 2009
-"Tuen Ng Festival" weekend on 16 june 2010
-"Tuen Ng Festival" weekend on 6 june 2011
-"Tuen Ng Festival" weekend on 23 june 2012
-"Tuen Ng Festival" weekend on 12 june 2013
-"Tuen Ng Festival" weekend on 2 june 2014
-"Tuen Ng Festival" weekend on 20 june 2015
-"Tuen Ng Festival" weekend on 9 june 2016
-"Tuen Ng Festival" weekend on 30 may 2017
-"Tuen Ng Festival" weekend on 18 june 2018
-"Tuen Ng Festival" weekend on 7 june 2019
-"Tuen Ng Festival" weekend on 25 june 2020
+"Tuen Ng Festival" public on 6 june 2000
+"Tuen Ng Festival" public on 25 june 2001
+"Tuen Ng Festival" public on 15 june 2002
+"Tuen Ng Festival" public on 4 june 2003
+"Tuen Ng Festival" public on 22 june 2004
+"Tuen Ng Festival" public on 11 june 2005
+"Tuen Ng Festival" public on 31 may 2006
+"Tuen Ng Festival" public on 19 june 2007
+"Tuen Ng Festival" public on 8 June 2008
+"Tuen Ng Festival Holiday" public on 9 June 2008
+"Tuen Ng Festival" public on 27 may 2009
+"Tuen Ng Festival" public on 16 june 2010
+"Tuen Ng Festival" public on 6 june 2011
+"Tuen Ng Festival" public on 23 june 2012
+"Tuen Ng Festival" public on 12 june 2013
+"Tuen Ng Festival" public on 2 june 2014
+"Tuen Ng Festival" public on 20 june 2015
+"Tuen Ng Festival" public on 9 june 2016
+"Tuen Ng Festival" public on 30 may 2017
+"Tuen Ng Festival" public on 18 june 2018
+"Tuen Ng Festival" public on 7 june 2019
+"Tuen Ng Festival" public on 25 june 2020
: Hong Kong SAR Establishment Day (or if that day is a Sunday, then the following day)
-"Hong Kong SAR Establishment Day" weekend on july 1
-"Hong Kong SAR Establishment Day Holiday" weekend on ( ( [july 1] == [sunday after ([july 1])]) ?
+"Hong Kong SAR Establishment Day" public on july 1
+"Hong Kong SAR Establishment Day Holiday" public on ( ( [july 1] == [sunday after ([july 1])]) ?
[monday after ([july 1])] :
noop )
: The day following the Chinese Mid-Autumn Festival, Day 16 of Month 8 (or if that day is a Sunday, then the preceding day)
-"Mid-Autumn Festival Holiday" weekend on 13 september 2000
-"Mid-Autumn Festival Holiday" weekend on 2 october 2001
-"Mid-Autumn Festival Holiday" weekend on 22 september 2002
-"Mid-Autumn Festival Holiday" weekend on 12 september 2003
-"Mid-Autumn Festival Holiday" weekend on 29 september 2004
-"Mid-Autumn Festival Holiday" weekend on 19 september 2005
-"Mid-Autumn Festival Holiday" weekend on 7 october 2006
-"Mid-Autumn Festival Holiday" weekend on 26 september 2007
-"Mid-Autumn Festival Holiday" weekend on 15 september 2008
-"Mid-Autumn Festival Holiday" weekend on 3 october 2009
-"Mid-Autumn Festival Holiday" weekend on 23 september 2010
-"Mid-Autumn Festival Holiday" weekend on 13 september 2011
-"Mid-Autumn Festival Holiday" weekend on 1 october 2012
-"Mid-Autumn Festival Holiday" weekend on 20 september 2013
-"Mid-Autumn Festival Holiday" weekend on 9 september 2014
-"Mid-Autumn Festival Holiday" weekend on 28 september 2015
-"Mid-Autumn Festival Holiday" weekend on 16 september 2016
-"Mid-Autumn Festival Holiday" weekend on 5 october 2017
-"Mid-Autumn Festival Holiday" weekend on 25 september 2018
-"Mid-Autumn Festival Holiday" weekend on 14 september 2019
-"Mid-Autumn Festival Holiday" weekend on 2 october 2020
+"Mid-Autumn Festival Holiday" public on 13 september 2000
+"Mid-Autumn Festival Holiday" public on 2 october 2001
+"Mid-Autumn Festival Holiday" public on 22 september 2002
+"Mid-Autumn Festival Holiday" public on 12 september 2003
+"Mid-Autumn Festival Holiday" public on 29 september 2004
+"Mid-Autumn Festival Holiday" public on 19 september 2005
+"Mid-Autumn Festival Holiday" public on 7 october 2006
+"Mid-Autumn Festival Holiday" public on 26 september 2007
+"Mid-Autumn Festival Holiday" public on 15 september 2008
+"Mid-Autumn Festival Holiday" public on 3 october 2009
+"Mid-Autumn Festival Holiday" public on 23 september 2010
+"Mid-Autumn Festival Holiday" public on 13 september 2011
+"Mid-Autumn Festival Holiday" public on 1 october 2012
+"Mid-Autumn Festival Holiday" public on 20 september 2013
+"Mid-Autumn Festival Holiday" public on 9 september 2014
+"Mid-Autumn Festival Holiday" public on 28 september 2015
+"Mid-Autumn Festival Holiday" public on 16 september 2016
+"Mid-Autumn Festival Holiday" public on 5 october 2017
+"Mid-Autumn Festival Holiday" public on 25 september 2018
+"Mid-Autumn Festival Holiday" public on 14 september 2019
+"Mid-Autumn Festival Holiday" public on 2 october 2020
: Chung Yeung Festival, Day 9 of Month 9 (or if that day is a Sunday, then the following day)
-"Chung Yeung Festival" weekend on 6 october 2000
-"Chung Yeung Festival" weekend on 25 october 2001
-"Chung Yeung Festival" weekend on 14 october 2002
-"Chung Yeung Festival" weekend on 4 october 2003
-"Chung Yeung Festival" weekend on 22 october 2004
-"Chung Yeung Festival" weekend on 11 october 2005
-"Chung Yeung Festival" weekend on 30 october 2006
-"Chung Yeung Festival" weekend on 19 october 2007
-"Chung Yeung Festival" weekend on 7 october 2008
-"Chung Yeung Festival" weekend on 26 october 2009
-"Chung Yeung Festival" weekend on 5 october 2011
-"Chung Yeung Festival" weekend on 23 october 2012
-"Chung Yeung Festival" weekend on 13 october 2013
-"Chung Yeung Festival" weekend on 1 november 2014
-"Chung Yeung Festival" weekend on 21 october 2015
-"Chung Yeung Festival" weekend on 9 october 2016
-"Chung Yeung Festival Holiday" weekend on 10 october 2016
-"Chung Yeung Festival" weekend on 28 october 2017
-"Chung Yeung Festival" weekend on 17 october 2018
-"Chung Yeung Festival" weekend on 7 october 2019
-"Chung Yeung Festival" weekend on 25 october 2020
-"Chung Yeung Festival Holiday" weekend on 26 october 2020
+"Chung Yeung Festival" public on 6 october 2000
+"Chung Yeung Festival" public on 25 october 2001
+"Chung Yeung Festival" public on 14 october 2002
+"Chung Yeung Festival" public on 4 october 2003
+"Chung Yeung Festival" public on 22 october 2004
+"Chung Yeung Festival" public on 11 october 2005
+"Chung Yeung Festival" public on 30 october 2006
+"Chung Yeung Festival" public on 19 october 2007
+"Chung Yeung Festival" public on 7 october 2008
+"Chung Yeung Festival" public on 26 october 2009
+"Chung Yeung Festival" public on 5 october 2011
+"Chung Yeung Festival" public on 23 october 2012
+"Chung Yeung Festival" public on 13 october 2013
+"Chung Yeung Festival" public on 1 november 2014
+"Chung Yeung Festival" public on 21 october 2015
+"Chung Yeung Festival" public on 9 october 2016
+"Chung Yeung Festival Holiday" public on 10 october 2016
+"Chung Yeung Festival" public on 28 october 2017
+"Chung Yeung Festival" public on 17 october 2018
+"Chung Yeung Festival" public on 7 october 2019
+"Chung Yeung Festival" public on 25 october 2020
+"Chung Yeung Festival Holiday" public on 26 october 2020
: National Day (or if that day is a Sunday, then the following day)
-"National Day" weekend on october 1 shift to monday if sunday
+"National Day" public on october 1 shift to monday if sunday
: Christmas Day (or if that day is a Sunday, then the second weekday after Christmas Day)
-"Christmas Day" weekend on december 25
-"Christmas Day Holiday" weekend on ( ( [december 25] == [sunday after ([december 25])]) ?
+"Christmas Day" public religious on december 25
+"Christmas Day Holiday" public on ( ( [december 25] == [sunday after ([december 25])]) ?
[tuesday after ([december 25])] :
noop )
@@ -161,42 +161,42 @@ description "Public Holidays for Hong Kong"
:: Religious
: Good Friday
-"Good Friday" on easter minus 2
+"Good Friday" religious on easter minus 2
: The day following Good Friday
-"Day after Good Friday" on easter minus 1
+"Day after Good Friday" religious on easter minus 1
: Easter Monday
-"Easter Monday" on easter plus 1
+"Easter Monday" religious on easter plus 1
: The Birthday of the Buddha, Day 8 of Month 4 (or if that day is a Sunday, then the following day)
-"Buddha's Birthday" on 11 may 2000
-"Buddha's Birthday" on 30 may 2001
-"Buddha's Birthday" on 19 may 2002
-"Buddha's Birthday Holiday" on 19 may 2003
-"Buddha's Birthday" on 8 may 2003
-"Buddha's Birthday" on 26 may 2004
-"Buddha's Birthday" on 15 may 2005
-"Buddha's Birthday Holiday" on 16 may 2005
-"Buddha's Birthday" on 5 may 2006
-"Buddha's Birthday" on 24 may 2007
-"Buddha's Birthday" on 12 may 2008
-"Buddha's Birthday" on 2 may 2009
-"Buddha's Birthday" on 21 may 2010
-"Buddha's Birthday" on 10 may 2011
-"Buddha's Birthday" on 28 may 2012
-"Buddha's Birthday" on 17 may 2013
-"Buddha's Birthday" on 6 may 2014
-"Buddha's Birthday" on 25 may 2015
-"Buddha's Birthday" on 14 may 2016
-"Buddha's Birthday" on 3 may 2017
-"Buddha's Birthday" on 22 may 2018
-"Buddha's Birthday" on 12 may 2019
-"Buddha's Birthday Holiday" on 13 may 2019
-"Buddha's Birthday" on 30 may 2020
+"Buddha's Birthday" religious on 11 may 2000
+"Buddha's Birthday" religious on 30 may 2001
+"Buddha's Birthday" religious on 19 may 2002
+"Buddha's Birthday Holiday" religious on 19 may 2003
+"Buddha's Birthday" religious on 8 may 2003
+"Buddha's Birthday" religious on 26 may 2004
+"Buddha's Birthday" religious on 15 may 2005
+"Buddha's Birthday Holiday" religious on 16 may 2005
+"Buddha's Birthday" religious on 5 may 2006
+"Buddha's Birthday" religious on 24 may 2007
+"Buddha's Birthday" religious on 12 may 2008
+"Buddha's Birthday" religious on 2 may 2009
+"Buddha's Birthday" religious on 21 may 2010
+"Buddha's Birthday" religious on 10 may 2011
+"Buddha's Birthday" religious on 28 may 2012
+"Buddha's Birthday" religious on 17 may 2013
+"Buddha's Birthday" religious on 6 may 2014
+"Buddha's Birthday" religious on 25 may 2015
+"Buddha's Birthday" religious on 14 may 2016
+"Buddha's Birthday" religious on 3 may 2017
+"Buddha's Birthday" religious on 22 may 2018
+"Buddha's Birthday" religious on 12 may 2019
+"Buddha's Birthday Holiday" religious on 13 may 2019
+"Buddha's Birthday" religious on 30 may 2020
:: Financial
:: Cultural
: The first weekday after Christmas Day
-"Day after Christmas Day" on december 26 shift to monday if sunday
+"Day after Christmas Day" cultural on december 26 shift to monday if sunday
:: School
diff --git a/kholidays/holidays/plan2/holiday_hk_zh-cn b/kholidays/holidays/plan2/holiday_hk_zh-cn
index 8178664..b1eee42 100644
--- a/kholidays/holidays/plan2/holiday_hk_zh-cn
+++ b/kholidays/holidays/plan2/holiday_hk_zh-cn
@@ -22,138 +22,138 @@ description "Public Holidays for Hong Kong"
:: Public/Statutory Holidays
: The first day of january (or if that day is a Sunday, then the following day)
-"1æ1æ¥" weekend on january 1
-"1æ1æ¥" weekend on ( ( [january 1] == [sunday after ([january 1])]) ?
+"1æ1æ¥" public on january 1
+"1æ1æ¥" public on ( ( [january 1] == [sunday after ([january 1])]) ?
[monday after ([january 1])] :
noop )
: Lunar New Year, Days 1-3 of Month 1
: (and if any day is a Sunday, then the day preceding Lunar New Year's Day)
-"è¾²æå¹´å" weekend on 4 february 2000
-"è¾²æå¹´å" weekend on 5 february 2000 length 3 days
-"è¾²æå¹´å" weekend on 23 january 2001
-"è¾²æå¹´å" weekend on 24 january 2001 length 3 days
-"è¾²æå¹´å" weekend on 12 february 2002 length 3 days
-"è¾²æå¹´å" weekend on 31 january 2003
-"è¾²æå¹´å" weekend on 1 february 2003 length 3 days
-"è¾²æå¹´å" weekend on 22 january 2004 length 3 days
-"è¾²æå¹´å" weekend on 9 february 2005 length 3 days
-"è¾²æå¹´å" weekend on 28 january 2006
-"è¾²æå¹´å" weekend on 29 january 2006 length 3 days
-"è¾²æå¹´å" weekend on 17 february 2007
-"è¾²æå¹´å" weekend on 18 february 2007 length 3 days
-"è¾²æå¹´å" weekend on 7 february 2008 length 3 days
-"è¾²æå¹´å" weekend on 26 january 2009 length 3 days
-"è¾²æå¹´å" weekend on 13 february 2010
-"è¾²æå¹´å" weekend on 14 february 2010 length 3 days
-"è¾²æå¹´å" weekend on 3 february 2011 length 3 days
-"è¾²æå¹´å" weekend on 23 january 2012 length 3 days
-"è¾²æå¹´å" weekend on 10 february 2013 length 3 days
-"è¾²æå¹´å" weekend on 30 january 2014
-"è¾²æå¹´å" weekend on 31 january 2014 length 3 days
-"è¾²æå¹´å" weekend on 19 february 2015 length 3 days
-"è¾²æå¹´å" weekend on 8 february 2016 length 3 days
-"è¾²æå¹´å" weekend on 27 january 2017
-"è¾²æå¹´å" weekend on 28 january 2017 length 3 days
-"è¾²æå¹´å" weekend on 15 february
-"è¾²æå¹´å" weekend on 16 february 2018 length 3 days
-"è¾²æå¹´å" weekend on 5 february 2019 length 3 days
-"è¾²æå¹´å" weekend on 24 january
-"è¾²æå¹´å" weekend on 25 january 2018 length 3 days
+"è¾²æå¹´å" public on 4 february 2000
+"è¾²æå¹´å" public on 5 february 2000 length 3 days
+"è¾²æå¹´å" public on 23 january 2001
+"è¾²æå¹´å" public on 24 january 2001 length 3 days
+"è¾²æå¹´å" public on 12 february 2002 length 3 days
+"è¾²æå¹´å" public on 31 january 2003
+"è¾²æå¹´å" public on 1 february 2003 length 3 days
+"è¾²æå¹´å" public on 22 january 2004 length 3 days
+"è¾²æå¹´å" public on 9 february 2005 length 3 days
+"è¾²æå¹´å" public on 28 january 2006
+"è¾²æå¹´å" public on 29 january 2006 length 3 days
+"è¾²æå¹´å" public on 17 february 2007
+"è¾²æå¹´å" public on 18 february 2007 length 3 days
+"è¾²æå¹´å" public on 7 february 2008 length 3 days
+"è¾²æå¹´å" public on 26 january 2009 length 3 days
+"è¾²æå¹´å" public on 13 february 2010
+"è¾²æå¹´å" public on 14 february 2010 length 3 days
+"è¾²æå¹´å" public on 3 february 2011 length 3 days
+"è¾²æå¹´å" public on 23 january 2012 length 3 days
+"è¾²æå¹´å" public on 10 february 2013 length 3 days
+"è¾²æå¹´å" public on 30 january 2014
+"è¾²æå¹´å" public on 31 january 2014 length 3 days
+"è¾²æå¹´å" public on 19 february 2015 length 3 days
+"è¾²æå¹´å" public on 8 february 2016 length 3 days
+"è¾²æå¹´å" public on 27 january 2017
+"è¾²æå¹´å" public on 28 january 2017 length 3 days
+"è¾²æå¹´å" public on 15 february
+"è¾²æå¹´å" public on 16 february 2018 length 3 days
+"è¾²æå¹´å" public on 5 february 2019 length 3 days
+"è¾²æå¹´å" public on 24 january
+"è¾²æå¹´å" public on 25 january 2018 length 3 days
: Ching Ming Festival. See https://bugs.kde.org/show_bug.cgi?id=317834#c4
-"æ¸
æç¯" weekend on 5 april 2010
-"æ¸
æç¯" weekend on 5 april 2011
-"æ¸
æç¯" weekend on 4 april 2012
-"æ¸
æç¯" weekend on 4 april 2013
-"æ¸
æç¯" weekend on 5 april 2014
-"æ¸
æç¯" weekend on 5 april 2015
-"æ¸
æç¯" weekend on 4 april 2016
-"æ¸
æç¯" weekend on 4 april 2017
-"æ¸
æç¯" weekend on 5 april 2018
-"æ¸
æç¯" weekend on 5 april 2019
-"æ¸
æç¯" weekend on 4 april 2020
+"æ¸
æç¯" public on 5 april 2010
+"æ¸
æç¯" public on 5 april 2011
+"æ¸
æç¯" public on 4 april 2012
+"æ¸
æç¯" public on 4 april 2013
+"æ¸
æç¯" public on 5 april 2014
+"æ¸
æç¯" public on 5 april 2015
+"æ¸
æç¯" public on 4 april 2016
+"æ¸
æç¯" public on 4 april 2017
+"æ¸
æç¯" public on 5 april 2018
+"æ¸
æç¯" public on 5 april 2019
+"æ¸
æç¯" public on 4 april 2020
: Labour Day (or if that day is a Sunday, then the following day)
-"ååç¯" weekend on may 1
-"ååç¯" weekend on ( ( [may 1] == [sunday after ([may 1])]) ?
+"ååç¯" public on may 1
+"ååç¯" public on ( ( [may 1] == [sunday after ([may 1])]) ?
[monday after ([may 1])] :
noop )
: Tuen Ng Festival Day 5 of Month 5 (or if that day is a Sunday, then the following day)
-"端åç¯" weekend on 6 june 2000
-"端åç¯" weekend on 25 june 2001
-"端åç¯" weekend on 15 june 2002
-"端åç¯" weekend on 4 june 2003
-"端åç¯" weekend on 22 june 2004
-"端åç¯" weekend on 11 june 2005
-"端åç¯" weekend on 31 may 2006
-"端åç¯" weekend on 19 june 2007
-"端åç¯" weekend on 8 June 2008
-"端åç¯" weekend on 9 June 2008
-"端åç¯" weekend on 27 may 2009
-"端åç¯" weekend on 16 june 2010
-"端åç¯" weekend on 6 june 2011
-"端åç¯" weekend on 23 june 2012
-"端åç¯" weekend on 12 june 2013
-"端åç¯" weekend on 2 june 2014
-"端åç¯" weekend on 20 june 2015
-"端åç¯" weekend on 9 june 2016
-"端åç¯" weekend on 30 may 2017
-"端åç¯" weekend on 18 june 2018
-"端åç¯" weekend on 7 june 2019
-"端åç¯" weekend on 25 june 2020
+"端åç¯" public on 6 june 2000
+"端åç¯" public on 25 june 2001
+"端åç¯" public on 15 june 2002
+"端åç¯" public on 4 june 2003
+"端åç¯" public on 22 june 2004
+"端åç¯" public on 11 june 2005
+"端åç¯" public on 31 may 2006
+"端åç¯" public on 19 june 2007
+"端åç¯" public on 8 June 2008
+"端åç¯" public on 9 June 2008
+"端åç¯" public on 27 may 2009
+"端åç¯" public on 16 june 2010
+"端åç¯" public on 6 june 2011
+"端åç¯" public on 23 june 2012
+"端åç¯" public on 12 june 2013
+"端åç¯" public on 2 june 2014
+"端åç¯" public on 20 june 2015
+"端åç¯" public on 9 june 2016
+"端åç¯" public on 30 may 2017
+"端åç¯" public on 18 june 2018
+"端åç¯" public on 7 june 2019
+"端åç¯" public on 25 june 2020
: Hong Kong SAR Establishment Day (or if that day is a Sunday, then the following day)
-"é¦æ¸¯ç¹å¥è¡æ¿åæç«ç´å¿µæ¥" weekend on july 1
-"é¦æ¸¯ç¹å¥è¡æ¿åæç«ç´å¿µæ¥" weekend on ( ( [july 1] == [sunday after ([july 1])]) ?
+"é¦æ¸¯ç¹å¥è¡æ¿åæç«ç´å¿µæ¥" public on july 1
+"é¦æ¸¯ç¹å¥è¡æ¿åæç«ç´å¿µæ¥" public on ( ( [july 1] == [sunday after ([july 1])]) ?
[monday after ([july 1])] :
noop )
: The day following the Chinese Mid-Autumn Festival, Day 16 of Month 8 (or if that day is a Sunday, then the preceding day)
-"ä¸ç§ç¯ç¿æ¥" weekend on 13 september 2000
-"ä¸ç§ç¯ç¿æ¥" weekend on 2 october 2001
-"ä¸ç§ç¯ç¿æ¥" weekend on 22 september 2002
-"ä¸ç§ç¯ç¿æ¥" weekend on 12 september 2003
-"ä¸ç§ç¯ç¿æ¥" weekend on 29 september 2004
-"ä¸ç§ç¯ç¿æ¥" weekend on 19 september 2005
-"ä¸ç§ç¯ç¿æ¥" weekend on 7 october 2006
-"ä¸ç§ç¯ç¿æ¥" weekend on 26 september 2007
-"ä¸ç§ç¯ç¿æ¥" weekend on 15 september 2008
-"ä¸ç§ç¯ç¿æ¥" weekend on 3 october 2009
-"ä¸ç§ç¯ç¿æ¥" weekend on 23 september 2010
-"ä¸ç§ç¯ç¿æ¥" weekend on 13 september 2011
-"ä¸ç§ç¯ç¿æ¥" weekend on 1 october 2012
-"ä¸ç§ç¯ç¿æ¥" weekend on 20 september 2013
-"ä¸ç§ç¯ç¿æ¥" weekend on 9 september 2014
-"ä¸ç§ç¯ç¿æ¥" weekend on 28 september 2015
-"ä¸ç§ç¯ç¿æ¥" weekend on 16 september 2016
-"ä¸ç§ç¯ç¿æ¥" weekend on 5 october 2017
-"ä¸ç§ç¯ç¿æ¥" weekend on 25 september 2018
-"ä¸ç§ç¯ç¿æ¥" weekend on 14 september 2019
-"ä¸ç§ç¯ç¿æ¥" weekend on 2 october 2020
+"ä¸ç§ç¯ç¿æ¥" public on 13 september 2000
+"ä¸ç§ç¯ç¿æ¥" public on 2 october 2001
+"ä¸ç§ç¯ç¿æ¥" public on 22 september 2002
+"ä¸ç§ç¯ç¿æ¥" public on 12 september 2003
+"ä¸ç§ç¯ç¿æ¥" public on 29 september 2004
+"ä¸ç§ç¯ç¿æ¥" public on 19 september 2005
+"ä¸ç§ç¯ç¿æ¥" public on 7 october 2006
+"ä¸ç§ç¯ç¿æ¥" public on 26 september 2007
+"ä¸ç§ç¯ç¿æ¥" public on 15 september 2008
+"ä¸ç§ç¯ç¿æ¥" public on 3 october 2009
+"ä¸ç§ç¯ç¿æ¥" public on 23 september 2010
+"ä¸ç§ç¯ç¿æ¥" public on 13 september 2011
+"ä¸ç§ç¯ç¿æ¥" public on 1 october 2012
+"ä¸ç§ç¯ç¿æ¥" public on 20 september 2013
+"ä¸ç§ç¯ç¿æ¥" public on 9 september 2014
+"ä¸ç§ç¯ç¿æ¥" public on 28 september 2015
+"ä¸ç§ç¯ç¿æ¥" public on 16 september 2016
+"ä¸ç§ç¯ç¿æ¥" public on 5 october 2017
+"ä¸ç§ç¯ç¿æ¥" public on 25 september 2018
+"ä¸ç§ç¯ç¿æ¥" public on 14 september 2019
+"ä¸ç§ç¯ç¿æ¥" public on 2 october 2020
: Chung Yeung Festival, Day 9 of Month 9 (or if that day is a Sunday, then the following day)
-"éé½ç¯" weekend on 6 october 2000
-"éé½ç¯" weekend on 25 october 2001
-"éé½ç¯" weekend on 14 october 2002
-"éé½ç¯" weekend on 4 october 2003
-"éé½ç¯" weekend on 22 october 2004
-"éé½ç¯" weekend on 11 october 2005
-"éé½ç¯" weekend on 30 october 2006
-"éé½ç¯" weekend on 19 october 2007
-"éé½ç¯" weekend on 7 october 2008
-"éé½ç¯" weekend on 26 october 2009
-"éé½ç¯" weekend on 5 october 2011
-"éé½ç¯" weekend on 23 october 2012
-"éé½ç¯" weekend on 13 october 2013
-"éé½ç¯" weekend on 1 november 2014
-"éé½ç¯" weekend on 21 october 2015
-"éé½ç¯" weekend on 9 october 2016
-"éé½ç¯" weekend on 10 october 2016
-"éé½ç¯" weekend on 28 october 2017
-"éé½ç¯" weekend on 17 october 2018
-"éé½ç¯" weekend on 7 october 2019
-"éé½ç¯" weekend on 25 october 2020
-"éé½ç¯" weekend on 26 october 2020
+"éé½ç¯" public on 6 october 2000
+"éé½ç¯" public on 25 october 2001
+"éé½ç¯" public on 14 october 2002
+"éé½ç¯" public on 4 october 2003
+"éé½ç¯" public on 22 october 2004
+"éé½ç¯" public on 11 october 2005
+"éé½ç¯" public on 30 october 2006
+"éé½ç¯" public on 19 october 2007
+"éé½ç¯" public on 7 october 2008
+"éé½ç¯" public on 26 october 2009
+"éé½ç¯" public on 5 october 2011
+"éé½ç¯" public on 23 october 2012
+"éé½ç¯" public on 13 october 2013
+"éé½ç¯" public on 1 november 2014
+"éé½ç¯" public on 21 october 2015
+"éé½ç¯" public on 9 october 2016
+"éé½ç¯" public on 10 october 2016
+"éé½ç¯" public on 28 october 2017
+"éé½ç¯" public on 17 october 2018
+"éé½ç¯" public on 7 october 2019
+"éé½ç¯" public on 25 october 2020
+"éé½ç¯" public on 26 october 2020
: National Day (or if that day is a Sunday, then the following day)
-"åæ
¶æ¥" weekend on october 1 shift to monday if sunday
+"åæ
¶æ¥" public on october 1 shift to monday if sunday
: Christmas Day (or if that day is a Sunday, then the second weekday after Christmas Day)
-"èèªç¯å¾ç¬¬ä¸åå¨æ¥" weekend on december 25
-"èèªç¯å¾ç¬¬ä¸åå¨æ¥" weekend on ( ( [december 25] == [sunday after ([december 25])]) ?
+"èèªç¯å¾ç¬¬ä¸åå¨æ¥" public religious on december 25
+"èèªç¯å¾ç¬¬ä¸åå¨æ¥" public on ( ( [december 25] == [sunday after ([december 25])]) ?
[tuesday after ([december 25])] :
noop )
@@ -161,42 +161,42 @@ description "Public Holidays for Hong Kong"
:: Religious
: Good Friday
-"è¶ç©åé£ç¯" on easter minus 2
+"è¶ç©åé£ç¯" religious on easter minus 2
: The day following Good Friday
-"è¶ç©åé£ç¯ç¿æ¥" on easter minus 1
+"è¶ç©åé£ç¯ç¿æ¥" religious on easter minus 1
: Easter Monday
-"復活ç¯ææä¸" on easter plus 1
+"復活ç¯ææä¸" religious on easter plus 1
: The Birthday of the Buddha, Day 8 of Month 4 (or if that day is a Sunday, then the following day)
-"ä½èª" on 11 may 2000
-"ä½èª" on 30 may 2001
-"ä½èª" on 19 may 2002
-"ä½èª" on 19 may 2003
-"ä½èª" on 8 may 2003
-"ä½èª" on 26 may 2004
-"ä½èª" on 15 may 2005
-"ä½èª" on 16 may 2005
-"ä½èª" on 5 may 2006
-"ä½èª" on 24 may 2007
-"ä½èª" on 12 may 2008
-"ä½èª" on 2 may 2009
-"ä½èª" on 21 may 2010
-"ä½èª" on 10 may 2011
-"ä½èª" on 28 may 2012
-"ä½èª" on 17 may 2013
-"ä½èª" on 6 may 2014
-"ä½èª" on 25 may 2015
-"ä½èª" on 14 may 2016
-"ä½èª" on 3 may 2017
-"ä½èª" on 22 may 2018
-"ä½èª" on 12 may 2019
-"ä½èª" on 13 may 2019
-"ä½èª" on 30 may 2020
+"ä½èª" religious on 11 may 2000
+"ä½èª" religious on 30 may 2001
+"ä½èª" religious on 19 may 2002
+"ä½èª" religious on 19 may 2003
+"ä½èª" religious on 8 may 2003
+"ä½èª" religious on 26 may 2004
+"ä½èª" religious on 15 may 2005
+"ä½èª" religious on 16 may 2005
+"ä½èª" religious on 5 may 2006
+"ä½èª" religious on 24 may 2007
+"ä½èª" religious on 12 may 2008
+"ä½èª" religious on 2 may 2009
+"ä½èª" religious on 21 may 2010
+"ä½èª" religious on 10 may 2011
+"ä½èª" religious on 28 may 2012
+"ä½èª" religious on 17 may 2013
+"ä½èª" religious on 6 may 2014
+"ä½èª" religious on 25 may 2015
+"ä½èª" religious on 14 may 2016
+"ä½èª" religious on 3 may 2017
+"ä½èª" religious on 22 may 2018
+"ä½èª" religious on 12 may 2019
+"ä½èª" religious on 13 may 2019
+"ä½èª" religious on 30 may 2020
:: Financial
:: Cultural
: The first weekday after Christmas Day
-"èèªç¯" on december 26 shift to monday if sunday
+"èèªç¯" cultural on december 26 shift to monday if sunday
:: School
diff --git a/kholidays/holidays/plan2/holiday_hr_hr b/kholidays/holidays/plan2/holiday_hr_hr
index 88e6616..377e4fb 100644
--- a/kholidays/holidays/plan2/holiday_hr_hr
+++ b/kholidays/holidays/plan2/holiday_hr_hr
@@ -22,67 +22,67 @@ language "hr"
description "Datoteka s blagdanima, spomendanima i neradnim danima u Hrvatskoj"
:: Public Holidays
-"Nova godina" weekend on january 1
-"Sveta tri kralja" weekend on january 6
-"Uskrsni ponedjeljak" weekend on easter plus 1 day
-"Tijelovo" weekend on easter plus 60 days
-"Praznik rada" weekend on may 1
-"Dan antifaÅ¡istiÄke borbe" weekend on june 22
-"Dan državnosti" weekend on june 25
-"Dan pobjede i domovinske zahvalnosti i Dan hrvatskih branitelja" weekend on august 5
-"Velika Gospa" weekend on august 15
-"Dan neovisnosti" weekend on october 8
-"Svi sveti" weekend on november 1
-"BožiÄ" weekend on december 25
-"Sveti Stjepan" weekend on december 26
+"Nova godina" public on january 1
+"Sveta tri kralja" public religious on january 6
+"Uskrsni ponedjeljak" public religious on easter plus 1 day
+"Tijelovo" public religious on easter plus 60 days
+"Praznik rada" public on may 1
+"Dan antifaÅ¡istiÄke borbe" public on june 22
+"Dan državnosti" public on june 25
+"Dan pobjede i domovinske zahvalnosti i Dan hrvatskih branitelja" public on august 5
+"Velika Gospa" public on august 15
+"Dan neovisnosti" public on october 8
+"Svi sveti" public on november 1
+"BožiÄ" public religious on december 25
+"Sveti Stjepan" public on december 26
:: Religious Holidays
-"Uskrs" on easter
-"Pepelnica" on easter minus 46 days
-"Veliki Äetvrtak" on easter minus 3 days
-"Veliki petak" on easter minus 2 days
-"Velika subota" on easter minus 1 day
-"Duhovi" on easter plus 49 days
-"Presveto Trojstvo" on easter plus 56 days
+"Uskrs" religious on easter
+"Pepelnica" religious on easter minus 46 days
+"Veliki Äetvrtak" religious on easter minus 3 days
+"Veliki petak" religious on easter minus 2 days
+"Velika subota" religious on easter minus 1 day
+"Duhovi" religious on easter plus 49 days
+"Presveto Trojstvo" religious on easter plus 56 days
:: Financial
:: Cultural
-"Valentinovo" on february 14
-"MeÄunarodni dan žena" on march 8
-"Svjetski dan kazališta" on march 27
-"Dan slobodnih dokumenata" on last wednesday in march
-"Prvotravanjska Å¡ala" on april 1
-"Svjetski dan smijeha" on first sunday in may
-"MajÄin dan" on second sunday in may
-"Svjetski dan informacijskog društva" on may 17
-"Dan oÄeva" on third sunday in june
-"MeÄunarodni dan mladih" on august 12
-"Dan slobodnog softvera" on third saturday in september
-"MeÄunarodni dan mira" on september 21
-"Dan sjeÄanja na Vukovar" on november 18
-"Dan hrvatskog kazališta" on november 24
-"MeÄunarodni dan volontera" on december 5
-"Sveti Nikola" on december 6
+"Valentinovo" cultural on february 14
+"MeÄunarodni dan žena" cultural on march 8
+"Svjetski dan kazališta" cultural on march 27
+"Dan slobodnih dokumenata" cultural on last wednesday in march
+"Prvotravanjska Å¡ala" cultural on april 1
+"Svjetski dan smijeha" cultural on first sunday in may
+"MajÄin dan" cultural on second sunday in may
+"Svjetski dan informacijskog društva" cultural on may 17
+"Dan oÄeva" cultural on third sunday in june
+"MeÄunarodni dan mladih" cultural on august 12
+"Dan slobodnog softvera" cultural on third saturday in september
+"MeÄunarodni dan mira" cultural on september 21
+"Dan sjeÄanja na Vukovar" cultural on november 18
+"Dan hrvatskog kazališta" cultural on november 24
+"MeÄunarodni dan volontera" cultural on december 5
+"Sveti Nikola" cultural on december 6
:: School
-"PoÄetak Å¡kolske godine" on september 1
-"MeÄunarodni dan pismenosti (UNESCO)" on september 8
-"Europski dan jezika" on september 26
-"MeÄunarodni dan uÄitelja" on october 5
-"MeÄunarodni dan Å¡kolskih knjižnica" on october 24
+"PoÄetak Å¡kolske godine" school on september 1
+"MeÄunarodni dan pismenosti (UNESCO)" school on september 8
+"Europski dan jezika" school on september 26
+"MeÄunarodni dan uÄitelja" school on october 5
+"MeÄunarodni dan Å¡kolskih knjižnica" school on october 24
:: Daylight Saving
-"Ljetno raÄunanje vremena" on last sunday in march
-"Zimsko raÄunanje vremena" on last sunday in october
+"Ljetno raÄunanje vremena" seasonal on last sunday in march
+"Zimsko raÄunanje vremena" seasonal on last sunday in october
:: Seasons
-"Proljetna ravnodnevica (ekvinocij)" on march 20
-"Ljetna dugodnevica (solsticij)" on june 21
-"Jesenska ravnodnevica (ekvinocij)" on september 22
-"Zimska kratkodnevica (solsticij)" on december 21
+"Proljetna ravnodnevica (ekvinocij)" seasonal on march 20
+"Ljetna dugodnevica (solsticij)" seasonal on june 21
+"Jesenska ravnodnevica (ekvinocij)" seasonal on september 22
+"Zimska kratkodnevica (solsticij)" seasonal on december 21
:: Name Days
:: To be sorted
-"Dan Hrvatskoga sabora" on may 30
+"Dan Hrvatskoga sabora" civil on may 30
diff --git a/kholidays/holidays/plan2/holiday_hu_hu b/kholidays/holidays/plan2/holiday_hu_hu
index ad48a57..61b5d76 100644
--- a/kholidays/holidays/plan2/holiday_hu_hu
+++ b/kholidays/holidays/plan2/holiday_hu_hu
@@ -18,44 +18,44 @@ language "hu"
description "Nemzeti ünnepek és emléknapok magyarországon"
:: Public Holidays
-"Ãjév" weekend on january 1
-"Nemzeti ünnep: az 1848-as forradalom ünnepe" weekend on march 15
-"Húsvét" weekend on easter length 2 days
-"Pünkösd" weekend on easter plus 49 length 2 days
-"Munka ünnepe" weekend on may 1
-"Szent István, az államalapÃtás ünnepe" weekend on august 20
+"Ãjév" public on january 1
+"Nemzeti ünnep: az 1848-as forradalom ünnepe" public on march 15
+"Húsvét" public religious on easter length 2 days
+"Pünkösd" public religious on easter plus 49 length 2 days
+"Munka ünnepe" public on may 1
+"Szent István, az államalapÃtás ünnepe" public on august 20
"Nemzeti ünnep: Az 1956-os forradalom ünnepe, a 3. magyar köztársaság kikiáltásának napja"
- weekend on october 23
-"Karácsony" weekend on december 25 length 2 days
+ public on october 23
+"Karácsony" public religious on december 25 length 2 days
:: Religious
-"VÃzkereszt" on january 6
-"Nagypéntek" on friday before ([easter])
-"A reformáció napja" on october 31
-"Mindenszentek napja" on november 1
-"Advent elsŠvasárnapja" on sunday before december 24 minus 21
-"Advent második vasárnapja" on sunday before december 24 minus 14
-"Advent harmadik vasárnapja" on sunday before december 24 minus 7
-"Advent negyedik vasárnapja" on sunday before december 24
-"Szenteste" on december 24
+"VÃzkereszt" religious on january 6
+"Nagypéntek" religious on friday before ([easter])
+"A reformáció napja" religious on october 31
+"Mindenszentek napja" religious on november 1
+"Advent elsŠvasárnapja" religious on sunday before december 24 minus 21
+"Advent második vasárnapja" religious on sunday before december 24 minus 14
+"Advent harmadik vasárnapja" religious on sunday before december 24 minus 7
+"Advent negyedik vasárnapja" religious on sunday before december 24
+"Szenteste" religious on december 24
:: Financial
:: Cultural
-"A köztársaság napja" on february 1
-"Valentin" on february 14
-"A kommunista diktatúrák áldozatainak emléknapja" on february 25
-"NÅnap" on march 8
-"A holokauszt áldozatainak emléknapja" on april 16
-"Anyák napja" on first sunday in may
-"Gyermeknap" on last sunday in may
-"A nemzeti összetartozás napja" on june 4
-"A független Magyarország napja" on june 19
-"Szentivánéj" on june 24
-"Az aradi vértanúk emléknapja" on october 6
-"Halottak napja" on november 2
-"Mikulás" on december 6
-"Szilveszter" on december 31
+"A köztársaság napja" cultural on february 1
+"Valentin" cultural on february 14
+"A kommunista diktatúrák áldozatainak emléknapja" cultural on february 25
+"NÅnap" cultural on march 8
+"A holokauszt áldozatainak emléknapja" cultural on april 16
+"Anyák napja" cultural on first sunday in may
+"Gyermeknap" cultural on last sunday in may
+"A nemzeti összetartozás napja" cultural on june 4
+"A független Magyarország napja" cultural on june 19
+"Szentivánéj" cultural on june 24
+"Az aradi vértanúk emléknapja" cultural on october 6
+"Halottak napja" cultural on november 2
+"Mikulás" cultural on december 6
+"Szilveszter" cultural on december 31
:: School
diff --git a/kholidays/holidays/plan2/holiday_id_en-us b/kholidays/holidays/plan2/holiday_id_en-us
index 2509b91..d3f7e38 100644
--- a/kholidays/holidays/plan2/holiday_id_en-us
+++ b/kholidays/holidays/plan2/holiday_id_en-us
@@ -19,69 +19,69 @@ description "National Holiday file for Indonesia"
:: Public Holidays
: Tahun Baru Masehi
-"New Year's Day" weekend on january 1
+"New Year's Day" public on january 1
: Hari Proklamasi Kemerdekaan R.I.
-"Indonesian Independence Day" weekend on august 17
+"Indonesian Independence Day" public on august 17
:: Religious
: Hari Raya Galungan (lunar cal)
-"Balinese Galungan" on february 1 2012
+"Balinese Galungan" religious on february 1 2012
: Hari Raya Kuningan (lunar cal)
-"Balinese Kuningan" on february 11 2012
+"Balinese Kuningan" religious on february 11 2012
: Rabu Abu
-"Ash Wednesday" on easter minus 46 days
+"Ash Wednesday" religious on easter minus 46 days
: Hari Raya Nyepi (lunar cal)
-"Balinese New Year" weekend on march 23 2012
-"Balinese New Year" weekend on march 12 2013
+"Balinese New Year" public on march 23 2012
+"Balinese New Year" public on march 12 2013
: Maulid Nabi Muhammad SAW (hijri cal)
-"Mawlid" weekend on hijri rabialawal 12
+"Mawlid" public religious on hijri rabialawal 12
: Wafat Yesus Kristus
-"Good Friday" weekend on easter minus 2 days
+"Good Friday" public religious on easter minus 2 days
: Waisak (lunar cal)
-"Vesak" weekend on may 6 2012
-"Vesak" weekend on may 25 2013
+"Vesak" public religious on may 6 2012
+"Vesak" public religious on may 25 2013
: Kenaikan Yesus Kristus
-"Ascension Day" weekend on easter plus 39 days
+"Ascension Day" public religious on easter plus 39 days
: Isra Mi'raj Nabi Muhammad SAW (hijri cal)
-"Isra and Mi'raj" weekend on hijri rajab 27
+"Isra and Mi'raj" public religious on hijri rajab 27
: Day after Ramadan / Idul Fitri
: Idul Fitri (hijri cal)
-"Eid Al-Fitr" weekend on hijri shawwal 1 length 2 days
+"Eid Al-Fitr" public religious on hijri shawwal 1 length 2 days
: Idul Adha (hijri cal)
-"Eid Al-Adha" weekend on hijri thualhijjah 10
+"Eid Al-Adha" public religious on hijri thualhijjah 10
: Tahun Baru Hijriyah (hijri cal)
-"Islamic New Year" weekend on hijri muharram 1
+"Islamic New Year" public religious on hijri muharram 1
: Hari Natal
-"Christmas" weekend on december 25
+"Christmas" public religious on december 25
:: Financial
:: Cultural
: Tahun Baru Imlek (lunar cal)
-"Chinese New Year" weekend on january 23 2012
-"Chinese New Year" weekend on february 9 2013
-: Chinese New Year (from Hongkong kholyday file)
-"Chinese New Year" weekend on 31 january 2014
-"Chinese New Year" weekend on 19 february 2015
-"Chinese New Year" weekend on 8 february 2016
-"Chinese New Year" weekend on 28 january 2017
-"Chinese New Year" weekend on 16 february 2018
-"Chinese New Year" weekend on 5 february 2019
-"Chinese New Year" weekend on 25 january 2020
+"Chinese New Year" public on january 23 2012
+"Chinese New Year" public on february 9 2013
+: Chinese New Year (from Hong Kong kholiday file)
+"Chinese New Year" public on 31 january 2014
+"Chinese New Year" public on 19 february 2015
+"Chinese New Year" public on 8 february 2016
+"Chinese New Year" public on 28 january 2017
+"Chinese New Year" public on 16 february 2018
+"Chinese New Year" public on 5 february 2019
+"Chinese New Year" public on 25 january 2020
:: School
@@ -91,59 +91,59 @@ description "National Holiday file for Indonesia"
:: Name Days
: Hari Keselamatan dan Kesehatan Kerja
-"Occupational Safety and Health Day" on january 12
+"Occupational Safety and Health Day" civil on january 12
: Hari Pers Nasional
-"National Press' Day" on february 9
+"National Press' Day" civil on february 9
: Hari Gizi Nasional
-"National Nutrision day" on february 28
+"National Nutrision day" civil on february 28
: Hari Kesehatan Sedunia
-"World Health Day" on april 7
+"World Health Day" civil on april 7
: Hari Kartini
-"Kartini Day" on april 21
+"Kartini Day" civil on april 21
: Hari Bumi
-"Earth Day" on april 22
+"Earth Day" civil on april 22
: Hari Buruh
-"Labor Day" on may 1
+"Labor Day" civil on may 1
: Hari Pendidikan Nasional
-"National Education Day" on may 2
+"National Education Day" civil on may 2
: Hari Palang Merah dan Bulan Sabit Merah Sedunia
-"World Red Cross and Red Crescent Day" on may 8
+"World Red Cross and Red Crescent Day" civil on may 8
: Hari Kebangkitan Nasional
-"National Awakening Day" on may 20
+"National Awakening Day" civil on may 20
: Hari Peringatan Reformasi
-"Reformation Commemoration Day" on may 22
+"Reformation Commemoration Day" civil on may 22
: Hari Tanpa Tembakau Sedunia
-"World No Tobacco Day" on may 31
+"World No Tobacco Day" civil on may 31
: Hari Lahir Pancasila
-"Pancasila Birthday" on june 1
+"Pancasila Birthday" civil on june 1
: Hari Bhayangkara
-"Police Force Day" on july 1
+"Police Force Day" civil on july 1
: Hari Anak Nasional (note: en.wikipedia got this wrong)
-"National Children day" on july 23
+"National Children day" civil on july 23
: Hari Pramuka
-"Scout's day" on august 14
+"Scout's day" civil on august 14
: Hari Olahraga Nasional
-"National Sports Day" on september 9
+"National Sports Day" civil on september 9
: Hari Kesaktian Pancasila
-"Pancasila Sanctity Day" on october 1
+"Pancasila Sanctity Day" civil on october 1
: Hari Batik
-"Batik Day" on october 2
+"Batik Day" civil on october 2
: Hari Tentara Nasional Indonesia
-"Indonesian National Armed Forces Day" on october 5
+"Indonesian National Armed Forces Day" civil on october 5
: Hari Sumpah Pemuda
-"Youth Pledge Day" on october 28
+"Youth Pledge Day" civil on october 28
: Hari Korps Pegawai Republik Indonesia
-"Indonesian Civil Servant Corps Day " on october 29
+"Indonesian Civil Servant Corps Day " civil on october 29
: Hari Pahlawan
-"Heroes' Day" on november 10
+"Heroes' Day" civil on november 10
: Hari Guru
-"Teacher's Day" on november 25
+"Teacher's Day" civil on november 25
: Hari AIDS Sedunia
-"World AIDS Day" on december 1
+"World AIDS Day" civil on december 1
: Hari Kesetiakawanan Sosial Nasional
-"National Social Solidarity Day" on december 20
+"National Social Solidarity Day" civil on december 20
: Hari Ibu
-"Mother's Day" on december 22
+"Mother's Day" civil on december 22
:: To be sorted
@@ -151,15 +151,15 @@ description "National Holiday file for Indonesia"
: Joint Leave (defined by the government every year)
: Joint Leave for 2012
: Cuti Bersama Kenaikan Yesus Kristus
-"Joint leave for Ascension Day" weekend on may 18 2012
+"Joint leave for Ascension Day" public on may 18 2012
: Cuti Bersama Idul Fitri
-"Joint leave for Eid Al-Fitr" weekend on august 21 2012 length 2 days
+"Joint leave for Eid Al-Fitr" public on august 21 2012 length 2 days
: Cuti Bersama Tahun Baru Hijriyah
-"Joint leave for Islamic New Year" weekend on november 16 2012
+"Joint leave for Islamic New Year" public on november 16 2012
: Cuti Bersama Hari Raya Natal
-"Joint leave for Christmas" weekend on december 24 2012
+"Joint leave for Christmas" public on december 24 2012
: Cuti bersama Tahun Baru 2013
-"Joint leave for 2013 New Year's Day" weekend on december 31 2012
+"Joint leave for 2013 New Year's Day" public on december 31 2012
diff --git a/kholidays/holidays/plan2/holiday_id_id b/kholidays/holidays/plan2/holiday_id_id
index f74de00..744e9f5 100644
--- a/kholidays/holidays/plan2/holiday_id_id
+++ b/kholidays/holidays/plan2/holiday_id_id
@@ -20,70 +20,70 @@ description "File Hari Libur Nasional Indonesia"
:: Public Holidays
: New Year's Day
-"Tahun Baru Masehi" weekend on january 1
+"Tahun Baru Masehi" public on january 1
: Independence Day
-"Hari Proklamasi Kemerdekaan R.I." weekend on august 17
+"Hari Proklamasi Kemerdekaan R.I." public on august 17
:: Religious
: Balinese Galungan (lunar cal)
-"Hari Raya Galungan" on february 1 2012
+"Hari Raya Galungan" religious on february 1 2012
: Balinese Kuningan (lunar cal)
-"Hari Raya Kuningan" on february 11 2012
+"Hari Raya Kuningan" religious on february 11 2012
: Ash Wednesday
-"Rabu Abu" on easter minus 46 days
+"Rabu Abu" religious on easter minus 46 days
: Balinese New Year (lunar cal)
-"Hari Raya Nyepi" weekend on march 23 2012
-"Hari Raya Nyepi" weekend on march 12 2013
+"Hari Raya Nyepi" public on march 23 2012
+"Hari Raya Nyepi" public on march 12 2013
: Birth of the Prophet (hijri cal)
-"Maulid Nabi Muhammad SAW" weekend on hijri rabialawal 12
+"Maulid Nabi Muhammad SAW" public religious on hijri rabialawal 12
: Good Friday
-"Wafat Yesus Kristus" weekend on easter minus 2 days
+"Wafat Yesus Kristus" public religious on easter minus 2 days
: Buddha's Birthday (lunar cal)
-"Waisak" weekend on may 6 2012
-"Waisak" weekend on may 25 2013
+"Waisak" public religious on may 6 2012
+"Waisak" public religious on may 25 2013
: Ascension Day
-"Kenaikan Yesus Kristus" weekend on easter plus 39 days
+"Kenaikan Yesus Kristus" public religious on easter plus 39 days
: Ascension of the Prophet (hijri cal)
-"Isra Mi'raj Nabi Muhammad SAW" weekend on hijri rajab 27
+"Isra Mi'raj Nabi Muhammad SAW" public religious on hijri rajab 27
: Day after Ramadan / Idul Fitri
: Eid Al-Fitr (hijri cal)
-"Idul Fitri" weekend on hijri shawwal 1 length 2 days
+"Idul Fitri" public religious on hijri shawwal 1 length 2 days
: Feast of the Sacrifice (hijri cal)
-"Idul Adha" weekend on hijri thualhijjah 10
+"Idul Adha" public religious on hijri thualhijjah 10
: Islamic New Year (hijri cal)
-"Tahun Baru Hijriyah" weekend on hijri muharram 1
+"Tahun Baru Hijriyah" public religious on hijri muharram 1
: Christmas
-"Hari Natal" weekend on december 25
+"Hari Natal" public religious on december 25
:: Financial
:: Cultural
: Chinese New Year (lunar cal)
-"Tahun Baru Imlek" weekend on january 23 2012
-"Tahun Baru Imlek" weekend on february 9 2013
-: Chinese New Year (from Hongkong kholyday file)
-"Tahun Baru Imlek" weekend on 31 january 2014
-"Tahun Baru Imlek" weekend on 19 february 2015
-"Tahun Baru Imlek" weekend on 8 february 2016
-"Tahun Baru Imlek" weekend on 28 january 2017
-"Tahun Baru Imlek" weekend on 16 february 2018
-"Tahun Baru Imlek" weekend on 5 february 2019
-"Tahun Baru Imlek" weekend on 25 january 2020
+"Tahun Baru Imlek" public on january 23 2012
+"Tahun Baru Imlek" public on february 9 2013
+: Chinese New Year (from Hong Kong kholiday file)
+"Tahun Baru Imlek" public on 31 january 2014
+"Tahun Baru Imlek" public on 19 february 2015
+"Tahun Baru Imlek" public on 8 february 2016
+"Tahun Baru Imlek" public on 28 january 2017
+"Tahun Baru Imlek" public on 16 february 2018
+"Tahun Baru Imlek" public on 5 february 2019
+"Tahun Baru Imlek" public on 25 january 2020
:: School
@@ -93,72 +93,72 @@ description "File Hari Libur Nasional Indonesia"
:: Name Days
: Occupational Safety and Health Day
-"Hari Keselamatan dan Kesehatan Kerja" on january 12
+"Hari Keselamatan dan Kesehatan Kerja" civil on january 12
: Press' Day
-"Hari Pers Nasional" on february 9
+"Hari Pers Nasional" civil on february 9
: National Nutrision's day
-"Hari Gizi Nasional" on february 28
+"Hari Gizi Nasional" civil on february 28
: World Health Day
-"Hari Kesehatan Sedunia" on april 7
+"Hari Kesehatan Sedunia" civil on april 7
: Kartini Day
-"Hari Kartini" on april 21
+"Hari Kartini" civil on april 21
: Earth day
-"Hari Bumi" on april 22
+"Hari Bumi" civil on april 22
: Labor day
-"Hari Buruh" on may 1
+"Hari Buruh" civil on may 1
: National Education Day
-"Hari Pendidikan Nasional" on may 2
+"Hari Pendidikan Nasional" civil on may 2
: World Red Cross and Red Crescent Day
-"Hari Palang Merah dan Bulan Sabit Merah Sedunia" on may 8
+"Hari Palang Merah dan Bulan Sabit Merah Sedunia" civil on may 8
: National Awakening Day
-"Hari Kebangkitan Nasional" on may 20
+"Hari Kebangkitan Nasional" civil on may 20
: Reformation Commemoration Day
-"Hari Peringatan Reformasi" on may 22
+"Hari Peringatan Reformasi" civil on may 22
: World No Tobacco Day
-"Hari Tanpa Tembakau Sedunia" on may 31
+"Hari Tanpa Tembakau Sedunia" civil on may 31
: Pancasila Birthday
-"Hari Lahir Pancasila" on june 1
+"Hari Lahir Pancasila" civil on june 1
: Police Force Birthday
-"Hari Bhayangkara" on july 1
+"Hari Bhayangkara" civil on july 1
: National Children day (note: en.wikipedia got this wrong)
-"Hari Anak Nasional" on july 23
+"Hari Anak Nasional" civil on july 23
: Scout's day
-"Hari Pramuka" on august 14
+"Hari Pramuka" civil on august 14
: National Sports Day
-"Hari Olahraga Nasional" on september 9
+"Hari Olahraga Nasional" civil on september 9
: Pancasila Sanctity Day
-"Hari Kesaktian Pancasila" on october 1
+"Hari Kesaktian Pancasila" civil on october 1
: Batik Day
-"Hari Batik" on october 2
+"Hari Batik" civil on october 2
: Indonesian National Armed Forces Day
-"Hari Tentara Nasional Indonesia" on october 5
+"Hari Tentara Nasional Indonesia" civil on october 5
: Youth Pledge Day
-"Hari Sumpah Pemuda" on october 28
+"Hari Sumpah Pemuda" civil on october 28
: Civil Servant Corps Day
-"Hari Korps Pegawai Republik Indonesia" on october 29
+"Hari Korps Pegawai Republik Indonesia" civil on october 29
: Heroes' Day
-"Hari Pahlawan" on november 10
+"Hari Pahlawan" civil on november 10
: Teacher's Day
-"Hari Guru" on november 25
+"Hari Guru" civil on november 25
: World AIDS Day
-"Hari AIDS Sedunia" on december 1
+"Hari AIDS Sedunia" civil on december 1
: National Social Solidarity Day
-"Hari Kesetiakawanan Sosial Nasional" on december 20
+"Hari Kesetiakawanan Sosial Nasional" civil on december 20
: Mother's Day
-"Hari Ibu" on december 22
+"Hari Ibu" civil on december 22
:: To be sorted
: Joint Leave (defined by the government every year)
: Joint Leave for 2012
: Joint leave for Ascension Day
-"Cuti Bersama Kenaikan Yesus Kristus" weekend on may 18 2012
+"Cuti Bersama Kenaikan Yesus Kristus" public on may 18 2012
: Joint leave for Eid Al-Fitr
-"Cuti Bersama Idul Fitri" weekend on august 21 2012 length 2 days
+"Cuti Bersama Idul Fitri" public on august 21 2012 length 2 days
: Joint leave for Islamic New Year
-"Cuti Bersama Hari Raya Natal" weekend on november 16 2012
+"Cuti Bersama Hari Raya Natal" public on november 16 2012
: Joint leave for Christmas
-"Cuti Bersama Tahun Baru Hijriyah" weekend on december 24 2012
+"Cuti Bersama Tahun Baru Hijriyah" public on december 24 2012
: Joint leave for 2013 New Year's Day
-"Cuti bersama Tahun Baru 2013" weekend on december 31 2012
+"Cuti bersama Tahun Baru 2013" public on december 31 2012
diff --git a/kholidays/holidays/plan2/holiday_ie_en-gb b/kholidays/holidays/plan2/holiday_ie_en-gb
index 62bee7b..ff38917 100644
--- a/kholidays/holidays/plan2/holiday_ie_en-gb
+++ b/kholidays/holidays/plan2/holiday_ie_en-gb
@@ -17,17 +17,17 @@ language "en_GB"
description "National holiday file for Ireland"
:: Public Holidays
-"New Years Day" weekend january 1
-"St Patricks Day" weekend march 17
-"Good Friday" weekend easter minus 2
-"Easter Sunday" weekend easter
-"Easter Monday" weekend easter plus 1
-"May Day" weekend first monday in may
-"Spring Bank Holiday" weekend first monday in june
-"Summer Bank Holiday" weekend first monday in august
-"October Bank Holiday" weekend last monday in october
-"Christmas Day" weekend december 25
-"St Stephens Day" weekend december 26
+"New Years Day" public january 1
+"St Patricks Day" public march 17
+"Good Friday" public easter minus 2
+"Easter Sunday" public easter
+"Easter Monday" public easter plus 1
+"May Day" public first monday in may
+"Spring Bank Holiday" public first monday in june
+"Summer Bank Holiday" public first monday in august
+"October Bank Holiday" public last monday in october
+"Christmas Day" public december 25
+"St Stephens Day" public december 26
:: Religious
diff --git a/kholidays/holidays/plan2/holiday_ie_ga b/kholidays/holidays/plan2/holiday_ie_ga
index 28f710d..03b8f9c 100644
--- a/kholidays/holidays/plan2/holiday_ie_ga
+++ b/kholidays/holidays/plan2/holiday_ie_ga
@@ -18,49 +18,49 @@ description "Laethanta Saoire in Ãirinn"
:: Public Holidays
: New Year's Day
-"Lá Caille" weekend january 1
+"Lá Caille" public january 1
: St Patrick's Day
-"Lá Fhéile Pádraig" weekend march 17
+"Lá Fhéile Pádraig" public march 17
: Good Friday
-"Aoine an Chéasta" weekend easter minus 2
+"Aoine an Chéasta" public easter minus 2
: Easter
-"Domhnach Cásca" weekend easter
+"Domhnach Cásca" public easter
: Easter Monday
-"Luan Cásca" weekend easter plus 1
+"Luan Cásca" public easter plus 1
: May Day
-"Lá Bealtaine" weekend first monday in may
+"Lá Bealtaine" public first monday in may
: Spring Bank Holiday
-"Lá Saoire Bainc an Earraigh" weekend first monday in june
+"Lá Saoire Bainc an Earraigh" public first monday in june
: Summer Bank Holiday
-"Lá Saoire Bainc an tSamhraidh" weekend first monday in august
+"Lá Saoire Bainc an tSamhraidh" public first monday in august
: October Bank Holiday
-"Lá Saoire Bainc an Fhómhair" weekend last monday in october
+"Lá Saoire Bainc an Fhómhair" public last monday in october
: Christmas Day
-"Lá Nollag" weekend december 25
+"Lá Nollag" public december 25
:St Stephan's Day
-"Lá an DreoilÃn" weekend december 26
+"Lá an DreoilÃn" public december 26
:: Religious
-"OÃche Chinn an Dá Lá Dhéag" on january 5
-"Lá Nollag Beag" on january 6
-"Lá Fhéile Muire na gCoinneal" on february 2
-"Máirt na hInide" on easter minus 47 days
-"Céadaoin an Luaithrigh" on easter minus 46 days
-"Domhnach na hImrime" on easter minus 7 days
-"Céadaoin an Bhraith" on easter minus 4 days
-"Déardaoin Mandála" on easter minus 3 days
-"Déardaoin Deascabhála" on easter plus 39 days
-"An ChincÃs" on easter plus 49 days
-"Luan CincÃse" on easter plus 50 days
-"Déardaoin Choirp ChrÃost" on easter plus 53 days
-"Domhnach na TrÃonóide" on easter plus 56 days
-"Lá San SvaÃtÃn" on july 15
+"OÃche Chinn an Dá Lá Dhéag" religious on january 5
+"Lá Nollag Beag" religious on january 6
+"Lá Fhéile Muire na gCoinneal" religious on february 2
+"Máirt na hInide" religious on easter minus 47 days
+"Céadaoin an Luaithrigh" religious on easter minus 46 days
+"Domhnach na hImrime" religious on easter minus 7 days
+"Céadaoin an Bhraith" religious on easter minus 4 days
+"Déardaoin Mandála" religious on easter minus 3 days
+"Déardaoin Deascabhála" religious on easter plus 39 days
+"An ChincÃs" religious on easter plus 49 days
+"Luan CincÃse" religious on easter plus 50 days
+"Déardaoin Choirp ChrÃost" religious on easter plus 53 days
+"Domhnach na TrÃonóide" religious on easter plus 56 days
+"Lá San SvaÃtÃn" religious on july 15
:: Financial
:: Cultural
-"Lá na nAmadán" on april 1
-"Lá Samhna" on november 1
+"Lá na nAmadán" cultural on april 1
+"Lá Samhna" cultural on november 1
:: School
@@ -69,8 +69,8 @@ description "Laethanta Saoire in Ãirinn"
:: Seasons
:: Name Days
-"Lá Fhéile BrÃde" on february 1
-"Lá Fhéile VailintÃn" on february 14
-"Lá Fhéile Eoin" on june 24
-"Lá Fhéile MichÃl" on september 29
-"Lá Fhéile Mártain" on november 11
+"Lá Fhéile BrÃde" nameday on february 1
+"Lá Fhéile VailintÃn" nameday on february 14
+"Lá Fhéile Eoin" nameday on june 24
+"Lá Fhéile MichÃl" nameday on september 29
+"Lá Fhéile Mártain" nameday on november 11
diff --git a/kholidays/holidays/plan2/holiday_il_en-us b/kholidays/holidays/plan2/holiday_il_en-us
index cd4c5f7..ec82d31 100644
--- a/kholidays/holidays/plan2/holiday_il_en-us
+++ b/kholidays/holidays/plan2/holiday_il_en-us
@@ -18,49 +18,49 @@ language "en_US"
description "National holiday file for Israel"
:: Public Holidays
-"Rosh Hashanah (New Year)" weekend on hebrew tishrey 1 length 2 days
-"Yom Kippur (Day of Atonement)" weekend on hebrew tishrey 10
-"Sukkot (Feast of Tabernacles)" weekend on hebrew tishrey 15
-"Simchat Torah (Assembly of the Eighth Day)" weekend on hebrew tishrey 22
-"Pesach (Passover)" weekend on hebrew nisan 15
-"Shvi'i shel Pesach (Seventh day of Passover)" weekend on hebrew nisan 21
+"Rosh Hashanah (New Year)" public religious on hebrew tishrey 1 length 2 days
+"Yom Kippur (Day of Atonement)" public religious on hebrew tishrey 10
+"Sukkot (Feast of Tabernacles)" public religious on hebrew tishrey 15
+"Simchat Torah (Assembly of the Eighth Day)" public religious on hebrew tishrey 22
+"Pesach (Passover)" public religious on hebrew nisan 15
+"Shvi'i shel Pesach (Seventh day of Passover)" public religious on hebrew nisan 21
: If Yom Ha'atzmaut falls on a Friday or Saturday, move to preceeding Thursday, if falls on a Monday move to Tuesday
-"Yom Ha'atzmaut (Independence Day)" weekend on hebrew ( (([iyar 5] == [friday after ([iyar 5])]) ||
+"Yom Ha'atzmaut (Independence Day)" public on hebrew ( (([iyar 5] == [friday after ([iyar 5])]) ||
([iyar 5] == [saturday after ([iyar 5])])) ?
[thursday before ([iyar 5])] :
(([iyar 5] == [monday after ([iyar 5])]) ?
[tuesday after ([iyar 5])] :
[iyar 5] ) )
-"Shavuot (Pentecost)" weekend on hebrew sivan 6
+"Shavuot (Pentecost)" public religious on hebrew sivan 6
:: Religious Holidays
-"Tsom Gedalyah ben Ahikam (Fast Day of Gedaliah ben Ahikam)" on hebrew tishrey 3
-"Chol HaMoed (Feast of Tabernacles)" on hebrew tishrey 16 length 6 days
-"Hanukkah (Feast of Rededication)" on hebrew kislev 25 length 8 days
-"Tsom Asarah b-Tevet (Tenth of Tevet Fast)" on hebrew tevet 10
-"Tu Bishvat (Fifteenth of Shvat)" on hebrew shvat 15
-"Ta`anit Ester (Fast of Esther)" on hebrew adar 13
-"Purim (Feast of Esther)" on hebrew adar 14
-"Chol HaMoed Pesach (Passover)" on hebrew nisan 16 length 5 days
-"Lag Ba'omer (33rd day of the `Omer)" on hebrew iyar 18
-"Tsom Shiva` Asar b-Tamuz (Seventeenth of Tamuz fast)" on hebrew tamuz 17
-"Tisha B'Av (Ninth of Av fast/Destruction of the 1st and 2nd Temples)" on hebrew av 9
-"Tu B'Av (Fifteenth of Av/Festival of Love)" on hebrew av 15
+"Tsom Gedalyah ben Ahikam (Fast Day of Gedaliah ben Ahikam)" religious on hebrew tishrey 3
+"Chol HaMoed (Feast of Tabernacles)" religious on hebrew tishrey 16 length 6 days
+"Hanukkah (Feast of Rededication)" religious on hebrew kislev 25 length 8 days
+"Tsom Asarah b-Tevet (Tenth of Tevet Fast)" religious on hebrew tevet 10
+"Tu Bishvat (Fifteenth of Shvat)" religious on hebrew shvat 15
+"Ta`anit Ester (Fast of Esther)" religious on hebrew adar 13
+"Purim (Feast of Esther)" religious on hebrew adar 14
+"Chol HaMoed Pesach (Passover)" religious on hebrew nisan 16 length 5 days
+"Lag Ba'omer (33rd day of the `Omer)" religious on hebrew iyar 18
+"Tsom Shiva` Asar b-Tamuz (Seventeenth of Tamuz fast)" religious on hebrew tamuz 17
+"Tisha B'Av (Ninth of Av fast/Destruction of the 1st and 2nd Temples)" religious on hebrew av 9
+"Tu B'Av (Fifteenth of Av/Festival of Love)" religious on hebrew av 15
:: Financial
:: Cultural
-"Yitzhak Rabin's Remembrance Day" on hebrew heshvan 12
-"Holocaust Remembrance Day" on hebrew nisan 27
-"Victory Day" on gregorian may 9
+"Yitzhak Rabin's Remembrance Day" cultural on hebrew heshvan 12
+"Holocaust Remembrance Day" cultural on hebrew nisan 27
+"Victory Day" cultural on gregorian may 9
: Is always the day before Yom Ha'atzmaut
-"Yom Hazikaron (Israeli Fallen Soldiers and Victims of Terrorism Remembrance Day)" on hebrew ( (([iyar 5] == [friday after ([iyar 5])]) ||
- ([iyar 5] == [saturday after ([iyar 5])])) ?
- [wednesday before ([iyar 5])] :
- (([iyar 5] == [monday after ([iyar 5])]) ?
- [iyar 5] :
- [iyar 4] ) )
-"Yom Yerushalayim (Jerusalem Day)" on hebrew iyar 28
+"Yom Hazikaron (Israeli Fallen Soldiers and Victims of Terrorism Remembrance Day)" cultural on hebrew ( (([iyar 5] == [friday after ([iyar 5])]) ||
+ ([iyar 5] == [saturday after ([iyar 5])])) ?
+ [wednesday before ([iyar 5])] :
+ (([iyar 5] == [monday after ([iyar 5])]) ?
+ [iyar 5] :
+ [iyar 4] ) )
+"Yom Yerushalayim (Jerusalem Day)" cultural on hebrew iyar 28
:: School
diff --git a/kholidays/holidays/plan2/holiday_il_he b/kholidays/holidays/plan2/holiday_il_he
index 14085ac..bfe4399 100644
--- a/kholidays/holidays/plan2/holiday_il_he
+++ b/kholidays/holidays/plan2/holiday_il_he
@@ -19,73 +19,73 @@ language "he"
:: Public Holidays
: Rosh Hashanah (New Year)
-"ר×ש ××©× ×" weekend on hebrew tishrey 1 length 2 days
+"ר×ש ××©× ×" public religious on hebrew tishrey 1 length 2 days
: Yom Kippur (Day of Atonement)
-"××× ××פ×ר" weekend on hebrew tishrey 10
+"××× ××פ×ר" public religious on hebrew tishrey 10
: Sukkot (Feast of Tabernacles)
-"ס×××ת" weekend on hebrew tishrey 15
+"ס×××ת" public on hebrew tishrey 15
: Simchat Torah (Assembly of the Eighth Day)
-"ש××ת ת×ר×" weekend on hebrew tishrey 22
+"ש××ת ת×ר×" public religious on hebrew tishrey 22
: Pesach (Passover)
-"פס×" weekend on hebrew nisan 15
+"פס×" public religious on hebrew nisan 15
: Shvi'i shel Pesach (Seventh day of Passover)
-"ש×××¢× ×©× ×¤×¡×" weekend on hebrew nisan 21
+"ש×××¢× ×©× ×¤×¡×" public religious on hebrew nisan 21
: Yom Ha'atzmaut (Independence Day)
: If falls on a Friday or Saturday, move to preceeding Thursday, if falls on a Monday move to Tuesday
-"××× ×עצ×××ת" weekend on hebrew ( (([iyar 5] == [friday after ([iyar 5])]) ||
+"××× ×עצ×××ת" public on hebrew ( (([iyar 5] == [friday after ([iyar 5])]) ||
([iyar 5] == [saturday after ([iyar 5])])) ?
[thursday before ([iyar 5])] :
(([iyar 5] == [monday after ([iyar 5])]) ?
[tuesday after ([iyar 5])] :
[iyar 5] ) )
: Shavuot (Pentecost)
-"ש×××¢×ת" weekend on hebrew sivan 6
+"ש×××¢×ת" public religious on hebrew sivan 6
:: Religious Holidays
: Tsom Gedalyah ben Ahikam (Fast Day of Gedaliah ben Ahikam)
-"צ×× ×××××" on hebrew tishrey 3
+"צ×× ×××××" religious on hebrew tishrey 3
: Chol HaMoed (Feast of Tabernacles)
-"××× ××××¢× ×¡×××ת" on hebrew tishrey 16 length 6 days
+"××× ××××¢× ×¡×××ת" religious on hebrew tishrey 16 length 6 days
: Hanukkah (Feast of Rededication)
-"×× ×××" on hebrew kislev 25 length 8 days
+"×× ×××" religious on hebrew kislev 25 length 8 days
: Tsom Asarah b-Tevet (Tenth of Tevet Fast)
-"צ×× ×¢×©×¨× ×××ת" on hebrew tevet 10
+"צ×× ×¢×©×¨× ×××ת" religious on hebrew tevet 10
: Tu Bishvat (Fifteenth of Shvat)
-"×× ×ש××" on hebrew shvat 15
+"×× ×ש××" religious on hebrew shvat 15
: Ta`anit Ester (Fast of Esther)
-"×ª×¢× ×ת ×סתר" on hebrew adar 13
+"×ª×¢× ×ת ×סתר" religious on hebrew adar 13
: Purim (Feast of Esther)
-"פ×ר××" on hebrew adar 14
+"פ×ר××" religious on hebrew adar 14
: Chol HaMoed Pesach (Passover)
-"××× ××××¢× ×¤×¡×" on hebrew nisan 16 length 5 days
+"××× ××××¢× ×¤×¡×" religious on hebrew nisan 16 length 5 days
: Lag Ba'omer (33rd day of the `Omer)
-"×× ××¢××ר" on hebrew iyar 18
+"×× ××¢××ר" religious on hebrew iyar 18
: Tsom Shiva` Asar b-Tamuz (Seventeenth of Tamuz fast)
-"ש××¢× ×¢×©×¨ ×ת×××" on hebrew tamuz 17
+"ש××¢× ×¢×©×¨ ×ת×××" religious on hebrew tamuz 17
: Tisha B'Av (Ninth of Av fast/Destruction of the 1st and 2nd Temples)
-"×ª×©×¢× ×××" on hebrew av 9
+"×ª×©×¢× ×××" religious on hebrew av 9
: Tu B'Av (Fifteenth of Av/Festival of Love)
-"×× ×××" on hebrew av 15
+"×× ×××" religious on hebrew av 15
:: Financial
:: Cultural
: Yom Hazikaron le Yitzhak Rabin (Yitzhak Rabin's Remembrance Day)
-"××× ××××ר×× ××צ×ק ר×××" on hebrew heshvan 12
+"××× ××××ר×× ××צ×ק ר×××" commemorative on hebrew heshvan 12
: Yom Hazikaron LaShoah VeLaGevurah (Holocaust Remembrance Day)
-"××× ××××ר×× ×ש××× ×××××ר×" on hebrew nisan 27
+"××× ××××ר×× ×ש××× ×××××ר×" commemorative on hebrew nisan 27
: Victory Day
-"××× ×× ×צ××× ×¢× ×ר×× ×× ×× ×צ×ת" on may 9
+"××× ×× ×צ××× ×¢× ×ר×× ×× ×× ×צ×ת" civil on may 9
: Yom Hazikaron (Israeli Fallen Soldiers and Victims of Terrorism Remembrance Day)
: Is always the day before Yom Ha'atzmaut
-"××× ××××ר×× ××××× ×ער××ת ×שר×× ×× ×¤××¢× ×¤×¢×××ת ×××××" on hebrew ( (([iyar 5] == [friday after ([iyar 5])]) ||
+"××× ××××ר×× ××××× ×ער××ת ×שר×× ×× ×¤××¢× ×¤×¢×××ת ×××××" commemorative on hebrew ( (([iyar 5] == [friday after ([iyar 5])]) ||
([iyar 5] == [saturday after ([iyar 5])])) ?
[wednesday before ([iyar 5])] :
(([iyar 5] == [monday after ([iyar 5])]) ?
[iyar 5] :
[iyar 4] ) )
: Yom Yerushalayim (Jerusalem Day)
-"××× ×ר×ש×××" on hebrew iyar 28
+"××× ×ר×ש×××" civil on hebrew iyar 28
:: School
diff --git a/kholidays/holidays/plan2/holiday_in_en-gb b/kholidays/holidays/plan2/holiday_in_en-gb
index 4710966..d3897ff 100644
--- a/kholidays/holidays/plan2/holiday_in_en-gb
+++ b/kholidays/holidays/plan2/holiday_in_en-gb
@@ -23,12 +23,11 @@ language "en_GB"
description "National holiday file for India"
:: Public Holidays
-"New Year holiday" weekend on january 1
-"Muharram" weekend on january 10
-"Republic Day" weekend on january 26
-"Independence Day" weekend on august 15
-"Mahatma Gandhi's Birthday" weekend on october 2
-"Christmas" weekend on december 25
+"New Year holiday" public on january 1
+"Republic Day" public on january 26
+"Independence Day" public on august 15
+"Mahatma Gandhi's Birthday" public on october 2
+"Christmas" public religious on december 25
:: Religious
diff --git a/kholidays/holidays/plan2/holiday_ir_en-us b/kholidays/holidays/plan2/holiday_ir_en-us
index c5246f6..b5904c4 100644
--- a/kholidays/holidays/plan2/holiday_ir_en-us
+++ b/kholidays/holidays/plan2/holiday_ir_en-us
@@ -18,28 +18,28 @@ language "en_US"
description "National holiday file for Iran"
:: Public Holidays
-"Nowrouz" weekend on jalali farvardin 1 length 4
-"Islamic Republic Day" weekend on jalali farvardin 12
-"Nature Day" weekend on jalali farvardin 13
-"Khomeini's Death" weekend on jalali khordad 14
-"Revolt of Khordad 15" weekend on jalali khordad 15
-"Victory of the Revolution" weekend on jalali bahman 22
-"Nationalization of Oil Industry" weekend on jalali esfand 29
-"Tasu'a of Imam Hussain" weekend on hijri muharram 9
-"Ashura of Imam Hussain" weekend on hijri muharram 10
-"Arba'een of Imam Hussain" weekend on hijri safar 20
-"Demise of prophet Muhammad and Martyrdom of Imam Hassan (Mujtaba)" weekend on hijri safar 28
-"Martyrdom of Imam Reza" weekend on hijri safar 29
-"Birth of Muhammad and Imam Jafar" weekend on hijri rabialawal 17
-"Martyrdom of Fatima" weekend on hijri jumaadaalthaani 3
-"Birth of Imam Ali" weekend on hijri rajab 13
-"Mission of Muhammad" weekend on hijri rajab 27
-"Birth of Imam Mahdi" weekend on hijri shaban 15
-"Martyrdom of Imam Ali" weekend on hijri ramadan 21
-"Eid ul-Fitr" weekend on hijri shawwal 1
-"Martyrdom of Imam Jafar" weekend on hijri shawwal 25
-"Eid ul-Adha" weekend on hijri thualhijjah 10
-"Eid al-Ghadeer" weekend on hijri thualhijjah 18
+"Nowrouz" public religious on jalali farvardin 1 length 4
+"Islamic Republic Day" public on jalali farvardin 12
+"Nature Day" public on jalali farvardin 13
+"Khomeini's Death" public on jalali khordad 14
+"Revolt of Khordad 15" public on jalali khordad 15
+"Victory of the Revolution" public on jalali bahman 22
+"Nationalization of Oil Industry" public on jalali esfand 29
+"Tasu'a of Imam Hussain" public religious on hijri muharram 9
+"Ashura of Imam Hussain" public religious on hijri muharram 10
+"Arba'een of Imam Hussain" public religious on hijri safar 20
+"Demise of prophet Muhammad and Martyrdom of Imam Hassan (Mujtaba)" public religious on hijri safar 28
+"Martyrdom of Imam Reza" public religious on hijri safar 29
+"Birth of Muhammad and Imam Jafar" public religious on hijri rabialawal 17
+"Martyrdom of Fatima" public religious on hijri jumaadaalthaani 3
+"Birth of Imam Ali" public religious on hijri rajab 13
+"Mission of Muhammad" public religious on hijri rajab 27
+"Birth of Imam Mahdi" public religious on hijri shaban 15
+"Martyrdom of Imam Ali" public religious on hijri ramadan 21
+"Eid ul-Fitr" public religious on hijri shawwal 1
+"Martyrdom of Imam Jafar" public religious on hijri shawwal 25
+"Eid ul-Adha" public religious on hijri thualhijjah 10
+"Eid al-Ghadeer" public religious on hijri thualhijjah 18
:: Religious
diff --git a/kholidays/holidays/plan2/holiday_ir_fa b/kholidays/holidays/plan2/holiday_ir_fa
index 893e2b4..87ff936 100644
--- a/kholidays/holidays/plan2/holiday_ir_fa
+++ b/kholidays/holidays/plan2/holiday_ir_fa
@@ -19,49 +19,49 @@ language "fa"
:: Public Holidays
: Nowrouz / Eid
-"عÛد ÙÙرÙز" weekend on jalali farvardin 1 length 4
+"عÛد ÙÙرÙز" public religious on jalali farvardin 1 length 4
: Islamic Republic Day
-"رÙز جÙ
ÙÙØ±Û Ø§Ø³ÙاÙ
Û" weekend on jalali farvardin 12
+"رÙز جÙ
ÙÙØ±Û Ø§Ø³ÙاÙ
Û" public on jalali farvardin 12
: Nature Day
-"رÙز طبÛعت" weekend on jalali farvardin 13
+"رÙز طبÛعت" public on jalali farvardin 13
: Khomeini's Death
-"رØÙت اÙ
اÙ
Ø®Ù
ÛÙÛ" weekend on jalali khordad 14
+"رØÙت اÙ
اÙ
Ø®Ù
ÛÙÛ" public on jalali khordad 14
: Revolt of Khordad 15
-"ÙÛاÙ
۱۵ خرداد" weekend on jalali khordad 15
+"ÙÛاÙ
۱۵ خرداد" public on jalali khordad 15
: Victory of the Revolution
-"Ù¾ÛرÙØ²Û Ø§ÙÙÙاب" weekend on jalali bahman 22
+"Ù¾ÛرÙØ²Û Ø§ÙÙÙاب" public on jalali bahman 22
: Nationalization of Oil Industry
-"Ù
ÙÛ Ø´Ø¯Ù ØµÙعت ÙÙت" weekend on jalali esfand 29
+"Ù
ÙÛ Ø´Ø¯Ù ØµÙعت ÙÙت" public on jalali esfand 29
: Tasu'a of Imam Hussain
-"تاسÙعا" weekend on hijri muharram 9
+"تاسÙعا" public religious on hijri muharram 9
: Ashura of Imam Hussain
-"عاشÙرا" weekend on hijri muharram 10
+"عاشÙرا" public religious on hijri muharram 10
: Arba'een of Imam Hussain
-"اربعÛÙ" weekend on hijri safar 20
+"اربعÛÙ" public religious on hijri safar 20
: Demise of prophet Muhammad and Martyrdom of Imam Hassan (Mujtaba)
-"ÙÙات Øضرت Ù
ØÙ
د Ù Ø´Ùادت اÙ
اÙ
Øس٠Ù
جتبÛ" weekend on hijri safar 28
+"ÙÙات Øضرت Ù
ØÙ
د Ù Ø´Ùادت اÙ
اÙ
Øس٠Ù
جتبÛ" public religious on hijri safar 28
: Martyrdom of Imam Reza
-"Ø´Ùادت اÙ
اÙ
رضا" weekend on hijri safar 29
+"Ø´Ùادت اÙ
اÙ
رضا" public religious on hijri safar 29
: Birth of Muhammad and Imam Jafar
-"ÙÙادت Øضرت Ù
ØÙ
د ٠اÙ
اÙ
جعÙر صادÙ" weekend on hijri rabialawal 17
+"ÙÙادت Øضرت Ù
ØÙ
د ٠اÙ
اÙ
جعÙر صادÙ" public religious on hijri rabialawal 17
: Martyrdom of Fatima
-"Ø´Ùادت Øضرت ÙاطÙ
Ù" weekend on hijri jumaadaalthaani 3
+"Ø´Ùادت Øضرت ÙاطÙ
Ù" public religious on hijri jumaadaalthaani 3
: Birth of Imam Ali
-"ÙÙادت Øضرت عÙÛ" weekend on hijri rajab 13
+"ÙÙادت Øضرت عÙÛ" public religious on hijri rajab 13
: Mission of Muhammad
-"بعثت Øضرت Ù
ØÙ
د" weekend on hijri rajab 27
+"بعثت Øضرت Ù
ØÙ
د" public religious on hijri rajab 27
: Birth of Imam Mahdi
-"ÙÙادت Øضرت Ù
ÙدÛ" weekend on hijri shaban 15
+"ÙÙادت Øضرت Ù
ÙدÛ" public religious on hijri shaban 15
: Martyrdom of Imam Ali
-"Ø´Ùادت Øضرت عÙÛ" weekend on hijri ramadan 21
+"Ø´Ùادت Øضرت عÙÛ" public religious on hijri ramadan 21
: Eid ul-Fitr (End of Ramadhan)
-"عÛد Ùطر" weekend on hijri shawwal 1
+"عÛد Ùطر" public religious on hijri shawwal 1
: Martyrdom of Imam Jafar
-"Ø´Ùادت اÙ
اÙ
جعÙر صادÙ" weekend on hijri shawwal 25
+"Ø´Ùادت اÙ
اÙ
جعÙر صادÙ" public religious on hijri shawwal 25
: Eid ul-Adha (Ghurban)
-"عÛد ÙرباÙ" weekend on hijri thualhijjah 10
+"عÛد ÙرباÙ" public religious on hijri thualhijjah 10
: Eid al-Ghadeer
-"عÛد غدÛر" weekend on hijri thualhijjah 18
+"عÛد غدÛر" public religious on hijri thualhijjah 18
:: Religious
diff --git a/kholidays/holidays/plan2/holiday_is_is b/kholidays/holidays/plan2/holiday_is_is
index 1dd8187..85370cd 100644
--- a/kholidays/holidays/plan2/holiday_is_is
+++ b/kholidays/holidays/plan2/holiday_is_is
@@ -17,59 +17,59 @@ language "is"
:description "(please add description in source language) National holiday file for Iceland"
:: Public Holidays
-"Nýjársdagur" weekend on january 1
-"SkÃrdagur" weekend on easter minus 3 days
-"Föstudagurinn langi" weekend on easter minus 2 days
-"Annar à Páskum" weekend on easter plus 1 day
-"Uppstigningardagur" weekend on easter plus 40 days
-"HvÃtasunna" weekend on easter plus 49 days
-"Sumardagurinn fyrsti" weekend on thursday after april 18
-"FrÃdagur verkamanna" weekend on may 1
-"Lýðveldisdagurinn" weekend on june 17
-"FrÃdagur verslunarmanna" weekend on monday after july 31
-"Fullveldisdagurinn" weekend on december 1
-"Aðfangadagur" weekend on december 24
-"Jóladagur" weekend on december 25
-"Annar à jólum" weekend on december 26
-"Gamlársdagur" weekend on december 31
+"Nýjársdagur" public on january 1
+"SkÃrdagur" public religious on easter minus 3 days
+"Föstudagurinn langi" public religious on easter minus 2 days
+"Annar à Páskum" public religious on easter plus 1 day
+"Uppstigningardagur" public religious on easter plus 40 days
+"HvÃtasunna" public religious on easter plus 49 days
+"Sumardagurinn fyrsti" public on thursday after april 18
+"FrÃdagur verkamanna" public on may 1
+"Lýðveldisdagurinn" public on june 17
+"FrÃdagur verslunarmanna" public on monday after july 31
+"Fullveldisdagurinn" public on december 1
+"Aðfangadagur" public on december 24
+"Jóladagur" public religious on december 25
+"Annar à jólum" public on december 26
+"Gamlársdagur" public on december 31
:: Religious
-"Pálmasunnudagur" on easter minus 7 days
-"Páskadagur" on easter
-"Bolludagur" on easter minus 48 days
-"Sprengidagur" on easter minus 47 days
-"Ãskudagur" on easter minus 46 days
-"Trinity" on easter plus 56 day
-"Corpus Christi" on easter plus 53 days
-"1. à Aðventu" on sunday before december 24 minus 21
-"2. à Aðventu" on sunday before december 24 minus 14
-"3. à Aðventu" on sunday before december 24 minus 7
-"4. à Aðventu" on sunday before december 24
-"Ãorláksmessa" on december 23
+"Pálmasunnudagur" religious on easter minus 7 days
+"Páskadagur" religious on easter
+"Bolludagur" religious on easter minus 48 days
+"Sprengidagur" religious on easter minus 47 days
+"Ãskudagur" religious on easter minus 46 days
+"Trinity" religious on easter plus 56 day
+"Corpus Christi" religious on easter plus 53 days
+"1. à Aðventu" religious on sunday before december 24 minus 21
+"2. à Aðventu" religious on sunday before december 24 minus 14
+"3. à Aðventu" religious on sunday before december 24 minus 7
+"4. à Aðventu" religious on sunday before december 24
+"Ãorláksmessa" religious on december 23
:: Financial
:: Cultural
-"ValentÃnusardagur" on february 14
-"St. Patrick dagur" on march 17
-"Sjómannadagurinn" on sunday after may 31
-"Jónsmessa" on june 24
-"Hundadagar byrja" on july 13
-"Hundadagar enda" on august 23
-"Alþjóðlegi ljóðadagurinn" on october 15
-"Dagur Sameinuðu Ãjóðanna" on october 24
-"Halloween" on october 31
-"Ãakkargjörðardagurinn (BNA)" on fourth thursday in november
-"Wright bræðra dagur" on december 17
+"ValentÃnusardagur" cultural on february 14
+"St. Patrick dagur" cultural on march 17
+"Sjómannadagurinn" cultural on sunday after may 31
+"Jónsmessa" cultural on june 24
+"Hundadagar byrja" cultural on july 13
+"Hundadagar enda" cultural on august 23
+"Alþjóðlegi ljóðadagurinn" cultural on october 15
+"Dagur Sameinuðu Ãjóðanna" cultural on october 24
+"Halloween" cultural on october 31
+"Ãakkargjörðardagurinn (BNA)" cultural on fourth thursday in november
+"Wright bræðra dagur" cultural on december 17
:: School
:: Daylight Saving
:: Seasons
-"Vorjafndægur" on march 22
-"Sumar sólstöður" on june 22
-"Haustjafndægur" on september 22
-"Vetrarsólstöður" on december 22
+"Vorjafndægur" seasonal on march 22
+"Sumar sólstöður" seasonal on june 22
+"Haustjafndægur" seasonal on september 22
+"Vetrarsólstöður" seasonal on december 22
:: Name Days
diff --git a/kholidays/holidays/plan2/holiday_it-bz_de b/kholidays/holidays/plan2/holiday_it-bz_de
index 5c6e3dc..808e725 100644
--- a/kholidays/holidays/plan2/holiday_it-bz_de
+++ b/kholidays/holidays/plan2/holiday_it-bz_de
@@ -17,39 +17,39 @@ language "de"
:description "(please add description in source language) Regional holiday file for South Tyrol"
:: Public Holidays
-"Neujahr" weekend on january 1
-"Hl. 3 Könige" weekend on january 6
-"Ostersonntag" weekend on easter
-"Ostermontag" weekend on easter plus 1 day
-"Tag der Freiheit" weekend on april 25
-"Tag der Arbeit" weekend on may 1
-"Maria Himmelfahrt" weekend on august 15
-"Allerheiligen" weekend on november 1
-"Maria Empfängnis" weekend on december 8
-"Christtag" weekend on december 25
-"Stephanstag" weekend on december 26
+"Neujahr" public on january 1
+"Hl. 3 Könige" public religious on january 6
+"Ostersonntag" public religious on easter
+"Ostermontag" public on easter plus 1 day
+"Tag der Freiheit" public on april 25
+"Tag der Arbeit" public on may 1
+"Maria Himmelfahrt" public on august 15
+"Allerheiligen" public religious on november 1
+"Maria Empfängnis" public religious on december 8
+"Christtag" public religious on december 25
+"Stephanstag" public religious on december 26
:: Religious
-"Hl. Joseph" on march 19
-"Unnsinger Donnerstag" on easter minus 52 days
-"Faschingsdienstag" on easter minus 47 days
-"Aschermittwoch" on easter minus 46 days
-"Pfingstsonntag" on easter plus 49 days
-"Pfingstmontag" on easter plus 50 days
-"Christi Himmelfahrt" on easter plus 39 days
-"Hl. Peter und Paul" on june 29
-"Hl. Franziskus" on october 4
-"Allerseelen" on november 2
-"Silvester" on december 31
+"Hl. Joseph" religious on march 19
+"Unnsinger Donnerstag" religious on easter minus 52 days
+"Faschingsdienstag" religious on easter minus 47 days
+"Aschermittwoch" religious on easter minus 46 days
+"Pfingstsonntag" religious on easter plus 49 days
+"Pfingstmontag" religious on easter plus 50 days
+"Christi Himmelfahrt" religious on easter plus 39 days
+"Hl. Peter und Paul" religious on june 29
+"Hl. Franziskus" religious on october 4
+"Allerseelen" religious on november 2
+"Silvester" religious on december 31
:: Financial
:: Cultural
-"Tag der Frau" on march 8
-"Vatertag" on march 19
-"Muttertag" on second sunday in may
-"Tag der Republik" on june 2
-"Nationalfeiertag" on november 4
+"Tag der Frau" cultural on march 8
+"Vatertag" cultural on march 19
+"Muttertag" cultural on second sunday in may
+"Tag der Republik" cultural on june 2
+"Nationalfeiertag" cultural on november 4
:: School
diff --git a/kholidays/holidays/plan2/holiday_it_it b/kholidays/holidays/plan2/holiday_it_it
index fbced15..7468767 100644
--- a/kholidays/holidays/plan2/holiday_it_it
+++ b/kholidays/holidays/plan2/holiday_it_it
@@ -18,57 +18,57 @@ language "it"
:description "(please add description in source language) National holiday file for Italy"
:: Public Holidays
-"Capodanno" weekend on january 1
-"Epifania" weekend on january 6
-"Pasqua" weekend on easter
-"Lunedì dell'Angelo" weekend on easter plus 1 day
-"Anniversario della Liberazione" weekend on april 25
-"Festa del Lavoro" weekend on may 1
-"Festa della Repubblica" weekend on june 2
-"Ferragosto" weekend on august 15
-"Ognissanti" weekend on november 1
-"Immacolata Concezione" weekend on december 8
-"Natale" weekend on december 25
-"Santo Stefano" weekend on december 26
+"Capodanno" public on january 1
+"Epifania" public on january 6
+"Pasqua" public on easter
+"Lunedì dell'Angelo" public on easter plus 1 day
+"Anniversario della Liberazione" public on april 25
+"Festa del Lavoro" public on may 1
+"Festa della Repubblica" public on june 2
+"Ferragosto" public on august 15
+"Ognissanti" public on november 1
+"Immacolata Concezione" public on december 8
+"Natale" public on december 25
+"Santo Stefano" public on december 26
:: Religious
-"San Giuseppe" on march 19
-"Giovedì Grasso" on easter minus 52 days
-"Martedì Grasso" on easter minus 47 days
-"Mercoledì delle Ceneri" on easter minus 46 days
-"Prima di Quaresima" on easter minus 42 days
-"Seconda di Quaresima" on easter minus 35 days
-"Terza di Quaresima" on easter minus 28 days
-"Quarta di Quaresima" on easter minus 21 days
-"Quinta di Quaresima" on easter minus 14 days
-"Domenica delle Palme" on easter minus 7 days
-"Ascensione" on easter plus 39 days
-"Pentecoste" on easter plus 49 days
-"Santissima Trinità " on easter plus 56 days
-"Corpus Domini" on easter plus 63 days
-"Sacro Cuore di Gesù" on easter plus 68 days
-"Santi Pietro e Paolo" on june 29
-"San Francesco" on october 4
-"Defunti" on november 2
-"Prima d'avvento" on sunday before 24 december minus 21 days
-"Seconda d'avvento" on sunday before 24 december minus 14 days
-"Terza d'avvento" on sunday before 24 december minus 7 days
-"Quarta d'avvento" on sunday before 24 december
-"San Silvestro" on december 31
+"San Giuseppe" religious on march 19
+"Giovedì Grasso" religious on easter minus 52 days
+"Martedì Grasso" religious on easter minus 47 days
+"Mercoledì delle Ceneri" religious on easter minus 46 days
+"Prima di Quaresima" religious on easter minus 42 days
+"Seconda di Quaresima" religious on easter minus 35 days
+"Terza di Quaresima" religious on easter minus 28 days
+"Quarta di Quaresima" religious on easter minus 21 days
+"Quinta di Quaresima" religious on easter minus 14 days
+"Domenica delle Palme" religious on easter minus 7 days
+"Ascensione" religious on easter plus 39 days
+"Pentecoste" religious on easter plus 49 days
+"Santissima Trinità " religious on easter plus 56 days
+"Corpus Domini" religious on easter plus 63 days
+"Sacro Cuore di Gesù" religious on easter plus 68 days
+"Santi Pietro e Paolo" religious on june 29
+"San Francesco" religious on october 4
+"Defunti" religious on november 2
+"Prima d'avvento" religious on sunday before 24 december minus 21 days
+"Seconda d'avvento" religious on sunday before 24 december minus 14 days
+"Terza d'avvento" religious on sunday before 24 december minus 7 days
+"Quarta d'avvento" religious on sunday before 24 december
+"San Silvestro" religious on december 31
:: Financial
:: Cultural
-"Giornata della Memoria" on january 27
-"Giornata del Ricordo" on february 10
-"Festa della donna" on march 8
-"Festa dell'Unità nazionale" on november 4
+"Giornata della Memoria" cultural on january 27
+"Giornata del Ricordo" cultural on february 10
+"Festa della donna" cultural on march 8
+"Festa dell'Unità nazionale" cultural on november 4
:: School
:: Daylight Saving
-"Passaggio all'ora legale" on last sunday in march
-"Passaggio all'ora solare" on last sunday in october
+"Passaggio all'ora legale" seasonal on last sunday in march
+"Passaggio all'ora solare" seasonal on last sunday in october
:: Seasons
diff --git a/kholidays/holidays/plan2/holiday_jm_en-gb b/kholidays/holidays/plan2/holiday_jm_en-gb
index 8367a10..ac6e1e3 100644
--- a/kholidays/holidays/plan2/holiday_jm_en-gb
+++ b/kholidays/holidays/plan2/holiday_jm_en-gb
@@ -17,26 +17,26 @@ language "en_GB"
:description "(please add description in source language) National holiday file for Jamaica"
:: Public Holidays
-"New Year's Day" weekend on january 1
-"Ash Wednesday" weekend on february 25
-"Good Friday" weekend on easter minus 2 days
-"Easter" weekend on easter
-"Easter Monday" weekend on easter plus 1 day
-"Labour Day" weekend on may 23
-"Emancipation Day" weekend on august 1
-"Independence Day" weekend on august 6
-"National Heroes Day" weekend on third monday in october
-"Christmas" weekend on december 25
-"Boxing Day" weekend on december 26
+"New Year's Day" public on january 1
+"Ash Wednesday" public religious on february 25
+"Good Friday" public religious on easter minus 2 days
+"Easter" public religious on easter
+"Easter Monday" public on easter plus 1 day
+"Labour Day" public on may 23
+"Emancipation Day" public on august 1
+"Independence Day" public on august 6
+"National Heroes Day" public on third monday in october
+"Christmas" public religious on december 25
+"Boxing Day" public on december 26
:: Religious
:: Financial
:: Cultural
-"Valentine's Day" on february 14
-"Mother's Day" on second sunday in may
-"Father's Day" on third sunday in june
+"Valentine's Day" cultural on february 14
+"Mother's Day" cultural on second sunday in may
+"Father's Day" cultural on third sunday in june
:: School
diff --git a/kholidays/holidays/plan2/holiday_jp_en-us b/kholidays/holidays/plan2/holiday_jp_en-us
index d9e58dc..ebad669 100644
--- a/kholidays/holidays/plan2/holiday_jp_en-us
+++ b/kholidays/holidays/plan2/holiday_jp_en-us
@@ -17,51 +17,51 @@ language "en_US"
description "National holiday file for Japan"
:: Public Holidays
-"New Year's Day" weekend on january 1
-"Coming of Age" weekend on second monday in january
-"National Foundation Day" weekend on february 11
-"Vernal Equinox Day" weekend on 20.3.2005
-"Vernal Equinox Day" weekend on 21.3.2006
-"Vernal Equinox Day" weekend on 21.3.2007
-"Vernal Equinox Day" weekend on 20.3.2008
-"Vernal Equinox Day" weekend on 20.3.2009
-"Vernal Equinox Day" weekend on 21.3.2010
-"Greenery Day" weekend on april 29
-"Constitution Day" weekend on may 3
-"Holiday" weekend on may 4
-"Children's Day" weekend on may 5
-"Oceans' Day" weekend on third monday in july
-"Respect for Senior Citizens Day" weekend on third monday in september
-"Autumnal Equinox Day" weekend on september 23
-"Sports Day" weekend on second monday in october
-"Culture Day" weekend on november 3
-"Labor Thanksgiving Day" weekend on november 23
-"The Emperor's Birthday" weekend on december 23
+"New Year's Day" public on january 1
+"Coming of Age" public on second monday in january
+"National Foundation Day" public on february 11
+"Vernal Equinox Day" public on 20.3.2005
+"Vernal Equinox Day" public on 21.3.2006
+"Vernal Equinox Day" public on 21.3.2007
+"Vernal Equinox Day" public on 20.3.2008
+"Vernal Equinox Day" public on 20.3.2009
+"Vernal Equinox Day" public on 21.3.2010
+"Greenery Day" public on april 29
+"Constitution Day" public on may 3
+"Holiday" public on may 4
+"Children's Day" public on may 5
+"Oceans' Day" public on third monday in july
+"Respect for Senior Citizens Day" public on third monday in september
+"Autumnal Equinox Day" public on september 23
+"Sports Day" public on second monday in october
+"Culture Day" public on november 3
+"Labor Thanksgiving Day" public on november 23
+"The Emperor's Birthday" public on december 23
:: If a "National Holiday" is on Sunday,the following day
:: shall be a substitute holiday.
-"Substitute holiday" weekend on 21.3.2005
-"Substitute holiday" weekend on 2.1.2006
-"Substitute holiday" weekend on 12.2.2007
-"Substitute holiday" weekend on 30.4.2007
-"Substitute holiday" weekend on 24.9.2007
-"Substitute holiday" weekend on 24.12.2007
-"Substitute holiday" weekend on 24.11.2008
-"Substitute holiday" weekend on 22.3.2010
+"Substitute holiday" public on 21.3.2005
+"Substitute holiday" public on 2.1.2006
+"Substitute holiday" public on 12.2.2007
+"Substitute holiday" public on 30.4.2007
+"Substitute holiday" public on 24.9.2007
+"Substitute holiday" public on 24.12.2007
+"Substitute holiday" public on 24.11.2008
+"Substitute holiday" public on 22.3.2010
:: Religious
:: Financial
:: Cultural
-"St. Valentine's Day" on february 14
-"Girls' Festival" on march 3
-"Buddha's Birthday" on april 8
-"May Day" on may 1
-"Boys' Festival" on may 5
-"Mother's Day" on second sunday in may
-"Father's Day" on third sunday in june
-"Festival of the Weaver Star" on july 7
-"Christmas" on december 25
+"St. Valentine's Day" cultural on february 14
+"Girls' Festival" cultural on march 3
+"Buddha's Birthday" cultural on april 8
+"May Day" cultural on may 1
+"Boys' Festival" cultural on may 5
+"Mother's Day" cultural on second sunday in may
+"Father's Day" cultural on third sunday in june
+"Festival of the Weaver Star" cultural on july 7
+"Christmas" cultural on december 25
:: School
diff --git a/kholidays/holidays/plan2/holiday_jp_ja b/kholidays/holidays/plan2/holiday_jp_ja
index 844cc48..b61f2d8 100644
--- a/kholidays/holidays/plan2/holiday_jp_ja
+++ b/kholidays/holidays/plan2/holiday_jp_ja
@@ -18,67 +18,67 @@ language "ja"
:: Public Holidays
:"New Year's Day"
-"å
æ¦" weekend on january 1
+"å
æ¦" public on january 1
:"Coming of Age"
-"æ人ã®æ¥" weekend on second monday in january
+"æ人ã®æ¥" public on second monday in january
:"National Foundation Day"
-"建å½è¨å¿µæ¥" weekend on february 11
+"建å½è¨å¿µæ¥" public on february 11
:"Vernal Equinox Day"
-"æ¥åã®æ¥" weekend on 20.3.2005
-"æ¥åã®æ¥" weekend on 21.3.2006
-"æ¥åã®æ¥" weekend on 21.3.2007
-"æ¥åã®æ¥" weekend on 21.3.2008
-"æ¥åã®æ¥" weekend on 21.3.2009
-"æ¥åã®æ¥" weekend on 21.3.2010
+"æ¥åã®æ¥" public on 20.3.2005
+"æ¥åã®æ¥" public on 21.3.2006
+"æ¥åã®æ¥" public on 21.3.2007
+"æ¥åã®æ¥" public on 21.3.2008
+"æ¥åã®æ¥" public on 21.3.2009
+"æ¥åã®æ¥" public on 21.3.2010
:"Greenery Day"
-"ã¿ã©ãã®æ¥" weekend on april 29
+"ã¿ã©ãã®æ¥" public on april 29
:"Constitution Day"
-"æ²æ³è¨å¿µæ¥" weekend on may 3
+"æ²æ³è¨å¿µæ¥" public on may 3
:"Holiday"
-"ä¼æ¥" weekend on may 4
+"ä¼æ¥" public on may 4
:"Children's Day"
-"ãã©ãã®æ¥" weekend on may 5
+"ãã©ãã®æ¥" public on may 5
:"Oceans' Day"
-"æµ·ã®æ¥" weekend on third monday in july
+"æµ·ã®æ¥" public on third monday in july
:"Respect for Senior Citizens Day"
-"æ¬èã®æ¥" weekend on third monday in september
+"æ¬èã®æ¥" public on third monday in september
:"Autumnal Equinox Day"
-"ç§åã®æ¥" weekend on september 23
+"ç§åã®æ¥" public on september 23
:"Sports Day"
-"ä½è²ã®æ¥" weekend on second monday in october
+"ä½è²ã®æ¥" public on second monday in october
:"Culture Day"
-"æåã®æ¥" weekend on november 3
+"æåã®æ¥" public on november 3
:"Labor Thanksgiving Day"
-"å¤å´æè¬ã®æ¥" weekend on november 23
+"å¤å´æè¬ã®æ¥" public on november 23
:"The Emperor's Birthday"
-"天çèªçæ¥" weekend on december 23
+"天çèªçæ¥" public on december 23
:: If a "National Holiday" is on Sunday,the following day
:: shall be a substitute holiday.
:"Substitute holiday"
-"æ¯æ¿ä¼æ¥" weekend on 21.3.2005
-"æ¯æ¿ä¼æ¥" weekend on 2.1.2006
-"æ¯æ¿ä¼æ¥" weekend on 12.2.2007
-"æ¯æ¿ä¼æ¥" weekend on 30.4.2007
-"æ¯æ¿ä¼æ¥" weekend on 24.9.2007
-"æ¯æ¿ä¼æ¥" weekend on 24.12.2007
-"æ¯æ¿ä¼æ¥" weekend on 24.11.2008
-"æ¯æ¿ä¼æ¥" weekend on 22.3.2010
+"æ¯æ¿ä¼æ¥" public on 21.3.2005
+"æ¯æ¿ä¼æ¥" public on 2.1.2006
+"æ¯æ¿ä¼æ¥" public on 12.2.2007
+"æ¯æ¿ä¼æ¥" public on 30.4.2007
+"æ¯æ¿ä¼æ¥" public on 24.9.2007
+"æ¯æ¿ä¼æ¥" public on 24.12.2007
+"æ¯æ¿ä¼æ¥" public on 24.11.2008
+"æ¯æ¿ä¼æ¥" public on 22.3.2010
:: Religious
:: Financial
:: Cultural
-:"St. Valentine's Day" on february 14
-:"Girls' Festival" on march 3
-:"Buddha's Birthday" on april 8
-:"May Day" on may 1
-:"Boys' Festival" on may 5
-:"Mother's Day" on second sunday in may
-:"Father's Day" on third sunday in june
-:"Festival of the Weaver Star" on july 7
-:"Christmas" on december 25
+:"St. Valentine's Day" cultural on february 14
+:"Girls' Festival" cultural on march 3
+:"Buddha's Birthday" cultural on april 8
+:"May Day" cultural on may 1
+:"Boys' Festival" cultural on may 5
+:"Mother's Day" cultural on second sunday in may
+:"Father's Day" cultural on third sunday in june
+:"Festival of the Weaver Star" cultural on july 7
+:"Christmas" cultural on december 25
:: School
diff --git a/kholidays/holidays/plan2/holiday_kr_ko b/kholidays/holidays/plan2/holiday_kr_ko
index 2bc7a7a..73dcfc8 100644
--- a/kholidays/holidays/plan2/holiday_kr_ko
+++ b/kholidays/holidays/plan2/holiday_kr_ko
@@ -24,57 +24,57 @@ language "ko"
:: Public Holidays
: New Year's Day
-"ìë ¥ì¤" weekend on january 1
+"ìë ¥ì¤" public on january 1
: March 1st Movement Day
-"3·1ì " weekend on march 1
+"3·1ì " public on march 1
: Children's Day
-"ì´ë¦°ì´ë " weekend on may 5
+"ì´ë¦°ì´ë " public on may 5
: Memorial Day
-"í충ì¼" weekend on june 6
+"í충ì¼" public on june 6
: Liberation Day
-"ê´ë³µì " weekend on august 15
+"ê´ë³µì " public on august 15
: National Foundation Day
-"ê°ì²ì " weekend on october 3
+"ê°ì²ì " public on october 3
: Christmas Day
-"í¬ë¦¬ì¤ë§ì¤" weekend on december 25
+"í¬ë¦¬ì¤ë§ì¤" public on december 25
: Lunar Holidays
: Lunar New Year: Day 1 Month 1
-"ì¤ë " weekend on 8.2.2005 length 3 days
-"ì¤ë " weekend on 28.1.2006 length 3 days
-"ì¤ë " weekend on 17.2.2007 length 3 days
-"ì¤ë " weekend on 6.2.2008 length 3 days
-"ì¤ë " weekend on 25.1.2009 length 3 days
-"ì¤ë " weekend on 13.2.2010 length 3 days
-"ì¤ë " weekend on 2.2.2011 length 3 days
-"ì¤ë " weekend on 22.1.2012 length 3 days
-"ì¤ë " weekend on 9.2.2013 length 3 days
-"ì¤ë " weekend on 30.1.2014 length 3 days
-"ì¤ë " weekend on 18.2.2015 length 3 days
-"ì¤ë " weekend on 7.2.2016 length 3 days
+"ì¤ë " public on 8.2.2005 length 3 days
+"ì¤ë " public on 28.1.2006 length 3 days
+"ì¤ë " public on 17.2.2007 length 3 days
+"ì¤ë " public on 6.2.2008 length 3 days
+"ì¤ë " public on 25.1.2009 length 3 days
+"ì¤ë " public on 13.2.2010 length 3 days
+"ì¤ë " public on 2.2.2011 length 3 days
+"ì¤ë " public on 22.1.2012 length 3 days
+"ì¤ë " public on 9.2.2013 length 3 days
+"ì¤ë " public on 30.1.2014 length 3 days
+"ì¤ë " public on 18.2.2015 length 3 days
+"ì¤ë " public on 7.2.2016 length 3 days
: Buddha's Birthday: Day 8 Month 4
-"ë¶ì²ë ì¤ì ë " weekend on 24.5.2007
-"ë¶ì²ë ì¤ì ë " weekend on 12.5.2008
-"ë¶ì²ë ì¤ì ë " weekend on 2.5.2009
-"ë¶ì²ë ì¤ì ë " weekend on 21.5.2010
-"ë¶ì²ë ì¤ì ë " weekend on 10.5.2011
-"ë¶ì²ë ì¤ì ë " weekend on 28.5.2012
-"ë¶ì²ë ì¤ì ë " weekend on 17.5.2013
-"ë¶ì²ë ì¤ì ë " weekend on 6.5.2014
-"ë¶ì²ë ì¤ì ë " weekend on 25.5.2015
-"ë¶ì²ë ì¤ì ë " weekend on 14.5.2016
+"ë¶ì²ë ì¤ì ë " public religious on 24.5.2007
+"ë¶ì²ë ì¤ì ë " public religious on 12.5.2008
+"ë¶ì²ë ì¤ì ë " public religious on 2.5.2009
+"ë¶ì²ë ì¤ì ë " public religious on 21.5.2010
+"ë¶ì²ë ì¤ì ë " public religious on 10.5.2011
+"ë¶ì²ë ì¤ì ë " public religious on 28.5.2012
+"ë¶ì²ë ì¤ì ë " public religious on 17.5.2013
+"ë¶ì²ë ì¤ì ë " public religious on 6.5.2014
+"ë¶ì²ë ì¤ì ë " public religious on 25.5.2015
+"ë¶ì²ë ì¤ì ë " public religious on 14.5.2016
: Chuseok: Day 15 Month 8
-"ì¶ì" weekend on 17.9.2005 length 3 days
-"ì¶ì" weekend on 5.10.2006 length 3 days
-"ì¶ì" weekend on 24.9.2007 length 3 days
-"ì¶ì" weekend on 13.9.2008 length 3 days
-"ì¶ì" weekend on 2.10.2009 length 3 days
-"ì¶ì" weekend on 21.9.2010 length 3 days
-"ì¶ì" weekend on 11.9.2011 length 3 days
-"ì¶ì" weekend on 29.9.2012 length 3 days
-"ì¶ì" weekend on 18.9.2013 length 3 days
-"ì¶ì" weekend on 7.9.2014 length 3 days
-"ì¶ì" weekend on 26.9.2015 length 3 days
-"ì¶ì" weekend on 14.9.2016 length 3 days
+"ì¶ì" public on 17.9.2005 length 3 days
+"ì¶ì" public on 5.10.2006 length 3 days
+"ì¶ì" public on 24.9.2007 length 3 days
+"ì¶ì" public on 13.9.2008 length 3 days
+"ì¶ì" public on 2.10.2009 length 3 days
+"ì¶ì" public on 21.9.2010 length 3 days
+"ì¶ì" public on 11.9.2011 length 3 days
+"ì¶ì" public on 29.9.2012 length 3 days
+"ì¶ì" public on 18.9.2013 length 3 days
+"ì¶ì" public on 7.9.2014 length 3 days
+"ì¶ì" public on 26.9.2015 length 3 days
+"ì¶ì" public on 14.9.2016 length 3 days
:: Religious
@@ -82,9 +82,9 @@ language "ko"
:: Cultural
: Constitution Day
-"ì íì " on july 17
+"ì íì " civil on july 17
: Hangeul Day
-"íê¸ë " on october 9
+"íê¸ë " cultural on october 9
:: School
diff --git a/kholidays/holidays/plan2/holiday_kz_kk b/kholidays/holidays/plan2/holiday_kz_kk
index 71fc7d7..3f6affb 100644
--- a/kholidays/holidays/plan2/holiday_kz_kk
+++ b/kholidays/holidays/plan2/holiday_kz_kk
@@ -18,21 +18,21 @@ description "ÒазаÒÑÑан РеÑпÑбликаÑÑнÑÒ£ мейÑамда
:: Public Holidays
:: New Year
-"Ðаңа жÑл" weekend on january 1 length 2 days
+"Ðаңа жÑл" public on january 1 length 2 days
:: International Womenâs Day
-"ХалÑÒаÑалÑÒ ÓÐ¹ÐµÐ»Ð´ÐµÑ ÐºÒ¯Ð½Ñ" weekend on march 8
+"ХалÑÒаÑалÑÒ ÓÐ¹ÐµÐ»Ð´ÐµÑ ÐºÒ¯Ð½Ñ" public on march 8
:: Nauryz
-"ÐаÑÑÑз мейÑамÑ" weekend on march 22
+"ÐаÑÑÑз мейÑамÑ" public on march 22
:: Kazakhstan Peoples Solidarity Holiday
-"ÒазаÒÑÑан Ñ
алÒÑнÑÒ£ бÑÑлÑÐ³Ñ Ð¼ÐµÑекеÑÑ" weekend on may 1
+"ÒазаÒÑÑан Ñ
алÒÑнÑÒ£ бÑÑлÑÐ³Ñ Ð¼ÐµÑекеÑÑ" public on may 1
:: Victory Day
-"ÐеңÑÑ ÐºÒ¯Ð½Ñ" weekend on may 9
+"ÐеңÑÑ ÐºÒ¯Ð½Ñ" public on may 9
:: Capital City Day
-"ÐÑÑана күнÑ" weekend on july 6
+"ÐÑÑана күнÑ" public on july 6
:: The Republic of Kazakhstan Constitution Day
-"ÒазаÒÑÑан РеÑпÑбликаÑÑнÑÒ£ ÐонÑÑиÑÑÑиÑÑÑ ÐºÒ¯Ð½Ñ" weekend on august 30
+"ÒазаÒÑÑан РеÑпÑбликаÑÑнÑÒ£ ÐонÑÑиÑÑÑиÑÑÑ ÐºÒ¯Ð½Ñ" public on august 30
:: Independence Day
-"ТÓÑелÑÑздÑк күнÑ" weekend on december 16 length 2 days
+"ТÓÑелÑÑздÑк күнÑ" public on december 16 length 2 days
:: Religious
@@ -49,81 +49,81 @@ description "ÒазаÒÑÑан РеÑпÑбликаÑÑнÑÒ£ мейÑамда
:: Name Days
:: Professional Holidays
-"ÐнженеÑлiк ÓÑкеÑÐ»ÐµÑ ÐºÒ¯Ð½i" on january 21
-"ХаÑÑÑÐ»Ð°Ñ ÐºÒ¯Ð½i" on february 27
-"РеÑпÑбликалÑÒ Ò±Ð»Ð°Ð½ күнi" on march 16
-"СаÑда күнi" on march 18
-"ТеаÑÑ ÐºÒ¯Ð½i" on march 27
-"Ðеолог күнi" on april 1
-"Ðүлкi күнi" on april 1
-"ÒазаÒÑÑан РеÑпÑбликаÑÑ ÓÑкеÑи-Ñеңiз күÑÑеÑi күнi" on april 2
-"ТеÑгеÑÑÑ ÐºÒ¯Ð½Ñ" on april 6
-"ÒаÑÑÑÐºÐµÑ ÐºÒ¯Ð½Ñ" on april 12
-"ÓÑе ÒоÑÒанÑÑ ÓÑкеÑлеÑiнiÒ£ күнi" on april 15
-"ÒÑлÑм күнi" on april 16
-"Ó¨ÑÑке ÒаÑÑÑ ÒÑÐ·Ð¼ÐµÑ ÒÑзмеÑкеÑлеÑiнiÒ£ күнi" on april 17
-"ÐүкiлÓлемдiк еңбек ÒоÑÒÐ°Ñ ÐºÒ¯Ð½Ñ" on april 28
-"ХалÑÒаÑалÑÒ Ð±Ð¸ күнi" on april 29
-"Радио күнÑ" on may 5
+"ÐнженеÑлiк ÓÑкеÑÐ»ÐµÑ ÐºÒ¯Ð½i" civil on january 21
+"ХаÑÑÑÐ»Ð°Ñ ÐºÒ¯Ð½i" civil on february 27
+"РеÑпÑбликалÑÒ Ò±Ð»Ð°Ð½ күнi" civil on march 16
+"СаÑда күнi" civil on march 18
+"ТеаÑÑ ÐºÒ¯Ð½i" civil on march 27
+"Ðеолог күнi" civil on april 1
+"Ðүлкi күнi" civil on april 1
+"ÒазаÒÑÑан РеÑпÑбликаÑÑ ÓÑкеÑи-Ñеңiз күÑÑеÑi күнi" civil on april 2
+"ТеÑгеÑÑÑ ÐºÒ¯Ð½Ñ" civil on april 6
+"ÒаÑÑÑÐºÐµÑ ÐºÒ¯Ð½Ñ" civil on april 12
+"ÓÑе ÒоÑÒанÑÑ ÓÑкеÑлеÑiнiÒ£ күнi" civil on april 15
+"ÒÑлÑм күнi" civil on april 16
+"Ó¨ÑÑке ÒаÑÑÑ ÒÑÐ·Ð¼ÐµÑ ÒÑзмеÑкеÑлеÑiнiÒ£ күнi" civil on april 17
+"ÐүкiлÓлемдiк еңбек ÒоÑÒÐ°Ñ ÐºÒ¯Ð½Ñ" civil on april 28
+"ХалÑÒаÑалÑÒ Ð±Ð¸ күнi" civil on april 29
+"Радио күнÑ" civil on may 5
:: Fatherland Defenderâs Day
-"ÐÑан ÒоÑÒаÑÑÑ ÐºÒ¯Ð½Ñ" on may 7
-"ХимикÑÐµÑ ÐºÒ¯Ð½i" on may 27
+"ÐÑан ÒоÑÒаÑÑÑ ÐºÒ¯Ð½Ñ" civil on may 7
+"ХимикÑÐµÑ ÐºÒ¯Ð½i" civil on may 27
:: Political Repression Victims Memory Day
-"СаÑÑи ÒÑÒÑн-ÑÒ¯ÑгÑÐ½Ð´ÐµÑ ÒÒ±ÑбандаÑÑн еÑке" on may 31
-"ÐалалаÑÐ´Ñ ÒоÑÒÐ°Ñ ÐºÒ¯Ð½i" on june 1
+"СаÑÑи ÒÑÒÑн-ÑÒ¯ÑгÑÐ½Ð´ÐµÑ ÒÒ±ÑбандаÑÑн еÑке" civil on may 31
+"ÐалалаÑÐ´Ñ ÒоÑÒÐ°Ñ ÐºÒ¯Ð½i" civil on june 1
:: The Republic of Kazakhstan National Symbolsâ Day
-"ÒазаÒÑÑан РеÑпÑбликаÑÑнÑÒ£ мемлекеÑÑÑк" on june 4
-"ÐйналадаÒÑ Ð¾ÑÑÐ°Ð½Ñ ÒоÑÒÐ°Ñ ÐºÒ¯Ð½Ñ" on june 5
-"ÐүкiлÓлемдiк Ð´Ð¾Ð½Ð¾Ñ ÐºÒ¯Ð½i" on june 14
+"ÒазаÒÑÑан РеÑпÑбликаÑÑнÑÒ£ мемлекеÑÑÑк" civil on june 4
+"ÐйналадаÒÑ Ð¾ÑÑÐ°Ð½Ñ ÒоÑÒÐ°Ñ ÐºÒ¯Ð½Ñ" civil on june 5
+"ÐүкiлÓлемдiк Ð´Ð¾Ð½Ð¾Ñ ÐºÒ¯Ð½i" civil on june 14
:: Police Day
-"ÐолиÑÐ¸Ñ ÐºÒ¯Ð½Ñ" on june 23
+"ÐолиÑÐ¸Ñ ÐºÒ¯Ð½Ñ" civil on june 23
:: Health Professionalsâ Day
-"ÐедиÑина ÒÑзмеÑкеÑÑ ÐºÒ¯Ð½Ñ" on third sunday in june
+"ÐедиÑина ÒÑзмеÑкеÑÑ ÐºÒ¯Ð½Ñ" civil on third sunday in june
:: Press, TV and Radio Day
-"ÐаÑпаÑөз, ÑÐµÐ»ÐµÐ´Ð¸Ð´Ð°Ñ Ð¶Óне Ñадио күнi" on last sunday in june
+"ÐаÑпаÑөз, ÑÐµÐ»ÐµÐ´Ð¸Ð´Ð°Ñ Ð¶Óне Ñадио күнi" civil on last sunday in june
:: Diplomatic service Day
-"ÐипломаÑиÑлÑÒ ÒÑÐ·Ð¼ÐµÑ ÐºÒ¯Ð½Ñ" on july 2
-"ÐүкiлÓлемдiк ÑүйÑÑÑ ÐºÒ¯Ð½Ñ" on july 6
-"ҰлÑÑÑÒ ÒаÑiпÑiздiк комиÑеÑiнiÒ£ күнi. ÐÑокÑÑаÑÑÑа күнi" on july 13
-"ТеңÑз жÓне өзен ÑлоÑÑ ÐºÒ¯Ð½Ñ" on first sunday in july
+"ÐипломаÑиÑлÑÒ ÒÑÐ·Ð¼ÐµÑ ÐºÒ¯Ð½Ñ" civil on july 2
+"ÐүкiлÓлемдiк ÑүйÑÑÑ ÐºÒ¯Ð½Ñ" civil on july 6
+"ҰлÑÑÑÒ ÒаÑiпÑiздiк комиÑеÑiнiÒ£ күнi. ÐÑокÑÑаÑÑÑа күнi" civil on july 13
+"ТеңÑз жÓне өзен ÑлоÑÑ ÐºÒ¯Ð½Ñ" civil on first sunday in july
:: Metal-Makerâs Day
-"ÐеÑаллÑÑг күнÑ" on third sunday in july
-"ÐүйелÑк админиÑÑÑаÑÐ¾Ñ ÐºÒ¯Ð½Ñ" on last sunday in july
-"ÓÑе-деÑÐ°Ð½Ñ ÓÑкеÑлеÑÑнÑÒ£ күнÑ" on august 2
-"ШекаÑалÑÒ ÓÑкеÑÐ»ÐµÑ ÐºÒ¯Ð½i" on august 18
-"ÓÑе ÑлоÑÑ ÐºÒ¯Ð½i" on august 19
-"ÐөлÑк жÓне байланÑÑ ÒÑзмеÑкеÑлеÑÑ ÐºÒ¯Ð½Ñ" on first sunday in august
+"ÐеÑаллÑÑг күнÑ" civil on third sunday in july
+"ÐүйелÑк админиÑÑÑаÑÐ¾Ñ ÐºÒ¯Ð½Ñ" civil on last sunday in july
+"ÓÑе-деÑÐ°Ð½Ñ ÓÑкеÑлеÑÑнÑÒ£ күнÑ" civil on august 2
+"ШекаÑалÑÒ ÓÑкеÑÐ»ÐµÑ ÐºÒ¯Ð½i" civil on august 18
+"ÓÑе ÑлоÑÑ ÐºÒ¯Ð½i" civil on august 19
+"ÐөлÑк жÓне байланÑÑ ÒÑзмеÑкеÑлеÑÑ ÐºÒ¯Ð½Ñ" civil on first sunday in august
:: Builderâs Day
-"ÒÒ±ÑÑлÑÑÑÑ ÐºÒ¯Ð½Ñ" on second sunday in august
+"ÒÒ±ÑÑлÑÑÑÑ ÐºÒ¯Ð½Ñ" civil on second sunday in august
:: Sports Day
-"СпоÑÑ ÐºÒ¯Ð½Ñ" on third sunday in august
+"СпоÑÑ ÐºÒ¯Ð½Ñ" civil on third sunday in august
:: Minerâs day
-"ШаÑ
ÑÐµÑ ÐºÒ¯Ð½Ñ" on last sunday in august
+"ШаÑ
ÑÐµÑ ÐºÒ¯Ð½Ñ" civil on last sunday in august
:: Knowledge day
-"Ðiлiм күнi" on september 1
+"Ðiлiм күнi" civil on september 1
:: Oil and Gas Complex Workersâ Day
-"Ðұнай-газ кеÑÐµÐ½Ñ ÒÑзмеÑкеÑлеÑÑнÑÒ£ күнÑ" on first sunday in september
-"ТанкиÑÑÐµÑ ÐºÒ¯Ð½Ñ" on second sunday in september
+"Ðұнай-газ кеÑÐµÐ½Ñ ÒÑзмеÑкеÑлеÑÑнÑÒ£ күнÑ" civil on first sunday in september
+"ТанкиÑÑÐµÑ ÐºÒ¯Ð½Ñ" civil on second sunday in september
:: The Republic of Kazakhstan Languages Day
-"ÒазаÒÑÑан РеÑпÑбликаÑÑнÑÒ£ Ñ
алÑÒÑаÑÑ" on third sunday in september
+"ÒазаÒÑÑан РеÑпÑбликаÑÑнÑÒ£ Ñ
алÑÒÑаÑÑ" civil on third sunday in september
:: Nuclear Industry Workersâ Day
-"ÐÑом ÑалаÑÑнÑÒ£ ÒÑзмеÑкеÑлеÑÑ ÐºÒ¯Ð½Ñ" on september 28
-"СÓÑлеÑÑi күнi" on october 5
-"ÐÑепÑiÐ»ÐµÑ Ð¶Óне ÑекÑеÑÑÑiÐ»ÐµÑ ÐºÒ¯Ð½i" on october 6
-"ÐүкÑлÓлемдÑк поÑÑа күнÑ" on october 9
-"ÐiÑапÑ
анаÑÑ ÐºÒ¯Ð½i" on october 15
-"ÐайланÑÑ ÒÑзмеÑкеÑлеÑiнiÒ£ күнi" on october 20
-"ÐвÑÐ¾Ð¼Ð¾Ð±Ð¸Ð»Ñ ÐºÓ©Ð»iгi ÒÑзмеÑкеÑлеÑiнiÒ£ күнi" on october 28
+"ÐÑом ÑалаÑÑнÑÒ£ ÒÑзмеÑкеÑлеÑÑ ÐºÒ¯Ð½Ñ" civil on september 28
+"СÓÑлеÑÑi күнi" civil on october 5
+"ÐÑепÑiÐ»ÐµÑ Ð¶Óне ÑекÑеÑÑÑiÐ»ÐµÑ ÐºÒ¯Ð½i" civil on october 6
+"ÐүкÑлÓлемдÑк поÑÑа күнÑ" civil on october 9
+"ÐiÑапÑ
анаÑÑ ÐºÒ¯Ð½i" civil on october 15
+"ÐайланÑÑ ÒÑзмеÑкеÑлеÑiнiÒ£ күнi" civil on october 20
+"ÐвÑÐ¾Ð¼Ð¾Ð±Ð¸Ð»Ñ ÐºÓ©Ð»iгi ÒÑзмеÑкеÑлеÑiнiÒ£ күнi" civil on october 28
:: Teacherâs Day
-"ÐÒ±Òалiм күнi" on first sunday in october
+"ÐÒ±Òалiм күнi" civil on first sunday in october
:: National Currency Day
-"ҰлÑÑÑÒ Ð²Ð°Ð»ÑÑа күнÑ" on november 15
-"СÑÑденÑÑÐµÑ ÐºÒ¯Ð½i" on november 17
-"РакеÑа ÓÑкеÑлеÑÑ Ð¶Óне аÑÑиллеÑÐ¸Ñ ÐºÒ¯Ð½i" on november 17
-"Ðол полиÑиÑÑÑ ÒÑзмеÑкеÑлеÑiнiÒ£ күнi" on november 23
+"ҰлÑÑÑÒ Ð²Ð°Ð»ÑÑа күнÑ" civil on november 15
+"СÑÑденÑÑÐµÑ ÐºÒ¯Ð½i" civil on november 17
+"РакеÑа ÓÑкеÑлеÑÑ Ð¶Óне аÑÑиллеÑÐ¸Ñ ÐºÒ¯Ð½i" civil on november 17
+"Ðол полиÑиÑÑÑ ÒÑзмеÑкеÑлеÑiнiÒ£ күнi" civil on november 23
:: Agriculture Workersâ Day
-"ÐÑÑл ÑаÑÑаÑÑлÑÒÑ ÒÑзмеÑкеÑлеÑÑнÑÒ£ күнÑ" on third sunday in november
-"ÒазаÒÑÑан РеÑпÑбликаÑÑ ÐºÐµÐ´ÐµÐ½ ÒÑзмеÑiнiÒ£ күнi" on december 12
-"ÐкономиÑÑ ÐºÒ¯Ð½i" on december 25
+"ÐÑÑл ÑаÑÑаÑÑлÑÒÑ ÒÑзмеÑкеÑлеÑÑнÑÒ£ күнÑ" civil on third sunday in november
+"ÒазаÒÑÑан РеÑпÑбликаÑÑ ÐºÐµÐ´ÐµÐ½ ÒÑзмеÑiнiÒ£ күнi" civil on december 12
+"ÐкономиÑÑ ÐºÒ¯Ð½i" civil on december 25
:: Power Engineerâs Day
-"ÐнеÑгеÑик күнÑ" on third sunday in december
+"ÐнеÑгеÑик күнÑ" civil on third sunday in december
diff --git a/kholidays/holidays/plan2/holiday_kz_ru b/kholidays/holidays/plan2/holiday_kz_ru
index 96d1f38..37917c2 100644
--- a/kholidays/holidays/plan2/holiday_kz_ru
+++ b/kholidays/holidays/plan2/holiday_kz_ru
@@ -19,21 +19,21 @@ description "ÐÑаздники РеÑпÑблики ÐазаÑ
ÑÑан"
:: Public Holidays
:: New Year
-"ÐовÑй год" weekend on january 1 length 2 days
+"ÐовÑй год" public on january 1 length 2 days
:: International Womenâs Day
-"ÐеждÑнаÑоднÑй женÑкий денÑ" weekend on march 8
+"ÐеждÑнаÑоднÑй женÑкий денÑ" public on march 8
:: Nauryz
-"ÐаÑÑÑз мейÑамÑ" weekend on march 22
+"ÐаÑÑÑз мейÑамÑ" public on march 22
:: Kazakhstan Peoples Solidarity Holiday
-"ÐÑаздник единÑÑва наÑода ÐазаÑ
ÑÑана" weekend on may 1
+"ÐÑаздник единÑÑва наÑода ÐазаÑ
ÑÑана" public on may 1
:: Victory Day
-"ÐÐµÐ½Ñ ÐобедÑ" weekend on may 9
+"ÐÐµÐ½Ñ ÐобедÑ" public on may 9
:: Capital City Day
-"ÐÐµÐ½Ñ Ð¡ÑолиÑÑ" weekend on july 6
+"ÐÐµÐ½Ñ Ð¡ÑолиÑÑ" public on july 6
:: The Republic of Kazakhstan Constitution Day
-"ÐÐµÐ½Ñ ÐонÑÑиÑÑÑии РеÑпÑблики ÐазаÑ
ÑÑан" weekend on august 30
+"ÐÐµÐ½Ñ ÐонÑÑиÑÑÑии РеÑпÑблики ÐазаÑ
ÑÑан" public on august 30
:: Independence Day
-"ÐÐµÐ½Ñ ÐезавиÑимоÑÑи" weekend on december 16 length 2 days
+"ÐÐµÐ½Ñ ÐезавиÑимоÑÑи" public on december 16 length 2 days
:: Religious
@@ -50,82 +50,82 @@ description "ÐÑаздники РеÑпÑблики ÐазаÑ
ÑÑан"
:: Name Days
:: Professional Holidays
-"ÐÐµÐ½Ñ Ð¸Ð½Ð¶ÐµÐ½ÐµÑнÑÑ
войÑк" on january 21
-"ÐÐµÐ½Ñ ÑекÑеÑаÑÑ" on february 27
-"ÐÐµÐ½Ñ ÑеÑпÑбликанÑкой гваÑдии" on march 16
-"ÐÐµÐ½Ñ ÑоÑговли" on march 18
-"ÐÐµÐ½Ñ ÑеаÑÑа" on march 27
-"ÐÐµÐ½Ñ Ð³ÐµÐ¾Ð»Ð¾Ð³Ð°" on april 1
-"ÐÐµÐ½Ñ ÑмеÑ
а" on april 1
-"ÐÐµÐ½Ñ Ð¾Ð±ÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð²Ð¾ÐµÐ½Ð½Ð¾-моÑÑкиÑ
Ñил Ð Ð" on april 2
-"ÐÐµÐ½Ñ ÑледÑÑвиÑ" on april 6
-"ÐÐµÐ½Ñ ÐºÐ¾ÑмонавÑики" on april 12
-"ÐÐµÐ½Ñ Ð²Ð¾Ð¹Ñк пÑоÑивовоздÑÑной обоÑонÑ" on april 15
-"ÐÐµÐ½Ñ Ð½Ð°Ñки" on april 16
-"ÐÐµÐ½Ñ ÑабоÑников пожаÑной оÑ
ÑанÑ" on april 17
-"ÐÑемиÑнÑй Ð´ÐµÐ½Ñ Ð¾Ñ
ÑÐ°Ð½Ñ ÑÑÑда" on april 28
-"ÐеждÑнаÑоднÑй Ð´ÐµÐ½Ñ ÑанÑа" on april 29
-"ÐÐµÐ½Ñ Ñадио" on may 5
+"ÐÐµÐ½Ñ Ð¸Ð½Ð¶ÐµÐ½ÐµÑнÑÑ
войÑк" civil on january 21
+"ÐÐµÐ½Ñ ÑекÑеÑаÑÑ" civil on february 27
+"ÐÐµÐ½Ñ ÑеÑпÑбликанÑкой гваÑдии" civil on march 16
+"ÐÐµÐ½Ñ ÑоÑговли" civil on march 18
+"ÐÐµÐ½Ñ ÑеаÑÑа" civil on march 27
+"ÐÐµÐ½Ñ Ð³ÐµÐ¾Ð»Ð¾Ð³Ð°" civil on april 1
+"ÐÐµÐ½Ñ ÑмеÑ
а" civil on april 1
+"ÐÐµÐ½Ñ Ð¾Ð±ÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð²Ð¾ÐµÐ½Ð½Ð¾-моÑÑкиÑ
Ñил Ð Ð" civil on april 2
+"ÐÐµÐ½Ñ ÑледÑÑвиÑ" civil on april 6
+"ÐÐµÐ½Ñ ÐºÐ¾ÑмонавÑики" civil on april 12
+"ÐÐµÐ½Ñ Ð²Ð¾Ð¹Ñк пÑоÑивовоздÑÑной обоÑонÑ" civil on april 15
+"ÐÐµÐ½Ñ Ð½Ð°Ñки" civil on april 16
+"ÐÐµÐ½Ñ ÑабоÑников пожаÑной оÑ
ÑанÑ" civil on april 17
+"ÐÑемиÑнÑй Ð´ÐµÐ½Ñ Ð¾Ñ
ÑÐ°Ð½Ñ ÑÑÑда" civil on april 28
+"ÐеждÑнаÑоднÑй Ð´ÐµÐ½Ñ ÑанÑа" civil on april 29
+"ÐÐµÐ½Ñ Ñадио" civil on may 5
:: Fatherland Defenderâs Day
-"ÐÐµÐ½Ñ Ð·Ð°ÑиÑника ÐÑеÑеÑÑва" on may 7
-"ÐÐµÐ½Ñ Ñ
имика" on may 27
+"ÐÐµÐ½Ñ Ð·Ð°ÑиÑника ÐÑеÑеÑÑва" civil on may 7
+"ÐÐµÐ½Ñ Ñ
имика" civil on may 27
:: Political Repression Victims Memory Day
-"ÐÐµÐ½Ñ Ð¿Ð°Ð¼ÑÑи жеÑÑв полиÑиÑеÑкиÑ
ÑепÑеÑÑий" on may 31
-"ÐÐµÐ½Ñ Ð·Ð°ÑиÑÑ Ð´ÐµÑей" on june 1
+"ÐÐµÐ½Ñ Ð¿Ð°Ð¼ÑÑи жеÑÑв полиÑиÑеÑкиÑ
ÑепÑеÑÑий" civil on may 31
+"ÐÐµÐ½Ñ Ð·Ð°ÑиÑÑ Ð´ÐµÑей" civil on june 1
:: The Republic of Kazakhstan National Symbolsâ Day
-"ÐÐµÐ½Ñ Ð³Ð¾ÑÑдаÑÑÑвеннÑÑ
Ñимволов РеÑпÑблики ÐазаÑ
ÑÑан" on june 4
-"ÐÐµÐ½Ñ Ð¾Ñ
ÑÐ°Ð½Ñ Ð¾ÐºÑÑжаÑÑей ÑÑедÑ" on june 5
-"ÐÑемиÑнÑй Ð´ÐµÐ½Ñ Ð´Ð¾Ð½Ð¾Ñа кÑови" on june 14
+"ÐÐµÐ½Ñ Ð³Ð¾ÑÑдаÑÑÑвеннÑÑ
Ñимволов РеÑпÑблики ÐазаÑ
ÑÑан" civil on june 4
+"ÐÐµÐ½Ñ Ð¾Ñ
ÑÐ°Ð½Ñ Ð¾ÐºÑÑжаÑÑей ÑÑедÑ" civil on june 5
+"ÐÑемиÑнÑй Ð´ÐµÐ½Ñ Ð´Ð¾Ð½Ð¾Ñа кÑови" civil on june 14
:: Police Day
-"ÐÐµÐ½Ñ Ð¿Ð¾Ð»Ð¸Ñии" on june 23
+"ÐÐµÐ½Ñ Ð¿Ð¾Ð»Ð¸Ñии" civil on june 23
:: Health Professionalsâ Day
-"ÐÐµÐ½Ñ Ð¼ÐµÐ´Ð¸ÑинÑкого ÑабоÑника" on third sunday in june
+"ÐÐµÐ½Ñ Ð¼ÐµÐ´Ð¸ÑинÑкого ÑабоÑника" civil on third sunday in june
:: Press, TV and Radio Day
-"ÐÐµÐ½Ñ Ð¿ÐµÑаÑи, ÑÐµÐ»ÐµÐ²Ð¸Ð´ÐµÐ½Ð¸Ñ Ð¸ Ñадио" on last sunday in june
+"ÐÐµÐ½Ñ Ð¿ÐµÑаÑи, ÑÐµÐ»ÐµÐ²Ð¸Ð´ÐµÐ½Ð¸Ñ Ð¸ Ñадио" civil on last sunday in june
:: Diplomatic service Day
-"ÐÐµÐ½Ñ Ð´Ð¸Ð¿Ð»Ð¾Ð¼Ð°ÑиÑеÑкой ÑлÑжбÑ" on july 2
-"ÐÑемиÑнÑй Ð´ÐµÐ½Ñ Ð¿Ð¾ÑелÑÑ" on july 6
-"ÐÐµÐ½Ñ ÐºÐ¾Ð¼Ð¸ÑеÑа ÐаÑионалÑной ÐезопаÑноÑÑи. ÐÐµÐ½Ñ Ð¿ÑокÑÑаÑÑÑÑ" on july 13
-"ÐÐµÐ½Ñ Ð¼Ð¾ÑÑкого и ÑеÑного ÑлоÑа" on first sunday in july
+"ÐÐµÐ½Ñ Ð´Ð¸Ð¿Ð»Ð¾Ð¼Ð°ÑиÑеÑкой ÑлÑжбÑ" civil on july 2
+"ÐÑемиÑнÑй Ð´ÐµÐ½Ñ Ð¿Ð¾ÑелÑÑ" civil on july 6
+"ÐÐµÐ½Ñ ÐºÐ¾Ð¼Ð¸ÑеÑа ÐаÑионалÑной ÐезопаÑноÑÑи. ÐÐµÐ½Ñ Ð¿ÑокÑÑаÑÑÑÑ" civil on july 13
+"ÐÐµÐ½Ñ Ð¼Ð¾ÑÑкого и ÑеÑного ÑлоÑа" civil on first sunday in july
:: Metal-Makerâs Day
-"ÐÐµÐ½Ñ Ð¼ÐµÑаллÑÑга" on third sunday in july
-"ÐÐµÐ½Ñ ÑиÑÑемного админиÑÑÑаÑоÑа" on last sunday in july
-"ÐÐµÐ½Ñ Ð²Ð¾Ð·Ð´ÑÑно-деÑанÑнÑÑ
войÑк" on august 2
-"ÐÐµÐ½Ñ Ð¾Ð±ÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð¾Ð³ÑаниÑнÑÑ
войÑк" on august 18
-"ÐÐµÐ½Ñ Ð²Ð¾Ð·Ð´ÑÑного ÑлоÑа" on august 19
+"ÐÐµÐ½Ñ Ð¼ÐµÑаллÑÑга" civil on third sunday in july
+"ÐÐµÐ½Ñ ÑиÑÑемного админиÑÑÑаÑоÑа" civil on last sunday in july
+"ÐÐµÐ½Ñ Ð²Ð¾Ð·Ð´ÑÑно-деÑанÑнÑÑ
войÑк" civil on august 2
+"ÐÐµÐ½Ñ Ð¾Ð±ÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð¾Ð³ÑаниÑнÑÑ
войÑк" civil on august 18
+"ÐÐµÐ½Ñ Ð²Ð¾Ð·Ð´ÑÑного ÑлоÑа" civil on august 19
:: Transport and Communication Workersâ Day
-"ÐÐµÐ½Ñ ÑабоÑников ÑÑанÑпоÑÑа и ÑвÑзи" on first sunday in august
+"ÐÐµÐ½Ñ ÑабоÑников ÑÑанÑпоÑÑа и ÑвÑзи" civil on first sunday in august
:: Builderâs Day
-"ÐÐµÐ½Ñ ÑÑÑоиÑелÑ" on second sunday in august
+"ÐÐµÐ½Ñ ÑÑÑоиÑелÑ" civil on second sunday in august
:: Sports Day
-"ÐÐµÐ½Ñ ÑпоÑÑа" on third sunday in august
+"ÐÐµÐ½Ñ ÑпоÑÑа" civil on third sunday in august
:: Minerâs day
-"ÐÐµÐ½Ñ ÑаÑ
ÑеÑа" on last sunday in august
+"ÐÐµÐ½Ñ ÑаÑ
ÑеÑа" civil on last sunday in august
:: Knowledge day
-"ÐÐµÐ½Ñ Ð·Ð½Ð°Ð½Ð¸Ð¹" on september 1
+"ÐÐµÐ½Ñ Ð·Ð½Ð°Ð½Ð¸Ð¹" civil on september 1
:: Oil and Gas Complex Workersâ Day
-"ÐÐµÐ½Ñ ÑабоÑников неÑÑегазового комплекÑа" on first sunday in september
-"ÐÐµÐ½Ñ ÑанкиÑÑов" on second sunday in september
+"ÐÐµÐ½Ñ ÑабоÑников неÑÑегазового комплекÑа" civil on first sunday in september
+"ÐÐµÐ½Ñ ÑанкиÑÑов" civil on second sunday in september
:: The Republic of Kazakhstan Languages Day
-"ÐÐµÐ½Ñ ÑзÑков наÑодов РеÑпÑблики ÐазаÑ
ÑÑан" on third sunday in september
+"ÐÐµÐ½Ñ ÑзÑков наÑодов РеÑпÑблики ÐазаÑ
ÑÑан" civil on third sunday in september
:: Nuclear Industry Workersâ Day
-"ÐÐµÐ½Ñ ÑабоÑников аÑомной оÑÑаÑли" on september 28
-"ÐÐµÐ½Ñ Ð°ÑÑ
иÑекÑоÑа" on october 5
-"ÐÐµÐ½Ñ Ð±ÑÑ
галÑеÑов и аÑдиÑоÑов" on october 6
-"ÐÑемиÑнÑй Ð´ÐµÐ½Ñ Ð¿Ð¾ÑÑÑ" on october 9
-"ÐÐµÐ½Ñ Ð±Ð¸Ð±Ð»Ð¸Ð¾ÑекаÑÑ" on october 15
-"ÐÐµÐ½Ñ ÑабоÑников ÑвÑзи" on october 20
-"ÐÐµÐ½Ñ ÑабоÑников авÑомобилÑного ÑÑанÑпоÑÑа" on october 28
+"ÐÐµÐ½Ñ ÑабоÑников аÑомной оÑÑаÑли" civil on september 28
+"ÐÐµÐ½Ñ Ð°ÑÑ
иÑекÑоÑа" civil on october 5
+"ÐÐµÐ½Ñ Ð±ÑÑ
галÑеÑов и аÑдиÑоÑов" civil on october 6
+"ÐÑемиÑнÑй Ð´ÐµÐ½Ñ Ð¿Ð¾ÑÑÑ" civil on october 9
+"ÐÐµÐ½Ñ Ð±Ð¸Ð±Ð»Ð¸Ð¾ÑекаÑÑ" civil on october 15
+"ÐÐµÐ½Ñ ÑабоÑников ÑвÑзи" civil on october 20
+"ÐÐµÐ½Ñ ÑабоÑников авÑомобилÑного ÑÑанÑпоÑÑа" civil on october 28
:: Teacherâs Day
-"ÐÐµÐ½Ñ ÑÑиÑелÑ" on first sunday in october
+"ÐÐµÐ½Ñ ÑÑиÑелÑ" civil on first sunday in october
:: National Currency Day
-"ÐÐµÐ½Ñ Ð½Ð°ÑионалÑной валÑÑÑ. ÐÐµÐ½Ñ ÑинанÑиÑÑов" on november 15
-"ÐÐµÐ½Ñ ÑÑÑденÑов" on november 17
-"ÐÐµÐ½Ñ ÑакеÑнÑÑ
войÑк и аÑÑиллеÑии" on november 17
-"ÐÐµÐ½Ñ ÑоÑÑÑдников доÑожной полиÑии" on november 23
+"ÐÐµÐ½Ñ Ð½Ð°ÑионалÑной валÑÑÑ. ÐÐµÐ½Ñ ÑинанÑиÑÑов" civil on november 15
+"ÐÐµÐ½Ñ ÑÑÑденÑов" civil on november 17
+"ÐÐµÐ½Ñ ÑакеÑнÑÑ
войÑк и аÑÑиллеÑии" civil on november 17
+"ÐÐµÐ½Ñ ÑоÑÑÑдников доÑожной полиÑии" civil on november 23
:: Agriculture Workersâ Day
-"ÐÐµÐ½Ñ ÑабоÑников ÑелÑÑкого Ñ
озÑйÑÑва" on third sunday in november
-"ÐÐµÐ½Ñ Ð¾Ð±ÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ Ñаможенной ÑлÑÐ¶Ð±Ñ Ð Ð" on december 12
-"ÐÐµÐ½Ñ ÑкономиÑÑов" on december 25
+"ÐÐµÐ½Ñ ÑабоÑников ÑелÑÑкого Ñ
озÑйÑÑва" civil on third sunday in november
+"ÐÐµÐ½Ñ Ð¾Ð±ÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ Ñаможенной ÑлÑÐ¶Ð±Ñ Ð Ð" civil on december 12
+"ÐÐµÐ½Ñ ÑкономиÑÑов" civil on december 25
:: Power Engineerâs Day
-"ÐÐµÐ½Ñ ÑнеÑгеÑика" on third sunday in december
+"ÐÐµÐ½Ñ ÑнеÑгеÑика" civil on third sunday in december
diff --git a/kholidays/holidays/plan2/holiday_lt_lt b/kholidays/holidays/plan2/holiday_lt_lt
index 4c5ba12..344dec2 100644
--- a/kholidays/holidays/plan2/holiday_lt_lt
+++ b/kholidays/holidays/plan2/holiday_lt_lt
@@ -18,34 +18,34 @@ language "lt"
:description "(please add description in source language) National holiday file for Lithuania"
:: Public Holidays
-"Naujieji metai" weekend on january 1
-"Lietuvos valstybÄs atkÅ«rimo diena" weekend on february 16
-"Lietuvos nepriklausomybÄs atkÅ«rimo diena" weekend on march 11
-"Velykos" weekend on easter length 2 days
-"TarptautinÄ darbo diena" weekend on may 1
-"Motinos diena" weekend on first sunday in may
-"Rasos (JoninÄs)" weekend on june 24
-"ValstybÄs (Lietuvos karaliaus Mindaugo karÅ«navimo) diena" weekend on july 6
-"ŽolinÄ (Å vÄ. MergelÄs Marijos Ämimo į dangų diena)" weekend on august 15
-"Visų Šventųjų diena" weekend on november 1
-"KalÄdos" weekend on december 25 length 2 days
+"Naujieji metai" public on january 1
+"Lietuvos valstybÄs atkÅ«rimo diena" public on february 16
+"Lietuvos nepriklausomybÄs atkÅ«rimo diena" public on march 11
+"Velykos" public on easter length 2 days
+"TarptautinÄ darbo diena" public on may 1
+"Motinos diena" public on first sunday in may
+"Rasos (JoninÄs)" public on june 24
+"ValstybÄs (Lietuvos karaliaus Mindaugo karÅ«navimo) diena" public on july 6
+"ŽolinÄ (Å vÄ. MergelÄs Marijos Ämimo į dangų diena)" public on august 15
+"Visų Šventųjų diena" public on november 1
+"KalÄdos" public on december 25 length 2 days
:: Religious
-"Trys karaliai" on january 6
-"Pelenų diena" on easter minus 46 days
-"Verbų sekmadienis" on easter minus 7 days
-"Didysis penktadienis" on easter minus 2 days
-"SekminÄs" on easter plus 49 days
-"KÅ«Äios" on december 24
-:"GavÄnia" on easter minus 45 days length 44 days
-:"Adventas" on november 28 length 27 days
+"Trys karaliai" religious on january 6
+"Pelenų diena" religious on easter minus 46 days
+"Verbų sekmadienis" religious on easter minus 7 days
+"Didysis penktadienis" religious on easter minus 2 days
+"SekminÄs" religious on easter plus 49 days
+"KÅ«Äios" religious on december 24
+:"GavÄnia" religious on easter minus 45 days length 44 days
+:"Adventas" religious on november 28 length 27 days
:: Financial
:: Cultural
-"Å v. Valentino diena" on february 14
-"UžgavÄnÄs" on easter minus 47 days
-"Melagio diena" on april 1
+"Å v. Valentino diena" cultural on february 14
+"UžgavÄnÄs" cultural on easter minus 47 days
+"Melagio diena" cultural on april 1
:: School
diff --git a/kholidays/holidays/plan2/holiday_lu_fr b/kholidays/holidays/plan2/holiday_lu_fr
index 0d0e83b..63d3470 100644
--- a/kholidays/holidays/plan2/holiday_lu_fr
+++ b/kholidays/holidays/plan2/holiday_lu_fr
@@ -17,18 +17,18 @@ language "fr"
:description "(please add description in source language) National holiday file for Luxembourg"
:: Public Holidays
-"Nouvel an" weekend on january 1
-"Pâques" weekend on easter
-"Lundi de Pâques" weekend on easter plus 1 day
-"Fête du travail" weekend on may 1
-"Ascension" weekend on easter plus 39 days
-"Pentecôte" weekend on easter plus 49 days
-"Lundi de Pentecôte" weekend on easter plus 50 days
-"Fête nationale" weekend on june 23
-"Assomption" weekend on august 15
-"Toussaint" weekend on november 1
-"Noël" weekend on december 25
-"Saint-Ãtienne" weekend on december 26
+"Nouvel an" public on january 1
+"Pâques" public religious on easter
+"Lundi de Pâques" public on easter plus 1 day
+"Fête du travail" public on may 1
+"Ascension" public religious on easter plus 39 days
+"Pentecôte" public religious on easter plus 49 days
+"Lundi de Pentecôte" public religious on easter plus 50 days
+"Fête nationale" public on june 23
+"Assomption" public religious on august 15
+"Toussaint" public religious on november 1
+"Noël" public religious on december 25
+"Saint-Ãtienne" public religious on december 26
:: Religious Holidays
diff --git a/kholidays/holidays/plan2/holiday_lu_lb b/kholidays/holidays/plan2/holiday_lu_lb
index b9a62e8..5e984c0 100644
--- a/kholidays/holidays/plan2/holiday_lu_lb
+++ b/kholidays/holidays/plan2/holiday_lu_lb
@@ -17,18 +17,18 @@ language "lb"
:description "(please add description in source language) National holiday file for Luxembourg"
:: Public Holidays
-"Neijoerschdag" weekend on january 1
-"Ouschteren" weekend on easter
-"Ouschterméindeg" weekend on easter plus 1 day
-"Ãischte Mee" weekend on may 1
-"Christihimmelfahrt" weekend on easter plus 39 days
-"Péngschten" weekend on easter plus 49 days
-"Päischtméindeg" weekend on easter plus 50 days
-"Nationale Feierdag" weekend on june 23
-"Maria Himmelfahrt" weekend on august 15
-"Allerhellegen" weekend on november 1
-"Chrëschtdag" weekend on december 25
-"Stiefesdag" weekend on december 26
+"Neijoerschdag" public on january 1
+"Ouschteren" public religious on easter
+"Ouschterméindeg" public on easter plus 1 day
+"Ãischte Mee" public on may 1
+"Christihimmelfahrt" public religious on easter plus 39 days
+"Péngschten" public religious on easter plus 49 days
+"Päischtméindeg" public religious on easter plus 50 days
+"Nationale Feierdag" public on june 23
+"Maria Himmelfahrt" public religious on august 15
+"Allerhellegen" public religious on november 1
+"Chrëschtdag" public religious on december 25
+"Stiefesdag" public on december 26
:: Religious Holidays
diff --git a/kholidays/holidays/plan2/holiday_lv_lv b/kholidays/holidays/plan2/holiday_lv_lv
index 830d9d6..c98ceaf 100644
--- a/kholidays/holidays/plan2/holiday_lv_lv
+++ b/kholidays/holidays/plan2/holiday_lv_lv
@@ -20,96 +20,96 @@ language "lv"
:: Public Holidays
: New Year's Day
-"Jaunais Gads" weekend on january 1
+"Jaunais Gads" public on january 1
: Easter Friday
-"LielÄ Piektdiena" weekend on easter minus 2 days
+"LielÄ Piektdiena" public religious on easter minus 2 days
: Easter
-"Lieldienas" weekend on easter
+"Lieldienas" public religious on easter
: Easter Monday
-"2. Lieldienas" weekend on easter plus 1 days
+"2. Lieldienas" public on easter plus 1 days
: Labour Day & Convocation of the Constitutional Assembly
-"Darba svÄtki" weekend on may 1
+"Darba svÄtki" public on may 1
: Independence Day
-"NeatkarÄ«bas deklarÄcijas pasludinÄÅ¡anas diena" weekend on may 4
-"NeatkarÄ«bas deklarÄcijas pasludinÄÅ¡anas diena" weekend on ( ( ( [may 4] == [saturday after ([may 4])] ) ||
+"NeatkarÄ«bas deklarÄcijas pasludinÄÅ¡anas diena" public on may 4
+"NeatkarÄ«bas deklarÄcijas pasludinÄÅ¡anas diena" public on ( ( ( [may 4] == [saturday after ([may 4])] ) ||
( [may 4] == [sunday after ([may 4])] ) ) ?
[ monday after ([may 4]) ] :
noop )
: Midsummers Eve
-"LÄ«go Diena" weekend on june 23
+"LÄ«go Diena" public on june 23
: Midsummers Eve
-"JÄÅi" weekend on june 23
+"JÄÅi" public on june 23
: Proclamation of the Republic of Latvia
-"Latvijas Republikas proklamÄÅ¡anas diena" weekend on november 18
-"Latvijas Republikas proklamÄÅ¡anas diena" weekend on ( ( ( [november 18] == [saturday after ([november 18])] ) ||
+"Latvijas Republikas proklamÄÅ¡anas diena" public on november 18
+"Latvijas Republikas proklamÄÅ¡anas diena" public on ( ( ( [november 18] == [saturday after ([november 18])] ) ||
( [november 18] == [sunday after ([november 18])] ) ) ?
[ monday after ([november 18]) ] :
noop )
: Christmas Eve
-"ZiemassvÄtku vakars" weekend on december 24
+"ZiemassvÄtku vakars" public religious on december 24
: Christmas Day
-"ZiemassvÄtki" weekend on december 25
+"ZiemassvÄtki" public religious on december 25
: Christmas Day No 2
-"2. ZiemassvÄtki" weekend on december 26
+"2. ZiemassvÄtki" public on december 26
: New Year's Eve
-"Vecgada vakars" weekend on december 31
+"Vecgada vakars" public on december 31
:: Religious Holidays
-"VasarsvÄtkus" on easter plus 49 days
+"VasarsvÄtkus" religious on easter plus 49 days
:: Financial
:: Commemorative
: Commemoration Day of Defenders of the Barricades in 1991
-"1991. gada barikÄžu aizstÄvju atceres dienu" on january 20
+"1991. gada barikÄžu aizstÄvju atceres dienu" commemorative on january 20
: International (de iure) Recognition of the Republic of Latvia
-"Latvijas Republikas starptautiskÄs (de jure) atzÄ«Å¡anas dienu" on january 26
+"Latvijas Republikas starptautiskÄs (de jure) atzÄ«Å¡anas dienu" commemorative on january 26
: Commemoration Day of Victims of Communist Terror
-"KomunistiskÄ genocÄ«da upuru piemiÅas dienu" on march 25
+"KomunistiskÄ genocÄ«da upuru piemiÅas dienu" commemorative on march 25
: The Defeat of Nazism and Commemoration Day of Victims of World War II
-"Nacisma sagrÄves dienu un OtrÄ pasaules kara upuru piemiÅas dienu" on may 8
+"Nacisma sagrÄves dienu un OtrÄ pasaules kara upuru piemiÅas dienu" commemorative on may 8
: Commemoration Day of Victims of Communist Terror
-"KomunistiskÄ genocÄ«da upuru piemiÅas dienu" on june 14
+"KomunistiskÄ genocÄ«da upuru piemiÅas dienu" commemorative on june 14
: Occupation of the Republic of Latvia
-"Latvijas Republikas okupÄcijas dienu" on june 17
+"Latvijas Republikas okupÄcijas dienu" commemorative on june 17
: Heroes' Commemoration Day (Anniversary of the Battle of CÄsis)
-"VaroÅu piemiÅas dienu (CÄsu kaujas atceres dienu)" on june 22
+"VaroÅu piemiÅas dienu (CÄsu kaujas atceres dienu)" commemorative on june 22
: Commemoration Day of Genocide against the Jews
-"Ebreju tautas genocÄ«da upuru piemiÅas dienu" on july 4
+"Ebreju tautas genocÄ«da upuru piemiÅas dienu" commemorative on july 4
: Commemoration Day of The Latvian Freedom Fighters
-"Latvijas brÄ«vÄ«bas cÄ«nÄ«tÄju piemiÅas dienu" on august 11
+"Latvijas brÄ«vÄ«bas cÄ«nÄ«tÄju piemiÅas dienu" commemorative on august 11
: Passing of the Constitutional Law on the Status of the Republic of Latvia as a State and Actual Restoration of the Republic of Latvia
-"KonstitucionÄlÄ likuma 'Par Latvijas Republikas valstisko statusu' pieÅemÅ¡anas un Latvijas Republikas faktiskÄs neatkarÄ«bas atjaunoÅ¡anas dienu" on august 21
+"KonstitucionÄlÄ likuma 'Par Latvijas Republikas valstisko statusu' pieÅemÅ¡anas un Latvijas Republikas faktiskÄs neatkarÄ«bas atjaunoÅ¡anas dienu" commemorative on august 21
: Stalinist and Nazi Victims Memorial Day
-"Staļinisma un Nacisma upuru atceres dienu" on august 23
+"Staļinisma un Nacisma upuru atceres dienu" commemorative on august 23
: Latvian Freedom Fighters' Remembrance Day - LÄÄplÄsis Day
-"LÄÄplÄÅ¡a dienu" on november 11
+"LÄÄplÄÅ¡a dienu" commemorative on november 11
: Commemoration Day of Victims of Genocide Against the Latvian People by the Totalitarian Communist Regime.
-"Pret latvieÅ¡u tautu vÄrstÄ totalitÄrÄ komunistiskÄ režīma genocÄ«da upuru piemiÅas dienu" on 1st sunday in december
+"Pret latvieÅ¡u tautu vÄrstÄ totalitÄrÄ komunistiskÄ režīma genocÄ«da upuru piemiÅas dienu" commemorative on 1st sunday in december
:: Cultural
: International Womenâs Day
-"Starptautisko sieviešu dienu" on march 8
+"Starptautisko sieviešu dienu" cultural on march 8
: Europe Day
-"Eiropas dienu" on may 9
+"Eiropas dienu" cultural on may 9
: Mothers Day
-"MÄtes dienu" on second sunday in may
+"MÄtes dienu" cultural on second sunday in may
: International Day of The Family
-"Starptautisko ģimenes dienu" on may 15
+"Starptautisko ģimenes dienu" cultural on may 15
: International Childrenâs Day
-"Starptautisko bÄrnu aizsardzÄ«bas dienu" on june 1
+"Starptautisko bÄrnu aizsardzÄ«bas dienu" cultural on june 1
: Sea Festival Day
-"JÅ«ras svÄtku dienu" on 2nd saturday in july
+"JÅ«ras svÄtku dienu" cultural on 2nd saturday in july
: Knowledge Day (First Day of School)
-"Zinību dienu" on september 1
+"Zinību dienu" cultural on september 1
: Father's Day
-"TÄva dienu" on second sunday in september
+"TÄva dienu" cultural on second sunday in september
: Baltic Unity Day
-"Baltu vienības dienu" on september 22
+"Baltu vienības dienu" cultural on september 22
: International Day of Older Persons
-"Starptautisko veco ļaužu dienu" on october 1
+"Starptautisko veco ļaužu dienu" cultural on october 1
: Teacherâs Day
-"SkolotÄju dienu" on 1st sunday in october
+"SkolotÄju dienu" cultural on 1st sunday in october
:: School
diff --git a/kholidays/holidays/plan2/holiday_ma_ar b/kholidays/holidays/plan2/holiday_ma_ar
index c87a86f..4386cea 100644
--- a/kholidays/holidays/plan2/holiday_ma_ar
+++ b/kholidays/holidays/plan2/holiday_ma_ar
@@ -19,33 +19,33 @@ description "National holiday file for Morocco"
:: National Holidays
: New Year's Day
-"رأس اÙسÙØ© اÙÙ
ÙÙادÙØ©" weekend on january 1
+"رأس اÙسÙØ© اÙÙ
ÙÙادÙØ©" public on january 1
: Proclamation of Independence
-"تÙدÙÙ
ÙØ«ÙÙØ© اÙاستÙÙاÙ" weekend on january 11
+"تÙدÙÙ
ÙØ«ÙÙØ© اÙاستÙÙاÙ" public on january 11
: Labour Day
-"عÙد اÙشغÙ" weekend on may 1
+"عÙد اÙشغÙ" public on may 1
: Enthronement Day
-"عÙد اÙعرش" weekend on july 30
+"عÙد اÙعرش" public on july 30
: Oued Ed-Dahab Day
-"ÙÙÙ
Ùاد٠اÙØ°Ùب" weekend on august 14
+"ÙÙÙ
Ùاد٠اÙØ°Ùب" public on august 14
: Revolution of the King and the People
-"Ø°Ùر٠ثÙرة اÙÙ
ÙÙ ÙاÙشعب" weekend on august 20
+"Ø°Ùر٠ثÙرة اÙÙ
ÙÙ ÙاÙشعب" public on august 20
: Birthday of King Mohammed VI
-"عÙد اÙشباب" weekend on august 21
+"عÙد اÙشباب" public on august 21
: Green March
-"Ø°Ùر٠اÙÙ
سÙرة اÙخضراء" weekend on november 6
+"Ø°Ùر٠اÙÙ
سÙرة اÙخضراء" public on november 6
: Independence day
-"عÙد اÙاستÙÙاÙ" weekend on november 18
+"عÙد اÙاستÙÙاÙ" public on november 18
:: Religious Holidays
: Islamic New Year
-"رأس اÙسÙØ© اÙÙجرÙØ©" weekend on hijri muharram 1
+"رأس اÙسÙØ© اÙÙجرÙØ©" public religious on hijri muharram 1
: Birthday of the Prophet Muhammad
-"عÙد اÙÙ
ÙÙد اÙÙبÙ٠اÙشرÙÙ" weekend on hijri rabialawal 12
+"عÙد اÙÙ
ÙÙد اÙÙبÙ٠اÙشرÙÙ" public religious on hijri rabialawal 12
: Eid el-Fitr (End of Ramadan)
-"عÙد اÙÙطر" weekend on hijri shawwal 1 length 2
+"عÙد اÙÙطر" public religious on hijri shawwal 1 length 2
: Eid al-Adha (End of the Hajj)
-"عÙد اÙأضØÙ" weekend on hijri thualhijjah 10 length 2
+"عÙد اÙأضØÙ" public religious on hijri thualhijjah 10 length 2
:: Financial
diff --git a/kholidays/holidays/plan2/holiday_ma_fr b/kholidays/holidays/plan2/holiday_ma_fr
index 8f86e7f..f0c6a05 100644
--- a/kholidays/holidays/plan2/holiday_ma_fr
+++ b/kholidays/holidays/plan2/holiday_ma_fr
@@ -20,33 +20,33 @@ description "Fêtes et jours fériés au Maroc"
:: National Holidays
: New Year's Day
-"Jour de l'an" weekend on january 1
+"Jour de l'an" public on january 1
: Proclamation of Independence
-"Anniversaire du manifeste de l'indépendance" weekend on january 11
+"Anniversaire du manifeste de l'indépendance" public on january 11
: Labour Day
-"Fête du Travail" weekend on may 1
+"Fête du Travail" public on may 1
: Enthronement Day
-"Fête du trône" weekend on july 30
+"Fête du trône" public on july 30
: Oued Ed-Dahab Day
-"Journée de Oued Ed-Dahab" weekend on august 14
+"Journée de Oued Ed-Dahab" public on august 14
: Revolution of the King and the People
-"Fête de la révolution du Roi et du peuple" weekend on august 20
+"Fête de la révolution du Roi et du peuple" public on august 20
: Birthday of King Mohammed VI
-"Anniversaire de sa majesté le roi Mohammed VI" weekend on august 21
+"Anniversaire de sa majesté le roi Mohammed VI" public on august 21
: Green March
-"Anniversaire de la Marche Verte" weekend on november 6
+"Anniversaire de la Marche Verte" public on november 6
: Independence day
-"Fête de l'Indépendance" weekend on november 18
+"Fête de l'Indépendance" public on november 18
:: Religious Holidays
: Islamic New Year
-"Awal muharram" weekend on hijri muharram 1
+"Awal muharram" public religious on hijri muharram 1
: Birthday of the Prophet Muhammad
-"Mawlid nabaoui" weekend on hijri rabialawal 12
+"Mawlid nabaoui" public religious on hijri rabialawal 12
: Eid el-Fitr (End of Ramadan)
-"Aïd el-Fitr" weekend on hijri shawwal 1 length 2
+"Aïd el-Fitr" public religious on hijri shawwal 1 length 2
: Eid al-Adha (End of the Hajj)
-"Aïd El Adha" weekend on hijri thualhijjah 10 length 2
+"Aïd El Adha" public religious on hijri thualhijjah 10 length 2
:: Financial
diff --git a/kholidays/holidays/plan2/holiday_mq_fr b/kholidays/holidays/plan2/holiday_mq_fr
index 18d5ee3..e83d28e 100644
--- a/kholidays/holidays/plan2/holiday_mq_fr
+++ b/kholidays/holidays/plan2/holiday_mq_fr
@@ -33,91 +33,91 @@ description "Fêtes et jours fériés en Martinique"
:: Public Holidays - Fêtes civiles et jours fériés
: New Year's Day
-"Jour de l'an" weekend on january 1
+"Jour de l'an" public on january 1
: Easter
-"Pâques" weekend on easter length 2 days
-"Ascension" weekend on easter plus 39 days
-"Pentecôte" weekend on easter plus 49 days length 2 days
+"Pâques" public religious on easter length 2 days
+"Ascension" public religious on easter plus 39 days
+"Pentecôte" public religious on easter plus 49 days length 2 days
: Labor day
-"Fête du Travail" weekend on may 1
+"Fête du Travail" public on may 1
: WW2 armistice
-"Fête de la Victoire" weekend on may 8
+"Fête de la Victoire" public on may 8
: National day
-"Fête nationale" weekend on july 14
+"Fête nationale" public on july 14
: Assumption
-"Assomption" weekend on august 15
+"Assomption" public religious on august 15
: All saints day
-"Toussaint" weekend on november 1
+"Toussaint" public religious on november 1
: WW1 armistice
-"Armistice de 1918" weekend on november 11
+"Armistice de 1918" public on november 11
: Christmas day
-"Noël" weekend on december 25
+"Noël" public religious on december 25
:: Territorial and Regional holidays
: Good Friday
-"Vendredi saint" weekend on easter minus 2 days
+"Vendredi saint" public religious on easter minus 2 days
: Abolition of Slavery
-"Abolition de l'esclavage" weekend on may 22
-"Fête Victor Schoelcher" weekend on july 21
-"St Ãtienne" weekend on december 26
+"Abolition de l'esclavage" public on may 22
+"Fête Victor Schoelcher" public on july 21
+"St Ãtienne" public religious on december 26
:: Religious - Fêtes religieuses
-"Ãpiphanie" on first sunday in january
+"Ãpiphanie" religious on first sunday in january
: Presentation of Jesus at the Temple
-"Chandeleur" on february 2
-"Mardi Gras" on easter minus 47 days
+"Chandeleur" religious on february 2
+"Mardi Gras" religious on easter minus 47 days
: Ash Wednesday
-"Mercredi des Cendres" on easter minus 46 days
+"Mercredi des Cendres" religious on easter minus 46 days
: Day of the dead
-"Fête des morts" on november 2
+"Fête des morts" religious on november 2
:: Financial
:: Cultural - Fêtes civiles non fériées
: Valentine's day
-"Fête des amoureux" on february 14
+"Fête des amoureux" cultural on february 14
: Grandmothers' day
-"Fête des grands-mères" on first sunday in march
+"Fête des grands-mères" cultural on first sunday in march
: Remembrance of the Deportees
-"Souvenir des Déportés" on last sunday in april
+"Souvenir des Déportés" commemorative on last sunday in april
: Europe day
-"Journée de l'Europe" on may 9
+"Journée de l'Europe" cultural on may 9
: Remembrance of slavery
-"Mémoire de l'esclavage" on may 10
+"Mémoire de l'esclavage" commemorative on may 10
: Neighbors' day
-"Fête des voisins" on last tuesday in may
+"Fête des voisins" cultural on last tuesday in may
: Mothers' day, move if clashes with Pentecost
-"Fête des mères" ( ( [last sunday in may] == ([easter] + 49 days) ) ? [first sunday in june] : [last sunday in may] )
+"Fête des mères" cultural on ( ( [last sunday in may] == ([easter] + 49 days) ) ? [first sunday in june] : [last sunday in may] )
: or 'first sunday in june' if same day as Pentecôte
: Fathers' day
-"Fête des pères" on third sunday in june
+"Fête des pères" cultural on third sunday in june
: Fatalities in the 1st Indochina war
-"Morts en Indochine" on june 8
+"Morts en Indochine" commemorative on june 8
: Music day
-"Fête de la Musique" on june 21
+"Fête de la Musique" cultural on june 21
: St John
-"Fête de la Saint Jean" on june 24
+"Fête de la Saint Jean" cultural on june 24
: Homage to the Harkis
-"Hommage aux Harkis" on september 25
+"Hommage aux Harkis" commemorative on september 25
: Fatalities in the Algerian war
-"Morts en Algérie" on december 5
+"Morts en Algérie" commemorative on december 5
:: School
:: Daylight Saving
: summer
-"Heure d'été" on last sunday in march
+"Heure d'été" seasonal on last sunday in march
: winter
-"Heure d'hiver" on last sunday in october
+"Heure d'hiver" seasonal on last sunday in october
:: Seasons
: Spring
-"Printemps" on march 20
+"Printemps" seasonal on march 20
: Summer
-"Ãté" on june 21
+"Ãté" seasonal on june 21
: Fall
-"Automne" on september 23
+"Automne" seasonal on september 23
: Winter
-"Hiver" on december 21
+"Hiver" seasonal on december 21
:: Name Days
diff --git a/kholidays/holidays/plan2/holiday_mx_es b/kholidays/holidays/plan2/holiday_mx_es
index af8e12a..df100a7 100644
--- a/kholidays/holidays/plan2/holiday_mx_es
+++ b/kholidays/holidays/plan2/holiday_mx_es
@@ -17,23 +17,23 @@ language "es"
:description "(please add description in source language) National holiday file for Mexico"
:: Public Holidays
-"Año Nuevo" weekend on january 1
-"DÃa de la Constitución" weekend on february 5
-"DÃa del trabajo" weekend on may 1
-"DÃa de la Independencia" weekend on september 16
-"Natalicio de Benito Juárez" weekend on march 21
-"Navidad" weekend on december 25
-"DÃa de la Revolución" weekend on november 20
+"Año Nuevo" public on january 1
+"DÃa de la Constitución" public on february 5
+"DÃa del trabajo" public on may 1
+"DÃa de la Independencia" public on september 16
+"Natalicio de Benito Juárez" public on march 21
+"Navidad" public religious on december 25
+"DÃa de la Revolución" public on november 20
:: Religious
-"DÃa de los Reyes" on january 6
-"Domingo de Pascua" on easter
-"Sábado de Gloria" on easter minus 1
-"Viérnes Santo" on easter minus 2
-"Jueves Santo" on easter minus 3
-"DÃa de Todos los Santos" on november 1
-"DÃa de los Fieles Difuntos" on november 2
-"DÃa de VÃrgen de Guadalupe" on december 12
+"DÃa de los Reyes" religious on january 6
+"Domingo de Pascua" religious on easter
+"Sábado de Gloria" religious on easter minus 1
+"Viérnes Santo" religious on easter minus 2
+"Jueves Santo" religious on easter minus 3
+"DÃa de Todos los Santos" religious on november 1
+"DÃa de los Fieles Difuntos" religious on november 2
+"DÃa de VÃrgen de Guadalupe" religious on december 12
:: Financial
@@ -44,17 +44,17 @@ language "es"
:: Daylight Saving
:: Seasons
-"Equinoxio de primavera" on march 21
-"Solsticio de verano" on june 21
-"Equinoxio de otoño" on september 21
-"Solsticio de invierno" on december 21
+"Equinoxio de primavera" seasonal on march 21
+"Solsticio de verano" seasonal on june 21
+"Equinoxio de otoño" seasonal on september 21
+"Solsticio de invierno" seasonal on december 21
:: Name Days
:: To be sorted
-"DÃa de la expropiación petrolera" on march 18
-"Batalla de Puebla" on may 5
-"DÃa de la Madre" on may 10
-"DÃa de la Raza" on october 12
-"DÃa de los Santos Inocentes" on december 28
+"DÃa de la expropiación petrolera" civil on march 18
+"Batalla de Puebla" civil on may 5
+"DÃa de la Madre" civil on may 10
+"DÃa de la Raza" civil on october 12
+"DÃa de los Santos Inocentes" civil on december 28
diff --git a/kholidays/holidays/plan2/holiday_na_en-gb b/kholidays/holidays/plan2/holiday_na_en-gb
index 339430d..4ccf790 100644
--- a/kholidays/holidays/plan2/holiday_na_en-gb
+++ b/kholidays/holidays/plan2/holiday_na_en-gb
@@ -13,22 +13,22 @@
:: Metadata
country "NA"
language "en_GB"
-:name "optional - defaults to country name"
-:description "(please add description in source language) National holiday file for Namibia"
+:name "optional - defaults to country name"
+description "National holiday file for Namibia"
:: Public Holidays
-"New Year's Day" on january 1 shift to monday if sunday
-"Independence Day" on march 21 shift to monday if sunday
-"Good Friday" on easter minus 2 day
-"Easter Monday" on easter plus 1 day
-"Ascension Day" on easter plus 39 days
-"Workers Day" on may 1 shift to monday if sunday
-"Cassinga Day" on may 4 shift to monday if sunday
-"Africa Day" on may 25 shift to monday if sunday
-"Heroes Day" on august 26 shift to monday if sunday
-"International Human Rights Day" on december 10 shift to monday if sunday
-"Christmas Day" on december 25 shift to monday if sunday
-"Family Day" on december 26 shift to monday if sunday
+"New Year's Day" public on january 1 shift to monday if sunday
+"Independence Day" public on march 21 shift to monday if sunday
+"Good Friday" public religious on easter minus 2 day
+"Easter Monday" public on easter plus 1 day
+"Ascension Day" public religious on easter plus 39 days
+"Workers Day" public on may 1 shift to monday if sunday
+"Cassinga Day" public on may 4 shift to monday if sunday
+"Africa Day" public on may 25 shift to monday if sunday
+"Heroes Day" public on august 26 shift to monday if sunday
+"International Human Rights Day" public on december 10 shift to monday if sunday
+"Christmas Day" public religious on december 25 shift to monday if sunday
+"Family Day" public on december 26 shift to monday if sunday
:: Religious Holidays
diff --git a/kholidays/holidays/plan2/holiday_nc_fr b/kholidays/holidays/plan2/holiday_nc_fr
index f4f7ae4..2b33932 100644
--- a/kholidays/holidays/plan2/holiday_nc_fr
+++ b/kholidays/holidays/plan2/holiday_nc_fr
@@ -33,89 +33,89 @@ description "Fêtes et jours fériés en Nouvelle-Calédonie"
:: Public Holidays - Fêtes civiles et jours fériés
: New Year's Day
-"Jour de l'an" weekend on january 1
+"Jour de l'an" public on january 1
: Easter
-"Pâques" weekend on easter length 2 days
-"Ascension" weekend on easter plus 39 days
-"Pentecôte" weekend on easter plus 49 days length 2 days
+"Pâques" public religious on easter length 2 days
+"Ascension" public religious on easter plus 39 days
+"Pentecôte" public religious on easter plus 49 days length 2 days
: Labor day
-"Fête du Travail" weekend on may 1
+"Fête du Travail" public on may 1
: WW2 armistice
-"Fête de la Victoire" weekend on may 8
+"Fête de la Victoire" public on may 8
: National day
-"Fête nationale" weekend on july 14
+"Fête nationale" public on july 14
: Assumption
-"Assomption" weekend on august 15
+"Assomption" public religious on august 15
: All saints day
-"Toussaint" weekend on november 1
+"Toussaint" public religious on november 1
: WW1 armistice
-"Armistice de 1918" weekend on november 11
+"Armistice de 1918" public on november 11
: Christmas day
-"Noël" weekend on december 25
+"Noël" public religious on december 25
:: Territorial and Regional holidays
-"Fête de la citoyenneté" weekend on september 24
+"Fête de la citoyenneté" public on september 24
:: Religious - Fêtes religieuses
-"Ãpiphanie" on first sunday in january
+"Ãpiphanie" religious on first sunday in january
: Presentation of Jesus at the Temple
-"Chandeleur" on february 2
-"Mardi Gras" on easter minus 47 days
+"Chandeleur" religious on february 2
+"Mardi Gras" religious on easter minus 47 days
: Ash Wednesday
-"Mercredi des Cendres" on easter minus 46 days
+"Mercredi des Cendres" religious on easter minus 46 days
: Good Friday
-"Vendredi saint" on easter minus 2 days
+"Vendredi saint" religious on easter minus 2 days
: Day of the dead
-"Fête des morts" on november 2
-"St Ãtienne" on december 26
+"Fête des morts" religious on november 2
+"St Ãtienne" religious on december 26
:: Financial
:: Cultural - Fêtes civiles non fériées
: Valentine's day
-"Fête des amoureux" on february 14
+"Fête des amoureux" cultural on february 14
: Grandmothers' day
-"Fête des grands-mères" on first sunday in march
+"Fête des grands-mères" cultural on first sunday in march
: Remembrance of the Deportees
-"Souvenir des Déportés" on last sunday in april
+"Souvenir des Déportés" commemorative on last sunday in april
: Europe day
-"Journée de l'Europe" on may 9
+"Journée de l'Europe" cultural on may 9
: Remembrance of slavery
-"Mémoire de l'esclavage" on may 10
+"Mémoire de l'esclavage" commemorative on may 10
: Neighbors' day
-"Fête des voisins" on last tuesday in may
+"Fête des voisins" cultural on last tuesday in may
: Mothers' day, move if clashes with Pentecost
-"Fête des mères" ( ( [last sunday in may] == ([easter] + 49 days) ) ? [first sunday in june] : [last sunday in may] )
+"Fête des mères" cultural on ( ( [last sunday in may] == ([easter] + 49 days) ) ? [first sunday in june] : [last sunday in may] )
: or 'first sunday in june' if same day as Pentecôte
: Fathers' day
-"Fête des pères" on third sunday in june
+"Fête des pères" cultural on third sunday in june
: Fatalities in the 1st Indochina war
-"Morts en Indochine" on june 8
+"Morts en Indochine" commemorative on june 8
: Music day
-"Fête de la Musique" on june 21
+"Fête de la Musique" cultural on june 21
: St John
-"Fête de la Saint Jean" on june 24
+"Fête de la Saint Jean" cultural on june 24
: Homage to the Harkis
-"Hommage aux Harkis" on september 25
+"Hommage aux Harkis" commemorative on september 25
: Fatalities in the Algerian war
-"Morts en Algérie" on december 5
+"Morts en Algérie" commemorative on december 5
:: School
:: Daylight Saving
: summer
-"Heure d'été" on last sunday in march
+"Heure d'été" seasonal on last sunday in march
: winter
-"Heure d'hiver" on last sunday in october
+"Heure d'hiver" seasonal on last sunday in october
:: Seasons
: Spring
-"Printemps" on september 23
+"Printemps" seasonal on september 23
: Summer
-"Ãté" on december 21
+"Ãté" seasonal on december 21
: Fall
-"Automne" on march 20
+"Automne" seasonal on march 20
: Winter
-"Hiver" on june 21
+"Hiver" seasonal on june 21
:: Name Days
diff --git a/kholidays/holidays/plan2/holiday_nl_nl b/kholidays/holidays/plan2/holiday_nl_nl
index fe9f263..ea6928a 100644
--- a/kholidays/holidays/plan2/holiday_nl_nl
+++ b/kholidays/holidays/plan2/holiday_nl_nl
@@ -11,7 +11,7 @@
:: Source:
::
:: Note: Goede Vrijdag and Bevrijdingsdag are not holidays for
-:: everybody, therefore I don't put them in the "weekend" color.
+:: everybody, therefore I don't put them in the "public" category.
:: Government employees usually have these days off, for other
:: categories it varies. Check with your employer!
::
@@ -23,56 +23,56 @@ language "nl"
:description "(please add description in source language) National holiday file for Netherlands"
:: Public Holidays
-"Nieuwjaar" weekend on january 1
-"Pasen" weekend on easter length 2 days
-"Hemelvaart" weekend on easter plus 39 days
-"Pinksteren" weekend on easter plus 49 days length 2 days
-"Koninginnedag" weekend on april 30 shift to monday if sunday
-"Kerstmis" weekend on december 25 length 2 days
+"Nieuwjaar" public on january 1
+"Pasen" public religious on easter length 2 days
+"Hemelvaart" public religious on easter plus 39 days
+"Pinksteren" public on easter plus 49 days length 2 days
+"Koninginnedag" public on april 30 shift to monday if sunday
+"Kerstmis" public religious on december 25 length 2 days
:: Religious Holidays
-"Driekoningen" on january 6
-:"Septuagesima (zeventigste)" on easter minus 63 days
-:"Sexagesima (zestigste)" on easter minus 56 days
-:"Quinquagesima (vijftigste)" on easter minus 49 days
-"Vastenavond" on easter minus 47 days
-"Aswoensdag" on easter minus 46 days
-:"Invocabit (roept Hij mij aan, begin Veertigdagentijd)" on easter minus 42 days
-:"Reminiscere (gedenk)" on easter minus 35 days
-:"Oculi (ogen)" on easter minus 28 days
-:"Laetare (verheugt u)" on easter minus 21 days
-:"Judica (doe recht)" on easter minus 14 days
-"Palmzondag" on easter minus 7 days
-"Witte Donderdag" on easter minus 3 days
-"Goede Vrijdag" on easter minus 2 days
-:"Quasi modo geniti (als pasgeboren kinderen)" on easter plus 7 days
-:"Misericordias Domini (trouw van de Heer)" on easter plus 14 days
-:"Jubilate (juicht)" on easter plus 21 days
-:"Cantate (zingt)" on easter plus 28 days
-:"Rogate (bidt)" on easter plus 35 days
-:"Exaudi (hoor)" on easter plus 42 days
-:"Trinitatis (drie-eenheid)" on easter plus 56 days
-"Hervormingsdag" on october 31
-"Allerheiligen" on november 1
-"Allerzielen" on november 2
-:"Laatste zondag kerkelijk jaar" on sunday before november 26
-:"Eerste advent" on sunday before december 3
-:"Tweede advent" on sunday before december 10
-:"Derde advent (Gaudete)" on sunday before december 17
-:"Vierde advent (Rorate)" on sunday before december 24
+"Driekoningen" religious on january 6
+:"Septuagesima (zeventigste)" religious on easter minus 63 days
+:"Sexagesima (zestigste)" religious on easter minus 56 days
+:"Quinquagesima (vijftigste)" religious on easter minus 49 days
+"Vastenavond" religious on easter minus 47 days
+"Aswoensdag" religious on easter minus 46 days
+:"Invocabit (roept Hij mij aan, begin Veertigdagentijd)" religious on easter minus 42 days
+:"Reminiscere (gedenk)" religious on easter minus 35 days
+:"Oculi (ogen)" religious on easter minus 28 days
+:"Laetare (verheugt u)" religious on easter minus 21 days
+:"Judica (doe recht)" religious on easter minus 14 days
+"Palmzondag" religious on easter minus 7 days
+"Witte Donderdag" religious on easter minus 3 days
+"Goede Vrijdag" religious on easter minus 2 days
+:"Quasi modo geniti (als pasgeboren kinderen)" religious on easter plus 7 days
+:"Misericordias Domini (trouw van de Heer)" religious on easter plus 14 days
+:"Jubilate (juicht)" religious on easter plus 21 days
+:"Cantate (zingt)" religious on easter plus 28 days
+:"Rogate (bidt)" religious on easter plus 35 days
+:"Exaudi (hoor)" religious on easter plus 42 days
+:"Trinitatis (drie-eenheid)" religious on easter plus 56 days
+"Hervormingsdag" religious on october 31
+"Allerheiligen" religious on november 1
+"Allerzielen" religious on november 2
+:"Laatste zondag kerkelijk jaar" religious on sunday before november 26
+:"Eerste advent" religious on sunday before december 3
+:"Tweede advent" religious on sunday before december 10
+:"Derde advent (Gaudete)" religious on sunday before december 17
+:"Vierde advent (Rorate)" religious on sunday before december 24
:: Financial
:: Cultural
-"Moederdag" on every second sunday in may
-"Vaderdag" on every third sunday in june
-"Oudjaar" on december 31
+"Moederdag" cultural on every second sunday in may
+"Vaderdag" cultural on every third sunday in june
+"Oudjaar" cultural on december 31
:: School
:: Daylight Saving
-"Zomertijd" on last sunday in march
-"Wintertijd" on last sunday in october
+"Zomertijd" seasonal on last sunday in march
+"Wintertijd" seasonal on last sunday in october
:: Seasons
@@ -80,6 +80,6 @@ language "nl"
:: To be sorted
-"Dodenherdenking" on may 4
-"Bevrijdingsdag" on may 5
-"Dierendag" on october 4
+"Dodenherdenking" civil on may 4
+"Bevrijdingsdag" civil on may 5
+"Dierendag" civil on october 4
diff --git a/kholidays/holidays/plan2/holiday_no_nb b/kholidays/holidays/plan2/holiday_no_nb
index 303c636..1f88b82 100644
--- a/kholidays/holidays/plan2/holiday_no_nb
+++ b/kholidays/holidays/plan2/holiday_no_nb
@@ -17,76 +17,77 @@ language "nb"
:description "(please add description in source language) National holiday file for Norway"
:: Public Holidays
-"Nyttårsdag" weekend on january 1
-"Palmesøndag" weekend on easter minus 7
-"Skjærtorsdag" weekend on easter minus 3
-"Langfredag" weekend on easter minus 2
-"Første påskedag" weekend on easter
-"Andre påskedag" weekend on easter plus 1
-"Arbeidernes internasjonale kampdag" weekend on may 1
-"Grunnlovsdagen" weekend on may 17
-"Kristi himmelfartsdag" weekend on easter plus 39 days
-"Første pinsedag" weekend on easter plus 49 days
-"Andre pinsedag" weekend on easter plus 50 days
-"Første juledag" weekend on december 25
-"Andre juledag" weekend on december 26
+"Nyttårsdag" public on january 1
+"Palmesøndag" public religious on easter minus 7
+"Skjærtorsdag" public religious on easter minus 3
+"Langfredag" public religious on easter minus 2
+"Første påskedag" public religious on easter
+"Andre påskedag" public on easter plus 1
+"Arbeidernes internasjonale kampdag" public on may 1
+"Grunnlovsdagen" public on may 17
+"Kristi himmelfartsdag" public religious on easter plus 39 days
+"Første pinsedag" public religious on easter plus 49 days
+"Andre pinsedag" public religious on easter plus 50 days
+"Første juledag" public religious on december 25
+"Andre juledag" public on december 26
:: Religious
:: PÃ¥ske og pinse
-"Fastelavnssøndag" on easter minus 49
-"Fetetirsdag" on easter minus 47
-"Askeonsdag" on easter minus 46
-"PÃ¥skeaften" on easter minus 1
-"Pinseaften" on easter plus 48 days
-"Bots- og bededag" on last sunday in october
+"Fastelavnssøndag" religious on easter minus 49
+"Fetetirsdag" religious on easter minus 47
+"Askeonsdag" religious on easter minus 46
+"PÃ¥skeaften" religious on easter minus 1
+"Pinseaften" religious on easter plus 48 days
+"Bots- og bededag" religious on last sunday in october
:: Jul
-"Første søndag i advent" on sunday before 24.12 minus 21 days
-"Andre søndag i advent" on sunday before 24.12 minus 14 days
-"Tredje søndag i advent" on sunday before 24.12 minus 7 days
-"Fjerde søndag i advent" on sunday before 24.12
-"Luciadagen" on 13.12
-"Lille julaften" on 23.12
-"Julaften" on 24.12
+"Første søndag i advent" religious on sunday before december 24 minus 21 days
+"Andre søndag i advent" religious on sunday before december 24 minus 14 days
+"Tredje søndag i advent" religious on sunday before december 24 minus 7 days
+"Fjerde søndag i advent" religious on sunday before december 24
+"Luciadagen" religious on december 13
+"Lille julaften" religious on december 23
+"Julaften" religious on december 24
:: Financial
:: Cultural
:: Mors- og farsdag
-"Morsdag" on second sunday in february
-"Farsdag" on second sunday in november
+"Morsdag" cultural on second sunday in february
+"Farsdag" cultural on second sunday in november
+
:: Offisielle flaggdager som ikke er høytidssager
-"H.K.H. Prinsesse Ingrid Alexandras fødselsdag" on january 21
-"Samefolkets dag" on february 6
-"H.M. Kong Harald Vs fødselsdag" on february 21
-"Frigjøringsdagen 1945" on may 8
-"H.M. Dronning Sonjas fødselsdag" on july 4
-"H.K.H. Kronprins Haakon Magnusâ fødselsdag" on july 20
-"Olsokdagen" on july 29
-"H.K.H. Kronprinsesse Mette-Marits fødselsdag" on august 19
+"H.K.H. Prinsesse Ingrid Alexandras fødselsdag" civil on january 21
+"Samefolkets dag" civil on february 6
+"H.M. Kong Harald Vs fødselsdag" civil on february 21
+"Frigjøringsdagen 1945" civil on may 8
+"H.M. Dronning Sonjas fødselsdag" civil on july 4
+"H.K.H. Kronprins Haakon Magnusâ fødselsdag" civil on july 20
+"Olsokdagen" civil on july 29
+"H.K.H. Kronprinsesse Mette-Marits fødselsdag" civil on august 19
:: Nyttår
-"Nyttårsaften" on 31.12
+"Nyttårsaften" civil on december 31
:: Andre
-"Valentinsdagen" on february 14
+"Valentinsdagen" cultural on february 14
:: Original version was "on 29.2" but appears every year in error due to no validity checking
:: Re-enable when new parser which has noop ability
-::"Skuddårsdagen" on ((leapyear year) ? [2/29] : noop)
-"Den internasjonale kvinnedagen" on march 8
-"Aprilsnarr" on april 1
-"Unionsoppløsningen 1905" on june 7
-"Sankthansaften" on june 23
-"Sankthansdagen" on june 24
-"Mikkelsmesse" on september 29
-"FN-dagen" on october 24
-"Allehelgensaften" on october 31
-"Allehelgensdag" on first sunday in november
+::"Skuddårsdagen" cultural on ((leapyear year) ? [2/29] : noop)
+"Den internasjonale kvinnedagen" cultural on march 8
+"Aprilsnarr" cultural on april 1
+"Unionsoppløsningen 1905" cultural on june 7
+"Sankthansaften" cultural on june 23
+"Sankthansdagen" cultural on june 24
+"Mikkelsmesse" cultural on september 29
+"FN-dagen" cultural on october 24
+"Allehelgensaften" cultural on october 31
+"Allehelgensdag" cultural on first sunday in november
:: School
:: Daylight Saving
:: Seasons
-"Sommertid starter" on last sunday in march
-"Vintertid starter" on last sunday in october
+"Sommertid starter" seasonal on last sunday in march
+"Vintertid starter" seasonal on last sunday in october
:: Name Days
diff --git a/kholidays/holidays/plan2/holiday_no_nn b/kholidays/holidays/plan2/holiday_no_nn
index 76ea181..2542086 100644
--- a/kholidays/holidays/plan2/holiday_no_nn
+++ b/kholidays/holidays/plan2/holiday_no_nn
@@ -17,74 +17,74 @@ language "nn"
:description "(please add description in source language) National holiday file for Norway"
:: Public Holidays
-"Nyttårsdag" weekend on january 1
-"Palmesøndag" weekend on easter minus 7
-"Skjærtorsdag" weekend on easter minus 3
-"Langfredag" weekend on easter minus 2
-"Første påskedag" weekend on easter
-"Andre påskedag" weekend on easter plus 1
-"Arbeidaranes internasjonale kampdag" weekend on may 1
-"Grunnlovsdagen" weekend on may 17
-"Kristi himmelfartsdag" weekend on easter plus 39 days
-"Første pinsedag" weekend on easter plus 49 days
-"Andre pinsedag" weekend on easter plus 50 days
-"Første juledag" weekend on december 25
-"Andre juledag" weekend on december 26
+"Nyttårsdag" public on january 1
+"Palmesøndag" public religious on easter minus 7
+"Skjærtorsdag" public religious on easter minus 3
+"Langfredag" public religious on easter minus 2
+"Første påskedag" public religious on easter
+"Andre påskedag" public on easter plus 1
+"Arbeidaranes internasjonale kampdag" public on may 1
+"Grunnlovsdagen" public on may 17
+"Kristi himmelfartsdag" public religious on easter plus 39 days
+"Første pinsedag" public religious on easter plus 49 days
+"Andre pinsedag" public religious on easter plus 50 days
+"Første juledag" public religious on december 25
+"Andre juledag" public on december 26
:: Religious
:: PÃ¥ske og pinse
-"Fastelavnssøndag" on easter minus 49
-"Feitetysdag" on easter minus 47
-"Askeonsdag" on easter minus 46
-"PÃ¥skeaftan" on easter minus 1
-"Pinseaftan" on easter plus 48 days
-"Bots- og bededag" on last sunday in october
+"Fastelavnssøndag" religious on easter minus 49
+"Feitetysdag" religious on easter minus 47
+"Askeonsdag" religious on easter minus 46
+"PÃ¥skeaftan" religious on easter minus 1
+"Pinseaftan" religious on easter plus 48 days
+"Bots- og bededag" religious on last sunday in october
:: Jul
-"Første søndag i advent" on sunday before 24.12 minus 21 days
-"Andre søndag i advent" on sunday before 24.12 minus 14 days
-"Tredje søndag i advent" on sunday before 24.12 minus 7 days
-"Fjerde søndag i advent" on sunday before 24.12
-"Luciadagen" on 13.12
-"Litlejulaftan" on 23.12
-"Julaften" on 24.12
+"Første søndag i advent" religious on sunday before december 24 minus 21 days
+"Andre søndag i advent" religious on sunday before december 24 minus 14 days
+"Tredje søndag i advent" religious on sunday before december 24 minus 7 days
+"Fjerde søndag i advent" religious on sunday before december 24
+"Luciadagen" religious on december 13
+"Litlejulaftan" religious on december 23
+"Julaften" religious on december 24
:: Financial
:: Cultural
:: Mors- og farsdag
-"Morsdag" on second sunday in february
-"Farsdag" on second sunday in november
+"Morsdag" cultural on second sunday in february
+"Farsdag" cultural on second sunday in november
:: Offisielle flaggdager som ikkje er høgtidsdagar
-"Prinsesse Ingrid Alexandras fødselsdag" on january 21
-"Samefolkets dag" on february 6
-"H.M. Kong Harald Vs fødselsdag" on february 21
-"Frigjeringsdagen 1945" on may 8
-"H.M. Dronning Sonjas fødselsdag" on july 4
-"Kronprins Haakon Magnusâ fødselsdag" on july 20
-"Olsokdagen" on july 29
-"Kronprinsesse Mette-Marits fødselsdag" on august 19
+"Prinsesse Ingrid Alexandras fødselsdag" civil on january 21
+"Samefolkets dag" civil on february 6
+"H.M. Kong Harald Vs fødselsdag" civil on february 21
+"Frigjeringsdagen 1945" civil on may 8
+"H.M. Dronning Sonjas fødselsdag" civil on july 4
+"Kronprins Haakon Magnusâ fødselsdag" civil on july 20
+"Olsokdagen" civil on july 29
+"Kronprinsesse Mette-Marits fødselsdag" civil on august 19
:: Nyttår
-"Nyttårsaftan" on 31.12
+"Nyttårsaftan" civil on december 31
:: Andre
-"Valentinsdagen" on february 14
+"Valentinsdagen" cultural on february 14
:: Re-enable when new parser which has noop ability
-::"Skotårsdagen" on ((leapyear year) ? [2/29] : noop)
-"Den internasjonale kvinnedagen" on march 8
-"Aprilsnarr" on april 1
-"Unionsoppløysinga 1905" on june 7
-"Jonsokaftan" on june 23
-"Jonsokdagen" on june 24
-"Mikkelsmesse" on september 29
-"SN-dagen" on october 24
-"Allehelgensaftan" on october 31
-"Allehelgensdag" on first sunday in november
+::"Skotårsdagen" cultural on ((leapyear year) ? [2/29] : noop)
+"Den internasjonale kvinnedagen" cultural on march 8
+"Aprilsnarr" cultural on april 1
+"Unionsoppløysinga 1905" cultural on june 7
+"Jonsokaftan" cultural on june 23
+"Jonsokdagen" cultural on june 24
+"Mikkelsmesse" cultural on september 29
+"SN-dagen" cultural on october 24
+"Allehelgensaftan" cultural on october 31
+"Allehelgensdag" cultural on first sunday in november
:: School
:: Daylight Saving
:: Seasons
-"Sommartid startar" on last sunday in march
-"Vintertid startar" on last sunday in october
+"Sommartid startar" seasonal on last sunday in march
+"Vintertid startar" seasonal on last sunday in october
:: Name Days
diff --git a/kholidays/holidays/plan2/holiday_nz_en-gb b/kholidays/holidays/plan2/holiday_nz_en-gb
index 09be1a8..69c7599 100644
--- a/kholidays/holidays/plan2/holiday_nz_en-gb
+++ b/kholidays/holidays/plan2/holiday_nz_en-gb
@@ -21,31 +21,31 @@ language "en_GB"
description "National holiday file for New Zealand"
:: Public Holidays
-"New Year's Day" weekend on january 1
-"New Year's Day Holiday" weekend on ( ( ( [january 1] == [saturday after ([january 1])] ) ||
+"New Year's Day" public on january 1
+"New Year's Day Holiday" public on ( ( ( [january 1] == [saturday after ([january 1])] ) ||
( [january 1] == [sunday after ([january 1])] ) ) ?
[ monday after ([january 1]) ] :
noop )
-"Day after New Year's Day" weekend on january 2
-"Day after New Year's Day Holiday" weekend on ( ( [january 2] == [saturday after ([january 1])] ) ?
+"Day after New Year's Day" public on january 2
+"Day after New Year's Day Holiday" public on ( ( [january 2] == [saturday after ([january 1])] ) ?
[monday after ([december 25])] :
( ( [january 2] == [sunday after ([january 1])] ||
[january 2] == [monday after ([january 1])] ) ?
[tuesday after ([january 1])] :
noop ) )
-"Good Friday" weekend on easter minus 2 days
-"Easter Monday" weekend on easter plus 1 days
-"Waitangi Day" weekend on february 6
-"Anzac Day" weekend on april 25
-"Queen's Birthday" weekend on first monday in june
-"Labour Day" weekend on fourth monday in october
-"Christmas Day" weekend on december 25
-"Christmas Day Holiday" weekend on ( ( ( [december 25] == [saturday after ([december 25])] ) ||
+"Good Friday" public religious on easter minus 2 days
+"Easter Monday" public on easter plus 1 days
+"Waitangi Day" public on february 6
+"Anzac Day" public on april 25
+"Queen's Birthday" public on first monday in june
+"Labour Day" public on fourth monday in october
+"Christmas Day" public religious on december 25
+"Christmas Day Holiday" public on ( ( ( [december 25] == [saturday after ([december 25])] ) ||
( [december 25] == [sunday after ([december 25])] ) ) ?
[ monday after ([december 25]) ] :
noop )
-"Boxing Day" weekend on december 26
-"Boxing Day Holiday" weekend on ( ( [december 26] == [saturday after ([december 25])] ) ?
+"Boxing Day" public on december 26
+"Boxing Day Holiday" public on ( ( [december 26] == [saturday after ([december 25])] ) ?
[monday after ([december 25])] :
( ( [december 26] == [sunday after ([december 25])] ||
[december 26] == [monday after ([december 25])] ) ?
@@ -55,71 +55,71 @@ description "National holiday file for New Zealand"
:: Provincial Holidays
:: All move to nearest Monday unless otherwise noted
:: Auckland nominally 29 January
-"Auckland Anniversary Day" on monday after 26 january
+"Auckland Anniversary Day" civil on monday after 26 january
:: Taranaki nominally 31 March moves to 2nd Monday in March to miss Easter
-"Taranaki Anniversary Day" on second monday in march
+"Taranaki Anniversary Day" civil on second monday in march
:: Hawkes Bay nominally 1 November moves to Friday before Labour day
-"Hawkes Bay Anniversary Day" on fourth monday in october minus 3 days
+"Hawkes Bay Anniversary Day" civil on fourth monday in october minus 3 days
:: Wellington nominally 22 January
-"Wellington Anniversary Day" on monday after 19 january
+"Wellington Anniversary Day" civil on monday after 19 january
:: Marlborough nominally 1 November moves to Friday before Labour day
-"Marlborough Anniversary Day" on fourth monday in october plus 7 days
+"Marlborough Anniversary Day" civil on fourth monday in october plus 7 days
:: Nelson nominally 1 February moves to nearest monday
-"Nelson Anniversary Day" on monday after 29 january
+"Nelson Anniversary Day" civil on monday after 29 january
:: Canterbury nominally 16 December moves to 2nd Fri after 1st Tues in Nov
-"Canterbury Anniversary Day" on friday after 11 november
+"Canterbury Anniversary Day" civil on friday after 11 november
:: South Canterbury nominally 16 December moves to 4th Monday in September
-"South Canterbury Anniversary Day" on fourth monday in september
+"South Canterbury Anniversary Day" civil on fourth monday in september
:: Westland nominally 1 December
-"Westland Anniversary Day" on monday after 28 november
+"Westland Anniversary Day" civil on monday after 28 november
:: Otago nominally 23 March
-"Otago Anniversary Day" on monday after 20 march
+"Otago Anniversary Day" civil on monday after 20 march
:: Southland nominally 17 January
-"Southland Anniversary Day" on monday after 14 march
+"Southland Anniversary Day" civil on monday after 14 march
:: Chatham Islands nominally 30 November
-"Chatham Islands Anniversary Day" on monday after 27 november
+"Chatham Islands Anniversary Day" civil on monday after 27 november
:: Religious Holidays
-:"Epiphany on sunday after january 2
-:"Baptism of Lord" on sunday after january 2 plus 7 days
-:"Presentation" on february 2
-"Ash Wednesday" on easter minus 46 days
-:"Palm Sunday" on easter minus 7 days
-"Easter Sunday" on easter
-"Ascension" on easter plus 39 days
-"Pentecost" on easter plus 49 days
-"Trinity" on easter plus 56 days
-"Corpus Christi" on easter plus 63 days
-:"Sacred Heart" on easter plus 68 days
-:"John the Baptist" on june 24
-:"Sts Peter & Paul" on june 29
-:"Transfiguration" on august 6
-"Assumption" on august 15
-"All Saints" on november 1
-:"All Souls" on november 2
-:"Christ the King" on sunday before december 24 minus 28 days
-:"1. Advent" on sunday before december 24 minus 21 days
-:"2. Advent" on sunday before december 24 minus 14 days
-:"3. Advent" on sunday before december 24 minus 7 days
-:"4. Advent" on sunday before december 24
-:"Holy Family" on first sunday after december 26
+:"Epiphany religious on sunday after january 2
+:"Baptism of Lord" religious on sunday after january 2 plus 7 days
+:"Presentation" religious on february 2
+"Ash Wednesday" religious on easter minus 46 days
+:"Palm Sunday" religious on easter minus 7 days
+"Easter Sunday" religious on easter
+"Ascension" religious on easter plus 39 days
+"Pentecost" religious on easter plus 49 days
+"Trinity" religious on easter plus 56 days
+"Corpus Christi" religious on easter plus 63 days
+:"Sacred Heart" religious on easter plus 68 days
+:"John the Baptist" religious on june 24
+:"Sts Peter & Paul" religious on june 29
+:"Transfiguration" religious on august 6
+"Assumption" religious on august 15
+"All Saints" religious on november 1
+:"All Souls" religious on november 2
+:"Christ the King" religious on sunday before december 24 minus 28 days
+:"1. Advent" religious on sunday before december 24 minus 21 days
+:"2. Advent" religious on sunday before december 24 minus 14 days
+:"3. Advent" religious on sunday before december 24 minus 7 days
+:"4. Advent" religious on sunday before december 24
+:"Holy Family" religious on first sunday after december 26
:: Financial
:: Cultural
-"St. Valentine's Day" on february 14
-"St. Patrick's Day" on march 17
-"Mother's Day" on second sunday in may
-"Father's Day" on first sunday in september
-"Halloween" on october 31
-"Guy Fawkes" on november 5
-"Melbourne Cup" on first tuesday in november
+"St. Valentine's Day" cultural on february 14
+"St. Patrick's Day" cultural on march 17
+"Mother's Day" cultural on second sunday in may
+"Father's Day" cultural on first sunday in september
+"Halloween" cultural on october 31
+"Guy Fawkes" cultural on november 5
+"Melbourne Cup" cultural on first tuesday in november
:: School
:: Daylight Saving
-"Daylight Saving begins" on last sunday in september
-"Daylight Saving ends" on first sunday in april
+"Daylight Saving begins" seasonal on last sunday in september
+"Daylight Saving ends" seasonal on first sunday in april
:: Seasons
diff --git a/kholidays/holidays/plan2/holiday_pa_en b/kholidays/holidays/plan2/holiday_pa_en
index f3dacb4..ac7cc8e 100644
--- a/kholidays/holidays/plan2/holiday_pa_en
+++ b/kholidays/holidays/plan2/holiday_pa_en
@@ -18,51 +18,51 @@ language "en"
:description "(please add description in source language) National holiday file for Panama"
:: Public Holidays
-"New Year's Day" weekend on january 1
-"Martyr´s Day" weekend on january 9
-"Carnival/Shrove Tuesday" weekend on easter minus 47
-"Good Friday" weekend on easter minus 2
-"Labor Day / May Day" weekend on may 1
-"Old Panama Foundation" on august 15
-"Separation Day from Colombia" weekend on november 3
-"Colon Day" weekend on november 5
-"Shout in La Villa de los Santos" weekend on november 10
-"Independence from Spain" weekend on november 28
-"Mother Day / Inmaculate Conception" weekend on december 8
-"Christmas Day" weekend on december 25
+"New Year's Day" public on january 1
+"Martyr´s Day" public on january 9
+"Carnival/Shrove Tuesday" public on easter minus 47
+"Good Friday" public religious on easter minus 2
+"Labor Day / May Day" public on may 1
+"Old Panama Foundation" civil on august 15
+"Separation Day from Colombia" public on november 3
+"Colon Day" public on november 5
+"Shout in La Villa de los Santos" public on november 10
+"Independence from Spain" public on november 28
+"Mother Day / Inmaculate Conception" public religious on december 8
+"Christmas Day" public religious on december 25
:: Religious
-"Epiphany" on january 6
-"Saint Joseph" on march 19
-"Ash Wednesday" weekend on easter minus 46
-"Maundy Thursday" on easter minus 3
-"Palm Sunday" on easter minus 7
-"Easter Day" on easter
-"Ascension" on easter plus 39
-"Pentecost Monday" on easter plus 50
-"Holy Tinity" on easter plus 56
-"Corpus Christi" on easter plus 60
-"Sacred Heart" on easter plus 71
-"St. Peter and St. Paul Day" on june 29
-"The Assumption" on august 15
-"St. Francis of Assisi" on october 4
-"All Saints" on november 1
+"Epiphany" religious on january 6
+"Saint Joseph" religious on march 19
+"Ash Wednesday" public religious on easter minus 46
+"Maundy Thursday" religious on easter minus 3
+"Palm Sunday" religious on easter minus 7
+"Easter Day" religious on easter
+"Ascension" religious on easter plus 39
+"Pentecost Monday" religious on easter plus 50
+"Holy Tinity" religious on easter plus 56
+"Corpus Christi" religious on easter plus 60
+"Sacred Heart" religious on easter plus 71
+"St. Peter and St. Paul Day" religious on june 29
+"The Assumption" religious on august 15
+"St. Francis of Assisi" religious on october 4
+"All Saints" religious on november 1
:: Financial
:: Cultural
-"Columbus Day/Dia de la Raza" on october 12
-"Internet International Day" on may 17
-"Christmas Eve" on december 24
+"Columbus Day/Dia de la Raza" cultural on october 12
+"Internet International Day" cultural on may 17
+"Christmas Eve" cultural on december 24
:: School
:: Daylight Saving
:: Seasons
-"March Equinox" on march 20
-"June Solstice" on june 21
-"September Equinox" on september 22
-"December Solstice" on december 21
+"March Equinox" seasonal on march 20
+"June Solstice" seasonal on june 21
+"September Equinox" seasonal on september 22
+"December Solstice" seasonal on december 21
:: Name Days
diff --git a/kholidays/holidays/plan2/holiday_pa_es b/kholidays/holidays/plan2/holiday_pa_es
index 1b3e4f9..ff569fe 100644
--- a/kholidays/holidays/plan2/holiday_pa_es
+++ b/kholidays/holidays/plan2/holiday_pa_es
@@ -18,51 +18,51 @@ language "es"
:description "(please add description in source language) National holiday file for Panama"
:: Public Holidays
-"Año nuevo" weekend on january 1
-"DÃa de los Martires" weekend on january 9
-"Martes Carnaval" weekend on easter minus 47
-"Viernes Santo" weekend on easter minus 2
-"DÃa del Trabajo" weekend on may 1
-"Fundación Panama Vieja" on august 15
-"Separación Panamá-Colombia" weekend on november 3
-"DÃa de Colón" weekend on november 5
-"Grito en La Villa, Los Santos" weekend on november 10
-"Independencia Panamá-España" weekend on november 28
-"DÃa de la Madre" weekend on december 8
-"Navidad" weekend on december 25
+"Año nuevo" public on january 1
+"DÃa de los Martires" public religious on january 9
+"Martes Carnaval" public religious on easter minus 47
+"Viernes Santo" public religious on easter minus 2
+"DÃa del Trabajo" public on may 1
+"Fundación Panama Vieja" public on august 15
+"Separación Panamá-Colombia" public on november 3
+"DÃa de Colón" public on november 5
+"Grito en La Villa, Los Santos" public on november 10
+"Independencia Panamá-España" public on november 28
+"DÃa de la Madre" public religious on december 8
+"Navidad" public religious on december 25
:: Religious
-"EpifanÃa/DÃa de Reyes" on january 6
-"San José" on march 19
-"Miércoles de Cenizas" weekend on easter minus 46
-"Jueves Santo" on easter minus 3
-"Domingo de Ramos" on easter minus 7
-"Domingo de Pascua" on easter
-"Ascensión de Jesús" on easter plus 39
-"Lunes Penteconstés" on easter plus 50
-"SantÃsima Trinidad" on easter plus 56
-"Corpus Christi" on easter plus 60
-"Sagrado Corazón" on easter plus 71
-"San Pedro y San Pablo" on june 29
-"Asunción de la Virgen" on august 15
-"San Francisco de AsÃs" on october 4
-"Todos los Santos" on november 1
+"EpifanÃa/DÃa de Reyes" religious on january 6
+"San José" religious on march 19
+"Miércoles de Cenizas" public religious on easter minus 46
+"Jueves Santo" religious on easter minus 3
+"Domingo de Ramos" religious on easter minus 7
+"Domingo de Pascua" religious on easter
+"Ascensión de Jesús" religious on easter plus 39
+"Lunes Penteconstés" religious on easter plus 50
+"SantÃsima Trinidad" religious on easter plus 56
+"Corpus Christi" religious on easter plus 60
+"Sagrado Corazón" religious on easter plus 71
+"San Pedro y San Pablo" religious on june 29
+"Asunción de la Virgen" religious on august 15
+"San Francisco de AsÃs" religious on october 4
+"Todos los Santos" religious on november 1
:: Financial
:: Cultural
-"DÃa de la Raza" on october 12
-"DÃa Internacional de Internet" on may 17
-"VÃspera de Navidad" on december 24
+"DÃa de la Raza" cultural on october 12
+"DÃa Internacional de Internet" cultural on may 17
+"VÃspera de Navidad" cultural on december 24
:: School
:: Daylight Saving
:: Seasons
-"Equinoccio" on march 20
-"Solticio" on june 21
-"Equinoccio" on september 22
-"Solticio" on december 21
+"Equinoccio" seasonal on march 20
+"Solticio" seasonal on june 21
+"Equinoccio" seasonal on september 22
+"Solticio" seasonal on december 21
:: Name Days
diff --git a/kholidays/holidays/plan2/holiday_pe_es b/kholidays/holidays/plan2/holiday_pe_es
index c54f90b..f01cee1 100644
--- a/kholidays/holidays/plan2/holiday_pe_es
+++ b/kholidays/holidays/plan2/holiday_pe_es
@@ -17,21 +17,21 @@ language "es"
description "Feriados Nacionales de Peru"
:: Public Holidays
-"Año Nuevo" weekend on january 1
-"DÃa del Trabajo" weekend on may 1
-"DÃa de la Independencia" weekend on july 28
-"Fiestas Patrias" weekend on july 29
-"Combate de Angamos" weekend on October 8
+"Año Nuevo" public on january 1
+"DÃa del Trabajo" public on may 1
+"DÃa de la Independencia" public on july 28
+"Fiestas Patrias" public on july 29
+"Combate de Angamos" public on October 8
:: Religious
-"Jueves Santo" weekend on easter minus 3
-"Viernes Santo" weekend on easter minus 2
-"Pascua" weekend on easter
-"DÃa de San Pedro y San Pablo" weekend on june 29
-"DÃa de Todos los Santos" weekend on November 1
-"DÃa de Santa Rosa de Lima" weekend on August 30
-"Inmaculada Concepción" weekend on december 8
-"Navidad" weekend on december 25
+"Jueves Santo" public religious on easter minus 3
+"Viernes Santo" public religious on easter minus 2
+"Pascua" public religious on easter
+"DÃa de San Pedro y San Pablo" public religious on june 29
+"DÃa de Todos los Santos" public religious on November 1
+"DÃa de Santa Rosa de Lima" public religious on August 30
+"Inmaculada Concepción" public religious on december 8
+"Navidad" public religious on december 25
:: Financial
diff --git a/kholidays/holidays/plan2/holiday_pf_fr b/kholidays/holidays/plan2/holiday_pf_fr
index 7821fc4..d5ccb02 100644
--- a/kholidays/holidays/plan2/holiday_pf_fr
+++ b/kholidays/holidays/plan2/holiday_pf_fr
@@ -33,89 +33,89 @@ description "Fêtes et jours fériés en Polynésie Française"
:: Public Holidays - Fêtes civiles et jours fériés
: New Year's Day
-"Jour de l'an" weekend on january 1
+"Jour de l'an" public on january 1
: Easter
-"Pâques" weekend on easter length 2 days
-"Ascension" weekend on easter plus 39 days
-"Pentecôte" weekend on easter plus 49 days length 2 days
+"Pâques" public religious on easter length 2 days
+"Ascension" public religious on easter plus 39 days
+"Pentecôte" public religious on easter plus 49 days length 2 days
: Labor day
-"Fête du Travail" weekend on may 1
+"Fête du Travail" public on may 1
: WW2 armistice
-"Fête de la Victoire" weekend on may 8
+"Fête de la Victoire" public on may 8
: National day
-"Fête nationale" weekend on july 14
+"Fête nationale" public on july 14
: Assumption
-"Assomption" weekend on august 15
+"Assomption" public religious on august 15
: All saints day
-"Toussaint" weekend on november 1
+"Toussaint" public religious on november 1
: WW1 armistice
-"Armistice de 1918" weekend on november 11
+"Armistice de 1918" public on november 11
: Christmas day
-"Noël" weekend on december 25
+"Noël" public religious on december 25
:: Territorial and Regional holidays
-"Fête de l'autonomie de la Polynésie française" weekend on june 29
+"Fête de l'autonomie de la Polynésie française" public on june 29
:: Religious - Fêtes religieuses
-"Ãpiphanie" on first sunday in january
+"Ãpiphanie" religious on first sunday in january
: Presentation of Jesus at the Temple
-"Chandeleur" on february 2
-"Mardi Gras" on easter minus 47 days
+"Chandeleur" religious on february 2
+"Mardi Gras" religious on easter minus 47 days
: Ash Wednesday
-"Mercredi des Cendres" on easter minus 46 days
+"Mercredi des Cendres" religious on easter minus 46 days
: Good Friday
-"Vendredi saint" on easter minus 2 days
+"Vendredi saint" religious on easter minus 2 days
: Day of the dead
-"Fête des morts" on november 2
-"St Ãtienne" on december 26
+"Fête des morts" religious on november 2
+"St Ãtienne" religious on december 26
:: Financial
:: Cultural - Fêtes civiles non fériées
: Valentine's day
-"Fête des amoureux" on february 14
+"Fête des amoureux" cultural on february 14
: Grandmothers' day
-"Fête des grands-mères" on first sunday in march
+"Fête des grands-mères" cultural on first sunday in march
: Remembrance of the Deportees
-"Souvenir des Déportés" on last sunday in april
+"Souvenir des Déportés" commemorative on last sunday in april
: Europe day
-"Journée de l'Europe" on may 9
+"Journée de l'Europe" cultural on may 9
: Remembrance of slavery
-"Mémoire de l'esclavage" on may 10
+"Mémoire de l'esclavage" commemorative on may 10
: Neighbors' day
-"Fête des voisins" on last tuesday in may
+"Fête des voisins" cultural on last tuesday in may
: Mothers' day, move if clashes with Pentecost
-"Fête des mères" ( ( [last sunday in may] == ([easter] + 49 days) ) ? [first sunday in june] : [last sunday in may] )
+"Fête des mères" cultural on ( ( [last sunday in may] == ([easter] + 49 days) ) ? [first sunday in june] : [last sunday in may] )
: or 'first sunday in june' if same day as Pentecôte
: Fathers' day
-"Fête des pères" on third sunday in june
+"Fête des pères" cultural on third sunday in june
: Fatalities in the 1st Indochina war
-"Morts en Indochine" on june 8
+"Morts en Indochine" commemorative on june 8
: Music day
-"Fête de la Musique" on june 21
+"Fête de la Musique" cultural on june 21
: St John
-"Fête de la Saint Jean" on june 24
+"Fête de la Saint Jean" cultural on june 24
: Homage to the Harkis
-"Hommage aux Harkis" on september 25
+"Hommage aux Harkis" commemorative on september 25
: Fatalities in the Algerian war
-"Morts en Algérie" on december 5
+"Morts en Algérie" commemorative on december 5
:: School
:: Daylight Saving
: summer
-"Heure d'été" on last sunday in march
+"Heure d'été" seasonal on last sunday in march
: winter
-"Heure d'hiver" on last sunday in october
+"Heure d'hiver" seasonal on last sunday in october
:: Seasons
: Spring
-"Printemps" on september 23
+"Printemps" seasonal on september 23
: Summer
-"Ãté" on december 21
+"Ãté" seasonal on december 21
: Fall
-"Automne" on march 20
+"Automne" seasonal on march 20
: Winter
-"Hiver" on june 21
+"Hiver" seasonal on june 21
:: Name Days
diff --git a/kholidays/holidays/plan2/holiday_pl_pl b/kholidays/holidays/plan2/holiday_pl_pl
index e0f77ca..54d56ac 100644
--- a/kholidays/holidays/plan2/holiday_pl_pl
+++ b/kholidays/holidays/plan2/holiday_pl_pl
@@ -17,53 +17,53 @@ language "pl"
:description "(please add description in source language) National holiday file for Poland"
:: Public Holidays
-"Nowy Rok" weekend on january 1
-"Wielkanoc" weekend on easter length 2 days
-"Lany PoniedziaÅek" weekend on easter plus 1 day
-"Zielone ÅwiÄ
tki" weekend on easter plus 49 days
-"Boże CiaÅo" weekend on easter plus 60 days
-"ÅwiÄto Pracy" weekend on may 1
-"ÅwiÄto Konstytucji" weekend on may 3
-"WniebowziÄcie NMP" weekend on august 15
-"Wszystkich ÅwiÄtych" weekend on november 1
-"ÅwiÄto NiepodlegÅoÅci" weekend on november 11
-"Boże Narodzenie" weekend on december 25 length 2 days
+"Nowy Rok" public on january 1
+"Wielkanoc" public religious on easter length 2 days
+"Lany PoniedziaÅek" public on easter plus 1 day
+"Zielone ÅwiÄ
tki" public religious on easter plus 49 days
+"Boże CiaÅo" public religious on easter plus 60 days
+"ÅwiÄto Pracy" public on may 1
+"ÅwiÄto Konstytucji" public on may 3
+"WniebowziÄcie NMP" public on august 15
+"Wszystkich ÅwiÄtych" public religious on november 1
+"ÅwiÄto NiepodlegÅoÅci" public on november 11
+"Boże Narodzenie" public religious on december 25 length 2 days
:: Religious
-"Åledzik" on easter minus 47 days
-"Popielec" on easter minus 46 days
-"Wielki PiÄ
tek" on easter minus 2 days
-"Niedziela Palmowa" on easter minus 7 days
+"Åledzik" religious on easter minus 47 days
+"Popielec" religious on easter minus 46 days
+"Wielki PiÄ
tek" religious on easter minus 2 days
+"Niedziela Palmowa" religious on easter minus 7 days
:: Financial
:: Cultural
-"Walentynki" on february 14
+"Walentynki" cultural on february 14
:: School
:: Daylight Saving
:: Seasons
-"PoczÄ
tek wiosny" on march 21
-"PoczÄ
tek lata" on june 22
-"PoczÄ
tek jesieni" on september 23
-"PoczÄ
tek zimy" on december 22
+"PoczÄ
tek wiosny" seasonal on march 21
+"PoczÄ
tek lata" seasonal on june 22
+"PoczÄ
tek jesieni" seasonal on september 23
+"PoczÄ
tek zimy" seasonal on december 22
:: Name Days
:: To be sorted
-"Trzech Króli" on january 6
-"DzieÅ Babci" on january 21
-"DzieÅ Dziadka" on january 22
-"DzieÅ Kobiet" on march 8
-"DzieÅ Flagi" on may 2
-"DzieÅ Matki" on may 26
-"DzieÅ Dziecka" on june 1
-"DzieÅ Ojca" on june 23
-"Zaduszki" on november 2
-"Andrzejki" on november 30
-"Åw. MikoÅaj" on december 6
-"Wigilia" on december 24
-"Sylwester" on december 31
+"Trzech Króli" civil on january 6
+"DzieÅ Babci" civil on january 21
+"DzieÅ Dziadka" civil on january 22
+"DzieÅ Kobiet" civil on march 8
+"DzieÅ Flagi" civil on may 2
+"DzieÅ Matki" civil on may 26
+"DzieÅ Dziecka" civil on june 1
+"DzieÅ Ojca" civil on june 23
+"Zaduszki" civil on november 2
+"Andrzejki" civil on november 30
+"Åw. MikoÅaj" civil on december 6
+"Wigilia" civil on december 24
+"Sylwester" civil on december 31
diff --git a/kholidays/holidays/plan2/holiday_pt_pt b/kholidays/holidays/plan2/holiday_pt_pt
index 7132eda..f7f8e06 100644
--- a/kholidays/holidays/plan2/holiday_pt_pt
+++ b/kholidays/holidays/plan2/holiday_pt_pt
@@ -17,22 +17,22 @@ language "pt"
:description "(please add description in source language) National holiday file for Portugal"
:: Public Holidays
-"Ano Novo" weekend on january 1
-"6ª feira santa" weekend on easter minus 2 days
-"25 de Abril" weekend on april 25
-"1º de Maio" weekend on may 1
-"10 de Junho" weekend on june 10
-"Assunção" weekend on august 15
-"Nª Senhora Conceição" weekend on december 8
-"Natal" weekend on december 25
+"Ano Novo" public on january 1
+"6ª feira santa" public religious on easter minus 2 days
+"25 de Abril" public on april 25
+"1º de Maio" public on may 1
+"10 de Junho" public on june 10
+"Assunção" public on august 15
+"Nª Senhora Conceição" public religious on december 8
+"Natal" public religious on december 25
:: Religious
-"Carnaval" on easter minus 50 days length 4 days
-"4ª feira de cinzas" on easter minus 46 days
-"Páscoa" on easter
-"Ascension" on easter plus 39 days
-"Trinity" on easter plus 56 days
-"Pentecostes" on easter plus 49 days
+"Carnaval" religious on easter minus 50 days length 4 days
+"4ª feira de cinzas" religious on easter minus 46 days
+"Páscoa" religious on easter
+"Ascension" religious on easter plus 39 days
+"Trinity" religious on easter plus 56 days
+"Pentecostes" religious on easter plus 49 days
:: Financial
@@ -43,17 +43,17 @@ language "pt"
:: Daylight Saving
:: Seasons
-"Primavera" on march 22
-"Verão" on june 22
-"Outono" on september 22
-"Inverno" on december 22
+"Primavera" seasonal on march 22
+"Verão" seasonal on june 22
+"Outono" seasonal on september 22
+"Inverno" seasonal on december 22
:: Removed holidays
-:: "Corpo de Deus" weekend on easter plus 60 days
-:: "República" weekend on october 5
-:: "Todos os Santos" weekend on november 1
-:: "Restauração" weekend on december 1
+:: "Corpo de Deus" public on easter plus 60 days
+:: "República" public on october 5
+:: "Todos os Santos" public on november 1
+:: "Restauração" public on december 1
:: Name Days
diff --git a/kholidays/holidays/plan2/holiday_py_es b/kholidays/holidays/plan2/holiday_py_es
index 0e05561..8855c57 100644
--- a/kholidays/holidays/plan2/holiday_py_es
+++ b/kholidays/holidays/plan2/holiday_py_es
@@ -17,17 +17,17 @@ language "es"
:description "(please add description in source language) National holiday file for Paraguay"
:: Public Holidays
-"Año nuevo" weekend on january 1
-"DÃa de los Heroes" weekend on march 1
-"Jueves Santo" weekend on easter minus 3 days
-"Viernes Santo" weekend on easter minus 2 days
-"Trabajo" weekend on may 1
-"Independencia" weekend on may 15
-"Paz del Chaco" weekend on june 12
-"Asunción" weekend on august 15
-"Batalla de Boquerón" weekend on september 29
-"Virgen de Caacupé" weekend on december 8
-"Navidad" weekend on december 25
+"Año nuevo" public on january 1
+"DÃa de los Heroes" public on march 1
+"Jueves Santo" public religious on easter minus 3 days
+"Viernes Santo" public religious on easter minus 2 days
+"Trabajo" public on may 1
+"Independencia" public on may 15
+"Paz del Chaco" public on june 12
+"Asunción" public religious on august 15
+"Batalla de Boquerón" public on september 29
+"Virgen de Caacupé" public religious on december 8
+"Navidad" public religious on december 25
:: Religious
diff --git a/kholidays/holidays/plan2/holiday_re_fr b/kholidays/holidays/plan2/holiday_re_fr
index 4f9908e..2731459 100644
--- a/kholidays/holidays/plan2/holiday_re_fr
+++ b/kholidays/holidays/plan2/holiday_re_fr
@@ -33,90 +33,90 @@ description "Fêtes et jours fériés en La Réunion"
:: Public Holidays - Fêtes civiles et jours fériés
: New Year's Day
-"Jour de l'an" weekend on january 1
+"Jour de l'an" public on january 1
: Easter
-"Pâques" weekend on easter length 2 days
-"Ascension" weekend on easter plus 39 days
-"Pentecôte" weekend on easter plus 49 days length 2 days
+"Pâques" public religious on easter length 2 days
+"Ascension" public religious on easter plus 39 days
+"Pentecôte" public religious on easter plus 49 days length 2 days
: Labor day
-"Fête du Travail" weekend on may 1
+"Fête du Travail" public on may 1
: WW2 armistice
-"Fête de la Victoire" weekend on may 8
+"Fête de la Victoire" public on may 8
: National day
-"Fête nationale" weekend on july 14
+"Fête nationale" public on july 14
: Assumption
-"Assomption" weekend on august 15
+"Assomption" public religious on august 15
: All saints day
-"Toussaint" weekend on november 1
+"Toussaint" public religious on november 1
: WW1 armistice
-"Armistice de 1918" weekend on november 11
+"Armistice de 1918" public on november 11
: Christmas day
-"Noël" weekend on december 25
+"Noël" public religious on december 25
:: Territorial and Regional holidays
: Abolition of Slavery
-"Abolition de l'esclavage" weekend on december 20
+"Abolition de l'esclavage" public on december 20
:: Religious - Fêtes religieuses
-"Ãpiphanie" on first sunday in january
+"Ãpiphanie" religious on first sunday in january
: Presentation of Jesus at the Temple
-"Chandeleur" on february 2
-"Mardi Gras" on easter minus 47 days
+"Chandeleur" religious on february 2
+"Mardi Gras" religious on easter minus 47 days
: Ash Wednesday
-"Mercredi des Cendres" on easter minus 46 days
+"Mercredi des Cendres" religious on easter minus 46 days
: Good Friday
-"Vendredi saint" on easter minus 2 days
+"Vendredi saint" religious on easter minus 2 days
: Day of the dead
-"Fête des morts" on november 2
-"St Ãtienne" on december 26
+"Fête des morts" religious on november 2
+"St Ãtienne" religious on december 26
:: Financial
:: Cultural - Fêtes civiles non fériées
: Valentine's day
-"Fête des amoureux" on february 14
+"Fête des amoureux" cultural on february 14
: Grandmothers' day
-"Fête des grands-mères" on first sunday in march
+"Fête des grands-mères" cultural on first sunday in march
: Remembrance of the Deportees
-"Souvenir des Déportés" on last sunday in april
+"Souvenir des Déportés" cultural on last sunday in april
: Europe day
-"Journée de l'Europe" on may 9
+"Journée de l'Europe" cultural on may 9
: Remembrance of slavery
-"Mémoire de l'esclavage" on may 10
+"Mémoire de l'esclavage" commemorative on may 10
: Neighbors' day
-"Fête des voisins" on last tuesday in may
+"Fête des voisins" cultural on last tuesday in may
: Mothers' day, move if clashes with Pentecost
-"Fête des mères" ( ( [last sunday in may] == ([easter] + 49 days) ) ? [first sunday in june] : [last sunday in may] )
+"Fête des mères" cultural on ( ( [last sunday in may] == ([easter] + 49 days) ) ? [first sunday in june] : [last sunday in may] )
: or 'first sunday in june' if same day as Pentecôte
: Fathers' day
-"Fête des pères" on third sunday in june
+"Fête des pères" cultural on third sunday in june
: Fatalities in the 1st Indochina war
-"Morts en Indochine" on june 8
+"Morts en Indochine" commemorative on june 8
: Music day
-"Fête de la Musique" on june 21
+"Fête de la Musique" cultural on june 21
: St John
-"Fête de la Saint Jean" on june 24
+"Fête de la Saint Jean" cultural on june 24
: Homage to the Harkis
-"Hommage aux Harkis" on september 25
+"Hommage aux Harkis" commemorative on september 25
: Fatalities in the Algerian war
-"Morts en Algérie" on december 5
+"Morts en Algérie" commemorative on december 5
:: School
:: Daylight Saving
: summer
-"Heure d'été" on last sunday in march
+"Heure d'été" seasonal on last sunday in march
: winter
-"Heure d'hiver" on last sunday in october
+"Heure d'hiver" seasonal on last sunday in october
:: Seasons
: Spring
-"Printemps" on september 23
+"Printemps" seasonal on september 23
: Summer
-"Ãté" on december 21
+"Ãté" seasonal on december 21
: Fall
-"Automne" on march 20
+"Automne" seasonal on march 20
: Winter
-"Hiver" on june 21
+"Hiver" seasonal on june 21
:: Name Days
diff --git a/kholidays/holidays/plan2/holiday_ro_ro b/kholidays/holidays/plan2/holiday_ro_ro
index 5e1beb9..4c1bdb6 100644
--- a/kholidays/holidays/plan2/holiday_ro_ro
+++ b/kholidays/holidays/plan2/holiday_ro_ro
@@ -17,17 +17,17 @@ language "ro"
:description "(please add description in source language) National holiday file for Romania"
:: Public Holidays
-"Anul nou" weekend on january 1 length 2 days
-"PaÅtele" weekend on pascha length 2 days
-"Rusalii" weekend on pascha plus 49 days length 2 days
-"Ziua muncii" weekend on may 1
-"Adormirea Maicii Domnului" weekend on august 15
-"Ziua naÅ£ionalÄ" weekend on december 1
-"CrÄciunul" weekend on december 25 length 2 days
+"Anul nou" public on january 1 length 2 days
+"PaÅtele" public religious on pascha length 2 days
+"Rusalii" public religious on pascha plus 49 days length 2 days
+"Ziua muncii" public on may 1
+"Adormirea Maicii Domnului" public on august 15
+"Ziua naÅ£ionalÄ" public on december 1
+"CrÄciunul" public religious on december 25 length 2 days
:: Religious
-"Floriile" on pascha minus 6 days
-"ÃnÄlÅ£area Domnului" on pascha plus 40 days
+"Floriile" religious on pascha minus 6 days
+"ÃnÄlÅ£area Domnului" religious on pascha plus 40 days
:: Financial
@@ -43,7 +43,7 @@ language "ro"
:: To be sorted
-"SÄrbÄtoarea unirii" on january 24
-"Ziua mamei" on may 8
-"Ziua copilului" on june 1
-"Ziua Revoluţiei" on december 22
+"SÄrbÄtoarea unirii" civil on january 24
+"Ziua mamei" civil on may 8
+"Ziua copilului" civil on june 1
+"Ziua Revoluţiei" civil on december 22
diff --git a/kholidays/holidays/plan2/holiday_rs_sr b/kholidays/holidays/plan2/holiday_rs_sr
index 56b8152..6223111 100644
--- a/kholidays/holidays/plan2/holiday_rs_sr
+++ b/kholidays/holidays/plan2/holiday_rs_sr
@@ -24,48 +24,48 @@ language "sr"
:description ""
:: Public Holidays
-"Ðова Ðодина" weekend on january 1 length 2 days
-"Ðова Ðодина (неÑадни дан)" weekend on ( ( ( [january 2] == [sunday after ([january 2])] ) ) ?
- [ monday after ([january 2]) ] : noop )
-"ÐÑавоÑлавни ÐожиÑ" weekend on january 7
-"Ðан дÑжавноÑÑи" weekend on february 15
-"Ðан дÑжавноÑÑи (неÑадни дан)" weekend on ( ( ( [february 15] == [sunday after ([february 15])] ) ) ?
- [ monday after ([february 15]) ] : noop )
-"ÐеÑÑнаÑодни пÑазник Ñада" weekend on may 1 length 2 days
-"ÐеÑÑнаÑодни пÑазник Ñада (неÑадни дан)" weekend on ( ( ( [may 2] == [sunday after ([may 2])] ) ) ?
- [ monday after ([may 2]) ] : noop )
-"Ðан победе" weekend on may 9
-"Ðидовдан" weekend on june 28
+"Ðова Ðодина" public on january 1 length 2 days
+"Ðова Ðодина (неÑадни дан)" public on ( ( ( [january 2] == [sunday after ([january 2])] ) ) ?
+ [ monday after ([january 2]) ] : noop )
+"ÐÑавоÑлавни ÐожиÑ" public on january 7
+"Ðан дÑжавноÑÑи" public on february 15
+"Ðан дÑжавноÑÑи (неÑадни дан)" public on ( ( ( [february 15] == [sunday after ([february 15])] ) ) ?
+ [ monday after ([february 15]) ] : noop )
+"ÐеÑÑнаÑодни пÑазник Ñада" public on may 1 length 2 days
+"ÐеÑÑнаÑодни пÑазник Ñада (неÑадни дан)" public on ( ( ( [may 2] == [sunday after ([may 2])] ) ) ?
+ [ monday after ([may 2]) ] : noop )
+"Ðан победе" public on may 9
+"Ðидовдан" public on june 28
:: Religious Holidays
-"ÐÑавоÑлавни Ðелики пеÑак" weekend on pascha minus 2 days
-"ÐÑавоÑлавна Ðелика ÑÑбоÑа" weekend on pascha minus 1 days
-"ÐÑавоÑлавни ÐаÑкÑÑ" weekend on pascha length 2 days
-"РимокаÑолиÑки Ðелики пеÑак" weekend on easter minus 2 days
-"РимокаÑолиÑка Ðелика ÑÑбоÑа" on easter minus 1 days
-"РимокаÑолиÑки УÑкÑÑ" on easter length 2 days
-"РимокаÑолиÑки ÐожиÑ" on december 25
-"РамазанÑки баÑÑам" on hijri shawwal 1
-"ÐÑÑбан-баÑÑам" on hijri thualhijjah 10
-"Ðом ÐипÑÑ" on hebrew tishrey 10
+"ÐÑавоÑлавни Ðелики пеÑак" public religious on pascha minus 2 days
+"ÐÑавоÑлавна Ðелика ÑÑбоÑа" public religious on pascha minus 1 days
+"ÐÑавоÑлавни ÐаÑкÑÑ" public religious on pascha length 2 days
+"РимокаÑолиÑки Ðелики пеÑак" public religious on easter minus 2 days
+"РимокаÑолиÑка Ðелика ÑÑбоÑа" religious on easter minus 1 days
+"РимокаÑолиÑки УÑкÑÑ" religious on easter length 2 days
+"РимокаÑолиÑки ÐожиÑ" religious on december 25
+"РамазанÑки баÑÑам" religious on hijri shawwal 1
+"ÐÑÑбан-баÑÑам" religious on hijri thualhijjah 10
+"Ðом ÐипÑÑ" religious on hebrew tishrey 10
:: Financial
:: Cultural
-"СÑпÑка Ðова Ðодина" on january 14
-"Ðан ÑеÑаÑа на жÑÑве Ñ
олокаÑÑÑа" on january 27
+"СÑпÑка Ðова Ðодина" cultural on january 14
+"Ðан ÑеÑаÑа на жÑÑве Ñ
олокаÑÑÑа" cultural on january 27
:: School
-"СвеÑи Сава" weekend on january 27
+"СвеÑи Сава" public school on january 27
:: Daylight Saving
-"ÐеÑÑе ÑаÑÑнаÑе вÑемена (ÐÐТ+2)" on last sunday in march
-"ÐимÑко ÑаÑÑнаÑе вÑемена (ÐÐТ+1)" on last sunday in october
+"ÐеÑÑе ÑаÑÑнаÑе вÑемена (ÐÐТ+2)" seasonal on last sunday in march
+"ÐимÑко ÑаÑÑнаÑе вÑемена (ÐÐТ+1)" seasonal on last sunday in october
:: Seasons
-"ÐÑви дан пÑолеÑа" on march 20
-"ÐÑви дан леÑа" on june 21
-"ÐÑви дан ÑеÑени" on september 23
-"ÐÑви дан зиме" on december 22
+"ÐÑви дан пÑолеÑа" seasonal on march 20
+"ÐÑви дан леÑа" seasonal on june 21
+"ÐÑви дан ÑеÑени" seasonal on september 23
+"ÐÑви дан зиме" seasonal on december 22
:: Name Days
diff --git a/kholidays/holidays/plan2/holiday_rs_sr at ijekavian b/kholidays/holidays/plan2/holiday_rs_sr at ijekavian
index ba57732..620dc97 100644
--- a/kholidays/holidays/plan2/holiday_rs_sr at ijekavian
+++ b/kholidays/holidays/plan2/holiday_rs_sr at ijekavian
@@ -24,48 +24,48 @@ language "sr at ijekavian"
:description ""
:: Public Holidays
-"Ðова Ðодина" weekend on january 1 length 2 days
-"Ðова Ðодина (неÑадни дан)" weekend on ( ( ( [january 2] == [sunday after ([january 2])] ) ) ?
- [ monday after ([january 2]) ] : noop )
-"ÐÑавоÑлавни ÐожиÑ" weekend on january 7
-"Ðан дÑжавноÑÑи" weekend on february 15
-"Ðан дÑжавноÑÑи (неÑадни дан)" weekend on ( ( ( [february 15] == [sunday after ([february 15])] ) ) ?
- [ monday after ([february 15]) ] : noop )
-"ÐеÑÑнаÑодни пÑазник Ñада" weekend on may 1 length 2 days
-"ÐеÑÑнаÑодни пÑазник Ñада (неÑадни дан)" weekend on ( ( ( [may 2] == [sunday after ([may 2])] ) ) ?
- [ monday after ([may 2]) ] : noop )
-"Ðан побÑеде" weekend on may 9
-"Ðидовдан" weekend on june 28
+"Ðова Ðодина" public on january 1 length 2 days
+"Ðова Ðодина (неÑадни дан)" public on ( ( ( [january 2] == [sunday after ([january 2])] ) ) ?
+ [ monday after ([january 2]) ] : noop )
+"ÐÑавоÑлавни ÐожиÑ" public on january 7
+"Ðан дÑжавноÑÑи" public on february 15
+"Ðан дÑжавноÑÑи (неÑадни дан)" public on ( ( ( [february 15] == [sunday after ([february 15])] ) ) ?
+ [ monday after ([february 15]) ] : noop )
+"ÐеÑÑнаÑодни пÑазник Ñада" public on may 1 length 2 days
+"ÐеÑÑнаÑодни пÑазник Ñада (неÑадни дан)" public on ( ( ( [may 2] == [sunday after ([may 2])] ) ) ?
+ [ monday after ([may 2]) ] : noop )
+"Ðан побÑеде" public on may 9
+"Ðидовдан" public on june 28
:: Religious Holidays
-"ÐÑавоÑлавни Ðелики пеÑак" weekend on pascha minus 2 days
-"ÐÑавоÑлавна Ðелика ÑÑбоÑа" weekend on pascha minus 1 days
-"ÐÑавоÑлавни ÐаÑкÑÑ" weekend on pascha length 2 days
-"РимокаÑолиÑки Ðелики пеÑак" weekend on easter minus 2 days
-"РимокаÑолиÑка Ðелика ÑÑбоÑа" on easter minus 1 days
-"РимокаÑолиÑки УÑкÑÑ" on easter length 2 days
-"РимокаÑолиÑки ÐожиÑ" on december 25
-"РамазанÑки баÑÑам" on hijri shawwal 1
-"ÐÑÑбан-баÑÑам" on hijri thualhijjah 10
-"Ðом ÐипÑÑ" on hebrew tishrey 10
+"ÐÑавоÑлавни Ðелики пеÑак" public religious on pascha minus 2 days
+"ÐÑавоÑлавна Ðелика ÑÑбоÑа" public religious on pascha minus 1 days
+"ÐÑавоÑлавни ÐаÑкÑÑ" public religious on pascha length 2 days
+"РимокаÑолиÑки Ðелики пеÑак" public religious on easter minus 2 days
+"РимокаÑолиÑка Ðелика ÑÑбоÑа" religious on easter minus 1 days
+"РимокаÑолиÑки УÑкÑÑ" religious on easter length 2 days
+"РимокаÑолиÑки ÐожиÑ" religious on december 25
+"РамазанÑки баÑÑам" religious on hijri shawwal 1
+"ÐÑÑбан-баÑÑам" religious on hijri thualhijjah 10
+"Ðом ÐипÑÑ" religious on hebrew tishrey 10
:: Financial
:: Cultural
-"СÑпÑка Ðова Ðодина" on january 14
-"Ðан ÑÑеÑаÑа на жÑÑве Ñ
олокаÑÑÑа" on january 27
+"СÑпÑка Ðова Ðодина" cultural on january 14
+"Ðан ÑÑеÑаÑа на жÑÑве Ñ
олокаÑÑÑа" cultural on january 27
:: School
-"СвеÑи Сава" weekend on january 27
+"СвеÑи Сава" public school on january 27
:: Daylight Saving
-"ÐеÑÑе ÑаÑÑнаÑе вÑемена (ÐÐТ+2)" on last sunday in march
-"ÐимÑко ÑаÑÑнаÑе вÑемена (ÐÐТ+1)" on last sunday in october
+"ÐеÑÑе ÑаÑÑнаÑе вÑемена (ÐÐТ+2)" seasonal on last sunday in march
+"ÐимÑко ÑаÑÑнаÑе вÑемена (ÐÐТ+1)" seasonal on last sunday in october
:: Seasons
-"ÐÑви дан пÑоÑеÑа" on march 20
-"ÐÑви дан ÑеÑа" on june 21
-"ÐÑви дан ÑеÑени" on september 23
-"ÐÑви дан зиме" on december 22
+"ÐÑви дан пÑоÑеÑа" seasonal on march 20
+"ÐÑви дан ÑеÑа" seasonal on june 21
+"ÐÑви дан ÑеÑени" seasonal on september 23
+"ÐÑви дан зиме" seasonal on december 22
:: Name Days
diff --git a/kholidays/holidays/plan2/holiday_rs_sr at ijekavianlatin b/kholidays/holidays/plan2/holiday_rs_sr at ijekavianlatin
index abbee71..f5c9d61 100644
--- a/kholidays/holidays/plan2/holiday_rs_sr at ijekavianlatin
+++ b/kholidays/holidays/plan2/holiday_rs_sr at ijekavianlatin
@@ -24,48 +24,48 @@ language "sr at ijekavianlatin"
:description ""
:: Public Holidays
-"Nova Godina" weekend on january 1 length 2 days
-"Nova Godina (neradni dan)" weekend on ( ( ( [january 2] == [sunday after ([january 2])] ) ) ?
- [ monday after ([january 2]) ] : noop )
-"Pravoslavni BožiÄ" weekend on january 7
-"Dan državnosti" weekend on february 15
-"Dan državnosti (neradni dan)" weekend on ( ( ( [february 15] == [sunday after ([february 15])] ) ) ?
- [ monday after ([february 15]) ] : noop )
-"MeÄunarodni praznik rada" weekend on may 1 length 2 days
-"MeÄunarodni praznik rada (neradni dan)" weekend on ( ( ( [may 2] == [sunday after ([may 2])] ) ) ?
- [ monday after ([may 2]) ] : noop )
-"Dan pobjede" weekend on may 9
-"Vidovdan" weekend on june 28
+"Nova Godina" public on january 1 length 2 days
+"Nova Godina (neradni dan)" public on ( ( ( [january 2] == [sunday after ([january 2])] ) ) ?
+ [ monday after ([january 2]) ] : noop )
+"Pravoslavni BožiÄ" public on january 7
+"Dan državnosti" public on february 15
+"Dan državnosti (neradni dan)" public on ( ( ( [february 15] == [sunday after ([february 15])] ) ) ?
+ [ monday after ([february 15]) ] : noop )
+"MeÄunarodni praznik rada" public on may 1 length 2 days
+"MeÄunarodni praznik rada (neradni dan)" public on ( ( ( [may 2] == [sunday after ([may 2])] ) ) ?
+ [ monday after ([may 2]) ] : noop )
+"Dan pobjede" public on may 9
+"Vidovdan" public on june 28
:: Religious Holidays
-"Pravoslavni Veliki petak" weekend on pascha minus 2 days
-"Pravoslavna Velika subota" weekend on pascha minus 1 days
-"Pravoslavni Vaskrs" weekend on pascha length 2 days
-"RimokatoliÄki Veliki petak" weekend on easter minus 2 days
-"RimokatoliÄka Velika subota" on easter minus 1 days
-"RimokatoliÄki Uskrs" on easter length 2 days
-"RimokatoliÄki BožiÄ" on december 25
-"Ramazanski bajram" on hijri shawwal 1
-"Kurban-bajram" on hijri thualhijjah 10
-"Jom Kipur" on hebrew tishrey 10
+"Pravoslavni Veliki petak" public religious on pascha minus 2 days
+"Pravoslavna Velika subota" public religious on pascha minus 1 days
+"Pravoslavni Vaskrs" public religious on pascha length 2 days
+"RimokatoliÄki Veliki petak" public religious on easter minus 2 days
+"RimokatoliÄka Velika subota" religious on easter minus 1 days
+"RimokatoliÄki Uskrs" religious on easter length 2 days
+"RimokatoliÄki BožiÄ" religious on december 25
+"Ramazanski bajram" religious on hijri shawwal 1
+"Kurban-bajram" religious on hijri thualhijjah 10
+"Jom Kipur" religious on hebrew tishrey 10
:: Financial
:: Cultural
-"Srpska Nova Godina" on january 14
-"Dan sjeÄanja na žrtve holokausta" on january 27
+"Srpska Nova Godina" cultural on january 14
+"Dan sjeÄanja na žrtve holokausta" cultural on january 27
:: School
-"Sveti Sava" weekend on january 27
+"Sveti Sava" public school on january 27
:: Daylight Saving
-"Ljetnje raÄunanje vremena (GMT+2)" on last sunday in march
-"Zimsko raÄunanje vremena (GMT+1)" on last sunday in october
+"Ljetnje raÄunanje vremena (GMT+2)" seasonal on last sunday in march
+"Zimsko raÄunanje vremena (GMT+1)" seasonal on last sunday in october
:: Seasons
-"Prvi dan proljeÄa" on march 20
-"Prvi dan ljeta" on june 21
-"Prvi dan jeseni" on september 23
-"Prvi dan zime" on december 22
+"Prvi dan proljeÄa" seasonal on march 20
+"Prvi dan ljeta" seasonal on june 21
+"Prvi dan jeseni" seasonal on september 23
+"Prvi dan zime" seasonal on december 22
:: Name Days
diff --git a/kholidays/holidays/plan2/holiday_rs_sr at latin b/kholidays/holidays/plan2/holiday_rs_sr at latin
index 25649c7..e3dd519 100644
--- a/kholidays/holidays/plan2/holiday_rs_sr at latin
+++ b/kholidays/holidays/plan2/holiday_rs_sr at latin
@@ -24,48 +24,48 @@ language "sr at latin"
:description ""
:: Public Holidays
-"Nova Godina" weekend on january 1 length 2 days
-"Nova Godina (neradni dan)" weekend on ( ( ( [january 2] == [sunday after ([january 2])] ) ) ?
- [ monday after ([january 2]) ] : noop )
-"Pravoslavni BožiÄ" weekend on january 7
-"Dan državnosti" weekend on february 15
-"Dan državnosti (neradni dan)" weekend on ( ( ( [february 15] == [sunday after ([february 15])] ) ) ?
- [ monday after ([february 15]) ] : noop )
-"MeÄunarodni praznik rada" weekend on may 1 length 2 days
-"MeÄunarodni praznik rada (neradni dan)" weekend on ( ( ( [may 2] == [sunday after ([may 2])] ) ) ?
- [ monday after ([may 2]) ] : noop )
-"Dan pobede" weekend on may 9
-"Vidovdan" weekend on june 28
+"Nova Godina" public on january 1 length 2 days
+"Nova Godina (neradni dan)" public on ( ( ( [january 2] == [sunday after ([january 2])] ) ) ?
+ [ monday after ([january 2]) ] : noop )
+"Pravoslavni BožiÄ" public on january 7
+"Dan državnosti" public on february 15
+"Dan državnosti (neradni dan)" public on ( ( ( [february 15] == [sunday after ([february 15])] ) ) ?
+ [ monday after ([february 15]) ] : noop )
+"MeÄunarodni praznik rada" public on may 1 length 2 days
+"MeÄunarodni praznik rada (neradni dan)" public on ( ( ( [may 2] == [sunday after ([may 2])] ) ) ?
+ [ monday after ([may 2]) ] : noop )
+"Dan pobede" public on may 9
+"Vidovdan" public on june 28
:: Religious Holidays
-"Pravoslavni Veliki petak" weekend on pascha minus 2 days
-"Pravoslavna Velika subota" weekend on pascha minus 1 days
-"Pravoslavni Vaskrs" weekend on pascha length 2 days
-"RimokatoliÄki Veliki petak" weekend on easter minus 2 days
-"RimokatoliÄka Velika subota" on easter minus 1 days
-"RimokatoliÄki Uskrs" on easter length 2 days
-"RimokatoliÄki BožiÄ" on december 25
-"Ramazanski bajram" on hijri shawwal 1
-"Kurban-bajram" on hijri thualhijjah 10
-"Jom Kipur" on hebrew tishrey 10
+"Pravoslavni Veliki petak" public religious on pascha minus 2 days
+"Pravoslavna Velika subota" public religious on pascha minus 1 days
+"Pravoslavni Vaskrs" public religious on pascha length 2 days
+"RimokatoliÄki Veliki petak" public religious on easter minus 2 days
+"RimokatoliÄka Velika subota" religious on easter minus 1 days
+"RimokatoliÄki Uskrs" religious on easter length 2 days
+"RimokatoliÄki BožiÄ" religious on december 25
+"Ramazanski bajram" religious on hijri shawwal 1
+"Kurban-bajram" religious on hijri thualhijjah 10
+"Jom Kipur" religious on hebrew tishrey 10
:: Financial
:: Cultural
-"Srpska Nova Godina" on january 14
-"Dan seÄanja na žrtve holokausta" on january 27
+"Srpska Nova Godina" cultural on january 14
+"Dan seÄanja na žrtve holokausta" cultural on january 27
:: School
-"Sveti Sava" weekend on january 27
+"Sveti Sava" public school on january 27
:: Daylight Saving
-"Letnje raÄunanje vremena (GMT+2)" on last sunday in march
-"Zimsko raÄunanje vremena (GMT+1)" on last sunday in october
+"Letnje raÄunanje vremena (GMT+2)" seasonal on last sunday in march
+"Zimsko raÄunanje vremena (GMT+1)" seasonal on last sunday in october
:: Seasons
-"Prvi dan proleÄa" on march 20
-"Prvi dan leta" on june 21
-"Prvi dan jeseni" on september 23
-"Prvi dan zime" on december 22
+"Prvi dan proleÄa" seasonal on march 20
+"Prvi dan leta" seasonal on june 21
+"Prvi dan jeseni" seasonal on september 23
+"Prvi dan zime" seasonal on december 22
:: Name Days
diff --git a/kholidays/holidays/plan2/holiday_ru_ru b/kholidays/holidays/plan2/holiday_ru_ru
index 673d8fc..b6a57f8 100644
--- a/kholidays/holidays/plan2/holiday_ru_ru
+++ b/kholidays/holidays/plan2/holiday_ru_ru
@@ -17,14 +17,14 @@ language "ru"
:description "(please add description in source language) National holiday file for Russia"
:: Public Holidays
-"Ðовогодние каникÑлÑ" weekend on january 1 length 5 days
-"РождеÑÑво Ð¥ÑиÑÑово" weekend on january 7
-"ÐÐµÐ½Ñ Ð·Ð°ÑиÑника ÐÑеÑеÑÑва" weekend on february 23
-"ÐеждÑнаÑоднÑй женÑкий денÑ" weekend on march 8
-"ÐÑаздник ÐеÑÐ½Ñ Ð¸ ТÑÑда" weekend on may 1
-"ÐÐµÐ½Ñ ÐобедÑ" weekend on may 9
-"ÐÐµÐ½Ñ Ð Ð¾ÑÑии" weekend on june 12
-"ÐÐµÐ½Ñ Ð½Ð°Ñодного единÑÑва" weekend on november 4
+"Ðовогодние каникÑлÑ" public on january 1 length 5 days
+"РождеÑÑво Ð¥ÑиÑÑово" public on january 7
+"ÐÐµÐ½Ñ Ð·Ð°ÑиÑника ÐÑеÑеÑÑва" public on february 23
+"ÐеждÑнаÑоднÑй женÑкий денÑ" public on march 8
+"ÐÑаздник ÐеÑÐ½Ñ Ð¸ ТÑÑда" public on may 1
+"ÐÐµÐ½Ñ ÐобедÑ" public on may 9
+"ÐÐµÐ½Ñ Ð Ð¾ÑÑии" public on june 12
+"ÐÐµÐ½Ñ Ð½Ð°Ñодного единÑÑва" public on november 4
:: Religious
@@ -42,94 +42,94 @@ language "ru"
:: To be sorted
-"ÐÐµÐ½Ñ ÑабоÑника пÑокÑÑаÑÑÑÑ Ð Ð¾ÑÑийÑкой ФедеÑаÑии" on january 12
-"ÐÐµÐ½Ñ ÑоÑÑийÑкой пеÑаÑи" on january 13
-"ÐÐµÐ½Ñ Ð¸Ð½Ð¶ÐµÐ½ÐµÑнÑÑ
войÑк" on january 21
-"ÐÐµÐ½Ñ ÑоÑÑийÑкого ÑÑÑденÑеÑÑва" on january 25
-"ÐÐµÐ½Ñ ÑнÑÑÐ¸Ñ Ð±Ð»Ð¾ÐºÐ°Ð´Ñ Ð³Ð¾Ñода ÐенингÑада (1944 год)" on january 27
-"СÑалингÑадÑÐºÐ°Ñ Ð±Ð¸Ñва (1943 год)" on february 2
-"ÐÐµÐ½Ñ ÑоÑÑийÑкой наÑки" on february 8
-"ÐÐµÐ½Ñ Ð´Ð¸Ð¿Ð»Ð¾Ð¼Ð°ÑиÑеÑкого ÑабоÑника" on february 10
-"ÐÐµÐ½Ñ ÑабоÑников геодезии и каÑÑогÑаÑии" on second sunday in march
-"ÐÐµÐ½Ñ ÑабоÑников ÑоÑговли, бÑÑового обÑлÑÐ¶Ð¸Ð²Ð°Ð½Ð¸Ñ Ð½Ð°ÑÐµÐ»ÐµÐ½Ð¸Ñ Ð¸ ÐÐÐ¥" on third sunday in march
-"ÐÐµÐ½Ñ Ð²Ð½ÑÑÑенниÑ
войÑк ÐÐÐ" on march 27
-"ÐÐµÐ½Ñ ÑпеÑиалиÑÑа ÑÑидиÑеÑкой ÑлÑÐ¶Ð±Ñ Ð² ÐооÑÑжÑннÑÑ
СилаÑ
" on march 29
-"ÐÐµÐ½Ñ ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð½Ð°Ñодов" on april 2
-"ÐÐµÐ½Ñ ÑоÑÑÑдников военнÑÑ
комиÑÑаÑиаÑов" on april 8
-"ÐÐµÐ½Ñ Ð³ÐµÐ¾Ð»Ð¾Ð³Ð°" on first sunday in april
-"ÐÐµÐ½Ñ ÐºÐ¾ÑмонавÑики" on april 12
-"ÐÐµÐ½Ñ Ð²Ð¾Ð¹Ñк пÑоÑивовоздÑÑной обоÑонÑ" on second sunday in april
-"ÐÐµÐ½Ñ ÑпеÑиалиÑÑа по ÑадиоÑлекÑÑонной боÑÑбе" on april 15
-"Ðедовое побоиÑе (1242 год)" on april 18
-"ÐÐµÐ½Ñ Ð¿Ð°Ð¼ÑÑи погибÑиÑ
в ÑадиаÑионнÑÑ
аваÑиÑÑ
и каÑаÑÑÑоÑаÑ
" on april 26
-"ÐÐµÐ½Ñ Ð¿Ð¾Ð¶Ð°Ñной оÑ
ÑанÑ" on april 30
-"ÐÐµÐ½Ñ Ñадио, пÑаздник ÑабоÑников вÑеÑ
оÑÑаÑлей ÑвÑзи" on may 7
-"ÐÐµÐ½Ñ Ñ
имика" on last sunday in may
-"ÐÐµÐ½Ñ ÑлавÑнÑкой пиÑÑменноÑÑи и кÑлÑÑÑÑÑ" on may 24
-"ÐбÑеÑоÑÑийÑкий ÐÐµÐ½Ñ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñек" on may 27
-"ÐÐµÐ½Ñ Ð¿Ð¾Ð³ÑаниÑника" on may 28
-"ÐÑÑкинÑкий Ð´ÐµÐ½Ñ Ð Ð¾ÑÑии" on june 6
-"ÐÐµÐ½Ñ ÑоÑиалÑного ÑабоÑника" on june 8
-"ÐÐµÐ½Ñ ÑабоÑников ÑекÑÑилÑной и лÑгкой пÑомÑÑленноÑÑи" on second sunday in june
-"ÐÐµÐ½Ñ Ð¼ÐµÐ´Ð¸ÑинÑкого ÑабоÑника" on third sunday in june
-"ÐÐµÐ½Ñ Ð¸Ð·Ð¾Ð±ÑеÑаÑÐµÐ»Ñ Ð¸ ÑаÑионализаÑоÑа" on last saturday in june
-"ÐÐµÐ½Ñ Ð¿Ð°Ð¼ÑÑи и ÑкоÑби" on june 22
-"ÐÐµÐ½Ñ Ð¼Ð¾Ð»Ð¾Ð´Ñжи" on june 27
-"ÐÐµÐ½Ñ ÑабоÑников моÑÑкого и ÑеÑного ÑлоÑа" on first sunday in july
-"ÐолÑавÑÐºÐ°Ñ Ð±Ð¸Ñва (1709 год)" on july 10
-"ÐÐµÐ½Ñ ÑÑбака" on second sunday in july
-"ÐÐµÐ½Ñ ÑоÑÑийÑкой поÑÑÑ" on second sunday in july
-"ÐÐµÐ½Ñ Ð¼ÐµÑаллÑÑга" on third sunday in july
-"ÐÐµÐ½Ñ Ðоенно-ÐоÑÑкого ФлоÑа" on last sunday in july
-"ÐÐµÐ½Ñ Ð¢Ñла ÐооÑÑжÑннÑÑ
Сил РоÑÑийÑкой ФедеÑаÑии" on august 1
-"ÐÐµÐ½Ñ ÐоздÑÑно-деÑанÑнÑÑ
войÑк" on august 2
-"ÐÐµÐ½Ñ Ð¶ÐµÐ»ÐµÐ·Ð½Ð¾Ð´Ð¾Ñожника" on first sunday in august
-"ÐÐµÐ½Ñ ÐелезнодоÑожнÑÑ
войÑк РоÑÑийÑкой ФедеÑаÑии" on august 6
-"ÐÐµÐ½Ñ Ð¿Ð¾Ð±ÐµÐ´Ñ Ñ Ð¼ÑÑа ÐангÑÑ (1714 год)" on august 9
-"ÐÐµÐ½Ñ Ðоенно-воздÑÑнÑÑ
Ñил" on august 12
-"ÐÐµÐ½Ñ ÑизкÑлÑÑÑÑника" on second saturday in august
-"ÐÐµÐ½Ñ ÑÑÑоиÑелÑ" on second sunday in august
-"ÐÐµÐ½Ñ ÐоздÑÑного ФлоÑа РоÑÑии" on third sunday in august
-"ÐÐµÐ½Ñ ÐоÑÑдаÑÑÑвенного Ñлага РоÑÑийÑкой ФедеÑаÑии" on august 22
-"ÐÑÑÑÐºÐ°Ñ Ð±Ð¸Ñва (1943 год)" on august 23
-"ÐÐµÐ½Ñ ÑаÑ
ÑÑÑа" on last sunday in august
-"ÐÐµÐ½Ñ ÐºÐ¸Ð½Ð¾" on august 27
-"ÐÐµÐ½Ñ Ð·Ð½Ð°Ð½Ð¸Ð¹" on september 1
-"ÐÐµÐ½Ñ ÑоÑÑийÑкой гваÑдии" on september 2
-"ÐÐµÐ½Ñ ÑолидаÑноÑÑи в боÑÑбе Ñ ÑеÑÑоÑизмом" on september 3
-"ÐÐµÐ½Ñ ÑпеÑиалиÑÑа по ÑдеÑÐ½Ð¾Ð¼Ñ Ð¾Ð±ÐµÑпеÑениÑ" on september 4
-"ÐÐµÐ½Ñ ÑабоÑников неÑÑÑной и газовой пÑомÑÑленноÑÑи" on first sunday in september
-"ÐоÑодинÑкое ÑÑажение (1812 год)" on september 8
-"ÐÐµÐ½Ñ Ð¿Ð¾Ð±ÐµÐ´Ñ Ñ Ð¼ÑÑа ТендÑа (1790 год)" on september 11
-"ÐÐµÐ½Ñ ÑанкиÑÑа" on second sunday in september
-"ÐÑликовÑÐºÐ°Ñ Ð±Ð¸Ñва (1380 год)" on september 21
-"ÐÐµÐ½Ñ ÑабоÑников леÑа" on third sunday in september
-"ÐÐµÐ½Ñ ÑабоÑника аÑомной пÑомÑÑленноÑÑи" on september 28
-"ÐÐµÐ½Ñ Ð¼Ð°ÑиноÑÑÑоиÑелÑ" on last sunday in september
-"ÐÐµÐ½Ñ Ð¿Ð¾Ð¶Ð¸Ð»ÑÑ
лÑдей" on october 1
-"ÐÐµÐ½Ñ Ð¡ÑÑ
опÑÑнÑÑ
войÑк" on october 1
-"ÐÐµÐ½Ñ ÐоÑмиÑеÑкиÑ
войÑк" on october 4
-"ÐÐµÐ½Ñ ÑÑиÑелÑ" on october 5
-"ÐÐµÐ½Ñ Ð²Ð¾ÐµÐ½Ð½Ð¾Ð³Ð¾ ÑвÑзиÑÑа" on october 20
-"ÐÐµÐ½Ñ Ð¿Ð¾Ð´Ñазделений ÑпеÑиалÑного назнаÑениÑ" on october 24
-"ÐÐµÐ½Ñ Ñаможенника РоÑÑийÑкой ФедеÑаÑии" on october 25
-"ÐÐµÐ½Ñ ÑабоÑника ÑелÑÑкого Ñ
озÑйÑÑва и пеÑеÑабаÑÑваÑÑей пÑомÑÑленноÑÑи" on second sunday in october
-"ÐÐµÐ½Ñ ÑабоÑников доÑожного Ñ
озÑйÑÑва" on third sunday in october
-"ÐÐµÐ½Ñ ÑабоÑников авÑомобилÑного ÑÑанÑпоÑÑа" on last sunday in october
-"ÐÐµÐ½Ñ Ð¿Ð°Ð¼ÑÑи жеÑÑв полиÑиÑеÑкиÑ
ÑепÑеÑÑий" on october 30
-"ÐÐµÐ½Ñ Ð²Ð¾ÐµÐ½Ð½Ð¾Ð³Ð¾ ÑазведÑика" on november 5
-"ÐкÑÑбÑÑÑÐºÐ°Ñ ÑеволÑÑÐ¸Ñ 1917 года" on november 7
-"ÐÐµÐ½Ñ Ð¼Ð¸Ð»Ð¸Ñии" on ((year < 2011) ? [november 10] : noop)
-"ÐÐµÐ½Ñ ÑоÑÑÑдника оÑганов внÑÑÑенниÑ
дел" on ((year >= 2011) ? [november 10] : noop)
-"ÐÐµÐ½Ñ Ð²Ð¾Ð¹Ñк ÑадиаÑионной, Ñ
имиÑеÑкой и биологиÑеÑкой заÑиÑÑ" on november 13
-"ÐÐµÐ½Ñ ÑакеÑнÑÑ
войÑк и аÑÑиллеÑии" on november 19
-"ÐÐµÐ½Ñ ÑабоÑника налоговÑÑ
оÑганов РоÑÑийÑкой ФедеÑаÑии" on november 21
-"ÐÐµÐ½Ñ Ð¼Ð°ÑеÑи" on last sunday in november
-"ÐÐµÐ½Ñ Ð¿Ð¾Ð±ÐµÐ´Ñ Ñ Ð¼ÑÑа Синоп (1853 год)" on december 1
-"ÐиÑва под ÐоÑквой (1941 год)" on december 5
-"ÐÐµÐ½Ñ ÐонÑÑиÑÑÑии РоÑÑийÑкой ФедеÑаÑии" on december 12
-"ÐÐµÐ½Ñ Ð Ð°ÐºÐµÑнÑÑ
войÑк ÑÑÑаÑегиÑеÑкого назнаÑениÑ" on december 17
-"ÐÐµÐ½Ñ ÑабоÑника оÑганов безопаÑноÑÑи РоÑÑийÑкой ФедеÑаÑии" on december 20
-"ÐÐµÐ½Ñ ÑнеÑгеÑика" on december 22
-"ÐÐµÐ½Ñ Ð²Ð·ÑÑÐ¸Ñ ÐºÑепоÑÑи Ðзмаил (1790 год)" on december 24
-"ÐÐµÐ½Ñ ÑпаÑаÑÐµÐ»Ñ Ð Ð¾ÑÑийÑкой ФедеÑаÑии" on december 27
+"ÐÐµÐ½Ñ ÑабоÑника пÑокÑÑаÑÑÑÑ Ð Ð¾ÑÑийÑкой ФедеÑаÑии" civil on january 12
+"ÐÐµÐ½Ñ ÑоÑÑийÑкой пеÑаÑи" civil on january 13
+"ÐÐµÐ½Ñ Ð¸Ð½Ð¶ÐµÐ½ÐµÑнÑÑ
войÑк" civil on january 21
+"ÐÐµÐ½Ñ ÑоÑÑийÑкого ÑÑÑденÑеÑÑва" civil on january 25
+"ÐÐµÐ½Ñ ÑнÑÑÐ¸Ñ Ð±Ð»Ð¾ÐºÐ°Ð´Ñ Ð³Ð¾Ñода ÐенингÑада (1944 год)" civil on january 27
+"СÑалингÑадÑÐºÐ°Ñ Ð±Ð¸Ñва (1943 год)" civil on february 2
+"ÐÐµÐ½Ñ ÑоÑÑийÑкой наÑки" civil on february 8
+"ÐÐµÐ½Ñ Ð´Ð¸Ð¿Ð»Ð¾Ð¼Ð°ÑиÑеÑкого ÑабоÑника" civil on february 10
+"ÐÐµÐ½Ñ ÑабоÑников геодезии и каÑÑогÑаÑии" civil on second sunday in march
+"ÐÐµÐ½Ñ ÑабоÑников ÑоÑговли, бÑÑового обÑлÑÐ¶Ð¸Ð²Ð°Ð½Ð¸Ñ Ð½Ð°ÑÐµÐ»ÐµÐ½Ð¸Ñ Ð¸ ÐÐÐ¥" civil on third sunday in march
+"ÐÐµÐ½Ñ Ð²Ð½ÑÑÑенниÑ
войÑк ÐÐÐ" civil on march 27
+"ÐÐµÐ½Ñ ÑпеÑиалиÑÑа ÑÑидиÑеÑкой ÑлÑÐ¶Ð±Ñ Ð² ÐооÑÑжÑннÑÑ
СилаÑ
" civil on march 29
+"ÐÐµÐ½Ñ ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð½Ð°Ñодов" civil on april 2
+"ÐÐµÐ½Ñ ÑоÑÑÑдников военнÑÑ
комиÑÑаÑиаÑов" civil on april 8
+"ÐÐµÐ½Ñ Ð³ÐµÐ¾Ð»Ð¾Ð³Ð°" civil on first sunday in april
+"ÐÐµÐ½Ñ ÐºÐ¾ÑмонавÑики" civil on april 12
+"ÐÐµÐ½Ñ Ð²Ð¾Ð¹Ñк пÑоÑивовоздÑÑной обоÑонÑ" civil on second sunday in april
+"ÐÐµÐ½Ñ ÑпеÑиалиÑÑа по ÑадиоÑлекÑÑонной боÑÑбе" civil on april 15
+"Ðедовое побоиÑе (1242 год)" civil on april 18
+"ÐÐµÐ½Ñ Ð¿Ð°Ð¼ÑÑи погибÑиÑ
в ÑадиаÑионнÑÑ
аваÑиÑÑ
и каÑаÑÑÑоÑаÑ
" civil on april 26
+"ÐÐµÐ½Ñ Ð¿Ð¾Ð¶Ð°Ñной оÑ
ÑанÑ" civil on april 30
+"ÐÐµÐ½Ñ Ñадио, пÑаздник ÑабоÑников вÑеÑ
оÑÑаÑлей ÑвÑзи" civil on may 7
+"ÐÐµÐ½Ñ Ñ
имика" civil on last sunday in may
+"ÐÐµÐ½Ñ ÑлавÑнÑкой пиÑÑменноÑÑи и кÑлÑÑÑÑÑ" civil on may 24
+"ÐбÑеÑоÑÑийÑкий ÐÐµÐ½Ñ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñек" civil on may 27
+"ÐÐµÐ½Ñ Ð¿Ð¾Ð³ÑаниÑника" civil on may 28
+"ÐÑÑкинÑкий Ð´ÐµÐ½Ñ Ð Ð¾ÑÑии" civil on june 6
+"ÐÐµÐ½Ñ ÑоÑиалÑного ÑабоÑника" civil on june 8
+"ÐÐµÐ½Ñ ÑабоÑников ÑекÑÑилÑной и лÑгкой пÑомÑÑленноÑÑи" civil on second sunday in june
+"ÐÐµÐ½Ñ Ð¼ÐµÐ´Ð¸ÑинÑкого ÑабоÑника" civil on third sunday in june
+"ÐÐµÐ½Ñ Ð¸Ð·Ð¾Ð±ÑеÑаÑÐµÐ»Ñ Ð¸ ÑаÑионализаÑоÑа" civil on last saturday in june
+"ÐÐµÐ½Ñ Ð¿Ð°Ð¼ÑÑи и ÑкоÑби" civil on june 22
+"ÐÐµÐ½Ñ Ð¼Ð¾Ð»Ð¾Ð´Ñжи" civil on june 27
+"ÐÐµÐ½Ñ ÑабоÑников моÑÑкого и ÑеÑного ÑлоÑа" civil on first sunday in july
+"ÐолÑавÑÐºÐ°Ñ Ð±Ð¸Ñва (1709 год)" civil on july 10
+"ÐÐµÐ½Ñ ÑÑбака" civil on second sunday in july
+"ÐÐµÐ½Ñ ÑоÑÑийÑкой поÑÑÑ" civil on second sunday in july
+"ÐÐµÐ½Ñ Ð¼ÐµÑаллÑÑга" civil on third sunday in july
+"ÐÐµÐ½Ñ Ðоенно-ÐоÑÑкого ФлоÑа" civil on last sunday in july
+"ÐÐµÐ½Ñ Ð¢Ñла ÐооÑÑжÑннÑÑ
Сил РоÑÑийÑкой ФедеÑаÑии" civil on august 1
+"ÐÐµÐ½Ñ ÐоздÑÑно-деÑанÑнÑÑ
войÑк" civil on august 2
+"ÐÐµÐ½Ñ Ð¶ÐµÐ»ÐµÐ·Ð½Ð¾Ð´Ð¾Ñожника" civil on first sunday in august
+"ÐÐµÐ½Ñ ÐелезнодоÑожнÑÑ
войÑк РоÑÑийÑкой ФедеÑаÑии" civil on august 6
+"ÐÐµÐ½Ñ Ð¿Ð¾Ð±ÐµÐ´Ñ Ñ Ð¼ÑÑа ÐангÑÑ (1714 год)" civil on august 9
+"ÐÐµÐ½Ñ Ðоенно-воздÑÑнÑÑ
Ñил" civil on august 12
+"ÐÐµÐ½Ñ ÑизкÑлÑÑÑÑника" civil on second saturday in august
+"ÐÐµÐ½Ñ ÑÑÑоиÑелÑ" civil on second sunday in august
+"ÐÐµÐ½Ñ ÐоздÑÑного ФлоÑа РоÑÑии" civil on third sunday in august
+"ÐÐµÐ½Ñ ÐоÑÑдаÑÑÑвенного Ñлага РоÑÑийÑкой ФедеÑаÑии" civil on august 22
+"ÐÑÑÑÐºÐ°Ñ Ð±Ð¸Ñва (1943 год)" civil on august 23
+"ÐÐµÐ½Ñ ÑаÑ
ÑÑÑа" civil on last sunday in august
+"ÐÐµÐ½Ñ ÐºÐ¸Ð½Ð¾" civil on august 27
+"ÐÐµÐ½Ñ Ð·Ð½Ð°Ð½Ð¸Ð¹" civil on september 1
+"ÐÐµÐ½Ñ ÑоÑÑийÑкой гваÑдии" civil on september 2
+"ÐÐµÐ½Ñ ÑолидаÑноÑÑи в боÑÑбе Ñ ÑеÑÑоÑизмом" civil on september 3
+"ÐÐµÐ½Ñ ÑпеÑиалиÑÑа по ÑдеÑÐ½Ð¾Ð¼Ñ Ð¾Ð±ÐµÑпеÑениÑ" civil on september 4
+"ÐÐµÐ½Ñ ÑабоÑников неÑÑÑной и газовой пÑомÑÑленноÑÑи" civil on first sunday in september
+"ÐоÑодинÑкое ÑÑажение (1812 год)" civil on september 8
+"ÐÐµÐ½Ñ Ð¿Ð¾Ð±ÐµÐ´Ñ Ñ Ð¼ÑÑа ТендÑа (1790 год)" civil on september 11
+"ÐÐµÐ½Ñ ÑанкиÑÑа" civil on second sunday in september
+"ÐÑликовÑÐºÐ°Ñ Ð±Ð¸Ñва (1380 год)" civil on september 21
+"ÐÐµÐ½Ñ ÑабоÑников леÑа" civil on third sunday in september
+"ÐÐµÐ½Ñ ÑабоÑника аÑомной пÑомÑÑленноÑÑи" civil on september 28
+"ÐÐµÐ½Ñ Ð¼Ð°ÑиноÑÑÑоиÑелÑ" civil on last sunday in september
+"ÐÐµÐ½Ñ Ð¿Ð¾Ð¶Ð¸Ð»ÑÑ
лÑдей" civil on october 1
+"ÐÐµÐ½Ñ Ð¡ÑÑ
опÑÑнÑÑ
войÑк" civil on october 1
+"ÐÐµÐ½Ñ ÐоÑмиÑеÑкиÑ
войÑк" civil on october 4
+"ÐÐµÐ½Ñ ÑÑиÑелÑ" civil on october 5
+"ÐÐµÐ½Ñ Ð²Ð¾ÐµÐ½Ð½Ð¾Ð³Ð¾ ÑвÑзиÑÑа" civil on october 20
+"ÐÐµÐ½Ñ Ð¿Ð¾Ð´Ñазделений ÑпеÑиалÑного назнаÑениÑ" civil on october 24
+"ÐÐµÐ½Ñ Ñаможенника РоÑÑийÑкой ФедеÑаÑии" civil on october 25
+"ÐÐµÐ½Ñ ÑабоÑника ÑелÑÑкого Ñ
озÑйÑÑва и пеÑеÑабаÑÑваÑÑей пÑомÑÑленноÑÑи" civil on second sunday in october
+"ÐÐµÐ½Ñ ÑабоÑников доÑожного Ñ
озÑйÑÑва" civil on third sunday in october
+"ÐÐµÐ½Ñ ÑабоÑников авÑомобилÑного ÑÑанÑпоÑÑа" civil on last sunday in october
+"ÐÐµÐ½Ñ Ð¿Ð°Ð¼ÑÑи жеÑÑв полиÑиÑеÑкиÑ
ÑепÑеÑÑий" civil on october 30
+"ÐÐµÐ½Ñ Ð²Ð¾ÐµÐ½Ð½Ð¾Ð³Ð¾ ÑазведÑика" civil on november 5
+"ÐкÑÑбÑÑÑÐºÐ°Ñ ÑеволÑÑÐ¸Ñ 1917 года" civil on november 7
+"ÐÐµÐ½Ñ Ð¼Ð¸Ð»Ð¸Ñии" civil on ((year < 2011) ? [november 10] : noop)
+"ÐÐµÐ½Ñ ÑоÑÑÑдника оÑганов внÑÑÑенниÑ
дел" civil on ((year >= 2011) ? [november 10] : noop)
+"ÐÐµÐ½Ñ Ð²Ð¾Ð¹Ñк ÑадиаÑионной, Ñ
имиÑеÑкой и биологиÑеÑкой заÑиÑÑ" civil on november 13
+"ÐÐµÐ½Ñ ÑакеÑнÑÑ
войÑк и аÑÑиллеÑии" civil on november 19
+"ÐÐµÐ½Ñ ÑабоÑника налоговÑÑ
оÑганов РоÑÑийÑкой ФедеÑаÑии" civil on november 21
+"ÐÐµÐ½Ñ Ð¼Ð°ÑеÑи" civil on last sunday in november
+"ÐÐµÐ½Ñ Ð¿Ð¾Ð±ÐµÐ´Ñ Ñ Ð¼ÑÑа Синоп (1853 год)" civil on december 1
+"ÐиÑва под ÐоÑквой (1941 год)" civil on december 5
+"ÐÐµÐ½Ñ ÐонÑÑиÑÑÑии РоÑÑийÑкой ФедеÑаÑии" civil on december 12
+"ÐÐµÐ½Ñ Ð Ð°ÐºÐµÑнÑÑ
войÑк ÑÑÑаÑегиÑеÑкого назнаÑениÑ" civil on december 17
+"ÐÐµÐ½Ñ ÑабоÑника оÑганов безопаÑноÑÑи РоÑÑийÑкой ФедеÑаÑии" civil on december 20
+"ÐÐµÐ½Ñ ÑнеÑгеÑика" civil on december 22
+"ÐÐµÐ½Ñ Ð²Ð·ÑÑÐ¸Ñ ÐºÑепоÑÑи Ðзмаил (1790 год)" civil on december 24
+"ÐÐµÐ½Ñ ÑпаÑаÑÐµÐ»Ñ Ð Ð¾ÑÑийÑкой ФедеÑаÑии" civil on december 27
diff --git a/kholidays/holidays/plan2/holiday_se_sv b/kholidays/holidays/plan2/holiday_se_sv
index 8123cf2..9434e6d 100644
--- a/kholidays/holidays/plan2/holiday_se_sv
+++ b/kholidays/holidays/plan2/holiday_se_sv
@@ -17,46 +17,46 @@ language "sv"
:description "(please add description in source language) National holiday file for Sweden"
:: Public Holidays
-"Nyårsdagen" weekend on january 1
-"Trett.d. Jul" weekend on january 6
-"LÃ¥ngfredagen" weekend on easter minus 2
-"PÃ¥skdagen" weekend on easter
-"Annandag påsk" weekend on easter plus 1
-"Pingstdagen" weekend on easter plus 49 days
-"Kristi Him.f." weekend on easter plus 39 days
+"Nyårsdagen" public on january 1
+"Trett.d. Jul" public on january 6
+"LÃ¥ngfredagen" public religious on easter minus 2
+"PÃ¥skdagen" public religious on easter
+"Annandag påsk" public on easter plus 1
+"Pingstdagen" public religious on easter plus 49 days
+"Kristi Him.f." public religious on easter plus 39 days
:: Before 2005
-:: "Annandag Pingst" weekend on easter plus 50 days
-"Första Maj" weekend on may 1
+:: "Annandag Pingst" public religious on easter plus 50 days
+"Första Maj" public on may 1
:: After 2005
-"Nationaldagen" weekend on june 6
-"Midsommardagen" weekend on saturday before june 26
-"Alla helgons dag" weekend on first sunday in november minus 1
-"Juldagen" weekend on december 25
-"Annandag Jul" weekend on december 26
+"Nationaldagen" public on june 6
+"Midsommardagen" public on saturday before june 26
+"Alla helgons dag" public religious on first sunday in november minus 1
+"Juldagen" public religious on december 25
+"Annandag Jul" public on december 26
:: Religious
-"Fettisdagen" on easter minus 47 days
-"Askonsdagen" on easter minus 46 days
-"Sommartid" on last sunday in march
-"Skärtorsdagen" on easter minus 3
-"PÃ¥skafton" on easter minus 1
-"Pingstafton" on easter plus 48 days
+"Fettisdagen" religious on easter minus 47 days
+"Askonsdagen" religious on easter minus 46 days
+"Sommartid" religious on last sunday in march
+"Skärtorsdagen" religious on easter minus 3
+"PÃ¥skafton" religious on easter minus 1
+"Pingstafton" religious on easter plus 48 days
:: After 2005
-"Annandag Pingst" on easter plus 50 days
-"1. Advent" on sunday before december 24 minus 21 days
-"2. Advent" on sunday before december 24 minus 14 days
-"3. Advent" on sunday before december 24 minus 7 days
-"4. Advent" on sunday before december 24
+"Annandag Pingst" religious on easter plus 50 days
+"1. Advent" religious on sunday before december 24 minus 21 days
+"2. Advent" religious on sunday before december 24 minus 14 days
+"3. Advent" religious on sunday before december 24 minus 7 days
+"4. Advent" religious on sunday before december 24
:: Financial
:: Cultural
-"Alla hjärtans dag" on february 14
+"Alla hjärtans dag" cultural on february 14
:: Before 2005
-:: "Nationaldagen" on june 6
-"Midsommarafton" on friday before june 25
-"Vintertid" on last sunday in october
-"Nyårsafton" on december 31
+:: "Nationaldagen" civil on june 6
+"Midsommarafton" cultural on friday before june 25
+"Vintertid" cultural on last sunday in october
+"Nyårsafton" cultural on december 31
:: School
@@ -68,5 +68,5 @@ language "sv"
:: To be sorted
-"Trett.d.afton" on january 5
-"Julafton" on december 24
+"Trett.d.afton" civil on january 5
+"Julafton" civil on december 24
diff --git a/kholidays/holidays/plan2/holiday_sg_en-gb b/kholidays/holidays/plan2/holiday_sg_en-gb
index d8de666..3af0476 100644
--- a/kholidays/holidays/plan2/holiday_sg_en-gb
+++ b/kholidays/holidays/plan2/holiday_sg_en-gb
@@ -18,26 +18,26 @@ language "en_GB"
description "National holiday file for Singapore"
:: Public Holidays
-"New Year's Day" weekend on january 1
-"Chinese New Year" weekend on january 23 2012 length 2 days
-"Chinese New Year" weekend on february 10 2013 length 2 days
-"Chinese New Year" weekend on january 31 2014 length 2 days
-"Good Friday" weekend on easter minus 2
-"Labour Day" weekend on may 1
-"Vesak Day" weekend on may 5 2012
-"Vesak Day" weekend on may 24 2013
-"Vesak Day" weekend on may 13 2014
-"National Day" weekend on august 9
-"Hari Raya Puasa" weekend on august 19 2012
-"Hari Raya Puasa" weekend on august 8 2013
-"Hari Raya Puasa" weekend on july 28 2014
-"Hari Raya Haji" weekend on october 26 2012
-"Hari Raya Haji" weekend on october 15 2013
-"Hari Raya Haji" weekend on october 4 2014
-"Deepavali" weekend on november 13 2012
-"Deepavali" weekend on november 3 2013
-"Deepavali" weekend on october 23 2014
-"Christmas Day" weekend on december 25
+"New Year's Day" public on january 1
+"Chinese New Year" public on january 23 2012 length 2 days
+"Chinese New Year" public on february 10 2013 length 2 days
+"Chinese New Year" public on january 31 2014 length 2 days
+"Good Friday" public religious on easter minus 2
+"Labour Day" public on may 1
+"Vesak Day" public on may 5 2012
+"Vesak Day" public on may 24 2013
+"Vesak Day" public on may 13 2014
+"National Day" public on august 9
+"Hari Raya Puasa" public on august 19 2012
+"Hari Raya Puasa" public on august 8 2013
+"Hari Raya Puasa" public on july 28 2014
+"Hari Raya Haji" public on october 26 2012
+"Hari Raya Haji" public on october 15 2013
+"Hari Raya Haji" public on october 4 2014
+"Deepavali" public on november 13 2012
+"Deepavali" public on november 3 2013
+"Deepavali" public on october 23 2014
+"Christmas Day" public religious on december 25
:: Religious Holidays
diff --git a/kholidays/holidays/plan2/holiday_si_sl b/kholidays/holidays/plan2/holiday_si_sl
index 455e269..816b52e 100644
--- a/kholidays/holidays/plan2/holiday_si_sl
+++ b/kholidays/holidays/plan2/holiday_si_sl
@@ -20,36 +20,36 @@ language "sl"
:: Public Holidays
-"Novo leto" weekend on january 1
-"Dan upora proti okupatorju" weekend on april 27
-"Praznik dela" weekend on may 1 length 2 days
-"Dan državnosti" weekend on june 25
-"Združitev prekmurskih Slovencev z matiÄnim narodom" on august 17
-"Vrnitev Primorske k matiÄni domovini" on september 15
-"Dan Rudolfa Maistra" on november 23
-"Dan samostojnosti in enotnosti" weekend on december 26
+"Novo leto" public on january 1
+"Dan upora proti okupatorju" public on april 27
+"Praznik dela" public on may 1 length 2 days
+"Dan državnosti" public on june 25
+"Združitev prekmurskih Slovencev z matiÄnim narodom" civil on august 17
+"Vrnitev Primorske k matiÄni domovini" civil on september 15
+"Dan Rudolfa Maistra" civil on november 23
+"Dan samostojnosti in enotnosti" public on december 26
:: Religious Holidays
-"Velika noÄ" weekend on easter
-"VelikonoÄni ponedeljek" weekend on easter plus 1 day
-"Binkošti" weekend on easter plus 49 days
-"Marijino vnebovzetje" weekend on august 15
-"Dan reformacije" weekend on october 31
-"Dan spomina na mrtve" weekend on november 1
-"BožiÄ" weekend on december 25
+"Velika noÄ" public religious on easter
+"VelikonoÄni ponedeljek" public religious on easter plus 1 day
+"Binkošti" public religious on easter plus 49 days
+"Marijino vnebovzetje" public religious on august 15
+"Dan reformacije" public religious on october 31
+"Dan spomina na mrtve" public religious on november 1
+"BožiÄ" public religious on december 25
:: Financial
:: Cultural
-"Prešernov dan, slovenski kulturni praznik" weekend on february 8
-"Dan Primoža Trubarja" on june 8
+"Prešernov dan, slovenski kulturni praznik" public cultural on february 8
+"Dan Primoža Trubarja" cultural on june 8
:: School
:: Daylight Saving
-"Poletni Äas" on last sunday in march
-"Zimski Äas" on last sunday in october
+"Poletni Äas" seasonal on last sunday in march
+"Zimski Äas" seasonal on last sunday in october
:: Seasons
diff --git a/kholidays/holidays/plan2/holiday_sk_sk b/kholidays/holidays/plan2/holiday_sk_sk
index d0855e2..e8203d2 100644
--- a/kholidays/holidays/plan2/holiday_sk_sk
+++ b/kholidays/holidays/plan2/holiday_sk_sk
@@ -17,23 +17,23 @@ language "sk"
:description "(please add description in source language) National holiday file for Slovak Republic"
:: Public Holidays
-"Nový rok" weekend on january 1
-"DeÅ vzniku SR" weekend on january 1
-"Traja králi" weekend on january 6
-"Veľký piatok" weekend on easter minus 2
-"VeľkonoÄná nedeľa" weekend on easter
-"VeľkonoÄný pondelok" weekend on easter plus 1
-"Sviatok práce" weekend on may 1
-"DeÅ vÃÅ¥azstva nad faÅ¡izmom" weekend on may 8
-"Sviatok sv. Cyrila a Metoda" weekend on july 5
-"VýroÄie SNP" weekend on august 29
-"DeÅ Ãstavy SR" weekend on september 1
-"Sedembolestná Panna Mária" weekend on september 15
-"Sviatok všetkých svätých" weekend on november 1
-"DeÅ boja za slobodu a demokraciu" weekend on november 17
-"Å tedrý deÅ" weekend on december 24
-"1. sviatok vianoÄný" weekend on december 25
-"2. sviatok vianoÄný" weekend on december 26
+"Nový rok" public on january 1
+"DeÅ vzniku SR" public on january 1
+"Traja králi" public on january 6
+"Veľký piatok" public religious on easter minus 2
+"VeľkonoÄná nedeľa" public religious on easter
+"VeľkonoÄný pondelok" public on easter plus 1
+"Sviatok práce" public on may 1
+"DeÅ vÃÅ¥azstva nad faÅ¡izmom" public on may 8
+"Sviatok sv. Cyrila a Metoda" public on july 5
+"VýroÄie SNP" public on august 29
+"DeÅ Ãstavy SR" public on september 1
+"Sedembolestná Panna Mária" public on september 15
+"Sviatok všetkých svätých" public religious on november 1
+"DeÅ boja za slobodu a demokraciu" public on november 17
+"Å tedrý deÅ" public religious on december 24
+"1. sviatok vianoÄný" public religious on december 25
+"2. sviatok vianoÄný" public religious on december 26
:: Religious Holidays
@@ -51,9 +51,9 @@ language "sk"
:: To be sorted
-"Medzinárodný deŠžien" on march 8
-"DeÅ uÄiteľov" on april 28
-"DeÅ matiek" on may 13
-"Medzinárodný deÅ detÃ" on june 1
-"DeÅ otcov" on june 17
-"Pamiatka zosnulých" on november 2
+"Medzinárodný deŠžien" civil on march 8
+"DeÅ uÄiteľov" civil on april 28
+"DeÅ matiek" civil on may 13
+"Medzinárodný deÅ detÃ" civil on june 1
+"DeÅ otcov" civil on june 17
+"Pamiatka zosnulých" civil on november 2
diff --git a/kholidays/holidays/plan2/holiday_sm_it b/kholidays/holidays/plan2/holiday_sm_it
index 054c69a..c866432 100644
--- a/kholidays/holidays/plan2/holiday_sm_it
+++ b/kholidays/holidays/plan2/holiday_sm_it
@@ -19,62 +19,62 @@ language "it"
:description "(please add description in source language) National holiday file for San Marino"
:: Public Holidays
-"Capodanno" weekend on january 1
-"Epifania" weekend on january 6
-"Pasqua" weekend on easter
-"Lunedì dell'Angelo" weekend on easter plus 1 day
-"Festa di Sant'Agata" weekend on february 5
-"Anniversario Arengo - Festa delle Milizie" weekend on march 25
-"Ingresso Eccellentissimi Capitani Reggenti" weekend on april 1
-"Festa del Lavoro" weekend on may 1
-"Caduta governo Fascista" weekend on july 28
-"Ferragosto" weekend on august 15
-"Festa della Repubblica - Santo Patrono" weekend on september 3
-"Ingresso Eccellentissimi Capitani Reggenti" weekend on october 1
-"Ognissanti" weekend on november 1
-"Commemorazione dei defunti" weekend on november 2
-"Immacolata Concezione" weekend on december 8
-"Natale" weekend on december 25
-"Santo Stefano" weekend on december 26
+"Capodanno" public on january 1
+"Epifania" public religious on january 6
+"Pasqua" public religious on easter
+"Lunedì dell'Angelo" public religious on easter plus 1 day
+"Festa di Sant'Agata" public religious on february 5
+"Anniversario Arengo - Festa delle Milizie" public on march 25
+"Ingresso Eccellentissimi Capitani Reggenti" public on april 1
+"Festa del Lavoro" public on may 1
+"Caduta governo Fascista" public on july 28
+"Ferragosto" public on august 15
+"Festa della Repubblica - Santo Patrono" public on september 3
+"Ingresso Eccellentissimi Capitani Reggenti" public on october 1
+"Ognissanti" religious public on november 1
+"Commemorazione dei defunti" public on november 2
+"Immacolata Concezione" religious public on december 8
+"Natale" religious public on december 25
+"Santo Stefano" religious public on december 26
:: Religious
-"San Giuseppe" on march 19
-"Giovedì Grasso" on easter minus 52 days
-"Martedì Grasso" on easter minus 47 days
-"Mercoledì delle Ceneri" on easter minus 46 days
-"Prima di Quaresima" on easter minus 42 days
-"Seconda di Quaresima" on easter minus 35 days
-"Terza di Quaresima" on easter minus 28 days
-"Quarta di Quaresima" on easter minus 21 days
-"Quinta di Quaresima" on easter minus 14 days
-"Domenica delle Palme" on easter minus 7 days
-"Ascensione" on easter plus 39 days
-"Pentecoste" on easter plus 49 days
-"Santissima Trinità " on easter plus 56 days
-"Corpus Domini" weekend on easter plus 63 days
-"Sacro Cuore di Gesù" on easter plus 68 days
-"Santi Pietro e Paolo" on june 29
-"San Francesco" on october 4
-"Defunti" on november 2
-"Prima d'avvento" on sunday before 24 december minus 21 days
-"Seconda d'avvento" on sunday before 24 december minus 14 days
-"Terza d'avvento" on sunday before 24 december minus 7 days
-"Quarta d'avvento" on sunday before 24 december
-"San Silvestro" on december 31
+"San Giuseppe" religious on march 19
+"Giovedì Grasso" religious on easter minus 52 days
+"Martedì Grasso" religious on easter minus 47 days
+"Mercoledì delle Ceneri" religious on easter minus 46 days
+"Prima di Quaresima" religious on easter minus 42 days
+"Seconda di Quaresima" religious on easter minus 35 days
+"Terza di Quaresima" religious on easter minus 28 days
+"Quarta di Quaresima" religious on easter minus 21 days
+"Quinta di Quaresima" religious on easter minus 14 days
+"Domenica delle Palme" religious on easter minus 7 days
+"Ascensione" religious on easter plus 39 days
+"Pentecoste" religious on easter plus 49 days
+"Santissima Trinità " religious on easter plus 56 days
+"Corpus Domini" public religious on easter plus 63 days
+"Sacro Cuore di Gesù" religious on easter plus 68 days
+"Santi Pietro e Paolo" religious on june 29
+"San Francesco" religious on october 4
+"Defunti" religious on november 2
+"Prima d'avvento" religious on sunday before 24 december minus 21 days
+"Seconda d'avvento" religious on sunday before 24 december minus 14 days
+"Terza d'avvento" religious on sunday before 24 december minus 7 days
+"Quarta d'avvento" religious on sunday before 24 december
+"San Silvestro" religious on december 31
:: Financial
:: Cultural
-"Giornata della Memoria" on january 27
-"Giornata del Ricordo" on february 10
-"Festa della donna" on march 8
-"Festa dell'Unità nazionale" on november 4
+"Giornata della Memoria" cultural on january 27
+"Giornata del Ricordo" cultural on february 10
+"Festa della donna" cultural on march 8
+"Festa dell'Unità nazionale" cultural on november 4
:: School
:: Daylight Saving
-"Passaggio all'ora legale" on last sunday in march
-"Passaggio all'ora solare" on last sunday in october
+"Passaggio all'ora legale" seasonal on last sunday in march
+"Passaggio all'ora solare" seasonal on last sunday in october
:: Seasons
diff --git a/kholidays/holidays/plan2/holiday_th_en-gb b/kholidays/holidays/plan2/holiday_th_en-gb
index 84abede..15636b3 100644
--- a/kholidays/holidays/plan2/holiday_th_en-gb
+++ b/kholidays/holidays/plan2/holiday_th_en-gb
@@ -17,21 +17,21 @@ language "en_GB"
description "National holiday file for Thailand"
:: Public Holidays
-"New Years Day" weekend on January 1
-:"Makha Bucha Day" weekend on February 11
-"Chakri Memorial Day" weekend on April 6
-"Songkran Festival" weekend on April 13 length 3 days
-"Coranation Day" weekend on May 5
-:"Royal Ploughing Ceremony Day" weekend on May 8
-:"Visakha Bucha Day" weekend on May 10
-:"Mid Year Day" weekend on July 1
-:"Asarnha Bucha Day" weekend on July 8
-:"Khao Phansa Day" weekend on July 9
-"HMThe Queens Birthday" weekend on August 12
-"Chulalongkorn Day" weekend on October 23
-"HM The King's Birthdayday" weekend on December 5
-"Constitution Day" weekend on December 10
-"New Years Eve" weekend on December 31
+"New Years Day" public on January 1
+:"Makha Bucha Day" public on February 11
+"Chakri Memorial Day" public on April 6
+"Songkran Festival" public on April 13 length 3 days
+"Coranation Day" public on May 5
+:"Royal Ploughing Ceremony Day" public on May 8
+:"Visakha Bucha Day" public on May 10
+:"Mid Year Day" public on July 1
+:"Asarnha Bucha Day" public on July 8
+:"Khao Phansa Day" public on July 9
+"HM The Queens Birthday" public on August 12
+"Chulalongkorn Day" public on October 23
+"HM The King's Birthdayday" public on December 5
+"Constitution Day" public on December 10
+"New Years Eve" public on December 31
:: Religious Holidays
@@ -44,9 +44,9 @@ description "National holiday file for Thailand"
:: Daylight Saving
:: Seasons
-"Hot season begins" on march 1
-"Rainy season begins" on june 1
-"Cool season begins" on november 1
+"Hot season begins" seasonal on march 1
+"Rainy season begins" seasonal on june 1
+"Cool season begins" seasonal on november 1
:: Name Days
diff --git a/kholidays/holidays/plan2/holiday_tr_en-gb b/kholidays/holidays/plan2/holiday_tr_en-gb
index e154827..be1551b 100644
--- a/kholidays/holidays/plan2/holiday_tr_en-gb
+++ b/kholidays/holidays/plan2/holiday_tr_en-gb
@@ -23,97 +23,97 @@ language "en_GB"
description "National holiday file for Turkey"
:: Public Holidays
-"New Year's Day" weekend on january 1
-"National Sovereignty and Children's Day" weekend on april 23
-"Labour and Solidarity Day" weekend on may 1
-"Commemoration of Atatürk, Youth and Sports Day" weekend on may 19
-"Victory Day" weekend on august 30
-"Republic Day" weekend on october 29
+"New Year's Day" public on january 1
+"National Sovereignty and Children's Day" public on april 23
+"Labour and Solidarity Day" public on may 1
+"Commemoration of Atatürk, Youth and Sports Day" public on may 19
+"Victory Day" public on august 30
+"Republic Day" public on october 29
:: Religious
:: We cannot use KDE Hijri calendar since is one/two days ahead
:: than holiday dates defined for Turkey
-:: "Ramadan Feast" weekend on hijri shawwal 1 length 3 days
-:: "Sacrifice Feast" weekend on hijri thualhijjah 10 length 4 days
+:: "Ramadan Feast" public religious on hijri shawwal 1 length 3 days
+:: "Sacrifice Feast" public religious on hijri thualhijjah 10 length 4 days
-"Ramadan Feast" weekend on 08 august 2013 length 3 days
-"Ramadan Feast" weekend on 28 july 2014 length 3 days
-"Ramadan Feast" weekend on 17 july 2015 length 3 days
+"Ramadan Feast" public religious on 08 august 2013 length 3 days
+"Ramadan Feast" public religious on 28 july 2014 length 3 days
+"Ramadan Feast" public religious on 17 july 2015 length 3 days
-"Sacrifice Feast" weekend on 15 october 2013 length 4 days
-"Sacrifice Feast" weekend on 04 october 2014 length 4 days
-"Sacrifice Feast" weekend on 23 september 2015 length 4 days
+"Sacrifice Feast" public religious on 15 october 2013 length 4 days
+"Sacrifice Feast" public religious on 04 october 2014 length 4 days
+"Sacrifice Feast" public religious on 23 september 2015 length 4 days
-"Night of Qadr" on 03 august 2013
-"Night of Qadr" on 23 july 2014
-"Night of Qadr" on 12 july 2015
+"Night of Qadr" religious on 03 august 2013
+"Night of Qadr" religious on 23 july 2014
+"Night of Qadr" religious on 12 july 2015
-"Mawlid" on 23 january 2013
-"Mawlid" on 12 january 2014
-"Mawlid" on 02 january 2015
-"Mawlid" on 22 december 2015
+"Mawlid" religious on 23 january 2013
+"Mawlid" religious on 12 january 2014
+"Mawlid" religious on 02 january 2015
+"Mawlid" religious on 22 december 2015
-"Regaib Night" on 16 may 2013
-"Regaib Night" on 01 may 2014
-"Regaib Night" on 23 april 2015
+"Regaib Night" religious on 16 may 2013
+"Regaib Night" religious on 01 may 2014
+"Regaib Night" religious on 23 april 2015
-"Miraj" on 05 june 2013
-"Miraj" on 25 may 2014
-"Miraj" on 15 may 2015
+"Miraj" religious on 05 june 2013
+"Miraj" religious on 25 may 2014
+"Miraj" religious on 15 may 2015
-"Bara'ah Night" on 23 june 2013
-"Bara'ah Night" on 12 june 2014
-"Bara'ah Night" on 01 june 2015
+"Bara'ah Night" religious on 23 june 2013
+"Bara'ah Night" religious on 12 june 2014
+"Bara'ah Night" religious on 01 june 2015
:: Financial
:: Cultural
-"World Cancer Day" on february 4
-"Valentine's Day" on february 14
-"Civil Defense Day" on february 28
-"Memorial Week for Previous Earthquakes" on march 1
-"International Women's Day" on march 8
-"Feast of Medicine" on march 14
-"Martyrs' Day" on march 18
-"Ãanakkale Victory" on march 18
-"Nowruz" on march 21
-"World Theatre Day" on march 27
-"World Health Day" on april 7
-"Hıdrellez" on may 6
-"Mother's Day" on second sunday in may
-"Ethics Day" on may 25
-"The Conquest of Ä°stanbul" on may 29
-"World Environment Day" on june 5
-"World Blood Donor Day" on june 14
-"Father's Day" on third sunday in june
-"Maritime and Cabotage Day" on july 1
-"International Day of Peace" on september 1
-"Veterans Day" on september 19
-"Turkish Language Day" on september 26
-"World Heart Day" on last sunday in september
-"World Animal Day" on october 4
-"Anniversary of Atatürk's Death" on november 10
-"Universal Children's Day" on november 20
-"Teachers' Day" on november 24
-"Intl. Day for Elimination of Violence against Women" on november 25
-"World AIDS Day" on december 1
-"International Day of Persons with Disabilities" on december 3
-"Human Rights Day" on december 10
+"World Cancer Day" cultural on february 4
+"Valentine's Day" cultural on february 14
+"Civil Defense Day" cultural on february 28
+"Memorial Week for Previous Earthquakes" cultural on march 1
+"International Women's Day" cultural on march 8
+"Feast of Medicine" cultural on march 14
+"Martyrs' Day" cultural on march 18
+"Ãanakkale Victory" cultural on march 18
+"Nowruz" cultural on march 21
+"World Theatre Day" cultural on march 27
+"World Health Day" cultural on april 7
+"Hıdrellez" cultural on may 6
+"Mother's Day" cultural on second sunday in may
+"Ethics Day" cultural on may 25
+"The Conquest of Ä°stanbul" cultural on may 29
+"World Environment Day" cultural on june 5
+"World Blood Donor Day" cultural on june 14
+"Father's Day" cultural on third sunday in june
+"Maritime and Cabotage Day" cultural on july 1
+"International Day of Peace" cultural on september 1
+"Veterans Day" cultural on september 19
+"Turkish Language Day" cultural on september 26
+"World Heart Day" cultural on last sunday in september
+"World Animal Day" cultural on october 4
+"Anniversary of Atatürk's Death" cultural on november 10
+"Universal Children's Day" cultural on november 20
+"Teachers' Day" cultural on november 24
+"Intl. Day for Elimination of Violence against Women" cultural on november 25
+"World AIDS Day" cultural on december 1
+"International Day of Persons with Disabilities" cultural on december 3
+"Human Rights Day" cultural on december 10
:: School
:: Daylight Saving
-"Daylight Saving Start" on ((year == 2011) ? [march 28] : [last sunday in march])
-"Daylight Saving End" on last sunday in october
+"Daylight Saving Start" seasonal on ((year == 2011) ? [march 28] : [last sunday in march])
+"Daylight Saving End" seasonal on last sunday in october
:: Seasons
-"Spring Begins" on march 21
-"Summer Begins" on june 21
-"Fall Begins" on september 23
-"Winter Begins" on december 21
-
-"Heat Falling from the Sun to the Air" on november 8 plus 105 days
-"Heat Falling from the Sun to the Water" on november 8 plus 112 days
-"Heat Falling from the Sun to the Ground" on november 8 plus 119 days
+"Spring Begins" seasonal on march 21
+"Summer Begins" seasonal on june 21
+"Fall Begins" seasonal on september 23
+"Winter Begins" seasonal on december 21
+
+"Heat Falling from the Sun to the Air" seasonal on november 8 plus 105 days
+"Heat Falling from the Sun to the Water" seasonal on november 8 plus 112 days
+"Heat Falling from the Sun to the Ground" seasonal on november 8 plus 119 days
:: Name Days
diff --git a/kholidays/holidays/plan2/holiday_tr_tr b/kholidays/holidays/plan2/holiday_tr_tr
index 8e46358..7d952ea 100644
--- a/kholidays/holidays/plan2/holiday_tr_tr
+++ b/kholidays/holidays/plan2/holiday_tr_tr
@@ -23,97 +23,97 @@ language "tr"
description "National holiday file for Turkey"
:: Public Holidays
-"Yeni Yıl Tatili" weekend on january 1
-"Ulusal Egemenlik ve Ãocuk Bayramı" weekend on april 23
-"Emek ve DayanıÅma Günü" weekend on may 1
-"Atatürk'ü Anma, Gençlik ve Spor Bayramı" weekend on may 19
-"Zafer Bayramı" weekend on august 30
-"Cumhuriyet Bayramı" weekend on october 29
+"Yeni Yıl Tatili" public on january 1
+"Ulusal Egemenlik ve Ãocuk Bayramı" public on april 23
+"Emek ve DayanıÅma Günü" public on may 1
+"Atatürk'ü Anma, Gençlik ve Spor Bayramı" public on may 19
+"Zafer Bayramı" public on august 30
+"Cumhuriyet Bayramı" public on october 29
:: Religious
:: We cannot use KDE Hijri calendar since is one/two days ahead
:: than holiday dates defined for Turkey
-:: "Ramazan Bayramı" weekend on hijri shawwal 1 length 3 days
-:: "Kurban Bayramı" weekend on hijri thualhijjah 10 length 4 days
+:: "Ramazan Bayramı" public religious on hijri shawwal 1 length 3 days
+:: "Kurban Bayramı" public religious on hijri thualhijjah 10 length 4 days
-"Ramazan Bayramı" weekend on 08 august 2013 length 3 days
-"Ramazan Bayramı" weekend on 28 july 2014 length 3 days
-"Ramazan Bayramı" weekend on 17 july 2015 length 3 days
+"Ramazan Bayramı" public religious on 08 august 2013 length 3 days
+"Ramazan Bayramı" public religious on 28 july 2014 length 3 days
+"Ramazan Bayramı" public religious on 17 july 2015 length 3 days
-"Kurban Bayramı" weekend on 15 october 2013 length 4 days
-"Kurban Bayramı" weekend on 04 october 2014 length 4 days
-"Kurban Bayramı" weekend on 23 september 2015 length 4 days
+"Kurban Bayramı" public religious on 15 october 2013 length 4 days
+"Kurban Bayramı" public religious on 04 october 2014 length 4 days
+"Kurban Bayramı" public religious on 23 september 2015 length 4 days
-"Kadir Gecesi" on 03 august 2013
-"Kadir Gecesi" on 23 july 2014
-"Kadir Gecesi" on 12 july 2015
+"Kadir Gecesi" religious on 03 august 2013
+"Kadir Gecesi" religious on 23 july 2014
+"Kadir Gecesi" religious on 12 july 2015
-"Mevlid Kandili" on 23 january 2013
-"Mevlid Kandili" on 12 january 2014
-"Mevlid Kandili" on 02 january 2015
-"Mevlid Kandili" on 22 december 2015
+"Mevlid Kandili" religious on 23 january 2013
+"Mevlid Kandili" religious on 12 january 2014
+"Mevlid Kandili" religious on 02 january 2015
+"Mevlid Kandili" religious on 22 december 2015
-"Regaib Kandili" on 16 may 2013
-"Regaib Kandili" on 01 may 2014
-"Regaib Kandili" on 23 april 2015
+"Regaib Kandili" religious on 16 may 2013
+"Regaib Kandili" religious on 01 may 2014
+"Regaib Kandili" religious on 23 april 2015
-"Mirac Kandili" on 05 june 2013
-"Mirac Kandili" on 25 may 2014
-"Mirac Kandili" on 15 may 2015
+"Mirac Kandili" religious on 05 june 2013
+"Mirac Kandili" religious on 25 may 2014
+"Mirac Kandili" religious on 15 may 2015
-"Berat Kandili" on 23 june 2013
-"Berat Kandili" on 12 june 2014
-"Berat Kandili" on 01 june 2015
+"Berat Kandili" religious on 23 june 2013
+"Berat Kandili" religious on 12 june 2014
+"Berat Kandili" religious on 01 june 2015
:: Financial
:: Cultural
-"Dünya Kanser Günü" on february 4
-"Sevgililer Günü" on february 14
-"Sivil Savunma Günü" on february 28
-"Deprem Haftası BaÅlangıcı" on march 1
-"Dünya Kadınlar Günü" on march 8
-"Tıp Bayramı" on march 14
-"Åehitler Günü" on march 18
-"Ãanakkale Zaferi" on march 18
-"Nevruz Bayramı" on march 21
-"Dünya Tiyatrolar Günü" on march 27
-"Dünya SaÄlık Günü" on april 7
-"Hıdrellez" on may 6
-"Anneler Günü" on second sunday in may
-"Etik Günü" on may 25
-"Ä°stanbul'un Fethi" on may 29
-"Dünya Ãevre Günü" on june 5
-"Dünya Gönüllü Kan BaÄıÅçıları Günü" on june 14
-"Babalar Günü" on third sunday in june
-"Kabotaj ve Deniz Bayramı" on july 1
-"Dünya BarıŠGünü" on september 1
-"Gaziler Günü" on september 19
-"Türk Dil Bayramı" on september 26
-"Dünya Kalp Günü" on last sunday in september
-"Dünya Hayvanları Koruma Günü" on october 4
-"Atatürk'ün Ãlüm Yıldönümü" on november 10
-"Ãocuk Hakları Günü" on november 20
-"ÃÄretmenler Günü" on november 24
-"Kadına Yönelik Åiddete KarÅı Mücadele Günü" on november 25
-"Dünya AIDS Günü" on december 1
-"Dünya Ãzürlüler Günü" on december 3
-"Dünya İnsan Hakları Günü" on december 10
+"Dünya Kanser Günü" cultural on february 4
+"Sevgililer Günü" cultural on february 14
+"Sivil Savunma Günü" cultural on february 28
+"Deprem Haftası BaÅlangıcı" cultural on march 1
+"Dünya Kadınlar Günü" cultural on march 8
+"Tıp Bayramı" cultural on march 14
+"Åehitler Günü" cultural on march 18
+"Ãanakkale Zaferi" cultural on march 18
+"Nevruz Bayramı" cultural on march 21
+"Dünya Tiyatrolar Günü" cultural on march 27
+"Dünya SaÄlık Günü" cultural on april 7
+"Hıdrellez" cultural on may 6
+"Anneler Günü" cultural on second sunday in may
+"Etik Günü" cultural on may 25
+"Ä°stanbul'un Fethi" cultural on may 29
+"Dünya Ãevre Günü" cultural on june 5
+"Dünya Gönüllü Kan BaÄıÅçıları Günü" cultural on june 14
+"Babalar Günü" cultural on third sunday in june
+"Kabotaj ve Deniz Bayramı" cultural on july 1
+"Dünya BarıŠGünü" cultural on september 1
+"Gaziler Günü" cultural on september 19
+"Türk Dil Bayramı" cultural on september 26
+"Dünya Kalp Günü" cultural on last sunday in september
+"Dünya Hayvanları Koruma Günü" cultural on october 4
+"Atatürk'ün Ãlüm Yıldönümü" cultural on november 10
+"Ãocuk Hakları Günü" cultural on november 20
+"ÃÄretmenler Günü" cultural on november 24
+"Kadına Yönelik Åiddete KarÅı Mücadele Günü" cultural on november 25
+"Dünya AIDS Günü" cultural on december 1
+"Dünya Ãzürlüler Günü" cultural on december 3
+"Dünya İnsan Hakları Günü" cultural on december 10
:: School
:: Daylight Saving
-"Yaz Saati Uygulaması BaÅlangıcı" on ((year == 2011) ? [march 28] : [last sunday in march])
-"Yaz Saati Uygulaması BitiÅi" on last sunday in october
+"Yaz Saati Uygulaması BaÅlangıcı" seasonal on ((year == 2011) ? [march 28] : [last sunday in march])
+"Yaz Saati Uygulaması BitiÅi" seasonal on last sunday in october
:: Seasons
-"Ä°lkbahar BaÅlangıcı" on march 21
-"Yaz BaÅlangıcı" on june 21
-"Sonbahar BaÅlangıcı" on september 23
-"KıŠBaÅlangıcı" on december 21
-
-"Birinci Cemrenin (Havaya) DüÅüÅü" on november 8 plus 105 days
-"Ä°kinci Cemrenin (Suya) DüÅüÅü" on november 8 plus 112 days
-"Ãçüncü Cemrenin (TopraÄa) DüÅüÅü" on november 8 plus 119 days
+"Ä°lkbahar BaÅlangıcı" seasonal on march 21
+"Yaz BaÅlangıcı" seasonal on june 21
+"Sonbahar BaÅlangıcı" seasonal on september 23
+"KıŠBaÅlangıcı" seasonal on december 21
+
+"Birinci Cemrenin (Havaya) DüÅüÅü" seasonal on november 8 plus 105 days
+"Ä°kinci Cemrenin (Suya) DüÅüÅü" seasonal on november 8 plus 112 days
+"Ãçüncü Cemrenin (TopraÄa) DüÅüÅü" seasonal on november 8 plus 119 days
:: Name Days
diff --git a/kholidays/holidays/plan2/holiday_ua_uk b/kholidays/holidays/plan2/holiday_ua_uk
index 373b650..ed65972 100644
--- a/kholidays/holidays/plan2/holiday_ua_uk
+++ b/kholidays/holidays/plan2/holiday_ua_uk
@@ -22,313 +22,313 @@ description "Файл ÑпиÑÐºÑ ÑвÑÑковиÑ
днÑв УкÑаÑни"
:: Public Holidays
: New Year's Day
-"Ðовий Ð Ñк" weekend on january 1
+"Ðовий Ð Ñк" public on january 1
: New Year's Day Substitute Holiday
-"Ðовий Ð Ñк" weekend on ( (([january 1] == [saturday after ([january 1])]) ||
- ([january 1] == [sunday after ([january 1])])) ?
- [monday after ([january 1])] :
+"Ðовий Ð Ñк" public on ( (([january 1] == [saturday after ([january 1])]) ||
+ ([january 1] == [sunday after ([january 1])])) ?
+ [monday after ([january 1])] :
noop )
-: Orthodox Christmas, could use "weekend on julian december 25"
-"Ð Ñздво Ð¥ÑиÑÑове" weekend on january 7
+: Orthodox Christmas, could use "public on julian december 25"
+"Ð Ñздво Ð¥ÑиÑÑове" public religious on january 7
: Orthodox Christmas Substitute Holiday
-"Ð Ñздво Ð¥ÑиÑÑове" weekend on ( (([january 7] == [saturday after ([january 7])]) ||
- ([january 7] == [sunday after ([january 7])])) ?
- [monday after ([january 7])] :
+"Ð Ñздво Ð¥ÑиÑÑове" public on ( (([january 7] == [saturday after ([january 7])]) ||
+ ([january 7] == [sunday after ([january 7])])) ?
+ [monday after ([january 7])] :
noop )
: International Women's Day
-"ÐÑжнаÑодний жÑноÑий денÑ" weekend on march 8
+"ÐÑжнаÑодний жÑноÑий денÑ" public on march 8
: International Women's Day Substitute Holiday
-"ÐÑжнаÑодний жÑноÑий денÑ" weekend on ( (([march 8] == [saturday after ([march 8])]) ||
- ([march 8] == [sunday after ([march 8])])) ?
- [monday after ([march 8])] :
+"ÐÑжнаÑодний жÑноÑий денÑ" public on ( (([march 8] == [saturday after ([march 8])]) ||
+ ([march 8] == [sunday after ([march 8])])) ?
+ [monday after ([march 8])] :
noop )
: Orthodox Easter
-"ÐеликденÑ" weekend on pascha
+"ÐеликденÑ" public religious on pascha
: Orthodox Easter Substitute Holiday
-"ÐеликденÑ" weekend on monday after ([pascha])
+"ÐеликденÑ" public on monday after ([pascha])
: International Workers' Day
-"ÐÐµÐ½Ñ Ð¼ÑжнаÑÐ¾Ð´Ð½Ð¾Ñ ÑолÑдаÑноÑÑÑ ÑÑÑдÑÑиÑ
" weekend on may 1 length 2 days
+"ÐÐµÐ½Ñ Ð¼ÑжнаÑÐ¾Ð´Ð½Ð¾Ñ ÑолÑдаÑноÑÑÑ ÑÑÑдÑÑиÑ
" public on may 1 length 2 days
: International Workers' Day Substitute Holiday
-"ÐÐµÐ½Ñ Ð¼ÑжнаÑÐ¾Ð´Ð½Ð¾Ñ ÑолÑдаÑноÑÑÑ ÑÑÑдÑÑиÑ
" weekend on ( (([may 1] == [saturday after ([may 1])])) ?
- [monday after ([may 1])] :
- ((([may 1] == [sunday after ([may 1])])) ?
- [tuesday after ([may 1])] :
+"ÐÐµÐ½Ñ Ð¼ÑжнаÑÐ¾Ð´Ð½Ð¾Ñ ÑолÑдаÑноÑÑÑ ÑÑÑдÑÑиÑ
" public on ( (([may 1] == [saturday after ([may 1])])) ?
+ [monday after ([may 1])] :
+ ((([may 1] == [sunday after ([may 1])])) ?
+ [tuesday after ([may 1])] :
noop ) )
-"ÐÐµÐ½Ñ Ð¼ÑжнаÑÐ¾Ð´Ð½Ð¾Ñ ÑолÑдаÑноÑÑÑ ÑÑÑдÑÑиÑ
" weekend on ( (([may 2] == [saturday after ([may 2])])) ?
- [monday after ([may 2])] :
- ((([may 2] == [sunday after ([may 2])])) ?
- [tuesday after ([may 2])] :
+"ÐÐµÐ½Ñ Ð¼ÑжнаÑÐ¾Ð´Ð½Ð¾Ñ ÑолÑдаÑноÑÑÑ ÑÑÑдÑÑиÑ
" public on ( (([may 2] == [saturday after ([may 2])])) ?
+ [monday after ([may 2])] :
+ ((([may 2] == [sunday after ([may 2])])) ?
+ [tuesday after ([may 2])] :
noop ) )
: Victory Day
-"ÐÐµÐ½Ñ ÐеÑемоги" weekend on may 9
+"ÐÐµÐ½Ñ ÐеÑемоги" public on may 9
: Victory Day Substitute Holiday
-"ÐÐµÐ½Ñ ÐеÑемоги" weekend on ( (([may 9] == [saturday after ([may 9])]) ||
- ([may 9] == [sunday after ([may 9])])) ?
- [monday after ([may 9])] :
+"ÐÐµÐ½Ñ ÐеÑемоги" public on ( (([may 9] == [saturday after ([may 9])]) ||
+ ([may 9] == [sunday after ([may 9])])) ?
+ [monday after ([may 9])] :
noop )
: Orthodox Pentecost / Holy Trinity Day (Triytsya)
-"ТÑÑйÑÑ" weekend on pascha plus 49 days
+"ТÑÑйÑÑ" public religious on pascha plus 49 days
: Orthodox Pentecost / Holy Trinity Day (Triytsya) Substitute Holiday
-"ТÑÑйÑÑ" weekend on pascha plus 50 days
+"ТÑÑйÑÑ" public religious on pascha plus 50 days
: Constitution Day
-"ÐÐµÐ½Ñ ÐонÑÑиÑÑÑÑÑ Ð£ÐºÑаÑни" weekend on june 28
+"ÐÐµÐ½Ñ ÐонÑÑиÑÑÑÑÑ Ð£ÐºÑаÑни" public on june 28
: Constitution Day Substitute Holiday
-"ÐÐµÐ½Ñ ÐонÑÑиÑÑÑÑÑ Ð£ÐºÑаÑни" weekend on ( (([june 28] == [saturday after ([june 28])]) ||
- ([june 28] == [sunday after ([june 28])])) ?
- [monday after ([june 28])] :
+"ÐÐµÐ½Ñ ÐонÑÑиÑÑÑÑÑ Ð£ÐºÑаÑни" public on ( (([june 28] == [saturday after ([june 28])]) ||
+ ([june 28] == [sunday after ([june 28])])) ?
+ [monday after ([june 28])] :
noop )
: Independence Day
-"ÐÐµÐ½Ñ ÐезалежноÑÑÑ Ð£ÐºÑаÑни" weekend on august 24
+"ÐÐµÐ½Ñ ÐезалежноÑÑÑ Ð£ÐºÑаÑни" public on august 24
: Independence Day Substitute Holiday
-"ÐÐµÐ½Ñ ÐезалежноÑÑÑ Ð£ÐºÑаÑни" weekend on ( (([august 24] == [saturday after ([august 24])]) ||
- ([august 24] == [sunday after ([august 24])])) ?
- [monday after ([august 24])] :
+"ÐÐµÐ½Ñ ÐезалежноÑÑÑ Ð£ÐºÑаÑни" public on ( (([august 24] == [saturday after ([august 24])]) ||
+ ([august 24] == [sunday after ([august 24])])) ?
+ [monday after ([august 24])] :
noop )
:: Religious
: Old New Year Eve, could use "on julian december 31"
-"ЩедÑий веÑÑÑ" on january 13
+"ЩедÑий веÑÑÑ" religious on january 13
: Old New Year, could use "on julian january 1"
-"ÐÐµÐ½Ñ ÐаÑилÑÑ Ðеликого" on january 14
+"ÐÐµÐ½Ñ ÐаÑилÑÑ Ðеликого" religious on january 14
: Epiphany
-"ÐодоÑ
ÑеÑа" on january 19
+"ÐодоÑ
ÑеÑа" religious on january 19
: The Purification of St. Mary
-"СÑÑÑÑеннÑ" on february 15
+"СÑÑÑÑеннÑ" religious on february 15
: Feast of St. John the Baptist
-"Ð Ñздво Ðвана Ð¥ÑеÑÑиÑÐµÐ»Ñ (Ðвана ÐÑпала)" on july 7
+"Ð Ñздво Ðвана Ð¥ÑеÑÑиÑÐµÐ»Ñ (Ðвана ÐÑпала)" religious on july 7
: Merciful Saviour and the Blessed Virgin Mary
-"ÐаковеÑ" on august 14
+"ÐаковеÑ" religious on august 14
: Assumption of Mary
-"УÑпÑÐ½Ð½Ñ ÐÑеÑвÑÑÐ¾Ñ ÐогоÑодиÑÑ" on august 28
+"УÑпÑÐ½Ð½Ñ ÐÑеÑвÑÑÐ¾Ñ ÐогоÑодиÑÑ" religious on august 28
: The Protection of the Mother of God
-"ÐокÑова ÐÑеÑвÑÑÐ¾Ñ ÐогоÑодиÑÑ" on october 14
+"ÐокÑова ÐÑеÑвÑÑÐ¾Ñ ÐогоÑодиÑÑ" religious on october 14
:: Financial
:: Cultural
: Unity Day of Ukraine
-"ÐÐµÐ½Ñ ÑобоÑноÑÑÑ Ð£ÐºÑаÑни" on january 22
+"ÐÐµÐ½Ñ ÑобоÑноÑÑÑ Ð£ÐºÑаÑни" cultural on january 22
: Battle of Kruty Memorial Day
-"ÐÐµÐ½Ñ Ð¿Ð°Ð¼âÑÑÑ Ð³ÐµÑоÑв ÐÑÑÑ" on january 29
+"ÐÐµÐ½Ñ Ð¿Ð°Ð¼âÑÑÑ Ð³ÐµÑоÑв ÐÑÑÑ" cultural on january 29
: Valentine's Day
-"ÐÐµÐ½Ñ ÑвÑÑого ÐаленÑина (ÐÐµÐ½Ñ Ð²ÑÑÑ
закоÑ
аниÑ
)" on february 14
+"ÐÐµÐ½Ñ ÑвÑÑого ÐаленÑина (ÐÐµÐ½Ñ Ð²ÑÑÑ
закоÑ
аниÑ
)" cultural on february 14
: International Mother Language Day
-"ÐÑжнаÑодний Ð´ÐµÐ½Ñ ÑÑÐ´Ð½Ð¾Ñ Ð¼Ð¾Ð²Ð¸" on february 21
+"ÐÑжнаÑодний Ð´ÐµÐ½Ñ ÑÑÐ´Ð½Ð¾Ñ Ð¼Ð¾Ð²Ð¸" cultural on february 21
: International Day for Monuments and Sites
-"ÐÐµÐ½Ñ Ð¿Ð°Ð¼'ÑÑок ÑÑÑоÑÑÑ Ñа кÑлÑÑÑÑи" on april 18
+"ÐÐµÐ½Ñ Ð¿Ð°Ð¼'ÑÑок ÑÑÑоÑÑÑ Ñа кÑлÑÑÑÑи" cultural on april 18
: Environment Day
-"ÐÐµÐ½Ñ Ð´Ð¾Ð²ÐºÑллÑ" on third saturday in april
+"ÐÐµÐ½Ñ Ð´Ð¾Ð²ÐºÑллÑ" cultural on third saturday in april
: Mother's Day
-"ÐÐµÐ½Ñ Ð¼Ð°ÑеÑÑ" on second sunday in may
+"ÐÐµÐ½Ñ Ð¼Ð°ÑеÑÑ" cultural on second sunday in may
: Europe Day
-"ÐÐµÐ½Ñ ÐвÑопи" on third saturday in may
+"ÐÐµÐ½Ñ ÐвÑопи" cultural on third saturday in may
: Saints Cyril and Methodius Day
-"ÐÐµÐ½Ñ Ñлов'ÑнÑÑÐºÐ¾Ñ Ð¿Ð¸ÑемноÑÑÑ Ñ ÐºÑлÑÑÑÑи" on may 24
+"ÐÐµÐ½Ñ Ñлов'ÑнÑÑÐºÐ¾Ñ Ð¿Ð¸ÑемноÑÑÑ Ñ ÐºÑлÑÑÑÑи" cultural on may 24
: Children's Day
-"ÐÐµÐ½Ñ Ð·Ð°Ñ
иÑÑÑ Ð´ÑÑей" on june 1
+"ÐÐµÐ½Ñ Ð·Ð°Ñ
иÑÑÑ Ð´ÑÑей" cultural on june 1
: Memorial Day of War Victim's Mourning in Ukraine
-"ÐÐµÐ½Ñ ÑкоÑбоÑи Ñ Ð²ÑанÑÐ²Ð°Ð½Ð½Ñ Ð¿Ð°Ð¼'ÑÑÑ Ð¶ÐµÑÑв вÑйни в УкÑаÑнÑ" on june 22
+"ÐÐµÐ½Ñ ÑкоÑбоÑи Ñ Ð²ÑанÑÐ²Ð°Ð½Ð½Ñ Ð¿Ð°Ð¼'ÑÑÑ Ð¶ÐµÑÑв вÑйни в УкÑаÑнÑ" cultural on june 22
: International Youth Day
-"ÐÐµÐ½Ñ Ð¼Ð¾Ð»Ð¾Ð´Ñ" on last sunday in june
+"ÐÐµÐ½Ñ Ð¼Ð¾Ð»Ð¾Ð´Ñ" cultural on last sunday in june
: Ukrainian Flag Day
-"ÐÐµÐ½Ñ ÐеÑжавного ÐÑапоÑа УкÑаÑни" on august 23
+"ÐÐµÐ½Ñ ÐеÑжавного ÐÑапоÑа УкÑаÑни" cultural on august 23
: Ukrainian Library Day
-"ÐÑеÑкÑаÑнÑÑкий Ð´ÐµÐ½Ñ Ð±ÑблÑоÑек" on september 30
+"ÐÑеÑкÑаÑнÑÑкий Ð´ÐµÐ½Ñ Ð±ÑблÑоÑек" cultural on september 30
: Day of Ukrainian Cossacks
-"ÐÐµÐ½Ñ Ð£ÐºÑаÑнÑÑкого козаÑÑва" on october 14
+"ÐÐµÐ½Ñ Ð£ÐºÑаÑнÑÑкого козаÑÑва" cultural on october 14
: Day of Ukrainian Script and Language
-"ÐÐµÐ½Ñ ÑкÑаÑнÑÑÐºÐ¾Ñ Ð¿Ð¸ÑемноÑÑÑ Ñа мови" on november 9
+"ÐÐµÐ½Ñ ÑкÑаÑнÑÑÐºÐ¾Ñ Ð¿Ð¸ÑемноÑÑÑ Ñа мови" cultural on november 9
: Freedom Day
-"ÐÐµÐ½Ñ Ð¡Ð²Ð¾Ð±Ð¾Ð´Ð¸" on november 22
+"ÐÐµÐ½Ñ Ð¡Ð²Ð¾Ð±Ð¾Ð´Ð¸" cultural on november 22
: Holodomor Memorial Day
-"ÐÐµÐ½Ñ Ð¿Ð°Ð¼'ÑÑÑ Ð¶ÐµÑÑв голодомоÑÑв" on fourth saturday in november
+"ÐÐµÐ½Ñ Ð¿Ð°Ð¼'ÑÑÑ Ð¶ÐµÑÑв голодомоÑÑв" cultural on fourth saturday in november
:: School
:: Daylight Saving
: DST forward
-"ÐеÑеÑ
Ñд на лÑÑнÑй ÑаÑ" on last sunday in march
+"ÐеÑеÑ
Ñд на лÑÑнÑй ÑаÑ" seasonal on last sunday in march
: DST back
-"ÐеÑеÑ
Ñд на зимовий ÑаÑ" on last sunday in october
+"ÐеÑеÑ
Ñд на зимовий ÑаÑ" seasonal on last sunday in october
:: Seasons
: Spring
-"ÐоÑаÑок веÑни" on march 1
+"ÐоÑаÑок веÑни" seasonal on march 1
: Summer
-"ÐоÑаÑок лÑÑа" on june 1
+"ÐоÑаÑок лÑÑа" seasonal on june 1
: Autumn
-"ÐоÑаÑок оÑенÑ" on september 1
+"ÐоÑаÑок оÑенÑ" seasonal on september 1
: Winter
-"ÐоÑаÑок зими" on december 1
+"ÐоÑаÑок зими" seasonal on december 1
:: Name Days
:: Professions
: Customs Official Day
-"ÐÑжнаÑодний Ð´ÐµÐ½Ñ Ð¼Ð¸Ñника" on january 26
+"ÐÑжнаÑодний Ð´ÐµÐ½Ñ Ð¼Ð¸Ñника" cultural on january 26
: Firefighter's Day
-"ÐÐµÐ½Ñ Ð¿ÑаÑÑвникÑв Ð¿Ð¾Ð¶ÐµÐ¶Ð½Ð¾Ñ Ð¾Ñ
оÑони" on january 29
+"ÐÐµÐ½Ñ Ð¿ÑаÑÑвникÑв Ð¿Ð¾Ð¶ÐµÐ¶Ð½Ð¾Ñ Ð¾Ñ
оÑони" cultural on january 29
: Soviet Troop Withdrawal from Afghanistan Day
-"ÐÐµÐ½Ñ Ð²ÑанÑÐ²Ð°Ð½Ð½Ñ ÑÑаÑникÑв бойовиÑ
дÑй на ÑеÑиÑоÑÑÑ ÑнÑиÑ
деÑжав" on february 15
+"ÐÐµÐ½Ñ Ð²ÑанÑÐ²Ð°Ð½Ð½Ñ ÑÑаÑникÑв бойовиÑ
дÑй на ÑеÑиÑоÑÑÑ ÑнÑиÑ
деÑжав" cultural on february 15
: Defender of the Fatherland Day
-"ÐÐµÐ½Ñ Ð·Ð°Ñ
иÑника ÐÑÑÑизни" on february 23
+"ÐÐµÐ½Ñ Ð·Ð°Ñ
иÑника ÐÑÑÑизни" cultural on february 23
: Land Surveyor's Day
-"ÐÐµÐ½Ñ Ð·ÐµÐ¼Ð»ÐµÐ²Ð¿Ð¾ÑÑдника" on second saturday in march
+"ÐÐµÐ½Ñ Ð·ÐµÐ¼Ð»ÐµÐ²Ð¿Ð¾ÑÑдника" cultural on second saturday in march
: Day of the Housing and Consumer Services
-"ÐÐµÐ½Ñ Ð¿ÑаÑÑвникÑв жиÑлово-комÑналÑного гоÑподаÑÑÑва Ñ Ð¿Ð¾Ð±ÑÑового обÑлÑговÑÐ²Ð°Ð½Ð½Ñ Ð½Ð°ÑеленнÑ" on third sunday in march
+"ÐÐµÐ½Ñ Ð¿ÑаÑÑвникÑв жиÑлово-комÑналÑного гоÑподаÑÑÑва Ñ Ð¿Ð¾Ð±ÑÑового обÑлÑговÑÐ²Ð°Ð½Ð½Ñ Ð½Ð°ÑеленнÑ" cultural on third sunday in march
: Day of Ukrainian Culture and Folk Art
-"ÐÑеÑкÑаÑнÑÑкий Ð´ÐµÐ½Ñ Ð¿ÑаÑÑвникÑв кÑлÑÑÑÑи Ñа амаÑоÑÑв наÑодного миÑÑеÑÑва" on march 23
+"ÐÑеÑкÑаÑнÑÑкий Ð´ÐµÐ½Ñ Ð¿ÑаÑÑвникÑв кÑлÑÑÑÑи Ñа амаÑоÑÑв наÑодного миÑÑеÑÑва" cultural on march 23
: Ukrainian Day Against TB
-"ÐÑеÑкÑаÑнÑÑкий Ð´ÐµÐ½Ñ Ð±Ð¾ÑоÑÑби Ñз заÑ
воÑÑваннÑм на ÑÑбеÑкÑлÑоз" on march 24
+"ÐÑеÑкÑаÑнÑÑкий Ð´ÐµÐ½Ñ Ð±Ð¾ÑоÑÑби Ñз заÑ
воÑÑваннÑм на ÑÑбеÑкÑлÑоз" cultural on march 24
: Day of Security Service of Ukraine
-"ÐÐµÐ½Ñ Ð¡Ð»Ñжби безпеки УкÑаÑни" on march 25
+"ÐÐµÐ½Ñ Ð¡Ð»Ñжби безпеки УкÑаÑни" cultural on march 25
: Day of the Interior Troops of the Ministry of Internal Affairs of Ukraine
-"ÐÐµÐ½Ñ Ð²Ð½ÑÑÑÑÑнÑÑ
вÑйÑÑк ÐÑнÑÑÑеÑÑÑва внÑÑÑÑÑнÑÑ
ÑпÑав УкÑаÑни" on march 26
+"ÐÐµÐ½Ñ Ð²Ð½ÑÑÑÑÑнÑÑ
вÑйÑÑк ÐÑнÑÑÑеÑÑÑва внÑÑÑÑÑнÑÑ
ÑпÑав УкÑаÑни" cultural on march 26
: Geologist's Day
-"ÐÐµÐ½Ñ Ð³ÐµÐ¾Ð»Ð¾Ð³Ð°" on first sunday in april
+"ÐÐµÐ½Ñ Ð³ÐµÐ¾Ð»Ð¾Ð³Ð°" cultural on first sunday in april
: Day of Rocket-space Industry of Ukraine
-"ÐÐµÐ½Ñ Ð¿ÑаÑÑвникÑв ÑакеÑно-коÑмÑÑÐ½Ð¾Ñ Ð³Ð°Ð»ÑÐ·Ñ Ð£ÐºÑаÑни" on april 12
+"ÐÐµÐ½Ñ Ð¿ÑаÑÑвникÑв ÑакеÑно-коÑмÑÑÐ½Ð¾Ñ Ð³Ð°Ð»ÑÐ·Ñ Ð£ÐºÑаÑни" cultural on april 12
: Day of Labor
-"ÐÐµÐ½Ñ Ð¾Ñ
оÑони пÑаÑÑ" on april 28
+"ÐÐµÐ½Ñ Ð¾Ñ
оÑони пÑаÑÑ" cultural on april 28
: Bank's Day
-"ÐÐµÐ½Ñ Ð±Ð°Ð½ÐºÑвÑÑкиÑ
пÑаÑÑвникÑв" on may 20
+"ÐÐµÐ½Ñ Ð±Ð°Ð½ÐºÑвÑÑкиÑ
пÑаÑÑвникÑв" cultural on may 20
: Scientist's Day
-"ÐÐµÐ½Ñ Ð½Ð°Ñки" on third saturday in may
+"ÐÐµÐ½Ñ Ð½Ð°Ñки" cultural on third saturday in may
: Polygraphist's Day
-"ÐÐµÐ½Ñ Ð¿ÑаÑÑвникÑв видавниÑÑв, полÑгÑаÑÑÑ Ñ ÐºÐ½Ð¸Ð³Ð¾ÑозповÑÑдженнÑ" on last saturday in may
+"ÐÐµÐ½Ñ Ð¿ÑаÑÑвникÑв видавниÑÑв, полÑгÑаÑÑÑ Ñ ÐºÐ½Ð¸Ð³Ð¾ÑозповÑÑдженнÑ" cultural on last saturday in may
: Chemist's Day
-"ÐÐµÐ½Ñ Ñ
ÑмÑка" on last sunday in may
+"ÐÐµÐ½Ñ Ñ
ÑмÑка" cultural on last sunday in may
: Peacekeeper's Day
-"ÐÑжнаÑодний Ð´ÐµÐ½Ñ Ð¼Ð¸ÑоÑвоÑÑÑв ÐÑганÑзаÑÑÑ Ðб'ÑднаниÑ
ÐаÑÑй" on may 29
+"ÐÑжнаÑодний Ð´ÐµÐ½Ñ Ð¼Ð¸ÑоÑвоÑÑÑв ÐÑганÑзаÑÑÑ Ðб'ÑднаниÑ
ÐаÑÑй" cultural on may 29
: Frontier-guard Day
-"ÐÐµÐ½Ñ Ð¿ÑикоÑдонника" on may 28
+"ÐÐµÐ½Ñ Ð¿ÑикоÑдонника" cultural on may 28
: Journalist's Day
-"ÐÐµÐ½Ñ Ð¶ÑÑналÑÑÑа" on june 6
+"ÐÐµÐ½Ñ Ð¶ÑÑналÑÑÑа" cultural on june 6
: Local Industry Day
-"ÐÐµÐ½Ñ Ð¿ÑаÑÑвникÑв мÑÑÑÐµÐ²Ð¾Ñ Ð¿ÑомиÑловоÑÑÑ" on first sunday in june
+"ÐÐµÐ½Ñ Ð¿ÑаÑÑвникÑв мÑÑÑÐµÐ²Ð¾Ñ Ð¿ÑомиÑловоÑÑÑ" cultural on first sunday in june
: Water Industry Day
-"ÐÐµÐ½Ñ Ð¿ÑаÑÑвникÑв водного гоÑподаÑÑÑва" on first sunday in june
+"ÐÐµÐ½Ñ Ð¿ÑаÑÑвникÑв водного гоÑподаÑÑÑва" cultural on first sunday in june
: Light Industry Day
-"ÐÐµÐ½Ñ Ð¿ÑаÑÑвникÑв Ð»ÐµÐ³ÐºÐ¾Ñ Ð¿ÑомиÑловоÑÑÑ" on second sunday in june
+"ÐÐµÐ½Ñ Ð¿ÑаÑÑвникÑв Ð»ÐµÐ³ÐºÐ¾Ñ Ð¿ÑомиÑловоÑÑÑ" cultural on second sunday in june
: Medical Day
-"ÐÐµÐ½Ñ Ð¼ÐµÐ´Ð¸Ñного пÑаÑÑвника" on third sunday in june
+"ÐÐµÐ½Ñ Ð¼ÐµÐ´Ð¸Ñного пÑаÑÑвника" cultural on third sunday in june
: Authorities Day
-"ÐÐµÐ½Ñ Ð´ÐµÑÐ¶Ð°Ð²Ð½Ð¾Ñ ÑлÑжби" on june 23
+"ÐÐµÐ½Ñ Ð´ÐµÑÐ¶Ð°Ð²Ð½Ð¾Ñ ÑлÑжби" cultural on june 23
: Ukrainian Custom Official Day
-"ÐÐµÐ½Ñ Ð¼Ð¸ÑÐ½Ð¾Ñ ÑлÑжби УкÑаÑни" on june 25
+"ÐÐµÐ½Ñ Ð¼Ð¸ÑÐ½Ð¾Ñ ÑлÑжби УкÑаÑни" cultural on june 25
: Architecture Day
-"ÐÐµÐ½Ñ Ð°ÑÑ
ÑÑекÑÑÑи УкÑаÑни" on july 1
+"ÐÐµÐ½Ñ Ð°ÑÑ
ÑÑекÑÑÑи УкÑаÑни" cultural on july 1
: Taxman's Day
-"ÐÐµÐ½Ñ Ð¿ÑаÑÑвника деÑÐ¶Ð°Ð²Ð½Ð¾Ñ Ð¿Ð¾Ð´Ð°ÑÐºÐ¾Ð²Ð¾Ñ ÑлÑжби УкÑаÑни" on july 2
+"ÐÐµÐ½Ñ Ð¿ÑаÑÑвника деÑÐ¶Ð°Ð²Ð½Ð¾Ñ Ð¿Ð¾Ð´Ð°ÑÐºÐ¾Ð²Ð¾Ñ ÑлÑжби УкÑаÑни" cultural on july 2
: Antiaircraft Defence Day
-"ÐÐµÐ½Ñ ÐÑйÑÑк ÐÑоÑиповÑÑÑÑÐ½Ð¾Ñ Ð¾Ð±Ð¾Ñони" on first sunday in july
+"ÐÐµÐ½Ñ ÐÑйÑÑк ÐÑоÑиповÑÑÑÑÐ½Ð¾Ñ Ð¾Ð±Ð¾Ñони" cultural on first sunday in july
: Navy Day
-"ÐÐµÐ½Ñ ÐÑйÑÑково-ÐоÑÑÑкиÑ
Сил" on first sunday in july
+"ÐÐµÐ½Ñ ÐÑйÑÑково-ÐоÑÑÑкиÑ
Сил" cultural on first sunday in july
: Sailor's Day
-"ÐÐµÐ½Ñ Ð¿ÑаÑÑвникÑв моÑÑÑкого Ñа ÑÑÑкового ÑлоÑÑ" on first sunday in july
+"ÐÐµÐ½Ñ Ð¿ÑаÑÑвникÑв моÑÑÑкого Ñа ÑÑÑкового ÑлоÑÑ" cultural on first sunday in july
: Fishman's Day
-"ÐÐµÐ½Ñ Ñибалки" on second sunday in july
+"ÐÐµÐ½Ñ Ñибалки" cultural on second sunday in july
: Bookkeeper's Day
-"ÐÐµÐ½Ñ Ð±ÑÑ
галÑеÑа" on july 16
+"ÐÐµÐ½Ñ Ð±ÑÑ
галÑеÑа" cultural on july 16
: Metallurgical and Miner's Day
-"ÐÐµÐ½Ñ Ð¿ÑаÑÑвникÑв меÑалÑÑгÑÐ¹Ð½Ð¾Ñ Ñа гÑÑниÑодобÑÐ²Ð½Ð¾Ñ Ð¿ÑомиÑловоÑÑÑ" on third sunday in july
+"ÐÐµÐ½Ñ Ð¿ÑаÑÑвникÑв меÑалÑÑгÑÐ¹Ð½Ð¾Ñ Ñа гÑÑниÑодобÑÐ²Ð½Ð¾Ñ Ð¿ÑомиÑловоÑÑÑ" cultural on third sunday in july
: Tradesman's Day
-"ÐÐµÐ½Ñ Ð¿ÑаÑÑвникÑв ÑоÑгÑвлÑ" on last sunday in july
+"ÐÐµÐ½Ñ Ð¿ÑаÑÑвникÑв ÑоÑгÑвлÑ" cultural on last sunday in july
: Airborne Day
-"ÐÐµÐ½Ñ Ð°ÐµÑомобÑлÑниÑ
вÑйÑÑк" on august 2
+"ÐÐµÐ½Ñ Ð°ÐµÑомобÑлÑниÑ
вÑйÑÑк" cultural on august 2
: Military Operator's Day
-"ÐÐµÐ½Ñ Ð²ÑйÑÑк зв'ÑзкÑ" on august 8
+"ÐÐµÐ½Ñ Ð²ÑйÑÑк зв'ÑзкÑ" cultural on august 8
: Builder's Day
-"ÐÐµÐ½Ñ Ð±ÑдÑвелÑника" on second sunday in august
+"ÐÐµÐ½Ñ Ð±ÑдÑвелÑника" cultural on second sunday in august
: Veterenary Day
-"ÐÐµÐ½Ñ Ð¿ÑаÑÑвникÑв веÑеÑинаÑÐ½Ð¾Ñ Ð¼ÐµÐ´Ð¸Ñини" on second sunday in august
+"ÐÐµÐ½Ñ Ð¿ÑаÑÑвникÑв веÑеÑинаÑÐ½Ð¾Ñ Ð¼ÐµÐ´Ð¸Ñини" cultural on second sunday in august
: Beekeeper's Day
-"ÐÐµÐ½Ñ Ð¿Ð°ÑÑÑника" on august 19
+"ÐÐµÐ½Ñ Ð¿Ð°ÑÑÑника" cultural on august 19
: Aviation Day
-"ÐÐµÐ½Ñ Ð°Ð²ÑаÑÑÑ" on last saturday in august
+"ÐÐµÐ½Ñ Ð°Ð²ÑаÑÑÑ" cultural on last saturday in august
: Miner's Day
-"ÐÐµÐ½Ñ ÑаÑ
ÑаÑÑ" on last sunday in august
+"ÐÐµÐ½Ñ ÑаÑ
ÑаÑÑ" cultural on last sunday in august
: Businessman's Day
-"ÐÐµÐ½Ñ Ð¿ÑдпÑиÑмÑÑ" on first sunday in september
+"ÐÐµÐ½Ñ Ð¿ÑдпÑиÑмÑÑ" cultural on first sunday in september
:Sport Day
-"ÐÐµÐ½Ñ ÑÑзиÑÐ½Ð¾Ñ ÐºÑлÑÑÑÑи Ñ ÑпоÑÑÑ" on second saturday in september
+"ÐÐµÐ½Ñ ÑÑзиÑÐ½Ð¾Ñ ÐºÑлÑÑÑÑи Ñ ÑпоÑÑÑ" cultural on second saturday in september
: Tankman's Day
-"ÐÐµÐ½Ñ ÑанкÑÑÑÑв" on second sunday in september
+"ÐÐµÐ½Ñ ÑанкÑÑÑÑв" cultural on second sunday in september
: Oil and Gas Industry Day
-"ÐÐµÐ½Ñ Ð¿ÑаÑÑвникÑв наÑÑовоÑ, Ð³Ð°Ð·Ð¾Ð²Ð¾Ñ Ñа наÑÑопеÑеÑÐ¾Ð±Ð½Ð¾Ñ Ð¿ÑомиÑловоÑÑÑ" on second sunday in september
+"ÐÐµÐ½Ñ Ð¿ÑаÑÑвникÑв наÑÑовоÑ, Ð³Ð°Ð·Ð¾Ð²Ð¾Ñ Ñа наÑÑопеÑеÑÐ¾Ð±Ð½Ð¾Ñ Ð¿ÑомиÑловоÑÑÑ" cultural on second sunday in september
: Ukrainian Cinema Day
-"ÐÐµÐ½Ñ ÑкÑаÑнÑÑкого кÑно" on second saturday in september
+"ÐÐµÐ½Ñ ÑкÑаÑнÑÑкого кÑно" cultural on second saturday in september
: Civil Defence Day
-"ÐÐµÐ½Ñ Ð¿ÑаÑÑвникÑв ÑивÑлÑного заÑ
иÑÑÑ" on september 17
+"ÐÐµÐ½Ñ Ð¿ÑаÑÑвникÑв ÑивÑлÑного заÑ
иÑÑÑ" cultural on september 17
: Peace Day
-"ÐÐµÐ½Ñ Ð¼Ð¸ÑÑ" on september 21
+"ÐÐµÐ½Ñ Ð¼Ð¸ÑÑ" cultural on september 21
: Partizan's Day
-"ÐÐµÐ½Ñ Ð¿Ð°ÑÑизанÑÑÐºÐ¾Ñ Ñлави" on september 22
+"ÐÐµÐ½Ñ Ð¿Ð°ÑÑизанÑÑÐºÐ¾Ñ Ñлави" cultural on september 22
: Pharmacist's Day
-"ÐÐµÐ½Ñ ÑаÑмаÑевÑиÑного пÑаÑÑвника" on third saturday in september
+"ÐÐµÐ½Ñ ÑаÑмаÑевÑиÑного пÑаÑÑвника" cultural on third saturday in september
: Inventor's Day
-"ÐÐµÐ½Ñ Ð²Ð¸Ð½Ð°Ñ
Ñдника Ñ ÑаÑÑоналÑзаÑоÑа" on third saturday in september
+"ÐÐµÐ½Ñ Ð²Ð¸Ð½Ð°Ñ
Ñдника Ñ ÑаÑÑоналÑзаÑоÑа" cultural on third saturday in september
: Forest Guard Day
-"ÐÐµÐ½Ñ Ð¿ÑаÑÑвника лÑÑÑ" on third sunday in september
+"ÐÐµÐ½Ñ Ð¿ÑаÑÑвника лÑÑÑ" cultural on third sunday in september
: Machine Building Day
-"ÐÐµÐ½Ñ Ð¼Ð°ÑинобÑдÑвника" on fourth sunday in september
+"ÐÐµÐ½Ñ Ð¼Ð°ÑинобÑдÑвника" cultural on fourth sunday in september
: Knowledge Day
-"ÐÐµÐ½Ñ Ð·Ð½Ð°Ð½Ñ" on september 1
+"ÐÐµÐ½Ñ Ð·Ð½Ð°Ð½Ñ" cultural on september 1
: Tourist's Day
-"ÐÐµÐ½Ñ ÑÑÑизмÑ" on september 27
+"ÐÐµÐ½Ñ ÑÑÑизмÑ" cultural on september 27
: Education Day
-"ÐÐµÐ½Ñ Ð¿ÑаÑÑвникÑв оÑвÑÑи" on first sunday in october
+"ÐÐµÐ½Ñ Ð¿ÑаÑÑвникÑв оÑвÑÑи" cultural on first sunday in october
: Lawyer's Day
-"ÐÐµÐ½Ñ ÑÑиÑÑа" on october 8
+"ÐÐµÐ½Ñ ÑÑиÑÑа" cultural on october 8
: Standartization Day
-"ÐÐµÐ½Ñ Ð¿ÑаÑÑвникÑв ÑÑандаÑÑизаÑÑÑ Ñа меÑÑологÑÑ" on october 10
+"ÐÐµÐ½Ñ Ð¿ÑаÑÑвникÑв ÑÑандаÑÑизаÑÑÑ Ñа меÑÑологÑÑ" cultural on october 10
: Epidemiologist's Day
-"ÐÐµÐ½Ñ Ð¿ÑаÑÑвникÑв деÑÐ¶Ð°Ð²Ð½Ð¾Ñ ÑанÑÑаÑно-епÑдемÑологÑÑÐ½Ð¾Ñ ÑлÑжби" on second sunday in october
+"ÐÐµÐ½Ñ Ð¿ÑаÑÑвникÑв деÑÐ¶Ð°Ð²Ð½Ð¾Ñ ÑанÑÑаÑно-епÑдемÑологÑÑÐ½Ð¾Ñ ÑлÑжби" cultural on second sunday in october
: Artist's Day
-"ÐÐµÐ½Ñ Ñ
Ñдожника" on second sunday in october
+"ÐÐµÐ½Ñ Ñ
Ñдожника" cultural on second sunday in october
: Food Industry Day
-"ÐÐµÐ½Ñ Ð¿ÑаÑÑвникÑв Ñ
аÑÑÐ¾Ð²Ð¾Ñ Ð¿ÑомиÑловоÑÑÑ" on third sunday in october
+"ÐÐµÐ½Ñ Ð¿ÑаÑÑвникÑв Ñ
аÑÑÐ¾Ð²Ð¾Ñ Ð¿ÑомиÑловоÑÑÑ" cultural on third sunday in october
: Automobilist's Day
-"ÐÐµÐ½Ñ Ð°Ð²ÑомобÑлÑÑÑа Ñ Ð´Ð¾Ñожника" on last sunday in october
+"ÐÐµÐ½Ñ Ð°Ð²ÑомобÑлÑÑÑа Ñ Ð´Ð¾Ñожника" cultural on last sunday in october
: Miltary Engineering Day
-"ÐÐµÐ½Ñ ÑнженеÑниÑ
вÑйÑÑк" on november 3
+"ÐÐµÐ½Ñ ÑнженеÑниÑ
вÑйÑÑк" cultural on november 3
: Artillery Day
-"ÐÐµÐ½Ñ ÑакеÑниÑ
вÑйÑÑк Ñ Ð°ÑÑилеÑÑÑ" on november 3
+"ÐÐµÐ½Ñ ÑакеÑниÑ
вÑйÑÑк Ñ Ð°ÑÑилеÑÑÑ" cultural on november 3
: Railroad Day
-"ÐÐµÐ½Ñ Ð·Ð°Ð»ÑзниÑника" on november 4
+"ÐÐµÐ½Ñ Ð·Ð°Ð»ÑзниÑника" cultural on november 4
: Social Woker's Day
-"ÐÐµÐ½Ñ Ð¿ÑаÑÑвника ÑоÑÑалÑÐ½Ð¾Ñ ÑÑеÑи" on first sunday in november
+"ÐÐµÐ½Ñ Ð¿ÑаÑÑвника ÑоÑÑалÑÐ½Ð¾Ñ ÑÑеÑи" cultural on first sunday in november
: Telecommunication Day
-"ÐÐµÐ½Ñ Ð¿ÑаÑÑвникÑв ÑадÑо, ÑелебаÑÐµÐ½Ð½Ñ Ñа зв'ÑзкÑ" on november 16
+"ÐÐµÐ½Ñ Ð¿ÑаÑÑвникÑв ÑадÑо, ÑелебаÑÐµÐ½Ð½Ñ Ñа зв'ÑзкÑ" cultural on november 16
: Student's Day
-"ÐÐµÐ½Ñ ÑÑÑденÑа" on november 17
+"ÐÐµÐ½Ñ ÑÑÑденÑа" cultural on november 17
: Meteorology Day
-"ÐÐµÐ½Ñ Ð¿ÑаÑÑвникÑв гÑдÑомеÑеоÑологÑÑÐ½Ð¾Ñ ÑлÑжби" on november 19
+"ÐÐµÐ½Ñ Ð¿ÑаÑÑвникÑв гÑдÑомеÑеоÑологÑÑÐ½Ð¾Ñ ÑлÑжби" cultural on november 19
: Glass Worker's Day
-"ÐÐµÐ½Ñ ÑкловиÑобника" on november 19
+"ÐÐµÐ½Ñ ÑкловиÑобника" cultural on november 19
: Farmer's Day
-"ÐÐµÐ½Ñ Ð¿ÑаÑÑвникÑв ÑÑлÑÑÑкого гоÑподаÑÑÑва" on third sunday in november
+"ÐÐµÐ½Ñ Ð¿ÑаÑÑвникÑв ÑÑлÑÑÑкого гоÑподаÑÑÑва" cultural on third sunday in november
: Procuracy Day
-"ÐÐµÐ½Ñ Ð¿ÑаÑÑвникÑв пÑокÑÑаÑÑÑи" on december 1
+"ÐÐµÐ½Ñ Ð¿ÑаÑÑвникÑв пÑокÑÑаÑÑÑи" cultural on december 1
: Statistics Day
-"ÐÐµÐ½Ñ Ð¿ÑаÑÑвникÑв ÑÑаÑиÑÑики" on december 5
+"ÐÐµÐ½Ñ Ð¿ÑаÑÑвникÑв ÑÑаÑиÑÑики" cultural on december 5
: Army Day
-"ÐÐµÐ½Ñ ÐбÑойниÑ
Сил УкÑаÑни" on december 6
+"ÐÐµÐ½Ñ ÐбÑойниÑ
Сил УкÑаÑни" cultural on december 6
: Local Authorities Day
-"ÐÐµÐ½Ñ Ð¼ÑÑÑевого ÑамовÑÑдÑваннÑ" on december 7
+"ÐÐµÐ½Ñ Ð¼ÑÑÑевого ÑамовÑÑдÑваннÑ" cultural on december 7
: Infantry Day
-"ÐÐµÐ½Ñ Ð¡ÑÑ
опÑÑниÑ
вÑйÑÑк УкÑаÑни" on december 12
+"ÐÐµÐ½Ñ Ð¡ÑÑ
опÑÑниÑ
вÑйÑÑк УкÑаÑни" cultural on december 12
: Chornobyl Worker's Day
-"ÐÐµÐ½Ñ Ð²ÑанÑÐ²Ð°Ð½Ð½Ñ ÑÑаÑникÑв лÑквÑдаÑÑÑ Ð½Ð°ÑлÑдкÑв аваÑÑÑ Ð½Ð° ЧоÑнобилÑÑÑкÑй ÐÐС" on december 14
+"ÐÐµÐ½Ñ Ð²ÑанÑÐ²Ð°Ð½Ð½Ñ ÑÑаÑникÑв лÑквÑдаÑÑÑ Ð½Ð°ÑлÑдкÑв аваÑÑÑ Ð½Ð° ЧоÑнобилÑÑÑкÑй ÐÐС" cultural on december 14
: Court Worker's Day
-"ÐÐµÐ½Ñ Ð¿ÑаÑÑвникÑв ÑÑдÑ" on december 15
+"ÐÐµÐ½Ñ Ð¿ÑаÑÑвникÑв ÑÑдÑ" cultural on december 15
: Advocasy Day
-"ÐÐµÐ½Ñ Ð°Ð´Ð²Ð¾ÐºÐ°ÑÑÑи" on december 19
+"ÐÐµÐ½Ñ Ð°Ð´Ð²Ð¾ÐºÐ°ÑÑÑи" cultural on december 19
: Militia Day
-"ÐÐµÐ½Ñ Ð¼ÑлÑÑÑÑ" on december 20
+"ÐÐµÐ½Ñ Ð¼ÑлÑÑÑÑ" cultural on december 20
: Diplomatist's Day
-"ÐÐµÐ½Ñ Ð¿ÑаÑÑвникÑв дипломаÑиÑÐ½Ð¾Ñ ÑлÑжби" on december 22
+"ÐÐµÐ½Ñ Ð¿ÑаÑÑвникÑв дипломаÑиÑÐ½Ð¾Ñ ÑлÑжби" cultural on december 22
: Power Engineering Day
-"ÐÐµÐ½Ñ ÐµÐ½ÐµÑгеÑика" on december 22
+"ÐÐµÐ½Ñ ÐµÐ½ÐµÑгеÑика" cultural on december 22
: Archivist's Day
-"ÐÐµÐ½Ñ Ð¿ÑаÑÑвникÑв аÑÑ
ÑвниÑ
ÑÑÑанов" on december 24
+"ÐÐµÐ½Ñ Ð¿ÑаÑÑвникÑв аÑÑ
ÑвниÑ
ÑÑÑанов" cultural on december 24
diff --git a/kholidays/holidays/plan2/holiday_us_en-us b/kholidays/holidays/plan2/holiday_us_en-us
index 347fad5..08f5f9a 100644
--- a/kholidays/holidays/plan2/holiday_us_en-us
+++ b/kholidays/holidays/plan2/holiday_us_en-us
@@ -19,54 +19,54 @@ description "National holiday file for USA"
:: Public Holidays
:: Federal Holidays
-"New Year's Day" weekend on january 1
-"Martin Luther King's Birthday" weekend on third monday in january
-"President's Day" weekend on third monday in february
-"Memorial Day" weekend on last monday in may
-"Independence Day" weekend on july 4
-"Labor Day" weekend on first monday in september
-"Columbus Day" weekend on second monday in october
-"Veterans Day" weekend on november 11
-"Thanksgiving" weekend on fourth thursday in november
-"Christmas Day" weekend on december 25
+"New Year's Day" public on january 1
+"Martin Luther King's Birthday" public on third monday in january
+"President's Day" public on third monday in february
+"Memorial Day" public on last monday in may
+"Independence Day" public on july 4
+"Labor Day" public on first monday in september
+"Columbus Day" public on second monday in october
+"Veterans Day" public on november 11
+"Thanksgiving" public on fourth thursday in november
+"Christmas Day" public on december 25
:: Religious
-"Easter" on easter
-"Ash Wednesday" on easter minus 46 days
-"Pentecost" on easter plus 49 days
-"Ascension" on easter plus 39 days
-"Trinity" on easter plus 56 days
-"Corpus Christi" on easter plus 53 days
+"Easter" religious on easter
+"Ash Wednesday" religious on easter minus 46 days
+"Pentecost" religious on easter plus 49 days
+"Ascension" religious on easter plus 39 days
+"Trinity" religious on easter plus 56 days
+"Corpus Christi" religious on easter plus 53 days
:: Financial
:: Cultural
-"Groundhog Day" on february 2
-"Lincoln's Birthday" on february 12
-"St. Valentine's Day" on february 14
-"Susan B. Anthony's Day" on february 15
-"St. Patrick's Day" on march 17
-"Arbor Day" on last friday in april
-"Loyalty Day" on may 1
-"Mother's Day" on second sunday in may
-"Armed Forces Day" on third saturday in may
-"Father's Day" on third sunday in june
-"Citizenship Day" on september 17
-"Child Health Day" on first monday in september
-"World Poetry Day" on october 15
-"United Nations' Day" on october 24
-"Halloween" on october 31
-"Bill of Rights' Day" on december 15
-"Wright Brothers' Day" on december 17
+"Groundhog Day" cultural on february 2
+"Lincoln's Birthday" cultural on february 12
+"St. Valentine's Day" cultural on february 14
+"Susan B. Anthony's Day" cultural on february 15
+"St. Patrick's Day" cultural on march 17
+"Arbor Day" cultural on last friday in april
+"Loyalty Day" cultural on may 1
+"Mother's Day" cultural on second sunday in may
+"Armed Forces Day" cultural on third saturday in may
+"Father's Day" cultural on third sunday in june
+"Citizenship Day" cultural on september 17
+"Child Health Day" cultural on first monday in september
+"World Poetry Day" cultural on october 15
+"United Nations' Day" cultural on october 24
+"Halloween" cultural on october 31
+"Bill of Rights' Day" cultural on december 15
+"Wright Brothers' Day" cultural on december 17
:: School
:: Daylight Saving
:: Seasons
-"Spring Begins" on march 22
-"Summer Begins" on june 22
-"Fall Begins" on september 22
-"Winter Begins" on december 22
+"Spring Begins" seasonal on march 22
+"Summer Begins" seasonal on june 22
+"Fall Begins" seasonal on september 22
+"Winter Begins" seasonal on december 22
:: Name Days
diff --git a/kholidays/holidays/plan2/holiday_uy_es b/kholidays/holidays/plan2/holiday_uy_es
index da78d47..05d513b 100644
--- a/kholidays/holidays/plan2/holiday_uy_es
+++ b/kholidays/holidays/plan2/holiday_uy_es
@@ -21,19 +21,19 @@ language "es"
:description "(please add description in source language) National holiday file for Uruguay"
:: Public Holidays
-"Año nuevo" weekend on january 1
-"Jura de la constituación" weekend on july 18
-"Declaratoria de Independencia" weekend on august 25
-"DÃa del Trabajo" weekend on may 1
-"DÃa de los difuntos" weekend on november 2
-"Navidad" weekend on december 25
+"Año nuevo" public on january 1
+"Jura de la constituación" public on july 18
+"Declaratoria de Independencia" public on august 25
+"DÃa del Trabajo" public on may 1
+"DÃa de los difuntos" public on november 2
+"Navidad" public religious on december 25
:: Religious
-"Carnaval" on easter minus 47 days length 2 days
-"Jueves santo" on easter minus 3 days
-"Viernes santo" on easter minus 2 days
-"Sábado de gloria" on easter minus 1 day
-"Domingo de Pascua" on easter
+"Carnaval" religious on easter minus 47 days length 2 days
+"Jueves santo" religious on easter minus 3 days
+"Viernes santo" religious on easter minus 2 days
+"Sábado de gloria" religious on easter minus 1 day
+"Domingo de Pascua" religious on easter
:: Financial
@@ -49,9 +49,9 @@ language "es"
:: To be sorted
-"DÃa de Reyes" on january 6
-"Desembarco 33 Orientales" on april 19
-"Batalla de las Piedras" on may 18
-"Natalicio de Artigas" on june 19
-"DÃa de las Américas" on october 18
+"DÃa de Reyes" civil on january 6
+"Desembarco 33 Orientales" civil on april 19
+"Batalla de las Piedras" civil on may 18
+"Natalicio de Artigas" civil on june 19
+"DÃa de las Américas" civil on october 18
diff --git a/kholidays/holidays/plan2/holiday_wf_fr b/kholidays/holidays/plan2/holiday_wf_fr
index 951b9e5..0d788c4 100644
--- a/kholidays/holidays/plan2/holiday_wf_fr
+++ b/kholidays/holidays/plan2/holiday_wf_fr
@@ -33,90 +33,90 @@ description "Fêtes et jours fériés en Wallis-et-Futuna"
:: Public Holidays - Fêtes civiles et jours fériés
: New Year's Day
-"Jour de l'an" weekend on january 1
+"Jour de l'an" public on january 1
: Easter
-"Pâques" weekend on easter length 2 days
-"Ascension" weekend on easter plus 39 days
-"Pentecôte" weekend on easter plus 49 days length 2 days
+"Pâques" public religious on easter length 2 days
+"Ascension" public religious on easter plus 39 days
+"Pentecôte" public religious on easter plus 49 days length 2 days
: Labor day
-"Fête du Travail" weekend on may 1
+"Fête du Travail" public on may 1
: WW2 armistice
-"Fête de la Victoire" weekend on may 8
+"Fête de la Victoire" public on may 8
: National day
-"Fête nationale" weekend on july 14
+"Fête nationale" public on july 14
: Assumption
-"Assomption" weekend on august 15
+"Assomption" public religious on august 15
: All saints day
-"Toussaint" weekend on november 1
+"Toussaint" public religious on november 1
: WW1 armistice
-"Armistice de 1918" weekend on november 11
+"Armistice de 1918" public on november 11
: Christmas day
-"Noël" weekend on december 25
+"Noël" public religious on december 25
:: Territorial and Regional holidays
-"St-Pierre-Chanel" weekend on april 28
-"Fête du Territoire" weekend on july 29
+"St-Pierre-Chanel" public on april 28
+"Fête du Territoire" public on july 29
:: Religious - Fêtes religieuses
-"Ãpiphanie" on first sunday in january
+"Ãpiphanie" religious on first sunday in january
: Presentation of Jesus at the Temple
-"Chandeleur" on february 2
-"Mardi Gras" on easter minus 47 days
+"Chandeleur" religious on february 2
+"Mardi Gras" religious on easter minus 47 days
: Ash Wednesday
-"Mercredi des Cendres" on easter minus 46 days
+"Mercredi des Cendres" religious on easter minus 46 days
: Good Friday
-"Vendredi saint" on easter minus 2 days
+"Vendredi saint" religious on easter minus 2 days
: Day of the dead
-"Fête des morts" on november 2
-"St Ãtienne" on december 26
+"Fête des morts" religious on november 2
+"St Ãtienne" religious on december 26
:: Financial
:: Cultural - Fêtes civiles non fériées
: Valentine's day
-"Fête des amoureux" on february 14
+"Fête des amoureux" cultural on february 14
: Grandmothers' day
-"Fête des grands-mères" on first sunday in march
+"Fête des grands-mères" cultural on first sunday in march
: Remembrance of the Deportees
-"Souvenir des Déportés" on last sunday in april
+"Souvenir des Déportés" commemorative on last sunday in april
: Europe day
-"Journée de l'Europe" on may 9
+"Journée de l'Europe" cultural on may 9
: Remembrance of slavery
-"Mémoire de l'esclavage" on may 10
+"Mémoire de l'esclavage" commemorative on may 10
: Neighbors' day
-"Fête des voisins" on last tuesday in may
+"Fête des voisins" cultural on last tuesday in may
: Mothers' day, move if clashes with Pentecost
-"Fête des mères" ( ( [last sunday in may] == ([easter] + 49 days) ) ? [first sunday in june] : [last sunday in may] )
+"Fête des mères" cultural on ( ( [last sunday in may] == ([easter] + 49 days) ) ? [first sunday in june] : [last sunday in may] )
: or 'first sunday in june' if same day as Pentecôte
: Fathers' day
-"Fête des pères" on third sunday in june
+"Fête des pères" cultural on third sunday in june
: Fatalities in the 1st Indochina war
-"Morts en Indochine" on june 8
+"Morts en Indochine" commemorative on june 8
: Music day
-"Fête de la Musique" on june 21
+"Fête de la Musique" cultural on june 21
: St John
-"Fête de la Saint Jean" on june 24
+"Fête de la Saint Jean" cultural on june 24
: Homage to the Harkis
-"Hommage aux Harkis" on september 25
+"Hommage aux Harkis" commemorative on september 25
: Fatalities in the Algerian war
-"Morts en Algérie" on december 5
+"Morts en Algérie" commemorative on december 5
:: School
:: Daylight Saving
: summer
-"Heure d'été" on last sunday in march
+"Heure d'été" seasonal on last sunday in march
: winter
-"Heure d'hiver" on last sunday in october
+"Heure d'hiver" seasonal on last sunday in october
:: Seasons
: Spring
-"Printemps" on september 23
+"Printemps" seasonal on september 23
: Summer
-"Ãté" on december 21
+"Ãté" seasonal on december 21
: Fall
-"Automne" on march 20
+"Automne" seasonal on march 20
: Winter
-"Hiver" on june 21
+"Hiver" seasonal on june 21
:: Name Days
diff --git a/kholidays/holidays/plan2/holiday_yt_fr b/kholidays/holidays/plan2/holiday_yt_fr
index 74abba8..5a75c39 100644
--- a/kholidays/holidays/plan2/holiday_yt_fr
+++ b/kholidays/holidays/plan2/holiday_yt_fr
@@ -33,92 +33,92 @@ description "Fêtes et jours fériés en Mayotte"
:: Public Holidays - Fêtes civiles et jours fériés
: New Year's Day
-"Jour de l'an" weekend on january 1
+"Jour de l'an" public on january 1
: Easter
-"Pâques" weekend on easter length 2 days
-"Ascension" weekend on easter plus 39 days
-"Pentecôte" weekend on easter plus 49 days length 2 days
+"Pâques" public religious on easter length 2 days
+"Ascension" public religious on easter plus 39 days
+"Pentecôte" public religious on easter plus 49 days length 2 days
: Labor day
-"Fête du Travail" weekend on may 1
+"Fête du Travail" public on may 1
: WW2 armistice
-"Fête de la Victoire" weekend on may 8
+"Fête de la Victoire" public on may 8
: National day
-"Fête nationale" weekend on july 14
+"Fête nationale" public on july 14
: Assumption
-"Assomption" weekend on august 15
+"Assomption" public religious on august 15
: All saints day
-"Toussaint" weekend on november 1
+"Toussaint" public religious on november 1
: WW1 armistice
-"Armistice de 1918" weekend on november 11
+"Armistice de 1918" public on november 11
: Christmas day
-"Noël" weekend on december 25
+"Noël" public religious on december 25
:: Territorial and Regional holidays
: Abolition of Slavery
-"Abolition de l'esclavage" weekend on april 27
+"Abolition de l'esclavage" public on april 27
: Eid al-Adha
-"Aïd el-Kebir" weekend on hijri thualhijjah 10
+"Aïd el-Kebir" public religious on hijri thualhijjah 10
:: Religious - Fêtes religieuses
-"Ãpiphanie" on first sunday in january
+"Ãpiphanie" religious on first sunday in january
: Presentation of Jesus at the Temple
-"Chandeleur" on february 2
-"Mardi Gras" on easter minus 47 days
+"Chandeleur" religious on february 2
+"Mardi Gras" religious on easter minus 47 days
: Ash Wednesday
-"Mercredi des Cendres" on easter minus 46 days
+"Mercredi des Cendres" religious on easter minus 46 days
: Good Friday
-"Vendredi saint" on easter minus 2 days
+"Vendredi saint" religious on easter minus 2 days
: Day of the dead
-"Fête des morts" on november 2
-"St Ãtienne" on december 26
+"Fête des morts" religious on november 2
+"St Ãtienne" religious on december 26
:: Financial
:: Cultural - Fêtes civiles non fériées
: Valentine's day
-"Fête des amoureux" on february 14
+"Fête des amoureux" cultural on february 14
: Grandmothers' day
-"Fête des grands-mères" on first sunday in march
+"Fête des grands-mères" cultural on first sunday in march
: Remembrance of the Deportees
-"Souvenir des Déportés" on last sunday in april
+"Souvenir des Déportés" commemorative on last sunday in april
: Europe day
-"Journée de l'Europe" on may 9
+"Journée de l'Europe" cultural on may 9
: Remembrance of slavery
-"Mémoire de l'esclavage" on may 10
+"Mémoire de l'esclavage" commemorative on may 10
: Neighbors' day
-"Fête des voisins" on last tuesday in may
+"Fête des voisins" cultural on last tuesday in may
: Mothers' day, move if clashes with Pentecost
-"Fête des mères" ( ( [last sunday in may] == ([easter] + 49 days) ) ? [first sunday in june] : [last sunday in may] )
+"Fête des mères" cultural on ( ( [last sunday in may] == ([easter] + 49 days) ) ? [first sunday in june] : [last sunday in may] )
: or 'first sunday in june' if same day as Pentecôte
: Fathers' day
-"Fête des pères" on third sunday in june
+"Fête des pères" cultural on third sunday in june
: Fatalities in the 1st Indochina war
-"Morts en Indochine" on june 8
+"Morts en Indochine" commemorative on june 8
: Music day
-"Fête de la Musique" on june 21
+"Fête de la Musique" cultural on june 21
: St John
-"Fête de la Saint Jean" on june 24
+"Fête de la Saint Jean" cultural on june 24
: Homage to the Harkis
-"Hommage aux Harkis" on september 25
+"Hommage aux Harkis" commemorative on september 25
: Fatalities in the Algerian war
-"Morts en Algérie" on december 5
+"Morts en Algérie" commemorative on december 5
:: School
:: Daylight Saving
: summer
-"Heure d'été" on last sunday in march
+"Heure d'été" seasonal on last sunday in march
: winter
-"Heure d'hiver" on last sunday in october
+"Heure d'hiver" seasonal on last sunday in october
:: Seasons
: Spring
-"Printemps" on september 23
+"Printemps" seasonal on september 23
: Summer
-"Ãté" on december 21
+"Ãté" seasonal on december 21
: Fall
-"Automne" on march 20
+"Automne" seasonal on march 20
: Winter
-"Hiver" on june 21
+"Hiver" seasonal on june 21
:: Name Days
diff --git a/kholidays/holidays/plan2/holiday_za_en-gb b/kholidays/holidays/plan2/holiday_za_en-gb
index 34c1e0f..1da11e6 100644
--- a/kholidays/holidays/plan2/holiday_za_en-gb
+++ b/kholidays/holidays/plan2/holiday_za_en-gb
@@ -17,18 +17,18 @@ language "en_GB"
description "National holiday file for South African"
:: Public Holidays
-"New Year's Day" weekend on january 1 shift to monday if sunday
-"Human Rights Day" weekend on march 21 shift to monday if sunday
-"Good Friday" weekend on easter minus 2 day
-"Family Day" weekend on easter plus 1 day
-"Freedom Day" weekend on april 27 shift to monday if sunday
-"Workers Day" weekend on may 1 shift to monday if sunday
-"Youth Day" weekend on june 16 shift to monday if sunday
-"National Women's Day" weekend on august 9 shift to monday if sunday
-"Heritage Day" weekend on september 24 shift to monday if sunday
-"Day of Reconciliation" weekend on december 16 shift to monday if sunday
-"Christmas Day" weekend on december 25 shift to monday if sunday
-"Day of Goodwill" weekend on december 26 shift to monday if sunday
+"New Year's Day" public on january 1 shift to monday if sunday
+"Human Rights Day" public on march 21 shift to monday if sunday
+"Good Friday" public religious on easter minus 2 day
+"Family Day" public on easter plus 1 day
+"Freedom Day" public on april 27 shift to monday if sunday
+"Workers Day" public on may 1 shift to monday if sunday
+"Youth Day" public on june 16 shift to monday if sunday
+"National Women's Day" public on august 9 shift to monday if sunday
+"Heritage Day" public on september 24 shift to monday if sunday
+"Day of Reconciliation" public on december 16 shift to monday if sunday
+"Christmas Day" public religious on december 25 shift to monday if sunday
+"Day of Goodwill" public on december 26 shift to monday if sunday
:: Religious
diff --git a/kholidays/tests/holiday_gb-eaw_en-gb_Test b/kholidays/tests/holiday_gb-eaw_en-gb_Test
index 877dccb..0f3ea6b 100644
--- a/kholidays/tests/holiday_gb-eaw_en-gb_Test
+++ b/kholidays/tests/holiday_gb-eaw_en-gb_Test
@@ -15,38 +15,38 @@ description "A test file for multiple calendar systems"
: Holiday List Section
-"New Years Day" red on 1/1
-"New Years Day Bank Holiday" weekend on ((([january 1] == [saturday after ([january 1])]) || ([january 1] == [sunday after ([january 1])])) ? [monday after ([january 1])] : noop)
-"Easter Sunday" red on easter
-"Good Friday" red on easter minus 2
-"Easter Monday" red on easter plus 1
-"May Day" red on first monday in may
-"Spring Bank Holiday" red ((year == 2012) ? [june 4] : [last monday in may])
-"Diamond Jubilee Holiday" red 5.6.2012
-"Summer Bank Holiday" red on last monday in august
-"Christmas Day" red on december 25
-"Boxing Day" red on december 26
-"Boxing Day Bank Holiday" red on (([december 26] == [saturday after ([december 25])] ) ? [monday after ([december 25])] : (([december 26] == [sunday after ([december 25])] || [december 26] == [monday after ([december 25])]) ? [tuesday after ([december 25])] : noop ))
-
-"Muharram" blue hijri on muharram 1 length 2
-"Ashura" blue hijri on 1/9 length 2
-"Laylat ul Isra and Miraj" blue hijri on rajab 27
-"Eid ul-Fitr" blue hijri on shawwal 1 length 3
-"Eid al-Adha" blue hijri thualhijjah 10 length 4
-
-"Julian New Year" red julian january 1
-"Iranian New Year" red jalali farvardin 1
-"Ethiopian New Year" red ethiopian meskerem 1
-"Coptic New Year" red coptic thoout 1
-"Indian National New Year" red indiannational chaitra 1
-"Rosh Hashana" red hebrew tishrey 1
-"Lag BaOmer" red hebrew iyar 18
-"Purim Katan" red hebrew adari 14
-"Purim" red hebrew adar 14
-"Purim" red hebrew adarii 14
-
-"Leap Day" on ((leapyear year) ? [february 29] : noop)
-
-"Fête des mères" ( ( [last sunday in may] == ([easter] + 49 days) ) ? [first sunday in june] : [last sunday in may] )
-"Vendredi saint" on friday before ([easter])
+"New Years Day" public on 1/1
+"New Years Day Bank Holiday" public on ((([january 1] == [saturday after ([january 1])]) || ([january 1] == [sunday after ([january 1])])) ? [monday after ([january 1])] : noop)
+"Easter Sunday" public religious on easter
+"Good Friday" public religious on easter minus 2
+"Easter Monday" public on easter plus 1
+"May Day" public on first monday in may
+"Spring Bank Holiday" public ((year == 2012) ? [june 4] : [last monday in may])
+"Diamond Jubilee Holiday" public 5.6.2012
+"Summer Bank Holiday" public on last monday in august
+"Christmas Day" public religious on december 25
+"Boxing Day" public on december 26
+"Boxing Day Bank Holiday" public on (([december 26] == [saturday after ([december 25])] ) ? [monday after ([december 25])] : (([december 26] == [sunday after ([december 25])] || [december 26] == [monday after ([december 25])]) ? [tuesday after ([december 25])] : noop ))
+
+"Muharram" religious hijri on muharram 1 length 2
+"Ashura" religious hijri on 1/9 length 2
+"Laylat ul Isra and Miraj" religious hijri on rajab 27
+"Eid ul-Fitr" religious hijri on shawwal 1 length 3
+"Eid al-Adha" religious hijri thualhijjah 10 length 4
+
+"Julian New Year" public julian january 1
+"Iranian New Year" public jalali farvardin 1
+"Ethiopian New Year" public ethiopian meskerem 1
+"Coptic New Year" public coptic thoout 1
+"Indian National New Year" public indiannational chaitra 1
+"Rosh Hashana" public hebrew tishrey 1
+"Lag BaOmer" public hebrew iyar 18
+"Purim Katan" public religious hebrew adari 14
+"Purim" public religious hebrew adar 14
+"Purim" public religious hebrew adarii 14
+
+"Leap Day" civil on ((leapyear year) ? [february 29] : noop)
+
+"Fête des mères" civil ( ( [last sunday in may] == ([easter] + 49 days) ) ? [first sunday in june] : [last sunday in may] )
+"Vendredi saint" religious on friday before ([easter])
commit 3aad614411205fe8ffa66ac76865067bd98926c3
Author: John Layt <jlayt at kde.org>
Date: Wed Jun 18 19:29:06 2014 +0100
Regenerate Bison/Flex parser for Plan2 format
Regenerate teh parser using teh updated format and the ltest versions
of Bison and Flex.
diff --git a/kholidays/parsers/plan2/holidayparserplan.cpp b/kholidays/parsers/plan2/holidayparserplan.cpp
index 665abbb..f79e913 100644
--- a/kholidays/parsers/plan2/holidayparserplan.cpp
+++ b/kholidays/parsers/plan2/holidayparserplan.cpp
@@ -1,23 +1,23 @@
-/* A Bison parser, made by GNU Bison 2.3. */
-/* Skeleton implementation for Bison LALR(1) parsers in C++
-
- Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+/* A Bison parser, made by GNU Bison 2.4.1. */
- This program is free software; you can redistribute it and/or modify
+/* Skeleton implementation for Bison LALR(1) parsers in C++
+
+ Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008 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.
-
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
-
+
You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA. */
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
/* As a special exception, you may create a larger work that contains
part or all of the Bison parser skeleton and distribute that work
@@ -28,17 +28,43 @@
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. */
// Take the name prefix into account.
#define yylex KHolidayslex
+/* First part of user declarations. */
+
+/* Line 311 of lalr1.cc */
+#line 30 "holidayparserplan.ypp"
+ /*** C/C++ Declarations ***/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <pwd.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <limits.h>
+#include <string>
+
+#include <QString>
+
+#include <KCalendarSystem>
+
+
+
+/* Line 311 of lalr1.cc */
+#line 60 "holidayparserplan.cpp"
+
+
#include "holidayparserplan.hpp"
/* User implementation prologue. */
-#line 108 "holidayparserplan.ypp"
+
+/* Line 317 of lalr1.cc */
+#line 111 "holidayparserplan.ypp"
#include "holidayparserdriverplan_p.h"
@@ -52,8 +78,8 @@
-/* Line 317 of lalr1.cc. */
-#line 57 "holidayparserplan.cpp"
+/* Line 317 of lalr1.cc */
+#line 83 "holidayparserplan.cpp"
#ifndef YY_
# if YYENABLE_NLS
@@ -70,14 +96,12 @@
/* Suppress unused-variable warnings by "using" E. */
#define YYUSE(e) ((void) (e))
-/* A pseudo ostream that takes yydebug_ into account. */
-# define YYCDEBUG \
- for (bool yydebugcond_ = yydebug_; yydebugcond_; yydebugcond_ = false) \
- (*yycdebug_)
-
/* Enable debugging if requested. */
#if YYDEBUG
+/* A pseudo ostream that takes yydebug_ into account. */
+# define YYCDEBUG if (yydebug_) (*yycdebug_)
+
# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
do { \
if (yydebug_) \
@@ -102,18 +126,29 @@ do { \
#else /* !YYDEBUG */
+# define YYCDEBUG if (false) std::cerr
# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
# define YY_REDUCE_PRINT(Rule)
# define YY_STACK_PRINT()
#endif /* !YYDEBUG */
+#define yyerrok (yyerrstatus_ = 0)
+#define yyclearin (yychar = yyempty_)
+
#define YYACCEPT goto yyacceptlab
#define YYABORT goto yyabortlab
#define YYERROR goto yyerrorlab
+#define YYRECOVERING() (!!yyerrstatus_)
-namespace KHolidays
-{
+
+/* Line 380 of lalr1.cc */
+#line 1 "[Bison:b4_percent_define_default]"
+
+namespace KHolidays {
+
+/* Line 380 of lalr1.cc */
+#line 152 "holidayparserplan.cpp"
#if YYERROR_VERBOSE
/* Return YYSTR after stripping away unnecessary quotes and
@@ -157,8 +192,11 @@ namespace KHolidays
/// Build a parser object.
HolidayParserPlan::HolidayParserPlan (class HolidayParserDriverPlan& driver_yyarg)
- : yydebug_ (false),
+ :
+#if YYDEBUG
+ yydebug_ (false),
yycdebug_ (&std::cerr),
+#endif
driver (driver_yyarg)
{
}
@@ -196,7 +234,7 @@ namespace KHolidays
yy_symbol_value_print_ (yytype, yyvaluep, yylocationp);
*yycdebug_ << ')';
}
-#endif /* ! YYDEBUG */
+#endif
void
HolidayParserPlan::yydestruct_ (const char* yymsg,
@@ -210,9 +248,16 @@ namespace KHolidays
switch (yytype)
{
- case 7: /* STRING */
- { free( ((*yyvaluep).sval) ); };
- break;
+ case 6: /* "STRING" */
+
+/* Line 480 of lalr1.cc */
+#line 96 "holidayparserplan.ypp"
+ { free( (yyvaluep->sval) ); };
+
+/* Line 480 of lalr1.cc */
+#line 259 "holidayparserplan.cpp"
+ break;
+
default:
break;
}
@@ -226,6 +271,7 @@ namespace KHolidays
yylocation_stack_.pop (n);
}
+#if YYDEBUG
std::ostream&
HolidayParserPlan::debug_stream () const
{
@@ -250,12 +296,12 @@ namespace KHolidays
{
yydebug_ = l;
}
-
+#endif
int
HolidayParserPlan::parse ()
{
- /// Look-ahead and look-ahead in internal form.
+ /// Lookahead and lookahead in internal form.
int yychar = yyempty_;
int yytoken = 0;
@@ -268,12 +314,12 @@ namespace KHolidays
int yynerrs_ = 0;
int yyerrstatus_ = 0;
- /// Semantic value of the look-ahead.
+ /// Semantic value of the lookahead.
semantic_type yylval;
- /// Location of the look-ahead.
+ /// Location of the lookahead.
location_type yylloc;
/// The locations where the error started and ended.
- location yyerror_range[2];
+ location_type yyerror_range[2];
/// $$.
semantic_type yyval;
@@ -286,14 +332,18 @@ namespace KHolidays
/* User initialization code. */
- #line 70 "holidayparserplan.ypp"
+
+/* Line 553 of lalr1.cc */
+#line 70 "holidayparserplan.ypp"
{
// initialize the initial location object
yylloc.begin.filename = driver.fileToParse();
yylloc.end.filename = yylloc.begin.filename;
}
- /* Line 547 of yacc.c. */
-#line 295 "holidayparserplan.cpp"
+
+/* Line 553 of lalr1.cc */
+#line 346 "holidayparserplan.cpp"
+
/* Initialize the stacks. The initial state will be pushed in
yynewstate, since the latter expects the semantical and the
location values to have been already stored, initialize these
@@ -308,17 +358,22 @@ namespace KHolidays
yynewstate:
yystate_stack_.push (yystate);
YYCDEBUG << "Entering state " << yystate << std::endl;
+
+ /* Accept? */
+ if (yystate == yyfinal_)
+ goto yyacceptlab;
+
goto yybackup;
/* Backup. */
yybackup:
- /* Try to take a decision without look-ahead. */
+ /* Try to take a decision without lookahead. */
yyn = yypact_[yystate];
if (yyn == yypact_ninf_)
goto yydefault;
- /* Read a look-ahead token. */
+ /* Read a lookahead token. */
if (yychar == yyempty_)
{
YYCDEBUG << "Reading a token: ";
@@ -354,16 +409,11 @@ namespace KHolidays
goto yyreduce;
}
- /* Accept? */
- if (yyn == yyfinal_)
- goto yyacceptlab;
-
- /* Shift the look-ahead token. */
+ /* Shift the lookahead token. */
YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
- /* Discard the token being shifted unless it is eof. */
- if (yychar != yyeof_)
- yychar = yyempty_;
+ /* Discard the token being shifted. */
+ yychar = yyempty_;
yysemantic_stack_.push (yylval);
yylocation_stack_.push (yylloc);
@@ -409,424 +459,536 @@ namespace KHolidays
switch (yyn)
{
case 4:
-#line 129 "holidayparserplan.ypp"
- { driver.setFileCountryCode( QString() ); ;}
+
+/* Line 678 of lalr1.cc */
+#line 132 "holidayparserplan.ypp"
+ { driver.setFileCountryCode( QString() ); }
break;
case 5:
-#line 130 "holidayparserplan.ypp"
- {
- char *s = yysemantic_stack_[(2) - (2)].sval;
- driver.setFileCountryCode( QString::fromUtf8( s ) );
- free( s );
- yysemantic_stack_[(2) - (2)].sval = NULL;
- }
+
+/* Line 678 of lalr1.cc */
+#line 133 "holidayparserplan.ypp"
+ { char *s = (yysemantic_stack_[(2) - (2)].sval); driver.setFileCountryCode( QString::fromUtf8( s ) ); free( s ); (yysemantic_stack_[(2) - (2)].sval) = NULL; }
break;
case 6:
-#line 133 "holidayparserplan.ypp"
- { driver.setFileLanguageCode( QString() ); ;}
+
+/* Line 678 of lalr1.cc */
+#line 136 "holidayparserplan.ypp"
+ { driver.setFileLanguageCode( QString() ); }
break;
case 7:
-#line 134 "holidayparserplan.ypp"
- {
- char *s = yysemantic_stack_[(2) - (2)].sval;
- driver.setFileLanguageCode( QString::fromUtf8( s ) );
- free( s );
- yysemantic_stack_[(2) - (2)].sval = NULL;
- }
+
+/* Line 678 of lalr1.cc */
+#line 137 "holidayparserplan.ypp"
+ { char *s = (yysemantic_stack_[(2) - (2)].sval); driver.setFileLanguageCode( QString::fromUtf8( s ) ); free( s ); (yysemantic_stack_[(2) - (2)].sval) = NULL; }
break;
case 8:
-#line 137 "holidayparserplan.ypp"
- { driver.setFileName( QString() ); ;}
+
+/* Line 678 of lalr1.cc */
+#line 140 "holidayparserplan.ypp"
+ { driver.setFileName( QString() ); }
break;
case 9:
-#line 138 "holidayparserplan.ypp"
- {
- char *s = yysemantic_stack_[(2) - (2)].sval;
- driver.setFileName( QString::fromUtf8( s ) );
- free( s );
- yysemantic_stack_[(2) - (2)].sval = NULL;
- }
+
+/* Line 678 of lalr1.cc */
+#line 141 "holidayparserplan.ypp"
+ { char *s = (yysemantic_stack_[(2) - (2)].sval); driver.setFileName( QString::fromUtf8( s ) ); free( s ); (yysemantic_stack_[(2) - (2)].sval) = NULL; }
break;
case 10:
-#line 141 "holidayparserplan.ypp"
- { driver.setFileDescription( QString() ); ;}
+
+/* Line 678 of lalr1.cc */
+#line 144 "holidayparserplan.ypp"
+ { driver.setFileDescription( QString() ); }
break;
case 11:
-#line 142 "holidayparserplan.ypp"
- {
- char *s = yysemantic_stack_[(2) - (2)].sval;
- driver.setFileDescription( QString::fromUtf8( s ) );
- free( s );
- yysemantic_stack_[(2) - (2)].sval = NULL;
- }
+
+/* Line 678 of lalr1.cc */
+#line 145 "holidayparserplan.ypp"
+ { char *s = (yysemantic_stack_[(2) - (2)].sval); driver.setFileDescription( QString::fromUtf8( s ) ); free( s ); (yysemantic_stack_[(2) - (2)].sval) = NULL; }
+ break;
+
+ case 14:
+
+/* Line 678 of lalr1.cc */
+#line 152 "holidayparserplan.ypp"
+ { char *s = (yysemantic_stack_[(1) - (1)].sval); driver.setEventName( QString::fromUtf8( s ) ); free( s ); (yysemantic_stack_[(1) - (1)].sval) = NULL; }
+ break;
+
+ case 15:
+
+/* Line 678 of lalr1.cc */
+#line 155 "holidayparserplan.ypp"
+ { driver.setEventCategory( (yysemantic_stack_[(1) - (1)].sval) ); }
break;
case 16:
-#line 153 "holidayparserplan.ypp"
- { driver.setEventColorName( 0 ); ;}
+
+/* Line 678 of lalr1.cc */
+#line 156 "holidayparserplan.ypp"
+ { driver.setEventCategory( (yysemantic_stack_[(2) - (1)].sval) ); }
break;
case 17:
-#line 154 "holidayparserplan.ypp"
- { driver.setEventColorName( (yysemantic_stack_[(1) - (1)].ival) ); ;}
+
+/* Line 678 of lalr1.cc */
+#line 159 "holidayparserplan.ypp"
+ { driver.setEventCalendarType( QLatin1String("gregorian") ); }
break;
case 18:
-#line 157 "holidayparserplan.ypp"
- { driver.setEventColorDay( 0 ); ;}
+
+/* Line 678 of lalr1.cc */
+#line 160 "holidayparserplan.ypp"
+ { driver.setEventCalendarType( QString::fromUtf8( (yysemantic_stack_[(1) - (1)].sval) ) ); }
break;
case 19:
-#line 158 "holidayparserplan.ypp"
- { driver.setEventColorDay( (yysemantic_stack_[(1) - (1)].ival) ); ;}
+
+/* Line 678 of lalr1.cc */
+#line 163 "holidayparserplan.ypp"
+ { driver.setFromEaster( (yysemantic_stack_[(3) - (2)].ival), (yysemantic_stack_[(3) - (3)].ival) ); }
break;
case 20:
-#line 161 "holidayparserplan.ypp"
- {
- char *s = yysemantic_stack_[(1) - (1)].sval;
- driver.setEventName( QString::fromUtf8( s ) );
- free( s );
- yysemantic_stack_[(1) - (1)].sval = NULL;
- }
+
+/* Line 678 of lalr1.cc */
+#line 164 "holidayparserplan.ypp"
+ { driver.setFromPascha( (yysemantic_stack_[(3) - (2)].ival), (yysemantic_stack_[(3) - (3)].ival) ); }
break;
case 21:
-#line 164 "holidayparserplan.ypp"
- { driver.setEventCalendarType( "gregorian" ); ;}
+
+/* Line 678 of lalr1.cc */
+#line 165 "holidayparserplan.ypp"
+ { driver.setFromDate( (yysemantic_stack_[(4) - (2)].ival), (yysemantic_stack_[(4) - (3)].ival), (yysemantic_stack_[(4) - (4)].ival) ); }
break;
case 22:
-#line 165 "holidayparserplan.ypp"
- { driver.setEventCalendarType( QString::fromUtf8( (yysemantic_stack_[(1) - (1)].sval) ) ); ;}
+
+/* Line 678 of lalr1.cc */
+#line 166 "holidayparserplan.ypp"
+ { driver.setFromWeekdayInMonth( 1, (yysemantic_stack_[(3) - (1)].ival), 1, (yysemantic_stack_[(3) - (2)].ival), (yysemantic_stack_[(3) - (3)].ival) ); }
break;
case 23:
-#line 168 "holidayparserplan.ypp"
- { driver.setFromEaster( (yysemantic_stack_[(3) - (2)].ival), (yysemantic_stack_[(3) - (3)].ival) ); ;}
+
+/* Line 678 of lalr1.cc */
+#line 167 "holidayparserplan.ypp"
+ { driver.setFromWeekdayInMonth( (yysemantic_stack_[(4) - (1)].ival), (yysemantic_stack_[(4) - (2)].ival), 1, (yysemantic_stack_[(4) - (3)].ival), (yysemantic_stack_[(4) - (4)].ival) ); }
break;
case 24:
-#line 169 "holidayparserplan.ypp"
- { driver.setFromPascha( (yysemantic_stack_[(3) - (2)].ival), (yysemantic_stack_[(3) - (3)].ival) ); ;}
+
+/* Line 678 of lalr1.cc */
+#line 168 "holidayparserplan.ypp"
+ { driver.setFromWeekdayInMonth( (yysemantic_stack_[(6) - (1)].ival), (yysemantic_stack_[(6) - (2)].ival), (yysemantic_stack_[(6) - (4)].ival), (yysemantic_stack_[(6) - (5)].ival), (yysemantic_stack_[(6) - (6)].ival) ); }
break;
case 25:
-#line 170 "holidayparserplan.ypp"
- { driver.setFromDate( (yysemantic_stack_[(4) - (2)].ival), (yysemantic_stack_[(4) - (3)].ival), (yysemantic_stack_[(4) - (4)].ival) ); ;}
+
+/* Line 678 of lalr1.cc */
+#line 169 "holidayparserplan.ypp"
+ { driver.setFromRelativeWeekday( (yysemantic_stack_[(5) - (2)].ival), (yysemantic_stack_[(5) - (1)].ival), (yysemantic_stack_[(5) - (4)].ival), (yysemantic_stack_[(5) - (5)].ival) ); }
break;
case 26:
-#line 171 "holidayparserplan.ypp"
- { driver.setFromWeekdayInMonth( 1, (yysemantic_stack_[(3) - (1)].ival), 1, (yysemantic_stack_[(3) - (2)].ival), (yysemantic_stack_[(3) - (3)].ival) ); ;}
+
+/* Line 678 of lalr1.cc */
+#line 172 "holidayparserplan.ypp"
+ { (yyval.ival) = 0; }
break;
case 27:
-#line 172 "holidayparserplan.ypp"
- { driver.setFromWeekdayInMonth( (yysemantic_stack_[(4) - (1)].ival), (yysemantic_stack_[(4) - (2)].ival), 1, (yysemantic_stack_[(4) - (3)].ival), (yysemantic_stack_[(4) - (4)].ival) ); ;}
+
+/* Line 678 of lalr1.cc */
+#line 173 "holidayparserplan.ypp"
+ { (yyval.ival) = (yysemantic_stack_[(2) - (2)].ival); }
break;
case 28:
-#line 173 "holidayparserplan.ypp"
- { driver.setFromWeekdayInMonth( (yysemantic_stack_[(6) - (1)].ival), (yysemantic_stack_[(6) - (2)].ival), (yysemantic_stack_[(6) - (4)].ival), (yysemantic_stack_[(6) - (5)].ival), (yysemantic_stack_[(6) - (6)].ival) ); ;}
+
+/* Line 678 of lalr1.cc */
+#line 174 "holidayparserplan.ypp"
+ { (yyval.ival) = -(yysemantic_stack_[(2) - (2)].ival); }
break;
case 29:
-#line 174 "holidayparserplan.ypp"
- { driver.setFromRelativeWeekday( (yysemantic_stack_[(5) - (2)].ival), (yysemantic_stack_[(5) - (1)].ival), (yysemantic_stack_[(5) - (4)].ival), (yysemantic_stack_[(5) - (5)].ival) ); ;}
+
+/* Line 678 of lalr1.cc */
+#line 177 "holidayparserplan.ypp"
+ { (yyval.ival) = 0; }
break;
case 30:
-#line 177 "holidayparserplan.ypp"
- { (yyval.ival) = 0; ;}
+
+/* Line 678 of lalr1.cc */
+#line 178 "holidayparserplan.ypp"
+ { (yyval.ival) = ( (yysemantic_stack_[(4) - (2)].ival) << 8 ) | (yysemantic_stack_[(4) - (4)].ival); }
break;
case 31:
-#line 178 "holidayparserplan.ypp"
- { (yyval.ival) = (yysemantic_stack_[(2) - (2)].ival); ;}
+
+/* Line 678 of lalr1.cc */
+#line 181 "holidayparserplan.ypp"
+ { (yyval.ival) = 0; }
break;
case 32:
-#line 179 "holidayparserplan.ypp"
- { (yyval.ival) = -(yysemantic_stack_[(2) - (2)].ival); ;}
+
+/* Line 678 of lalr1.cc */
+#line 182 "holidayparserplan.ypp"
+ { (yyval.ival) = ( 1 << (yysemantic_stack_[(1) - (1)].ival) ); }
break;
case 33:
-#line 182 "holidayparserplan.ypp"
- { (yyval.ival) = 0; ;}
+
+/* Line 678 of lalr1.cc */
+#line 183 "holidayparserplan.ypp"
+ { (yyval.ival) = ( 1 << (yysemantic_stack_[(3) - (1)].ival) ) | (yysemantic_stack_[(3) - (3)].ival); }
break;
case 34:
-#line 183 "holidayparserplan.ypp"
- { (yyval.ival) = ( (yysemantic_stack_[(4) - (2)].ival) << 8 ) | (yysemantic_stack_[(4) - (4)].ival); ;}
+
+/* Line 678 of lalr1.cc */
+#line 186 "holidayparserplan.ypp"
+ { (yyval.ival) = 1; }
break;
case 35:
-#line 186 "holidayparserplan.ypp"
- { (yyval.ival) = 0; ;}
+
+/* Line 678 of lalr1.cc */
+#line 187 "holidayparserplan.ypp"
+ { (yyval.ival) = (yysemantic_stack_[(2) - (2)].ival); }
break;
case 36:
-#line 187 "holidayparserplan.ypp"
- { (yyval.ival) = ( 1 << (yysemantic_stack_[(1) - (1)].ival) ); ;}
+
+/* Line 678 of lalr1.cc */
+#line 190 "holidayparserplan.ypp"
+ { driver.setEventDate( -99999, (yysemantic_stack_[(3) - (3)].ival), (yysemantic_stack_[(3) - (1)].ival) ); }
break;
case 37:
-#line 188 "holidayparserplan.ypp"
- { (yyval.ival) = ( 1 << (yysemantic_stack_[(3) - (1)].ival) ) | (yysemantic_stack_[(3) - (3)].ival); ;}
+
+/* Line 678 of lalr1.cc */
+#line 191 "holidayparserplan.ypp"
+ { driver.setEventDate( -99999, (yysemantic_stack_[(4) - (3)].ival), (yysemantic_stack_[(4) - (1)].ival) ); }
break;
case 38:
-#line 191 "holidayparserplan.ypp"
- { (yyval.ival) = 1; ;}
+
+/* Line 678 of lalr1.cc */
+#line 192 "holidayparserplan.ypp"
+ { driver.setEventDate( (yysemantic_stack_[(5) - (5)].ival), (yysemantic_stack_[(5) - (3)].ival), (yysemantic_stack_[(5) - (1)].ival) ); }
break;
case 39:
-#line 192 "holidayparserplan.ypp"
- { (yyval.ival) = (yysemantic_stack_[(2) - (2)].ival); ;}
+
+/* Line 678 of lalr1.cc */
+#line 193 "holidayparserplan.ypp"
+ { driver.setEventDate( -99999, (yysemantic_stack_[(3) - (1)].ival), (yysemantic_stack_[(3) - (3)].ival) ); }
break;
case 40:
-#line 195 "holidayparserplan.ypp"
- { driver.setEventDate( -99999, (yysemantic_stack_[(3) - (3)].ival), (yysemantic_stack_[(3) - (1)].ival) ); ;}
+
+/* Line 678 of lalr1.cc */
+#line 194 "holidayparserplan.ypp"
+ { driver.setEventDate( (yysemantic_stack_[(5) - (5)].ival), (yysemantic_stack_[(5) - (1)].ival), (yysemantic_stack_[(5) - (3)].ival) ); }
break;
case 41:
-#line 196 "holidayparserplan.ypp"
- { driver.setEventDate( -99999, (yysemantic_stack_[(4) - (3)].ival), (yysemantic_stack_[(4) - (1)].ival) ); ;}
+
+/* Line 678 of lalr1.cc */
+#line 195 "holidayparserplan.ypp"
+ { driver.setEventDate( -99999, (yysemantic_stack_[(2) - (1)].ival), (yysemantic_stack_[(2) - (2)].ival) ); }
break;
case 42:
-#line 197 "holidayparserplan.ypp"
- { driver.setEventDate( (yysemantic_stack_[(5) - (5)].ival), (yysemantic_stack_[(5) - (3)].ival), (yysemantic_stack_[(5) - (1)].ival) ); ;}
+
+/* Line 678 of lalr1.cc */
+#line 196 "holidayparserplan.ypp"
+ { driver.setEventDate( (yysemantic_stack_[(3) - (3)].ival), (yysemantic_stack_[(3) - (1)].ival), (yysemantic_stack_[(3) - (2)].ival) ); }
break;
case 43:
-#line 198 "holidayparserplan.ypp"
- { driver.setEventDate( -99999, (yysemantic_stack_[(3) - (1)].ival), (yysemantic_stack_[(3) - (3)].ival) ); ;}
+
+/* Line 678 of lalr1.cc */
+#line 197 "holidayparserplan.ypp"
+ { driver.setEventDate( -99999, (yysemantic_stack_[(2) - (2)].ival), (yysemantic_stack_[(2) - (1)].ival) ); }
break;
case 44:
-#line 199 "holidayparserplan.ypp"
- { driver.setEventDate( (yysemantic_stack_[(5) - (5)].ival), (yysemantic_stack_[(5) - (1)].ival), (yysemantic_stack_[(5) - (3)].ival) ); ;}
+
+/* Line 678 of lalr1.cc */
+#line 198 "holidayparserplan.ypp"
+ { driver.setEventDate( (yysemantic_stack_[(3) - (3)].ival), (yysemantic_stack_[(3) - (2)].ival), (yysemantic_stack_[(3) - (1)].ival) ); }
break;
case 45:
-#line 200 "holidayparserplan.ypp"
- { driver.setEventDate( -99999, (yysemantic_stack_[(2) - (1)].ival), (yysemantic_stack_[(2) - (2)].ival) ); ;}
+
+/* Line 678 of lalr1.cc */
+#line 199 "holidayparserplan.ypp"
+ { driver.setEventDate( (yysemantic_stack_[(4) - (4)].ival), (yysemantic_stack_[(4) - (3)].ival), (yysemantic_stack_[(4) - (1)].ival) ); }
break;
case 46:
-#line 201 "holidayparserplan.ypp"
- { driver.setEventDate( (yysemantic_stack_[(3) - (3)].ival), (yysemantic_stack_[(3) - (1)].ival), (yysemantic_stack_[(3) - (2)].ival) ); ;}
+
+/* Line 678 of lalr1.cc */
+#line 200 "holidayparserplan.ypp"
+ { driver.setEventDate( (yysemantic_stack_[(1) - (1)].ival) ); }
break;
case 47:
-#line 202 "holidayparserplan.ypp"
- { driver.setEventDate( -99999, (yysemantic_stack_[(2) - (2)].ival), (yysemantic_stack_[(2) - (1)].ival) ); ;}
+
+/* Line 678 of lalr1.cc */
+#line 203 "holidayparserplan.ypp"
+ { char *s = (yysemantic_stack_[(1) - (1)].sval); (yyval.ival) = driver.julianDayFromEventName( s ); free( s ); (yysemantic_stack_[(1) - (1)].sval) = NULL; }
break;
case 48:
-#line 203 "holidayparserplan.ypp"
- { driver.setEventDate( (yysemantic_stack_[(3) - (3)].ival), (yysemantic_stack_[(3) - (2)].ival), (yysemantic_stack_[(3) - (1)].ival) ); ;}
+
+/* Line 678 of lalr1.cc */
+#line 204 "holidayparserplan.ypp"
+ { (yyval.ival) = driver.julianDayFromEaster(); }
break;
case 49:
-#line 204 "holidayparserplan.ypp"
- { driver.setEventDate( (yysemantic_stack_[(4) - (4)].ival), (yysemantic_stack_[(4) - (3)].ival), (yysemantic_stack_[(4) - (1)].ival) ); ;}
+
+/* Line 678 of lalr1.cc */
+#line 205 "holidayparserplan.ypp"
+ { (yyval.ival) = driver.julianDayFromPascha(); }
break;
case 50:
-#line 205 "holidayparserplan.ypp"
- { driver.setEventDate( (yysemantic_stack_[(1) - (1)].ival) ); ;}
+
+/* Line 678 of lalr1.cc */
+#line 206 "holidayparserplan.ypp"
+ { (yyval.ival) = driver.julianDayFromMonthDay( (yysemantic_stack_[(3) - (3)].ival), (yysemantic_stack_[(3) - (1)].ival) ); }
break;
case 51:
-#line 208 "holidayparserplan.ypp"
- {
- char *s = yysemantic_stack_[(1) - (1)].sval;
- (yyval.ival) = driver.julianDayFromEventName( s );
- free( s );
- yysemantic_stack_[(1) - (1)].sval = NULL;
- }
+
+/* Line 678 of lalr1.cc */
+#line 207 "holidayparserplan.ypp"
+ { (yyval.ival) = driver.julianDayFromMonthDay( (yysemantic_stack_[(4) - (3)].ival), (yysemantic_stack_[(4) - (1)].ival) ); }
break;
case 52:
-#line 209 "holidayparserplan.ypp"
- { (yyval.ival) = driver.julianDayFromEaster(); ;}
+
+/* Line 678 of lalr1.cc */
+#line 208 "holidayparserplan.ypp"
+ { (yyval.ival) = driver.julianDayFromMonthDay( (yysemantic_stack_[(3) - (1)].ival), (yysemantic_stack_[(3) - (3)].ival) ); }
break;
case 53:
-#line 210 "holidayparserplan.ypp"
- { (yyval.ival) = driver.julianDayFromPascha(); ;}
+
+/* Line 678 of lalr1.cc */
+#line 209 "holidayparserplan.ypp"
+ { (yyval.ival) = driver.julianDayFromMonthDay( (yysemantic_stack_[(2) - (2)].ival), (yysemantic_stack_[(2) - (1)].ival) ); }
break;
case 54:
-#line 211 "holidayparserplan.ypp"
- { (yyval.ival) = driver.julianDayFromMonthDay( (yysemantic_stack_[(3) - (3)].ival), (yysemantic_stack_[(3) - (1)].ival) ); ;}
+
+/* Line 678 of lalr1.cc */
+#line 210 "holidayparserplan.ypp"
+ { (yyval.ival) = driver.julianDayFromMonthDay( (yysemantic_stack_[(2) - (1)].ival), (yysemantic_stack_[(2) - (2)].ival) ); }
break;
case 55:
-#line 212 "holidayparserplan.ypp"
- { (yyval.ival) = driver.julianDayFromMonthDay( (yysemantic_stack_[(4) - (3)].ival), (yysemantic_stack_[(4) - (1)].ival) ); ;}
+
+/* Line 678 of lalr1.cc */
+#line 211 "holidayparserplan.ypp"
+ { (yyval.ival) = driver.julianDayFromRelativeWeekday( (yysemantic_stack_[(3) - (2)].ival), (yysemantic_stack_[(3) - (1)].ival), (yysemantic_stack_[(3) - (3)].ival) ); }
break;
case 56:
-#line 213 "holidayparserplan.ypp"
- { (yyval.ival) = driver.julianDayFromMonthDay( (yysemantic_stack_[(3) - (1)].ival), (yysemantic_stack_[(3) - (3)].ival) ); ;}
- break;
- case 57:
-#line 214 "holidayparserplan.ypp"
- { (yyval.ival) = driver.julianDayFromMonthDay( (yysemantic_stack_[(2) - (2)].ival), (yysemantic_stack_[(2) - (1)].ival) ); ;}
+/* Line 678 of lalr1.cc */
+#line 212 "holidayparserplan.ypp"
+ { (yyval.ival) = driver.julianDayFromWeekdayInMonth( (yysemantic_stack_[(4) - (1)].ival), (yysemantic_stack_[(4) - (2)].ival), (yysemantic_stack_[(4) - (4)].ival) ); }
break;
case 58:
-#line 215 "holidayparserplan.ypp"
- { (yyval.ival) = driver.julianDayFromMonthDay( (yysemantic_stack_[(2) - (1)].ival), (yysemantic_stack_[(2) - (2)].ival) ); ;}
+
+/* Line 678 of lalr1.cc */
+#line 216 "holidayparserplan.ypp"
+ { (yyval.ival) = driver.adjustedMonthNumber( (yysemantic_stack_[(1) - (1)].ival) ); }
break;
case 59:
-#line 216 "holidayparserplan.ypp"
- { (yyval.ival) = driver.julianDayFromRelativeWeekday( (yysemantic_stack_[(3) - (2)].ival), (yysemantic_stack_[(3) - (1)].ival), (yysemantic_stack_[(3) - (3)].ival) ); ;}
+
+/* Line 678 of lalr1.cc */
+#line 219 "holidayparserplan.ypp"
+ { (yyval.ival) = driver.adjustedMonthNumber( (yysemantic_stack_[(1) - (1)].ival) ); }
break;
case 60:
-#line 217 "holidayparserplan.ypp"
- { (yyval.ival) = driver.julianDayFromWeekdayInMonth( (yysemantic_stack_[(4) - (1)].ival), (yysemantic_stack_[(4) - (2)].ival), (yysemantic_stack_[(4) - (4)].ival) ); ;}
+
+/* Line 678 of lalr1.cc */
+#line 222 "holidayparserplan.ypp"
+ { (yyval.ival) = (yysemantic_stack_[(1) - (1)].ival); }
+ break;
+
+ case 61:
+
+/* Line 678 of lalr1.cc */
+#line 223 "holidayparserplan.ypp"
+ { (yyval.ival) = (yysemantic_stack_[(3) - (1)].ival) || (yysemantic_stack_[(3) - (3)].ival); }
break;
case 62:
-#line 221 "holidayparserplan.ypp"
- { (yyval.ival) = driver.adjustedMonthNumber( (yysemantic_stack_[(1) - (1)].ival) ); ;}
+
+/* Line 678 of lalr1.cc */
+#line 224 "holidayparserplan.ypp"
+ { (yyval.ival) = (yysemantic_stack_[(3) - (1)].ival) && (yysemantic_stack_[(3) - (3)].ival); }
break;
case 63:
-#line 224 "holidayparserplan.ypp"
- { (yyval.ival) = driver.adjustedMonthNumber( (yysemantic_stack_[(1) - (1)].ival) ); ;}
+
+/* Line 678 of lalr1.cc */
+#line 225 "holidayparserplan.ypp"
+ { (yyval.ival) = (yysemantic_stack_[(3) - (1)].ival) == (yysemantic_stack_[(3) - (3)].ival); }
break;
case 64:
-#line 227 "holidayparserplan.ypp"
- { (yyval.ival) = (yysemantic_stack_[(1) - (1)].ival); ;}
+
+/* Line 678 of lalr1.cc */
+#line 226 "holidayparserplan.ypp"
+ { (yyval.ival) = (yysemantic_stack_[(3) - (1)].ival) != (yysemantic_stack_[(3) - (3)].ival); }
break;
case 65:
-#line 228 "holidayparserplan.ypp"
- { (yyval.ival) = (yysemantic_stack_[(3) - (1)].ival) || (yysemantic_stack_[(3) - (3)].ival); ;}
+
+/* Line 678 of lalr1.cc */
+#line 227 "holidayparserplan.ypp"
+ { (yyval.ival) = (yysemantic_stack_[(3) - (1)].ival) <= (yysemantic_stack_[(3) - (3)].ival); }
break;
case 66:
-#line 229 "holidayparserplan.ypp"
- { (yyval.ival) = (yysemantic_stack_[(3) - (1)].ival) && (yysemantic_stack_[(3) - (3)].ival); ;}
+
+/* Line 678 of lalr1.cc */
+#line 228 "holidayparserplan.ypp"
+ { (yyval.ival) = (yysemantic_stack_[(3) - (1)].ival) >= (yysemantic_stack_[(3) - (3)].ival); }
break;
case 67:
-#line 230 "holidayparserplan.ypp"
- { (yyval.ival) = (yysemantic_stack_[(3) - (1)].ival) == (yysemantic_stack_[(3) - (3)].ival); ;}
+
+/* Line 678 of lalr1.cc */
+#line 229 "holidayparserplan.ypp"
+ { (yyval.ival) = (yysemantic_stack_[(3) - (1)].ival) < (yysemantic_stack_[(3) - (3)].ival); }
break;
case 68:
-#line 231 "holidayparserplan.ypp"
- { (yyval.ival) = (yysemantic_stack_[(3) - (1)].ival) != (yysemantic_stack_[(3) - (3)].ival); ;}
+
+/* Line 678 of lalr1.cc */
+#line 230 "holidayparserplan.ypp"
+ { (yyval.ival) = (yysemantic_stack_[(3) - (1)].ival) > (yysemantic_stack_[(3) - (3)].ival); }
break;
case 69:
-#line 232 "holidayparserplan.ypp"
- { (yyval.ival) = (yysemantic_stack_[(3) - (1)].ival) <= (yysemantic_stack_[(3) - (3)].ival); ;}
+
+/* Line 678 of lalr1.cc */
+#line 231 "holidayparserplan.ypp"
+ { (yyval.ival) = (yysemantic_stack_[(3) - (1)].ival) + (yysemantic_stack_[(3) - (3)].ival); }
break;
case 70:
-#line 233 "holidayparserplan.ypp"
- { (yyval.ival) = (yysemantic_stack_[(3) - (1)].ival) >= (yysemantic_stack_[(3) - (3)].ival); ;}
+
+/* Line 678 of lalr1.cc */
+#line 232 "holidayparserplan.ypp"
+ { (yyval.ival) = (yysemantic_stack_[(3) - (1)].ival) - (yysemantic_stack_[(3) - (3)].ival); }
break;
case 71:
-#line 234 "holidayparserplan.ypp"
- { (yyval.ival) = (yysemantic_stack_[(3) - (1)].ival) < (yysemantic_stack_[(3) - (3)].ival); ;}
+
+/* Line 678 of lalr1.cc */
+#line 233 "holidayparserplan.ypp"
+ { (yyval.ival) = (yysemantic_stack_[(3) - (1)].ival) * (yysemantic_stack_[(3) - (3)].ival); }
break;
case 72:
-#line 235 "holidayparserplan.ypp"
- { (yyval.ival) = (yysemantic_stack_[(3) - (1)].ival) > (yysemantic_stack_[(3) - (3)].ival); ;}
+
+/* Line 678 of lalr1.cc */
+#line 234 "holidayparserplan.ypp"
+ { (yyval.ival) = (yysemantic_stack_[(3) - (3)].ival) ? (yysemantic_stack_[(3) - (1)].ival) / (yysemantic_stack_[(3) - (3)].ival) : 0; }
break;
case 73:
-#line 236 "holidayparserplan.ypp"
- { (yyval.ival) = (yysemantic_stack_[(3) - (1)].ival) + (yysemantic_stack_[(3) - (3)].ival); ;}
+
+/* Line 678 of lalr1.cc */
+#line 235 "holidayparserplan.ypp"
+ { (yyval.ival) = (yysemantic_stack_[(3) - (3)].ival) ? (yysemantic_stack_[(3) - (1)].ival) % (yysemantic_stack_[(3) - (3)].ival) : 0; }
break;
case 74:
-#line 237 "holidayparserplan.ypp"
- { (yyval.ival) = (yysemantic_stack_[(3) - (1)].ival) - (yysemantic_stack_[(3) - (3)].ival); ;}
+
+/* Line 678 of lalr1.cc */
+#line 236 "holidayparserplan.ypp"
+ { (yyval.ival) = (yysemantic_stack_[(5) - (1)].ival) ? (yysemantic_stack_[(5) - (3)].ival) : (yysemantic_stack_[(5) - (5)].ival); }
break;
case 75:
-#line 238 "holidayparserplan.ypp"
- { (yyval.ival) = (yysemantic_stack_[(3) - (1)].ival) * (yysemantic_stack_[(3) - (3)].ival); ;}
+
+/* Line 678 of lalr1.cc */
+#line 237 "holidayparserplan.ypp"
+ { (yyval.ival) = !(yysemantic_stack_[(2) - (2)].ival); }
break;
case 76:
-#line 239 "holidayparserplan.ypp"
- { (yyval.ival) = (yysemantic_stack_[(3) - (3)].ival) ? (yysemantic_stack_[(3) - (1)].ival) / (yysemantic_stack_[(3) - (3)].ival) : 0; ;}
+
+/* Line 678 of lalr1.cc */
+#line 238 "holidayparserplan.ypp"
+ { (yyval.ival) = (yysemantic_stack_[(3) - (2)].ival); }
break;
case 77:
-#line 240 "holidayparserplan.ypp"
- { (yyval.ival) = (yysemantic_stack_[(3) - (3)].ival) ? (yysemantic_stack_[(3) - (1)].ival) % (yysemantic_stack_[(3) - (3)].ival) : 0; ;}
- break;
- case 78:
+/* Line 678 of lalr1.cc */
#line 241 "holidayparserplan.ypp"
- { (yyval.ival) = (yysemantic_stack_[(5) - (1)].ival) ? (yysemantic_stack_[(5) - (3)].ival) : (yysemantic_stack_[(5) - (5)].ival); ;}
+ { (yyval.ival) = (yysemantic_stack_[(3) - (2)].ival); }
break;
- case 79:
+ case 78:
+
+/* Line 678 of lalr1.cc */
#line 242 "holidayparserplan.ypp"
- { (yyval.ival) = !(yysemantic_stack_[(2) - (2)].ival); ;}
+ { (yyval.ival) = (yysemantic_stack_[(1) - (1)].ival); }
break;
case 80:
-#line 243 "holidayparserplan.ypp"
- { (yyval.ival) = (yysemantic_stack_[(3) - (2)].ival); ;}
- break;
- case 81:
+/* Line 678 of lalr1.cc */
#line 246 "holidayparserplan.ypp"
- { (yyval.ival) = (yysemantic_stack_[(3) - (2)].ival); ;}
+ { (yyval.ival) = -(yysemantic_stack_[(2) - (2)].ival); }
break;
- case 82:
+ case 81:
+
+/* Line 678 of lalr1.cc */
#line 247 "holidayparserplan.ypp"
- { (yyval.ival) = (yysemantic_stack_[(1) - (1)].ival); ;}
+ { (yyval.ival) = driver.parseYear(); }
break;
- case 84:
-#line 251 "holidayparserplan.ypp"
- { (yyval.ival) = -(yysemantic_stack_[(2) - (2)].ival); ;}
- break;
+ case 82:
- case 85:
-#line 252 "holidayparserplan.ypp"
- { (yyval.ival) = driver.parseYear(); ;}
+/* Line 678 of lalr1.cc */
+#line 248 "holidayparserplan.ypp"
+ { (yyval.ival) = driver.isLeapYear( (yysemantic_stack_[(2) - (2)].ival) ); }
break;
- case 86:
-#line 253 "holidayparserplan.ypp"
- { (yyval.ival) = driver.isLeapYear( (yysemantic_stack_[(2) - (2)].ival) ); ;}
- break;
- /* Line 675 of lalr1.cc. */
-#line 797 "holidayparserplan.cpp"
- default: break;
+/* Line 678 of lalr1.cc */
+#line 990 "holidayparserplan.cpp"
+ default:
+ break;
}
YY_SYMBOL_PRINT ("-> $$ =", yyr1_[yyn], &yyval, &yyloc);
@@ -861,7 +1023,7 @@ namespace KHolidays
yyerror_range[0] = yylloc;
if (yyerrstatus_ == 3)
{
- /* If just tried and failed to reuse look-ahead token after an
+ /* If just tried and failed to reuse lookahead token after an
error, discard it. */
if (yychar <= yyeof_)
@@ -877,7 +1039,7 @@ namespace KHolidays
}
}
- /* Else will try to reuse look-ahead token after shifting the error
+ /* Else will try to reuse lookahead token after shifting the error
token. */
goto yyerrlab1;
@@ -934,19 +1096,16 @@ namespace KHolidays
YY_STACK_PRINT ();
}
- if (yyn == yyfinal_)
- goto yyacceptlab;
-
yyerror_range[1] = yylloc;
// Using YYLLOC is tempting, but would change the location of
- // the look-ahead. YYLOC is available though.
+ // the lookahead. YYLOC is available though.
YYLLOC_DEFAULT (yyloc, (yyerror_range - 1), 2);
yysemantic_stack_.push (yylval);
yylocation_stack_.push (yyloc);
/* Shift the error token. */
YY_SYMBOL_PRINT ("Shifting", yystos_[yyn],
- &yysemantic_stack_[0], &yylocation_stack_[0]);
+ &yysemantic_stack_[0], &yylocation_stack_[0]);
yystate = yyn;
goto yynewstate;
@@ -962,7 +1121,7 @@ namespace KHolidays
goto yyreturn;
yyreturn:
- if (yychar != yyeof_ && yychar != yyempty_)
+ if (yychar != yyempty_)
yydestruct_ ("Cleanup: discarding lookahead", yytoken, &yylval, &yylloc);
/* Do not reclaim the symbols of the rule which action triggered
@@ -1032,26 +1191,25 @@ namespace KHolidays
/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
STATE-NUM. */
- const short int HolidayParserPlan::yypact_ninf_ = -130;
+ const signed char HolidayParserPlan::yypact_ninf_ = -70;
const short int
HolidayParserPlan::yypact_[] =
{
- -22, 10, 24, -130, -1, -130, -130, 6, 29, 12,
- -130, 25, -130, 32, 13, -130, 39, -130, 60, -130,
- -130, 62, -130, -130, 72, -130, 115, -130, -130, 128,
- -130, 131, -9, -9, 66, 34, -130, -9, 47, 131,
- 117, -130, 34, 34, 74, 61, -130, 74, 74, -130,
- 34, 83, 157, -130, 77, 131, 131, 11, 122, 131,
- 206, 206, 34, -130, -9, 126, -130, -130, 50, 131,
- -130, -130, -130, 51, 64, 131, 3, 34, 34, 34,
- 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
- 34, -130, 90, 74, 65, -130, 61, 74, 131, 63,
- -130, -130, -130, 206, 74, 131, -130, 131, -130, -130,
- 93, 61, 248, 248, 248, 248, 248, 248, 227, 248,
- 114, 114, 50, 50, 50, 184, 79, 94, -130, 131,
- -9, -130, -130, 34, -130, -130, -130, 61, 73, 34,
- 90, 90, -130, 74, 206, -130, -130, -130, -130, -130,
- -130
+ -24, -1, 25, -70, 1, -70, -70, 39, 42, 38,
+ -70, 65, -70, 64, 51, -70, 5, -70, 75, -70,
+ -70, -70, 114, -70, -70, -70, 129, -70, 6, 30,
+ 30, 84, 134, -70, 30, 58, 6, -2, -70, 134,
+ 134, 77, 63, -70, 77, 77, -70, 134, 85, 160,
+ -70, 81, 6, 6, 12, 131, 6, 209, 209, 134,
+ -70, 30, 43, -70, -70, 62, 6, -70, -70, -70,
+ 54, 67, 6, 3, 134, 134, 134, 134, 134, 134,
+ 134, 134, 134, 134, 134, 134, 134, 134, -70, 98,
+ 77, 71, -70, 63, 77, 6, 70, -70, -70, -70,
+ 209, 77, 6, -70, 6, -70, -70, 102, 63, 251,
+ 251, 251, 251, 251, 251, 230, 251, 116, 116, 62,
+ 62, 62, 187, 86, 99, -70, 6, 30, -70, -70,
+ 134, -70, -70, -70, 63, 80, 134, 98, 98, -70,
+ 77, 209, -70, -70, -70, -70, -70, -70
};
/* YYDEFACT[S] -- default rule to reduce with in state S when YYTABLE
@@ -1060,31 +1218,30 @@ namespace KHolidays
const unsigned char
HolidayParserPlan::yydefact_[] =
{
- 4, 0, 0, 12, 6, 5, 1, 14, 0, 8,
- 15, 16, 7, 0, 10, 17, 0, 9, 0, 3,
- 20, 18, 11, 19, 21, 22, 0, 83, 63, 30,
- 85, 0, 30, 30, 0, 0, 13, 30, 0, 61,
- 50, 82, 0, 0, 38, 0, 86, 38, 38, 84,
- 0, 0, 0, 64, 33, 0, 45, 30, 0, 47,
- 31, 32, 0, 26, 30, 50, 23, 24, 79, 0,
- 51, 52, 53, 0, 0, 61, 62, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 81, 35, 38, 43, 46, 0, 38, 63, 40,
- 61, 62, 48, 39, 38, 0, 80, 0, 58, 57,
- 0, 0, 67, 68, 69, 70, 71, 72, 65, 66,
- 74, 73, 75, 76, 77, 0, 36, 0, 25, 0,
- 30, 27, 49, 41, 29, 59, 56, 0, 54, 0,
- 35, 35, 44, 38, 42, 60, 55, 78, 37, 34,
- 28
+ 4, 0, 0, 12, 6, 5, 1, 2, 0, 8,
+ 14, 0, 7, 0, 10, 15, 17, 9, 0, 3,
+ 16, 18, 0, 11, 79, 59, 26, 81, 0, 26,
+ 26, 0, 0, 13, 26, 0, 57, 46, 78, 0,
+ 0, 34, 0, 82, 34, 34, 80, 0, 0, 0,
+ 60, 29, 0, 41, 26, 0, 43, 27, 28, 0,
+ 22, 26, 46, 19, 20, 75, 0, 47, 48, 49,
+ 0, 0, 57, 58, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 77, 31,
+ 34, 39, 42, 0, 34, 59, 36, 57, 58, 44,
+ 35, 34, 0, 76, 0, 54, 53, 0, 0, 63,
+ 64, 65, 66, 67, 68, 61, 62, 70, 69, 71,
+ 72, 73, 0, 32, 0, 21, 0, 26, 23, 45,
+ 37, 25, 55, 52, 0, 50, 0, 31, 31, 40,
+ 34, 38, 56, 51, 74, 33, 30, 24
};
/* YYPGOTO[NTERM-NUM]. */
- const short int
+ const signed char
HolidayParserPlan::yypgoto_[] =
{
- -130, -130, -130, -130, -130, -130, -130, -130, -130, -130,
- -130, -130, -130, -130, -23, -130, -129, -20, 68, -130,
- -13, 106, -27, -26, -130
+ -70, -70, -70, -70, -70, -70, -70, -70, -70, -70,
+ -70, -70, -19, -70, -69, -16, 79, -70, -9, 111,
+ -23, -22, -70
};
/* YYDEFGOTO[NTERM-NUM]. */
@@ -1092,81 +1249,81 @@ namespace KHolidays
HolidayParserPlan::yydefgoto_[] =
{
-1, 2, 3, 4, 9, 14, 19, 7, 11, 16,
- 24, 21, 26, 36, 44, 93, 127, 63, 37, 73,
- 38, 100, 52, 53, 41
+ 22, 33, 41, 90, 124, 60, 34, 70, 35, 97,
+ 49, 50, 38
};
/* 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. */
- const signed char HolidayParserPlan::yytable_ninf_ = -63;
+ const signed char HolidayParserPlan::yytable_ninf_ = -59;
const short int
HolidayParserPlan::yytable_[] =
{
- 40, 42, 43, 45, 1, 46, -2, 109, 110, 47,
- 48, 148, 149, 56, 54, 60, 61, 5, 10, 65,
- 96, 42, 43, 68, 6, 76, 8, 66, 67, 94,
- 95, 15, 101, 102, 97, 103, 12, 27, 74, 17,
- 13, 104, 18, 105, 111, 99, 20, 30, 31, 108,
- 112, 113, 114, 115, 116, 117, 118, 119, 120, 121,
- 122, 123, 124, 125, 27, 28, 34, 22, 23, 49,
- 101, 50, 132, 128, 30, 31, 51, 131, 35, 135,
- 25, 136, 55, 130, 134, 101, 27, 28, 69, 90,
- 70, 62, 92, 34, 106, 126, 30, 31, 138, 107,
- 129, 71, 137, 142, 133, 35, 144, 143, 72, 140,
- 141, 101, 147, 64, 146, 34, 0, 0, 27, 28,
- 29, 28, 57, 150, 145, 27, 98, 35, 30, 31,
- 28, 27, 39, 32, 27, 30, 31, 0, 42, 43,
- 33, 30, 31, 0, 30, 31, 59, 34, 87, 88,
- 89, 39, -62, 90, 34, 0, 0, 75, 58, 35,
- 34, -62, 0, 34, 0, 0, 35, 58, 0, 0,
- 0, 59, 35, 0, 0, 35, 77, 78, 79, 80,
- 81, 82, 0, 0, 0, 0, 0, 83, 84, 85,
- 86, 87, 88, 89, 0, 0, 90, 0, 0, 0,
- 0, 0, 91, 77, 78, 79, 80, 81, 82, 0,
- 0, 0, 0, 0, 83, 84, 85, 86, 87, 88,
- 89, 0, 0, 90, 139, 77, 78, 79, 80, 81,
- 82, 0, 0, 0, 0, 0, 83, 84, 85, 86,
- 87, 88, 89, 0, 0, 90, 77, 78, 79, 80,
- 81, 82, 0, 0, 0, 0, 0, 0, 84, 85,
- 86, 87, 88, 89, 0, 0, 90, 77, 78, 79,
- 80, 81, 82, 0, 0, 0, 0, 0, 0, 0,
- 85, 86, 87, 88, 89, 0, 0, 90
+ 37, 1, 25, 54, 42, 5, 43, 106, 107, 24,
+ 44, 45, 20, 21, 53, 51, 57, 58, 27, 28,
+ 62, 93, 39, 40, 65, 6, 73, 8, 63, 64,
+ 91, 92, -58, 98, 99, 94, 100, 31, 55, 71,
+ 39, 40, 101, 108, 102, 10, 96, 25, 12, 32,
+ 105, 109, 110, 111, 112, 113, 114, 115, 116, 117,
+ 118, 119, 120, 121, 122, 13, 24, 25, 145, 146,
+ 17, 98, 15, 129, 125, 27, 28, -58, 128, 18,
+ 132, 23, 133, 55, 127, 131, 98, 46, 24, 25,
+ 66, 67, 52, 59, 31, 89, 103, 27, 28, 135,
+ 87, 104, 68, 123, 139, 126, 32, 141, 140, 69,
+ 130, 134, 98, 144, 138, 137, 31, 24, 25, 26,
+ 143, 61, 0, 0, 147, 142, 27, 28, 32, 0,
+ 0, 29, 24, 36, 24, 95, 0, 24, 30, 39,
+ 40, 27, 28, 27, 28, 31, 27, 28, 56, 84,
+ 85, 86, 0, 36, 87, 0, 0, 32, 0, 72,
+ 31, 0, 31, 0, 0, 31, 0, 0, 0, 0,
+ 47, 0, 32, 56, 32, 48, 0, 32, 74, 75,
+ 76, 77, 78, 79, 0, 0, 0, 0, 0, 80,
+ 81, 82, 83, 84, 85, 86, 0, 0, 87, 0,
+ 0, 0, 0, 0, 88, 74, 75, 76, 77, 78,
+ 79, 0, 0, 0, 0, 0, 80, 81, 82, 83,
+ 84, 85, 86, 0, 0, 87, 136, 74, 75, 76,
+ 77, 78, 79, 0, 0, 0, 0, 0, 80, 81,
+ 82, 83, 84, 85, 86, 0, 0, 87, 74, 75,
+ 76, 77, 78, 79, 0, 0, 0, 0, 0, 0,
+ 81, 82, 83, 84, 85, 86, 0, 0, 87, 74,
+ 75, 76, 77, 78, 79, 0, 0, 0, 0, 0,
+ 0, 0, 82, 83, 84, 85, 86, 0, 0, 87
};
/* YYCHECK. */
const short int
HolidayParserPlan::yycheck_[] =
{
- 26, 10, 11, 29, 26, 31, 0, 4, 5, 32,
- 33, 140, 141, 39, 37, 42, 43, 7, 12, 45,
- 9, 10, 11, 50, 0, 51, 27, 47, 48, 55,
- 56, 6, 58, 59, 57, 62, 7, 3, 51, 7,
- 28, 64, 29, 69, 41, 58, 7, 13, 14, 75,
- 77, 78, 79, 80, 81, 82, 83, 84, 85, 86,
- 87, 88, 89, 90, 3, 4, 32, 7, 6, 3,
- 96, 37, 98, 93, 13, 14, 42, 97, 44, 105,
- 8, 107, 35, 96, 104, 111, 3, 4, 5, 39,
- 7, 17, 15, 32, 43, 5, 13, 14, 111, 35,
- 35, 18, 9, 129, 41, 44, 133, 130, 25, 30,
- 16, 137, 139, 45, 41, 32, -1, -1, 3, 4,
- 5, 4, 5, 143, 137, 3, 4, 44, 13, 14,
- 4, 3, 26, 18, 3, 13, 14, -1, 10, 11,
- 25, 13, 14, -1, 13, 14, 40, 32, 34, 35,
- 36, 45, 35, 39, 32, -1, -1, 51, 41, 44,
- 32, 35, -1, 32, -1, -1, 44, 41, -1, -1,
- -1, 65, 44, -1, -1, 44, 19, 20, 21, 22,
- 23, 24, -1, -1, -1, -1, -1, 30, 31, 32,
- 33, 34, 35, 36, -1, -1, 39, -1, -1, -1,
- -1, -1, 45, 19, 20, 21, 22, 23, 24, -1,
- -1, -1, -1, -1, 30, 31, 32, 33, 34, 35,
- 36, -1, -1, 39, 40, 19, 20, 21, 22, 23,
- 24, -1, -1, -1, -1, -1, 30, 31, 32, 33,
- 34, 35, 36, -1, -1, 39, 19, 20, 21, 22,
- 23, 24, -1, -1, -1, -1, -1, -1, 31, 32,
- 33, 34, 35, 36, -1, -1, 39, 19, 20, 21,
- 22, 23, 24, -1, -1, -1, -1, -1, -1, -1,
- 32, 33, 34, 35, 36, -1, -1, 39
+ 22, 25, 4, 5, 26, 6, 28, 4, 5, 3,
+ 29, 30, 7, 8, 36, 34, 39, 40, 12, 13,
+ 42, 9, 10, 11, 47, 0, 48, 26, 44, 45,
+ 52, 53, 34, 55, 56, 54, 59, 31, 40, 48,
+ 10, 11, 61, 40, 66, 6, 55, 4, 6, 43,
+ 72, 74, 75, 76, 77, 78, 79, 80, 81, 82,
+ 83, 84, 85, 86, 87, 27, 3, 4, 137, 138,
+ 6, 93, 7, 95, 90, 12, 13, 34, 94, 28,
+ 102, 6, 104, 40, 93, 101, 108, 3, 3, 4,
+ 5, 6, 34, 16, 31, 14, 42, 12, 13, 108,
+ 38, 34, 17, 5, 126, 34, 43, 130, 127, 24,
+ 40, 9, 134, 136, 15, 29, 31, 3, 4, 5,
+ 40, 42, -1, -1, 140, 134, 12, 13, 43, -1,
+ -1, 17, 3, 22, 3, 4, -1, 3, 24, 10,
+ 11, 12, 13, 12, 13, 31, 12, 13, 37, 33,
+ 34, 35, -1, 42, 38, -1, -1, 43, -1, 48,
+ 31, -1, 31, -1, -1, 31, -1, -1, -1, -1,
+ 36, -1, 43, 62, 43, 41, -1, 43, 18, 19,
+ 20, 21, 22, 23, -1, -1, -1, -1, -1, 29,
+ 30, 31, 32, 33, 34, 35, -1, -1, 38, -1,
+ -1, -1, -1, -1, 44, 18, 19, 20, 21, 22,
+ 23, -1, -1, -1, -1, -1, 29, 30, 31, 32,
+ 33, 34, 35, -1, -1, 38, 39, 18, 19, 20,
+ 21, 22, 23, -1, -1, -1, -1, -1, 29, 30,
+ 31, 32, 33, 34, 35, -1, -1, 38, 18, 19,
+ 20, 21, 22, 23, -1, -1, -1, -1, -1, -1,
+ 30, 31, 32, 33, 34, 35, -1, -1, 38, 18,
+ 19, 20, 21, 22, 23, -1, -1, -1, -1, -1,
+ -1, -1, 31, 32, 33, 34, 35, -1, -1, 38
};
/* STOS_[STATE-NUM] -- The (internal number of the) accessing
@@ -1174,22 +1331,21 @@ namespace KHolidays
const unsigned char
HolidayParserPlan::yystos_[] =
{
- 0, 26, 47, 48, 49, 7, 0, 53, 27, 50,
- 12, 54, 7, 28, 51, 6, 55, 7, 29, 52,
- 7, 57, 7, 6, 56, 8, 58, 3, 4, 5,
- 13, 14, 18, 25, 32, 44, 59, 64, 66, 67,
- 69, 70, 10, 11, 60, 69, 69, 60, 60, 3,
- 37, 42, 68, 69, 60, 35, 69, 5, 41, 67,
- 68, 68, 17, 63, 64, 69, 63, 63, 68, 5,
- 7, 18, 25, 65, 66, 67, 69, 19, 20, 21,
- 22, 23, 24, 30, 31, 32, 33, 34, 35, 36,
- 39, 45, 15, 61, 69, 69, 9, 60, 4, 66,
- 67, 69, 69, 68, 60, 69, 43, 35, 69, 4,
- 5, 41, 68, 68, 68, 68, 68, 68, 68, 68,
- 68, 68, 68, 68, 68, 68, 5, 62, 63, 35,
- 66, 63, 69, 41, 63, 69, 69, 9, 66, 40,
- 30, 16, 69, 60, 68, 66, 41, 68, 62, 62,
- 63
+ 0, 25, 46, 47, 48, 6, 0, 52, 26, 49,
+ 6, 53, 6, 27, 50, 7, 54, 6, 28, 51,
+ 7, 8, 55, 6, 3, 4, 5, 12, 13, 17,
+ 24, 31, 43, 56, 61, 63, 64, 66, 67, 10,
+ 11, 57, 66, 66, 57, 57, 3, 36, 41, 65,
+ 66, 57, 34, 66, 5, 40, 64, 65, 65, 16,
+ 60, 61, 66, 60, 60, 65, 5, 6, 17, 24,
+ 62, 63, 64, 66, 18, 19, 20, 21, 22, 23,
+ 29, 30, 31, 32, 33, 34, 35, 38, 44, 14,
+ 58, 66, 66, 9, 57, 4, 63, 64, 66, 66,
+ 65, 57, 66, 42, 34, 66, 4, 5, 40, 65,
+ 65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
+ 65, 65, 65, 5, 59, 60, 34, 63, 60, 66,
+ 40, 60, 66, 66, 9, 63, 39, 29, 15, 66,
+ 57, 65, 63, 40, 65, 59, 59, 60
};
#if YYDEBUG
@@ -1201,8 +1357,8 @@ namespace KHolidays
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, 281, 282, 283, 284,
- 285, 286, 45, 43, 42, 47, 37, 33, 287, 63,
- 58, 46, 91, 93, 40, 41
+ 285, 45, 43, 42, 47, 37, 33, 286, 63, 58,
+ 46, 91, 93, 40, 41
};
#endif
@@ -1210,15 +1366,15 @@ namespace KHolidays
const unsigned char
HolidayParserPlan::yyr1_[] =
{
- 0, 46, 47, 48, 49, 49, 50, 50, 51, 51,
- 52, 52, 53, 53, 54, 54, 55, 55, 56, 56,
- 57, 58, 58, 59, 59, 59, 59, 59, 59, 59,
- 60, 60, 60, 61, 61, 62, 62, 62, 63, 63,
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 65, 65, 65, 65, 65, 65, 65, 65, 65,
- 65, 66, 66, 67, 68, 68, 68, 68, 68, 68,
- 68, 68, 68, 68, 68, 68, 68, 68, 68, 68,
- 68, 69, 69, 70, 70, 70, 70
+ 0, 45, 46, 47, 48, 48, 49, 49, 50, 50,
+ 51, 51, 52, 52, 53, 54, 54, 55, 55, 56,
+ 56, 56, 56, 56, 56, 56, 57, 57, 57, 58,
+ 58, 59, 59, 59, 60, 60, 61, 61, 61, 61,
+ 61, 61, 61, 61, 61, 61, 61, 62, 62, 62,
+ 62, 62, 62, 62, 62, 62, 62, 63, 63, 64,
+ 65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
+ 65, 65, 65, 65, 65, 65, 65, 66, 66, 67,
+ 67, 67, 67
};
/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
@@ -1226,14 +1382,14 @@ namespace KHolidays
HolidayParserPlan::yyr2_[] =
{
0, 2, 2, 4, 0, 2, 0, 2, 0, 2,
- 0, 2, 0, 7, 0, 1, 0, 1, 0, 1,
- 1, 0, 1, 3, 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, 1, 3, 4, 3, 2, 2, 3,
- 4, 1, 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
+ 0, 2, 0, 5, 1, 1, 2, 0, 1, 3,
+ 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, 1,
+ 3, 4, 3, 2, 2, 3, 4, 1, 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
};
#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
@@ -1242,16 +1398,16 @@ namespace KHolidays
const char*
const HolidayParserPlan::yytname_[] =
{
- "END", "error", "$undefined", "NUMBER", "MONTH", "WDAY", "COLOR",
- "STRING", "CALENDAR", "INOP", "PLUS", "MINUS", "SMALL", "YEAR",
- "LEAPYEAR", "SHIFT", "IF", "LENGTH", "EASTER", "EQ", "NE", "LE", "GE",
- "LT", "GT", "PASCHA", "COUNTRY", "LANGUAGE", "NAME", "DESCRIPTION", "OR",
- "AND", "'-'", "'+'", "'*'", "'/'", "'%'", "'!'", "UMINUS", "'?'", "':'",
- "'.'", "'['", "']'", "'('", "')'", "$accept", "planfile", "metadata",
- "countrycode", "languagecode", "name", "description", "list", "small",
- "stringcolor", "daycolor", "eventname", "calendar", "eventrule",
- "offset", "conditionaloffset", "wdaycondition", "length", "date",
- "reldate", "month", "monthnumber", "expr", "pexpr", "number", 0
+ "END", "error", "$undefined", "NUMBER", "MONTH", "WDAY", "STRING",
+ "CATEGORY", "CALENDAR", "INOP", "PLUS", "MINUS", "YEAR", "LEAPYEAR",
+ "SHIFT", "IF", "LENGTH", "EASTER", "EQ", "NE", "LE", "GE", "LT", "GT",
+ "PASCHA", "COUNTRY", "LANGUAGE", "NAME", "DESCRIPTION", "OR", "AND",
+ "'-'", "'+'", "'*'", "'/'", "'%'", "'!'", "UMINUS", "'?'", "':'", "'.'",
+ "'['", "']'", "'('", "')'", "$accept", "planfile", "metadata",
+ "countrycode", "languagecode", "name", "description", "list",
+ "eventname", "categories", "calendar", "eventrule", "offset",
+ "conditionaloffset", "wdaycondition", "length", "date", "reldate",
+ "month", "monthnumber", "expr", "pexpr", "number", 0
};
#endif
@@ -1260,34 +1416,34 @@ namespace KHolidays
const HolidayParserPlan::rhs_number_type
HolidayParserPlan::yyrhs_[] =
{
- 47, 0, -1, 48, 53, -1, 49, 50, 51, 52,
- -1, -1, 26, 7, -1, -1, 27, 7, -1, -1,
- 28, 7, -1, -1, 29, 7, -1, -1, 53, 54,
- 55, 57, 56, 58, 59, -1, -1, 12, -1, -1,
- 6, -1, -1, 6, -1, 7, -1, -1, 8, -1,
- 18, 60, 63, -1, 25, 60, 63, -1, 64, 60,
- 61, 63, -1, 5, 60, 63, -1, 69, 5, 60,
- 63, -1, 69, 5, 9, 66, 60, 63, -1, 5,
- 69, 64, 60, 63, -1, -1, 10, 68, -1, 11,
- 68, -1, -1, 15, 62, 16, 62, -1, -1, 5,
- -1, 5, 30, 62, -1, -1, 17, 68, -1, 69,
- 41, 66, -1, 69, 41, 66, 41, -1, 69, 41,
- 66, 41, 68, -1, 66, 35, 69, -1, 66, 35,
- 69, 35, 69, -1, 67, 69, -1, 67, 69, 69,
- -1, 69, 67, -1, 69, 67, 69, -1, 69, 41,
- 4, 69, -1, 69, -1, 7, -1, 18, -1, 25,
- -1, 69, 41, 66, -1, 69, 41, 66, 41, -1,
- 66, 35, 69, -1, 69, 4, -1, 67, 69, -1,
- 5, 69, 69, -1, 69, 5, 9, 66, -1, 67,
- -1, 69, -1, 4, -1, 69, -1, 68, 30, 68,
- -1, 68, 31, 68, -1, 68, 19, 68, -1, 68,
- 20, 68, -1, 68, 21, 68, -1, 68, 22, 68,
- -1, 68, 23, 68, -1, 68, 24, 68, -1, 68,
- 33, 68, -1, 68, 32, 68, -1, 68, 34, 68,
- -1, 68, 35, 68, -1, 68, 36, 68, -1, 68,
- 39, 68, 40, 68, -1, 37, 68, -1, 42, 65,
- 43, -1, 44, 68, 45, -1, 70, -1, 3, -1,
- 32, 3, -1, 13, -1, 14, 69, -1
+ 46, 0, -1, 47, 52, -1, 48, 49, 50, 51,
+ -1, -1, 25, 6, -1, -1, 26, 6, -1, -1,
+ 27, 6, -1, -1, 28, 6, -1, -1, 52, 53,
+ 54, 55, 56, -1, 6, -1, 7, -1, 54, 7,
+ -1, -1, 8, -1, 17, 57, 60, -1, 24, 57,
+ 60, -1, 61, 57, 58, 60, -1, 5, 57, 60,
+ -1, 66, 5, 57, 60, -1, 66, 5, 9, 63,
+ 57, 60, -1, 5, 66, 61, 57, 60, -1, -1,
+ 10, 65, -1, 11, 65, -1, -1, 14, 59, 15,
+ 59, -1, -1, 5, -1, 5, 29, 59, -1, -1,
+ 16, 65, -1, 66, 40, 63, -1, 66, 40, 63,
+ 40, -1, 66, 40, 63, 40, 65, -1, 63, 34,
+ 66, -1, 63, 34, 66, 34, 66, -1, 64, 66,
+ -1, 64, 66, 66, -1, 66, 64, -1, 66, 64,
+ 66, -1, 66, 40, 4, 66, -1, 66, -1, 6,
+ -1, 17, -1, 24, -1, 66, 40, 63, -1, 66,
+ 40, 63, 40, -1, 63, 34, 66, -1, 66, 4,
+ -1, 64, 66, -1, 5, 66, 66, -1, 66, 5,
+ 9, 63, -1, 64, -1, 66, -1, 4, -1, 66,
+ -1, 65, 29, 65, -1, 65, 30, 65, -1, 65,
+ 18, 65, -1, 65, 19, 65, -1, 65, 20, 65,
+ -1, 65, 21, 65, -1, 65, 22, 65, -1, 65,
+ 23, 65, -1, 65, 32, 65, -1, 65, 31, 65,
+ -1, 65, 33, 65, -1, 65, 34, 65, -1, 65,
+ 35, 65, -1, 65, 38, 65, 39, 65, -1, 36,
+ 65, -1, 41, 62, 42, -1, 43, 65, 44, -1,
+ 67, -1, 3, -1, 31, 3, -1, 12, -1, 13,
+ 66, -1
};
/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
@@ -1296,29 +1452,29 @@ namespace KHolidays
HolidayParserPlan::yyprhs_[] =
{
0, 0, 3, 6, 11, 12, 15, 16, 19, 20,
- 23, 24, 27, 28, 36, 37, 39, 40, 42, 43,
- 45, 47, 48, 50, 54, 58, 63, 67, 72, 79,
- 85, 86, 89, 92, 93, 98, 99, 101, 105, 106,
- 109, 113, 118, 124, 128, 134, 137, 141, 144, 148,
- 153, 155, 157, 159, 161, 165, 170, 174, 177, 180,
- 184, 189, 191, 193, 195, 197, 201, 205, 209, 213,
- 217, 221, 225, 229, 233, 237, 241, 245, 249, 255,
- 258, 262, 266, 268, 270, 273, 275
+ 23, 24, 27, 28, 34, 36, 38, 41, 42, 44,
+ 48, 52, 57, 61, 66, 73, 79, 80, 83, 86,
+ 87, 92, 93, 95, 99, 100, 103, 107, 112, 118,
+ 122, 128, 131, 135, 138, 142, 147, 149, 151, 153,
+ 155, 159, 164, 168, 171, 174, 178, 183, 185, 187,
+ 189, 191, 195, 199, 203, 207, 211, 215, 219, 223,
+ 227, 231, 235, 239, 243, 249, 252, 256, 260, 262,
+ 264, 267, 269
};
/* YYRLINE[YYN] -- Source line where rule number YYN was defined. */
const unsigned char
HolidayParserPlan::yyrline_[] =
{
- 0, 123, 123, 126, 129, 130, 133, 134, 137, 138,
- 141, 142, 145, 146, 149, 150, 153, 154, 157, 158,
- 161, 164, 165, 168, 169, 170, 171, 172, 173, 174,
- 177, 178, 179, 182, 183, 186, 187, 188, 191, 192,
- 195, 196, 197, 198, 199, 200, 201, 202, 203, 204,
- 205, 208, 209, 210, 211, 212, 213, 214, 215, 216,
- 217, 220, 221, 224, 227, 228, 229, 230, 231, 232,
- 233, 234, 235, 236, 237, 238, 239, 240, 241, 242,
- 243, 246, 247, 250, 251, 252, 253
+ 0, 126, 126, 129, 132, 133, 136, 137, 140, 141,
+ 144, 145, 148, 149, 152, 155, 156, 159, 160, 163,
+ 164, 165, 166, 167, 168, 169, 172, 173, 174, 177,
+ 178, 181, 182, 183, 186, 187, 190, 191, 192, 193,
+ 194, 195, 196, 197, 198, 199, 200, 203, 204, 205,
+ 206, 207, 208, 209, 210, 211, 212, 215, 216, 219,
+ 222, 223, 224, 225, 226, 227, 228, 229, 230, 231,
+ 232, 233, 234, 235, 236, 237, 238, 241, 242, 245,
+ 246, 247, 248
};
// Print the state stack on the debug stream.
@@ -1340,7 +1496,7 @@ namespace KHolidays
int yynrhs = yyr2_[yyrule];
/* Print the symbols being reduced, and their result. */
*yycdebug_ << "Reducing stack by rule " << yyrule - 1
- << " (line " << yylno << "), ";
+ << " (line " << yylno << "):" << std::endl;
/* The symbols being reduced. */
for (int yyi = 0; yyi < yynrhs; yyi++)
YY_SYMBOL_PRINT (" $" << yyi + 1 << " =",
@@ -1361,13 +1517,13 @@ namespace KHolidays
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, 37, 2, 2, 2, 36, 2, 2,
- 44, 45, 34, 33, 2, 32, 41, 35, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 40, 2,
- 2, 2, 2, 39, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 36, 2, 2, 2, 35, 2, 2,
+ 43, 44, 33, 32, 2, 31, 40, 34, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 39, 2,
+ 2, 2, 2, 38, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 42, 2, 43, 2, 2, 2, 2, 2, 2,
+ 2, 41, 2, 42, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
@@ -1386,7 +1542,7 @@ namespace KHolidays
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, 26, 27, 28, 29, 30, 31, 38
+ 25, 26, 27, 28, 29, 30, 37
};
if ((unsigned int) t <= yyuser_token_number_max_)
return translate_table[t];
@@ -1395,20 +1551,29 @@ namespace KHolidays
}
const int HolidayParserPlan::yyeof_ = 0;
- const int HolidayParserPlan::yylast_ = 287;
- const int HolidayParserPlan::yynnts_ = 25;
+ const int HolidayParserPlan::yylast_ = 289;
+ const int HolidayParserPlan::yynnts_ = 23;
const int HolidayParserPlan::yyempty_ = -2;
const int HolidayParserPlan::yyfinal_ = 6;
const int HolidayParserPlan::yyterror_ = 1;
const int HolidayParserPlan::yyerrcode_ = 256;
- const int HolidayParserPlan::yyntokens_ = 46;
+ const int HolidayParserPlan::yyntokens_ = 45;
- const unsigned int HolidayParserPlan::yyuser_token_number_max_ = 287;
+ const unsigned int HolidayParserPlan::yyuser_token_number_max_ = 286;
const HolidayParserPlan::token_number_type HolidayParserPlan::yyundef_token_ = 2;
-} // namespace KHolidays
-#line 256 "holidayparserplan.ypp"
+/* Line 1054 of lalr1.cc */
+#line 1 "[Bison:b4_percent_define_default]"
+
+} // KHolidays
+
+/* Line 1054 of lalr1.cc */
+#line 1573 "holidayparserplan.cpp"
+
+
+/* Line 1056 of lalr1.cc */
+#line 251 "holidayparserplan.ypp"
/*** Private Yacc callbacks and helper functions ***/
diff --git a/kholidays/parsers/plan2/holidayparserplan.hpp b/kholidays/parsers/plan2/holidayparserplan.hpp
index 926a1b7..2fdda16 100644
--- a/kholidays/parsers/plan2/holidayparserplan.hpp
+++ b/kholidays/parsers/plan2/holidayparserplan.hpp
@@ -1,23 +1,23 @@
-/* A Bison parser, made by GNU Bison 2.3. */
-/* Skeleton interface for Bison LALR(1) parsers in C++
-
- Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+/* A Bison parser, made by GNU Bison 2.4.1. */
- This program is free software; you can redistribute it and/or modify
+/* Skeleton interface for Bison LALR(1) parsers in C++
+
+ Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008 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.
-
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
-
+
You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA. */
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
/* As a special exception, you may create a larger work that contains
part or all of the Bison parser skeleton and distribute that work
@@ -28,7 +28,7 @@
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. */
@@ -37,36 +37,30 @@
#ifndef PARSER_HEADER_H
# define PARSER_HEADER_H
+
+
#include <string>
#include <iostream>
#include "stack.hh"
-namespace KHolidays
-{
- class position;
- class location;
-}
-
-/* First part of user declarations. */
-#line 30 "holidayparserplan.ypp"
- /*** C/C++ Declarations ***/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <pwd.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <limits.h>
-#include <string>
-#include <QString>
+/* Line 35 of lalr1.cc */
+#line 1 "[Bison:b4_percent_define_default]"
-#include <KCalendarSystem>
+namespace KHolidays {
+/* Line 35 of lalr1.cc */
+#line 54 "holidayparserplan.hpp"
+ class position;
+ class location;
+/* Line 35 of lalr1.cc */
+#line 1 "[Bison:b4_percent_define_default]"
-/* Line 35 of lalr1.cc. */
-#line 70 "holidayparserplan.hpp"
+} // KHolidays
+
+/* Line 35 of lalr1.cc */
+#line 64 "holidayparserplan.hpp"
#include "location.hh"
@@ -107,8 +101,14 @@ do { \
} while (false)
#endif
-namespace KHolidays
-{
+
+/* Line 35 of lalr1.cc */
+#line 1 "[Bison:b4_percent_define_default]"
+
+namespace KHolidays {
+
+/* Line 35 of lalr1.cc */
+#line 112 "holidayparserplan.hpp"
/// A Bison parser.
class HolidayParserPlan
@@ -117,11 +117,16 @@ namespace KHolidays
/// Symbol semantic values.
#ifndef YYSTYPE
union semantic_type
+ {
+
+/* Line 35 of lalr1.cc */
#line 86 "holidayparserplan.ypp"
-{ int ival; char *sval; }
-/* Line 35 of lalr1.cc. */
-#line 124 "holidayparserplan.hpp"
- ;
+ int ival; char *sval;
+
+
+/* Line 35 of lalr1.cc */
+#line 129 "holidayparserplan.hpp"
+ };
#else
typedef YYSTYPE semantic_type;
#endif
@@ -136,33 +141,32 @@ namespace KHolidays
NUMBER = 258,
MONTH = 259,
WDAY = 260,
- COLOR = 261,
- STRING = 262,
+ STRING = 261,
+ CATEGORY = 262,
CALENDAR = 263,
INOP = 264,
PLUS = 265,
MINUS = 266,
- SMALL = 267,
- YEAR = 268,
- LEAPYEAR = 269,
- SHIFT = 270,
- IF = 271,
- LENGTH = 272,
- EASTER = 273,
- EQ = 274,
- NE = 275,
- LE = 276,
- GE = 277,
- LT = 278,
- GT = 279,
- PASCHA = 280,
- COUNTRY = 281,
- LANGUAGE = 282,
- NAME = 283,
- DESCRIPTION = 284,
- OR = 285,
- AND = 286,
- UMINUS = 287
+ YEAR = 267,
+ LEAPYEAR = 268,
+ SHIFT = 269,
+ IF = 270,
+ LENGTH = 271,
+ EASTER = 272,
+ EQ = 273,
+ NE = 274,
+ LE = 275,
+ GE = 276,
+ LT = 277,
+ GT = 278,
+ PASCHA = 279,
+ COUNTRY = 280,
+ LANGUAGE = 281,
+ NAME = 282,
+ DESCRIPTION = 283,
+ OR = 284,
+ AND = 285,
+ UMINUS = 286
};
};
@@ -177,6 +181,7 @@ namespace KHolidays
/// \returns 0 iff parsing succeeded.
virtual int parse ();
+#if YYDEBUG
/// The current debugging stream.
std::ostream& debug_stream () const;
/// Set the current debugging stream.
@@ -188,6 +193,7 @@ namespace KHolidays
debug_level_type debug_level () const;
/// Set the current debugging level.
void set_debug_level (debug_level_type l);
+#endif
private:
/// Report a syntax error.
@@ -197,7 +203,7 @@ namespace KHolidays
/// Generate an error message.
/// \param state the state where the error occurred.
- /// \param tok the look-ahead token.
+ /// \param tok the lookahead token.
virtual std::string yysyntax_error_ (int yystate, int tok);
#if YYDEBUG
@@ -215,7 +221,7 @@ namespace KHolidays
virtual void yy_symbol_print_ (int yytype,
const semantic_type* yyvaluep,
const location_type* yylocationp);
-#endif /* ! YYDEBUG */
+#endif
/// State numbers.
@@ -239,14 +245,14 @@ namespace KHolidays
/* Tables. */
/// For a state, the index in \a yytable_ of its portion.
static const short int yypact_[];
- static const short int yypact_ninf_;
+ static const signed char yypact_ninf_;
/// For a state, default rule to reduce.
/// Unless\a yytable_ specifies something else to do.
/// Zero means the default is an error.
static const unsigned char yydefact_[];
- static const short int yypgoto_[];
+ static const signed char yypgoto_[];
static const signed char yydefgoto_[];
/// What to do in a state.
@@ -292,6 +298,10 @@ namespace KHolidays
virtual void yy_reduce_print_ (int r);
/// Print the state stack on the debug stream.
virtual void yystack_print_ ();
+
+ /* Debugging. */
+ int yydebug_;
+ std::ostream* yycdebug_;
#endif
/// Convert a scanner token number \a t to a symbol number.
@@ -323,15 +333,18 @@ namespace KHolidays
static const unsigned int yyuser_token_number_max_;
static const token_number_type yyundef_token_;
- /* Debugging. */
- int yydebug_;
- std::ostream* yycdebug_;
-
-
/* User arguments. */
class HolidayParserDriverPlan& driver;
};
-}
+
+/* Line 35 of lalr1.cc */
+#line 1 "[Bison:b4_percent_define_default]"
+
+} // KHolidays
+
+/* Line 35 of lalr1.cc */
+#line 347 "holidayparserplan.hpp"
+
#endif /* ! defined PARSER_HEADER_H */
diff --git a/kholidays/parsers/plan2/holidayscannerplan.cpp b/kholidays/parsers/plan2/holidayscannerplan.cpp
index 3f04c91..a7c5a72 100644
--- a/kholidays/parsers/plan2/holidayscannerplan.cpp
+++ b/kholidays/parsers/plan2/holidayscannerplan.cpp
@@ -79,7 +79,6 @@ 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
@@ -110,6 +109,8 @@ typedef unsigned int flex_uint32_t;
#define UINT32_MAX (4294967295U)
#endif
+#endif /* ! C99 */
+
#endif /* ! FLEXINT_H */
/* %endif */
@@ -119,8 +120,8 @@ typedef unsigned int flex_uint32_t;
#include <iostream>
#include <errno.h>
#include <cstdlib>
-#include <cstring>
#include <cstdio>
+#include <cstring>
/* end standard C++ headers. */
/* %endif */
@@ -191,7 +192,15 @@ typedef unsigned int flex_uint32_t;
/* Size of default input buffer. */
#ifndef YY_BUF_SIZE
+#ifdef __ia64__
+/* On IA-64, the buffer size is 16k, not 8k.
+ * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case.
+ * Ditto for the __ia64__ case accordingly.
+ */
+#define YY_BUF_SIZE 32768
+#else
#define YY_BUF_SIZE 16384
+#endif /* __ia64__ */
#endif
/* The state buf must be large enough to hold one state per character in the main buffer.
@@ -397,8 +406,8 @@ typedef unsigned char YY_CHAR;
(yy_c_buf_p) = yy_cp;
/* %% [4.0] data tables for the DFA and the user's section 1 definitions go here */
-#define YY_NUM_RULES 201
-#define YY_END_OF_BUFFER 202
+#define YY_NUM_RULES 202
+#define YY_END_OF_BUFFER 203
/* This struct is not used in this scanner,
but its presence is necessary. */
struct yy_trans_info
@@ -406,112 +415,116 @@ struct yy_trans_info
flex_int32_t yy_verify;
flex_int32_t yy_nxt;
};
-static yyconst flex_int16_t yy_accept[943] =
+static yyconst flex_int16_t yy_accept[982] =
{ 0,
- 0, 0, 202, 200, 3, 4, 5, 200, 200, 5,
- 200, 10, 10, 10, 10, 10, 10, 41, 200, 42,
- 200, 200, 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 200, 200, 200, 200, 200, 200,
- 200, 200, 200, 200, 5, 3, 4, 38, 0, 11,
- 0, 1, 43, 10, 0, 0, 0, 0, 0, 39,
- 37, 40, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 129, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 203, 201, 3, 4, 5, 201, 201, 5,
+ 201, 10, 10, 10, 10, 10, 10, 31, 201, 32,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 201, 201, 201, 201, 201, 201,
+ 201, 201, 201, 201, 5, 3, 4, 28, 0, 11,
+ 0, 1, 33, 10, 0, 0, 0, 0, 0, 29,
+ 27, 30, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 130, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 18, 17, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 18, 17, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 15, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 15, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 16, 0,
- 0, 0, 0, 0, 0, 0, 44, 0, 2, 45,
- 46, 47, 48, 49, 0, 0, 0, 0, 51, 0,
- 115, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 13, 0, 190, 0, 0, 0,
+ 16, 0, 0, 0, 0, 0, 0, 34, 0, 2,
+ 35, 36, 37, 38, 39, 0, 0, 0, 0, 41,
+ 0, 116, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 13, 0, 191, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 61, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 62, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 114, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 103, 0, 0, 0, 0, 185,
+
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 189, 125, 0, 0, 0, 0, 0, 0, 190,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 14, 0, 0, 0, 0, 118, 131, 88, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 29, 113, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 102, 0,
- 0, 0, 0, 184, 0, 0, 0, 0, 0, 0,
+ 0, 0, 127, 0, 0, 0, 64, 0, 0, 63,
+ 0, 0, 0, 0, 0, 0, 0, 40, 0, 0,
+ 0, 172, 0, 0, 0, 188, 0, 0, 0, 0,
+ 0, 0, 0, 0, 8, 0, 0, 42, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 188, 124,
- 0, 0, 0, 0, 0, 0, 189, 0, 0, 0,
- 0, 32, 0, 0, 0, 0, 0, 34, 14, 0,
- 0, 0, 0, 117, 130, 87, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 126, 0, 0,
- 0, 63, 0, 0, 62, 0, 0, 0, 0, 0,
- 0, 0, 50, 0, 0, 0, 0, 171, 0, 0,
- 0, 187, 0, 0, 0, 0, 0, 0, 0, 0,
- 8, 0, 0, 52, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 19, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 108, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 82, 0, 0, 0,
+ 0, 0, 0, 21, 0, 0, 0, 0, 132, 44,
+ 0, 61, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 46, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 12, 0, 0, 39, 0, 35, 0, 0,
+
+ 0, 0, 0, 0, 109, 115, 0, 0, 101, 0,
+ 141, 0, 0, 0, 0, 0, 0, 198, 0, 0,
+ 0, 81, 0, 0, 0, 0, 0, 0, 0, 0,
+ 60, 0, 0, 0, 20, 0, 0, 0, 0, 0,
+ 0, 126, 0, 0, 0, 0, 0, 87, 79, 0,
+ 0, 0, 0, 171, 0, 0, 0, 0, 0, 95,
+ 94, 0, 0, 0, 148, 0, 0, 0, 143, 0,
+ 0, 0, 0, 0, 112, 0, 0, 0, 0, 0,
+ 0, 0, 26, 0, 124, 128, 0, 0, 0, 0,
+ 129, 0, 123, 37, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 19,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 107, 0, 0, 0, 0, 0,
+ 133, 0, 0, 168, 65, 192, 43, 0, 0, 0,
+ 0, 0, 77, 0, 0, 0, 0, 0, 23, 193,
+ 0, 0, 0, 0, 38, 74, 107, 0, 0, 0,
+ 80, 119, 0, 0, 0, 181, 0, 57, 0, 0,
+ 169, 0, 122, 0, 0, 0, 25, 0, 0, 0,
+ 83, 0, 89, 0, 70, 186, 0, 0, 110, 0,
+ 0, 0, 0, 0, 0, 0, 24, 0, 0, 91,
+ 0, 0, 0, 45, 117, 0, 0, 0, 0, 0,
+ 0, 48, 0, 36, 0, 0, 149, 0, 0, 199,
+
+ 0, 0, 0, 0, 76, 102, 0, 78, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 81,
- 0, 0, 0, 0, 0, 0, 0, 0, 22, 0,
- 0, 0, 0, 0, 131, 54, 0, 60, 0, 0,
- 0, 0, 0, 0, 28, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 12, 0, 0, 49,
- 45, 0, 0, 0, 30, 0, 0, 108, 114, 0,
-
- 0, 100, 0, 140, 0, 0, 0, 0, 0, 197,
- 0, 0, 0, 80, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 59, 0, 0, 0, 20, 0, 0,
- 0, 0, 0, 125, 0, 0, 0, 0, 0, 86,
- 78, 0, 0, 0, 0, 170, 0, 0, 0, 0,
- 0, 94, 93, 0, 0, 147, 0, 0, 142, 0,
- 0, 0, 111, 0, 0, 0, 0, 0, 0, 0,
- 27, 0, 123, 127, 21, 0, 0, 0, 0, 128,
- 0, 122, 47, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 35, 0, 0, 0, 0, 0, 0, 0,
-
- 0, 0, 132, 0, 0, 167, 64, 191, 53, 0,
- 0, 0, 0, 76, 0, 0, 0, 0, 24, 192,
- 0, 0, 0, 48, 73, 106, 0, 0, 79, 118,
- 0, 0, 180, 0, 56, 0, 0, 168, 0, 121,
- 0, 0, 0, 26, 0, 0, 0, 0, 82, 0,
- 88, 0, 69, 185, 0, 109, 0, 0, 0, 0,
- 0, 0, 0, 25, 0, 0, 90, 0, 0, 0,
- 116, 0, 0, 0, 0, 0, 46, 0, 0, 148,
- 0, 0, 198, 0, 0, 0, 0, 75, 101, 0,
- 77, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- 0, 0, 0, 0, 31, 0, 0, 0, 0, 0,
- 0, 0, 164, 0, 0, 0, 161, 6, 0, 0,
- 0, 0, 0, 0, 0, 0, 120, 0, 57, 0,
- 0, 183, 0, 0, 0, 104, 33, 0, 0, 0,
- 105, 0, 0, 66, 0, 110, 0, 0, 0, 85,
- 92, 172, 0, 0, 0, 0, 149, 179, 0, 0,
- 0, 0, 138, 0, 150, 0, 0, 0, 99, 0,
- 0, 0, 119, 0, 70, 0, 0, 36, 103, 0,
+ 0, 0, 0, 0, 0, 0, 0, 165, 0, 0,
+ 0, 162, 0, 6, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 121, 0, 0, 58, 0,
+ 0, 184, 0, 0, 0, 105, 0, 0, 0, 106,
+ 0, 54, 0, 67, 0, 111, 0, 0, 0, 86,
+ 93, 173, 0, 0, 0, 0, 150, 180, 0, 0,
+ 0, 0, 0, 0, 139, 0, 151, 0, 0, 0,
+ 100, 0, 0, 0, 120, 0, 71, 0, 0, 104,
+
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 68, 0, 193, 0,
-
- 0, 58, 0, 176, 0, 0, 0, 0, 7, 23,
- 112, 174, 98, 141, 67, 0, 0, 0, 84, 0,
- 91, 0, 0, 178, 74, 0, 194, 0, 165, 173,
- 0, 0, 0, 72, 96, 162, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 135, 0, 133, 0,
- 0, 0, 166, 175, 0, 0, 97, 181, 55, 0,
- 0, 163, 0, 0, 0, 0, 95, 0, 0, 65,
- 186, 177, 0, 0, 71, 0, 0, 0, 0, 0,
- 0, 0, 199, 0, 139, 137, 0, 169, 0, 0,
- 0, 0, 0, 89, 0, 196, 83, 143, 0, 0,
-
- 151, 0, 159, 0, 0, 0, 0, 158, 0, 134,
- 0, 9, 0, 0, 0, 182, 0, 152, 0, 155,
- 0, 157, 0, 136, 195, 0, 0, 0, 144, 0,
- 0, 0, 0, 145, 0, 154, 153, 156, 160, 0,
- 146, 0
+ 0, 0, 0, 0, 0, 0, 0, 0, 51, 69,
+ 0, 194, 0, 0, 59, 0, 0, 0, 177, 0,
+ 0, 0, 0, 0, 7, 22, 113, 175, 99, 142,
+ 68, 0, 0, 0, 85, 0, 92, 0, 0, 0,
+ 179, 75, 55, 0, 195, 0, 166, 174, 0, 0,
+ 0, 73, 97, 163, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 136, 0, 134, 0, 0, 0,
+ 167, 176, 0, 0, 0, 98, 182, 50, 0, 56,
+ 0, 0, 0, 164, 0, 0, 0, 0, 96, 0,
+
+ 0, 47, 66, 187, 178, 0, 0, 72, 0, 0,
+ 0, 0, 0, 0, 0, 200, 0, 140, 138, 0,
+ 170, 0, 0, 0, 49, 53, 0, 0, 0, 90,
+ 0, 197, 84, 144, 0, 0, 152, 0, 160, 0,
+ 0, 0, 0, 159, 0, 135, 0, 0, 9, 0,
+ 0, 0, 183, 0, 153, 0, 156, 0, 158, 0,
+ 137, 196, 0, 0, 0, 0, 145, 0, 0, 0,
+ 52, 0, 146, 0, 155, 154, 157, 161, 0, 147,
+ 0
} ;
static yyconst flex_int32_t yy_ec[256] =
@@ -557,223 +570,231 @@ static yyconst flex_int32_t yy_meta[70] =
1, 1, 1, 1, 1, 1, 1, 1, 1
} ;
-static yyconst flex_int16_t yy_base[946] =
+static yyconst flex_int16_t yy_base[985] =
{ 0,
- 0, 298, 287, 1944, 281, 277, 261, 259, 241, 1944,
- 226, 61, 67, 73, 79, 85, 97, 215, 210, 168,
- 141, 94, 86, 99, 191, 197, 128, 160, 169, 155,
- 233, 102, 224, 242, 95, 282, 78, 248, 327, 373,
- 95, 247, 270, 103, 166, 166, 159, 1944, 150, 1944,
- 151, 1944, 1944, 329, 96, 148, 149, 156, 187, 1944,
- 1944, 1944, 195, 196, 185, 201, 232, 243, 277, 276,
- 282, 1944, 290, 284, 287, 304, 312, 302, 328, 318,
- 336, 317, 367, 324, 325, 325, 326, 345, 346, 347,
- 374, 365, 383, 384, 366, 380, 377, 387, 375, 385,
-
- 418, 386, 1944, 396, 423, 414, 419, 428, 416, 420,
- 442, 417, 425, 441, 459, 457, 457, 460, 442, 459,
- 471, 463, 470, 464, 1944, 483, 511, 505, 487, 468,
- 519, 485, 511, 531, 517, 520, 517, 557, 566, 516,
- 560, 552, 563, 574, 586, 596, 575, 546, 570, 576,
- 582, 610, 601, 610, 626, 607, 1944, 133, 1944, 1944,
- 1944, 1944, 1944, 1944, 608, 605, 619, 624, 1944, 617,
- 1944, 631, 613, 623, 630, 629, 649, 652, 653, 652,
- 656, 641, 653, 656, 652, 667, 1944, 670, 666, 655,
- 672, 665, 665, 681, 675, 669, 666, 673, 673, 675,
-
- 685, 700, 703, 703, 690, 702, 707, 699, 719, 713,
- 704, 715, 707, 725, 706, 729, 736, 726, 723, 714,
- 725, 736, 742, 745, 751, 740, 745, 757, 766, 746,
- 763, 769, 1944, 755, 773, 754, 775, 773, 778, 786,
- 786, 792, 793, 787, 799, 790, 799, 789, 801, 801,
- 809, 817, 802, 803, 810, 814, 808, 829, 817, 819,
- 822, 837, 832, 842, 843, 844, 1944, 1944, 853, 846,
- 837, 845, 847, 859, 845, 859, 868, 865, 871, 872,
- 873, 863, 876, 863, 880, 868, 867, 872, 1944, 889,
- 885, 889, 904, 1944, 900, 892, 906, 895, 896, 903,
-
- 909, 901, 922, 924, 906, 907, 915, 935, 1944, 922,
- 914, 926, 929, 939, 935, 936, 1944, 957, 942, 943,
- 953, 1944, 964, 966, 950, 962, 952, 1944, 1944, 960,
- 956, 974, 971, 1944, 1944, 1944, 963, 966, 958, 983,
- 966, 980, 971, 973, 993, 988, 990, 990, 986, 1005,
- 992, 999, 1010, 999, 998, 1012, 1021, 1944, 1011, 1023,
- 1024, 1944, 1025, 1022, 1944, 1012, 1023, 1030, 1026, 1033,
- 1032, 1022, 1944, 1020, 1033, 1052, 1041, 1944, 1053, 1059,
- 1053, 1944, 1055, 1060, 1049, 1051, 1046, 1071, 1072, 1056,
- 1944, 1056, 1062, 1944, 1064, 1079, 1080, 1071, 1068, 1083,
-
- 1086, 1080, 1079, 1095, 1089, 1097, 1093, 1109, 1104, 1944,
- 1112, 1102, 1096, 1099, 1108, 1121, 1121, 1120, 1124, 1108,
- 1105, 1113, 1118, 1119, 1944, 1132, 1137, 1142, 1123, 1151,
- 1131, 1135, 1136, 1140, 1147, 1152, 1143, 1166, 1169, 1170,
- 1147, 1168, 1154, 1171, 1155, 1165, 1162, 1164, 1175, 1944,
- 1183, 1180, 1186, 1188, 1189, 1183, 1192, 1204, 1944, 1200,
- 1195, 1203, 1212, 1206, 1206, 1944, 1219, 1944, 1214, 1209,
- 1204, 1211, 1221, 1226, 1944, 1209, 1214, 1216, 1234, 1220,
- 1239, 1234, 1230, 1235, 1250, 1239, 1944, 1240, 1259, 1944,
- 1944, 1253, 1240, 1245, 1944, 1249, 1269, 1944, 1944, 1253,
-
- 1249, 1944, 1272, 1944, 1260, 1266, 1258, 1263, 1277, 1944,
- 1274, 1273, 1286, 1944, 1266, 1277, 1292, 1289, 1295, 1295,
- 1285, 1301, 1298, 1944, 1293, 1296, 1310, 1944, 1293, 1296,
- 1317, 1304, 1318, 1944, 1322, 1320, 1321, 1322, 1323, 1944,
- 1944, 1324, 1313, 1336, 1324, 1944, 1326, 1322, 1323, 1352,
- 1349, 1944, 1944, 1350, 1346, 1944, 1359, 1343, 1944, 1363,
- 1361, 1363, 1944, 1357, 1357, 1358, 1372, 1365, 1370, 1375,
- 1944, 1376, 1944, 1944, 1944, 1380, 1360, 1360, 1368, 1944,
- 1375, 1944, 1944, 1371, 1386, 1389, 1399, 1404, 1407, 1409,
- 1392, 1400, 1944, 1406, 1397, 1408, 1420, 1399, 1422, 1402,
-
- 1406, 1422, 1944, 1402, 1431, 1944, 1944, 1944, 1944, 1421,
- 1437, 1422, 1442, 1944, 1420, 1448, 1438, 1453, 1944, 1944,
- 1449, 1456, 1443, 1944, 1944, 1944, 1455, 1447, 1944, 1944,
- 1453, 1456, 1944, 1447, 1944, 1471, 1453, 1944, 1470, 1944,
- 1474, 1469, 1476, 1944, 1461, 1481, 1470, 1465, 1944, 1483,
- 1944, 1490, 1944, 1944, 1492, 1944, 1489, 1485, 1496, 1491,
- 1507, 1495, 1491, 1944, 1495, 1494, 1944, 1503, 1500, 1507,
- 1944, 1521, 1509, 1523, 1507, 1525, 1944, 1525, 1529, 1944,
- 1512, 1512, 1944, 1525, 1524, 1525, 1543, 1944, 1944, 1533,
- 1944, 1545, 1546, 1557, 1536, 1550, 1540, 1554, 1563, 1566,
-
- 1551, 1564, 1590, 1559, 1944, 1564, 1572, 1574, 1573, 1569,
- 1584, 1593, 1944, 1602, 1586, 1597, 1944, 1944, 1590, 1590,
- 1606, 1613, 1606, 1593, 1619, 1620, 1944, 1621, 1944, 1622,
- 1619, 1944, 1629, 1627, 1619, 1944, 1944, 1623, 1640, 1630,
- 1944, 1631, 1631, 1944, 1645, 1944, 1637, 1633, 1649, 1944,
- 1944, 1944, 1640, 1638, 1636, 1652, 1944, 1944, 1660, 1640,
- 1660, 1662, 1944, 1669, 1944, 1670, 1671, 1655, 1944, 1667,
- 1677, 1658, 1944, 1682, 1944, 1680, 1690, 1944, 1944, 1672,
- 1686, 1679, 1679, 1693, 1702, 1703, 1699, 1700, 1695, 1702,
- 1706, 1696, 1703, 1716, 1720, 1721, 1944, 1714, 1944, 1713,
-
- 1717, 1944, 1718, 1944, 1717, 1726, 1740, 1728, 1944, 1944,
- 1944, 1944, 1944, 1944, 1944, 1725, 1747, 1745, 1944, 1737,
- 1944, 1752, 1753, 1944, 1944, 1737, 1944, 1740, 1944, 1944,
- 1758, 1750, 1760, 1944, 1944, 1944, 1740, 1753, 1766, 1768,
- 1763, 1759, 1772, 1775, 1776, 1763, 1944, 1773, 1944, 1779,
- 1783, 1792, 1944, 1944, 1780, 1784, 1944, 1944, 1944, 1791,
- 1800, 1944, 1783, 1796, 1800, 1792, 1944, 1797, 1809, 1944,
- 1944, 1944, 1810, 1806, 1944, 1814, 1813, 1812, 1808, 1810,
- 1814, 1811, 1944, 1824, 1944, 1944, 1828, 1944, 1836, 1827,
- 1828, 1821, 1841, 1944, 1830, 1944, 1944, 1944, 1837, 1845,
-
- 1944, 1834, 1944, 1854, 1857, 1858, 1855, 1944, 1852, 1944,
- 1859, 1944, 1851, 1866, 1869, 1944, 1862, 1944, 1864, 1944,
- 1864, 1944, 1872, 1944, 1944, 1880, 1870, 1886, 1944, 1887,
- 1877, 1874, 1882, 1944, 1885, 1944, 1944, 1944, 1944, 1891,
- 1944, 1944, 102, 101, 99
+ 0, 415, 427, 2013, 424, 422, 407, 380, 378, 2013,
+ 371, 61, 67, 73, 79, 85, 97, 361, 243, 217,
+ 141, 93, 87, 98, 191, 135, 191, 188, 184, 83,
+ 238, 105, 239, 240, 249, 292, 95, 290, 338, 384,
+ 115, 141, 293, 135, 182, 180, 152, 2013, 147, 2013,
+ 133, 2013, 2013, 440, 129, 147, 148, 146, 148, 2013,
+ 2013, 2013, 157, 193, 175, 182, 177, 184, 202, 197,
+ 236, 2013, 249, 243, 250, 256, 254, 258, 239, 286,
+ 250, 265, 287, 282, 284, 288, 289, 312, 334, 336,
+ 340, 330, 347, 344, 330, 343, 340, 333, 351, 339,
+
+ 377, 384, 381, 2013, 390, 395, 390, 425, 397, 383,
+ 425, 440, 421, 429, 443, 463, 439, 436, 437, 438,
+ 440, 446, 442, 474, 468, 2013, 486, 515, 488, 490,
+ 471, 523, 484, 496, 496, 535, 489, 501, 521, 531,
+ 582, 566, 518, 530, 558, 538, 569, 584, 559, 555,
+ 579, 585, 586, 603, 606, 618, 609, 2013, 130, 2013,
+ 2013, 2013, 2013, 2013, 2013, 611, 610, 626, 632, 2013,
+ 625, 2013, 634, 615, 619, 625, 624, 636, 633, 637,
+ 634, 635, 629, 637, 635, 648, 664, 2013, 669, 667,
+ 657, 674, 667, 665, 682, 675, 667, 664, 669, 668,
+
+ 688, 671, 673, 689, 693, 691, 691, 678, 705, 697,
+ 689, 718, 714, 707, 707, 719, 711, 730, 712, 725,
+ 734, 731, 728, 718, 722, 733, 731, 735, 739, 728,
+ 739, 750, 768, 748, 765, 772, 2013, 759, 770, 758,
+ 782, 780, 782, 786, 783, 788, 789, 775, 788, 780,
+ 787, 777, 789, 791, 812, 819, 800, 806, 814, 817,
+ 812, 831, 819, 820, 821, 825, 837, 830, 839, 840,
+ 834, 836, 2013, 845, 839, 828, 840, 838, 852, 855,
+ 867, 855, 868, 875, 872, 878, 880, 883, 884, 868,
+ 883, 869, 869, 870, 2013, 888, 877, 881, 904, 2013,
+
+ 891, 889, 912, 900, 906, 912, 926, 927, 911, 912,
+ 930, 2013, 925, 917, 928, 925, 934, 930, 922, 2013,
+ 942, 927, 928, 954, 956, 947, 957, 967, 966, 956,
+ 956, 2013, 965, 961, 980, 978, 2013, 2013, 2013, 970,
+ 970, 962, 986, 967, 981, 976, 971, 973, 994, 981,
+ 980, 984, 983, 1002, 998, 1004, 1017, 1007, 1004, 1018,
+ 1013, 1028, 2013, 1019, 1032, 1033, 2013, 1034, 1031, 2013,
+ 1018, 1029, 1035, 1029, 1036, 1034, 1024, 2013, 1022, 1028,
+ 1047, 2013, 1050, 1056, 1059, 2013, 1060, 1067, 1057, 1057,
+ 1052, 1077, 1078, 1063, 1079, 1065, 1071, 2013, 1073, 1085,
+
+ 1086, 1076, 1071, 1086, 1088, 1082, 1081, 1090, 1084, 1097,
+ 1092, 1116, 1112, 2013, 1120, 1112, 1105, 1106, 1119, 1116,
+ 1130, 1131, 1130, 1134, 1129, 1119, 1116, 1121, 1125, 1126,
+ 1129, 1130, 2013, 1141, 1147, 1173, 1137, 1155, 1144, 1149,
+ 1150, 1156, 1163, 1156, 1178, 1180, 1182, 1159, 1180, 1166,
+ 1183, 1167, 1177, 1171, 1173, 1184, 2013, 1191, 1188, 1193,
+ 1185, 1195, 1216, 2013, 1211, 1214, 1219, 1217, 1217, 2013,
+ 1226, 2013, 1221, 1217, 1213, 1220, 1230, 1235, 1215, 1220,
+ 1221, 2013, 1227, 1238, 1225, 1227, 1244, 1239, 1241, 1239,
+ 1263, 1253, 2013, 1254, 1273, 2013, 1272, 2013, 1268, 1253,
+
+ 1258, 1265, 1263, 1282, 2013, 2013, 1266, 1262, 2013, 1285,
+ 2013, 1269, 1274, 1280, 1272, 1277, 1289, 2013, 1287, 1285,
+ 1297, 2013, 1283, 1293, 1316, 1314, 1314, 1315, 1318, 1314,
+ 2013, 1309, 1310, 1324, 2013, 1307, 1309, 1330, 1317, 1335,
+ 1332, 2013, 1336, 1334, 1335, 1336, 1335, 2013, 2013, 1337,
+ 1325, 1347, 1341, 2013, 1342, 1346, 1348, 1371, 1369, 2013,
+ 2013, 1372, 1371, 1365, 2013, 1377, 1361, 1372, 2013, 1382,
+ 1380, 1373, 1372, 1383, 2013, 1375, 1375, 1376, 1390, 1384,
+ 1390, 1395, 2013, 1397, 2013, 2013, 1404, 1385, 1393, 1400,
+ 2013, 1409, 2013, 2013, 1404, 1417, 1422, 1422, 1427, 1428,
+
+ 1430, 1414, 1426, 1416, 1425, 1437, 1438, 1418, 1422, 1462,
+ 2013, 1419, 1444, 2013, 2013, 2013, 2013, 1432, 1454, 1438,
+ 1468, 1457, 2013, 1451, 1475, 1472, 1462, 1477, 2013, 2013,
+ 1472, 1479, 1466, 1476, 2013, 2013, 2013, 1473, 1478, 1470,
+ 2013, 2013, 1475, 1481, 1477, 2013, 1469, 2013, 1494, 1478,
+ 2013, 1501, 2013, 1506, 1510, 1518, 2013, 1501, 1508, 1502,
+ 2013, 1520, 2013, 1525, 2013, 2013, 1526, 1504, 2013, 1524,
+ 1513, 1525, 1520, 1534, 1521, 1517, 2013, 1519, 1518, 2013,
+ 1526, 1521, 1529, 2013, 2013, 1547, 1531, 1554, 1542, 1551,
+ 1570, 2013, 1571, 2013, 1572, 1573, 2013, 1556, 1555, 2013,
+
+ 1566, 1565, 1563, 1582, 2013, 2013, 1564, 2013, 1576, 1577,
+ 1586, 1564, 1578, 1566, 1580, 1589, 1575, 1590, 1616, 1591,
+ 1594, 1610, 1613, 1608, 1605, 1619, 1628, 2013, 1630, 1615,
+ 1626, 2013, 1618, 2013, 1625, 1620, 1619, 1635, 1640, 1634,
+ 1621, 1647, 1650, 1656, 1666, 2013, 1666, 1670, 2013, 1671,
+ 1666, 2013, 1673, 1671, 1659, 2013, 1663, 1678, 1668, 2013,
+ 1670, 2013, 1666, 2013, 1680, 2013, 1672, 1667, 1683, 2013,
+ 2013, 2013, 1674, 1670, 1668, 1685, 2013, 2013, 1674, 1697,
+ 1681, 1695, 1712, 1714, 2013, 1720, 2013, 1721, 1723, 1707,
+ 2013, 1716, 1723, 1704, 2013, 1724, 2013, 1723, 1732, 2013,
+
+ 1713, 1727, 1716, 1716, 1730, 1738, 1738, 1732, 1734, 1733,
+ 1746, 1749, 1748, 1755, 1767, 1771, 1773, 1774, 2013, 2013,
+ 1767, 2013, 1763, 1764, 2013, 1767, 1767, 1769, 2013, 1783,
+ 1765, 1774, 1786, 1773, 2013, 2013, 2013, 2013, 2013, 2013,
+ 2013, 1770, 1788, 1786, 2013, 1779, 2013, 1794, 1797, 1786,
+ 2013, 2013, 2013, 1789, 2013, 1799, 2013, 2013, 1818, 1811,
+ 1821, 2013, 2013, 2013, 1800, 1813, 1825, 1825, 1820, 1816,
+ 1830, 1831, 1829, 1816, 2013, 1822, 2013, 1828, 1830, 1838,
+ 2013, 2013, 1826, 1821, 1828, 2013, 2013, 2013, 1825, 2013,
+ 1836, 1846, 1856, 2013, 1847, 1861, 1866, 1856, 2013, 1862,
+
+ 1874, 2013, 2013, 2013, 2013, 1876, 1870, 2013, 1878, 1877,
+ 1874, 1870, 1872, 1873, 1867, 2013, 1880, 2013, 2013, 1880,
+ 2013, 1888, 1882, 1879, 2013, 2013, 1880, 1875, 1897, 2013,
+ 1887, 2013, 2013, 2013, 1903, 1911, 2013, 1901, 2013, 1921,
+ 1923, 1924, 1921, 2013, 1918, 2013, 1923, 1907, 2013, 1917,
+ 1932, 1933, 2013, 1926, 2013, 1928, 2013, 1928, 2013, 1933,
+ 2013, 2013, 1934, 1939, 1929, 1942, 2013, 1944, 1934, 1936,
+ 2013, 1945, 2013, 1953, 2013, 2013, 2013, 2013, 1960, 2013,
+ 2013, 102, 100, 99
} ;
-static yyconst flex_int16_t yy_def[946] =
+static yyconst flex_int16_t yy_def[985] =
{ 0,
- 942, 1, 942, 942, 942, 942, 942, 943, 944, 942,
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
- 942, 942, 942, 942, 945, 942, 942, 942, 943, 942,
- 944, 942, 942, 942, 942, 942, 942, 942, 942, 942,
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
-
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
- 942, 942, 942, 942, 942, 942, 942, 945, 942, 942,
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
-
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
-
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
-
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
-
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
-
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
-
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
-
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
-
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
- 942, 0, 942, 942, 942
+ 981, 1, 981, 981, 981, 981, 981, 982, 983, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 984, 981, 981, 981, 982, 981,
+ 983, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 984, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 0, 981, 981, 981
} ;
-static yyconst flex_int16_t yy_nxt[2014] =
+static yyconst flex_int16_t yy_nxt[2083] =
{ 0,
4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
14, 15, 16, 17, 10, 18, 19, 20, 21, 22,
@@ -784,222 +805,229 @@ static yyconst flex_int16_t yy_nxt[2014] =
38, 39, 40, 4, 41, 42, 43, 4, 44, 54,
54, 54, 54, 54, 54, 54, 54, 54, 54, 54,
54, 54, 54, 54, 54, 54, 54, 54, 54, 54,
- 54, 54, 54, 54, 54, 54, 54, 54, 54, 158,
-
- 133, 51, 49, 55, 56, 54, 54, 54, 54, 54,
- 54, 79, 74, 151, 57, 124, 75, 82, 80, 76,
- 113, 83, 58, 77, 114, 133, 125, 81, 55, 56,
- 126, 84, 78, 160, 59, 159, 79, 74, 151, 57,
- 124, 75, 82, 80, 76, 113, 83, 58, 77, 114,
- 97, 125, 81, 52, 50, 126, 84, 78, 160, 59,
- 63, 47, 64, 98, 65, 66, 99, 46, 159, 161,
- 162, 157, 67, 106, 68, 97, 69, 70, 100, 71,
- 72, 163, 101, 73, 62, 63, 102, 64, 98, 65,
- 66, 99, 103, 107, 161, 162, 108, 67, 106, 68,
-
- 104, 69, 70, 100, 71, 72, 163, 101, 73, 85,
- 105, 102, 164, 165, 166, 92, 86, 103, 107, 93,
- 87, 108, 167, 94, 88, 104, 61, 89, 90, 95,
- 91, 60, 96, 53, 85, 105, 168, 164, 165, 166,
- 92, 86, 115, 52, 93, 87, 116, 167, 94, 88,
- 117, 109, 89, 90, 95, 91, 118, 96, 110, 111,
- 120, 168, 119, 50, 121, 112, 134, 115, 122, 152,
- 135, 116, 153, 169, 123, 117, 109, 48, 170, 47,
- 136, 118, 46, 110, 111, 120, 942, 119, 154, 121,
- 112, 134, 155, 122, 152, 135, 171, 153, 169, 123,
-
- 127, 172, 156, 170, 128, 136, 173, 129, 174, 175,
- 176, 130, 45, 154, 942, 942, 942, 155, 131, 132,
- 942, 171, 177, 180, 942, 127, 172, 156, 942, 128,
- 178, 173, 129, 174, 175, 176, 130, 54, 54, 54,
- 54, 54, 54, 131, 132, 137, 181, 177, 180, 138,
- 179, 182, 139, 140, 184, 178, 183, 141, 185, 142,
- 189, 190, 942, 191, 192, 143, 942, 193, 942, 194,
- 137, 181, 195, 942, 138, 179, 182, 139, 140, 184,
- 942, 183, 141, 185, 142, 189, 190, 186, 191, 192,
- 143, 144, 193, 187, 194, 145, 196, 195, 146, 147,
-
- 197, 148, 198, 188, 201, 149, 202, 199, 203, 204,
- 205, 150, 186, 211, 942, 206, 144, 212, 187, 200,
- 145, 196, 207, 146, 147, 197, 148, 198, 188, 201,
- 149, 202, 199, 203, 204, 205, 150, 208, 211, 209,
- 206, 213, 212, 214, 200, 215, 219, 207, 216, 217,
- 218, 220, 221, 942, 210, 224, 225, 942, 942, 227,
- 222, 226, 208, 942, 209, 942, 213, 240, 214, 942,
- 215, 219, 228, 216, 217, 218, 220, 221, 223, 210,
- 224, 225, 234, 229, 227, 222, 226, 230, 236, 241,
- 231, 238, 240, 235, 232, 239, 242, 228, 237, 243,
-
- 233, 246, 244, 223, 247, 256, 257, 234, 229, 245,
- 942, 261, 230, 236, 241, 231, 238, 942, 235, 232,
- 239, 242, 942, 237, 243, 233, 246, 244, 254, 247,
- 256, 257, 262, 942, 245, 248, 261, 258, 267, 268,
- 269, 255, 249, 250, 259, 942, 251, 252, 270, 253,
- 263, 260, 942, 254, 271, 281, 942, 262, 264, 942,
- 248, 265, 258, 267, 268, 269, 255, 249, 250, 259,
- 266, 251, 252, 270, 253, 263, 260, 272, 282, 271,
- 281, 273, 283, 264, 277, 942, 265, 296, 274, 297,
- 275, 284, 278, 276, 285, 266, 942, 942, 298, 286,
-
- 942, 279, 272, 282, 287, 280, 273, 283, 299, 277,
- 294, 295, 296, 274, 297, 275, 284, 278, 276, 285,
- 288, 289, 291, 298, 286, 290, 279, 302, 292, 287,
- 280, 300, 301, 299, 293, 294, 295, 308, 303, 309,
- 310, 311, 312, 313, 305, 288, 289, 291, 304, 314,
- 290, 316, 302, 292, 306, 307, 300, 301, 317, 293,
- 318, 319, 308, 303, 309, 310, 311, 312, 313, 305,
- 320, 315, 321, 304, 314, 322, 316, 323, 326, 306,
- 307, 324, 325, 317, 327, 318, 319, 328, 329, 330,
- 331, 332, 333, 334, 335, 320, 315, 321, 336, 337,
-
- 322, 338, 323, 326, 339, 340, 324, 325, 341, 327,
- 342, 343, 328, 329, 330, 331, 332, 333, 334, 335,
- 344, 345, 346, 336, 337, 347, 338, 348, 349, 339,
- 340, 350, 352, 341, 353, 342, 343, 354, 355, 356,
- 351, 357, 358, 359, 360, 344, 345, 346, 365, 366,
- 347, 367, 348, 349, 363, 361, 350, 352, 364, 353,
- 368, 369, 354, 355, 356, 351, 357, 358, 359, 360,
- 362, 370, 371, 365, 366, 372, 367, 373, 374, 363,
- 361, 375, 379, 364, 376, 368, 369, 380, 377, 381,
- 382, 378, 386, 387, 388, 362, 370, 371, 383, 389,
-
- 372, 384, 373, 374, 390, 385, 375, 379, 391, 376,
- 392, 393, 380, 377, 381, 382, 378, 386, 387, 388,
- 394, 395, 396, 383, 389, 397, 384, 398, 399, 390,
- 385, 402, 400, 391, 401, 392, 393, 404, 406, 403,
- 407, 408, 405, 409, 410, 394, 395, 396, 411, 412,
- 397, 413, 398, 399, 414, 415, 402, 400, 416, 401,
- 417, 418, 404, 406, 403, 407, 408, 405, 409, 410,
- 419, 420, 421, 411, 412, 422, 413, 423, 424, 414,
- 415, 425, 426, 416, 427, 417, 418, 428, 432, 433,
- 434, 435, 436, 429, 437, 419, 420, 421, 438, 430,
-
- 422, 439, 423, 424, 440, 441, 425, 426, 431, 427,
- 442, 443, 428, 432, 433, 434, 435, 436, 429, 437,
- 444, 445, 446, 438, 430, 448, 439, 449, 450, 440,
- 441, 451, 452, 431, 453, 442, 443, 454, 455, 447,
- 456, 459, 457, 460, 461, 444, 445, 446, 465, 466,
- 448, 467, 449, 450, 458, 462, 451, 452, 468, 453,
- 469, 470, 454, 455, 447, 456, 459, 457, 460, 461,
- 463, 464, 471, 465, 466, 472, 467, 473, 474, 458,
- 462, 475, 476, 468, 477, 469, 470, 478, 479, 480,
- 481, 482, 483, 484, 485, 463, 464, 471, 486, 487,
-
- 472, 488, 473, 474, 489, 490, 475, 476, 491, 477,
- 492, 493, 478, 479, 480, 481, 482, 483, 484, 485,
- 494, 495, 496, 486, 487, 497, 488, 498, 499, 489,
- 490, 500, 501, 491, 502, 492, 493, 503, 504, 505,
- 506, 507, 508, 509, 510, 494, 495, 496, 511, 512,
- 497, 513, 498, 499, 514, 515, 500, 501, 516, 502,
- 517, 518, 503, 504, 505, 506, 507, 508, 509, 510,
- 519, 520, 521, 511, 512, 522, 513, 523, 524, 514,
- 515, 525, 526, 516, 527, 517, 518, 528, 529, 530,
- 531, 532, 533, 534, 535, 519, 520, 521, 536, 537,
-
- 522, 538, 523, 524, 539, 540, 525, 526, 541, 527,
- 542, 543, 528, 529, 530, 531, 532, 533, 534, 535,
- 544, 545, 546, 536, 537, 547, 538, 548, 549, 539,
- 540, 550, 551, 541, 552, 542, 543, 553, 554, 555,
- 556, 557, 558, 559, 560, 544, 545, 546, 561, 562,
- 547, 563, 548, 549, 564, 565, 550, 551, 568, 552,
- 566, 567, 553, 554, 555, 556, 557, 558, 559, 560,
- 569, 570, 571, 561, 562, 572, 563, 573, 574, 564,
- 565, 575, 576, 568, 577, 566, 567, 578, 579, 580,
- 581, 582, 583, 584, 585, 569, 570, 571, 586, 587,
-
- 572, 588, 573, 574, 589, 590, 575, 576, 591, 577,
- 592, 593, 578, 579, 580, 581, 582, 583, 584, 585,
- 594, 595, 596, 586, 587, 597, 588, 598, 599, 589,
- 590, 602, 603, 591, 600, 592, 593, 604, 601, 605,
- 606, 607, 608, 609, 610, 594, 595, 596, 611, 612,
- 597, 613, 598, 599, 614, 615, 602, 603, 616, 600,
- 617, 618, 604, 601, 605, 606, 607, 608, 609, 610,
- 619, 620, 621, 611, 612, 622, 613, 623, 624, 614,
- 615, 625, 626, 616, 627, 617, 618, 628, 629, 630,
- 631, 632, 633, 634, 635, 619, 620, 621, 636, 637,
-
- 622, 638, 623, 624, 639, 640, 625, 626, 641, 627,
- 642, 643, 628, 629, 630, 631, 632, 633, 634, 635,
- 644, 645, 646, 636, 637, 647, 638, 648, 649, 639,
- 640, 650, 651, 641, 652, 642, 643, 653, 654, 655,
- 656, 657, 658, 659, 660, 644, 645, 646, 661, 662,
- 647, 663, 648, 649, 664, 665, 650, 651, 666, 652,
- 667, 668, 653, 654, 655, 656, 657, 658, 659, 660,
- 669, 670, 671, 661, 662, 672, 663, 673, 674, 664,
- 665, 675, 676, 666, 677, 667, 668, 678, 679, 680,
- 681, 682, 683, 684, 685, 669, 670, 671, 686, 687,
-
- 672, 688, 673, 674, 689, 690, 675, 676, 691, 677,
- 694, 692, 678, 679, 680, 681, 682, 683, 684, 685,
- 693, 695, 696, 686, 687, 697, 688, 698, 699, 689,
- 690, 700, 701, 691, 702, 694, 692, 703, 704, 705,
- 706, 707, 708, 712, 709, 693, 695, 696, 710, 713,
- 697, 711, 698, 699, 714, 715, 700, 701, 716, 702,
- 717, 718, 703, 704, 705, 706, 707, 708, 712, 709,
- 719, 720, 721, 710, 713, 722, 711, 723, 724, 714,
- 715, 725, 726, 716, 727, 717, 718, 728, 729, 730,
- 731, 732, 733, 734, 735, 719, 720, 721, 736, 737,
-
- 722, 738, 723, 724, 739, 740, 725, 726, 741, 727,
- 742, 743, 728, 729, 730, 731, 732, 733, 734, 735,
- 744, 745, 746, 736, 737, 747, 738, 748, 749, 739,
- 740, 750, 751, 741, 752, 742, 743, 753, 754, 755,
- 757, 758, 759, 760, 761, 744, 745, 746, 762, 763,
- 747, 764, 748, 749, 765, 766, 750, 751, 756, 752,
- 767, 768, 753, 754, 755, 757, 758, 759, 760, 761,
- 769, 770, 771, 762, 763, 772, 764, 773, 774, 765,
- 766, 775, 776, 756, 777, 767, 768, 778, 779, 780,
- 786, 942, 942, 942, 787, 769, 770, 771, 788, 789,
-
- 772, 942, 773, 774, 790, 791, 775, 776, 781, 777,
- 792, 793, 778, 779, 780, 786, 782, 783, 784, 787,
- 794, 795, 796, 788, 789, 797, 785, 798, 799, 790,
- 791, 800, 801, 781, 802, 792, 793, 803, 804, 805,
- 806, 782, 783, 784, 807, 794, 795, 796, 808, 809,
- 797, 785, 798, 799, 810, 811, 800, 801, 812, 802,
- 813, 814, 803, 804, 805, 806, 815, 816, 817, 807,
- 818, 819, 820, 808, 809, 821, 822, 823, 824, 810,
- 811, 825, 826, 812, 827, 813, 814, 828, 829, 830,
- 831, 815, 816, 817, 832, 818, 819, 820, 833, 834,
-
- 821, 822, 823, 824, 835, 836, 825, 826, 837, 827,
- 838, 839, 828, 829, 830, 831, 841, 842, 843, 832,
- 844, 840, 845, 833, 834, 846, 847, 848, 849, 835,
- 836, 850, 851, 837, 852, 838, 839, 853, 854, 855,
- 856, 841, 842, 843, 857, 844, 840, 845, 858, 859,
- 846, 847, 848, 849, 860, 861, 850, 851, 862, 852,
- 863, 864, 853, 854, 855, 856, 865, 866, 867, 857,
- 868, 869, 870, 858, 859, 871, 872, 873, 874, 860,
- 861, 875, 876, 862, 877, 863, 864, 878, 879, 880,
- 881, 865, 866, 867, 882, 868, 869, 870, 883, 884,
-
- 871, 872, 873, 874, 885, 886, 875, 876, 887, 877,
- 888, 889, 878, 879, 880, 881, 890, 891, 892, 882,
- 894, 895, 896, 883, 884, 897, 898, 899, 900, 885,
- 886, 901, 902, 887, 903, 888, 889, 893, 904, 905,
- 906, 890, 891, 892, 907, 894, 895, 896, 908, 909,
- 897, 898, 899, 900, 910, 911, 901, 902, 912, 903,
- 913, 914, 893, 904, 905, 906, 915, 916, 917, 907,
- 918, 919, 920, 908, 909, 921, 922, 923, 924, 910,
- 911, 925, 926, 912, 927, 913, 914, 928, 929, 930,
- 931, 915, 916, 917, 932, 918, 919, 920, 933, 934,
-
- 921, 922, 923, 924, 935, 936, 925, 926, 937, 927,
- 938, 939, 928, 929, 930, 931, 940, 941, 942, 932,
- 942, 942, 942, 933, 934, 942, 942, 942, 942, 935,
- 936, 942, 942, 937, 942, 938, 939, 942, 942, 942,
- 942, 940, 941, 3, 942, 942, 942, 942, 942, 942,
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
-
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
- 942, 942, 942
+ 54, 54, 54, 54, 54, 54, 54, 54, 54, 159,
+
+ 51, 107, 49, 55, 56, 54, 54, 54, 54, 54,
+ 54, 74, 78, 79, 57, 75, 82, 135, 76, 80,
+ 83, 108, 58, 114, 109, 81, 107, 115, 55, 56,
+ 84, 77, 160, 153, 59, 52, 74, 78, 79, 57,
+ 75, 82, 135, 76, 80, 83, 108, 58, 114, 109,
+ 81, 50, 115, 92, 47, 84, 77, 93, 153, 59,
+ 63, 94, 64, 154, 65, 66, 161, 95, 162, 163,
+ 96, 164, 67, 165, 68, 166, 69, 70, 92, 71,
+ 72, 46, 93, 73, 160, 63, 94, 64, 154, 65,
+ 66, 161, 95, 162, 163, 96, 164, 67, 165, 68,
+
+ 166, 69, 70, 158, 71, 72, 101, 104, 73, 85,
+ 102, 167, 168, 97, 103, 105, 86, 169, 170, 171,
+ 87, 172, 173, 98, 88, 106, 99, 89, 90, 100,
+ 91, 101, 104, 62, 85, 102, 167, 168, 97, 103,
+ 105, 86, 169, 170, 171, 87, 172, 173, 98, 88,
+ 106, 99, 89, 90, 100, 91, 110, 116, 121, 61,
+ 174, 117, 122, 111, 112, 118, 123, 175, 176, 125,
+ 113, 119, 124, 177, 178, 179, 180, 120, 181, 185,
+ 126, 110, 116, 121, 127, 174, 117, 122, 111, 112,
+ 118, 123, 175, 176, 125, 113, 119, 124, 177, 178,
+
+ 179, 180, 120, 181, 185, 126, 186, 187, 136, 127,
+ 128, 155, 137, 188, 129, 156, 182, 130, 190, 183,
+ 191, 131, 138, 189, 184, 157, 192, 193, 132, 133,
+ 134, 186, 187, 136, 194, 128, 155, 137, 188, 129,
+ 156, 182, 130, 190, 183, 191, 131, 138, 189, 184,
+ 157, 192, 193, 132, 133, 134, 139, 195, 140, 194,
+ 141, 196, 197, 142, 143, 198, 199, 200, 203, 204,
+ 144, 205, 206, 207, 208, 201, 145, 60, 53, 202,
+ 52, 139, 195, 140, 50, 141, 196, 197, 142, 143,
+ 198, 199, 200, 203, 204, 144, 205, 206, 207, 208,
+
+ 201, 145, 146, 211, 202, 212, 147, 209, 214, 148,
+ 149, 216, 150, 217, 210, 223, 151, 215, 224, 218,
+ 213, 219, 152, 48, 47, 46, 981, 146, 211, 45,
+ 212, 147, 209, 214, 148, 149, 216, 150, 217, 210,
+ 223, 151, 215, 224, 218, 213, 219, 152, 54, 54,
+ 54, 54, 54, 54, 220, 221, 222, 225, 226, 228,
+ 229, 231, 981, 244, 238, 230, 981, 240, 242, 981,
+ 245, 246, 243, 981, 232, 239, 227, 241, 247, 220,
+ 221, 222, 225, 226, 228, 229, 231, 233, 244, 238,
+ 230, 234, 240, 242, 235, 245, 246, 243, 236, 232,
+
+ 239, 227, 241, 247, 237, 250, 248, 251, 260, 261,
+ 265, 258, 233, 249, 981, 266, 234, 267, 272, 235,
+ 273, 981, 981, 236, 259, 981, 981, 981, 981, 237,
+ 250, 248, 251, 260, 261, 265, 258, 981, 249, 252,
+ 266, 262, 267, 272, 274, 273, 253, 254, 263, 259,
+ 255, 256, 275, 257, 268, 264, 277, 288, 276, 981,
+ 289, 981, 269, 292, 252, 270, 262, 981, 293, 274,
+ 981, 253, 254, 263, 271, 255, 256, 275, 257, 268,
+ 264, 277, 288, 276, 284, 289, 290, 269, 292, 291,
+ 270, 981, 285, 293, 300, 301, 302, 981, 303, 271,
+
+ 278, 286, 279, 294, 295, 287, 280, 304, 296, 284,
+ 297, 290, 305, 281, 291, 282, 298, 285, 283, 300,
+ 301, 302, 299, 303, 306, 278, 286, 279, 294, 295,
+ 287, 280, 304, 296, 307, 297, 309, 305, 281, 311,
+ 282, 298, 312, 283, 308, 313, 310, 299, 314, 306,
+ 315, 316, 317, 319, 320, 321, 322, 323, 324, 307,
+ 327, 309, 325, 326, 311, 328, 329, 312, 330, 308,
+ 313, 310, 331, 314, 318, 315, 316, 317, 319, 320,
+ 321, 322, 323, 324, 332, 327, 333, 325, 326, 334,
+ 328, 329, 335, 330, 336, 337, 338, 331, 339, 318,
+
+ 340, 341, 342, 343, 344, 345, 346, 347, 348, 332,
+ 349, 333, 350, 351, 334, 352, 353, 335, 981, 336,
+ 337, 338, 356, 339, 357, 340, 341, 342, 343, 344,
+ 345, 346, 347, 348, 354, 349, 358, 350, 351, 359,
+ 352, 353, 360, 355, 361, 362, 363, 356, 364, 357,
+ 365, 366, 368, 370, 371, 372, 369, 373, 374, 354,
+ 375, 358, 376, 377, 359, 378, 367, 360, 355, 361,
+ 362, 363, 379, 364, 380, 365, 366, 368, 370, 371,
+ 372, 369, 373, 374, 383, 375, 381, 376, 377, 384,
+ 378, 367, 385, 382, 386, 387, 390, 379, 388, 380,
+
+ 391, 392, 389, 393, 394, 395, 396, 397, 398, 383,
+ 399, 381, 400, 401, 384, 402, 403, 385, 382, 386,
+ 387, 390, 404, 388, 405, 391, 392, 389, 393, 394,
+ 395, 396, 397, 398, 406, 399, 410, 400, 401, 408,
+ 402, 403, 407, 411, 409, 412, 413, 404, 414, 405,
+ 415, 416, 417, 418, 419, 420, 421, 422, 423, 406,
+ 424, 410, 425, 426, 408, 427, 428, 407, 411, 409,
+ 412, 413, 429, 414, 430, 415, 416, 417, 418, 419,
+ 420, 421, 422, 423, 431, 424, 432, 425, 426, 433,
+ 427, 428, 434, 435, 436, 440, 441, 429, 442, 430,
+
+ 437, 443, 444, 445, 446, 447, 438, 448, 449, 431,
+ 450, 432, 451, 452, 433, 439, 455, 434, 435, 436,
+ 440, 441, 453, 442, 456, 437, 443, 444, 445, 446,
+ 447, 438, 448, 449, 457, 450, 458, 451, 452, 454,
+ 439, 455, 459, 460, 461, 462, 464, 453, 465, 456,
+ 466, 469, 470, 471, 472, 473, 474, 463, 475, 457,
+ 476, 458, 477, 478, 454, 467, 468, 459, 460, 461,
+ 462, 464, 479, 465, 480, 466, 469, 470, 471, 472,
+ 473, 474, 463, 475, 481, 476, 482, 477, 478, 483,
+ 467, 468, 484, 485, 486, 487, 488, 479, 489, 480,
+
+ 490, 491, 492, 493, 494, 495, 496, 497, 498, 481,
+ 499, 482, 500, 501, 483, 502, 503, 484, 485, 486,
+ 487, 488, 504, 489, 505, 490, 491, 492, 493, 494,
+ 495, 496, 497, 498, 506, 499, 507, 500, 501, 508,
+ 502, 503, 509, 510, 511, 512, 513, 504, 514, 505,
+ 515, 516, 517, 518, 519, 520, 521, 522, 523, 506,
+ 524, 507, 525, 526, 508, 527, 528, 509, 510, 511,
+ 512, 513, 529, 514, 530, 515, 516, 517, 518, 519,
+ 520, 521, 522, 523, 531, 524, 532, 525, 526, 533,
+ 527, 528, 534, 535, 536, 537, 538, 529, 539, 530,
+
+ 540, 541, 542, 543, 544, 545, 546, 547, 548, 531,
+ 549, 532, 550, 551, 533, 552, 553, 534, 535, 536,
+ 537, 538, 554, 539, 555, 540, 541, 542, 543, 544,
+ 545, 546, 547, 548, 556, 549, 557, 550, 551, 558,
+ 552, 553, 559, 560, 561, 562, 563, 554, 564, 555,
+ 565, 566, 567, 568, 569, 570, 571, 572, 573, 556,
+ 574, 557, 575, 576, 558, 577, 981, 559, 560, 561,
+ 562, 563, 580, 564, 581, 565, 566, 567, 568, 569,
+ 570, 571, 572, 573, 582, 574, 583, 575, 576, 584,
+ 577, 578, 579, 585, 586, 587, 588, 580, 589, 581,
+
+ 590, 591, 592, 593, 594, 595, 596, 597, 598, 582,
+ 599, 583, 600, 601, 584, 602, 578, 579, 585, 586,
+ 587, 588, 603, 589, 604, 590, 591, 592, 593, 594,
+ 595, 596, 597, 598, 605, 599, 606, 600, 601, 607,
+ 602, 608, 610, 611, 612, 609, 613, 603, 614, 604,
+ 615, 616, 617, 618, 619, 620, 621, 622, 623, 605,
+ 624, 606, 625, 626, 607, 627, 608, 610, 611, 612,
+ 609, 613, 628, 614, 629, 615, 616, 617, 618, 619,
+ 620, 621, 622, 623, 630, 624, 631, 625, 626, 632,
+ 627, 633, 634, 635, 636, 637, 638, 628, 639, 629,
+
+ 640, 641, 642, 643, 644, 645, 646, 647, 648, 630,
+ 649, 631, 650, 651, 632, 652, 633, 634, 635, 636,
+ 637, 638, 653, 639, 654, 640, 641, 642, 643, 644,
+ 645, 646, 647, 648, 655, 649, 656, 650, 651, 657,
+ 652, 658, 659, 660, 661, 662, 663, 653, 664, 654,
+ 665, 666, 667, 668, 669, 670, 671, 672, 673, 655,
+ 674, 656, 675, 676, 657, 677, 658, 659, 660, 661,
+ 662, 663, 678, 664, 679, 665, 666, 667, 668, 669,
+ 670, 671, 672, 673, 680, 674, 681, 675, 676, 682,
+ 677, 683, 684, 685, 686, 687, 688, 678, 689, 679,
+
+ 690, 691, 692, 693, 694, 695, 696, 697, 698, 680,
+ 699, 681, 700, 701, 682, 702, 683, 684, 685, 686,
+ 687, 688, 703, 689, 704, 690, 691, 692, 693, 694,
+ 695, 696, 697, 698, 705, 699, 706, 700, 701, 707,
+ 702, 708, 709, 711, 712, 713, 714, 703, 715, 704,
+ 716, 710, 717, 718, 719, 720, 721, 722, 723, 705,
+ 727, 706, 728, 981, 707, 729, 708, 709, 711, 712,
+ 713, 714, 730, 715, 731, 716, 710, 717, 718, 719,
+ 720, 721, 722, 723, 724, 727, 732, 728, 725, 733,
+ 729, 726, 734, 735, 736, 737, 738, 730, 739, 731,
+
+ 740, 741, 742, 743, 744, 745, 746, 747, 748, 724,
+ 749, 732, 750, 725, 733, 751, 726, 734, 735, 736,
+ 737, 738, 752, 739, 753, 740, 741, 742, 743, 744,
+ 745, 746, 747, 748, 754, 749, 755, 750, 756, 757,
+ 751, 758, 759, 760, 761, 762, 763, 752, 764, 753,
+ 765, 766, 767, 768, 769, 770, 771, 772, 773, 754,
+ 774, 755, 777, 756, 757, 775, 758, 759, 760, 761,
+ 762, 763, 778, 764, 779, 765, 766, 767, 768, 769,
+ 770, 771, 772, 773, 776, 774, 780, 777, 781, 782,
+ 775, 783, 784, 785, 786, 787, 788, 778, 789, 779,
+
+ 790, 791, 792, 793, 794, 795, 796, 797, 798, 776,
+ 799, 780, 800, 781, 782, 801, 783, 784, 785, 786,
+ 787, 788, 807, 789, 808, 790, 791, 792, 793, 794,
+ 795, 796, 797, 798, 802, 799, 809, 800, 810, 811,
+ 801, 812, 803, 804, 805, 813, 814, 807, 815, 808,
+ 816, 817, 806, 818, 819, 820, 821, 822, 823, 802,
+ 824, 809, 825, 810, 811, 826, 812, 803, 804, 805,
+ 813, 814, 827, 815, 828, 816, 817, 806, 818, 819,
+ 820, 821, 822, 823, 829, 824, 830, 825, 831, 832,
+ 826, 833, 834, 835, 836, 837, 838, 827, 839, 828,
+
+ 840, 841, 842, 843, 844, 845, 846, 847, 848, 829,
+ 849, 830, 850, 831, 832, 851, 833, 834, 835, 836,
+ 837, 838, 852, 839, 853, 840, 841, 842, 843, 844,
+ 845, 846, 847, 848, 854, 849, 855, 850, 856, 857,
+ 851, 858, 859, 860, 861, 862, 863, 852, 864, 853,
+ 865, 866, 867, 869, 870, 871, 872, 873, 874, 854,
+ 875, 855, 868, 856, 857, 876, 858, 859, 860, 861,
+ 862, 863, 877, 864, 878, 865, 866, 867, 869, 870,
+ 871, 872, 873, 874, 879, 875, 880, 868, 881, 882,
+ 876, 883, 884, 885, 886, 887, 888, 877, 889, 878,
+
+ 890, 891, 892, 893, 894, 895, 896, 897, 898, 879,
+ 899, 880, 900, 881, 882, 901, 883, 884, 885, 886,
+ 887, 888, 902, 889, 903, 890, 891, 892, 893, 894,
+ 895, 896, 897, 898, 904, 899, 905, 900, 906, 907,
+ 901, 908, 909, 910, 911, 912, 913, 902, 914, 903,
+ 915, 916, 917, 918, 919, 920, 921, 922, 923, 904,
+ 924, 905, 925, 906, 907, 926, 908, 909, 910, 911,
+ 912, 913, 927, 914, 928, 915, 916, 917, 918, 919,
+ 920, 921, 922, 923, 930, 924, 931, 925, 932, 933,
+ 926, 934, 935, 929, 936, 937, 938, 927, 939, 928,
+
+ 940, 941, 942, 943, 944, 945, 946, 947, 948, 930,
+ 949, 931, 950, 932, 933, 951, 934, 935, 929, 936,
+ 937, 938, 952, 939, 953, 940, 941, 942, 943, 944,
+ 945, 946, 947, 948, 954, 949, 955, 950, 956, 957,
+ 951, 958, 959, 960, 961, 962, 963, 952, 964, 953,
+ 965, 966, 967, 968, 969, 970, 971, 972, 973, 954,
+ 974, 955, 975, 956, 957, 976, 958, 959, 960, 961,
+ 962, 963, 977, 964, 978, 965, 966, 967, 968, 969,
+ 970, 971, 972, 973, 979, 974, 980, 975, 981, 981,
+ 976, 981, 981, 981, 981, 981, 981, 977, 981, 978,
+
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 979,
+ 981, 980, 3, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981
} ;
-static yyconst flex_int16_t yy_chk[2014] =
+static yyconst flex_int16_t yy_chk[2083] =
{ 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
@@ -1010,245 +1038,253 @@ static yyconst flex_int16_t yy_chk[2014] =
1, 1, 1, 1, 1, 1, 1, 1, 1, 12,
12, 12, 12, 12, 12, 13, 13, 13, 13, 13,
13, 14, 14, 14, 14, 14, 14, 15, 15, 15,
- 15, 15, 15, 16, 16, 16, 16, 16, 16, 945,
-
- 37, 944, 943, 13, 14, 17, 17, 17, 17, 17,
- 17, 23, 22, 41, 15, 35, 22, 24, 23, 22,
- 32, 24, 16, 22, 32, 37, 35, 23, 13, 14,
- 35, 24, 22, 55, 17, 158, 23, 22, 41, 15,
- 35, 22, 24, 23, 22, 32, 24, 16, 22, 32,
- 27, 35, 23, 51, 49, 35, 24, 22, 55, 17,
- 21, 47, 21, 27, 21, 21, 27, 46, 45, 56,
- 57, 44, 21, 30, 21, 27, 21, 21, 28, 21,
- 21, 58, 28, 21, 20, 21, 28, 21, 27, 21,
- 21, 27, 29, 30, 56, 57, 30, 21, 30, 21,
-
- 29, 21, 21, 28, 21, 21, 58, 28, 21, 25,
- 29, 28, 59, 63, 64, 26, 25, 29, 30, 26,
- 25, 30, 65, 26, 25, 29, 19, 25, 25, 26,
- 25, 18, 26, 11, 25, 29, 66, 59, 63, 64,
- 26, 25, 33, 9, 26, 25, 33, 65, 26, 25,
- 33, 31, 25, 25, 26, 25, 33, 26, 31, 31,
- 34, 66, 33, 8, 34, 31, 38, 33, 34, 42,
- 38, 33, 42, 67, 34, 33, 31, 7, 68, 6,
- 38, 33, 5, 31, 31, 34, 3, 33, 43, 34,
- 31, 38, 43, 34, 42, 38, 69, 42, 67, 34,
-
- 36, 70, 43, 68, 36, 38, 71, 36, 73, 74,
- 75, 36, 2, 43, 0, 0, 0, 43, 36, 36,
- 0, 69, 76, 78, 0, 36, 70, 43, 0, 36,
- 77, 71, 36, 73, 74, 75, 36, 54, 54, 54,
- 54, 54, 54, 36, 36, 39, 79, 76, 78, 39,
- 77, 80, 39, 39, 81, 77, 80, 39, 82, 39,
- 84, 85, 0, 86, 87, 39, 0, 88, 0, 89,
- 39, 79, 90, 0, 39, 77, 80, 39, 39, 81,
- 0, 80, 39, 82, 39, 84, 85, 83, 86, 87,
- 39, 40, 88, 83, 89, 40, 91, 90, 40, 40,
-
- 92, 40, 93, 83, 95, 40, 96, 94, 97, 98,
- 99, 40, 83, 102, 0, 100, 40, 104, 83, 94,
- 40, 91, 100, 40, 40, 92, 40, 93, 83, 95,
- 40, 96, 94, 97, 98, 99, 40, 101, 102, 101,
- 100, 105, 104, 106, 94, 106, 108, 100, 107, 107,
- 107, 109, 110, 0, 101, 112, 113, 0, 0, 114,
- 111, 113, 101, 0, 101, 0, 105, 119, 106, 0,
- 106, 108, 114, 107, 107, 107, 109, 110, 111, 101,
- 112, 113, 116, 115, 114, 111, 113, 115, 117, 120,
- 115, 118, 119, 116, 115, 118, 121, 114, 117, 122,
-
- 115, 124, 123, 111, 126, 129, 130, 116, 115, 123,
- 0, 132, 115, 117, 120, 115, 118, 0, 116, 115,
- 118, 121, 0, 117, 122, 115, 124, 123, 128, 126,
- 129, 130, 133, 0, 123, 127, 132, 131, 135, 136,
- 137, 128, 127, 127, 131, 0, 127, 127, 137, 127,
- 134, 131, 0, 128, 137, 140, 0, 133, 134, 0,
- 127, 134, 131, 135, 136, 137, 128, 127, 127, 131,
- 134, 127, 127, 137, 127, 134, 131, 138, 141, 137,
- 140, 138, 142, 134, 139, 0, 134, 148, 138, 149,
- 138, 143, 139, 138, 143, 134, 0, 0, 150, 144,
-
- 0, 139, 138, 141, 144, 139, 138, 142, 151, 139,
- 147, 147, 148, 138, 149, 138, 143, 139, 138, 143,
- 145, 145, 146, 150, 144, 145, 139, 153, 146, 144,
- 139, 152, 152, 151, 146, 147, 147, 156, 154, 165,
- 166, 167, 168, 170, 155, 145, 145, 146, 154, 172,
- 145, 173, 153, 146, 155, 155, 152, 152, 174, 146,
- 175, 176, 156, 154, 165, 166, 167, 168, 170, 155,
- 177, 172, 178, 154, 172, 179, 173, 180, 182, 155,
- 155, 181, 181, 174, 183, 175, 176, 184, 185, 186,
- 188, 189, 190, 191, 192, 177, 172, 178, 193, 194,
-
- 179, 195, 180, 182, 196, 197, 181, 181, 198, 183,
- 199, 200, 184, 185, 186, 188, 189, 190, 191, 192,
- 201, 202, 203, 193, 194, 204, 195, 204, 205, 196,
- 197, 206, 207, 198, 208, 199, 200, 209, 210, 211,
- 206, 212, 213, 214, 215, 201, 202, 203, 218, 219,
- 204, 220, 204, 205, 217, 216, 206, 207, 217, 208,
- 221, 222, 209, 210, 211, 206, 212, 213, 214, 215,
- 216, 223, 224, 218, 219, 225, 220, 226, 227, 217,
- 216, 228, 230, 217, 229, 221, 222, 231, 229, 232,
- 234, 229, 236, 237, 238, 216, 223, 224, 235, 239,
-
- 225, 235, 226, 227, 240, 235, 228, 230, 241, 229,
- 242, 243, 231, 229, 232, 234, 229, 236, 237, 238,
- 244, 245, 246, 235, 239, 247, 235, 248, 249, 240,
- 235, 251, 250, 241, 250, 242, 243, 252, 253, 251,
- 254, 255, 252, 256, 257, 244, 245, 246, 258, 259,
- 247, 260, 248, 249, 261, 262, 251, 250, 263, 250,
- 264, 265, 252, 253, 251, 254, 255, 252, 256, 257,
- 266, 269, 270, 258, 259, 271, 260, 272, 273, 261,
- 262, 274, 275, 263, 276, 264, 265, 277, 278, 279,
- 280, 281, 282, 277, 283, 266, 269, 270, 284, 277,
-
- 271, 285, 272, 273, 286, 287, 274, 275, 277, 276,
- 288, 290, 277, 278, 279, 280, 281, 282, 277, 283,
- 291, 292, 293, 284, 277, 295, 285, 296, 297, 286,
- 287, 298, 299, 277, 300, 288, 290, 301, 302, 293,
- 303, 305, 304, 306, 307, 291, 292, 293, 310, 311,
- 295, 312, 296, 297, 304, 308, 298, 299, 313, 300,
- 314, 315, 301, 302, 293, 303, 305, 304, 306, 307,
- 308, 308, 316, 310, 311, 318, 312, 319, 320, 304,
- 308, 321, 323, 313, 324, 314, 315, 325, 326, 327,
- 330, 331, 332, 333, 337, 308, 308, 316, 338, 339,
-
- 318, 340, 319, 320, 341, 342, 321, 323, 343, 324,
- 344, 345, 325, 326, 327, 330, 331, 332, 333, 337,
- 346, 347, 348, 338, 339, 349, 340, 350, 351, 341,
- 342, 352, 353, 343, 354, 344, 345, 355, 356, 357,
- 359, 360, 361, 363, 364, 346, 347, 348, 366, 367,
- 349, 368, 350, 351, 369, 370, 352, 353, 371, 354,
- 372, 374, 355, 356, 357, 359, 360, 361, 363, 364,
- 375, 376, 377, 366, 367, 379, 368, 380, 381, 369,
- 370, 383, 384, 371, 385, 372, 374, 386, 387, 388,
- 389, 390, 392, 393, 395, 375, 376, 377, 396, 397,
-
- 379, 398, 380, 381, 399, 400, 383, 384, 401, 385,
- 402, 403, 386, 387, 388, 389, 390, 392, 393, 395,
- 404, 405, 406, 396, 397, 407, 398, 408, 409, 399,
- 400, 411, 412, 401, 413, 402, 403, 414, 415, 416,
- 417, 418, 419, 420, 421, 404, 405, 406, 422, 423,
- 407, 424, 408, 409, 426, 427, 411, 412, 429, 413,
- 428, 428, 414, 415, 416, 417, 418, 419, 420, 421,
- 430, 431, 432, 422, 423, 433, 424, 434, 435, 426,
- 427, 436, 437, 429, 438, 428, 428, 439, 440, 441,
- 442, 443, 444, 445, 446, 430, 431, 432, 447, 448,
-
- 433, 449, 434, 435, 451, 452, 436, 437, 453, 438,
- 454, 455, 439, 440, 441, 442, 443, 444, 445, 446,
- 456, 457, 458, 447, 448, 460, 449, 461, 462, 451,
- 452, 464, 465, 453, 463, 454, 455, 467, 463, 469,
- 470, 471, 472, 473, 474, 456, 457, 458, 476, 477,
- 460, 478, 461, 462, 479, 480, 464, 465, 481, 463,
- 482, 483, 467, 463, 469, 470, 471, 472, 473, 474,
- 484, 485, 486, 476, 477, 488, 478, 489, 492, 479,
- 480, 493, 494, 481, 496, 482, 483, 497, 500, 501,
- 503, 505, 506, 507, 508, 484, 485, 486, 509, 511,
-
- 488, 512, 489, 492, 513, 515, 493, 494, 516, 496,
- 517, 518, 497, 500, 501, 503, 505, 506, 507, 508,
- 519, 520, 521, 509, 511, 522, 512, 523, 525, 513,
- 515, 526, 527, 516, 529, 517, 518, 530, 531, 532,
- 533, 535, 536, 537, 538, 519, 520, 521, 539, 542,
- 522, 543, 523, 525, 544, 545, 526, 527, 547, 529,
- 548, 549, 530, 531, 532, 533, 535, 536, 537, 538,
- 550, 551, 554, 539, 542, 555, 543, 557, 558, 544,
- 545, 560, 561, 547, 562, 548, 549, 564, 565, 566,
- 567, 568, 569, 570, 572, 550, 551, 554, 576, 577,
-
- 555, 578, 557, 558, 579, 581, 560, 561, 584, 562,
- 586, 585, 564, 565, 566, 567, 568, 569, 570, 572,
- 585, 587, 588, 576, 577, 589, 578, 590, 591, 579,
- 581, 592, 594, 584, 595, 586, 585, 596, 597, 598,
- 599, 600, 601, 604, 602, 585, 587, 588, 602, 605,
- 589, 602, 590, 591, 610, 611, 592, 594, 612, 595,
- 613, 615, 596, 597, 598, 599, 600, 601, 604, 602,
- 616, 617, 618, 602, 605, 621, 602, 622, 623, 610,
- 611, 627, 628, 612, 631, 613, 615, 632, 634, 636,
- 637, 639, 641, 642, 643, 616, 617, 618, 645, 646,
-
- 621, 647, 622, 623, 648, 650, 627, 628, 652, 631,
- 655, 657, 632, 634, 636, 637, 639, 641, 642, 643,
- 658, 659, 660, 645, 646, 661, 647, 662, 663, 648,
- 650, 665, 666, 652, 668, 655, 657, 669, 670, 672,
- 673, 674, 675, 676, 678, 658, 659, 660, 679, 681,
- 661, 682, 662, 663, 684, 685, 665, 666, 672, 668,
- 686, 687, 669, 670, 672, 673, 674, 675, 676, 678,
- 690, 692, 693, 679, 681, 694, 682, 695, 696, 684,
- 685, 697, 698, 672, 699, 686, 687, 700, 701, 702,
- 704, 0, 0, 0, 706, 690, 692, 693, 707, 708,
-
- 694, 0, 695, 696, 709, 710, 697, 698, 703, 699,
- 711, 712, 700, 701, 702, 704, 703, 703, 703, 706,
- 714, 715, 716, 707, 708, 719, 703, 720, 721, 709,
- 710, 722, 723, 703, 724, 711, 712, 725, 726, 728,
- 730, 703, 703, 703, 731, 714, 715, 716, 733, 734,
- 719, 703, 720, 721, 735, 738, 722, 723, 739, 724,
- 740, 742, 725, 726, 728, 730, 743, 745, 747, 731,
- 748, 749, 753, 733, 734, 754, 755, 756, 759, 735,
- 738, 760, 761, 739, 762, 740, 742, 764, 766, 767,
- 768, 743, 745, 747, 770, 748, 749, 753, 771, 772,
-
- 754, 755, 756, 759, 774, 776, 760, 761, 777, 762,
- 780, 781, 764, 766, 767, 768, 782, 783, 784, 770,
- 785, 781, 786, 771, 772, 787, 788, 789, 790, 774,
- 776, 791, 792, 777, 793, 780, 781, 794, 795, 796,
- 798, 782, 783, 784, 800, 785, 781, 786, 801, 803,
- 787, 788, 789, 790, 805, 806, 791, 792, 807, 793,
- 808, 816, 794, 795, 796, 798, 817, 818, 820, 800,
- 822, 823, 826, 801, 803, 828, 831, 832, 833, 805,
- 806, 837, 838, 807, 839, 808, 816, 840, 841, 842,
- 843, 817, 818, 820, 844, 822, 823, 826, 845, 846,
-
- 828, 831, 832, 833, 848, 850, 837, 838, 851, 839,
- 852, 855, 840, 841, 842, 843, 856, 860, 861, 844,
- 863, 864, 865, 845, 846, 866, 868, 869, 873, 848,
- 850, 874, 876, 851, 877, 852, 855, 861, 878, 879,
- 880, 856, 860, 861, 881, 863, 864, 865, 882, 884,
- 866, 868, 869, 873, 887, 889, 874, 876, 890, 877,
- 891, 892, 861, 878, 879, 880, 893, 895, 899, 881,
- 900, 902, 904, 882, 884, 905, 906, 907, 909, 887,
- 889, 911, 913, 890, 914, 891, 892, 915, 917, 919,
- 921, 893, 895, 899, 923, 900, 902, 904, 926, 927,
-
- 905, 906, 907, 909, 928, 930, 911, 913, 931, 914,
- 932, 933, 915, 917, 919, 921, 935, 940, 0, 923,
- 0, 0, 0, 926, 927, 0, 0, 0, 0, 928,
- 930, 0, 0, 931, 0, 932, 933, 0, 0, 0,
- 0, 935, 940, 942, 942, 942, 942, 942, 942, 942,
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
-
- 942, 942, 942, 942, 942, 942, 942, 942, 942, 942,
- 942, 942, 942
+ 15, 15, 15, 16, 16, 16, 16, 16, 16, 984,
+
+ 983, 30, 982, 13, 14, 17, 17, 17, 17, 17,
+ 17, 22, 23, 23, 15, 22, 24, 37, 22, 23,
+ 24, 30, 16, 32, 30, 23, 30, 32, 13, 14,
+ 24, 22, 159, 41, 17, 51, 22, 23, 23, 15,
+ 22, 24, 37, 22, 23, 24, 30, 16, 32, 30,
+ 23, 49, 32, 26, 47, 24, 22, 26, 41, 17,
+ 21, 26, 21, 42, 21, 21, 55, 26, 56, 57,
+ 26, 58, 21, 59, 21, 63, 21, 21, 26, 21,
+ 21, 46, 26, 21, 45, 21, 26, 21, 42, 21,
+ 21, 55, 26, 56, 57, 26, 58, 21, 59, 21,
+
+ 63, 21, 21, 44, 21, 21, 28, 29, 21, 25,
+ 28, 64, 65, 27, 28, 29, 25, 66, 67, 68,
+ 25, 69, 70, 27, 25, 29, 27, 25, 25, 27,
+ 25, 28, 29, 20, 25, 28, 64, 65, 27, 28,
+ 29, 25, 66, 67, 68, 25, 69, 70, 27, 25,
+ 29, 27, 25, 25, 27, 25, 31, 33, 34, 19,
+ 71, 33, 34, 31, 31, 33, 34, 73, 74, 35,
+ 31, 33, 34, 75, 76, 77, 78, 33, 79, 81,
+ 35, 31, 33, 34, 35, 71, 33, 34, 31, 31,
+ 33, 34, 73, 74, 35, 31, 33, 34, 75, 76,
+
+ 77, 78, 33, 79, 81, 35, 82, 83, 38, 35,
+ 36, 43, 38, 83, 36, 43, 80, 36, 84, 80,
+ 85, 36, 38, 83, 80, 43, 86, 87, 36, 36,
+ 36, 82, 83, 38, 88, 36, 43, 38, 83, 36,
+ 43, 80, 36, 84, 80, 85, 36, 38, 83, 80,
+ 43, 86, 87, 36, 36, 36, 39, 89, 39, 88,
+ 39, 90, 91, 39, 39, 92, 93, 94, 95, 96,
+ 39, 97, 98, 99, 100, 94, 39, 18, 11, 94,
+ 9, 39, 89, 39, 8, 39, 90, 91, 39, 39,
+ 92, 93, 94, 95, 96, 39, 97, 98, 99, 100,
+
+ 94, 39, 40, 102, 94, 102, 40, 101, 103, 40,
+ 40, 105, 40, 106, 101, 109, 40, 103, 110, 107,
+ 102, 107, 40, 7, 6, 5, 3, 40, 102, 2,
+ 102, 40, 101, 103, 40, 40, 105, 40, 106, 101,
+ 109, 40, 103, 110, 107, 102, 107, 40, 54, 54,
+ 54, 54, 54, 54, 108, 108, 108, 111, 112, 113,
+ 114, 115, 0, 120, 117, 114, 0, 118, 119, 0,
+ 121, 122, 119, 0, 115, 117, 112, 118, 123, 108,
+ 108, 108, 111, 112, 113, 114, 115, 116, 120, 117,
+ 114, 116, 118, 119, 116, 121, 122, 119, 116, 115,
+
+ 117, 112, 118, 123, 116, 125, 124, 127, 130, 131,
+ 133, 129, 116, 124, 0, 134, 116, 135, 137, 116,
+ 138, 0, 0, 116, 129, 0, 0, 0, 0, 116,
+ 125, 124, 127, 130, 131, 133, 129, 0, 124, 128,
+ 134, 132, 135, 137, 139, 138, 128, 128, 132, 129,
+ 128, 128, 139, 128, 136, 132, 140, 143, 139, 0,
+ 144, 0, 136, 146, 128, 136, 132, 0, 146, 139,
+ 0, 128, 128, 132, 136, 128, 128, 139, 128, 136,
+ 132, 140, 143, 139, 142, 144, 145, 136, 146, 145,
+ 136, 0, 142, 146, 149, 149, 150, 0, 151, 136,
+
+ 141, 142, 141, 147, 147, 142, 141, 152, 147, 142,
+ 148, 145, 153, 141, 145, 141, 148, 142, 141, 149,
+ 149, 150, 148, 151, 154, 141, 142, 141, 147, 147,
+ 142, 141, 152, 147, 155, 148, 156, 153, 141, 157,
+ 141, 148, 166, 141, 155, 167, 156, 148, 168, 154,
+ 169, 171, 173, 174, 175, 176, 177, 178, 179, 155,
+ 181, 156, 180, 180, 157, 182, 183, 166, 184, 155,
+ 167, 156, 185, 168, 173, 169, 171, 173, 174, 175,
+ 176, 177, 178, 179, 186, 181, 187, 180, 180, 189,
+ 182, 183, 190, 184, 191, 192, 193, 185, 194, 173,
+
+ 195, 196, 197, 198, 199, 200, 201, 202, 203, 186,
+ 204, 187, 205, 206, 189, 207, 208, 190, 0, 191,
+ 192, 193, 210, 194, 211, 195, 196, 197, 198, 199,
+ 200, 201, 202, 203, 209, 204, 212, 205, 206, 213,
+ 207, 208, 214, 209, 215, 216, 217, 210, 218, 211,
+ 219, 220, 221, 222, 223, 224, 221, 225, 226, 209,
+ 227, 212, 228, 229, 213, 230, 220, 214, 209, 215,
+ 216, 217, 231, 218, 232, 219, 220, 221, 222, 223,
+ 224, 221, 225, 226, 234, 227, 233, 228, 229, 235,
+ 230, 220, 236, 233, 238, 239, 240, 231, 239, 232,
+
+ 241, 242, 239, 243, 244, 245, 246, 247, 248, 234,
+ 249, 233, 250, 251, 235, 252, 253, 236, 233, 238,
+ 239, 240, 254, 239, 254, 241, 242, 239, 243, 244,
+ 245, 246, 247, 248, 255, 249, 257, 250, 251, 256,
+ 252, 253, 255, 258, 256, 259, 260, 254, 261, 254,
+ 262, 263, 264, 265, 266, 267, 268, 269, 270, 255,
+ 271, 257, 272, 274, 256, 275, 276, 255, 258, 256,
+ 259, 260, 277, 261, 278, 262, 263, 264, 265, 266,
+ 267, 268, 269, 270, 279, 271, 280, 272, 274, 281,
+ 275, 276, 282, 283, 284, 285, 286, 277, 287, 278,
+
+ 284, 288, 289, 290, 291, 292, 284, 293, 294, 279,
+ 296, 280, 297, 298, 281, 284, 301, 282, 283, 284,
+ 285, 286, 299, 287, 302, 284, 288, 289, 290, 291,
+ 292, 284, 293, 294, 303, 296, 304, 297, 298, 299,
+ 284, 301, 305, 306, 307, 308, 309, 299, 310, 302,
+ 311, 313, 314, 315, 316, 317, 318, 308, 319, 303,
+ 321, 304, 322, 323, 299, 311, 311, 305, 306, 307,
+ 308, 309, 324, 310, 325, 311, 313, 314, 315, 316,
+ 317, 318, 308, 319, 326, 321, 327, 322, 323, 328,
+ 311, 311, 329, 330, 331, 333, 334, 324, 335, 325,
+
+ 336, 340, 341, 342, 343, 344, 345, 346, 347, 326,
+ 348, 327, 349, 350, 328, 351, 352, 329, 330, 331,
+ 333, 334, 353, 335, 354, 336, 340, 341, 342, 343,
+ 344, 345, 346, 347, 355, 348, 356, 349, 350, 357,
+ 351, 352, 358, 359, 360, 361, 362, 353, 364, 354,
+ 365, 366, 368, 369, 371, 372, 373, 374, 375, 355,
+ 376, 356, 377, 379, 357, 380, 381, 358, 359, 360,
+ 361, 362, 383, 364, 384, 365, 366, 368, 369, 371,
+ 372, 373, 374, 375, 385, 376, 387, 377, 379, 388,
+ 380, 381, 389, 390, 391, 392, 393, 383, 394, 384,
+
+ 395, 396, 397, 399, 400, 401, 402, 403, 404, 385,
+ 405, 387, 406, 407, 388, 408, 409, 389, 390, 391,
+ 392, 393, 410, 394, 411, 395, 396, 397, 399, 400,
+ 401, 402, 403, 404, 412, 405, 413, 406, 407, 415,
+ 408, 409, 416, 417, 418, 419, 420, 410, 421, 411,
+ 422, 423, 424, 425, 426, 427, 428, 429, 430, 412,
+ 431, 413, 432, 434, 415, 435, 0, 416, 417, 418,
+ 419, 420, 437, 421, 438, 422, 423, 424, 425, 426,
+ 427, 428, 429, 430, 439, 431, 440, 432, 434, 441,
+ 435, 436, 436, 442, 443, 444, 445, 437, 446, 438,
+
+ 447, 448, 449, 450, 451, 452, 453, 454, 455, 439,
+ 456, 440, 458, 459, 441, 460, 436, 436, 442, 443,
+ 444, 445, 461, 446, 462, 447, 448, 449, 450, 451,
+ 452, 453, 454, 455, 463, 456, 465, 458, 459, 466,
+ 460, 467, 468, 469, 471, 467, 473, 461, 474, 462,
+ 475, 476, 477, 478, 479, 480, 481, 483, 484, 463,
+ 485, 465, 486, 487, 466, 488, 467, 468, 469, 471,
+ 467, 473, 489, 474, 490, 475, 476, 477, 478, 479,
+ 480, 481, 483, 484, 491, 485, 492, 486, 487, 494,
+ 488, 495, 497, 499, 500, 501, 502, 489, 503, 490,
+
+ 504, 507, 508, 510, 512, 513, 514, 515, 516, 491,
+ 517, 492, 519, 520, 494, 521, 495, 497, 499, 500,
+ 501, 502, 523, 503, 524, 504, 507, 508, 510, 512,
+ 513, 514, 515, 516, 525, 517, 526, 519, 520, 527,
+ 521, 528, 529, 530, 532, 533, 534, 523, 536, 524,
+ 537, 538, 539, 540, 541, 543, 544, 545, 546, 525,
+ 547, 526, 550, 551, 527, 552, 528, 529, 530, 532,
+ 533, 534, 553, 536, 555, 537, 538, 539, 540, 541,
+ 543, 544, 545, 546, 556, 547, 557, 550, 551, 558,
+ 552, 559, 562, 563, 564, 566, 567, 553, 568, 555,
+
+ 570, 571, 572, 573, 574, 576, 577, 578, 579, 556,
+ 580, 557, 581, 582, 558, 584, 559, 562, 563, 564,
+ 566, 567, 587, 568, 588, 570, 571, 572, 573, 574,
+ 576, 577, 578, 579, 589, 580, 590, 581, 582, 592,
+ 584, 595, 596, 597, 598, 599, 600, 587, 601, 588,
+ 602, 596, 603, 604, 605, 606, 607, 608, 609, 589,
+ 612, 590, 613, 0, 592, 618, 595, 596, 597, 598,
+ 599, 600, 619, 601, 620, 602, 596, 603, 604, 605,
+ 606, 607, 608, 609, 610, 612, 621, 613, 610, 622,
+ 618, 610, 624, 625, 626, 627, 628, 619, 631, 620,
+
+ 632, 633, 634, 638, 639, 640, 643, 644, 645, 610,
+ 647, 621, 649, 610, 622, 650, 610, 624, 625, 626,
+ 627, 628, 652, 631, 654, 632, 633, 634, 638, 639,
+ 640, 643, 644, 645, 655, 647, 656, 649, 658, 659,
+ 650, 660, 662, 664, 667, 668, 670, 652, 671, 654,
+ 672, 673, 674, 675, 676, 678, 679, 681, 682, 655,
+ 683, 656, 687, 658, 659, 686, 660, 662, 664, 667,
+ 668, 670, 688, 671, 689, 672, 673, 674, 675, 676,
+ 678, 679, 681, 682, 686, 683, 690, 687, 691, 693,
+ 686, 695, 696, 698, 699, 701, 702, 688, 703, 689,
+
+ 704, 707, 709, 710, 711, 712, 713, 714, 715, 686,
+ 716, 690, 717, 691, 693, 718, 695, 696, 698, 699,
+ 701, 702, 720, 703, 721, 704, 707, 709, 710, 711,
+ 712, 713, 714, 715, 719, 716, 722, 717, 723, 724,
+ 718, 725, 719, 719, 719, 726, 727, 720, 729, 721,
+ 730, 731, 719, 733, 735, 736, 737, 738, 739, 719,
+ 740, 722, 741, 723, 724, 742, 725, 719, 719, 719,
+ 726, 727, 743, 729, 744, 730, 731, 719, 733, 735,
+ 736, 737, 738, 739, 745, 740, 747, 741, 748, 750,
+ 742, 751, 753, 754, 755, 757, 758, 743, 759, 744,
+
+ 761, 763, 765, 767, 768, 769, 773, 774, 775, 745,
+ 776, 747, 779, 748, 750, 780, 751, 753, 754, 755,
+ 757, 758, 781, 759, 782, 761, 763, 765, 767, 768,
+ 769, 773, 774, 775, 783, 776, 784, 779, 786, 788,
+ 780, 789, 790, 792, 793, 794, 796, 781, 798, 782,
+ 799, 801, 802, 803, 804, 805, 806, 807, 808, 783,
+ 809, 784, 802, 786, 788, 810, 789, 790, 792, 793,
+ 794, 796, 811, 798, 812, 799, 801, 802, 803, 804,
+ 805, 806, 807, 808, 813, 809, 814, 802, 815, 816,
+ 810, 817, 818, 821, 823, 824, 826, 811, 827, 812,
+
+ 828, 830, 831, 832, 833, 834, 842, 843, 844, 813,
+ 846, 814, 848, 815, 816, 849, 817, 818, 821, 823,
+ 824, 826, 850, 827, 854, 828, 830, 831, 832, 833,
+ 834, 842, 843, 844, 856, 846, 859, 848, 860, 861,
+ 849, 865, 866, 867, 868, 869, 870, 850, 871, 854,
+ 872, 873, 874, 876, 878, 879, 880, 883, 884, 856,
+ 885, 859, 889, 860, 861, 891, 865, 866, 867, 868,
+ 869, 870, 892, 871, 893, 872, 873, 874, 876, 878,
+ 879, 880, 883, 884, 895, 885, 896, 889, 897, 898,
+ 891, 900, 901, 893, 906, 907, 909, 892, 910, 893,
+
+ 911, 912, 913, 914, 915, 917, 920, 922, 923, 895,
+ 924, 896, 927, 897, 898, 928, 900, 901, 893, 906,
+ 907, 909, 929, 910, 931, 911, 912, 913, 914, 915,
+ 917, 920, 922, 923, 935, 924, 936, 927, 938, 940,
+ 928, 941, 942, 943, 945, 947, 948, 929, 950, 931,
+ 951, 952, 954, 956, 958, 960, 963, 964, 965, 935,
+ 966, 936, 968, 938, 940, 969, 941, 942, 943, 945,
+ 947, 948, 970, 950, 972, 951, 952, 954, 956, 958,
+ 960, 963, 964, 965, 974, 966, 979, 968, 0, 0,
+ 969, 0, 0, 0, 0, 0, 0, 970, 0, 972,
+
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 974,
+ 0, 979, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981, 981, 981, 981, 981, 981, 981, 981, 981,
+ 981, 981
} ;
-static yyconst flex_int16_t yy_rule_linenum[201] =
+static yyconst flex_int16_t yy_rule_linenum[202] =
{ 0,
89, 90, 91, 92, 93, 95, 96, 97, 98, 100,
102, 106, 107, 108, 109, 110, 111, 112, 113, 114,
- 115, 116, 117, 118, 119, 120, 121, 123, 124, 125,
- 126, 127, 128, 129, 130, 131, 133, 134, 135, 136,
- 137, 138, 139, 140, 142, 143, 144, 145, 146, 147,
- 148, 149, 151, 152, 154, 155, 157, 158, 159, 160,
- 161, 162, 163, 164, 165, 166, 167, 168, 170, 171,
- 172, 173, 174, 175, 176, 178, 180, 181, 182, 183,
- 184, 185, 186, 187, 188, 189, 190, 191, 192, 194,
- 195, 196, 197, 198, 199, 200, 202, 204, 205, 206,
+ 115, 116, 117, 118, 119, 120, 122, 123, 124, 125,
+ 126, 127, 128, 129, 131, 132, 133, 134, 135, 136,
+ 137, 138, 140, 141, 143, 144, 145, 146, 147, 148,
+ 149, 150, 151, 152, 153, 155, 156, 158, 159, 160,
+ 161, 162, 163, 164, 165, 166, 167, 168, 169, 171,
+ 172, 173, 174, 175, 176, 177, 179, 181, 182, 183,
+ 184, 185, 186, 187, 188, 189, 190, 191, 192, 193,
+ 195, 196, 197, 198, 199, 200, 201, 203, 205, 206,
207, 208, 209, 210, 211, 212, 213, 214, 215, 216,
- 218, 219, 220, 221, 222, 223, 224, 226, 228, 229,
+ 217, 219, 220, 221, 222, 223, 224, 225, 227, 229,
230, 231, 232, 233, 234, 235, 236, 237, 238, 239,
- 240, 241, 243, 244, 245, 246, 247, 248, 249, 251,
- 253, 254, 255, 256, 257, 258, 259, 260, 261, 262,
- 263, 264, 266, 267, 268, 269, 270, 271, 272, 274,
- 276, 277, 278, 279, 280, 281, 282, 283, 284, 285,
- 286, 287, 289, 290, 291, 292, 293, 294, 295, 297,
- 299, 300, 301, 302, 303, 304, 305, 306, 307, 308,
- 309, 310, 312, 313, 314, 315, 316, 317, 318, 320
-
+ 240, 241, 242, 244, 245, 246, 247, 248, 249, 250,
+ 252, 254, 255, 256, 257, 258, 259, 260, 261, 262,
+ 263, 264, 265, 267, 268, 269, 270, 271, 272, 273,
+ 275, 277, 278, 279, 280, 281, 282, 283, 284, 285,
+ 286, 287, 288, 290, 291, 292, 293, 294, 295, 296,
+ 298, 300, 301, 302, 303, 304, 305, 306, 307, 308,
+ 309, 310, 311, 313, 314, 315, 316, 317, 318, 319,
+
+ 321
} ;
/* The intent behind this definition is that it'll catch
@@ -1319,7 +1355,7 @@ typedef KHolidays::HolidayParserPlan::token_type token_type;
* yylex is invoked, the begin position is moved onto the end position. */
#line 78 "holidayscannerplan.lpp"
# define YY_USER_ACTION yylloc->columns( yyleng );
-#line 1323 "holidayscannerplan.cpp"
+#line 1359 "holidayscannerplan.cpp"
#define INITIAL 0
@@ -1376,7 +1412,12 @@ static int yy_flex_strlen (yyconst char * );
/* Amount of stuff to slurp up with each read. */
#ifndef YY_READ_BUF_SIZE
+#ifdef __ia64__
+/* On IA-64, the buffer size is 16k, not 8k */
+#define YY_READ_BUF_SIZE 16384
+#else
#define YY_READ_BUF_SIZE 8192
+#endif /* __ia64__ */
#endif
/* Copy whatever the last rule matched to the standard output. */
@@ -1488,7 +1529,7 @@ YY_DECL
yylloc->step();
-#line 1492 "holidayscannerplan.cpp"
+#line 1533 "holidayscannerplan.cpp"
if ( !(yy_init) )
{
@@ -1552,13 +1593,13 @@ yy_match:
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 >= 943 )
+ if ( yy_current_state >= 982 )
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 != 942 );
+ while ( yy_current_state != 981 );
yy_cp = (yy_last_accepting_cpos);
yy_current_state = (yy_last_accepting_state);
@@ -1577,12 +1618,12 @@ do_action: /* This label is used only to access EOF actions. */
{
if ( yy_act == 0 )
std::cerr << "--scanner backing up\n";
- else if ( yy_act < 201 )
+ else if ( yy_act < 202 )
std::cerr << "--accepting rule at line " << yy_rule_linenum[yy_act] <<
"(\"" << yytext << "\")\n";
- else if ( yy_act == 201 )
- std::cerr << "--accepting default rule (\"" << yytext << "\")\n";
else if ( yy_act == 202 )
+ std::cerr << "--accepting default rule (\"" << yytext << "\")\n";
+ else if ( yy_act == 203 )
std::cerr << "--(end of buffer or a NUL)\n";
else
std::cerr << "--EOF (start condition " << YY_START << ")\n";
@@ -1707,909 +1748,914 @@ YY_RULE_SETUP
case 21:
YY_RULE_SETUP
#line 115 "holidayscannerplan.lpp"
-{ return token::SMALL; }
+{ return token::YEAR; }
YY_BREAK
case 22:
YY_RULE_SETUP
#line 116 "holidayscannerplan.lpp"
-{ return token::YEAR; }
+{ return token::LEAPYEAR; }
YY_BREAK
case 23:
YY_RULE_SETUP
#line 117 "holidayscannerplan.lpp"
-{ return token::LEAPYEAR; }
+{ return token::EASTER; }
YY_BREAK
case 24:
YY_RULE_SETUP
#line 118 "holidayscannerplan.lpp"
-{ return token::EASTER; }
+{ return token::PASCHA; }
YY_BREAK
case 25:
YY_RULE_SETUP
#line 119 "holidayscannerplan.lpp"
-{ return token::PASCHA; }
+{ return token::LENGTH; }
YY_BREAK
case 26:
YY_RULE_SETUP
#line 120 "holidayscannerplan.lpp"
-{ return token::LENGTH; }
+{ return token::SHIFT; }
YY_BREAK
case 27:
YY_RULE_SETUP
-#line 121 "holidayscannerplan.lpp"
-{ return token::SHIFT; }
+#line 122 "holidayscannerplan.lpp"
+{ return token::EQ; }
YY_BREAK
case 28:
YY_RULE_SETUP
#line 123 "holidayscannerplan.lpp"
-{ yylval->ival = 1; return token::COLOR; }
+{ return token::NE; }
YY_BREAK
case 29:
YY_RULE_SETUP
#line 124 "holidayscannerplan.lpp"
-{ yylval->ival = 2; return token::COLOR; }
+{ return token::LE; }
YY_BREAK
case 30:
YY_RULE_SETUP
#line 125 "holidayscannerplan.lpp"
-{ yylval->ival = 3; return token::COLOR; }
+{ return token::GE; }
YY_BREAK
case 31:
YY_RULE_SETUP
#line 126 "holidayscannerplan.lpp"
-{ yylval->ival = 4; return token::COLOR; }
+{ return token::LT; }
YY_BREAK
case 32:
YY_RULE_SETUP
#line 127 "holidayscannerplan.lpp"
-{ yylval->ival = 5; return token::COLOR; }
+{ return token::GT; }
YY_BREAK
case 33:
YY_RULE_SETUP
#line 128 "holidayscannerplan.lpp"
-{ yylval->ival = 6; return token::COLOR; }
+{ return token::AND;}
YY_BREAK
case 34:
YY_RULE_SETUP
#line 129 "holidayscannerplan.lpp"
-{ yylval->ival = 7; return token::COLOR; }
+{ return token::OR; }
YY_BREAK
case 35:
YY_RULE_SETUP
-#line 130 "holidayscannerplan.lpp"
-{ yylval->ival = 8; return token::COLOR; }
+#line 131 "holidayscannerplan.lpp"
+{ yylval->ival = 1; return token::NUMBER; }
YY_BREAK
case 36:
YY_RULE_SETUP
-#line 131 "holidayscannerplan.lpp"
-{ yylval->ival = 9; return token::COLOR; }
+#line 132 "holidayscannerplan.lpp"
+{ yylval->ival = 2; return token::NUMBER; }
YY_BREAK
case 37:
YY_RULE_SETUP
#line 133 "holidayscannerplan.lpp"
-{ return token::EQ; }
+{ yylval->ival = 3; return token::NUMBER; }
YY_BREAK
case 38:
YY_RULE_SETUP
#line 134 "holidayscannerplan.lpp"
-{ return token::NE; }
+{ yylval->ival = 4; return token::NUMBER; }
YY_BREAK
case 39:
YY_RULE_SETUP
#line 135 "holidayscannerplan.lpp"
-{ return token::LE; }
+{ yylval->ival = 5; return token::NUMBER; }
YY_BREAK
case 40:
YY_RULE_SETUP
#line 136 "holidayscannerplan.lpp"
-{ return token::GE; }
+{ yylval->ival = 99999; return token::NUMBER; }
YY_BREAK
case 41:
YY_RULE_SETUP
#line 137 "holidayscannerplan.lpp"
-{ return token::LT; }
+{ yylval->ival = -99999; return token::NUMBER; }
YY_BREAK
case 42:
YY_RULE_SETUP
#line 138 "holidayscannerplan.lpp"
-{ return token::GT; }
+{ yylval->ival = 0; return token::NUMBER; }
YY_BREAK
case 43:
YY_RULE_SETUP
-#line 139 "holidayscannerplan.lpp"
-{ return token::AND;}
+#line 140 "holidayscannerplan.lpp"
+{ yylval->ival = -1; return token::NUMBER; }
YY_BREAK
case 44:
YY_RULE_SETUP
-#line 140 "holidayscannerplan.lpp"
-{ return token::OR; }
+#line 141 "holidayscannerplan.lpp"
+{ yylval->ival = 1; return token::NUMBER; }
YY_BREAK
case 45:
YY_RULE_SETUP
-#line 142 "holidayscannerplan.lpp"
-{ yylval->ival = 1; return token::NUMBER; }
+#line 143 "holidayscannerplan.lpp"
+{ yylval->sval = "public"; return token::CATEGORY; }
YY_BREAK
case 46:
YY_RULE_SETUP
-#line 143 "holidayscannerplan.lpp"
-{ yylval->ival = 2; return token::NUMBER; }
+#line 144 "holidayscannerplan.lpp"
+{ yylval->sval = "civil"; return token::CATEGORY; }
YY_BREAK
case 47:
YY_RULE_SETUP
-#line 144 "holidayscannerplan.lpp"
-{ yylval->ival = 3; return token::NUMBER; }
+#line 145 "holidayscannerplan.lpp"
+{ yylval->sval = "religious"; return token::CATEGORY; }
YY_BREAK
case 48:
YY_RULE_SETUP
-#line 145 "holidayscannerplan.lpp"
-{ yylval->ival = 4; return token::NUMBER; }
+#line 146 "holidayscannerplan.lpp"
+{ yylval->sval = "school"; return token::CATEGORY; }
YY_BREAK
case 49:
YY_RULE_SETUP
-#line 146 "holidayscannerplan.lpp"
-{ yylval->ival = 5; return token::NUMBER; }
+#line 147 "holidayscannerplan.lpp"
+{ yylval->sval = "government"; return token::CATEGORY; }
YY_BREAK
case 50:
YY_RULE_SETUP
-#line 147 "holidayscannerplan.lpp"
-{ yylval->ival = 99999; return token::NUMBER; }
+#line 148 "holidayscannerplan.lpp"
+{ yylval->sval = "financial"; return token::CATEGORY; }
YY_BREAK
case 51:
YY_RULE_SETUP
-#line 148 "holidayscannerplan.lpp"
-{ yylval->ival = -99999; return token::NUMBER; }
+#line 149 "holidayscannerplan.lpp"
+{ yylval->sval = "cultural"; return token::CATEGORY; }
YY_BREAK
case 52:
YY_RULE_SETUP
-#line 149 "holidayscannerplan.lpp"
-{ yylval->ival = 0; return token::NUMBER; }
+#line 150 "holidayscannerplan.lpp"
+{ yylval->sval = "commemorative"; return token::CATEGORY; }
YY_BREAK
case 53:
YY_RULE_SETUP
#line 151 "holidayscannerplan.lpp"
-{ yylval->ival = -1; return token::NUMBER; }
+{ yylval->sval = "historical"; return token::CATEGORY; }
YY_BREAK
case 54:
YY_RULE_SETUP
#line 152 "holidayscannerplan.lpp"
-{ yylval->ival = 1; return token::NUMBER; }
+{ yylval->sval = "nameday"; return token::CATEGORY; }
YY_BREAK
case 55:
YY_RULE_SETUP
-#line 154 "holidayscannerplan.lpp"
-{ yylval->sval = "gregorian"; return token::CALENDAR; }
+#line 153 "holidayscannerplan.lpp"
+{ yylval->sval = "seasonal"; return token::CATEGORY; }
YY_BREAK
case 56:
YY_RULE_SETUP
#line 155 "holidayscannerplan.lpp"
-{ yylval->sval = "julian"; return token::CALENDAR; }
+{ yylval->sval = "gregorian"; return token::CALENDAR; }
YY_BREAK
case 57:
YY_RULE_SETUP
-#line 157 "holidayscannerplan.lpp"
-{ yylval->ival = 1; return token::MONTH; }
+#line 156 "holidayscannerplan.lpp"
+{ yylval->sval = "julian"; return token::CALENDAR; }
YY_BREAK
case 58:
YY_RULE_SETUP
#line 158 "holidayscannerplan.lpp"
-{ yylval->ival = 2; return token::MONTH; }
+{ yylval->ival = 1; return token::MONTH; }
YY_BREAK
case 59:
YY_RULE_SETUP
#line 159 "holidayscannerplan.lpp"
-{ yylval->ival = 3; return token::MONTH; }
+{ yylval->ival = 2; return token::MONTH; }
YY_BREAK
case 60:
YY_RULE_SETUP
#line 160 "holidayscannerplan.lpp"
-{ yylval->ival = 4; return token::MONTH; }
+{ yylval->ival = 3; return token::MONTH; }
YY_BREAK
case 61:
YY_RULE_SETUP
#line 161 "holidayscannerplan.lpp"
-{ yylval->ival = 5; return token::MONTH; }
+{ yylval->ival = 4; return token::MONTH; }
YY_BREAK
case 62:
YY_RULE_SETUP
#line 162 "holidayscannerplan.lpp"
-{ yylval->ival = 6; return token::MONTH; }
+{ yylval->ival = 5; return token::MONTH; }
YY_BREAK
case 63:
YY_RULE_SETUP
#line 163 "holidayscannerplan.lpp"
-{ yylval->ival = 7; return token::MONTH; }
+{ yylval->ival = 6; return token::MONTH; }
YY_BREAK
case 64:
YY_RULE_SETUP
#line 164 "holidayscannerplan.lpp"
-{ yylval->ival = 8; return token::MONTH; }
+{ yylval->ival = 7; return token::MONTH; }
YY_BREAK
case 65:
YY_RULE_SETUP
#line 165 "holidayscannerplan.lpp"
-{ yylval->ival = 9; return token::MONTH; }
+{ yylval->ival = 8; return token::MONTH; }
YY_BREAK
case 66:
YY_RULE_SETUP
#line 166 "holidayscannerplan.lpp"
-{ yylval->ival = 10; return token::MONTH; }
+{ yylval->ival = 9; return token::MONTH; }
YY_BREAK
case 67:
YY_RULE_SETUP
#line 167 "holidayscannerplan.lpp"
-{ yylval->ival = 11; return token::MONTH; }
+{ yylval->ival = 10; return token::MONTH; }
YY_BREAK
case 68:
YY_RULE_SETUP
#line 168 "holidayscannerplan.lpp"
-{ yylval->ival = 12; return token::MONTH; }
+{ yylval->ival = 11; return token::MONTH; }
YY_BREAK
case 69:
YY_RULE_SETUP
-#line 170 "holidayscannerplan.lpp"
-{ yylval->ival = 1; return token::WDAY; }
+#line 169 "holidayscannerplan.lpp"
+{ yylval->ival = 12; return token::MONTH; }
YY_BREAK
case 70:
YY_RULE_SETUP
#line 171 "holidayscannerplan.lpp"
-{ yylval->ival = 2; return token::WDAY; }
+{ yylval->ival = 1; return token::WDAY; }
YY_BREAK
case 71:
YY_RULE_SETUP
#line 172 "holidayscannerplan.lpp"
-{ yylval->ival = 3; return token::WDAY; }
+{ yylval->ival = 2; return token::WDAY; }
YY_BREAK
case 72:
YY_RULE_SETUP
#line 173 "holidayscannerplan.lpp"
-{ yylval->ival = 4; return token::WDAY; }
+{ yylval->ival = 3; return token::WDAY; }
YY_BREAK
case 73:
YY_RULE_SETUP
#line 174 "holidayscannerplan.lpp"
-{ yylval->ival = 5; return token::WDAY; }
+{ yylval->ival = 4; return token::WDAY; }
YY_BREAK
case 74:
YY_RULE_SETUP
#line 175 "holidayscannerplan.lpp"
-{ yylval->ival = 6; return token::WDAY; }
+{ yylval->ival = 5; return token::WDAY; }
YY_BREAK
case 75:
YY_RULE_SETUP
#line 176 "holidayscannerplan.lpp"
-{ yylval->ival = 7; return token::WDAY; }
+{ yylval->ival = 6; return token::WDAY; }
YY_BREAK
case 76:
YY_RULE_SETUP
-#line 178 "holidayscannerplan.lpp"
-{ yylval->sval = "coptic"; return token::CALENDAR; }
+#line 177 "holidayscannerplan.lpp"
+{ yylval->ival = 7; return token::WDAY; }
YY_BREAK
case 77:
YY_RULE_SETUP
-#line 180 "holidayscannerplan.lpp"
-{ yylval->ival = 1; return token::MONTH; }
+#line 179 "holidayscannerplan.lpp"
+{ yylval->sval = "coptic"; return token::CALENDAR; }
YY_BREAK
case 78:
YY_RULE_SETUP
#line 181 "holidayscannerplan.lpp"
-{ yylval->ival = 2; return token::MONTH; }
+{ yylval->ival = 1; return token::MONTH; }
YY_BREAK
case 79:
YY_RULE_SETUP
#line 182 "holidayscannerplan.lpp"
-{ yylval->ival = 3; return token::MONTH; }
+{ yylval->ival = 2; return token::MONTH; }
YY_BREAK
case 80:
YY_RULE_SETUP
#line 183 "holidayscannerplan.lpp"
-{ yylval->ival = 4; return token::MONTH; }
+{ yylval->ival = 3; return token::MONTH; }
YY_BREAK
case 81:
YY_RULE_SETUP
#line 184 "holidayscannerplan.lpp"
-{ yylval->ival = 5; return token::MONTH; }
+{ yylval->ival = 4; return token::MONTH; }
YY_BREAK
case 82:
YY_RULE_SETUP
#line 185 "holidayscannerplan.lpp"
-{ yylval->ival = 6; return token::MONTH; }
+{ yylval->ival = 5; return token::MONTH; }
YY_BREAK
case 83:
YY_RULE_SETUP
#line 186 "holidayscannerplan.lpp"
-{ yylval->ival = 7; return token::MONTH; }
+{ yylval->ival = 6; return token::MONTH; }
YY_BREAK
case 84:
YY_RULE_SETUP
#line 187 "holidayscannerplan.lpp"
-{ yylval->ival = 8; return token::MONTH; }
+{ yylval->ival = 7; return token::MONTH; }
YY_BREAK
case 85:
YY_RULE_SETUP
#line 188 "holidayscannerplan.lpp"
-{ yylval->ival = 9; return token::MONTH; }
+{ yylval->ival = 8; return token::MONTH; }
YY_BREAK
case 86:
YY_RULE_SETUP
#line 189 "holidayscannerplan.lpp"
-{ yylval->ival = 10; return token::MONTH; }
+{ yylval->ival = 9; return token::MONTH; }
YY_BREAK
case 87:
YY_RULE_SETUP
#line 190 "holidayscannerplan.lpp"
-{ yylval->ival = 11; return token::MONTH; }
+{ yylval->ival = 10; return token::MONTH; }
YY_BREAK
case 88:
YY_RULE_SETUP
#line 191 "holidayscannerplan.lpp"
-{ yylval->ival = 12; return token::MONTH; }
+{ yylval->ival = 11; return token::MONTH; }
YY_BREAK
case 89:
YY_RULE_SETUP
#line 192 "holidayscannerplan.lpp"
-{ yylval->ival = 13; return token::MONTH; }
+{ yylval->ival = 12; return token::MONTH; }
YY_BREAK
case 90:
YY_RULE_SETUP
-#line 194 "holidayscannerplan.lpp"
-{ yylval->ival = 1; return token::WDAY; }
+#line 193 "holidayscannerplan.lpp"
+{ yylval->ival = 13; return token::MONTH; }
YY_BREAK
case 91:
YY_RULE_SETUP
#line 195 "holidayscannerplan.lpp"
-{ yylval->ival = 2; return token::WDAY; }
+{ yylval->ival = 1; return token::WDAY; }
YY_BREAK
case 92:
YY_RULE_SETUP
#line 196 "holidayscannerplan.lpp"
-{ yylval->ival = 3; return token::WDAY; }
+{ yylval->ival = 2; return token::WDAY; }
YY_BREAK
case 93:
YY_RULE_SETUP
#line 197 "holidayscannerplan.lpp"
-{ yylval->ival = 4; return token::WDAY; }
+{ yylval->ival = 3; return token::WDAY; }
YY_BREAK
case 94:
YY_RULE_SETUP
#line 198 "holidayscannerplan.lpp"
-{ yylval->ival = 5; return token::WDAY; }
+{ yylval->ival = 4; return token::WDAY; }
YY_BREAK
case 95:
YY_RULE_SETUP
#line 199 "holidayscannerplan.lpp"
-{ yylval->ival = 6; return token::WDAY; }
+{ yylval->ival = 5; return token::WDAY; }
YY_BREAK
case 96:
YY_RULE_SETUP
#line 200 "holidayscannerplan.lpp"
-{ yylval->ival = 7; return token::WDAY; }
+{ yylval->ival = 6; return token::WDAY; }
YY_BREAK
case 97:
YY_RULE_SETUP
-#line 202 "holidayscannerplan.lpp"
-{ yylval->sval = "ethiopian"; return token::CALENDAR; }
+#line 201 "holidayscannerplan.lpp"
+{ yylval->ival = 7; return token::WDAY; }
YY_BREAK
case 98:
YY_RULE_SETUP
-#line 204 "holidayscannerplan.lpp"
-{ yylval->ival = 1; return token::MONTH; }
+#line 203 "holidayscannerplan.lpp"
+{ yylval->sval = "ethiopian"; return token::CALENDAR; }
YY_BREAK
case 99:
YY_RULE_SETUP
#line 205 "holidayscannerplan.lpp"
-{ yylval->ival = 2; return token::MONTH; }
+{ yylval->ival = 1; return token::MONTH; }
YY_BREAK
case 100:
YY_RULE_SETUP
#line 206 "holidayscannerplan.lpp"
-{ yylval->ival = 3; return token::MONTH; }
+{ yylval->ival = 2; return token::MONTH; }
YY_BREAK
case 101:
YY_RULE_SETUP
#line 207 "holidayscannerplan.lpp"
-{ yylval->ival = 4; return token::MONTH; }
+{ yylval->ival = 3; return token::MONTH; }
YY_BREAK
case 102:
YY_RULE_SETUP
#line 208 "holidayscannerplan.lpp"
-{ yylval->ival = 5; return token::MONTH; }
+{ yylval->ival = 4; return token::MONTH; }
YY_BREAK
case 103:
YY_RULE_SETUP
#line 209 "holidayscannerplan.lpp"
-{ yylval->ival = 6; return token::MONTH; }
+{ yylval->ival = 5; return token::MONTH; }
YY_BREAK
case 104:
YY_RULE_SETUP
#line 210 "holidayscannerplan.lpp"
-{ yylval->ival = 7; return token::MONTH; }
+{ yylval->ival = 6; return token::MONTH; }
YY_BREAK
case 105:
YY_RULE_SETUP
#line 211 "holidayscannerplan.lpp"
-{ yylval->ival = 8; return token::MONTH; }
+{ yylval->ival = 7; return token::MONTH; }
YY_BREAK
case 106:
YY_RULE_SETUP
#line 212 "holidayscannerplan.lpp"
-{ yylval->ival = 9; return token::MONTH; }
+{ yylval->ival = 8; return token::MONTH; }
YY_BREAK
case 107:
YY_RULE_SETUP
#line 213 "holidayscannerplan.lpp"
-{ yylval->ival = 10; return token::MONTH; }
+{ yylval->ival = 9; return token::MONTH; }
YY_BREAK
case 108:
YY_RULE_SETUP
#line 214 "holidayscannerplan.lpp"
-{ yylval->ival = 11; return token::MONTH; }
+{ yylval->ival = 10; return token::MONTH; }
YY_BREAK
case 109:
YY_RULE_SETUP
#line 215 "holidayscannerplan.lpp"
-{ yylval->ival = 12; return token::MONTH; }
+{ yylval->ival = 11; return token::MONTH; }
YY_BREAK
case 110:
YY_RULE_SETUP
#line 216 "holidayscannerplan.lpp"
-{ yylval->ival = 13; return token::MONTH; }
+{ yylval->ival = 12; return token::MONTH; }
YY_BREAK
case 111:
YY_RULE_SETUP
-#line 218 "holidayscannerplan.lpp"
-{ yylval->ival = 1; return token::WDAY; }
+#line 217 "holidayscannerplan.lpp"
+{ yylval->ival = 13; return token::MONTH; }
YY_BREAK
case 112:
YY_RULE_SETUP
#line 219 "holidayscannerplan.lpp"
-{ yylval->ival = 2; return token::WDAY; }
+{ yylval->ival = 1; return token::WDAY; }
YY_BREAK
case 113:
YY_RULE_SETUP
#line 220 "holidayscannerplan.lpp"
-{ yylval->ival = 3; return token::WDAY; }
+{ yylval->ival = 2; return token::WDAY; }
YY_BREAK
case 114:
YY_RULE_SETUP
#line 221 "holidayscannerplan.lpp"
-{ yylval->ival = 4; return token::WDAY; }
+{ yylval->ival = 3; return token::WDAY; }
YY_BREAK
case 115:
YY_RULE_SETUP
#line 222 "holidayscannerplan.lpp"
-{ yylval->ival = 5; return token::WDAY; }
+{ yylval->ival = 4; return token::WDAY; }
YY_BREAK
case 116:
YY_RULE_SETUP
#line 223 "holidayscannerplan.lpp"
-{ yylval->ival = 6; return token::WDAY; }
+{ yylval->ival = 5; return token::WDAY; }
YY_BREAK
case 117:
YY_RULE_SETUP
#line 224 "holidayscannerplan.lpp"
-{ yylval->ival = 7; return token::WDAY; }
+{ yylval->ival = 6; return token::WDAY; }
YY_BREAK
case 118:
YY_RULE_SETUP
-#line 226 "holidayscannerplan.lpp"
-{ yylval->sval = "hebrew"; return token::CALENDAR; }
+#line 225 "holidayscannerplan.lpp"
+{ yylval->ival = 7; return token::WDAY; }
YY_BREAK
case 119:
YY_RULE_SETUP
-#line 228 "holidayscannerplan.lpp"
-{ yylval->ival = 1; return token::MONTH; }
+#line 227 "holidayscannerplan.lpp"
+{ yylval->sval = "hebrew"; return token::CALENDAR; }
YY_BREAK
case 120:
YY_RULE_SETUP
#line 229 "holidayscannerplan.lpp"
-{ yylval->ival = 2; return token::MONTH; }
+{ yylval->ival = 1; return token::MONTH; }
YY_BREAK
case 121:
YY_RULE_SETUP
#line 230 "holidayscannerplan.lpp"
-{ yylval->ival = 3; return token::MONTH; }
+{ yylval->ival = 2; return token::MONTH; }
YY_BREAK
case 122:
YY_RULE_SETUP
#line 231 "holidayscannerplan.lpp"
-{ yylval->ival = 4; return token::MONTH; }
+{ yylval->ival = 3; return token::MONTH; }
YY_BREAK
case 123:
YY_RULE_SETUP
#line 232 "holidayscannerplan.lpp"
-{ yylval->ival = 5; return token::MONTH; }
+{ yylval->ival = 4; return token::MONTH; }
YY_BREAK
case 124:
YY_RULE_SETUP
#line 233 "holidayscannerplan.lpp"
-{ yylval->ival = 6; return token::MONTH; }
+{ yylval->ival = 5; return token::MONTH; }
YY_BREAK
case 125:
YY_RULE_SETUP
#line 234 "holidayscannerplan.lpp"
-{ yylval->ival = 7; return token::MONTH; }
+{ yylval->ival = 6; return token::MONTH; }
YY_BREAK
case 126:
YY_RULE_SETUP
#line 235 "holidayscannerplan.lpp"
-{ yylval->ival = 8; return token::MONTH; }
+{ yylval->ival = 7; return token::MONTH; }
YY_BREAK
case 127:
YY_RULE_SETUP
#line 236 "holidayscannerplan.lpp"
-{ yylval->ival = 9; return token::MONTH; }
+{ yylval->ival = 8; return token::MONTH; }
YY_BREAK
case 128:
YY_RULE_SETUP
#line 237 "holidayscannerplan.lpp"
-{ yylval->ival = 10; return token::MONTH; }
+{ yylval->ival = 9; return token::MONTH; }
YY_BREAK
case 129:
YY_RULE_SETUP
#line 238 "holidayscannerplan.lpp"
-{ yylval->ival = 11; return token::MONTH; }
+{ yylval->ival = 10; return token::MONTH; }
YY_BREAK
case 130:
YY_RULE_SETUP
#line 239 "holidayscannerplan.lpp"
-{ yylval->ival = 12; return token::MONTH; }
+{ yylval->ival = 11; return token::MONTH; }
YY_BREAK
case 131:
YY_RULE_SETUP
#line 240 "holidayscannerplan.lpp"
-{ yylval->ival = 13; return token::MONTH; }
+{ yylval->ival = 12; return token::MONTH; }
YY_BREAK
case 132:
YY_RULE_SETUP
#line 241 "holidayscannerplan.lpp"
-{ yylval->ival = 14; return token::MONTH; }
+{ yylval->ival = 13; return token::MONTH; }
YY_BREAK
case 133:
YY_RULE_SETUP
-#line 243 "holidayscannerplan.lpp"
-{ yylval->ival = 1; return token::WDAY; }
+#line 242 "holidayscannerplan.lpp"
+{ yylval->ival = 14; return token::MONTH; }
YY_BREAK
case 134:
YY_RULE_SETUP
#line 244 "holidayscannerplan.lpp"
-{ yylval->ival = 2; return token::WDAY; }
+{ yylval->ival = 1; return token::WDAY; }
YY_BREAK
case 135:
YY_RULE_SETUP
#line 245 "holidayscannerplan.lpp"
-{ yylval->ival = 3; return token::WDAY; }
+{ yylval->ival = 2; return token::WDAY; }
YY_BREAK
case 136:
YY_RULE_SETUP
#line 246 "holidayscannerplan.lpp"
-{ yylval->ival = 4; return token::WDAY; }
+{ yylval->ival = 3; return token::WDAY; }
YY_BREAK
case 137:
YY_RULE_SETUP
#line 247 "holidayscannerplan.lpp"
-{ yylval->ival = 5; return token::WDAY; }
+{ yylval->ival = 4; return token::WDAY; }
YY_BREAK
case 138:
YY_RULE_SETUP
#line 248 "holidayscannerplan.lpp"
-{ yylval->ival = 6; return token::WDAY; }
+{ yylval->ival = 5; return token::WDAY; }
YY_BREAK
case 139:
YY_RULE_SETUP
#line 249 "holidayscannerplan.lpp"
-{ yylval->ival = 7; return token::WDAY; }
+{ yylval->ival = 6; return token::WDAY; }
YY_BREAK
case 140:
YY_RULE_SETUP
-#line 251 "holidayscannerplan.lpp"
-{ yylval->sval = "hijri"; return token::CALENDAR; }
+#line 250 "holidayscannerplan.lpp"
+{ yylval->ival = 7; return token::WDAY; }
YY_BREAK
case 141:
YY_RULE_SETUP
-#line 253 "holidayscannerplan.lpp"
-{ yylval->ival = 1; return token::MONTH; }
+#line 252 "holidayscannerplan.lpp"
+{ yylval->sval = "hijri"; return token::CALENDAR; }
YY_BREAK
case 142:
YY_RULE_SETUP
#line 254 "holidayscannerplan.lpp"
-{ yylval->ival = 2; return token::MONTH; }
+{ yylval->ival = 1; return token::MONTH; }
YY_BREAK
case 143:
YY_RULE_SETUP
#line 255 "holidayscannerplan.lpp"
-{ yylval->ival = 3; return token::MONTH; }
+{ yylval->ival = 2; return token::MONTH; }
YY_BREAK
case 144:
YY_RULE_SETUP
#line 256 "holidayscannerplan.lpp"
-{ yylval->ival = 4; return token::MONTH; }
+{ yylval->ival = 3; return token::MONTH; }
YY_BREAK
case 145:
YY_RULE_SETUP
#line 257 "holidayscannerplan.lpp"
-{ yylval->ival = 5; return token::MONTH; }
+{ yylval->ival = 4; return token::MONTH; }
YY_BREAK
case 146:
YY_RULE_SETUP
#line 258 "holidayscannerplan.lpp"
-{ yylval->ival = 6; return token::MONTH; }
+{ yylval->ival = 5; return token::MONTH; }
YY_BREAK
case 147:
YY_RULE_SETUP
#line 259 "holidayscannerplan.lpp"
-{ yylval->ival = 7; return token::MONTH; }
+{ yylval->ival = 6; return token::MONTH; }
YY_BREAK
case 148:
YY_RULE_SETUP
#line 260 "holidayscannerplan.lpp"
-{ yylval->ival = 8; return token::MONTH; }
+{ yylval->ival = 7; return token::MONTH; }
YY_BREAK
case 149:
YY_RULE_SETUP
#line 261 "holidayscannerplan.lpp"
-{ yylval->ival = 9; return token::MONTH; }
+{ yylval->ival = 8; return token::MONTH; }
YY_BREAK
case 150:
YY_RULE_SETUP
#line 262 "holidayscannerplan.lpp"
-{ yylval->ival = 10; return token::MONTH; }
+{ yylval->ival = 9; return token::MONTH; }
YY_BREAK
case 151:
YY_RULE_SETUP
#line 263 "holidayscannerplan.lpp"
-{ yylval->ival = 11; return token::MONTH; }
+{ yylval->ival = 10; return token::MONTH; }
YY_BREAK
case 152:
YY_RULE_SETUP
#line 264 "holidayscannerplan.lpp"
-{ yylval->ival = 12; return token::MONTH; }
+{ yylval->ival = 11; return token::MONTH; }
YY_BREAK
case 153:
YY_RULE_SETUP
-#line 266 "holidayscannerplan.lpp"
-{ yylval->ival = 1; return token::WDAY; }
+#line 265 "holidayscannerplan.lpp"
+{ yylval->ival = 12; return token::MONTH; }
YY_BREAK
case 154:
YY_RULE_SETUP
#line 267 "holidayscannerplan.lpp"
-{ yylval->ival = 2; return token::WDAY; }
+{ yylval->ival = 1; return token::WDAY; }
YY_BREAK
case 155:
YY_RULE_SETUP
#line 268 "holidayscannerplan.lpp"
-{ yylval->ival = 3; return token::WDAY; }
+{ yylval->ival = 2; return token::WDAY; }
YY_BREAK
case 156:
YY_RULE_SETUP
#line 269 "holidayscannerplan.lpp"
-{ yylval->ival = 4; return token::WDAY; }
+{ yylval->ival = 3; return token::WDAY; }
YY_BREAK
case 157:
YY_RULE_SETUP
#line 270 "holidayscannerplan.lpp"
-{ yylval->ival = 5; return token::WDAY; }
+{ yylval->ival = 4; return token::WDAY; }
YY_BREAK
case 158:
YY_RULE_SETUP
#line 271 "holidayscannerplan.lpp"
-{ yylval->ival = 6; return token::WDAY; }
+{ yylval->ival = 5; return token::WDAY; }
YY_BREAK
case 159:
YY_RULE_SETUP
#line 272 "holidayscannerplan.lpp"
-{ yylval->ival = 7; return token::WDAY; }
+{ yylval->ival = 6; return token::WDAY; }
YY_BREAK
case 160:
YY_RULE_SETUP
-#line 274 "holidayscannerplan.lpp"
-{ yylval->sval = "indian-national"; return token::CALENDAR; }
+#line 273 "holidayscannerplan.lpp"
+{ yylval->ival = 7; return token::WDAY; }
YY_BREAK
case 161:
YY_RULE_SETUP
-#line 276 "holidayscannerplan.lpp"
-{ yylval->ival = 1; return token::MONTH; }
+#line 275 "holidayscannerplan.lpp"
+{ yylval->sval = "indian-national"; return token::CALENDAR; }
YY_BREAK
case 162:
YY_RULE_SETUP
#line 277 "holidayscannerplan.lpp"
-{ yylval->ival = 2; return token::MONTH; }
+{ yylval->ival = 1; return token::MONTH; }
YY_BREAK
case 163:
YY_RULE_SETUP
#line 278 "holidayscannerplan.lpp"
-{ yylval->ival = 3; return token::MONTH; }
+{ yylval->ival = 2; return token::MONTH; }
YY_BREAK
case 164:
YY_RULE_SETUP
#line 279 "holidayscannerplan.lpp"
-{ yylval->ival = 4; return token::MONTH; }
+{ yylval->ival = 3; return token::MONTH; }
YY_BREAK
case 165:
YY_RULE_SETUP
#line 280 "holidayscannerplan.lpp"
-{ yylval->ival = 5; return token::MONTH; }
+{ yylval->ival = 4; return token::MONTH; }
YY_BREAK
case 166:
YY_RULE_SETUP
#line 281 "holidayscannerplan.lpp"
-{ yylval->ival = 6; return token::MONTH; }
+{ yylval->ival = 5; return token::MONTH; }
YY_BREAK
case 167:
YY_RULE_SETUP
#line 282 "holidayscannerplan.lpp"
-{ yylval->ival = 7; return token::MONTH; }
+{ yylval->ival = 6; return token::MONTH; }
YY_BREAK
case 168:
YY_RULE_SETUP
#line 283 "holidayscannerplan.lpp"
-{ yylval->ival = 8; return token::MONTH; }
+{ yylval->ival = 7; return token::MONTH; }
YY_BREAK
case 169:
YY_RULE_SETUP
#line 284 "holidayscannerplan.lpp"
-{ yylval->ival = 9; return token::MONTH; }
+{ yylval->ival = 8; return token::MONTH; }
YY_BREAK
case 170:
YY_RULE_SETUP
#line 285 "holidayscannerplan.lpp"
-{ yylval->ival = 10; return token::MONTH; }
+{ yylval->ival = 9; return token::MONTH; }
YY_BREAK
case 171:
YY_RULE_SETUP
#line 286 "holidayscannerplan.lpp"
-{ yylval->ival = 11; return token::MONTH; }
+{ yylval->ival = 10; return token::MONTH; }
YY_BREAK
case 172:
YY_RULE_SETUP
#line 287 "holidayscannerplan.lpp"
-{ yylval->ival = 12; return token::MONTH; }
+{ yylval->ival = 11; return token::MONTH; }
YY_BREAK
case 173:
YY_RULE_SETUP
-#line 289 "holidayscannerplan.lpp"
-{ yylval->ival = 1; return token::WDAY; }
+#line 288 "holidayscannerplan.lpp"
+{ yylval->ival = 12; return token::MONTH; }
YY_BREAK
case 174:
YY_RULE_SETUP
#line 290 "holidayscannerplan.lpp"
-{ yylval->ival = 2; return token::WDAY; }
+{ yylval->ival = 1; return token::WDAY; }
YY_BREAK
case 175:
YY_RULE_SETUP
#line 291 "holidayscannerplan.lpp"
-{ yylval->ival = 3; return token::WDAY; }
+{ yylval->ival = 2; return token::WDAY; }
YY_BREAK
case 176:
YY_RULE_SETUP
#line 292 "holidayscannerplan.lpp"
-{ yylval->ival = 4; return token::WDAY; }
+{ yylval->ival = 3; return token::WDAY; }
YY_BREAK
case 177:
YY_RULE_SETUP
#line 293 "holidayscannerplan.lpp"
-{ yylval->ival = 5; return token::WDAY; }
+{ yylval->ival = 4; return token::WDAY; }
YY_BREAK
case 178:
YY_RULE_SETUP
#line 294 "holidayscannerplan.lpp"
-{ yylval->ival = 6; return token::WDAY; }
+{ yylval->ival = 5; return token::WDAY; }
YY_BREAK
case 179:
YY_RULE_SETUP
#line 295 "holidayscannerplan.lpp"
-{ yylval->ival = 7; return token::WDAY; }
+{ yylval->ival = 6; return token::WDAY; }
YY_BREAK
case 180:
YY_RULE_SETUP
-#line 297 "holidayscannerplan.lpp"
-{ yylval->sval = "jalali"; return token::CALENDAR; }
+#line 296 "holidayscannerplan.lpp"
+{ yylval->ival = 7; return token::WDAY; }
YY_BREAK
case 181:
YY_RULE_SETUP
-#line 299 "holidayscannerplan.lpp"
-{ yylval->ival = 1; return token::MONTH; }
+#line 298 "holidayscannerplan.lpp"
+{ yylval->sval = "jalali"; return token::CALENDAR; }
YY_BREAK
case 182:
YY_RULE_SETUP
#line 300 "holidayscannerplan.lpp"
-{ yylval->ival = 2; return token::MONTH; }
+{ yylval->ival = 1; return token::MONTH; }
YY_BREAK
case 183:
YY_RULE_SETUP
#line 301 "holidayscannerplan.lpp"
-{ yylval->ival = 3; return token::MONTH; }
+{ yylval->ival = 2; return token::MONTH; }
YY_BREAK
case 184:
YY_RULE_SETUP
#line 302 "holidayscannerplan.lpp"
-{ yylval->ival = 4; return token::MONTH; }
+{ yylval->ival = 3; return token::MONTH; }
YY_BREAK
case 185:
YY_RULE_SETUP
#line 303 "holidayscannerplan.lpp"
-{ yylval->ival = 5; return token::MONTH; }
+{ yylval->ival = 4; return token::MONTH; }
YY_BREAK
case 186:
YY_RULE_SETUP
#line 304 "holidayscannerplan.lpp"
-{ yylval->ival = 6; return token::MONTH; }
+{ yylval->ival = 5; return token::MONTH; }
YY_BREAK
case 187:
YY_RULE_SETUP
#line 305 "holidayscannerplan.lpp"
-{ yylval->ival = 7; return token::MONTH; }
+{ yylval->ival = 6; return token::MONTH; }
YY_BREAK
case 188:
YY_RULE_SETUP
#line 306 "holidayscannerplan.lpp"
-{ yylval->ival = 8; return token::MONTH; }
+{ yylval->ival = 7; return token::MONTH; }
YY_BREAK
case 189:
YY_RULE_SETUP
#line 307 "holidayscannerplan.lpp"
-{ yylval->ival = 9; return token::MONTH; }
+{ yylval->ival = 8; return token::MONTH; }
YY_BREAK
case 190:
YY_RULE_SETUP
#line 308 "holidayscannerplan.lpp"
-{ yylval->ival = 10; return token::MONTH; }
+{ yylval->ival = 9; return token::MONTH; }
YY_BREAK
case 191:
YY_RULE_SETUP
#line 309 "holidayscannerplan.lpp"
-{ yylval->ival = 11; return token::MONTH; }
+{ yylval->ival = 10; return token::MONTH; }
YY_BREAK
case 192:
YY_RULE_SETUP
#line 310 "holidayscannerplan.lpp"
-{ yylval->ival = 12; return token::MONTH; }
+{ yylval->ival = 11; return token::MONTH; }
YY_BREAK
case 193:
YY_RULE_SETUP
-#line 312 "holidayscannerplan.lpp"
-{ yylval->ival = 1; return token::WDAY; }
+#line 311 "holidayscannerplan.lpp"
+{ yylval->ival = 12; return token::MONTH; }
YY_BREAK
case 194:
YY_RULE_SETUP
#line 313 "holidayscannerplan.lpp"
-{ yylval->ival = 2; return token::WDAY; }
+{ yylval->ival = 1; return token::WDAY; }
YY_BREAK
case 195:
YY_RULE_SETUP
#line 314 "holidayscannerplan.lpp"
-{ yylval->ival = 3; return token::WDAY; }
+{ yylval->ival = 2; return token::WDAY; }
YY_BREAK
case 196:
YY_RULE_SETUP
#line 315 "holidayscannerplan.lpp"
-{ yylval->ival = 4; return token::WDAY; }
+{ yylval->ival = 3; return token::WDAY; }
YY_BREAK
case 197:
YY_RULE_SETUP
#line 316 "holidayscannerplan.lpp"
-{ yylval->ival = 5; return token::WDAY; }
+{ yylval->ival = 4; return token::WDAY; }
YY_BREAK
case 198:
YY_RULE_SETUP
#line 317 "holidayscannerplan.lpp"
-{ yylval->ival = 6; return token::WDAY; }
+{ yylval->ival = 5; return token::WDAY; }
YY_BREAK
case 199:
YY_RULE_SETUP
#line 318 "holidayscannerplan.lpp"
-{ yylval->ival = 7; return token::WDAY; }
+{ yylval->ival = 6; return token::WDAY; }
YY_BREAK
case 200:
YY_RULE_SETUP
-#line 320 "holidayscannerplan.lpp"
-{ LexerError( yytext ); }
+#line 319 "holidayscannerplan.lpp"
+{ yylval->ival = 7; return token::WDAY; }
YY_BREAK
case 201:
YY_RULE_SETUP
-#line 322 "holidayscannerplan.lpp"
+#line 321 "holidayscannerplan.lpp"
+{ LexerError( yytext ); }
+ YY_BREAK
+case 202:
+YY_RULE_SETUP
+#line 323 "holidayscannerplan.lpp"
ECHO;
YY_BREAK
-#line 2613 "holidayscannerplan.cpp"
+#line 2659 "holidayscannerplan.cpp"
case YY_STATE_EOF(INITIAL):
yyterminate();
@@ -3012,7 +3058,7 @@ int yyFlexLexer::yy_get_next_buffer()
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 >= 943 )
+ if ( yy_current_state >= 982 )
yy_c = yy_meta[(unsigned int) yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -3045,11 +3091,11 @@ int yyFlexLexer::yy_get_next_buffer()
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 >= 943 )
+ if ( yy_current_state >= 982 )
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 == 942);
+ yy_is_jam = (yy_current_state == 981);
return yy_is_jam ? 0 : yy_current_state;
}
@@ -3660,7 +3706,7 @@ void HolidayScannerfree (void * ptr )
/* %ok-for-header */
-#line 322 "holidayscannerplan.lpp"
+#line 323 "holidayscannerplan.lpp"
diff --git a/kholidays/parsers/plan2/location.hh b/kholidays/parsers/plan2/location.hh
index 8f2a6d4..0840aa4 100644
--- a/kholidays/parsers/plan2/location.hh
+++ b/kholidays/parsers/plan2/location.hh
@@ -1,23 +1,22 @@
-/* A Bison parser, made by GNU Bison 2.3. */
-/* Locations for Bison parsers in C++
-
- Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+/* A Bison parser, made by GNU Bison 2.4.1. */
- This program is free software; you can redistribute it and/or modify
+/* Locations for Bison parsers in C++
+
+ Copyright (C) 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.
-
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
-
+
You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA. */
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
/* As a special exception, you may create a larger work that contains
part or all of the Bison parser skeleton and distribute that work
@@ -28,7 +27,7 @@
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. */
@@ -44,8 +43,14 @@
# include <string>
# include "position.hh"
-namespace KHolidays
-{
+
+/* Line 162 of location.cc */
+#line 1 "[Bison:b4_percent_define_default]"
+
+namespace KHolidays {
+
+/* Line 162 of location.cc */
+#line 54 "location.hh"
/// Abstract a location.
class location
@@ -119,6 +124,20 @@ namespace KHolidays
return res;
}
+ /// Compare two location objects.
+ inline bool
+ operator== (const location& loc1, const location& loc2)
+ {
+ return loc1.begin == loc2.begin && loc1.end == loc2.end;
+ }
+
+ /// Compare two location objects.
+ inline bool
+ operator!= (const location& loc1, const location& loc2)
+ {
+ return !(loc1 == loc2);
+ }
+
/** \brief Intercept output stream redirection.
** \param ostr the destination output stream
** \param loc a reference to the location to redirect
@@ -140,6 +159,13 @@ namespace KHolidays
return ostr;
}
-}
+
+/* Line 271 of location.cc */
+#line 1 "[Bison:b4_percent_define_default]"
+
+} // KHolidays
+
+/* Line 271 of location.cc */
+#line 170 "location.hh"
#endif // not BISON_LOCATION_HH
diff --git a/kholidays/parsers/plan2/position.hh b/kholidays/parsers/plan2/position.hh
index d76aa92..ef250ec 100644
--- a/kholidays/parsers/plan2/position.hh
+++ b/kholidays/parsers/plan2/position.hh
@@ -1,23 +1,22 @@
-/* A Bison parser, made by GNU Bison 2.3. */
-/* Positions for Bison parsers in C++
-
- Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+/* A Bison parser, made by GNU Bison 2.4.1. */
- This program is free software; you can redistribute it and/or modify
+/* Positions for Bison parsers in C++
+
+ Copyright (C) 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.
-
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
-
+
You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA. */
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
/* As a special exception, you may create a larger work that contains
part or all of the Bison parser skeleton and distribute that work
@@ -28,7 +27,7 @@
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. */
@@ -42,9 +41,16 @@
# include <iostream>
# include <string>
+# include <algorithm>
+
+
+/* Line 38 of location.cc */
+#line 1 "[Bison:b4_percent_define_default]"
+
+namespace KHolidays {
-namespace KHolidays
-{
+/* Line 38 of location.cc */
+#line 54 "position.hh"
/// Abstract a position.
class position
{
@@ -52,7 +58,7 @@ namespace KHolidays
/// Construct a position.
position ()
- : filename (0), line (1), column (0)
+ : filename (0), line (1), column (1)
{
}
@@ -62,7 +68,7 @@ namespace KHolidays
{
filename = fn;
line = 1;
- column = 0;
+ column = 1;
}
/** \name Line and Column related manipulators
@@ -71,19 +77,14 @@ namespace KHolidays
/// (line related) Advance to the COUNT next lines.
inline void lines (int count = 1)
{
- column = 0;
+ column = 1;
line += count;
}
/// (column related) Advance to the COUNT next columns.
inline void columns (int count = 1)
{
- int leftmost = 0;
- int current = column;
- if (leftmost <= current + count)
- column += count;
- else
- column = 0;
+ column = std::max (1u, column + count);
}
/** \} */
@@ -126,6 +127,23 @@ namespace KHolidays
return begin + -width;
}
+ /// Compare two position objects.
+ inline bool
+ operator== (const position& pos1, const position& pos2)
+ {
+ return
+ (pos1.filename == pos2.filename
+ || pos1.filename && pos2.filename && *pos1.filename == *pos2.filename)
+ && pos1.line == pos2.line && pos1.column == pos2.column;
+ }
+
+ /// Compare two position objects.
+ inline bool
+ operator!= (const position& pos1, const position& pos2)
+ {
+ return !(pos1 == pos2);
+ }
+
/** \brief Intercept output stream redirection.
** \param ostr the destination output stream
** \param pos a reference to the position to redirect
@@ -138,5 +156,12 @@ namespace KHolidays
return ostr << pos.line << '.' << pos.column;
}
-}
+
+/* Line 144 of location.cc */
+#line 1 "[Bison:b4_percent_define_default]"
+
+} // KHolidays
+
+/* Line 144 of location.cc */
+#line 167 "position.hh"
#endif // not BISON_POSITION_HH
diff --git a/kholidays/parsers/plan2/stack.hh b/kholidays/parsers/plan2/stack.hh
index ce978b9..f4b53eb 100644
--- a/kholidays/parsers/plan2/stack.hh
+++ b/kholidays/parsers/plan2/stack.hh
@@ -1,23 +1,23 @@
-/* A Bison parser, made by GNU Bison 2.3. */
-/* Stack handling for Bison parsers in C++
-
- Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+/* A Bison parser, made by GNU Bison 2.4.1. */
- This program is free software; you can redistribute it and/or modify
+/* Stack handling for Bison parsers in C++
+
+ Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008 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.
-
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
-
+
You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA. */
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
/* As a special exception, you may create a larger work that contains
part or all of the Bison parser skeleton and distribute that work
@@ -28,7 +28,7 @@
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. */
@@ -37,8 +37,14 @@
#include <deque>
-namespace KHolidays
-{
+
+/* Line 1067 of lalr1.cc */
+#line 1 "[Bison:b4_percent_define_default]"
+
+namespace KHolidays {
+
+/* Line 1067 of lalr1.cc */
+#line 48 "stack.hh"
template <class T, class S = std::deque<T> >
class stack
{
@@ -124,6 +130,14 @@ namespace KHolidays
const S& stack_;
unsigned int range_;
};
-}
-#endif // not BISON_STACK_HH
+/* Line 1153 of lalr1.cc */
+#line 1 "[Bison:b4_percent_define_default]"
+
+} // KHolidays
+
+/* Line 1153 of lalr1.cc */
+#line 141 "stack.hh"
+
+#endif // not BISON_STACK_HH[]dnl
+
commit 02b1e2ba99a8c993840bc902b301ae8e16dbbf27
Author: John Layt <jlayt at kde.org>
Date: Wed Jun 18 22:28:05 2014 +0100
Fix Plan2 format parser bugs
Fix a couple of bugs that the more recent Bison doesn't tolerate.
diff --git a/kholidays/parsers/plan2/holidayparserdriverplan.cpp b/kholidays/parsers/plan2/holidayparserdriverplan.cpp
index 3afb53f..aef729c 100644
--- a/kholidays/parsers/plan2/holidayparserdriverplan.cpp
+++ b/kholidays/parsers/plan2/holidayparserdriverplan.cpp
@@ -38,6 +38,7 @@
#include <QFileInfo>
+#include <KCalendarSystem>
#include <kdebug.h>
#include "holiday_p.h"
diff --git a/kholidays/parsers/plan2/holidayparserplan.ypp b/kholidays/parsers/plan2/holidayparserplan.ypp
index 1da12bb..bd34500 100644
--- a/kholidays/parsers/plan2/holidayparserplan.ypp
+++ b/kholidays/parsers/plan2/holidayparserplan.ypp
@@ -149,7 +149,7 @@ list :
| list eventname categories calendar eventrule
;
-eventname : STRING { driver.setEventName( char *s = $1; QString::fromUtf8( s ) ); free( s ); $1 = NULL; }
+eventname : STRING { char *s = $1; driver.setEventName( QString::fromUtf8( s ) ); free( s ); $1 = NULL; }
;
categories : CATEGORY { driver.setEventCategory( $1 ); }
@@ -200,7 +200,7 @@ date : pexpr '.' month { driver.setEventDate( -99999, $3, $1 ); }
| pexpr { driver.setEventDate( $1 ); }
;
-reldate : STRING { char *s = $1; $$ = driver.julianDayFromEventName( s ); free( s ); $1 = NULL}
+reldate : STRING { char *s = $1; $$ = driver.julianDayFromEventName( s ); free( s ); $1 = NULL; }
| EASTER { $$ = driver.julianDayFromEaster(); }
| PASCHA { $$ = driver.julianDayFromPascha(); }
| pexpr '.' month { $$ = driver.julianDayFromMonthDay( $3, $1 ); }
commit 9a68a37cde3c6c6cbc3143294098a910407156b2
Author: John Layt <jlayt at kde.org>
Date: Wed Jun 18 18:27:12 2014 +0100
Add Category support to the Plan2 format
Add support for assigning categories to a holiday. A holiday must have
one or more categories.
diff --git a/kholidays/parsers/plan2/holidayparserdriverplan.cpp b/kholidays/parsers/plan2/holidayparserdriverplan.cpp
index 6e810b0..3afb53f 100644
--- a/kholidays/parsers/plan2/holidayparserdriverplan.cpp
+++ b/kholidays/parsers/plan2/holidayparserdriverplan.cpp
@@ -397,9 +397,16 @@ void HolidayParserDriverPlan::setFileDescription( const QString &description )
void HolidayParserDriverPlan::setEventName( const QString &eventName )
{
+ // Assume if setting an event name then is start of new event line, so clear categories
+ m_eventCategories.clear();
m_eventName = eventName;
}
+void HolidayParserDriverPlan::setEventCategory( const QString &category )
+{
+ m_eventCategories.append( category );
+}
+
void HolidayParserDriverPlan::setEventCalendarType( const QString &calendarType )
{
m_eventCalendarType = calendarType;
@@ -697,8 +704,7 @@ void HolidayParserDriverPlan::addHoliday( const QDate &observedDate, int durati
holiday.d->mDuration = duration;
holiday.d->mText = m_eventName;
holiday.d->mShortText = m_eventName;
- // TODO If category == "public" then NonWorkday
- if ( false ) {
+ if ( m_eventCategories.contains( "public" ) ) {
holiday.d->mDayType = KHolidays::Holiday::NonWorkday;
} else {
holiday.d->mDayType = KHolidays::Holiday::Workday;
diff --git a/kholidays/parsers/plan2/holidayparserdriverplan_p.h b/kholidays/parsers/plan2/holidayparserdriverplan_p.h
index e678649..dd86e07 100644
--- a/kholidays/parsers/plan2/holidayparserdriverplan_p.h
+++ b/kholidays/parsers/plan2/holidayparserdriverplan_p.h
@@ -117,6 +117,7 @@ protected:
void setFileName( const QString &ame );
void setFileDescription( const QString &description );
void setEventName( const QString &eventName );
+ void setEventCategory( const QString &category );
void setEventCalendarType( const QString &calendarType = "gregorian" );
void setEventDate( int eventYear, int eventMonth, int eventDay );
void setEventDate( int jd );
@@ -157,6 +158,7 @@ private:
QDate m_parseYearEaster; // Easter in the parse year, Gregorian only
QDate m_parseYearPascha; // Orthodox Easter in the parse year, Gregorian only
+ QStringList m_eventCategories; // Event categories
QString m_eventCalendarType; // Calendar System for event rule
QString m_eventName; // Event name text
int m_eventYear; // Event date fields
diff --git a/kholidays/parsers/plan2/holidayparserplan.ypp b/kholidays/parsers/plan2/holidayparserplan.ypp
index d2d4d8a..1da12bb 100644
--- a/kholidays/parsers/plan2/holidayparserplan.ypp
+++ b/kholidays/parsers/plan2/holidayparserplan.ypp
@@ -86,9 +86,10 @@
%union { int ival; char *sval; }
%type <ival> offset conditionaloffset length expr pexpr number month reldate wdaycondition monthnumber
+%type <sval> categories
%token END 0
%token <ival> NUMBER MONTH WDAY
-%token <sval> STRING CALENDAR
+%token <sval> STRING CATEGORY CALENDAR
%token INOP PLUS MINUS YEAR LEAPYEAR SHIFT IF
%token LENGTH EASTER EQ NE LE GE LT GT PASCHA COUNTRY LANGUAGE NAME DESCRIPTION
@@ -145,12 +146,16 @@ description : { driver.setFileDescription( QString() ); }
;
list :
- | list eventname calendar eventrule
+ | list eventname categories calendar eventrule
;
eventname : STRING { driver.setEventName( char *s = $1; QString::fromUtf8( s ) ); free( s ); $1 = NULL; }
;
+categories : CATEGORY { driver.setEventCategory( $1 ); }
+ | categories CATEGORY { driver.setEventCategory( $1 ); }
+;
+
calendar : { driver.setEventCalendarType( QLatin1String("gregorian") ); }
| CALENDAR { driver.setEventCalendarType( QString::fromUtf8( $1 ) ); }
;
diff --git a/kholidays/parsers/plan2/holidayscannerplan.lpp b/kholidays/parsers/plan2/holidayscannerplan.lpp
index 89b41a9..dbdc0d1 100644
--- a/kholidays/parsers/plan2/holidayscannerplan.lpp
+++ b/kholidays/parsers/plan2/holidayscannerplan.lpp
@@ -140,6 +140,18 @@ noop { yylval->ival = 0; return token::NUMBER; }
before { yylval->ival = -1; return token::NUMBER; }
after { yylval->ival = 1; return token::NUMBER; }
+public { yylval->sval = "public"; return token::CATEGORY; }
+civil { yylval->sval = "civil"; return token::CATEGORY; }
+religious { yylval->sval = "religious"; return token::CATEGORY; }
+school { yylval->sval = "school"; return token::CATEGORY; }
+government { yylval->sval = "government"; return token::CATEGORY; }
+financial { yylval->sval = "financial"; return token::CATEGORY; }
+cultural { yylval->sval = "cultural"; return token::CATEGORY; }
+commemorative { yylval->sval = "commemorative"; return token::CATEGORY; }
+historical { yylval->sval = "historical"; return token::CATEGORY; }
+nameday { yylval->sval = "nameday"; return token::CATEGORY; }
+seasonal { yylval->sval = "seasonal"; return token::CATEGORY; }
+
gregorian { yylval->sval = "gregorian"; return token::CALENDAR; }
julian { yylval->sval = "julian"; return token::CALENDAR; }
commit a9cb1169ae6b0ec05c03818531d05d7f22a20cc4
Author: John Layt <jlayt at kde.org>
Date: Wed Jun 18 01:20:16 2014 +0100
Remove color support from Plan2 format
Remove the color options from the Plan2 format as it is mostly unused
except for "weekend", which will be replaced by proper category support.
diff --git a/kholidays/parsers/plan2/holidayparserdriverplan.cpp b/kholidays/parsers/plan2/holidayparserdriverplan.cpp
index e0dd53d..6e810b0 100644
--- a/kholidays/parsers/plan2/holidayparserdriverplan.cpp
+++ b/kholidays/parsers/plan2/holidayparserdriverplan.cpp
@@ -400,16 +400,6 @@ void HolidayParserDriverPlan::setEventName( const QString &eventName )
m_eventName = eventName;
}
-void HolidayParserDriverPlan::setEventColorName( int nameColor )
-{
- m_eventColorName = nameColor;
-}
-
-void HolidayParserDriverPlan::setEventColorDay( int dayColor )
-{
- m_eventColorDay = dayColor;
-}
-
void HolidayParserDriverPlan::setEventCalendarType( const QString &calendarType )
{
m_eventCalendarType = calendarType;
@@ -707,8 +697,8 @@ void HolidayParserDriverPlan::addHoliday( const QDate &observedDate, int durati
holiday.d->mDuration = duration;
holiday.d->mText = m_eventName;
holiday.d->mShortText = m_eventName;
- if ( m_eventColorName == 2 || m_eventColorName == 9 ||
- m_eventColorDay == 2 || m_eventColorDay == 9 ) {
+ // TODO If category == "public" then NonWorkday
+ if ( false ) {
holiday.d->mDayType = KHolidays::Holiday::NonWorkday;
} else {
holiday.d->mDayType = KHolidays::Holiday::Workday;
diff --git a/kholidays/parsers/plan2/holidayparserdriverplan_p.h b/kholidays/parsers/plan2/holidayparserdriverplan_p.h
index 1ab77c3..e678649 100644
--- a/kholidays/parsers/plan2/holidayparserdriverplan_p.h
+++ b/kholidays/parsers/plan2/holidayparserdriverplan_p.h
@@ -117,8 +117,6 @@ protected:
void setFileName( const QString &ame );
void setFileDescription( const QString &description );
void setEventName( const QString &eventName );
- void setEventColorName( int nameColor );
- void setEventColorDay( int dayColor );
void setEventCalendarType( const QString &calendarType = "gregorian" );
void setEventDate( int eventYear, int eventMonth, int eventDay );
void setEventDate( int jd );
@@ -164,8 +162,6 @@ private:
int m_eventYear; // Event date fields
int m_eventMonth; // Event date fields
int m_eventDay; // Event date fields
- int m_eventColorName; // Color of event name text
- int m_eventColorDay; // Color of event day number
std::string *m_fileToParse;
};
diff --git a/kholidays/parsers/plan2/holidayparserplan.ypp b/kholidays/parsers/plan2/holidayparserplan.ypp
index 779f53e..d2d4d8a 100644
--- a/kholidays/parsers/plan2/holidayparserplan.ypp
+++ b/kholidays/parsers/plan2/holidayparserplan.ypp
@@ -85,9 +85,9 @@
%union { int ival; char *sval; }
-%type <ival> stringcolor daycolor offset conditionaloffset length expr pexpr number month reldate wdaycondition monthnumber
+%type <ival> offset conditionaloffset length expr pexpr number month reldate wdaycondition monthnumber
%token END 0
-%token <ival> NUMBER MONTH WDAY COLOR
+%token <ival> NUMBER MONTH WDAY
%token <sval> STRING CALENDAR
%token INOP PLUS MINUS YEAR LEAPYEAR SHIFT IF
%token LENGTH EASTER EQ NE LE GE LT GT PASCHA COUNTRY LANGUAGE NAME DESCRIPTION
@@ -145,15 +145,7 @@ description : { driver.setFileDescription( QString() ); }
;
list :
- | list stringcolor eventname daycolor calendar eventrule
-;
-
-stringcolor : { driver.setEventColorName( 0 ); }
- | COLOR { driver.setEventColorName( $1 ); }
-;
-
-daycolor : { driver.setEventColorDay( 0 ); }
- | COLOR { driver.setEventColorDay( $1 ); }
+ | list eventname calendar eventrule
;
eventname : STRING { driver.setEventName( char *s = $1; QString::fromUtf8( s ) ); free( s ); $1 = NULL; }
diff --git a/kholidays/parsers/plan2/holidayscannerplan.lpp b/kholidays/parsers/plan2/holidayscannerplan.lpp
index 1aa53be..89b41a9 100644
--- a/kholidays/parsers/plan2/holidayscannerplan.lpp
+++ b/kholidays/parsers/plan2/holidayscannerplan.lpp
@@ -119,16 +119,6 @@ pascha { return token::PASCHA; }
length { return token::LENGTH; }
shift { return token::SHIFT; }
-black { yylval->ival = 1; return token::COLOR; }
-red { yylval->ival = 2; return token::COLOR; }
-green { yylval->ival = 3; return token::COLOR; }
-yellow { yylval->ival = 4; return token::COLOR; }
-blue { yylval->ival = 5; return token::COLOR; }
-magenta { yylval->ival = 6; return token::COLOR; }
-cyan { yylval->ival = 7; return token::COLOR; }
-white { yylval->ival = 8; return token::COLOR; }
-weekend { yylval->ival = 9; return token::COLOR; }
-
"==" { return token::EQ; }
"!=" { return token::NE; }
"<=" { return token::LE; }
commit 62bde18a351f68c6bb3b38f968c1b3af503c62a0
Author: John Layt <jlayt at kde.org>
Date: Wed Jun 18 00:32:23 2014 +0100
Remove small keyword from Plan2 format
Remove small as it is unused in KHolidays. The parser code will be
regenerated once all format changes are completed.
diff --git a/kholidays/parsers/plan2/holidayparserplan.ypp b/kholidays/parsers/plan2/holidayparserplan.ypp
index 387d345..779f53e 100644
--- a/kholidays/parsers/plan2/holidayparserplan.ypp
+++ b/kholidays/parsers/plan2/holidayparserplan.ypp
@@ -89,7 +89,7 @@
%token END 0
%token <ival> NUMBER MONTH WDAY COLOR
%token <sval> STRING CALENDAR
-%token INOP PLUS MINUS SMALL YEAR LEAPYEAR SHIFT IF
+%token INOP PLUS MINUS YEAR LEAPYEAR SHIFT IF
%token LENGTH EASTER EQ NE LE GE LT GT PASCHA COUNTRY LANGUAGE NAME DESCRIPTION
%destructor { free( $$ ); } STRING
@@ -145,11 +145,7 @@ description : { driver.setFileDescription( QString() ); }
;
list :
- | list small stringcolor eventname daycolor calendar eventrule
-;
-
-small :
- | SMALL
+ | list stringcolor eventname daycolor calendar eventrule
;
stringcolor : { driver.setEventColorName( 0 ); }
diff --git a/kholidays/parsers/plan2/holidayscannerplan.lpp b/kholidays/parsers/plan2/holidayscannerplan.lpp
index 1793de5..1aa53be 100644
--- a/kholidays/parsers/plan2/holidayscannerplan.lpp
+++ b/kholidays/parsers/plan2/holidayscannerplan.lpp
@@ -112,7 +112,6 @@ in { return token::INOP; }
if { return token::IF; }
plus { return token::PLUS; }
minus { return token::MINUS; }
-small { return token::SMALL; }
year { return token::YEAR; }
leapyear { return token::LEAPYEAR; }
easter { return token::EASTER; }
commit 0cf5949705a1294664cb7e73b952f17d5ab4e2f8
Author: Dan Vrátil <dvratil at redhat.com>
Date: Fri Jun 20 16:20:42 2014 +0200
StandardActionManager: New subcollection of a virtual collection should be virtual too
When a virtual collection has a special virtual mime type, then newly a
created subcollection should be virtual too.
diff --git a/akonadi/standardactionmanager.cpp b/akonadi/standardactionmanager.cpp
index 72a1d81..ebaa306 100644
--- a/akonadi/standardactionmanager.cpp
+++ b/akonadi/standardactionmanager.cpp
@@ -650,6 +650,12 @@ public:
collection.setContentMimeTypes(mts);
}
}
+ if (parentCollection.contentMimeTypes().contains(Collection::virtualMimeType())) {
+ collection.setVirtual(true);
+ collection.setContentMimeTypes(collection.contentMimeTypes()
+ << Collection::virtualMimeType());
+ }
+
CollectionCreateJob *job = new CollectionCreateJob(collection);
q->connect(job, SIGNAL(result(KJob*)), q, SLOT(collectionCreationResult(KJob*)));
}
commit dcb8feeaee06171947b03ee2db8a5825731742cd
Author: Dan Vrátil <dvratil at redhat.com>
Date: Thu Jun 19 19:59:52 2014 +0200
Implement client-side support for Virtual References in ItemFetchJob
When fetchVirtualReferences is enabled in ItemFetchScope, the resulting Items
will have their virtualReferences() populated by list of collections that they
are linked to.
Conflicts:
CMakeLists.txt
diff --git a/akonadi/item.cpp b/akonadi/item.cpp
index b2e7815..a1d024e 100644
--- a/akonadi/item.cpp
+++ b/akonadi/item.cpp
@@ -342,6 +342,16 @@ QString Item::gid() const
return d_func()->mGid;
}
+void Item::setVirtualReferences(const Collection::List &collections)
+{
+ d_func()->mVirtualReferences = collections;
+}
+
+Collection::List Item::virtualReferences() const
+{
+ return d_func()->mVirtualReferences;
+}
+
bool Item::hasPayload() const
{
return d_func()->hasMetaTypeId(-1);
diff --git a/akonadi/item.h b/akonadi/item.h
index 9aace94..73c8225 100644
--- a/akonadi/item.h
+++ b/akonadi/item.h
@@ -26,6 +26,7 @@
#include <akonadi/entity.h>
#include <akonadi/exception.h>
#include <akonadi/tag.h>
+#include <akonadi/collection.h>
#include "itempayloadinternals_p.h"
#include <QtCore/QByteArray>
@@ -323,6 +324,28 @@ public:
QString gid() const;
/**
+ * Sets the virtual @p collections that this item is linked into.
+ *
+ * @note Note that changing this value makes no effect on what collections
+ * this item is linked to. To link or unlink an item to/from a virtual
+ * collection, use LinkJob and UnlinkJob.
+ *
+ * @since 4.14
+ */
+ void setVirtualReferences(const Collection::List &collections);
+
+ /**
+ * Lists virtual collections that this item is linked to.
+ *
+ * @note This value is populated only when this item was retrieved by
+ * ItemFetchJob with fetchVirtualReferences set to true in ItemFetchScope,
+ * otherwise this list is always empty.
+ *
+ * @since 4.14
+ */
+ Collection::List virtualReferences() const;
+
+ /**
* Returns a list of metatype-ids, describing the different
* variants of payload that are currently contained in this item.
*
diff --git a/akonadi/item_p.h b/akonadi/item_p.h
index bb7ee83..d05ca44 100644
--- a/akonadi/item_p.h
+++ b/akonadi/item_p.h
@@ -415,6 +415,7 @@ public:
Item::Flags mFlags;
Tag::List mTags;
Entity::Id mCollectionId;
+ Collection::List mVirtualReferences;
qint64 mSize;
QDateTime mModificationTime;
QString mMimeType;
diff --git a/akonadi/itemfetchscope.cpp b/akonadi/itemfetchscope.cpp
index 6eeae0a..b5677df 100644
--- a/akonadi/itemfetchscope.cpp
+++ b/akonadi/itemfetchscope.cpp
@@ -98,7 +98,7 @@ void ItemFetchScope::fetchAllAttributes(bool fetch)
bool ItemFetchScope::isEmpty() const
{
- return d->mPayloadParts.isEmpty() && d->mAttributes.isEmpty() && !d->mFullPayload && !d->mAllAttributes && !d->mFetchTags;
+ return d->mPayloadParts.isEmpty() && d->mAttributes.isEmpty() && !d->mFullPayload && !d->mAllAttributes && !d->mFetchTags && !d->mFetchVRefs;
}
bool ItemFetchScope::cacheOnly() const
@@ -193,3 +193,13 @@ bool ItemFetchScope::fetchTags() const
{
return d->mFetchTags;
}
+
+void ItemFetchScope::setFetchVirtualReferences(bool fetchVRefs)
+{
+ d->mFetchVRefs = fetchVRefs;
+}
+
+bool ItemFetchScope::fetchVirtualReferences() const
+{
+ return d->mFetchVRefs;
+}
diff --git a/akonadi/itemfetchscope.h b/akonadi/itemfetchscope.h
index 109dfad..7200ad9 100644
--- a/akonadi/itemfetchscope.h
+++ b/akonadi/itemfetchscope.h
@@ -345,6 +345,22 @@ public:
*/
bool fetchTags() const;
+ /**
+ * Returns whether to fetch list of virtual collections the item is linked to
+ *
+ * @param fetchVRefs whether or not to fetch virtualc references
+ * @since 4.14
+ */
+ void setFetchVirtualReferences(bool fetchVRefs);
+
+ /**
+ * Returns whether virtual references should be retrieved.
+ *
+ * @see setFetchVirtualReferences()
+ * @since 4.14
+ */
+ bool fetchVirtualReferences() const;
+
private:
//@cond PRIVATE
QSharedDataPointer<ItemFetchScopePrivate> d;
diff --git a/akonadi/itemfetchscope_p.h b/akonadi/itemfetchscope_p.h
index 5a34939..d3668d4 100644
--- a/akonadi/itemfetchscope_p.h
+++ b/akonadi/itemfetchscope_p.h
@@ -44,6 +44,7 @@ public:
, mFetchRid(true)
, mFetchGid(false)
, mFetchTags(false)
+ , mFetchVRefs(false)
{
}
@@ -63,6 +64,7 @@ public:
mFetchRid = other.mFetchRid;
mFetchGid = other.mFetchGid;
mFetchTags = other.mFetchTags;
+ mFetchVRefs = other.mFetchVRefs;
}
public:
@@ -79,6 +81,7 @@ public:
bool mFetchRid;
bool mFetchGid;
bool mFetchTags;
+ bool mFetchVRefs;
};
}
diff --git a/akonadi/protocolhelper.cpp b/akonadi/protocolhelper.cpp
index b7980ee..53bb5a9 100644
--- a/akonadi/protocolhelper.cpp
+++ b/akonadi/protocolhelper.cpp
@@ -447,6 +447,8 @@ QByteArray ProtocolHelper::itemFetchScopeToByteArray( const ItemFetchScope &fetc
command += " GID";
if ( fetchScope.fetchTags() )
command += " TAGS";
+ if ( fetchScope.fetchVirtualReferences() )
+ command += " VIRTREF";
if ( fetchScope.fetchModificationTime() )
command += " DATETIME";
foreach ( const QByteArray &part, fetchScope.payloadParts() )
@@ -546,6 +548,18 @@ void ProtocolHelper::parseItemFetchResult( const QList<QByteArray> &lineTokens,
}
}
item.setTags( tags );
+ } else if ( key == "VIRTREF" ) {
+ ImapSet set;
+ ImapParser::parseSequenceSet( lineTokens[i + 1], set );
+ Collection::List collections;
+ Q_FOREACH ( const ImapInterval &interval, set.intervals() ) {
+ Q_ASSERT( interval.hasDefinedBegin() );
+ Q_ASSERT( interval.hasDefinedEnd() );
+ for ( qint64 i = interval.begin(); i <= interval.end(); i++ ) {
+ collections << Collection(i);
+ }
+ }
+ item.setVirtualReferences(collections);
} else if ( key == "CACHEDPARTS" ) {
QSet<QByteArray> partsSet;
QList<QByteArray> parts;
diff --git a/akonadi/session_p.h b/akonadi/session_p.h
index 40e3fe6..93bfe70 100644
--- a/akonadi/session_p.h
+++ b/akonadi/session_p.h
@@ -116,7 +116,7 @@ public:
static int minimumProtocolVersion()
{
- return 39;
+ return 44;
}
/**
commit 83339d6ce0ceaebc535f8e52bcdc3b36729d77f1
Author: Dan Vrátil <dvratil at redhat.com>
Date: Thu Jun 19 16:52:09 2014 +0200
CollectionPathResolver: add API to specify collection to resolve relatively to
Top-level collections don't have to have a unique name (for instance one can have
a calendar and a mail account both called 'Work'), but CPR is too stupid for that
and will try to resolve the path from the first matching collection it finds,
which can lead to false or wrong results.
The new constructor allows specifying a collection that the CPR should resolve the
path relatively to. This can be used by resources for example, which can set their
root collection (which they usually now) and then resolve relatively to it.
diff --git a/akonadi/collectionpathresolver.cpp b/akonadi/collectionpathresolver.cpp
index 8cd5f90..f15147c 100644
--- a/akonadi/collectionpathresolver.cpp
+++ b/akonadi/collectionpathresolver.cpp
@@ -39,6 +39,23 @@ public:
{
}
+ void init(const QString &path, const Collection &rootCollection)
+ {
+ Q_Q(CollectionPathResolver);
+
+ mPathToId = true;
+ mPath = path;
+ if (mPath.startsWith(q->pathDelimiter())) {
+ mPath = mPath.right(mPath.length() - q->pathDelimiter().length());
+ }
+ if (mPath.endsWith(q->pathDelimiter())) {
+ mPath = mPath.left(mPath.length() - q->pathDelimiter().length());
+ }
+
+ mPathParts = splitPath(mPath);
+ mCurrentNode = rootCollection;
+ }
+
void jobResult(KJob *);
QStringList splitPath(const QString &path)
@@ -136,18 +153,14 @@ CollectionPathResolver::CollectionPathResolver(const QString &path, QObject *par
: Job(new CollectionPathResolverPrivate(this), parent)
{
Q_D(CollectionPathResolver);
+ d->init(path, Collection::root());
+}
- d->mPathToId = true;
- d->mPath = path;
- if (d->mPath.startsWith(pathDelimiter())) {
- d->mPath = d->mPath.right(d->mPath.length() - pathDelimiter().length());
- }
- if (d->mPath.endsWith(pathDelimiter())) {
- d->mPath = d->mPath.left(d->mPath.length() - pathDelimiter().length());
- }
-
- d->mPathParts = d->splitPath(d->mPath);
- d->mCurrentNode = Collection::root();
+CollectionPathResolver::CollectionPathResolver(const QString &path, const Collection &parentCollection, QObject *parent)
+ : Job(new CollectionPathResolverPrivate(this), parent)
+{
+ Q_D(CollectionPathResolver);
+ d->init(path, parentCollection);
}
CollectionPathResolver::CollectionPathResolver(const Collection &collection, QObject *parent)
diff --git a/akonadi/collectionpathresolver_p.h b/akonadi/collectionpathresolver_p.h
index 03c7060..81af58d 100644
--- a/akonadi/collectionpathresolver_p.h
+++ b/akonadi/collectionpathresolver_p.h
@@ -47,12 +47,28 @@ public:
/**
* Creates a new collection path resolver to convert a path into a id.
*
+ * Equivalent to calling CollectionPathResolver(path, Collection:root(), parent)
+ *
* @param path The collection path.
* @param parent The parent object.
*/
explicit CollectionPathResolver(const QString &path, QObject *parent = 0);
/**
+ * Create a new collection path resolver to convert a path into an id.
+ *
+ * The @p path is resolved relatively to @p parentCollection. This can be
+ * useful for resource, which now the root collection.
+ *
+ * @param path The collection path.
+ * @param parentCollection Collection relatively to which the path will be resolved.
+ * @param parent The parent object.
+ *
+ * @since 4.14
+ */
+ explicit CollectionPathResolver(const QString &path, const Collection &parentCollection, QObject *parent = 0);
+
+ /**
* Creates a new collection path resolver to determine the path of
* the given collection.
*
commit b3c2552e5b290f3af693ed471449ce286add01b5
Author: Dan Vrátil <dvratil at redhat.com>
Date: Thu Jun 19 15:58:52 2014 +0200
CollectionPathResolver: always return invalid collection ID if the job fails
diff --git a/akonadi/collectionpathresolver.cpp b/akonadi/collectionpathresolver.cpp
index 0c821c7..8cd5f90 100644
--- a/akonadi/collectionpathresolver.cpp
+++ b/akonadi/collectionpathresolver.cpp
@@ -35,6 +35,7 @@ class Akonadi::CollectionPathResolverPrivate : public JobPrivate
public:
CollectionPathResolverPrivate(CollectionPathResolver *parent)
: JobPrivate(parent)
+ , mColId(-1)
{
}
@@ -87,6 +88,7 @@ void CollectionPathResolverPrivate::jobResult(KJob *job)
CollectionFetchJob *nextJob = 0;
const Collection::List cols = list->collections();
if (cols.isEmpty()) {
+ mColId = -1;
q->setError(CollectionPathResolver::Unknown);
q->setErrorText(i18n("No such collection."));
q->emitResult();
@@ -104,6 +106,8 @@ void CollectionPathResolverPrivate::jobResult(KJob *job)
}
}
if (!found) {
+ kWarning() << "No such collection" << currentPart << "with parent" << mCurrentNode.id();
+ mColId = -1;
q->setError(CollectionPathResolver::Unknown);
q->setErrorText(i18n("No such collection."));
q->emitResult();
commit 8d8ac4b73cf46497ea261b07adca9c0f120bccce
Author: Christian Mollekopf <chrigi_1 at fastmail.fm>
Date: Thu Jun 19 10:58:55 2014 +0200
ETMPopulationTest: Fix after recent change.
We cannot use isCollectionTreeFetched anymore for that.
diff --git a/akonadi/tests/etmpopulationtest.cpp b/akonadi/tests/etmpopulationtest.cpp
index c637ca7..3de03c0 100644
--- a/akonadi/tests/etmpopulationtest.cpp
+++ b/akonadi/tests/etmpopulationtest.cpp
@@ -241,10 +241,9 @@ void EtmPopulationTest::testAddMonitoringCollections()
model->setCollectionMonitored(col3, true);
- QTRY_VERIFY(model->isCollectionTreeFetched());
QVERIFY(getIndex("col1", model).isValid());
QVERIFY(getIndex("col2", model).isValid());
- QVERIFY(getIndex("col3", model).isValid());
+ QTRY_VERIFY(getIndex("col3", model).isValid());
QVERIFY(getIndex("col4", model).isValid());
QVERIFY(getIndex(mainCollectionName, model).isValid());
commit 48e51620c489507f83e180a04ebcae0f037b12d7
Author: Christian Mollekopf <chrigi_1 at fastmail.fm>
Date: Thu Jun 19 10:02:08 2014 +0200
ETM: Never reset the collectionTreeFetched state.
This state is only there to evaluate if the initial collection tree
fetch is complete (it's mostly used to restore the view state).
Later changes to the monitored collections should not reset that state.
diff --git a/akonadi/entitytreemodel_p.cpp b/akonadi/entitytreemodel_p.cpp
index 648b38e..7880950 100644
--- a/akonadi/entitytreemodel_p.cpp
+++ b/akonadi/entitytreemodel_p.cpp
@@ -604,8 +604,6 @@ void EntityTreeModelPrivate::monitoredCollectionsChanged(const Akonadi::Collecti
Q_UNUSED(collection)
Q_UNUSED(monitored)
if (monitored) {
- m_collectionTreeFetched = false;
-
const CollectionFetchJob::Type fetchType = getFetchType(m_collectionFetchStrategy);
fetchCollections(collection, CollectionFetchJob::Base);
fetchCollections(collection, fetchType);
commit eeee043fd1ac834f11ad30129fcfbf7162c13813
Author: l10n daemon script <scripty at kde.org>
Date: Thu Jun 19 07:17:17 2014 +0000
SVN_SILENT made messages (.desktop file)
diff --git a/akonadi/contact/editor/im/protocols/googletalkprotocol.desktop b/akonadi/contact/editor/im/protocols/googletalkprotocol.desktop
index 1015ff8..3e81a6d 100644
--- a/akonadi/contact/editor/im/protocols/googletalkprotocol.desktop
+++ b/akonadi/contact/editor/im/protocols/googletalkprotocol.desktop
@@ -11,6 +11,7 @@ Comment[cs]=Google Talk
Comment[da]=Google Talk
Comment[de]=Google Talk
Comment[el]=Google Talk
+Comment[en_GB]=Google Talk
Comment[es]=Google Talk
Comment[et]=Google Talk
Comment[fi]=Google Talk
@@ -50,6 +51,7 @@ Name[cs]=Google Talk
Name[da]=Google Talk
Name[de]=Google Talk
Name[el]=Google Talk
+Name[en_GB]=Google Talk
Name[es]=Google Talk
Name[et]=Google Talk
Name[fi]=Google Talk
diff --git a/akonadi/contact/kcm/akonadicontact_actions.desktop b/akonadi/contact/kcm/akonadicontact_actions.desktop
index 891444d..9e31c5b 100644
--- a/akonadi/contact/kcm/akonadicontact_actions.desktop
+++ b/akonadi/contact/kcm/akonadicontact_actions.desktop
@@ -117,6 +117,7 @@ X-KDE-Keywords[ca at valencia]=kaddressbook, configuració, arranjament, contacte,
X-KDE-Keywords[da]=kaddressbook, indstil, indstillinger, kontakt, handlinger
X-KDE-Keywords[de]=kaddressbook, configure, settings, contact, actions
X-KDE-Keywords[el]=kaddressbook, διαμÏÏÏÏÏη, ÏÏ
θμίÏειÏ, εÏαÏή, ενÎÏγειεÏ
+X-KDE-Keywords[en_GB]=kaddressbook, configure, settings, contact, actions
X-KDE-Keywords[es]=kaddressbook, configurar, preferencias, contacto, acciones
X-KDE-Keywords[et]=kde aadressiraamat, seadistamine, seadistused, kontakt, toimingud
X-KDE-Keywords[fi]=kaddressbook, asetukset, yhteystieto, toiminnot
diff --git a/akonadi/socialutils/serializer/akonadi_serializer_socialfeeditem.desktop b/akonadi/socialutils/serializer/akonadi_serializer_socialfeeditem.desktop
index e27bc82..dfce256 100644
--- a/akonadi/socialutils/serializer/akonadi_serializer_socialfeeditem.desktop
+++ b/akonadi/socialutils/serializer/akonadi_serializer_socialfeeditem.desktop
@@ -6,6 +6,7 @@ Name[ca at valencia]=Serialitzador «SocialFeedItem»
Name[da]=SocialFeedItem-serializer
Name[de]=SocialFeedItem-Serialisierung
Name[el]=Î ÏÏγÏαμμα γÏÎ±Î¼Î¼Î¹ÎºÎ®Ï Î´Î¹Î¬ÏÎ±Î¾Î·Ï SocialFeedItem
+Name[en_GB]=SocialFeedItem Serializer
Name[es]=Serializador SocialFeedItem
Name[et]=SocialFeedItemi jadasti
Name[fi]=SocialFeedItem-serialisoija
@@ -43,6 +44,7 @@ Comment[ca at valencia]=Un connector de serialització de l'Akonadi per a «SocialF
Comment[da]=Et Akonadi serializer-plugin til SocialFeedItem
Comment[de]=Akonadi-Modul zur Serialisierung für SocialFeedItem
Comment[el]=Îνα ÏÏÏÏθεÏο γÏÎ±Î¼Î¼Î¹ÎºÎ®Ï Î´Î¹Î¬ÏÎ±Î¾Î·Ï ÏοÏ
Akonadi για Ïο SocialFeedItem
+Comment[en_GB]=An Akonadi serializer plugin for SocialFeedItem
Comment[es]=Un complemento de serializador Akonadi para SocialFeedItem
Comment[et]=Akonadi SocialFeedItemi jadastamisplugin
Comment[fi]=Akonadi-serialisoijaliitännäinen SocialFeedItemille
diff --git a/akonadi/tests/testresource/knutresource.desktop b/akonadi/tests/testresource/knutresource.desktop
index 07e74ed..c6277a6 100644
--- a/akonadi/tests/testresource/knutresource.desktop
+++ b/akonadi/tests/testresource/knutresource.desktop
@@ -7,6 +7,7 @@ Name[cs]=Knut
Name[da]=Knut
Name[de]=Knut
Name[el]=Knut
+Name[en_GB]=Knut
Name[es]=Knut
Name[fi]=Knut
Name[fr]=Knut
@@ -42,6 +43,7 @@ Comment[cs]=Agent pro ladicà úÄely
Comment[da]=En agent til fejlretningsformål
Comment[de]=Agent für die Fehlersuche
Comment[el]=Î ÏάκÏοÏÎ±Ï Î³Î¹Î± αÏοÏÏαλμάÏÏÏη
+Comment[en_GB]=An agent for debugging purpose
Comment[es]=Un agente para el propósito de depuración
Comment[fi]=Vianjäljitykseen tarkoitettu agentti
Comment[fr]=Un agent à des fins de débogage
diff --git a/akonadi/tests/testsearchplugin/akonaditestsearchplugin.desktop b/akonadi/tests/testsearchplugin/akonaditestsearchplugin.desktop
index bfb67a5..c9085ce 100644
--- a/akonadi/tests/testsearchplugin/akonaditestsearchplugin.desktop
+++ b/akonadi/tests/testsearchplugin/akonaditestsearchplugin.desktop
@@ -7,6 +7,7 @@ Name[cs]=Modul pro testovánà hledánà v Akonadi
Name[da]=Testsøge-plugin til Akonadi
Name[de]=Akonadi-Testsuchmodul
Name[el]=Î ÏÏÏθεÏο δοκιμαÏÏÎ¹ÎºÎ®Ï Î±Î½Î±Î¶Î®ÏηÏÎ·Ï Akonadi
+Name[en_GB]=Akonadi Test Search Plugin
Name[es]=Complemento de prueba de búsqueda de Akonadi
Name[fi]=Akonadin hakuliitännäinen testaustarkoituksiin
Name[fr]=Module externe de test pour les recherches Akonadi
diff --git a/kabc/plugins/dir/dir.desktop b/kabc/plugins/dir/dir.desktop
index 24338c2..6338a2e 100644
--- a/kabc/plugins/dir/dir.desktop
+++ b/kabc/plugins/dir/dir.desktop
@@ -59,6 +59,7 @@ Comment[cs]=Poskytuje pÅÃstup ke kontaktům, každém uloženém v jednom soub
Comment[da]=Giver adgang til kontakter, hver lagret i en enkelt fil, i en given mappe. Understøtter standard vCard-fil og andre formater afhængigt af tilgængeligheden af plugins.
Comment[de]=Ermöglicht Zugriff auf Kontakte, die in einzelnen Dateien in einem vorgegebenen Ordner gespeichert sind. Unterstützt Standard-vCard-Dateien und andere Formate abhängig von den verfügbaren Modulen.
Comment[el]=Î ÏοÏÏÎÏει ÏÏÏÏβαÏη Ïε εÏαÏÎÏ, αÏοθηκεÏ
μÎÎ½ÎµÏ Ïε ξεÏÏÏιÏÏά αÏÏεία, Ïε Îνα δοÏμÎνο Ïάκελο. Î¥ÏοÏÏηÏίζει ÏÏ
Ïικά αÏÏεία vCard και Î¬Î»Î»ÎµÏ Î¼Î¿ÏÏÎÏ Î±ÏÏείÏν ανάλογα με Ïη διαθεÏιμÏÏηÏα ÏÏν ÏÏÏÏθεÏÏν.
+Comment[en_GB]=Provides access to contacts, each stored in a single file, in a given folder. Supports standard vCard file and other formats depending on availability of plugins.
Comment[es]=Proporciona acceso a los contactos, cada uno almacenado en un archivo diferente, dentro de una carpeta determinada. Admite archivos vCard estándar y otros formatos dependiendo de la disponibilidad de los complementos.
Comment[fi]=Tarjoaa pääsyn annetun kansion yksittäisiin tiedostoihin tallennettuihin yhteystietoihin. Tukee vakiomuotoista vCard-tiedostoa sekä muita tiedostomuotoja liitännäisistä riippuen.
Comment[fr]=Fournit un accès aux contacts dont chacun est enregistré dans un fichier, dans le dossier indiqué. Le format « vCard » et d'autres formats sont pris en charge selon les modules externes disponibles.
diff --git a/kabc/plugins/file/file.desktop b/kabc/plugins/file/file.desktop
index 397ca0b..553f017 100644
--- a/kabc/plugins/file/file.desktop
+++ b/kabc/plugins/file/file.desktop
@@ -64,6 +64,7 @@ Comment[cs]=Poskytuje pÅÃstup ke kontaktům uloženým v jednom lokálnÃm sou
Comment[da]=Giver adgang til kontakter, hver lagret i en enkelt fil. Understøtter standard vCard-fil og andre formater afhængigt af tilgængelige af plugins.
Comment[de]=Ermöglicht Zugriff auf Kontakte, die in einer einzigen Datei lokal gespeichert sind. Unterstützt Standard-vCard-Dateien und andere Formate abhängig von den verfügbaren Modulen.
Comment[el]=Î ÏοÏÏÎÏει ÏÏÏÏβαÏη Ïε εÏαÏÎÏ, αÏοθηκεÏ
μÎÎ½ÎµÏ Ïε Îνα ÏοÏÎ¹ÎºÏ Î±ÏÏείο. Î¥ÏοÏÏηÏίζει ÏÏ
Ïικά αÏÏεία vCard και Î¬Î»Î»ÎµÏ Î¼Î¿ÏÏÎÏ Î±ÏÏείÏν ανάλογα με Ïη διαθεÏιμÏÏηÏα ÏÏν ÏÏÏÏθεÏÏν.
+Comment[en_GB]=Provides access to contacts stored in a single local file. Supports standard vCard files and other formats depending on available plugins.
Comment[es]=Proporciona acceso a los contactos almacenados en un único archivo local. Admite archivos vCard estándar y otros formatos dependiendo de la disponibilidad de los complementos.
Comment[fi]=Tarjoaa pääsyn yksittäiseen paikalliseen tiedostoon tallennettuihin yhteystietoihin. Tukee vakiomuotoisia vCard-tiedostoja sekä muita tiedostomuotoja liitännäisistä riippuen.
Comment[fr]=Fournit un accès aux contacts enregistrés dans un unique fichier local. Le format « vCard » et d'autres formats sont pris en charge selon les modules externes disponibles.
diff --git a/kabc/plugins/net/net.desktop b/kabc/plugins/net/net.desktop
index 43c2d3e..54a3df3 100644
--- a/kabc/plugins/net/net.desktop
+++ b/kabc/plugins/net/net.desktop
@@ -64,6 +64,7 @@ Comment[cs]=Poskytuje pÅÃstup ke vzdáleným kontaktům pomocà sÃÅ¥ového fr
Comment[da]=Giver adgang til kontakter i eksterne filer med brug af KDE's netværks-framework KIO. Understøtter standard vCard-filer og andre formater afhængigt af tilgængelige plugins.
Comment[de]=Ermöglicht Zugriff auf Kontakte in entfernten Dateien durch das KIO-Netzwerksystem von KDE. Unterstützt Standard-vCard-Dateien und andere Formate abhängig von den verfügbaren Modulen.
Comment[el]=Î ÏοÏÏÎÏει ÏÏÏÏβαÏη Ïε εÏαÏÎÏ Ïε αÏομακÏÏ
ÏμÎνα αÏÏεία με Ïη ÏÏήÏη ÏοÏ
ÏÏ
ÏÏήμαÏÎ¿Ï KIO ÏοÏ
KDE. Î¥ÏοÏÏηÏίζει ÏÏ
Ïικά αÏÏεία vCard και Î¬Î»Î»ÎµÏ Î¼Î¿ÏÏÎÏ Î±ÏÏείÏν ανάλογα με Ïη διαθεÏιμÏÏηÏα ÏÏν ÏÏÏÏθεÏÏν.
+Comment[en_GB]=Provides access to contacts in remote files using KDE's network framework KIO. Supports standard vCard files and other formats depending on available plugins.
Comment[es]=Proporciona acceso a los contactos en un archivo remoto utilizando la infraestructura de red KIO de KDE. Admite archivos vCard estándar y otros formatos dependiendo en la disponibilidad de los complementos.
Comment[fi]=Tarjoaa pääsyn etätiedostoissa oleviin yhteystietoihin KDE:n verkkokehyksen KIOn välityksellä. Tukee vakiomuotoisia vCard-tiedostoja sekä muita tiedostomuotoja liitännäisistä riippuen.
Comment[fr]=Fournit un accès aux contacts enregistrés dans des fichiers distants en utilisant le mécanisme réseau KIO de KDE. Le format « vCard » et d'autres formats sont pris en charge selon les modules externes disponibles.
diff --git a/kresources/kresources.desktop b/kresources/kresources.desktop
index 9c48f8e..5ebe021 100644
--- a/kresources/kresources.desktop
+++ b/kresources/kresources.desktop
@@ -124,6 +124,7 @@ X-KDE-Keywords[ca at valencia]=recursos,recurs de konnector,recurs de contactes,rec
X-KDE-Keywords[da]=ressourcer,konnector-ressource,kontakt-ressource,kalender-ressource,note-ressource,alarm-ressource,imap
X-KDE-Keywords[de]=resources,konnector resource,contact resource,calendar resource,notes resource,alarm resource,imap
X-KDE-Keywords[el]=ÏÏÏοι,ÏÏÏÎ¿Ï konnector,εÏαÏή,ÏÏÏοÏ,ÏÏÏÎ¿Ï Î·Î¼ÎµÏολογίοÏ
,ÏÏÏÎ¿Ï ÏημειÏÏεÏν,ÏÏÏÎ¿Ï ÎµÎ¹Î´Î¿ÏοιήÏεÏν,imap
+X-KDE-Keywords[en_GB]=resources,connector resource,contact resource,calendar resource,notes resource,alarm resource,imap
X-KDE-Keywords[es]=recursos,recurso de conector,recurso de contacto,recurso de calendario,recurso de notas,recurso de alarma,imap
X-KDE-Keywords[et]=ressursid,konnektor,ressurss,kontaktiressurss,kalendriressurss,märkmeressurss,häireressurss,imap
X-KDE-Keywords[fi]=resurssit,konnector-resurssi,yhteystietoresurssi,kalenteriresurssi,muistiinpanoresurssi,hälytysresurssi,imap
commit 2959973a8f85dadc4ff66a93149dc6df138c8a32
Author: Christian Mollekopf <chrigi_1 at fastmail.fm>
Date: Wed Jun 18 09:55:41 2014 +0200
Collection: setShouldList for symmetry with shouldList.
diff --git a/akonadi/collection.cpp b/akonadi/collection.cpp
index e6e4b39..153e4bc 100644
--- a/akonadi/collection.cpp
+++ b/akonadi/collection.cpp
@@ -328,6 +328,15 @@ bool Collection::shouldList(Collection::ListPurpose purpose) const
return (localListPreference(purpose) == ListEnabled);
}
+void Collection::setShouldList(ListPurpose purpose, bool list)
+{
+ if (localListPreference(purpose) == ListDefault) {
+ setEnabled(list);
+ } else {
+ setLocalListPreference(purpose, list ? ListEnabled : ListDisabled);
+ }
+}
+
void Collection::setReferenced(bool referenced)
{
Q_D(Collection);
diff --git a/akonadi/collection.h b/akonadi/collection.h
index 2f8f396..0c6d6c8 100644
--- a/akonadi/collection.h
+++ b/akonadi/collection.h
@@ -305,7 +305,7 @@ public:
* E.g. an imap resource may synchronize this with the subscription state.
*
* @since 4.14
- * @see setLocalListPreference
+ * @see setLocalListPreference, setShouldList
*/
void setEnabled(bool enabled);
@@ -368,6 +368,18 @@ public:
bool shouldList(ListPurpose purpose) const;
/**
+ * Sets wether the collection should be listed or not for the specified purpose.
+ * Takes enabled state and local preference into account.
+ *
+ * Use this instead of sestEnabled and setLocalListPreference to automatically set
+ * the right setting.
+ *
+ * @since 4.14
+ * @see setLocalListPreference, setEnabled
+ */
+ void setShouldList(ListPurpose purpose, bool shouldList);
+
+ /**
* Sets a collection to be referenced.
*
* A referenced collection is temporarily shown and synchronized even when disabled.
commit 698db9600f7940189667b36621d21cce20e64046
Author: Christian Mollekopf <chrigi_1 at fastmail.fm>
Date: Thu Jun 12 00:51:14 2014 +0200
EntityTreeModelTest: Cleanup.
The full test passes now.
diff --git a/akonadi/tests/entitytreemodeltest.cpp b/akonadi/tests/entitytreemodeltest.cpp
index 19145ae..fc6e3be 100644
--- a/akonadi/tests/entitytreemodeltest.cpp
+++ b/akonadi/tests/entitytreemodeltest.cpp
@@ -17,7 +17,7 @@
02110-1301, USA.
*/
-#include <qtest_kde.h>
+#include <qtest_akonadi.h>
#include <QTimer>
@@ -66,8 +66,12 @@ static const QString serverContent1 =
/**
* This test verifies that the ETM reacts as expected to signals from the monitor.
- *
+ *
* The tested ETM is only talking to fake components so the reaction of the ETM to each signal can be tested.
+ *
+ * WARNING: This test does no handle jobs issued by the model. It simply shortcuts (calls emitResult) them, and the connected
+ * slots are never executed (because the eventloop is not run after emitResult is called).
+ * This test therefore only tests the reaction of the model to signals of the monitor and not the overall behaviour.
*/
class EntityTreeModelTest : public QObject
{
@@ -212,18 +216,25 @@ void EntityTreeModelTest::testInitialFetch()
expectedSignals << getExpectedSignal( RowsInserted, 0, 1, "Col 6" );
expectedSignals << getExpectedSignal( RowsAboutToBeInserted, 0, 3, "Col 7" );
expectedSignals << getExpectedSignal( RowsInserted, 0, 3, "Col 7" );
+ expectedSignals << getExpectedSignal( DataChanged, 0, 0, QVariantList() << "Col 1" );
+ expectedSignals << getExpectedSignal( DataChanged, 3, 3, QVariantList() << "Col 3" );
+ expectedSignals << getExpectedSignal( DataChanged, 0, 0, QVariantList() << "Col 4" );
+ expectedSignals << getExpectedSignal( DataChanged, 0, 0, QVariantList() << "Col 5" );
+ expectedSignals << getExpectedSignal( DataChanged, 2, 2, QVariantList() << "Col 2" );
+ expectedSignals << getExpectedSignal( DataChanged, 1, 1, QVariantList() << "Col 6" );
+ expectedSignals << getExpectedSignal( DataChanged, 0, 0, QVariantList() << "Col 7" );
m_modelSpy->setExpectedSignals( expectedSignals );
// Give the model a chance to run the event loop to process the signals.
- QTest::qWait(0);
+ QTest::qWait(10);
// We get all the signals we expected.
- QVERIFY(m_modelSpy->expectedSignals().isEmpty());
+ QTRY_VERIFY(m_modelSpy->expectedSignals().isEmpty());
+ QTest::qWait(10);
// We didn't get signals we didn't expect.
- // TODO: Currently we get data changed signals about fetch completed etc which are not handled by the test currently.
-// QVERIFY( m_modelSpy->isEmpty() );
+ QVERIFY( m_modelSpy->isEmpty() );
}
void EntityTreeModelTest::testCollectionMove_data()
@@ -304,7 +315,6 @@ void EntityTreeModelTest::testCollectionAdded()
QPair<FakeServerData*, Akonadi::EntityTreeModel*> testDrivers = populateModel( serverContent );
FakeServerData *serverData = testDrivers.first;
- Akonadi::EntityTreeModel *model = testDrivers.second;
FakeCollectionAddedCommand *addCommand = new FakeCollectionAddedCommand( addedCollection, parentCollection, serverData );
commit 9f82df5c0db0d7dd53f7158e9c4069e7503b4f4c
Author: Christian Mollekopf <chrigi_1 at fastmail.fm>
Date: Thu Jun 12 00:40:42 2014 +0200
ETM: Removed unused code
diff --git a/akonadi/entitytreemodel_p.cpp b/akonadi/entitytreemodel_p.cpp
index 660cc2a..648b38e 100644
--- a/akonadi/entitytreemodel_p.cpp
+++ b/akonadi/entitytreemodel_p.cpp
@@ -1386,6 +1386,7 @@ void EntityTreeModelPrivate::updateJobDone(KJob *job)
kWarning() << "Job error:" << job->errorString();
} else {
+ //FIXME: This seems pretty pointless since we'll get an update through the monitor anyways
ItemModifyJob *modifyJob = qobject_cast<ItemModifyJob *>(job);
if (!modifyJob) {
return;
@@ -1401,11 +1402,6 @@ void EntityTreeModelPrivate::updateJobDone(KJob *job)
foreach (const QModelIndex &index, list) {
dataChanged(index, index);
}
-
- // TODO: Is this trying to do the job of collectionstatisticschanged?
-// CollectionStatisticsJob *csjob = static_cast<CollectionStatisticsJob*>( job );
-// Collection result = csjob->collection();
-// collectionStatisticsChanged( result.id(), csjob->statistics() );
}
}
commit e2fe3ead65ae3f4ec9b11abaaa575abba95f6db7
Author: Christian Mollekopf <chrigi_1 at fastmail.fm>
Date: Thu Jun 12 00:40:05 2014 +0200
ETM: The corresponding collection could have been removed while a fetch job is in progress.
diff --git a/akonadi/entitytreemodel_p.cpp b/akonadi/entitytreemodel_p.cpp
index 9ff0f27..660cc2a 100644
--- a/akonadi/entitytreemodel_p.cpp
+++ b/akonadi/entitytreemodel_p.cpp
@@ -508,6 +508,11 @@ void EntityTreeModelPrivate::itemsFetched(const Collection::Id collectionId, con
{
Q_Q(EntityTreeModel);
+ if (!m_collections.contains(collectionId)) {
+ kWarning() << "Collection has been removed while fetching items";
+ return;
+ }
+
Item::List itemsToInsert;
const Collection collection = m_collections.value(collectionId);
@@ -1319,6 +1324,10 @@ void EntityTreeModelPrivate::itemFetchJobDone(KJob *job)
kWarning() << "Job error: " << job->errorString() << "for collection:" << collectionId << endl;
return;
}
+ if (!m_collections.contains(collectionId)) {
+ kWarning() << "Collection has been removed while fetching items";
+ return;
+ }
ItemFetchJob *iJob = static_cast<ItemFetchJob *>(job);
#ifdef DBG_TRACK_JOB_TIMES
commit 2edaec5d7d74f773c1d9034e2427eafbd9a166be
Author: Christian Mollekopf <chrigi_1 at fastmail.fm>
Date: Wed Jun 11 17:53:10 2014 +0200
ETMPopulationTest: Fixed waiting for signals with isFullyPopulated.
diff --git a/akonadi/tests/etmpopulationtest.cpp b/akonadi/tests/etmpopulationtest.cpp
index a688fc9..c637ca7 100644
--- a/akonadi/tests/etmpopulationtest.cpp
+++ b/akonadi/tests/etmpopulationtest.cpp
@@ -314,13 +314,11 @@ void EtmPopulationTest::testReferenceCollection()
model->setCollectionFetchStrategy(EntityTreeModel::FetchCollectionsRecursive);
model->setListFilter(Akonadi::CollectionFetchScope::Display);
- QTRY_VERIFY(model->isCollectionTreeFetched());
+ QTRY_VERIFY(model->isFullyPopulated());
QVERIFY(!getIndex("col5", model).isValid());
//Check that this random other collection is actually available
QVERIFY(getIndex("col1", model).isValid());
- QTest::qWait(0);
-
ModelSignalSpy spy(*model);
//Reference the collection and it should appear in the model
@@ -330,12 +328,14 @@ void EtmPopulationTest::testReferenceCollection()
QTRY_VERIFY(getIndex("col5", model).data(Akonadi::EntityTreeModel::IsPopulatedRole).toBool());
//Check that this random other collection is still available
QVERIFY(getIndex("col1", model).isValid());
+ //Verify the etms collection has been updated accordingly
+ QTRY_VERIFY(getIndex("col5", model).data(Akonadi::EntityTreeModel::CollectionRole).value<Akonadi::Collection>().referenced());
//Ensure all signals have been delivered to the spy
QTest::qWait(0);
QCOMPARE(spy.mSignals.count("rowsInserted"), 1);
- //Changes twice why?
- QCOMPARE(spy.mSignals.count("dataChanged"), 2);
+ //Signals for item fetch state and a data-changed signal from the referencing
+ QCOMPARE(spy.mSignals.count("dataChanged"), 3);
//Dereference the collection and it should dissapear again
model->setCollectionReferenced(col5, false);
commit 22bdd80ac326b29e03d11ff280fe36d6235fcaa0
Author: Christian Mollekopf <chrigi_1 at fastmail.fm>
Date: Wed Jun 11 17:51:19 2014 +0200
ETM: Provide isFullyPopulated to include population of collections and items.
This returns only true once all collections and items have been fetched.
This is primarily important for tests to ensure no further signals are emitted
by the initial population.
diff --git a/akonadi/entitytreemodel.cpp b/akonadi/entitytreemodel.cpp
index 72af61e..98f4e84 100644
--- a/akonadi/entitytreemodel.cpp
+++ b/akonadi/entitytreemodel.cpp
@@ -962,6 +962,12 @@ bool EntityTreeModel::isCollectionPopulated(Collection::Id id) const
return d->m_populatedCols.contains(id);
}
+bool EntityTreeModel::isFullyPopulated() const
+{
+ Q_D(const EntityTreeModel);
+ return d->m_collectionTreeFetched && d->m_pendingCollectionRetrieveJobs.isEmpty();
+}
+
bool EntityTreeModel::entityMatch(const Item &item, const QVariant &value, Qt::MatchFlags flags) const
{
Q_UNUSED(item);
diff --git a/akonadi/entitytreemodel.h b/akonadi/entitytreemodel.h
index 504058c..a58668e 100644
--- a/akonadi/entitytreemodel.h
+++ b/akonadi/entitytreemodel.h
@@ -579,6 +579,17 @@ public:
bool isCollectionPopulated(Akonadi::Collection::Id) const;
/**
+ * Returns whether the model is fully populated.
+ *
+ * Returns true once the collection tree has been fetched and all collections have been populated.
+ *
+ * @see isCollectionPopulated
+ * @see isCollectionTreeFetched
+ * @since 4.14
+ */
+ bool isFullyPopulated() const;
+
+ /**
* Reimplemented to handle the AmazingCompletionRole.
*/
virtual QModelIndexList match(const QModelIndex &start, int role, const QVariant &value, int hits = 1, Qt::MatchFlags flags = Qt::MatchFlags(Qt::MatchStartsWith | Qt::MatchWrap)) const;
commit 30dda3fcaca714f8415032b5bb20372f05ff9a7f
Author: Christian Mollekopf <chrigi_1 at fastmail.fm>
Date: Wed Jun 11 17:50:01 2014 +0200
ETM: Split fetchJobDone + correctly emit dataChanged signals.
Split fetchJobDone into separate versions for Item/Collection fetch jobs.
Having a combined slot was confusing since the codepaths were separate anyways.
Additionally dataChanged was emitted in the wrong slot, as it is required
to notify about the changed fetch state, so it has to be emitted after the
itemFetchJob.
diff --git a/akonadi/entitytreemodel.h b/akonadi/entitytreemodel.h
index d7e19ef..504058c 100644
--- a/akonadi/entitytreemodel.h
+++ b/akonadi/entitytreemodel.h
@@ -709,7 +709,8 @@ private:
Q_PRIVATE_SLOT(d_func(), void startFirstListJob())
Q_PRIVATE_SLOT(d_func(), void serverStarted())
- Q_PRIVATE_SLOT(d_func(), void fetchJobDone(KJob *job))
+ Q_PRIVATE_SLOT(d_func(), void itemFetchJobDone(KJob *job))
+ Q_PRIVATE_SLOT(d_func(), void collectionFetchJobDone(KJob *job))
Q_PRIVATE_SLOT(d_func(), void rootFetchJobDone(KJob *job))
Q_PRIVATE_SLOT(d_func(), void pasteJobDone(KJob *job))
Q_PRIVATE_SLOT(d_func(), void updateJobDone(KJob *job))
diff --git a/akonadi/entitytreemodel_p.cpp b/akonadi/entitytreemodel_p.cpp
index aeba25c..9ff0f27 100644
--- a/akonadi/entitytreemodel_p.cpp
+++ b/akonadi/entitytreemodel_p.cpp
@@ -278,7 +278,7 @@ void EntityTreeModelPrivate::fetchItems(const Collection &parent)
q->connect(itemFetchJob, SIGNAL(itemsReceived(Akonadi::Item::List)),
q, SLOT(itemsFetched(Akonadi::Item::List)));
q->connect(itemFetchJob, SIGNAL(result(KJob*)),
- q, SLOT(fetchJobDone(KJob*)));
+ q, SLOT(itemFetchJobDone(KJob*)));
ifDebug(kDebug() << "collection:" << parent.name(); jobTimeTracker[itemFetchJob].start();)
}
@@ -298,10 +298,10 @@ void EntityTreeModelPrivate::fetchCollections(Akonadi::CollectionFetchJob *job)
q->connect(job, SIGNAL(collectionsReceived(Akonadi::Collection::List)),
q, SLOT(collectionsFetched(Akonadi::Collection::List)));
q->connect(job, SIGNAL(result(KJob*)),
- q, SLOT(fetchJobDone(KJob*)));
- q->connect(job, SIGNAL(result(KJob*)),
q, SLOT(finalCollectionFetchJobDone(KJob*)));
}
+ q->connect(job, SIGNAL(result(KJob*)),
+ q, SLOT(collectionFetchJobDone(KJob*)));
ifDebug(kDebug() << "collection:" << collection.name(); jobTimeTracker[job].start();)
}
@@ -314,7 +314,6 @@ void EntityTreeModelPrivate::fetchCollections(const Collection &collection, Coll
{
Q_ASSERT(collection.isValid());
CollectionFetchJob *job = new CollectionFetchJob(collection, type, m_session);
- job->setProperty(FetchCollectionId(), QVariant(collection.id()));
fetchCollections(job);
}
@@ -659,7 +658,7 @@ void EntityTreeModelPrivate::retrieveAncestors(const Akonadi::Collection &collec
q->connect(job, SIGNAL(collectionsReceived(Akonadi::Collection::List)),
q, SLOT(ancestorsFetched(Akonadi::Collection::List)));
q->connect(job, SIGNAL(result(KJob*)),
- q, SLOT(fetchJobDone(KJob*)));
+ q, SLOT(collectionFetchJobDone(KJob*)));
}
// Q_ASSERT( parentCollection != m_rootCollection );
@@ -1294,55 +1293,58 @@ void EntityTreeModelPrivate::monitoredItemUnlinked(const Akonadi::Item &item, co
q->endRemoveRows();
}
-void EntityTreeModelPrivate::fetchJobDone(KJob *job)
+void EntityTreeModelPrivate::collectionFetchJobDone(KJob *job)
+{
+ CollectionFetchJob *cJob = static_cast<CollectionFetchJob *>(job);
+ if (job->error()) {
+ kWarning() << "Job error: " << job->errorString() << "for collection:" << cJob->collections() << endl;
+ return;
+ }
+
+#ifdef DBG_TRACK_JOB_TIMES
+ kDebug() << "Fetch job took " << jobTimeTracker.take(job).elapsed() << "msec";
+ kDebug() << "was collection fetch job: collections:" << cJob->collections().size();
+ if (!cJob->collections().isEmpty()) {
+ kDebug() << "first fetched collection:" << cJob->collections().first().name();
+ }
+#endif
+}
+
+void EntityTreeModelPrivate::itemFetchJobDone(KJob *job)
{
- //This id is only valid for single collection fetchJobs
const Collection::Id collectionId = job->property(FetchCollectionId()).value<Collection::Id>();
+ m_pendingCollectionRetrieveJobs.remove(collectionId);
if (job->error()) {
kWarning() << "Job error: " << job->errorString() << "for collection:" << collectionId << endl;
- return; // let's be safe, otherwise emitting dataChanged will get us into loops
+ return;
}
+ ItemFetchJob *iJob = static_cast<ItemFetchJob *>(job);
#ifdef DBG_TRACK_JOB_TIMES
kDebug() << "Fetch job took " << jobTimeTracker.take(job).elapsed() << "msec";
- if (CollectionFetchJob *cJob = dynamic_cast<CollectionFetchJob *>(job)) {
- kDebug() << "was collection fetch job: collections:" << cJob->collections().size();
- if (!cJob->collections().isEmpty()) {
- kDebug() << "first fetched collection:" << cJob->collections().first().name();
- }
- } else if (ItemFetchJob *iJob = dynamic_cast<ItemFetchJob *>(job)) {
- kDebug() << "was item fetch job: items:" << iJob->items().size();
- if (!iJob->items().isEmpty()) {
- kDebug() << "first item collection:" << iJob->items().first().parentCollection().name();
- }
+ kDebug() << "was item fetch job: items:" << iJob->items().size();
+ if (!iJob->items().isEmpty()) {
+ kDebug() << "first item collection:" << iJob->items().first().parentCollection().name();
}
#endif
- if (ItemFetchJob *iJob = dynamic_cast<ItemFetchJob *>(job)) {
- if (!iJob->count()) {
- m_collectionsWithoutItems.insert(collectionId);
- } else {
- m_collectionsWithoutItems.remove(collectionId);
- }
- m_populatedCols.insert(collectionId);
- emit q_ptr->collectionPopulated(collectionId);
- m_pendingCollectionRetrieveJobs.remove(collectionId);
+ if (!iJob->count()) {
+ m_collectionsWithoutItems.insert(collectionId);
} else {
- CollectionFetchJob *collectionFetchJob = static_cast<CollectionFetchJob*>(job);
- Q_FOREACH (const Akonadi::Collection &col, collectionFetchJob->collections()) {
- if (!m_showRootCollection &&
- collectionId == m_rootCollection.id()) {
- continue;
- }
- // If collections are not in the model, there will be no valid index for them.
- if ((m_collectionFetchStrategy != EntityTreeModel::InvisibleCollectionFetch) &&
- (m_collectionFetchStrategy != EntityTreeModel::FetchNoCollections)) {
- const QModelIndex index = indexForCollection(col);
- Q_ASSERT(index.isValid());
- emit dataChanged(index, index);
- }
- }
+ m_collectionsWithoutItems.remove(collectionId);
+ }
+
+ m_populatedCols.insert(collectionId);
+ emit q_ptr->collectionPopulated(collectionId);
+
+ // If collections are not in the model, there will be no valid index for them.
+ if ((m_collectionFetchStrategy != EntityTreeModel::InvisibleCollectionFetch) &&
+ (m_collectionFetchStrategy != EntityTreeModel::FetchNoCollections)) {
+ const QModelIndex index = indexForCollection(Collection(collectionId));
+ Q_ASSERT(index.isValid());
+ //To notify about the changed fetch and population state
+ emit dataChanged(index, index);
}
}
@@ -1504,7 +1506,7 @@ void EntityTreeModelPrivate::fetchTopLevelCollections() const
q->connect(job, SIGNAL(collectionsReceived(Akonadi::Collection::List)),
q, SLOT(topLevelCollectionsFetched(Akonadi::Collection::List)));
q->connect(job, SIGNAL(result(KJob*)),
- q, SLOT(fetchJobDone(KJob*)));
+ q, SLOT(collectionFetchJobDone(KJob*)));
ifDebug(kDebug() << ""; jobTimeTracker[job].start();)
}
diff --git a/akonadi/entitytreemodel_p.h b/akonadi/entitytreemodel_p.h
index 10146ab..98919ed 100644
--- a/akonadi/entitytreemodel_p.h
+++ b/akonadi/entitytreemodel_p.h
@@ -167,7 +167,8 @@ public:
void monitoredItemsRetrieved(KJob *job);
void rootFetchJobDone(KJob *job);
- void fetchJobDone(KJob *job);
+ void collectionFetchJobDone(KJob *job);
+ void itemFetchJobDone(KJob *job);
void finalCollectionFetchJobDone(KJob *job);
void updateJobDone(KJob *job);
void pasteJobDone(KJob *job);
commit 10d37bf833fea71f0b3b4e93d406be5d442d720f
Author: Christian Mollekopf <chrigi_1 at fastmail.fm>
Date: Wed Jun 11 16:39:08 2014 +0200
ETM: removed unused code.
diff --git a/akonadi/entitytreemodel_p.cpp b/akonadi/entitytreemodel_p.cpp
index 56130ab..aeba25c 100644
--- a/akonadi/entitytreemodel_p.cpp
+++ b/akonadi/entitytreemodel_p.cpp
@@ -185,52 +185,6 @@ void EntityTreeModelPrivate::serverStarted()
endResetModel();
}
-ItemFetchJob *EntityTreeModelPrivate::getItemFetchJob(const Collection &parent, const ItemFetchScope &scope) const
-{
- Q_ASSERT(parent.isValid());
- ItemFetchJob *itemJob = new Akonadi::ItemFetchJob(parent, m_session);
- itemJob->setFetchScope(scope);
- itemJob->fetchScope().setAncestorRetrieval(ItemFetchScope::All);
- itemJob->fetchScope().setIgnoreRetrievalErrors(true);
- itemJob->setDeliveryOption(ItemFetchJob::EmitItemsInBatches);
- return itemJob;
-}
-
-ItemFetchJob *EntityTreeModelPrivate::getItemFetchJob(const Item &item, const ItemFetchScope &scope) const
-{
- ItemFetchJob *itemJob = new Akonadi::ItemFetchJob(item, m_session);
- itemJob->setFetchScope(scope);
- itemJob->fetchScope().setIgnoreRetrievalErrors(true);
- return itemJob;
-}
-
-void EntityTreeModelPrivate::runItemFetchJob(ItemFetchJob *itemFetchJob, const Collection &parent) const
-{
- Q_Q(const EntityTreeModel);
- itemFetchJob->setProperty(FetchCollectionId(), QVariant(parent.id()));
-
- if (m_showRootCollection || parent != m_rootCollection) {
- m_pendingCollectionRetrieveJobs.insert(parent.id());
-
- // If collections are not in the model, there will be no valid index for them.
- if ((m_collectionFetchStrategy != EntityTreeModel::InvisibleCollectionFetch) &&
- (m_collectionFetchStrategy != EntityTreeModel::FetchNoCollections)) {
- // We need to invoke this delayed because we would otherwise be emitting a sequence like
- // - beginInsertRows
- // - dataChanged
- // - endInsertRows
- // which would confuse proxies.
- QMetaObject::invokeMethod(const_cast<EntityTreeModel *>(q), "changeFetchState", Qt::QueuedConnection, Q_ARG(Akonadi::Collection, parent));
- }
- }
-
- q->connect(itemFetchJob, SIGNAL(itemsReceived(Akonadi::Item::List)),
- q, SLOT(itemsFetched(Akonadi::Item::List)));
- q->connect(itemFetchJob, SIGNAL(result(KJob*)),
- q, SLOT(fetchJobDone(KJob*)));
- ifDebug(kDebug() << "collection:" << parent.name(); jobTimeTracker[itemFetchJob].start();)
-}
-
void EntityTreeModelPrivate::changeFetchState(const Collection &parent)
{
Q_Q(EntityTreeModel);
@@ -294,12 +248,38 @@ void EntityTreeModelPrivate::agentInstanceAdvancedStatusChanged(const QString &,
void EntityTreeModelPrivate::fetchItems(const Collection &parent)
{
+ Q_Q(const EntityTreeModel);
Q_ASSERT(parent.isValid());
Q_ASSERT(m_collections.contains(parent.id()));
// TODO: Use a more specific fetch scope to get only the envelope for mails etc.
- ItemFetchJob *itemJob = getItemFetchJob(parent, m_monitor->itemFetchScope());
+ ItemFetchJob *itemFetchJob = new Akonadi::ItemFetchJob(parent, m_session);
+ itemFetchJob->setFetchScope(m_monitor->itemFetchScope());
+ itemFetchJob->fetchScope().setAncestorRetrieval(ItemFetchScope::All);
+ itemFetchJob->fetchScope().setIgnoreRetrievalErrors(true);
+ itemFetchJob->setDeliveryOption(ItemFetchJob::EmitItemsInBatches);
+
+ itemFetchJob->setProperty(FetchCollectionId(), QVariant(parent.id()));
+
+ if (m_showRootCollection || parent != m_rootCollection) {
+ m_pendingCollectionRetrieveJobs.insert(parent.id());
+
+ // If collections are not in the model, there will be no valid index for them.
+ if ((m_collectionFetchStrategy != EntityTreeModel::InvisibleCollectionFetch) &&
+ (m_collectionFetchStrategy != EntityTreeModel::FetchNoCollections)) {
+ // We need to invoke this delayed because we would otherwise be emitting a sequence like
+ // - beginInsertRows
+ // - dataChanged
+ // - endInsertRows
+ // which would confuse proxies.
+ QMetaObject::invokeMethod(const_cast<EntityTreeModel *>(q), "changeFetchState", Qt::QueuedConnection, Q_ARG(Akonadi::Collection, parent));
+ }
+ }
- runItemFetchJob(itemJob, parent);
+ q->connect(itemFetchJob, SIGNAL(itemsReceived(Akonadi::Item::List)),
+ q, SLOT(itemsFetched(Akonadi::Item::List)));
+ q->connect(itemFetchJob, SIGNAL(result(KJob*)),
+ q, SLOT(fetchJobDone(KJob*)));
+ ifDebug(kDebug() << "collection:" << parent.name(); jobTimeTracker[itemFetchJob].start();)
}
void EntityTreeModelPrivate::fetchCollections(Akonadi::CollectionFetchJob *job)
diff --git a/akonadi/entitytreemodel_p.h b/akonadi/entitytreemodel_p.h
index 61bc5ea..10146ab 100644
--- a/akonadi/entitytreemodel_p.h
+++ b/akonadi/entitytreemodel_p.h
@@ -123,9 +123,6 @@ public:
*/
void fillModel();
- ItemFetchJob *getItemFetchJob(const Collection &parent, const ItemFetchScope &scope) const;
- ItemFetchJob *getItemFetchJob(const Item &item, const ItemFetchScope &scope) const;
- void runItemFetchJob(ItemFetchJob *itemFetchJob, const Collection &parent) const;
void changeFetchState(const Collection &parent);
void agentInstanceAdvancedStatusChanged(const QString &, const QVariantMap &);
void agentInstanceRemoved(const Akonadi::AgentInstance &instace);
commit 212963476e33b8545455f42d5d4666fa196f6486
Author: Christian Mollekopf <chrigi_1 at fastmail.fm>
Date: Wed Jun 11 16:12:38 2014 +0200
ETM: Don't use reinterpret_cast to cast void* to class.
static_cast is what we want, reinterpret_cast in the best case does the same
and in the worst case breaks something.
diff --git a/akonadi/entitytreemodel_p.cpp b/akonadi/entitytreemodel_p.cpp
index 93bad7c..56130ab 100644
--- a/akonadi/entitytreemodel_p.cpp
+++ b/akonadi/entitytreemodel_p.cpp
@@ -1706,7 +1706,7 @@ void EntityTreeModelPrivate::dataChanged(const QModelIndex &top, const QModelInd
QModelIndex rightIndex;
- Node *node = reinterpret_cast<Node *>(bottom.internalPointer());
+ Node *node = static_cast<Node *>(bottom.internalPointer());
if (!node) {
return;
@@ -1740,7 +1740,7 @@ QModelIndex EntityTreeModelPrivate::indexForCollection(const Collection &collect
if ((collection == m_rootCollection)) {
if (m_showRootCollection) {
- return q->createIndex(0, 0, reinterpret_cast<void *>(m_rootNode));
+ return q->createIndex(0, 0, static_cast<void *>(m_rootNode));
}
return QModelIndex();
}
@@ -1759,7 +1759,7 @@ QModelIndex EntityTreeModelPrivate::indexForCollection(const Collection &collect
}
Node *node = it.value().at(row);
- return q->createIndex(row, 0, reinterpret_cast<void *>(node));
+ return q->createIndex(row, 0, static_cast<void *>(node));
}
return QModelIndex();
}
@@ -1772,7 +1772,7 @@ QModelIndex EntityTreeModelPrivate::indexForCollection(const Collection &collect
Node *node = m_childEntities.value(parentId).at(row);
- return q->createIndex(row, 0, reinterpret_cast<void *>(node));
+ return q->createIndex(row, 0, static_cast<void *>(node));
}
QModelIndexList EntityTreeModelPrivate::indexesForItem(const Item &item) const
@@ -1788,7 +1788,7 @@ QModelIndexList EntityTreeModelPrivate::indexesForItem(const Item &item) const
Q_ASSERT(row < nodeList.size());
Node *node = nodeList.at(row);
- indexes << q->createIndex(row, 0, reinterpret_cast<void *>(node));
+ indexes << q->createIndex(row, 0, static_cast<void *>(node));
return indexes;
}
@@ -1802,7 +1802,7 @@ QModelIndexList EntityTreeModelPrivate::indexesForItem(const Item &item) const
Q_ASSERT(row < nodeList.size());
Node *node = nodeList.at(row);
- indexes << q->createIndex(row, 0, reinterpret_cast<void *>(node));
+ indexes << q->createIndex(row, 0, static_cast<void *>(node));
}
return indexes;
commit 679ed5b3229f3290f408e8a48e6a64446e8d7cdb
Author: Christian Mollekopf <chrigi_1 at fastmail.fm>
Date: Wed Jun 11 14:28:49 2014 +0200
ETMPopulationTest: Test signals while referencing.
diff --git a/akonadi/tests/etmpopulationtest.cpp b/akonadi/tests/etmpopulationtest.cpp
index fac7f51..a688fc9 100644
--- a/akonadi/tests/etmpopulationtest.cpp
+++ b/akonadi/tests/etmpopulationtest.cpp
@@ -34,6 +34,55 @@
using namespace Akonadi;
+class ModelSignalSpy : public QObject {
+ Q_OBJECT
+public:
+ explicit ModelSignalSpy(QAbstractItemModel &model) {
+ connect(&model, SIGNAL(rowsInserted(QModelIndex, int, int)), this, SLOT(onRowsInserted(QModelIndex,int,int)));
+ connect(&model, SIGNAL(rowsRemoved(QModelIndex, int, int)), this, SLOT(onRowsRemoved(QModelIndex,int,int)));
+ connect(&model, SIGNAL(rowsMoved(QModelIndex, int, int, QModelIndex, int)), this, SLOT(onRowsMoved(QModelIndex,int,int, QModelIndex, int)));
+ connect(&model, SIGNAL(dataChanged(QModelIndex,QModelIndex)), this, SLOT(onDataChanged(QModelIndex,QModelIndex)));
+ connect(&model, SIGNAL(layoutChanged()), this, SLOT(onLayoutChanged()));
+ connect(&model, SIGNAL(modelReset()), this, SLOT(onModelReset()));
+ }
+
+ QStringList mSignals;
+ QModelIndex parent;
+ int start;
+ int end;
+
+public Q_SLOTS:
+ void onRowsInserted(QModelIndex p, int s, int e) {
+ kDebug() << p << s << e;
+ kDebug() << p.data().toString();
+ mSignals << QLatin1String("rowsInserted");
+ parent = p;
+ start = s;
+ end = e;
+ }
+ void onRowsRemoved(QModelIndex p, int s, int e) {
+ mSignals << QLatin1String("rowsRemoved");
+ parent = p;
+ start = s;
+ end = e;
+ }
+ void onRowsMoved(QModelIndex,int,int,QModelIndex,int) {
+ mSignals << QLatin1String("rowsMoved");
+ }
+ void onDataChanged(QModelIndex s, QModelIndex e) {
+ kDebug() << s << e;
+ kDebug() << s.data().toString();
+ kDebug() << e.data().toString();
+ mSignals << QLatin1String("dataChanged");
+ }
+ void onLayoutChanged() {
+ mSignals << QLatin1String("layoutChanged");
+ }
+ void onModelReset() {
+ mSignals << QLatin1String("modelReset");
+ }
+};
+
class InspectableETM: public EntityTreeModel
{
public:
@@ -270,6 +319,10 @@ void EtmPopulationTest::testReferenceCollection()
//Check that this random other collection is actually available
QVERIFY(getIndex("col1", model).isValid());
+ QTest::qWait(0);
+
+ ModelSignalSpy spy(*model);
+
//Reference the collection and it should appear in the model
model->setCollectionReferenced(col5, true);
@@ -278,6 +331,12 @@ void EtmPopulationTest::testReferenceCollection()
//Check that this random other collection is still available
QVERIFY(getIndex("col1", model).isValid());
+ //Ensure all signals have been delivered to the spy
+ QTest::qWait(0);
+ QCOMPARE(spy.mSignals.count("rowsInserted"), 1);
+ //Changes twice why?
+ QCOMPARE(spy.mSignals.count("dataChanged"), 2);
+
//Dereference the collection and it should dissapear again
model->setCollectionReferenced(col5, false);
QTRY_VERIFY(!getIndex("col5", model).isValid());
commit 0dc0c06d7491526a6eba2508eda378dff8e2e3b3
Author: Christian Mollekopf <chrigi_1 at fastmail.fm>
Date: Wed Jun 11 14:26:23 2014 +0200
ETM: only emit rowsInserted when we actually insert a new row.
And otherwise emit the signal individually for the subrows
ETM: use the correct parent for inserted ancestors.
diff --git a/akonadi/entitytreemodel_p.cpp b/akonadi/entitytreemodel_p.cpp
index 1817805..93bad7c 100644
--- a/akonadi/entitytreemodel_p.cpp
+++ b/akonadi/entitytreemodel_p.cpp
@@ -688,11 +688,11 @@ void EntityTreeModelPrivate::retrieveAncestors(const Akonadi::Collection &collec
// Still prepending all collections for now.
int row = 0;
- // Although we insert several Collections here, we only need to notify though the model
- // about the top-level one. The rest will be found auotmatically by the view.
- q->beginInsertRows(parent, row, row);
if (insertBaseCollection) {
+ // Although we insert several Collections here, we only need to notify though the model
+ // about the top-level one. The rest will be found auotmatically by the view.
+ q->beginInsertRows(parent, row, row);
m_collections.insert(collection.id(), collection);
Node *node = new Node;
node->id = collection.id();
@@ -707,17 +707,26 @@ void EntityTreeModelPrivate::retrieveAncestors(const Akonadi::Collection &collec
for (; it != end; ++it) {
const Collection ancestor = *it;
+ Q_ASSERT(ancestor.parentCollection().isValid());
+ if (!insertBaseCollection) {
+ const QModelIndex ancestorParent = indexForCollection(ancestor.parentCollection());
+ q->beginInsertRows(ancestorParent, 0, 0);
+ }
m_collections.insert(ancestor.id(), ancestor);
Node *node = new Node;
node->id = ancestor.id();
- Q_ASSERT(ancestor.parentCollection().isValid());
node->parent = ancestor.parentCollection().id();
node->type = Node::Collection;
m_childEntities[node->parent].prepend(node);
+ if (!insertBaseCollection) {
+ q->endInsertRows();
+ }
}
- q->endInsertRows();
+ if (insertBaseCollection) {
+ q->endInsertRows();
+ }
}
void EntityTreeModelPrivate::ancestorsFetched(const Akonadi::Collection::List &collectionList)
commit 25a1693eeaf6b7eec694e1fd054d65c325896265
Author: Christian Mollekopf <chrigi_1 at fastmail.fm>
Date: Tue Jun 10 13:32:58 2014 +0200
ETM: Removed FirstList hack.
This was never working with a mimetype filter because the toplevel collections
would never match the filter and the initial fetch was thus always empty.
It used to be fixed automatically because the second fetch used to be
a recursive fetch from root anyways.
Simply listing all collections right away should be fast enough, and removing
the hack allowed me to fold a bunch of codepaths into one.
diff --git a/akonadi/entitytreemodel.h b/akonadi/entitytreemodel.h
index ecad2f4..d7e19ef 100644
--- a/akonadi/entitytreemodel.h
+++ b/akonadi/entitytreemodel.h
@@ -713,12 +713,10 @@ private:
Q_PRIVATE_SLOT(d_func(), void rootFetchJobDone(KJob *job))
Q_PRIVATE_SLOT(d_func(), void pasteJobDone(KJob *job))
Q_PRIVATE_SLOT(d_func(), void updateJobDone(KJob *job))
- Q_PRIVATE_SLOT(d_func(), void firstFetchJobDone(KJob *job))
Q_PRIVATE_SLOT(d_func(), void finalCollectionFetchJobDone(KJob *job))
Q_PRIVATE_SLOT(d_func(), void itemsFetched(Akonadi::Item::List))
Q_PRIVATE_SLOT(d_func(), void collectionsFetched(Akonadi::Collection::List))
- Q_PRIVATE_SLOT(d_func(), void firstCollectionsFetched(Akonadi::Collection::List))
Q_PRIVATE_SLOT(d_func(), void collectionListFetched(Akonadi::Collection::List))
Q_PRIVATE_SLOT(d_func(), void topLevelCollectionsFetched(Akonadi::Collection::List))
Q_PRIVATE_SLOT(d_func(), void ancestorsFetched(Akonadi::Collection::List))
diff --git a/akonadi/entitytreemodel_p.cpp b/akonadi/entitytreemodel_p.cpp
index 1166c59..1817805 100644
--- a/akonadi/entitytreemodel_p.cpp
+++ b/akonadi/entitytreemodel_p.cpp
@@ -62,6 +62,20 @@ QMap<KJob *, QTime> jobTimeTracker;
using namespace Akonadi;
+static CollectionFetchJob::Type getFetchType(EntityTreeModel::CollectionFetchStrategy strategy)
+{
+ switch(strategy) {
+ case EntityTreeModel::FetchFirstLevelChildCollections:
+ return CollectionFetchJob::FirstLevel;
+ case EntityTreeModel::InvisibleCollectionFetch:
+ case EntityTreeModel::FetchCollectionsRecursive:
+ default:
+ break;
+ }
+ return CollectionFetchJob::Recursive;
+}
+
+
EntityTreeModelPrivate::EntityTreeModelPrivate(EntityTreeModel *parent)
: q_ptr(parent)
, m_rootNode(0)
@@ -288,7 +302,7 @@ void EntityTreeModelPrivate::fetchItems(const Collection &parent)
runItemFetchJob(itemJob, parent);
}
-void EntityTreeModelPrivate::fetchCollections(Akonadi::CollectionFetchJob *job, EntityTreeModelPrivate::ListingOrder listing)
+void EntityTreeModelPrivate::fetchCollections(Akonadi::CollectionFetchJob *job)
{
Q_Q(EntityTreeModel);
@@ -301,38 +315,27 @@ void EntityTreeModelPrivate::fetchCollections(Akonadi::CollectionFetchJob *job,
} else {
job->fetchScope().setIncludeStatistics(m_includeStatistics);
job->fetchScope().setAncestorRetrieval(Akonadi::CollectionFetchScope::All);
- if (listing != FirstListing) {
- q->connect(job, SIGNAL(collectionsReceived(Akonadi::Collection::List)),
- q, SLOT(collectionsFetched(Akonadi::Collection::List)));
- q->connect(job, SIGNAL(result(KJob*)),
- q, SLOT(fetchJobDone(KJob*)));
- q->connect(job, SIGNAL(result(KJob*)),
- q, SLOT(finalCollectionFetchJobDone(KJob*)));
- } else {
- q->connect(job, SIGNAL(collectionsReceived(Akonadi::Collection::List)),
- q, SLOT(firstCollectionsFetched(Akonadi::Collection::List)));
- q->connect(job, SIGNAL(result(KJob*)),
- q, SLOT(firstFetchJobDone(KJob*)));
- }
+ q->connect(job, SIGNAL(collectionsReceived(Akonadi::Collection::List)),
+ q, SLOT(collectionsFetched(Akonadi::Collection::List)));
+ q->connect(job, SIGNAL(result(KJob*)),
+ q, SLOT(fetchJobDone(KJob*)));
+ q->connect(job, SIGNAL(result(KJob*)),
+ q, SLOT(finalCollectionFetchJobDone(KJob*)));
}
ifDebug(kDebug() << "collection:" << collection.name(); jobTimeTracker[job].start();)
}
-void EntityTreeModelPrivate::fetchCollections(const Collection::List &collections, CollectionFetchJob::Type type, const ListingOrder listing)
+void EntityTreeModelPrivate::fetchCollections(const Collection::List &collections, CollectionFetchJob::Type type)
{
- Q_Q(EntityTreeModel);
- CollectionFetchJob *job = new CollectionFetchJob(collections, type, m_session);
- fetchCollections(job, listing);
+ fetchCollections(new CollectionFetchJob(collections, type, m_session));
}
-void EntityTreeModelPrivate::fetchCollections(const Collection &collection, CollectionFetchJob::Type type, const ListingOrder listing)
+void EntityTreeModelPrivate::fetchCollections(const Collection &collection, CollectionFetchJob::Type type)
{
- kDebug() << collection.id() << type << listing;
- Q_Q(EntityTreeModel);
Q_ASSERT(collection.isValid());
CollectionFetchJob *job = new CollectionFetchJob(collection, type, m_session);
job->setProperty(FetchCollectionId(), QVariant(collection.id()));
- fetchCollections(job, listing);
+ fetchCollections(job);
}
// Specialization needs to be in the same namespace as the definition
@@ -441,6 +444,11 @@ void EntityTreeModelPrivate::collectionsFetched(const Akonadi::Collection::List
continue;
}
+ //If we're monitoring collections somewhere in the tree we need to retrieve their ancestors now
+ if (collection.parentCollection() != m_rootCollection && m_monitor->collectionsMonitored().contains(collection)) {
+ retrieveAncestors(collection, false);
+ }
+
Collection parent = collection;
while (!m_collections.contains(parent.parentCollection().id())) {
@@ -613,8 +621,10 @@ void EntityTreeModelPrivate::monitoredCollectionsChanged(const Akonadi::Collecti
Q_UNUSED(monitored)
if (monitored) {
m_collectionTreeFetched = false;
- //TODO m_collectionFetchStrategy;
- fetchCollections(collection, CollectionFetchJob::Base, EntityTreeModelPrivate::FirstListing);
+
+ const CollectionFetchJob::Type fetchType = getFetchType(m_collectionFetchStrategy);
+ fetchCollections(collection, CollectionFetchJob::Base);
+ fetchCollections(collection, fetchType);
} else {
monitoredCollectionRemoved(collection);
}
@@ -1449,33 +1459,18 @@ void EntityTreeModelPrivate::startFirstListJob()
const bool multipleCollections = m_monitor->collectionsMonitored().size() > 1;
const bool generalPopulation = !noMimetypes || (noMimetypes && noResources);
+ const CollectionFetchJob::Type fetchType = getFetchType(m_collectionFetchStrategy);
+
//Collections can only be monitored if no resources and no mimetypes are monitored
if (multipleCollections && noMimetypes && noResources) {
- fetchCollections(m_monitor->collectionsMonitored(), CollectionFetchJob::Base, Akonadi::EntityTreeModelPrivate::FirstListing);
+ fetchCollections(m_monitor->collectionsMonitored(), CollectionFetchJob::Base);
+ fetchCollections(m_monitor->collectionsMonitored(), fetchType);
return;
}
kDebug() << "GEN" << generalPopulation << noMimetypes << noResources;
- // Includes recursive trees. Lower levels are fetched in the onRowsInserted slot if
- // necessary.
- // HACK: fix this for recursive listing if we filter on mimetypes that only exist deeper
- // in the hierarchy
- if ((m_collectionFetchStrategy == EntityTreeModel::FetchFirstLevelChildCollections &&
- generalPopulation)
- /*|| ( m_collectionFetchStrategy == EntityTreeModel::FetchCollectionsRecursive )*/) {
- fetchCollections(m_rootCollection, CollectionFetchJob::FirstLevel);
- }
-
- // On start we first fetch the top-level collections to give a more convincing
- // illusion of speed. That's what the FirstListing stuff is for.
- if ((m_collectionFetchStrategy == EntityTreeModel::FetchCollectionsRecursive) &&
- generalPopulation) {
- fetchCollections(m_rootCollection, CollectionFetchJob::FirstLevel, FirstListing);
- }
-
- if ((m_collectionFetchStrategy == EntityTreeModel::InvisibleCollectionFetch) &&
- generalPopulation) {
- fetchCollections(m_rootCollection, CollectionFetchJob::Recursive, FirstListing);
+ if (generalPopulation) {
+ fetchCollections(m_rootCollection, fetchType);
}
// If the root collection is not collection::root, then it could have items, and they will need to be
@@ -1506,33 +1501,8 @@ void EntityTreeModelPrivate::finalCollectionFetchJobDone(KJob *job)
}
Akonadi::CollectionFetchJob *fetchJob = static_cast<Akonadi::CollectionFetchJob*>(job);
- m_collectionTreeFetched = true;
- emit q_ptr->collectionTreeFetched(fetchJob->collections());
-}
-
-void EntityTreeModelPrivate::firstCollectionsFetched(const Akonadi::Collection::List &collections)
-{
- Q_FOREACH (const Akonadi::Collection &collection, collections) {
- //If we're monitoring collections somewhere in the tree we need to retrieve their ancestors now
- if (collection.parentCollection() != m_rootCollection) {
- retrieveAncestors(collection, false);
- }
- }
- collectionsFetched(collections);
-}
-
-void EntityTreeModelPrivate::firstFetchJobDone(KJob *job)
-{
- if (job->error()) {
- kWarning() << job->errorString();
- return;
- }
-
- Akonadi::CollectionFetchJob *fetchJob = static_cast<Akonadi::CollectionFetchJob*>(job);
- //Fetch the remainder of the monitored tree
- if (!fetchJob->collections().isEmpty()) {
- fetchCollections(fetchJob->collections(), CollectionFetchJob::Recursive);
- } else {
+ //Can happen when monitoring resources
+ if (!m_collectionTreeFetched) {
m_collectionTreeFetched = true;
emit q_ptr->collectionTreeFetched(fetchJob->collections());
}
@@ -1581,16 +1551,7 @@ void EntityTreeModelPrivate::topLevelCollectionsFetched(const Akonadi::Collectio
}
Q_ASSERT(collection.isValid());
- CollectionFetchJob *job = new CollectionFetchJob(collection, CollectionFetchJob::Recursive, m_session);
- job->fetchScope().setListFilter(m_listFilter);
-
- job->fetchScope().setIncludeStatistics(m_includeStatistics);
- job->fetchScope().setAncestorRetrieval(Akonadi::CollectionFetchScope::All);
- q->connect(job, SIGNAL(collectionsReceived(Akonadi::Collection::List)),
- q, SLOT(collectionsFetched(Akonadi::Collection::List)));
- q->connect(job, SIGNAL(result(KJob*)),
- q, SLOT(fetchJobDone(KJob*)));
- ifDebug(kDebug() << "collection:" << collection.name(); jobTimeTracker[job].start();)
+ fetchCollections(collection, CollectionFetchJob::Recursive);
}
}
}
diff --git a/akonadi/entitytreemodel_p.h b/akonadi/entitytreemodel_p.h
index fcc7277..61bc5ea 100644
--- a/akonadi/entitytreemodel_p.h
+++ b/akonadi/entitytreemodel_p.h
@@ -69,19 +69,13 @@ public:
Recursive
};
- enum ListingOrder {
- NotFirstListing,
- FirstListing
- };
-
void init(ChangeRecorder *monitor);
- void fetchCollections(const Collection &collection, CollectionFetchJob::Type = CollectionFetchJob::FirstLevel, ListingOrder = NotFirstListing);
- void fetchCollections(const Collection::List &collections, CollectionFetchJob::Type = CollectionFetchJob::FirstLevel, ListingOrder = NotFirstListing);
- void fetchCollections(Akonadi::CollectionFetchJob *job, ListingOrder = NotFirstListing);
+ void fetchCollections(const Collection &collection, CollectionFetchJob::Type type = CollectionFetchJob::FirstLevel);
+ void fetchCollections(const Collection::List &collections, CollectionFetchJob::Type type = CollectionFetchJob::FirstLevel);
+ void fetchCollections(Akonadi::CollectionFetchJob *job);
void fetchItems(const Collection &collection);
void collectionsFetched(const Akonadi::Collection::List &);
- void firstCollectionsFetched(const Akonadi::Collection::List &);
void collectionListFetched(const Akonadi::Collection::List &);
void itemsFetched(const Akonadi::Item::List &items);
void itemsFetched(const Collection::Id collectionId, const Akonadi::Item::List &items);
@@ -175,7 +169,6 @@ public:
void serverStarted();
void monitoredItemsRetrieved(KJob *job);
- void firstFetchJobDone(KJob *job);
void rootFetchJobDone(KJob *job);
void fetchJobDone(KJob *job);
void finalCollectionFetchJobDone(KJob *job);
diff --git a/akonadi/tests/etmpopulationtest.cpp b/akonadi/tests/etmpopulationtest.cpp
index 6866049..fac7f51 100644
--- a/akonadi/tests/etmpopulationtest.cpp
+++ b/akonadi/tests/etmpopulationtest.cpp
@@ -51,12 +51,14 @@ QModelIndex getIndex(const QString &string, EntityTreeModel *model)
return list.first();
}
-Akonadi::Collection createCollection(const QString &name, const Akonadi::Collection &parent, bool enabled = true)
+Akonadi::Collection createCollection(const QString &name, const Akonadi::Collection &parent, bool enabled = true, const QStringList &mimeTypes = QStringList())
{
Akonadi::Collection col;
col.setParentCollection(parent);
col.setName(name);
col.setEnabled(enabled);
+ col.setContentMimeTypes(mimeTypes);
+
CollectionCreateJob *create = new CollectionCreateJob(col);
create->exec();
Q_ASSERT(!create->error());
@@ -72,16 +74,17 @@ class EtmPopulationTest : public QObject
private Q_SLOTS:
void initTestCase();
+ void testMonitoringCollectionsPreset();
void testMonitoringCollections();
void testFullPopulation();
void testAddMonitoringCollections();
void testRemoveMonitoringCollections();
void testDisplayFilter();
void testReferenceCollection();
+ void testLoadingOfHiddenCollection();
private:
Collection res;
- static const int numberOfRootCollections = 4;
QString mainCollectionName;
Collection monitorCol;
Collection col1;
@@ -99,20 +102,34 @@ void EtmPopulationTest::initTestCase()
res = Collection( collectionIdFromPath( "res3" ) );
mainCollectionName = QLatin1String("main");
- {
- monitorCol.setParentCollection(res);
- monitorCol.setName(mainCollectionName);
- CollectionCreateJob *create = new CollectionCreateJob(monitorCol, this);
- AKVERIFYEXEC(create);
- monitorCol = create->collection();
- }
-
+ monitorCol = createCollection(mainCollectionName, res);
col1 = createCollection(QLatin1String("col1"), monitorCol);
col2 = createCollection(QLatin1String("col2"), monitorCol);
col3 = createCollection(QLatin1String("col3"), monitorCol);
col4 = createCollection(QLatin1String("col4"), col2);
}
+void EtmPopulationTest::testMonitoringCollectionsPreset()
+{
+ ChangeRecorder *changeRecorder = new ChangeRecorder(this);
+ changeRecorder->setCollectionMonitored(col1, true);
+ changeRecorder->setCollectionMonitored(col2, true);
+ InspectableETM *model = new InspectableETM(changeRecorder, this);
+ model->setItemPopulationStrategy(EntityTreeModel::ImmediatePopulation);
+ model->setCollectionFetchStrategy(EntityTreeModel::FetchCollectionsRecursive);
+
+ QTRY_VERIFY(model->isCollectionTreeFetched());
+ QTRY_VERIFY(getIndex("col1", model).isValid());
+ QTRY_VERIFY(getIndex("col2", model).isValid());
+ QTRY_VERIFY(getIndex(mainCollectionName, model).isValid());
+ QVERIFY(!getIndex("col3", model).isValid());
+ QVERIFY(getIndex("col4", model).isValid());
+
+ QTRY_VERIFY(getIndex("col1", model).data(Akonadi::EntityTreeModel::IsPopulatedRole).toBool());
+ QTRY_VERIFY(getIndex("col2", model).data(Akonadi::EntityTreeModel::IsPopulatedRole).toBool());
+ QTRY_VERIFY(!getIndex(mainCollectionName, model).data(Akonadi::EntityTreeModel::IsPopulatedRole).toBool());
+ QTRY_VERIFY(getIndex("col4", model).data(Akonadi::EntityTreeModel::IsPopulatedRole).toBool());
+}
void EtmPopulationTest::testMonitoringCollections()
@@ -128,7 +145,7 @@ void EtmPopulationTest::testMonitoringCollections()
QTRY_VERIFY(model->isCollectionTreeFetched());
QVERIFY(getIndex("col1", model).isValid());
QVERIFY(getIndex("col2", model).isValid());
- QVERIFY(getIndex(mainCollectionName, model).isValid());
+ QTRY_VERIFY(getIndex(mainCollectionName, model).isValid());
QVERIFY(!getIndex("col3", model).isValid());
QVERIFY(getIndex("col4", model).isValid());
@@ -141,12 +158,11 @@ void EtmPopulationTest::testMonitoringCollections()
void EtmPopulationTest::testFullPopulation()
{
ChangeRecorder *changeRecorder = new ChangeRecorder(this);
- changeRecorder->setCollectionMonitored(Akonadi::Collection::root());
+ // changeRecorder->setCollectionMonitored(Akonadi::Collection::root());
+ changeRecorder->setAllMonitored(true);
InspectableETM *model = new InspectableETM(changeRecorder, this);
model->setItemPopulationStrategy(EntityTreeModel::ImmediatePopulation);
model->setCollectionFetchStrategy(EntityTreeModel::FetchCollectionsRecursive);
- Akonadi::Collection::List monitored;
- monitored << col1 << col2;
QTRY_VERIFY(model->isCollectionTreeFetched());
QVERIFY(getIndex("col1", model).isValid());
@@ -164,22 +180,24 @@ void EtmPopulationTest::testFullPopulation()
void EtmPopulationTest::testAddMonitoringCollections()
{
ChangeRecorder *changeRecorder = new ChangeRecorder(this);
+ changeRecorder->setCollectionMonitored(col1, true);
+ changeRecorder->setCollectionMonitored(col2, true);
InspectableETM *model = new InspectableETM(changeRecorder, this);
model->setItemPopulationStrategy(EntityTreeModel::ImmediatePopulation);
model->setCollectionFetchStrategy(EntityTreeModel::FetchCollectionsRecursive);
- Akonadi::Collection::List monitored;
- monitored << col1 << col2;
- model->setCollectionsMonitored(monitored);
QTRY_VERIFY(model->isCollectionTreeFetched());
+ //The main collection may be loaded a little later since it is in the fetchAncestors path
+ QTRY_VERIFY(getIndex(mainCollectionName, model).isValid());
+
model->setCollectionMonitored(col3, true);
QTRY_VERIFY(model->isCollectionTreeFetched());
QVERIFY(getIndex("col1", model).isValid());
QVERIFY(getIndex("col2", model).isValid());
- QVERIFY(getIndex(mainCollectionName, model).isValid());
QVERIFY(getIndex("col3", model).isValid());
QVERIFY(getIndex("col4", model).isValid());
+ QVERIFY(getIndex(mainCollectionName, model).isValid());
QTRY_VERIFY(getIndex("col1", model).data(Akonadi::EntityTreeModel::IsPopulatedRole).toBool());
QTRY_VERIFY(getIndex("col2", model).data(Akonadi::EntityTreeModel::IsPopulatedRole).toBool());
@@ -191,17 +209,18 @@ void EtmPopulationTest::testAddMonitoringCollections()
void EtmPopulationTest::testRemoveMonitoringCollections()
{
ChangeRecorder *changeRecorder = new ChangeRecorder(this);
+ changeRecorder->setCollectionMonitored(col1, true);
+ changeRecorder->setCollectionMonitored(col2, true);
InspectableETM *model = new InspectableETM(changeRecorder, this);
model->setItemPopulationStrategy(EntityTreeModel::ImmediatePopulation);
model->setCollectionFetchStrategy(EntityTreeModel::FetchCollectionsRecursive);
- Akonadi::Collection::List monitored;
- monitored << col1 << col2;
- model->setCollectionsMonitored(monitored);
QTRY_VERIFY(model->isCollectionTreeFetched());
+ //The main collection may be loaded a little later since it is in the fetchAncestors path
+ QTRY_VERIFY(getIndex(mainCollectionName, model).isValid());
+
model->setCollectionMonitored(col2, false);
- QTRY_VERIFY(model->isCollectionTreeFetched());
QVERIFY(getIndex("col1", model).isValid());
QVERIFY(!getIndex("col2", model).isValid());
QVERIFY(getIndex(mainCollectionName, model).isValid());
@@ -269,6 +288,26 @@ void EtmPopulationTest::testReferenceCollection()
AKVERIFYEXEC(deleteJob);
}
+/*
+ * Col5 and it's ancestors should be included although the ancestors don't match the mimetype filter.
+ */
+void EtmPopulationTest::testLoadingOfHiddenCollection()
+{
+ Collection col5 = createCollection(QLatin1String("col5"), monitorCol, false, QStringList() << QLatin1String("application/test"));
+
+ ChangeRecorder *changeRecorder = new ChangeRecorder(this);
+ changeRecorder->setMimeTypeMonitored(QLatin1String("application/test"), true);
+ InspectableETM *model = new InspectableETM(changeRecorder, this);
+ model->setItemPopulationStrategy(EntityTreeModel::ImmediatePopulation);
+ model->setCollectionFetchStrategy(EntityTreeModel::FetchCollectionsRecursive);
+
+ QTRY_VERIFY(model->isCollectionTreeFetched());
+ QVERIFY(getIndex("col5", model).isValid());
+
+ Akonadi::CollectionDeleteJob *deleteJob = new Akonadi::CollectionDeleteJob(col5);
+ AKVERIFYEXEC(deleteJob);
+}
+
#include "etmpopulationtest.moc"
QTEST_AKONADIMAIN(EtmPopulationTest, NoGUI)
commit 9c9a496374780f3c66444cd848ead80c4985b643
Author: Christian Mollekopf <chrigi_1 at fastmail.fm>
Date: Tue Jun 10 01:32:46 2014 +0200
ETMPopulationTest: displayfilter test
diff --git a/akonadi/tests/etmpopulationtest.cpp b/akonadi/tests/etmpopulationtest.cpp
index c5c8078..6866049 100644
--- a/akonadi/tests/etmpopulationtest.cpp
+++ b/akonadi/tests/etmpopulationtest.cpp
@@ -76,6 +76,7 @@ private Q_SLOTS:
void testFullPopulation();
void testAddMonitoringCollections();
void testRemoveMonitoringCollections();
+ void testDisplayFilter();
void testReferenceCollection();
private:
@@ -213,6 +214,28 @@ void EtmPopulationTest::testRemoveMonitoringCollections()
QTRY_VERIFY(!getIndex("col4", model).data(Akonadi::EntityTreeModel::IsPopulatedRole).toBool());
}
+void EtmPopulationTest::testDisplayFilter()
+{
+ Collection col5 = createCollection(QLatin1String("col5"), monitorCol, false);
+
+ ChangeRecorder *changeRecorder = new ChangeRecorder(this);
+ InspectableETM *model = new InspectableETM(changeRecorder, this);
+ model->setItemPopulationStrategy(EntityTreeModel::ImmediatePopulation);
+ model->setCollectionFetchStrategy(EntityTreeModel::FetchCollectionsRecursive);
+ model->setListFilter(Akonadi::CollectionFetchScope::Display);
+
+ QTRY_VERIFY(model->isCollectionTreeFetched());
+ QVERIFY(getIndex(mainCollectionName, model).isValid());
+ QVERIFY(getIndex("col1", model).isValid());
+ QVERIFY(getIndex("col2", model).isValid());
+ QVERIFY(getIndex("col3", model).isValid());
+ QVERIFY(getIndex("col4", model).isValid());
+ QVERIFY(!getIndex("col5", model).isValid());
+
+ Akonadi::CollectionDeleteJob *deleteJob = new Akonadi::CollectionDeleteJob(col5);
+ AKVERIFYEXEC(deleteJob);
+}
+
void EtmPopulationTest::testReferenceCollection()
{
Collection col5 = createCollection(QLatin1String("col5"), monitorCol, false);
commit e9e095952e5b2391e7994b7693456e54e0c60005
Author: Christian Mollekopf <chrigi_1 at fastmail.fm>
Date: Mon Jun 9 23:27:57 2014 +0200
ETM: Support for referencing collections.
diff --git a/akonadi/entitytreemodel.cpp b/akonadi/entitytreemodel.cpp
index d9cdede..72af61e 100644
--- a/akonadi/entitytreemodel.cpp
+++ b/akonadi/entitytreemodel.cpp
@@ -130,6 +130,16 @@ void EntityTreeModel::setCollectionMonitored(const Collection &col, bool monitor
d->m_monitor->setCollectionMonitored(col, monitored);
}
+void EntityTreeModel::setCollectionReferenced(const Akonadi::Collection &col, bool referenced)
+{
+ Q_D(EntityTreeModel);
+ d->m_monitor->setCollectionMonitored(col, referenced);
+ Akonadi::Collection referencedCollection = col;
+ referencedCollection.setReferenced(referenced);
+ //We have to use the same session as the monitor, so the monitor can fetch the collection afterwards
+ new Akonadi::CollectionModifyJob(referencedCollection, d->m_monitor->session());
+}
+
bool EntityTreeModel::systemEntitiesShown() const
{
Q_D(const EntityTreeModel);
diff --git a/akonadi/entitytreemodel.h b/akonadi/entitytreemodel.h
index e1bb376..ecad2f4 100644
--- a/akonadi/entitytreemodel.h
+++ b/akonadi/entitytreemodel.h
@@ -476,6 +476,15 @@ public:
void setCollectionMonitored(const Akonadi::Collection &col, bool monitored = true);
/**
+ * References a collection and starts to monitor it.
+ *
+ * Use this to temporarily include a collection that is not enabled.
+ *
+ * @since 4.14
+ */
+ void setCollectionReferenced(const Akonadi::Collection &col, bool referenced = true);
+
+ /**
* Sets the item population @p strategy of the model.
*/
void setItemPopulationStrategy(ItemPopulationStrategy strategy);
diff --git a/akonadi/tests/etmpopulationtest.cpp b/akonadi/tests/etmpopulationtest.cpp
index 8af53a2..c5c8078 100644
--- a/akonadi/tests/etmpopulationtest.cpp
+++ b/akonadi/tests/etmpopulationtest.cpp
@@ -29,6 +29,7 @@
#include <akonadi/changerecorder_p.h>
#include <akonadi/qtest_akonadi.h>
#include <akonadi/collectioncreatejob.h>
+#include <akonadi/collectiondeletejob.h>
#include <akonadi/itemcreatejob.h>
using namespace Akonadi;
@@ -50,11 +51,12 @@ QModelIndex getIndex(const QString &string, EntityTreeModel *model)
return list.first();
}
-Akonadi::Collection createCollection(const QString &name, const Akonadi::Collection &parent)
+Akonadi::Collection createCollection(const QString &name, const Akonadi::Collection &parent, bool enabled = true)
{
Akonadi::Collection col;
col.setParentCollection(parent);
col.setName(name);
+ col.setEnabled(enabled);
CollectionCreateJob *create = new CollectionCreateJob(col);
create->exec();
Q_ASSERT(!create->error());
@@ -74,6 +76,7 @@ private Q_SLOTS:
void testFullPopulation();
void testAddMonitoringCollections();
void testRemoveMonitoringCollections();
+ void testReferenceCollection();
private:
Collection res;
@@ -210,6 +213,40 @@ void EtmPopulationTest::testRemoveMonitoringCollections()
QTRY_VERIFY(!getIndex("col4", model).data(Akonadi::EntityTreeModel::IsPopulatedRole).toBool());
}
+void EtmPopulationTest::testReferenceCollection()
+{
+ Collection col5 = createCollection(QLatin1String("col5"), monitorCol, false);
+
+ ChangeRecorder *changeRecorder = new ChangeRecorder(this);
+ InspectableETM *model = new InspectableETM(changeRecorder, this);
+ model->setItemPopulationStrategy(EntityTreeModel::ImmediatePopulation);
+ model->setCollectionFetchStrategy(EntityTreeModel::FetchCollectionsRecursive);
+ model->setListFilter(Akonadi::CollectionFetchScope::Display);
+
+ QTRY_VERIFY(model->isCollectionTreeFetched());
+ QVERIFY(!getIndex("col5", model).isValid());
+ //Check that this random other collection is actually available
+ QVERIFY(getIndex("col1", model).isValid());
+
+ //Reference the collection and it should appear in the model
+ model->setCollectionReferenced(col5, true);
+
+ QTRY_VERIFY(getIndex("col5", model).isValid());
+ QTRY_VERIFY(getIndex("col5", model).data(Akonadi::EntityTreeModel::IsPopulatedRole).toBool());
+ //Check that this random other collection is still available
+ QVERIFY(getIndex("col1", model).isValid());
+
+ //Dereference the collection and it should dissapear again
+ model->setCollectionReferenced(col5, false);
+ QTRY_VERIFY(!getIndex("col5", model).isValid());
+ //Check that this random other collection is still available
+ QVERIFY(getIndex("col1", model).isValid());
+
+ Akonadi::CollectionDeleteJob *deleteJob = new Akonadi::CollectionDeleteJob(col5);
+ AKVERIFYEXEC(deleteJob);
+}
+
#include "etmpopulationtest.moc"
QTEST_AKONADIMAIN(EtmPopulationTest, NoGUI)
+
commit 607f3613ba6b9a3cddbdcb297471cd16a30d7b32
Author: Christian Mollekopf <chrigi_1 at fastmail.fm>
Date: Mon Jun 9 19:09:34 2014 +0200
ETM: Monitoring specific collections only.
diff --git a/akonadi/entitytreemodel.cpp b/akonadi/entitytreemodel.cpp
index 7fb35f5..d9cdede 100644
--- a/akonadi/entitytreemodel.cpp
+++ b/akonadi/entitytreemodel.cpp
@@ -111,6 +111,25 @@ void EntityTreeModel::setListFilter(CollectionFetchScope::ListFilter filter)
d->endResetModel();
}
+void EntityTreeModel::setCollectionsMonitored(const Collection::List &collections)
+{
+ Q_D(EntityTreeModel);
+ d->beginResetModel();
+ foreach(const Akonadi::Collection &col, d->m_monitor->collectionsMonitored()) {
+ d->m_monitor->setCollectionMonitored(col, false);
+ }
+ foreach(const Akonadi::Collection &col, collections) {
+ d->m_monitor->setCollectionMonitored(col, true);
+ }
+ d->endResetModel();
+}
+
+void EntityTreeModel::setCollectionMonitored(const Collection &col, bool monitored)
+{
+ Q_D(EntityTreeModel);
+ d->m_monitor->setCollectionMonitored(col, monitored);
+}
+
bool EntityTreeModel::systemEntitiesShown() const
{
Q_D(const EntityTreeModel);
diff --git a/akonadi/entitytreemodel.h b/akonadi/entitytreemodel.h
index 2d52a3d..e1bb376 100644
--- a/akonadi/entitytreemodel.h
+++ b/akonadi/entitytreemodel.h
@@ -460,6 +460,22 @@ public:
void setListFilter(Akonadi::CollectionFetchScope::ListFilter filter);
/**
+ * Monitors the specified collections and resets the model.
+ *
+ * @since 4.14
+ */
+ void setCollectionsMonitored(const Akonadi::Collection::List &collections);
+
+ /**
+ * Adds or removes a specific collection from the monitored set without resetting the model.
+ * Only call this if you're monitoring specific collections (not mimetype/resources/items).
+ *
+ * @since 4.14
+ * @see setCollectionsMonitored()
+ */
+ void setCollectionMonitored(const Akonadi::Collection &col, bool monitored = true);
+
+ /**
* Sets the item population @p strategy of the model.
*/
void setItemPopulationStrategy(ItemPopulationStrategy strategy);
@@ -689,10 +705,10 @@ private:
Q_PRIVATE_SLOT(d_func(), void pasteJobDone(KJob *job))
Q_PRIVATE_SLOT(d_func(), void updateJobDone(KJob *job))
Q_PRIVATE_SLOT(d_func(), void firstFetchJobDone(KJob *job))
+ Q_PRIVATE_SLOT(d_func(), void finalCollectionFetchJobDone(KJob *job))
Q_PRIVATE_SLOT(d_func(), void itemsFetched(Akonadi::Item::List))
Q_PRIVATE_SLOT(d_func(), void collectionsFetched(Akonadi::Collection::List))
- Q_PRIVATE_SLOT(d_func(), void allCollectionsFetched(Akonadi::Collection::List))
Q_PRIVATE_SLOT(d_func(), void firstCollectionsFetched(Akonadi::Collection::List))
Q_PRIVATE_SLOT(d_func(), void collectionListFetched(Akonadi::Collection::List))
Q_PRIVATE_SLOT(d_func(), void topLevelCollectionsFetched(Akonadi::Collection::List))
diff --git a/akonadi/entitytreemodel_p.cpp b/akonadi/entitytreemodel_p.cpp
index f12f96f..1166c59 100644
--- a/akonadi/entitytreemodel_p.cpp
+++ b/akonadi/entitytreemodel_p.cpp
@@ -288,13 +288,9 @@ void EntityTreeModelPrivate::fetchItems(const Collection &parent)
runItemFetchJob(itemJob, parent);
}
-void EntityTreeModelPrivate::fetchCollections(const Collection &collection, CollectionFetchJob::Type type, const ListingOrder listing)
+void EntityTreeModelPrivate::fetchCollections(Akonadi::CollectionFetchJob *job, EntityTreeModelPrivate::ListingOrder listing)
{
Q_Q(EntityTreeModel);
- Q_ASSERT(collection.isValid());
- CollectionFetchJob *job = new CollectionFetchJob(collection, type, m_session);
-
- job->setProperty(FetchCollectionId(), QVariant(collection.id()));
job->fetchScope().setListFilter(m_listFilter);
job->fetchScope().setContentMimeTypes(m_monitor->mimeTypesMonitored());
@@ -307,9 +303,11 @@ void EntityTreeModelPrivate::fetchCollections(const Collection &collection, Coll
job->fetchScope().setAncestorRetrieval(Akonadi::CollectionFetchScope::All);
if (listing != FirstListing) {
q->connect(job, SIGNAL(collectionsReceived(Akonadi::Collection::List)),
- q, SLOT(allCollectionsFetched(Akonadi::Collection::List)));
+ q, SLOT(collectionsFetched(Akonadi::Collection::List)));
q->connect(job, SIGNAL(result(KJob*)),
q, SLOT(fetchJobDone(KJob*)));
+ q->connect(job, SIGNAL(result(KJob*)),
+ q, SLOT(finalCollectionFetchJobDone(KJob*)));
} else {
q->connect(job, SIGNAL(collectionsReceived(Akonadi::Collection::List)),
q, SLOT(firstCollectionsFetched(Akonadi::Collection::List)));
@@ -320,6 +318,23 @@ void EntityTreeModelPrivate::fetchCollections(const Collection &collection, Coll
ifDebug(kDebug() << "collection:" << collection.name(); jobTimeTracker[job].start();)
}
+void EntityTreeModelPrivate::fetchCollections(const Collection::List &collections, CollectionFetchJob::Type type, const ListingOrder listing)
+{
+ Q_Q(EntityTreeModel);
+ CollectionFetchJob *job = new CollectionFetchJob(collections, type, m_session);
+ fetchCollections(job, listing);
+}
+
+void EntityTreeModelPrivate::fetchCollections(const Collection &collection, CollectionFetchJob::Type type, const ListingOrder listing)
+{
+ kDebug() << collection.id() << type << listing;
+ Q_Q(EntityTreeModel);
+ Q_ASSERT(collection.isValid());
+ CollectionFetchJob *job = new CollectionFetchJob(collection, type, m_session);
+ job->setProperty(FetchCollectionId(), QVariant(collection.id()));
+ fetchCollections(job, listing);
+}
+
// Specialization needs to be in the same namespace as the definition
namespace Akonadi {
@@ -596,8 +611,13 @@ void EntityTreeModelPrivate::monitoredCollectionsChanged(const Akonadi::Collecti
{
Q_UNUSED(collection)
Q_UNUSED(monitored)
- beginResetModel();
- endResetModel();
+ if (monitored) {
+ m_collectionTreeFetched = false;
+ //TODO m_collectionFetchStrategy;
+ fetchCollections(collection, CollectionFetchJob::Base, EntityTreeModelPrivate::FirstListing);
+ } else {
+ monitoredCollectionRemoved(collection);
+ }
}
void EntityTreeModelPrivate::monitoredItemsChanged(const Akonadi::Item &item, bool monitored)
@@ -616,7 +636,7 @@ void EntityTreeModelPrivate::monitoredResourcesChanged(const QByteArray &resourc
endResetModel();
}
-void EntityTreeModelPrivate::retrieveAncestors(const Akonadi::Collection &collection)
+void EntityTreeModelPrivate::retrieveAncestors(const Akonadi::Collection &collection, bool insertBaseCollection)
{
Q_Q(EntityTreeModel);
@@ -662,13 +682,15 @@ void EntityTreeModelPrivate::retrieveAncestors(const Akonadi::Collection &collec
// about the top-level one. The rest will be found auotmatically by the view.
q->beginInsertRows(parent, row, row);
- m_collections.insert(collection.id(), collection);
- Node *node = new Node;
- node->id = collection.id();
- // Can't just use parentCollection because that doesn't necessarily refer to collection.
- node->parent = collection.parentCollection().id();
- node->type = Node::Collection;
- m_childEntities[node->parent].prepend(node);
+ if (insertBaseCollection) {
+ m_collections.insert(collection.id(), collection);
+ Node *node = new Node;
+ node->id = collection.id();
+ // Can't just use parentCollection because that doesn't necessarily refer to collection.
+ node->parent = collection.parentCollection().id();
+ node->type = Node::Collection;
+ m_childEntities[node->parent].prepend(node);
+ }
Collection::List::const_iterator it = ancestors.constBegin();
const Collection::List::const_iterator end = ancestors.constEnd();
@@ -741,6 +763,11 @@ bool EntityTreeModelPrivate::shouldBePartOfModel(const Collection &collection) c
return true;
}
+ //Explicitly monitored collection
+ if (m_monitor->collectionsMonitored().contains(collection)) {
+ return true;
+ }
+
// Some collection trees contain multiple mimetypes. Even though server side filtering ensures we
// only get the ones we're interested in from the job, we have to filter on collections received through signals too.
if (!m_mimeChecker.wantedMimeTypes().isEmpty() &&
@@ -1270,6 +1297,7 @@ void EntityTreeModelPrivate::monitoredItemUnlinked(const Akonadi::Item &item, co
void EntityTreeModelPrivate::fetchJobDone(KJob *job)
{
+ //This id is only valid for single collection fetchJobs
const Collection::Id collectionId = job->property(FetchCollectionId()).value<Collection::Id>();
if (job->error()) {
@@ -1300,27 +1328,23 @@ void EntityTreeModelPrivate::fetchJobDone(KJob *job)
m_populatedCols.insert(collectionId);
emit q_ptr->collectionPopulated(collectionId);
+ m_pendingCollectionRetrieveJobs.remove(collectionId);
} else {
- if (!m_showRootCollection &&
- collectionId == m_rootCollection.id()) {
- return;
- }
- // If collections are not in the model, there will be no valid index for them.
- if ((m_collectionFetchStrategy != EntityTreeModel::InvisibleCollectionFetch) &&
- (m_collectionFetchStrategy != EntityTreeModel::FetchNoCollections)) {
- const QModelIndex index = indexForCollection(Collection(collectionId));
- Q_ASSERT(index.isValid());
- emit dataChanged(index, index);
+ CollectionFetchJob *collectionFetchJob = static_cast<CollectionFetchJob*>(job);
+ Q_FOREACH (const Akonadi::Collection &col, collectionFetchJob->collections()) {
+ if (!m_showRootCollection &&
+ collectionId == m_rootCollection.id()) {
+ continue;
+ }
+ // If collections are not in the model, there will be no valid index for them.
+ if ((m_collectionFetchStrategy != EntityTreeModel::InvisibleCollectionFetch) &&
+ (m_collectionFetchStrategy != EntityTreeModel::FetchNoCollections)) {
+ const QModelIndex index = indexForCollection(col);
+ Q_ASSERT(index.isValid());
+ emit dataChanged(index, index);
+ }
}
}
-
- if (!m_showRootCollection &&
- collectionId == m_rootCollection.id()) {
- return;
- }
-
- m_pendingCollectionRetrieveJobs.remove(collectionId);
-
}
void EntityTreeModelPrivate::pasteJobDone(KJob *job)
@@ -1422,8 +1446,15 @@ void EntityTreeModelPrivate::startFirstListJob()
const bool noMimetypes = m_mimeChecker.wantedMimeTypes().isEmpty();
const bool noResources = m_monitor->resourcesMonitored().isEmpty();
+ const bool multipleCollections = m_monitor->collectionsMonitored().size() > 1;
const bool generalPopulation = !noMimetypes || (noMimetypes && noResources);
+ //Collections can only be monitored if no resources and no mimetypes are monitored
+ if (multipleCollections && noMimetypes && noResources) {
+ fetchCollections(m_monitor->collectionsMonitored(), CollectionFetchJob::Base, Akonadi::EntityTreeModelPrivate::FirstListing);
+ return;
+ }
+
kDebug() << "GEN" << generalPopulation << noMimetypes << noResources;
// Includes recursive trees. Lower levels are fetched in the onRowsInserted slot if
// necessary.
@@ -1467,15 +1498,26 @@ void EntityTreeModelPrivate::startFirstListJob()
}
}
-void EntityTreeModelPrivate::allCollectionsFetched(const Akonadi::Collection::List &collections)
+void EntityTreeModelPrivate::finalCollectionFetchJobDone(KJob *job)
{
- collectionsFetched(collections);
+ if (job->error()) {
+ kWarning() << job->errorString();
+ return;
+ }
+
+ Akonadi::CollectionFetchJob *fetchJob = static_cast<Akonadi::CollectionFetchJob*>(job);
m_collectionTreeFetched = true;
- emit q_ptr->collectionTreeFetched(collections);
+ emit q_ptr->collectionTreeFetched(fetchJob->collections());
}
void EntityTreeModelPrivate::firstCollectionsFetched(const Akonadi::Collection::List &collections)
{
+ Q_FOREACH (const Akonadi::Collection &collection, collections) {
+ //If we're monitoring collections somewhere in the tree we need to retrieve their ancestors now
+ if (collection.parentCollection() != m_rootCollection) {
+ retrieveAncestors(collection, false);
+ }
+ }
collectionsFetched(collections);
}
@@ -1486,9 +1528,14 @@ void EntityTreeModelPrivate::firstFetchJobDone(KJob *job)
return;
}
- // It is quicker to recursively list from the root again than to do
- // individual listings for each top level item from the first fetch.
- fetchCollections(m_rootCollection, CollectionFetchJob::Recursive);
+ Akonadi::CollectionFetchJob *fetchJob = static_cast<Akonadi::CollectionFetchJob*>(job);
+ //Fetch the remainder of the monitored tree
+ if (!fetchJob->collections().isEmpty()) {
+ fetchCollections(fetchJob->collections(), CollectionFetchJob::Recursive);
+ } else {
+ m_collectionTreeFetched = true;
+ emit q_ptr->collectionTreeFetched(fetchJob->collections());
+ }
}
void EntityTreeModelPrivate::fetchTopLevelCollections() const
diff --git a/akonadi/entitytreemodel_p.h b/akonadi/entitytreemodel_p.h
index 9af6c7d..fcc7277 100644
--- a/akonadi/entitytreemodel_p.h
+++ b/akonadi/entitytreemodel_p.h
@@ -77,9 +77,10 @@ public:
void init(ChangeRecorder *monitor);
void fetchCollections(const Collection &collection, CollectionFetchJob::Type = CollectionFetchJob::FirstLevel, ListingOrder = NotFirstListing);
+ void fetchCollections(const Collection::List &collections, CollectionFetchJob::Type = CollectionFetchJob::FirstLevel, ListingOrder = NotFirstListing);
+ void fetchCollections(Akonadi::CollectionFetchJob *job, ListingOrder = NotFirstListing);
void fetchItems(const Collection &collection);
void collectionsFetched(const Akonadi::Collection::List &);
- void allCollectionsFetched(const Akonadi::Collection::List &);
void firstCollectionsFetched(const Akonadi::Collection::List &);
void collectionListFetched(const Akonadi::Collection::List &);
void itemsFetched(const Akonadi::Item::List &items);
@@ -115,7 +116,7 @@ public:
/**
* Fetch parent collections and insert this @p collection and its parents into the node tree
*/
- void retrieveAncestors(const Akonadi::Collection &collection);
+ void retrieveAncestors(const Akonadi::Collection &collection, bool insertBaseCollection = true);
void ancestorsFetched(const Akonadi::Collection::List &collectionList);
void insertCollection(const Akonadi::Collection &collection, const Akonadi::Collection &parent);
void insertPendingCollection(const Akonadi::Collection &collection, const Akonadi::Collection &parent, QMutableListIterator<Collection> &it);
@@ -177,6 +178,7 @@ public:
void firstFetchJobDone(KJob *job);
void rootFetchJobDone(KJob *job);
void fetchJobDone(KJob *job);
+ void finalCollectionFetchJobDone(KJob *job);
void updateJobDone(KJob *job);
void pasteJobDone(KJob *job);
diff --git a/akonadi/tests/CMakeLists.txt b/akonadi/tests/CMakeLists.txt
index 107cea3..a67b635 100644
--- a/akonadi/tests/CMakeLists.txt
+++ b/akonadi/tests/CMakeLists.txt
@@ -152,3 +152,4 @@ add_akonadi_isolated_test(lazypopulationtest.cpp)
add_akonadi_isolated_test(favoriteproxytest.cpp)
add_akonadi_isolated_test_advanced(itemsearchjobtest.cpp testsearchplugin/testsearchplugin.cpp "")
add_akonadi_isolated_test(tagtest.cpp)
+add_akonadi_isolated_test(etmpopulationtest.cpp)
diff --git a/akonadi/tests/etmpopulationtest.cpp b/akonadi/tests/etmpopulationtest.cpp
new file mode 100644
index 0000000..8af53a2
--- /dev/null
+++ b/akonadi/tests/etmpopulationtest.cpp
@@ -0,0 +1,215 @@
+/*
+ Copyright (c) 2013 Christian Mollekopf <mollekopf at kolabsys.com>
+
+ This library is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or (at your
+ option) any later version.
+
+ This library 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 Library General Public
+ License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301, USA.
+*/
+
+#include <QObject>
+
+#include "test_utils.h"
+
+#include <KStandardDirs>
+#include <akonadi/entitytreemodel.h>
+#include <akonadi/control.h>
+#include <akonadi/entitytreemodel_p.h>
+#include <akonadi/monitor_p.h>
+#include <akonadi/changerecorder_p.h>
+#include <akonadi/qtest_akonadi.h>
+#include <akonadi/collectioncreatejob.h>
+#include <akonadi/itemcreatejob.h>
+
+using namespace Akonadi;
+
+class InspectableETM: public EntityTreeModel
+{
+public:
+ explicit InspectableETM(ChangeRecorder* monitor, QObject* parent = 0)
+ :EntityTreeModel(monitor, parent) {}
+ EntityTreeModelPrivate *etmPrivate() { return d_ptr; };
+};
+
+QModelIndex getIndex(const QString &string, EntityTreeModel *model)
+{
+ QModelIndexList list = model->match( model->index( 0, 0 ), Qt::DisplayRole, string, 1, Qt::MatchRecursive );
+ if ( list.isEmpty() ) {
+ return QModelIndex();
+ }
+ return list.first();
+}
+
+Akonadi::Collection createCollection(const QString &name, const Akonadi::Collection &parent)
+{
+ Akonadi::Collection col;
+ col.setParentCollection(parent);
+ col.setName(name);
+ CollectionCreateJob *create = new CollectionCreateJob(col);
+ create->exec();
+ Q_ASSERT(!create->error());
+ return create->collection();
+}
+
+/**
+ * This is a test for the initial population of the ETM.
+ */
+class EtmPopulationTest : public QObject
+{
+ Q_OBJECT
+
+private Q_SLOTS:
+ void initTestCase();
+ void testMonitoringCollections();
+ void testFullPopulation();
+ void testAddMonitoringCollections();
+ void testRemoveMonitoringCollections();
+
+private:
+ Collection res;
+ static const int numberOfRootCollections = 4;
+ QString mainCollectionName;
+ Collection monitorCol;
+ Collection col1;
+ Collection col2;
+ Collection col3;
+ Collection col4;
+};
+
+void EtmPopulationTest::initTestCase()
+{
+ qRegisterMetaType<Akonadi::Collection::Id>("Akonadi::Collection::Id");
+ AkonadiTest::checkTestIsIsolated();
+ AkonadiTest::setAllResourcesOffline();
+
+ res = Collection( collectionIdFromPath( "res3" ) );
+
+ mainCollectionName = QLatin1String("main");
+ {
+ monitorCol.setParentCollection(res);
+ monitorCol.setName(mainCollectionName);
+ CollectionCreateJob *create = new CollectionCreateJob(monitorCol, this);
+ AKVERIFYEXEC(create);
+ monitorCol = create->collection();
+ }
+
+ col1 = createCollection(QLatin1String("col1"), monitorCol);
+ col2 = createCollection(QLatin1String("col2"), monitorCol);
+ col3 = createCollection(QLatin1String("col3"), monitorCol);
+ col4 = createCollection(QLatin1String("col4"), col2);
+}
+
+
+
+void EtmPopulationTest::testMonitoringCollections()
+{
+ ChangeRecorder *changeRecorder = new ChangeRecorder(this);
+ InspectableETM *model = new InspectableETM(changeRecorder, this);
+ model->setItemPopulationStrategy(EntityTreeModel::ImmediatePopulation);
+ model->setCollectionFetchStrategy(EntityTreeModel::FetchCollectionsRecursive);
+ Akonadi::Collection::List monitored;
+ monitored << col1 << col2;
+ model->setCollectionsMonitored(monitored);
+
+ QTRY_VERIFY(model->isCollectionTreeFetched());
+ QVERIFY(getIndex("col1", model).isValid());
+ QVERIFY(getIndex("col2", model).isValid());
+ QVERIFY(getIndex(mainCollectionName, model).isValid());
+ QVERIFY(!getIndex("col3", model).isValid());
+ QVERIFY(getIndex("col4", model).isValid());
+
+ QTRY_VERIFY(getIndex("col1", model).data(Akonadi::EntityTreeModel::IsPopulatedRole).toBool());
+ QTRY_VERIFY(getIndex("col2", model).data(Akonadi::EntityTreeModel::IsPopulatedRole).toBool());
+ QTRY_VERIFY(!getIndex(mainCollectionName, model).data(Akonadi::EntityTreeModel::IsPopulatedRole).toBool());
+ QTRY_VERIFY(getIndex("col4", model).data(Akonadi::EntityTreeModel::IsPopulatedRole).toBool());
+}
+
+void EtmPopulationTest::testFullPopulation()
+{
+ ChangeRecorder *changeRecorder = new ChangeRecorder(this);
+ changeRecorder->setCollectionMonitored(Akonadi::Collection::root());
+ InspectableETM *model = new InspectableETM(changeRecorder, this);
+ model->setItemPopulationStrategy(EntityTreeModel::ImmediatePopulation);
+ model->setCollectionFetchStrategy(EntityTreeModel::FetchCollectionsRecursive);
+ Akonadi::Collection::List monitored;
+ monitored << col1 << col2;
+
+ QTRY_VERIFY(model->isCollectionTreeFetched());
+ QVERIFY(getIndex("col1", model).isValid());
+ QVERIFY(getIndex("col2", model).isValid());
+ QVERIFY(getIndex(mainCollectionName, model).isValid());
+ QVERIFY(getIndex("col3", model).isValid());
+ QVERIFY(getIndex("col4", model).isValid());
+
+ QTRY_VERIFY(getIndex("col1", model).data(Akonadi::EntityTreeModel::IsPopulatedRole).toBool());
+ QTRY_VERIFY(getIndex("col2", model).data(Akonadi::EntityTreeModel::IsPopulatedRole).toBool());
+ QTRY_VERIFY(getIndex(mainCollectionName, model).data(Akonadi::EntityTreeModel::IsPopulatedRole).toBool());
+ QTRY_VERIFY(getIndex("col4", model).data(Akonadi::EntityTreeModel::IsPopulatedRole).toBool());
+}
+
+void EtmPopulationTest::testAddMonitoringCollections()
+{
+ ChangeRecorder *changeRecorder = new ChangeRecorder(this);
+ InspectableETM *model = new InspectableETM(changeRecorder, this);
+ model->setItemPopulationStrategy(EntityTreeModel::ImmediatePopulation);
+ model->setCollectionFetchStrategy(EntityTreeModel::FetchCollectionsRecursive);
+ Akonadi::Collection::List monitored;
+ monitored << col1 << col2;
+ model->setCollectionsMonitored(monitored);
+
+ QTRY_VERIFY(model->isCollectionTreeFetched());
+ model->setCollectionMonitored(col3, true);
+
+ QTRY_VERIFY(model->isCollectionTreeFetched());
+ QVERIFY(getIndex("col1", model).isValid());
+ QVERIFY(getIndex("col2", model).isValid());
+ QVERIFY(getIndex(mainCollectionName, model).isValid());
+ QVERIFY(getIndex("col3", model).isValid());
+ QVERIFY(getIndex("col4", model).isValid());
+
+ QTRY_VERIFY(getIndex("col1", model).data(Akonadi::EntityTreeModel::IsPopulatedRole).toBool());
+ QTRY_VERIFY(getIndex("col2", model).data(Akonadi::EntityTreeModel::IsPopulatedRole).toBool());
+ QTRY_VERIFY(getIndex("col3", model).data(Akonadi::EntityTreeModel::IsPopulatedRole).toBool());
+ QTRY_VERIFY(!getIndex(mainCollectionName, model).data(Akonadi::EntityTreeModel::IsPopulatedRole).toBool());
+ QTRY_VERIFY(getIndex("col4", model).data(Akonadi::EntityTreeModel::IsPopulatedRole).toBool());
+}
+
+void EtmPopulationTest::testRemoveMonitoringCollections()
+{
+ ChangeRecorder *changeRecorder = new ChangeRecorder(this);
+ InspectableETM *model = new InspectableETM(changeRecorder, this);
+ model->setItemPopulationStrategy(EntityTreeModel::ImmediatePopulation);
+ model->setCollectionFetchStrategy(EntityTreeModel::FetchCollectionsRecursive);
+ Akonadi::Collection::List monitored;
+ monitored << col1 << col2;
+ model->setCollectionsMonitored(monitored);
+
+ QTRY_VERIFY(model->isCollectionTreeFetched());
+ model->setCollectionMonitored(col2, false);
+
+ QTRY_VERIFY(model->isCollectionTreeFetched());
+ QVERIFY(getIndex("col1", model).isValid());
+ QVERIFY(!getIndex("col2", model).isValid());
+ QVERIFY(getIndex(mainCollectionName, model).isValid());
+ QVERIFY(!getIndex("col3", model).isValid());
+ QVERIFY(!getIndex("col4", model).isValid());
+
+ QTRY_VERIFY(getIndex("col1", model).data(Akonadi::EntityTreeModel::IsPopulatedRole).toBool());
+ QTRY_VERIFY(!getIndex("col2", model).data(Akonadi::EntityTreeModel::IsPopulatedRole).toBool());
+ QTRY_VERIFY(!getIndex(mainCollectionName, model).data(Akonadi::EntityTreeModel::IsPopulatedRole).toBool());
+ QTRY_VERIFY(!getIndex("col4", model).data(Akonadi::EntityTreeModel::IsPopulatedRole).toBool());
+}
+
+#include "etmpopulationtest.moc"
+
+QTEST_AKONADIMAIN(EtmPopulationTest, NoGUI)
commit f20db7060f6b5f8e212672b2f462861e1fbe7448
Author: Christian Mollekopf <chrigi_1 at fastmail.fm>
Date: Mon Jun 9 19:02:13 2014 +0200
Referenced support for CollectionModifyJob & Collection
Including CollectionJobTest.
diff --git a/akonadi/collection.cpp b/akonadi/collection.cpp
index 7086db0..e6e4b39 100644
--- a/akonadi/collection.cpp
+++ b/akonadi/collection.cpp
@@ -328,5 +328,21 @@ bool Collection::shouldList(Collection::ListPurpose purpose) const
return (localListPreference(purpose) == ListEnabled);
}
+void Collection::setReferenced(bool referenced)
+{
+ Q_D(Collection);
+
+ if (d->referenced != referenced) {
+ d->referencedChanged = true;
+ }
+ d->referenced = referenced;
+}
+
+bool Collection::referenced() const
+{
+ Q_D(const Collection);
+
+ return d->referenced;
+}
AKONADI_DEFINE_PRIVATE(Akonadi::Collection)
diff --git a/akonadi/collection.h b/akonadi/collection.h
index ac25488..2f8f396 100644
--- a/akonadi/collection.h
+++ b/akonadi/collection.h
@@ -367,6 +367,24 @@ public:
*/
bool shouldList(ListPurpose purpose) const;
+ /**
+ * Sets a collection to be referenced.
+ *
+ * A referenced collection is temporarily shown and synchronized even when disabled.
+ * A reference is only valid for the duration of a session, and is automatically removed afterwards.
+ *
+ * Referenced collections are only visible if explicitly monitored in the ETM.
+ *
+ * @since 4.14
+ */
+ void setReferenced(bool referenced);
+
+ /**
+ * Returns the referenced state of the collection.
+ * @since 4.14
+ */
+ bool referenced() const;
+
private:
AKONADI_DECLARE_PRIVATE(Collection)
friend class CollectionFetchJob;
diff --git a/akonadi/collection_p.h b/akonadi/collection_p.h
index 5ff173e..2a1bb53 100644
--- a/akonadi/collection_p.h
+++ b/akonadi/collection_p.h
@@ -46,6 +46,8 @@ public:
, syncPreference(Collection::ListDefault)
, indexPreference(Collection::ListDefault)
, listPreferenceChanged(false)
+ , referenced(false)
+ , referencedChanged(false)
{}
CollectionPrivate(const CollectionPrivate &other)
@@ -65,6 +67,8 @@ public:
syncPreference = other.syncPreference;
indexPreference = other.indexPreference;
listPreferenceChanged = other.listPreferenceChanged;
+ referenced = other.referenced;
+ referencedChanged = other.referencedChanged;
}
~CollectionPrivate()
@@ -82,6 +86,7 @@ public:
cachePolicyChanged = false;
enabledChanged = false;
listPreferenceChanged = false;
+ referencedChanged = false;
EntityPrivate::resetChangeLog();
}
@@ -109,6 +114,8 @@ public:
Collection::ListPreference syncPreference;
Collection::ListPreference indexPreference;
bool listPreferenceChanged;
+ bool referenced;
+ bool referencedChanged;
};
#endif
diff --git a/akonadi/collectionmodifyjob.cpp b/akonadi/collectionmodifyjob.cpp
index 6ae772e..afc8578 100644
--- a/akonadi/collectionmodifyjob.cpp
+++ b/akonadi/collectionmodifyjob.cpp
@@ -101,6 +101,9 @@ void CollectionModifyJob::doStart()
changes += ' ' + ProtocolHelper::listPreference(Collection::ListSync, d->mCollection.localListPreference(Collection::ListSync));
changes += ' ' + ProtocolHelper::listPreference(Collection::ListIndex, d->mCollection.localListPreference(Collection::ListIndex));
}
+ if (d->mCollection.d_func()->referencedChanged) {
+ changes += ' ' + ProtocolHelper::referenced(d->mCollection.referenced());
+ }
if (d->mCollection.attributes().count() > 0) {
changes += ' ' + ProtocolHelper::attributesToByteArray(d->mCollection);
}
diff --git a/akonadi/protocolhelper.cpp b/akonadi/protocolhelper.cpp
index 7e98b77..b7980ee 100644
--- a/akonadi/protocolhelper.cpp
+++ b/akonadi/protocolhelper.cpp
@@ -215,6 +215,8 @@ int ProtocolHelper::parseCollection(const QByteArray & data, Collection & collec
collection.setLocalListPreference( Collection::ListSync, parsePreference( value ) );
} else if ( key == "INDEX" ) {
collection.setLocalListPreference( Collection::ListIndex, parsePreference( value ) );
+ } else if ( key == "REFERENCED" ) {
+ collection.setReferenced( value == "TRUE" );
} else {
Attribute* attr = AttributeFactory::createAttribute( key );
Q_ASSERT( attr );
@@ -729,3 +731,11 @@ QByteArray ProtocolHelper::enabled(bool state)
}
return "ENABLED FALSE";
}
+
+QByteArray ProtocolHelper::referenced(bool state)
+{
+ if (state) {
+ return "REFERENCED TRUE";
+ }
+ return "REFERENCED FALSE";
+}
diff --git a/akonadi/protocolhelper_p.h b/akonadi/protocolhelper_p.h
index b0303a3..844d636 100644
--- a/akonadi/protocolhelper_p.h
+++ b/akonadi/protocolhelper_p.h
@@ -236,6 +236,7 @@ public:
static QByteArray listPreference(Collection::ListPurpose purpose, Collection::ListPreference preference);
static QByteArray enabled(bool);
+ static QByteArray referenced(bool);
};
}
diff --git a/akonadi/tests/collectionjobtest.cpp b/akonadi/tests/collectionjobtest.cpp
index 566398d..59155dd 100644
--- a/akonadi/tests/collectionjobtest.cpp
+++ b/akonadi/tests/collectionjobtest.cpp
@@ -860,5 +860,54 @@ void CollectionJobTest::testListPreference()
AKVERIFYEXEC(deleteJob);
}
+void CollectionJobTest::testReference()
+{
+ Akonadi::Collection baseCol;
+ {
+ baseCol.setParentCollection(Akonadi::Collection(res1ColId));
+ baseCol.setName("base");
+ Akonadi::CollectionCreateJob *create = new Akonadi::CollectionCreateJob(baseCol);
+ AKVERIFYEXEC(create);
+ baseCol = create->collection();
+ }
+
+ {
+ Akonadi::Collection col;
+ col.setParentCollection(baseCol);
+ col.setName("referenced");
+ col.setEnabled(false);
+ {
+ Akonadi::CollectionCreateJob *create = new Akonadi::CollectionCreateJob(col);
+ AKVERIFYEXEC(create);
+ CollectionFetchJob *job = new CollectionFetchJob(create->collection(), CollectionFetchJob::Base);
+ AKVERIFYEXEC(job);
+ col = job->collections().first();
+ }
+ {
+ col.setReferenced(true);
+ Akonadi::CollectionModifyJob *modify = new Akonadi::CollectionModifyJob(col);
+ AKVERIFYEXEC(modify);
+ CollectionFetchJob *job = new CollectionFetchJob(col, CollectionFetchJob::Base);
+ AKVERIFYEXEC(job);
+ Akonadi::Collection result = job->collections().first();
+ QCOMPARE(result.enabled(), false);
+ QCOMPARE(result.referenced(), true);
+ }
+ {
+ col.setReferenced(false);
+ Akonadi::CollectionModifyJob *modify = new Akonadi::CollectionModifyJob(col);
+ AKVERIFYEXEC(modify);
+ CollectionFetchJob *job = new CollectionFetchJob(col, CollectionFetchJob::Base);
+ AKVERIFYEXEC(job);
+ Akonadi::Collection result = job->collections().first();
+ QCOMPARE(result.enabled(), false);
+ QCOMPARE(result.referenced(), false);
+ }
+ }
+
+ //Cleanup
+ CollectionDeleteJob *deleteJob = new CollectionDeleteJob(baseCol);
+ AKVERIFYEXEC(deleteJob);
+}
-#include "collectionjobtest.moc"
\ No newline at end of file
+#include "collectionjobtest.moc"
diff --git a/akonadi/tests/collectionjobtest.h b/akonadi/tests/collectionjobtest.h
index 233bf0d..14b0fd0 100644
--- a/akonadi/tests/collectionjobtest.h
+++ b/akonadi/tests/collectionjobtest.h
@@ -53,6 +53,7 @@ class CollectionJobTest : public QObject
void testRidCreateDelete();
void testAncestorRetrieval();
void testListPreference();
+ void testReference();
};
#endif
commit d1911e709db801b224b9196a5e2e1bd7bb1a8d11
Author: Christian Mollekopf <chrigi_1 at fastmail.fm>
Date: Sat Jun 7 00:05:51 2014 +0200
ETM-Test: Only trigger the event loop but don't wait any longer.
diff --git a/akonadi/tests/entitytreemodeltest.cpp b/akonadi/tests/entitytreemodeltest.cpp
index dd8bcbe..19145ae 100644
--- a/akonadi/tests/entitytreemodeltest.cpp
+++ b/akonadi/tests/entitytreemodeltest.cpp
@@ -64,6 +64,11 @@ static const QString serverContent1 =
"- - - I message/rfc822 'Item 14'"
"- - - I message/rfc822 'Item 15'";
+/**
+ * This test verifies that the ETM reacts as expected to signals from the monitor.
+ *
+ * The tested ETM is only talking to fake components so the reaction of the ETM to each signal can be tested.
+ */
class EntityTreeModelTest : public QObject
{
Q_OBJECT
@@ -211,7 +216,7 @@ void EntityTreeModelTest::testInitialFetch()
m_modelSpy->setExpectedSignals( expectedSignals );
// Give the model a chance to run the event loop to process the signals.
- QTest::qWait(10);
+ QTest::qWait(0);
// We get all the signals we expected.
QVERIFY(m_modelSpy->expectedSignals().isEmpty());
@@ -271,7 +276,7 @@ void EntityTreeModelTest::testCollectionMove()
serverData->processNotifications();
// Give the model a change to run the event loop to process the signals.
- QTest::qWait(10);
+ QTest::qWait(0);
QVERIFY( m_modelSpy->isEmpty() );
}
@@ -315,7 +320,7 @@ void EntityTreeModelTest::testCollectionAdded()
serverData->processNotifications();
// Give the model a change to run the event loop to process the signals.
- QTest::qWait(10);
+ QTest::qWait(0);
QVERIFY( m_modelSpy->isEmpty() );
}
@@ -364,7 +369,7 @@ void EntityTreeModelTest::testCollectionRemoved()
serverData->processNotifications();
// Give the model a change to run the event loop to process the signals.
- QTest::qWait(10);
+ QTest::qWait(0);
QVERIFY( m_modelSpy->isEmpty() );
}
@@ -416,7 +421,7 @@ void EntityTreeModelTest::testCollectionChanged()
serverData->processNotifications();
// Give the model a change to run the event loop to process the signals.
- QTest::qWait(100);
+ QTest::qWait(0);
QVERIFY( m_modelSpy->isEmpty() );
}
@@ -475,7 +480,7 @@ void EntityTreeModelTest::testItemMove()
serverData->processNotifications();
// Give the model a change to run the event loop to process the signals.
- QTest::qWait(10);
+ QTest::qWait(0);
QVERIFY( m_modelSpy->isEmpty() );
}
@@ -524,7 +529,7 @@ void EntityTreeModelTest::testItemAdded()
serverData->processNotifications();
// Give the model a change to run the event loop to process the signals.
- QTest::qWait(10);
+ QTest::qWait(0);
QVERIFY( m_modelSpy->isEmpty() );
}
@@ -580,7 +585,7 @@ void EntityTreeModelTest::testItemRemoved()
serverData->processNotifications();
// Give the model a change to run the event loop to process the signals.
- QTest::qWait(10);
+ QTest::qWait(0);
QVERIFY( m_modelSpy->isEmpty() );
}
@@ -635,7 +640,7 @@ void EntityTreeModelTest::testItemChanged()
serverData->processNotifications();
// Give the model a change to run the event loop to process the signals.
- QTest::qWait(10);
+ QTest::qWait(0);
QVERIFY( m_modelSpy->isEmpty() );
}
commit a2940129c6a2209a1cfcabad9541e4cf92955522
Author: Christian Mollekopf <chrigi_1 at fastmail.fm>
Date: Sat Jun 7 00:04:53 2014 +0200
ETM: Only keep collection if it has subcollections.
Otherwise a disabled collection that contains items is never removed.
diff --git a/akonadi/entitytreemodel_p.cpp b/akonadi/entitytreemodel_p.cpp
index b4d292b..f12f96f 100644
--- a/akonadi/entitytreemodel_p.cpp
+++ b/akonadi/entitytreemodel_p.cpp
@@ -719,6 +719,16 @@ void EntityTreeModelPrivate::insertCollection(const Akonadi::Collection &collect
q->endInsertRows();
}
+bool EntityTreeModelPrivate::hasChildCollection(const Collection &collection) const
+{
+ foreach (Node *node, m_childEntities[collection.id()]) {
+ if (node->type == Node::Collection) {
+ return true;
+ }
+ }
+ return false;
+}
+
bool EntityTreeModelPrivate::shouldBePartOfModel(const Collection &collection) const
{
if (isHidden(collection)) {
@@ -727,7 +737,7 @@ bool EntityTreeModelPrivate::shouldBePartOfModel(const Collection &collection) c
// We want a parent collection if it has at least one child that matches the
// wanted mimetype
- if (m_childEntities.contains(collection.id())) {
+ if (hasChildCollection(collection)) {
return true;
}
diff --git a/akonadi/entitytreemodel_p.h b/akonadi/entitytreemodel_p.h
index ecd3c67..9af6c7d 100644
--- a/akonadi/entitytreemodel_p.h
+++ b/akonadi/entitytreemodel_p.h
@@ -303,6 +303,7 @@ public:
* * content mime types
*/
bool shouldBePartOfModel(const Collection &collection) const;
+ bool hasChildCollection(const Collection &collection) const;
};
}
diff --git a/akonadi/tests/entitytreemodeltest.cpp b/akonadi/tests/entitytreemodeltest.cpp
index d98df38..dd8bcbe 100644
--- a/akonadi/tests/entitytreemodeltest.cpp
+++ b/akonadi/tests/entitytreemodeltest.cpp
@@ -88,6 +88,7 @@ private Q_SLOTS:
void testItemRemoved();
void testItemChanged_data();
void testItemChanged();
+ void testRemoveCollectionOnChanged();
private:
ExpectedSignal getExpectedSignal( SignalType type, int start, int end, const QVariantList newData)
@@ -639,6 +640,44 @@ void EntityTreeModelTest::testItemChanged()
QVERIFY( m_modelSpy->isEmpty() );
}
+void EntityTreeModelTest::testRemoveCollectionOnChanged()
+{
+ const QString serverContent =
+ "- C (inode/directory, text/directory) 'Col 1' 1"
+ "- - C (text/directory) 'Col 2' 2"
+ "- - - I text/directory 'Item 1'";
+ const QString collectionName = "Col 2";
+ const QString monitoredMimeType = QString::fromLatin1("text/directory");
+
+ QPair<FakeServerData*, Akonadi::EntityTreeModel*> testDrivers = populateModel( serverContent, monitoredMimeType );
+ FakeServerData *serverData = testDrivers.first;
+ Akonadi::EntityTreeModel *model = testDrivers.second;
+
+ QModelIndexList list = model->match( model->index( 0, 0 ), Qt::DisplayRole, collectionName, 1, Qt::MatchRecursive );
+ Q_ASSERT( !list.isEmpty() );
+ QModelIndex changedIndex = list.first();
+ Akonadi::Collection changedCol = changedIndex.data(Akonadi::EntityTreeModel::CollectionRole).value<Akonadi::Collection>();
+ changedCol.setContentMimeTypes(QStringList() << "foobar");
+ QString parentCollection = changedIndex.parent().data().toString();
+
+ FakeCollectionChangedCommand *changeCommand = new FakeCollectionChangedCommand( changedCol, serverData );
+
+ m_modelSpy->startSpying();
+ serverData->setCommands( QList<FakeAkonadiServerCommand*>() << changeCommand );
+
+ QList<ExpectedSignal> expectedSignals;
+ expectedSignals << getExpectedSignal( RowsAboutToBeRemoved, changedIndex.row(), changedIndex.row(), parentCollection, QVariantList() << collectionName );
+ expectedSignals << getExpectedSignal( RowsRemoved, changedIndex.row(), changedIndex.row(), parentCollection, QVariantList() << collectionName );
+
+ m_modelSpy->setExpectedSignals( expectedSignals );
+ serverData->processNotifications();
+
+ // Give the model a chance to run the event loop to process the signals.
+ QTest::qWait(0);
+
+ QVERIFY( m_modelSpy->isEmpty() );
+}
+
#include "entitytreemodeltest.moc"
QTEST_KDEMAIN(EntityTreeModelTest, NoGUI)
diff --git a/akonadi/tests/fakeakonadiservercommand.cpp b/akonadi/tests/fakeakonadiservercommand.cpp
index e715595..ad30f40 100644
--- a/akonadi/tests/fakeakonadiservercommand.cpp
+++ b/akonadi/tests/fakeakonadiservercommand.cpp
@@ -303,6 +303,10 @@ void FakeCollectionRemovedCommand::doCommand()
void FakeCollectionChangedCommand::doCommand()
{
+ if ( m_collection.isValid() ) {
+ emit_monitoredCollectionChanged( m_collection );
+ return;
+ }
Collection collection = getCollectionByDisplayName( m_collectionName );
Collection parent = getCollectionByDisplayName( m_parentName );
diff --git a/akonadi/tests/fakeakonadiservercommand.h b/akonadi/tests/fakeakonadiservercommand.h
index 3dd928c..88ee35c 100644
--- a/akonadi/tests/fakeakonadiservercommand.h
+++ b/akonadi/tests/fakeakonadiservercommand.h
@@ -157,11 +157,18 @@ public:
}
+ FakeCollectionChangedCommand( const Akonadi::Collection &collection, FakeServerData *serverData )
+ : FakeMonitorCommand( serverData ), m_collection( collection )
+ {
+
+ }
+
virtual ~FakeCollectionChangedCommand() {}
/* reimp */ void doCommand();
private:
+ Akonadi::Collection m_collection;
QString m_collectionName;
QString m_parentName;
};
commit 01e473cd2c5810413797c2849c7ca81eac2eab64
Author: Christian Mollekopf <chrigi_1 at fastmail.fm>
Date: Wed Jun 11 14:27:21 2014 +0200
Collection: Only set enabledChanged if it has changed.
The code before would reset enabledChanged to false should we i.e. call
setEnabled(true) twice
diff --git a/akonadi/collection.cpp b/akonadi/collection.cpp
index 42f1f0a..7086db0 100644
--- a/akonadi/collection.cpp
+++ b/akonadi/collection.cpp
@@ -274,7 +274,9 @@ void Collection::setEnabled(bool enabled)
{
Q_D(Collection);
- d->enabledChanged = (enabled != d->enabled);
+ if (enabled != d->enabled) {
+ d->enabledChanged = true;
+ }
d->enabled = enabled;
}
commit 67f978cac69bf5c58225108fd08e487a6b8da64b
Author: Dan Vrátil <dvratil at redhat.com>
Date: Mon Jun 16 11:00:56 2014 +0200
Exclude mailtransport-messagequeuejobtest from default test suite
messagequeuejobtest requires akonadi_maildispatcher_agent from
kdepim-runtime, which is not available on Jenkins when kdepimlibs
is being built.
To enable the test locally, run cmake with
-DKDEPIMLIBS_RUN_KDEPIMRUNTIME_ISOLATED_TESTS=TRUE
diff --git a/mailtransport/tests/CMakeLists.txt b/mailtransport/tests/CMakeLists.txt
index c3ba0b6..e2e2c3c 100644
--- a/mailtransport/tests/CMakeLists.txt
+++ b/mailtransport/tests/CMakeLists.txt
@@ -67,5 +67,7 @@ target_link_libraries( abort ${KDE4_KDEUI_LIBS} mailtransport akonadi-kde)
# Akonadi testrunner-based tests:
add_akonadi_isolated_test( attributetest.cpp unittestenv )
-add_akonadi_isolated_test( messagequeuejobtest.cpp unittestenv )
add_akonadi_isolated_test( filteractiontest.cpp unittestenv_akonadi )
+if (KDEPIMLIBS_RUN_KDEPIMRUNTIME_ISOLATED_TESTS)
+ add_akonadi_isolated_test( messagequeuejobtest.cpp unittestenv )
+endif ()
\ No newline at end of file
commit f487f7dca7b657d65814cfffcb9a6f98f2dab462
Author: Dan Vrátil <dvratil at redhat.com>
Date: Mon Jun 16 10:28:45 2014 +0200
MonitorTest: Toggle resource offline after resolving the test collection
diff --git a/akonadi/tests/monitortest.cpp b/akonadi/tests/monitortest.cpp
index 839612f..d046153 100644
--- a/akonadi/tests/monitortest.cpp
+++ b/akonadi/tests/monitortest.cpp
@@ -57,9 +57,10 @@ void MonitorTest::initTestCase()
{
AkonadiTest::checkTestIsIsolated();
Control::start();
- AkonadiTest::setAllResourcesOffline();
res3 = Collection( collectionIdFromPath( "res3" ) );
+
+ AkonadiTest::setAllResourcesOffline();
}
void MonitorTest::testMonitor_data()
@@ -106,7 +107,7 @@ void MonitorTest::testMonitor()
qRegisterMetaType<Akonadi::CollectionStatistics>();
qRegisterMetaType<QSet<QByteArray> >();
QSignalSpy caddspy( monitor, SIGNAL(collectionAdded(Akonadi::Collection,Akonadi::Collection)) );
- QSignalSpy cmodspy( monitor, SIGNAL(collectionChanged(Akonadi::Collection)) );
+ QSignalSpy cmodspy( monitor, SIGNAL(collectionChanged(Akonadi::Collection,QSet<QByteArray>)) );
QSignalSpy cmvspy( monitor, SIGNAL(collectionMoved(Akonadi::Collection,Akonadi::Collection,Akonadi::Collection)) );
QSignalSpy crmspy( monitor, SIGNAL(collectionRemoved(Akonadi::Collection)) );
QSignalSpy cstatspy( monitor, SIGNAL(collectionStatisticsChanged(Akonadi::Collection::Id,Akonadi::CollectionStatistics)) );
commit d27058932fbfd1bbeedce9f9144dae42804fddb4
Author: Dan Vrátil <dvratil at redhat.com>
Date: Wed Jun 11 19:48:18 2014 +0200
Run akonadi/kmime unit-tests only when KDEPIMLIBS_RUN_KDEPIMRUNTIME_ISOLATED_TESTS is defined
These tests depend on the akonadi_maildir_resource, which is provided by
kdepim-runtime, so they cannot be run in Jenkins, where kdepim-runtime is
not available during kdepimlibs compilation, as that would create circular
dependencies.
Also the KMime tests are quite broken (since a long time) and I don't really
understand how to fix them.
diff --git a/akonadi/kmime/tests/CMakeLists.txt b/akonadi/kmime/tests/CMakeLists.txt
index 1a2cfc2..1f1e4b6 100644
--- a/akonadi/kmime/tests/CMakeLists.txt
+++ b/akonadi/kmime/tests/CMakeLists.txt
@@ -54,9 +54,8 @@ macro(add_akonadi_isolated_test _source)
endmacro()
-
-
-add_akonadi_isolated_test( localfolderstest.cpp )
-add_akonadi_isolated_test( localfoldersrequestjobtest.cpp )
-add_akonadi_isolated_test( racetest.cpp )
-
+if (KDEPIMLIBS_RUN_KDEPIMRUNTIME_ISOLATED_TESTS)
+ add_akonadi_isolated_test( localfolderstest.cpp )
+ add_akonadi_isolated_test( localfoldersrequestjobtest.cpp )
+ add_akonadi_isolated_test( racetest.cpp )
+endif()
commit fc74b3e27fe4cb637c689c46760a28401f3085dd
Author: Dan Vrátil <dvratil at redhat.com>
Date: Wed Jun 11 19:45:27 2014 +0200
LocalFoldersTest: reset the defaultResourceId config value
From previous testcases, the defaultResourceId is set to akonadi_knut_resource,
but this test-case expects maildir.
diff --git a/akonadi/kmime/tests/localfolderstest.cpp b/akonadi/kmime/tests/localfolderstest.cpp
index 4a85cb1..e4792ca 100644
--- a/akonadi/kmime/tests/localfolderstest.cpp
+++ b/akonadi/kmime/tests/localfolderstest.cpp
@@ -494,10 +494,15 @@ void LocalFoldersTest::testResourceScan()
AKVERIFYEXEC(djob);
djob = new CollectionDeleteJob(intruder, this);
AKVERIFYEXEC(djob);
+
+ SpecialMailCollections::self()->destroy();
}
void LocalFoldersTest::testDefaultResourceJob()
{
+ SpecialMailCollectionsTesting *scmt = SpecialMailCollectionsTesting::_t_self();
+ scmt->_t_setDefaultResourceId(QLatin1String("akonadi_maildir_resource"));
+
// Initially the defaut maildir does not exist.
QVERIFY(!QFile::exists(KGlobal::dirs()->localxdgdatadir() + QLatin1String("local-mail")));
commit 7a16af2ee47df03e44eb2277c2c358ec2c687f34
Author: Dan Vrátil <dvratil at redhat.com>
Date: Wed Jun 11 19:44:28 2014 +0200
LocalFoldersTest: include Akonadi instance name in org.kde.pim service name
diff --git a/akonadi/kmime/tests/localfolderstest.cpp b/akonadi/kmime/tests/localfolderstest.cpp
index a7c6015..4a85cb1 100644
--- a/akonadi/kmime/tests/localfolderstest.cpp
+++ b/akonadi/kmime/tests/localfolderstest.cpp
@@ -38,6 +38,7 @@
#include <akonadi/collectionfetchjob.h>
#include <akonadi/collectionmodifyjob.h>
#include <akonadi/control.h>
+#include <akonadi/servermanager.h>
#include <akonadi/qtest_akonadi.h>
#include "../../specialcollectionattribute_p.h"
#include "../../specialcollections_p.h"
@@ -87,7 +88,11 @@ void LocalFoldersTest::initTestCase()
void LocalFoldersTest::testLock()
{
- const QString dbusName = QString::fromLatin1("org.kde.pim.SpecialCollections");
+ QString dbusName = QString::fromLatin1("org.kde.pim.SpecialCollections");
+ if (ServerManager::hasInstanceIdentifier()) {
+ dbusName += Akonadi::ServerManager::instanceIdentifier();
+ }
+
// Initially not locked.
QVERIFY(!DBusConnectionPool::threadConnection().interface()->isServiceRegistered(dbusName));
commit d589301ab99a5074abcb88f93fd3113006f209cf
Author: Dan Vrátil <dvratil at redhat.com>
Date: Wed Jun 11 19:11:24 2014 +0200
SpecialMailCollectionsTesting: write settings directly to file
SMCT and SMC use different instances of KConfigSkeleton, so just storing
the configuration in variable is not enough, we need to actually write it
to the config file, to make sure that SMC picks up the changes.
diff --git a/akonadi/kmime/specialmailcollectionstesting.cpp b/akonadi/kmime/specialmailcollectionstesting.cpp
index ebbc459..0b24971 100644
--- a/akonadi/kmime/specialmailcollectionstesting.cpp
+++ b/akonadi/kmime/specialmailcollectionstesting.cpp
@@ -38,7 +38,8 @@ SpecialMailCollectionsTesting *SpecialMailCollectionsTesting::_t_self()
void SpecialMailCollectionsTesting::_t_setDefaultResourceId(const QString &resourceId)
{
- Settings::setDefaultResourceId(resourceId);
+ Settings::self()->defaultResourceIdItem()->setValue(resourceId);
+ Settings::self()->writeConfig();
}
void SpecialMailCollectionsTesting::_t_forgetFoldersForResource(const QString &resourceId)
commit 438ebe5d642fed76957e373e838257c3308867a1
Author: Dan Vrátil <dvratil at redhat.com>
Date: Wed Jun 11 18:00:01 2014 +0200
Comparing two invalid Entities should always return true
Every time a new invalid Entity is constructed, it's assigned a decremental
negative number. Since two invalid Entities always have different negative
numbers, simple Item() == Item() comparision would return false, as internally
only IDs were compared. From logical point of view it makes however sense
for invalid Entities to be considered equal.
As of now, operator==() and operator!=() takes entity validity in consideration,
so Item() == Item() is always true and Item() != Item() is always false.
diff --git a/akonadi/entity.cpp b/akonadi/entity.cpp
index bf5ce5c..6bade85 100644
--- a/akonadi/entity.cpp
+++ b/akonadi/entity.cpp
@@ -101,12 +101,13 @@ bool Entity::isValid() const
bool Entity::operator==(const Entity &other) const
{
- return (d_ptr->mId == other.d_ptr->mId);
+ // Invalid items are the same, no matter what their internal ID is
+ return (!isValid() && !other.isValid()) || (d_ptr->mId == other.d_ptr->mId);
}
bool Akonadi::Entity::operator!=(const Entity &other) const
{
- return d_ptr->mId != other.d_ptr->mId;
+ return (isValid() || other.isValid()) && (d_ptr->mId != other.d_ptr->mId);
}
Entity &Entity ::operator=(const Entity &other)
diff --git a/akonadi/tests/itemtest.cpp b/akonadi/tests/itemtest.cpp
index 5eaf57c..9fec0be 100644
--- a/akonadi/tests/itemtest.cpp
+++ b/akonadi/tests/itemtest.cpp
@@ -93,3 +93,31 @@ void ItemTest::testParentCollection ()
b = g;
QCOMPARE( b.parentCollection(), col );
}
+
+void ItemTest::testComparision_data()
+{
+ QTest::addColumn<Akonadi::Item>("itemA");
+ QTest::addColumn<Akonadi::Item>("itemB");
+ QTest::addColumn<bool>("match");
+
+ QTest::newRow("both invalid, same invalid IDs") << Item(-10) << Item(-10) << true;
+ QTest::newRow("both invalid, different invalid IDs") << Item(-11) << Item(-12) << true;
+ QTest::newRow("one valid") << Item(1) << Item() << false;
+ QTest::newRow("both valid, same IDs") << Item(2) << Item(2) << true;
+ QTest::newRow("both valid, different IDs") << Item(3) << Item(4) << false;
+}
+
+void ItemTest::testComparision()
+{
+ QFETCH(Akonadi::Item, itemA);
+ QFETCH(Akonadi::Item, itemB);
+ QFETCH(bool, match);
+
+ if (match) {
+ QVERIFY(itemA == itemB);
+ QVERIFY(!(itemA != itemB));
+ } else {
+ QVERIFY(itemA != itemB);
+ QVERIFY(!(itemA == itemB));
+ }
+}
diff --git a/akonadi/tests/itemtest.h b/akonadi/tests/itemtest.h
index 16f2595..b598ff2 100644
--- a/akonadi/tests/itemtest.h
+++ b/akonadi/tests/itemtest.h
@@ -29,6 +29,9 @@ class ItemTest : public QObject
void testMultipart();
void testInheritance();
void testParentCollection();
+
+ void testComparision_data();
+ void testComparision();
};
#endif
commit b80ad5009c38d87379079ef82cae793101ca1a37
Author: Dan Vrátil <dvratil at redhat.com>
Date: Wed Jun 11 16:04:31 2014 +0200
Run akonadi/kmime isolated test against SQLite, not MySQL
There's really no reason to start MySQL for a unit-test if we can use
SQLite now just fine.
diff --git a/akonadi/kmime/tests/unittestenv/config.xml b/akonadi/kmime/tests/unittestenv/config.xml
index 88cdde8..57e05d3 100644
--- a/akonadi/kmime/tests/unittestenv/config.xml
+++ b/akonadi/kmime/tests/unittestenv/config.xml
@@ -4,4 +4,6 @@
<datahome>xdglocal</datahome>
<agent synchronize="true">akonadi_knut_resource</agent>
<envvar name="AKONADI_DISABLE_AGENT_AUTOSTART">true</envvar>
+ <envvar name="TESTRUNNER_DB_ENVIRONMENT">sqlite</envvar>
+ <envvar name="AKONADI_OVERRIDE_SEARCHPLUGIN">akonadi_test_searchplugin</envvar>
</config>
diff --git a/akonadi/kmime/tests/unittestenv/xdgconfig/akonadi/akonadiserverrc b/akonadi/kmime/tests/unittestenv/xdgconfig/akonadi/akonadiserverrc
index 7f738ce..1790d7e 100644
--- a/akonadi/kmime/tests/unittestenv/xdgconfig/akonadi/akonadiserverrc
+++ b/akonadi/kmime/tests/unittestenv/xdgconfig/akonadi/akonadiserverrc
@@ -1,4 +1,7 @@
[%General]
+# This is a slightly adjusted version of the QSQLITE driver from Qt
+# It is provided by akonadi itself
+Driver=QSQLITE3
[Search]
Manager=Dummy
commit 9f5cbb10975f3b27f06cd1a24f212378e4a68bf0
Author: Dan Vrátil <dvratil at redhat.com>
Date: Wed Jun 11 15:57:06 2014 +0200
Disable itembenchmarktest for now
Benchmarks are cool, but only if you have anything to compare the results
again, which we don't. Any major performance regressions will be spotted
by devs anyway, so there's little point running the benchmark, which takes
over 40 seconds, on Jenkins.
Developers can run it locally if they wish.
diff --git a/akonadi/tests/CMakeLists.txt b/akonadi/tests/CMakeLists.txt
index e2a4e24..107cea3 100644
--- a/akonadi/tests/CMakeLists.txt
+++ b/akonadi/tests/CMakeLists.txt
@@ -139,9 +139,14 @@ add_akonadi_isolated_test(linktest.cpp)
add_akonadi_isolated_test(cachetest.cpp)
# starting/stopping the server in the testenvironment doesn't seem to work,
# and the test is not very critical (we'll notice if we can't start the server), so we disable it for now.
-# add_akonadi_isolated_test(servermanagertest.cpp)
+#add_akonadi_isolated_test(servermanagertest.cpp)
add_akonadi_isolated_test(collectioncreator.cpp)
-add_akonadi_isolated_test(itembenchmark.cpp)
+
+
+# Having a benchmark is cool if you have any reference to compare against, but this
+# benchmark takes over 40 seconds and does not have any real value to us atm. Major
+# performance regressions would be spotted by devs anyway, so disabling for now.
+#add_akonadi_isolated_test(itembenchmark.cpp)
add_akonadi_isolated_test(gidtest.cpp)
add_akonadi_isolated_test(lazypopulationtest.cpp)
add_akonadi_isolated_test(favoriteproxytest.cpp)
commit 2a150aba64d1ffc4828027ccf01fe7d4bcdf7a49
Author: Dan Vrátil <dvratil at redhat.com>
Date: Wed Jun 11 15:41:55 2014 +0200
Fix MonitorTest's metatype issues and adapt to changes in signal order
This test was broken for a long time due to Qt not supporting qRegisterMetaType
for typedefs correctly. This has been fixed in Qt 4.7, so we can use the test now.
Slight modifications to the test were needed: the order of collectionStatisticsChanged
notifications is reversed in case of item move, and collection(Un)Subscribed signals are
now preceded by collectionChanged() signal.
diff --git a/akonadi/tests/monitortest.cpp b/akonadi/tests/monitortest.cpp
index 6356125..839612f 100644
--- a/akonadi/tests/monitortest.cpp
+++ b/akonadi/tests/monitortest.cpp
@@ -80,7 +80,28 @@ void MonitorTest::testMonitor()
// monitor signals
qRegisterMetaType<Akonadi::Collection>();
- qRegisterMetaType<Akonadi::Collection::Id>();
+ /*
+ qRegisterMetaType<Akonadi::Collection::Id>() registers the type with a
+ name of "qlonglong". Doing
+ qRegisterMetaType<Akonadi::Collection::Id>( "Akonadi::Collection::Id" )
+ doesn't help. (works now , see QTBUG-937 and QTBUG-6833, -- dvratil)
+
+ The problem here is that Akonadi::Collection::Id is a typedef to qlonglong,
+ and qlonglong is already a registered meta type. So the signal spy will
+ give us a QVariant of type Akonadi::Collection::Id, but calling
+ .value<Akonadi::Collection::Id>() on that variant will in fact end up
+ calling qvariant_cast<qlonglong>. From the point of view of QMetaType,
+ Akonadi::Collection::Id and qlonglong are different types, so QVariant
+ can't convert, and returns a default-constructed qlonglong, zero.
+
+ When connecting to a real slot (without QSignalSpy), this problem is
+ avoided, because the casting is done differently (via a lot of void
+ pointers).
+
+ The docs say nothing about qRegisterMetaType -ing a typedef, so I'm not
+ sure if this is a bug or not. (cberzan)
+ */
+ qRegisterMetaType<Akonadi::Collection::Id>("Akonadi::Collection::Id");
qRegisterMetaType<Akonadi::Item>();
qRegisterMetaType<Akonadi::CollectionStatistics>();
qRegisterMetaType<QSet<QByteArray> >();
@@ -149,31 +170,8 @@ void MonitorTest::testMonitor()
QCOMPARE( cstatspy.count(), 1 );
arg = cstatspy.takeFirst();
- QEXPECT_FAIL( "", "Don't know how to handle 'Akonadi::Collection::Id', use qRegisterMetaType to register it. <-- I did this, but it still doesn't work!", Continue );
QCOMPARE( arg.at(0).value<Akonadi::Collection::Id>(), monitorCol.id() );
- /*
- qRegisterMetaType<Akonadi::Collection::Id>() registers the type with a
- name of "qlonglong". Doing
- qRegisterMetaType<Akonadi::Collection::Id>( "Akonadi::Collection::Id" )
- doesn't help.
-
- The problem here is that Akonadi::Collection::Id is a typedef to qlonglong,
- and qlonglong is already a registered meta type. So the signal spy will
- give us a QVariant of type Akonadi::Collection::Id, but calling
- .value<Akonadi::Collection::Id>() on that variant will in fact end up
- calling qvariant_cast<qlonglong>. From the point of view of QMetaType,
- Akonadi::Collection::Id and qlonglong are different types, so QVariant
- can't convert, and returns a default-constructed qlonglong, zero.
-
- When connecting to a real slot (without QSignalSpy), this problem is
- avoided, because the casting is done differently (via a lot of void
- pointers).
-
- The docs say nothing about qRegisterMetaType -ing a typedef, so I'm not
- sure if this is a bug or not. (cberzan)
- */
-
QCOMPARE( iaddspy.count(), 1 );
arg = iaddspy.takeFirst();
Item item = arg.at( 0 ).value<Item>();
@@ -200,7 +198,6 @@ void MonitorTest::testMonitor()
QCOMPARE( cstatspy.count(), 1 );
arg = cstatspy.takeFirst();
- QEXPECT_FAIL( "", "Don't know how to handle 'Akonadi::Collection::Id', use qRegisterMetaType to register it. <-- I did this, but it still doesn't work!", Continue );
QCOMPARE( arg.at(0).value<Collection::Id>(), monitorCol.id() );
QCOMPARE( imodspy.count(), 1 );
@@ -226,15 +223,11 @@ void MonitorTest::testMonitor()
ItemMoveJob *move = new ItemMoveJob( item, res3 );
AKVERIFYEXEC( move );
QVERIFY( QTest::kWaitForSignal( monitor, SIGNAL(collectionStatisticsChanged(Akonadi::Collection::Id,Akonadi::CollectionStatistics)), 1000 ) );
-
QCOMPARE( cstatspy.count(), 2 );
- arg = cstatspy.takeFirst();
- ///TODO: maybe the order is random, i.e. first res3 then monitorCol - fix it once the MetaType issue is resolved
- QEXPECT_FAIL( "", "Don't know how to handle 'Akonadi::Collection::Id', use qRegisterMetaType to register it. <-- I did this, but it still doesn't work!", Continue );
- QCOMPARE( arg.at(0).value<Collection::Id>(), monitorCol.id() );
- arg = cstatspy.takeLast();
- QEXPECT_FAIL( "", "Don't know how to handle 'Akonadi::Collection::Id', use qRegisterMetaType to register it. <-- I did this, but it still doesn't work!", Continue );
+ arg = cstatspy.takeFirst(); // the destination collection
QCOMPARE( arg.at(0).value<Collection::Id>(), res3.id() );
+ arg = cstatspy.takeLast(); // the source collection
+ QCOMPARE( arg.at(0).value<Collection::Id>(), monitorCol.id() );
QCOMPARE( imvspy.count(), 1 );
arg = imvspy.takeFirst();
@@ -262,8 +255,7 @@ void MonitorTest::testMonitor()
QCOMPARE( cstatspy.count(), 1 );
arg = cstatspy.takeFirst();
- QEXPECT_FAIL( "", "Don't know how to handle 'Akonadi::Collection::Id', use qRegisterMetaType to register it. <-- I did this, but it still doesn't work!", Continue );
- QCOMPARE( arg.at(0).value<Collection::Id>(), monitorCol.id() );
+ QCOMPARE( arg.at(0).value<Collection::Id>(), res3.id() );
cmodspy.clear();
QCOMPARE( irmspy.count(), 1 );
@@ -291,7 +283,13 @@ void MonitorTest::testMonitor()
SubscriptionJob *subscribeJob = new SubscriptionJob( this );
subscribeJob->unsubscribe( Collection::List() << subCollection );
AKVERIFYEXEC( subscribeJob );
+ // Wait for unsubscribed signal, it goes after changed, so we can check for both
QVERIFY( QTest::kWaitForSignal( monitor, SIGNAL(collectionUnsubscribed(Akonadi::Collection)), 1000 ) );
+ QCOMPARE( cmodspy.size(), 1 );
+ arg = cmodspy.takeFirst();
+ col = arg.at( 0 ).value<Collection>();
+ QCOMPARE( col.id(), subCollection.id() );
+
QVERIFY( cSubscribedSpy.isEmpty() );
QCOMPARE( cUnsubscribedSpy.size(), 1 );
arg = cUnsubscribedSpy.takeFirst();
@@ -301,7 +299,13 @@ void MonitorTest::testMonitor()
subscribeJob = new SubscriptionJob( this );
subscribeJob->subscribe( Collection::List() << subCollection );
AKVERIFYEXEC( subscribeJob );
+ // Wait for subscribed signal, it goes after changed, so we can check for both
QVERIFY( QTest::kWaitForSignal( monitor, SIGNAL(collectionSubscribed(Akonadi::Collection,Akonadi::Collection)), 1000 ) );
+ QCOMPARE( cmodspy.size(), 1 );
+ arg = cmodspy.takeFirst();
+ col = arg.at( 0 ).value<Collection>();
+ QCOMPARE( col.id(), subCollection.id() );
+
QVERIFY( cUnsubscribedSpy.isEmpty() );
QCOMPARE( cSubscribedSpy.size(), 1 );
arg = cSubscribedSpy.takeFirst();
commit 467468471dbec2bc36c7d8eb20f336345be15722
Author: Montel Laurent <montel at kde.org>
Date: Wed Jun 11 09:26:19 2014 +0200
Pedantic
diff --git a/akonadi/tagmanagementdialog.cpp b/akonadi/tagmanagementdialog.cpp
index e762359..cdc5dfc 100644
--- a/akonadi/tagmanagementdialog.cpp
+++ b/akonadi/tagmanagementdialog.cpp
@@ -32,7 +32,7 @@ struct TagManagementDialog::Private {
Private(KDialog *parent)
: d(parent)
{
- };
+ }
void writeConfig();
void readConfig();
KDialog *d;
commit b07f02e1b6035dbc59af4dab4f58c04b09f829a0
Author: Dan Vrátil <dvratil at redhat.com>
Date: Tue Jun 10 14:41:43 2014 +0200
Fix ItemDeleteTest
Take into account new rules for Tag creation (tag with RID can only
be created by a resource).
diff --git a/akonadi/tests/itemdeletetest.cpp b/akonadi/tests/itemdeletetest.cpp
index b5bcdf3..14b7acc 100644
--- a/akonadi/tests/itemdeletetest.cpp
+++ b/akonadi/tests/itemdeletetest.cpp
@@ -125,7 +125,6 @@ class ItemDeleteTest : public QObject
// Create tag
Tag tag;
tag.setName( QLatin1String( "Tag1" ) );
- tag.setRemoteId( "Tag1" );
tag.setGid( "Tag1" );
TagCreateJob *tjob = new TagCreateJob( tag, this );
AKVERIFYEXEC( tjob );
commit 6a29956a090fb71c9277ebcc5798d463a45fa4ea
Author: Dan Vrátil <dvratil at redhat.com>
Date: Mon Jun 9 11:46:37 2014 +0200
Fix ResourceSchedulerTest
The AttributesSync task type now has a higher priority, reflect it in the test.
diff --git a/akonadi/tests/resourceschedulertest.cpp b/akonadi/tests/resourceschedulertest.cpp
index 543cdb7..7a38c8d 100644
--- a/akonadi/tests/resourceschedulertest.cpp
+++ b/akonadi/tests/resourceschedulertest.cpp
@@ -332,21 +332,21 @@ void ResourceSchedulerTest::testPriorities()
scheduler.taskDone();
QTest::qWait( 1 );
- QCOMPARE( collectionTreeSyncSpy.count(), 1 );
+ QCOMPARE( collectionTreeSyncSpy.count(), 0 );
QCOMPARE( changeReplaySpy.count(), 1 );
QCOMPARE( syncSpy.count(), 0 );
QCOMPARE( fullSyncSpy.count(), 0 );
QCOMPARE( fetchSpy.count(), 1 );
- QCOMPARE( attributesSyncSpy.count(), 0 );
+ QCOMPARE( attributesSyncSpy.count(), 1 );
scheduler.taskDone();
QTest::qWait( 1 );
QCOMPARE( collectionTreeSyncSpy.count(), 1 );
QCOMPARE( changeReplaySpy.count(), 1 );
- QCOMPARE( syncSpy.count(), 1 );
+ QCOMPARE( syncSpy.count(), 0 );
QCOMPARE( fullSyncSpy.count(), 0 );
QCOMPARE( fetchSpy.count(), 1 );
- QCOMPARE( attributesSyncSpy.count(), 0 );
+ QCOMPARE( attributesSyncSpy.count(), 1 );
scheduler.taskDone();
QTest::qWait( 1 );
commit a5052d22053dab185e1415c613ed95c2df331f96
Author: David Faure <faure at kde.org>
Date: Sat Jun 7 10:47:22 2014 +0200
Speed up opening the folder properties dialog in kmail.
An IMAP mail check schedules a large number of tasks.
Tasks that the user is waiting for, such as ItemFetch (reading one mail)
or SyncCollectionAttributes (as called by the folder properties dialog)
should have priority over that.
There might be more types of tasks that the user could potentially be waiting for.
Maybe we could even blacklist instead of whitelist, i.e. put folder-sync tasks
in a low-prio queue, while the default queue would be above it. Not sure.
BUG: 314876 325756
REVIEW: 118602
Conflicts:
akonadi/resourcescheduler_p.h
diff --git a/akonadi/resourcescheduler.cpp b/akonadi/resourcescheduler.cpp
index 0c57a09..dad51a6 100644
--- a/akonadi/resourcescheduler.cpp
+++ b/akonadi/resourcescheduler.cpp
@@ -462,7 +462,8 @@ ResourceScheduler::QueueType ResourceScheduler::queueTypeForTaskType( TaskType t
case RecursiveMoveReplay:
return ChangeReplayQueue;
case FetchItem:
- return ItemFetchQueue;
+ case SyncCollectionAttributes:
+ return UserActionQueue;
default:
return GenericTaskQueue;
}
diff --git a/akonadi/resourcescheduler_p.h b/akonadi/resourcescheduler_p.h
index 8ea8987..3dfaa5f 100644
--- a/akonadi/resourcescheduler_p.h
+++ b/akonadi/resourcescheduler_p.h
@@ -244,19 +244,21 @@ private:
void signalTaskToTracker(const Task &task, const QByteArray &taskType, const QString &debugString = QString());
// We have a number of task queues, by order of priority.
+ // * PrependTaskQueue is for deferring the current task
// * ChangeReplay must be first:
// change replays have to happen before we pull changes from the backend, otherwise
// we will overwrite our still unsaved local changes if the backend can't do
// incremental retrieval
//
// * then the stuff that is "immediately after change replay", like writeFile calls.
- // * then ItemFetch tasks, because they are made by blocking DBus calls
- // * then everything else.
+ // * then tasks which the user is waiting for, like ItemFetch (clicking on a mail) or
+ // SyncCollectionAttributes (folder properties dialog in kmail)
+ // * then everything else (which includes the background email checking, which can take quite some time).
enum QueueType {
PrependTaskQueue,
ChangeReplayQueue, // one task at most
AfterChangeReplayQueue, // also one task at most, currently
- ItemFetchQueue,
+ UserActionQueue,
GenericTaskQueue,
NQueueCount
};
commit 3526ca92527cc1093ee8e7175ecb81f5617b133e
Author: Sergio Martins <iamsergio at gmail.com>
Date: Sat Jun 7 18:48:39 2014 +0100
Relax this organizer check when creating a new event.
It can happen during normal usage, like when copy-pasting an event.
Not sure if we should allow copy-pasting such events though, and if we
do, should we make us the organizer ?
CCMAIL: dfaure at kde.org
diff --git a/akonadi/calendar/itiphandlerhelper_p.cpp b/akonadi/calendar/itiphandlerhelper_p.cpp
index 6eaf5f5..ee3b68a 100644
--- a/akonadi/calendar/itiphandlerhelper_p.cpp
+++ b/akonadi/calendar/itiphandlerhelper_p.cpp
@@ -179,10 +179,9 @@ ITIPHandlerHelper::sendIncidenceCreatedMessage(KCalCore::iTIPMethod method,
/// When we created the incidence, we *must* be the organizer.
if (!weAreOrganizerOf(incidence)) {
- kError() << "We should be the organizer of this incidence!"
+ kWarning() << "Creating incidence which has another organizer! Will skip sending invitations."
<< "; email= " << incidence->organizer()->email()
<< "; thatIsMe() = " << Akonadi::CalendarUtils::thatIsMe(incidence->organizer()->email());
- Q_ASSERT(false);
return ITIPHandlerHelper::ResultFailAbortUpdate;
}
commit a406f9337e519a87b2838b6f8bc68ea8a9fc2be6
Author: David Jarvie <djarvie at kde.org>
Date: Thu Jun 5 23:12:42 2014 +0100
Add tests at time zone shift boundary
diff --git a/kcalcore/tests/testicaltimezones.cpp b/kcalcore/tests/testicaltimezones.cpp
index fadffbb..27c5bb1 100644
--- a/kcalcore/tests/testicaltimezones.cpp
+++ b/kcalcore/tests/testicaltimezones.cpp
@@ -335,6 +335,10 @@ void ICalTimeZonesTest::offsetAtZoneTime()
QVERIFY(tz.isValid());
// Standard time: start of definitions at 2:00:00 local time
+ QCOMPARE(tz.offsetAtZoneTime(QDTLocal(1967,10,29, 0,59,59), &offset2), -4 * 3600);
+ QCOMPARE(offset2, -4 * 3600);
+ QCOMPARE(tz.offsetAtZoneTime(QDTLocal(1967,10,29, 1,0,0), &offset2), -4 * 3600);
+ QCOMPARE(offset2, -5 * 3600);
QCOMPARE(tz.offsetAtZoneTime(QDTLocal(1967,10,29, 1,59,59), &offset2), -4 * 3600);
QCOMPARE(offset2, -5 * 3600);
QCOMPARE(tz.offsetAtZoneTime(QDTLocal(1967,10,29, 2,0,0), &offset2), -5 * 3600);
commit b93c27f9dfba4f382c02b8c5fc9d91e89c8c9d40
Author: David Jarvie <djarvie at kde.org>
Date: Thu Jun 5 01:33:48 2014 +0100
Fix macros setting up date/times
diff --git a/kcalcore/tests/testicaltimezones.cpp b/kcalcore/tests/testicaltimezones.cpp
index ceaaf03..fadffbb 100644
--- a/kcalcore/tests/testicaltimezones.cpp
+++ b/kcalcore/tests/testicaltimezones.cpp
@@ -40,8 +40,8 @@ using namespace KCalCore;
static icalcomponent *loadCALENDAR(const char *vcal);
static icalcomponent *loadVTIMEZONE(const char *vtz);
-#define QDTUtc(y,mo,d,h,mi,s) QDateTime(QDate(y,mo,d), QTime(h,mi,d), Qt::UTC)
-#define QDTLocal(y,mo,d,h,mi,s) QDateTime(QDate(y,mo,d), QTime(h,mi,d), Qt::LocalTime)
+#define QDTUtc(y,mo,d,h,mi,s) QDateTime(QDate(y,mo,d), QTime(h,mi,s), Qt::UTC)
+#define QDTLocal(y,mo,d,h,mi,s) QDateTime(QDate(y,mo,d), QTime(h,mi,s), Qt::LocalTime)
static QDateTime start(QDate(1967,10,29), QTime(6,0,0), Qt::UTC);
static QDateTime daylight87(QDate(1987,4,5), QTime(7,0,0), Qt::UTC);
commit d6dbd0d3a6ddab6df63974b694fca48128702bb1
Author: Christian Mollekopf <chrigi_1 at fastmail.fm>
Date: Thu Jun 5 17:54:41 2014 +0200
Cleanup of support for enabled state.
Includes comments by David Jarvie, thanks!
REVIEW: 118525
diff --git a/akonadi/collection.cpp b/akonadi/collection.cpp
index 61073a2..42f1f0a 100644
--- a/akonadi/collection.cpp
+++ b/akonadi/collection.cpp
@@ -274,7 +274,7 @@ void Collection::setEnabled(bool enabled)
{
Q_D(Collection);
- d->enabledChanged = true;
+ d->enabledChanged = (enabled != d->enabled);
d->enabled = enabled;
}
diff --git a/akonadi/collection.h b/akonadi/collection.h
index e5917a6..ac25488 100644
--- a/akonadi/collection.h
+++ b/akonadi/collection.h
@@ -297,6 +297,13 @@ public:
* This can be used in conjunction with the local list preference for finer grained control
* to define if a collection should be included depending on the purpose.
*
+ * For example: A collection is by default enabled, meaning it is displayed to the user, synchronized by the resource,
+ * and indexed by the indexer. A disabled collection on the other hand is not displayed, sychronized or indexed.
+ * The local list preference allows to locally override that default value for each purpose individually.
+ *
+ * The enabled state can be synchronized by backends.
+ * E.g. an imap resource may synchronize this with the subscription state.
+ *
* @since 4.14
* @see setLocalListPreference
*/
@@ -352,7 +359,7 @@ public:
ListPreference localListPreference(ListPurpose purpose) const;
/**
- * Returns wether the collection should be listed or not for the specified purpose
+ * Returns whether the collection should be listed or not for the specified purpose
* Takes enabled state and local preference into account.
*
* @since 4.14
diff --git a/akonadi/collectionfetchscope.h b/akonadi/collectionfetchscope.h
index 0f14960..a857930 100644
--- a/akonadi/collectionfetchscope.h
+++ b/akonadi/collectionfetchscope.h
@@ -140,7 +140,7 @@ public:
/**
* Sets a filter for the collections to be listed.
*
- * Note that collections that are required to complete the tree, but are not part of the collection are still included in the listing.
+ * Note that collections that do not match the filter are included if required to complete the tree.
*
* @since 4.14
*/
diff --git a/akonadi/entitytreemodel_p.cpp b/akonadi/entitytreemodel_p.cpp
index 76f405f..b4d292b 100644
--- a/akonadi/entitytreemodel_p.cpp
+++ b/akonadi/entitytreemodel_p.cpp
@@ -738,19 +738,19 @@ bool EntityTreeModelPrivate::shouldBePartOfModel(const Collection &collection) c
return false;
}
- if (m_listFilter == CollectionFetchScope::CollectionFetchScope::Enabled) {
+ if (m_listFilter == CollectionFetchScope::Enabled) {
if (!collection.enabled()) {
return false;
}
- } else if (m_listFilter == CollectionFetchScope::CollectionFetchScope::Display) {
+ } else if (m_listFilter == CollectionFetchScope::Display) {
if (!collection.shouldList(Collection::ListDisplay)) {
return false;
}
- } else if (m_listFilter == CollectionFetchScope::CollectionFetchScope::Sync) {
+ } else if (m_listFilter == CollectionFetchScope::Sync) {
if (!collection.shouldList(Collection::ListSync)) {
return false;
}
- } else if (m_listFilter == CollectionFetchScope::CollectionFetchScope::Index) {
+ } else if (m_listFilter == CollectionFetchScope::Index) {
if (!collection.shouldList(Collection::ListIndex)) {
return false;
}
commit 82f4ecf8d7c181a18e9727309175920b90879694
Author: Christian Mollekopf <chrigi_1 at fastmail.fm>
Date: Wed Jun 4 21:23:06 2014 +0200
Support for enabled state and local preference.
This patch replaces local subscriptions with the enabled state + local preferences.
diff --git a/akonadi/collection.cpp b/akonadi/collection.cpp
index 9b12f93..61073a2 100644
--- a/akonadi/collection.cpp
+++ b/akonadi/collection.cpp
@@ -270,4 +270,61 @@ void Akonadi::Collection::setVirtual(bool isVirtual)
d->isVirtual = isVirtual;
}
+void Collection::setEnabled(bool enabled)
+{
+ Q_D(Collection);
+
+ d->enabledChanged = true;
+ d->enabled = enabled;
+}
+
+bool Collection::enabled() const
+{
+ Q_D(const Collection);
+
+ return d->enabled;
+}
+
+void Collection::setLocalListPreference(Collection::ListPurpose purpose, Collection::ListPreference preference)
+{
+ Q_D(Collection);
+
+ switch(purpose) {
+ case ListDisplay:
+ d->displayPreference = preference;
+ break;
+ case ListSync:
+ d->syncPreference = preference;
+ break;
+ case ListIndex:
+ d->indexPreference = preference;
+ break;
+ }
+ d->listPreferenceChanged = true;
+}
+
+Collection::ListPreference Collection::localListPreference(Collection::ListPurpose purpose) const
+{
+ Q_D(const Collection);
+
+ switch(purpose) {
+ case ListDisplay:
+ return d->displayPreference;
+ case ListSync:
+ return d->syncPreference;
+ case ListIndex:
+ return d->indexPreference;
+ }
+ return ListDefault;
+}
+
+bool Collection::shouldList(Collection::ListPurpose purpose) const
+{
+ if (localListPreference(purpose) == ListDefault) {
+ return enabled();
+ }
+ return (localListPreference(purpose) == ListEnabled);
+}
+
+
AKONADI_DEFINE_PRIVATE(Akonadi::Collection)
diff --git a/akonadi/collection.h b/akonadi/collection.h
index 8539a37..e5917a6 100644
--- a/akonadi/collection.h
+++ b/akonadi/collection.h
@@ -288,6 +288,78 @@ public:
*/
void setVirtual(bool isVirtual);
+ /**
+ * Sets the collection's enabled state.
+ *
+ * Use this mechanism to set if a collection should be available
+ * to the user or not.
+ *
+ * This can be used in conjunction with the local list preference for finer grained control
+ * to define if a collection should be included depending on the purpose.
+ *
+ * @since 4.14
+ * @see setLocalListPreference
+ */
+ void setEnabled(bool enabled);
+
+ /**
+ * Returns the collection's enabled state.
+ * @since 4.14
+ * @see localListPreference
+ */
+ bool enabled() const;
+
+ /**
+ * Describes the list preference value
+ *
+ * @since 4.14
+ */
+ enum ListPreference {
+ ListEnabled, ///< Enable collection for specified purpose
+ ListDisabled, ///< Disable collectoin for specified purpose
+ ListDefault ///< Fallback to enabled state
+ };
+
+ /**
+ * Describes the purpose of the listing
+ *
+ * @since 4.14
+ */
+ enum ListPurpose {
+ ListSync, ///< Listing for synchronization
+ ListDisplay, ///< Listing for display to the user
+ ListIndex ///< Listing for indexing the content
+ };
+
+ /**
+ * Sets the local list preference for the specified purpose.
+ *
+ * The local list preference overrides the enabled state unless set to ListDefault.
+ * In case of ListDefault the enabled state should be taken as fallback (shouldList() implements this logic).
+ *
+ * The default value is ListDefault.
+ *
+ * @since 4.14
+ * @see shouldList, setEnabled
+ */
+ void setLocalListPreference(ListPurpose purpose, ListPreference preference);
+
+ /**
+ * Returns the local list preference for the specified purpose.
+ * @since 4.14
+ * @see setLocalListPreference
+ */
+ ListPreference localListPreference(ListPurpose purpose) const;
+
+ /**
+ * Returns wether the collection should be listed or not for the specified purpose
+ * Takes enabled state and local preference into account.
+ *
+ * @since 4.14
+ * @see setLocalListPreference, setEnabled
+ */
+ bool shouldList(ListPurpose purpose) const;
+
private:
AKONADI_DECLARE_PRIVATE(Collection)
friend class CollectionFetchJob;
diff --git a/akonadi/collection_p.h b/akonadi/collection_p.h
index a3e4872..5ff173e 100644
--- a/akonadi/collection_p.h
+++ b/akonadi/collection_p.h
@@ -40,6 +40,12 @@ public:
, contentTypesChanged(false)
, cachePolicyChanged(false)
, isVirtual(false)
+ , enabled(true)
+ , enabledChanged(false)
+ , displayPreference(Collection::ListDefault)
+ , syncPreference(Collection::ListDefault)
+ , indexPreference(Collection::ListDefault)
+ , listPreferenceChanged(false)
{}
CollectionPrivate(const CollectionPrivate &other)
@@ -53,6 +59,12 @@ public:
contentTypesChanged = other.contentTypesChanged;
cachePolicyChanged = other.cachePolicyChanged;
isVirtual = other.isVirtual;
+ enabled = other.enabled;
+ enabledChanged = other.enabledChanged;
+ displayPreference = other.displayPreference;
+ syncPreference = other.syncPreference;
+ indexPreference = other.indexPreference;
+ listPreferenceChanged = other.listPreferenceChanged;
}
~CollectionPrivate()
@@ -68,6 +80,8 @@ public:
{
contentTypesChanged = false;
cachePolicyChanged = false;
+ enabledChanged = false;
+ listPreferenceChanged = false;
EntityPrivate::resetChangeLog();
}
@@ -89,6 +103,12 @@ public:
bool contentTypesChanged: 1;
bool cachePolicyChanged: 1;
bool isVirtual: 1;
+ bool enabled;
+ bool enabledChanged;
+ Collection::ListPreference displayPreference;
+ Collection::ListPreference syncPreference;
+ Collection::ListPreference indexPreference;
+ bool listPreferenceChanged;
};
#endif
diff --git a/akonadi/collectioncreatejob.cpp b/akonadi/collectioncreatejob.cpp
index 7b2f373..c1fd45a 100644
--- a/akonadi/collectioncreatejob.cpp
+++ b/akonadi/collectioncreatejob.cpp
@@ -81,6 +81,10 @@ void CollectionCreateJob::doStart()
command += " REMOTEID " + ImapParser::quote(d->mCollection.remoteId().toUtf8());
command += " REMOTEREVISION " + ImapParser::quote(d->mCollection.remoteRevision().toUtf8());
command += " VIRTUAL " + QByteArray::number(d->mCollection.isVirtual());
+ command += ' ' + ProtocolHelper::enabled(d->mCollection.enabled());
+ command += ' ' + ProtocolHelper::listPreference(Collection::ListDisplay, d->mCollection.localListPreference(Collection::ListDisplay));
+ command += ' ' + ProtocolHelper::listPreference(Collection::ListSync, d->mCollection.localListPreference(Collection::ListSync));
+ command += ' ' + ProtocolHelper::listPreference(Collection::ListIndex, d->mCollection.localListPreference(Collection::ListIndex));
foreach (Attribute *attr, d->mCollection.attributes()) {
command += ' ' + attr->type() + ' ' + ImapParser::quote(attr->serialized());
}
diff --git a/akonadi/collectionfetchjob.cpp b/akonadi/collectionfetchjob.cpp
index 5b17eb8..0d70dea 100644
--- a/akonadi/collectionfetchjob.cpp
+++ b/akonadi/collectionfetchjob.cpp
@@ -220,11 +220,7 @@ void CollectionFetchJob::doStart()
command += " " AKONADI_CMD_RID;
}
}
- if (d->mScope.includeUnsubscribed()) {
- command += " LIST ";
- } else {
- command += " LSUB ";
- }
+ command += " LIST ";
if (d->mBase.isValid()) {
command += QByteArray::number(d->mBase.id());
@@ -266,6 +262,25 @@ void CollectionFetchJob::doStart()
filter.append('(' + ImapParser::join(mts, " ") + ')');
}
+ switch (d->mScope.listFilter()) {
+ case CollectionFetchScope::Display:
+ filter.append("DISPLAY TRUE");
+ break;
+ case CollectionFetchScope::Sync:
+ filter.append("SYNC TRUE");
+ break;
+ case CollectionFetchScope::Index:
+ filter.append("INDEX TRUE");
+ break;
+ case CollectionFetchScope::Enabled:
+ filter.append("ENABLED TRUE");
+ break;
+ case CollectionFetchScope::NoFilter:
+ break;
+ default:
+ Q_ASSERT(false);
+ }
+
QList<QByteArray> options;
if (d->mScope.includeStatistics()) {
options.append("STATISTICS");
diff --git a/akonadi/collectionfetchscope.cpp b/akonadi/collectionfetchscope.cpp
index 9636e25..c4232df 100644
--- a/akonadi/collectionfetchscope.cpp
+++ b/akonadi/collectionfetchscope.cpp
@@ -30,8 +30,8 @@ class CollectionFetchScopePrivate : public QSharedData
public:
CollectionFetchScopePrivate()
: ancestorDepth(CollectionFetchScope::None)
- , unsubscribed(false)
, statistics(false)
+ , listFilter(CollectionFetchScope::Enabled)
{
}
@@ -41,7 +41,6 @@ public:
resource = other.resource;
contentMimeTypes = other.contentMimeTypes;
ancestorDepth = other.ancestorDepth;
- unsubscribed = other.unsubscribed;
statistics = other.statistics;
}
@@ -49,8 +48,8 @@ public:
QString resource;
QStringList contentMimeTypes;
CollectionFetchScope::AncestorRetrieval ancestorDepth;
- bool unsubscribed;
bool statistics;
+ CollectionFetchScope::ListFilter listFilter;
};
CollectionFetchScope::CollectionFetchScope()
@@ -78,7 +77,7 @@ CollectionFetchScope &CollectionFetchScope::operator=(const CollectionFetchScope
bool CollectionFetchScope::isEmpty() const
{
- return d->resource.isEmpty() && d->contentMimeTypes.isEmpty() && !d->statistics && !d->unsubscribed && d->ancestorDepth == None;
+ return d->resource.isEmpty() && d->contentMimeTypes.isEmpty() && !d->statistics && d->ancestorDepth == None && d->listFilter == Enabled;
}
bool CollectionFetchScope::includeUnubscribed() const
@@ -88,12 +87,16 @@ bool CollectionFetchScope::includeUnubscribed() const
bool CollectionFetchScope::includeUnsubscribed() const
{
- return d->unsubscribed;
+ return (d->listFilter == NoFilter);
}
void CollectionFetchScope::setIncludeUnsubscribed(bool include)
{
- d->unsubscribed = include;
+ if (include) {
+ d->listFilter = NoFilter;
+ } else {
+ d->listFilter = Enabled;
+ }
}
bool CollectionFetchScope::includeStatistics() const
@@ -136,4 +139,15 @@ void CollectionFetchScope::setAncestorRetrieval(AncestorRetrieval ancestorDepth)
d->ancestorDepth = ancestorDepth;
}
+CollectionFetchScope::ListFilter CollectionFetchScope::listFilter() const
+{
+ return d->listFilter;
+}
+
+void CollectionFetchScope::setListFilter(CollectionFetchScope::ListFilter listFilter)
+{
+ d->listFilter = listFilter;
+}
+
+
}
diff --git a/akonadi/collectionfetchscope.h b/akonadi/collectionfetchscope.h
index 80184ed..0f14960 100644
--- a/akonadi/collectionfetchscope.h
+++ b/akonadi/collectionfetchscope.h
@@ -112,15 +112,47 @@ public:
*
* @see setIncludeUnsubscribed()
* @since 4.5
+ * @deprecated use listFilter() instead
*/
- bool includeUnsubscribed() const;
+ AKONADI_DEPRECATED bool includeUnsubscribed() const;
/**
* Sets whether unsubscribed collections should be included in the collection listing.
*
* @param include @c true to include unsubscribed collections, @c false otherwise (the default).
+ * @deprecated use setListFilter() instead
*/
- void setIncludeUnsubscribed(bool include);
+ AKONADI_DEPRECATED void setIncludeUnsubscribed(bool include);
+
+ /**
+ * Describes the list filter
+ *
+ * @since 4.14
+ */
+ enum ListFilter {
+ NoFilter, ///< No filtering, retrieve all collections
+ Display, ///< Only retrieve collections for display, taking the local preference and enabled into account.
+ Sync, ///< Only retrieve collections for synchronization, taking the local preference and enabled into account.
+ Index, ///< Only retrieve collections for indxing, taking the local preference and enabled into account.
+ Enabled ///< Only retrieve enabled collections, ignoring the local preference. This is the same as setIncludeUnsubscribed(false).
+ };
+
+ /**
+ * Sets a filter for the collections to be listed.
+ *
+ * Note that collections that are required to complete the tree, but are not part of the collection are still included in the listing.
+ *
+ * @since 4.14
+ */
+ void setListFilter(ListFilter);
+
+ /**
+ * Returns the list filter.
+ *
+ * @see setListFilter()
+ * @since 4.14
+ */
+ ListFilter listFilter() const;
/**
* Returns whether collection statistics should be included in the retrieved results.
diff --git a/akonadi/collectionmodifyjob.cpp b/akonadi/collectionmodifyjob.cpp
index f735106..6ae772e 100644
--- a/akonadi/collectionmodifyjob.cpp
+++ b/akonadi/collectionmodifyjob.cpp
@@ -93,6 +93,14 @@ void CollectionModifyJob::doStart()
if (d->mCollection.d_func()->cachePolicyChanged) {
changes += ' ' + ProtocolHelper::cachePolicyToByteArray(d->mCollection.cachePolicy());
}
+ if (d->mCollection.d_func()->enabledChanged) {
+ changes += ' ' + ProtocolHelper::enabled(d->mCollection.enabled());
+ }
+ if (d->mCollection.d_func()->listPreferenceChanged) {
+ changes += ' ' + ProtocolHelper::listPreference(Collection::ListDisplay, d->mCollection.localListPreference(Collection::ListDisplay));
+ changes += ' ' + ProtocolHelper::listPreference(Collection::ListSync, d->mCollection.localListPreference(Collection::ListSync));
+ changes += ' ' + ProtocolHelper::listPreference(Collection::ListIndex, d->mCollection.localListPreference(Collection::ListIndex));
+ }
if (d->mCollection.attributes().count() > 0) {
changes += ' ' + ProtocolHelper::attributesToByteArray(d->mCollection);
}
diff --git a/akonadi/entitytreemodel.cpp b/akonadi/entitytreemodel.cpp
index ef496c6..7fb35f5 100644
--- a/akonadi/entitytreemodel.cpp
+++ b/akonadi/entitytreemodel.cpp
@@ -84,16 +84,30 @@ EntityTreeModel::~EntityTreeModel()
bool EntityTreeModel::includeUnsubscribed() const
{
- Q_D(const EntityTreeModel);
- return d->m_includeUnsubscribed;
+ return (listFilter() == CollectionFetchScope::NoFilter);
}
void EntityTreeModel::setIncludeUnsubscribed(bool show)
{
+ if (show) {
+ setListFilter(CollectionFetchScope::NoFilter);
+ } else {
+ setListFilter(CollectionFetchScope::Enabled);
+ }
+}
+
+CollectionFetchScope::ListFilter EntityTreeModel::listFilter() const
+{
+ Q_D(const EntityTreeModel);
+ return d->m_listFilter;
+}
+
+void EntityTreeModel::setListFilter(CollectionFetchScope::ListFilter filter)
+{
Q_D(EntityTreeModel);
d->beginResetModel();
- d->m_includeUnsubscribed = show;
- d->m_monitor->setAllMonitored(show);
+ d->m_listFilter = filter;
+ d->m_monitor->setAllMonitored(filter == CollectionFetchScope::NoFilter);
d->endResetModel();
}
diff --git a/akonadi/entitytreemodel.h b/akonadi/entitytreemodel.h
index d7f40e3..2d52a3d 100644
--- a/akonadi/entitytreemodel.h
+++ b/akonadi/entitytreemodel.h
@@ -23,6 +23,7 @@
#include "akonadi_export.h"
#include <akonadi/collection.h>
+#include <akonadi/collectionfetchscope.h>
#include <akonadi/item.h>
#include <QtCore/QAbstractItemModel>
@@ -427,8 +428,9 @@ public:
* Returns whether unsubscribed entities will be included in the listing.
*
* @since 4.5
+ * @deprecated use listFilter instead
*/
- bool includeUnsubscribed() const;
+ AKONADI_DEPRECATED bool includeUnsubscribed() const;
/**
* Sets whether unsubscribed entities will be included in the listing.
@@ -439,8 +441,23 @@ public:
* this method for turning on/off listing of subscribed folders.
*
* @since 4.5
+ * @deprecated use setListFilter instead
*/
- void setIncludeUnsubscribed(bool show);
+ AKONADI_DEPRECATED void setIncludeUnsubscribed(bool show);
+
+ /**
+ * Returns the currently used listfilter.
+ *
+ * @since 4.14
+ */
+ Akonadi::CollectionFetchScope::ListFilter listFilter() const;
+
+ /**
+ * Sets the currently used listfilter.
+ *
+ * @since 4.14
+ */
+ void setListFilter(Akonadi::CollectionFetchScope::ListFilter filter);
/**
* Sets the item population @p strategy of the model.
@@ -691,8 +708,6 @@ private:
Q_PRIVATE_SLOT(d_func(), void monitoredCollectionChanged(const Akonadi::Collection &))
Q_PRIVATE_SLOT(d_func(), void monitoredCollectionMoved(const Akonadi::Collection &, const Akonadi::Collection &,
const Akonadi::Collection &))
- Q_PRIVATE_SLOT(d_func(), void collectionSubscribed(const Akonadi::Collection &, const Akonadi::Collection &))
- Q_PRIVATE_SLOT(d_func(), void monitoredCollectionUnsubscribed(const Akonadi::Collection &))
Q_PRIVATE_SLOT(d_func(), void monitoredItemAdded(const Akonadi::Item &, const Akonadi::Collection &))
Q_PRIVATE_SLOT(d_func(), void monitoredItemRemoved(const Akonadi::Item &))
diff --git a/akonadi/entitytreemodel_p.cpp b/akonadi/entitytreemodel_p.cpp
index ebf4973..76f405f 100644
--- a/akonadi/entitytreemodel_p.cpp
+++ b/akonadi/entitytreemodel_p.cpp
@@ -67,7 +67,7 @@ EntityTreeModelPrivate::EntityTreeModelPrivate(EntityTreeModel *parent)
, m_rootNode(0)
, m_collectionFetchStrategy(EntityTreeModel::FetchCollectionsRecursive)
, m_itemPopulation(EntityTreeModel::ImmediatePopulation)
- , m_includeUnsubscribed(true)
+ , m_listFilter(CollectionFetchScope::NoFilter)
, m_includeStatistics(false)
, m_showRootCollection(false)
, m_collectionTreeFetched(false)
@@ -128,10 +128,6 @@ void EntityTreeModelPrivate::init(ChangeRecorder *monitor)
SLOT(monitoredCollectionAdded(Akonadi::Collection,Akonadi::Collection)));
q->connect(monitor, SIGNAL(collectionRemoved(Akonadi::Collection)),
SLOT(monitoredCollectionRemoved(Akonadi::Collection)));
- q->connect(monitor, SIGNAL(collectionSubscribed(Akonadi::Collection,Akonadi::Collection)),
- SLOT(collectionSubscribed(Akonadi::Collection,Akonadi::Collection)));
- q->connect(monitor, SIGNAL(collectionUnsubscribed(Akonadi::Collection)),
- SLOT(monitoredCollectionUnsubscribed(Akonadi::Collection)));
q->connect(monitor,
SIGNAL(collectionMoved(Akonadi::Collection,Akonadi::Collection,Akonadi::Collection)),
SLOT(monitoredCollectionMoved(Akonadi::Collection,Akonadi::Collection,Akonadi::Collection)));
@@ -300,7 +296,7 @@ void EntityTreeModelPrivate::fetchCollections(const Collection &collection, Coll
job->setProperty(FetchCollectionId(), QVariant(collection.id()));
- job->fetchScope().setIncludeUnsubscribed(m_includeUnsubscribed);
+ job->fetchScope().setListFilter(m_listFilter);
job->fetchScope().setContentMimeTypes(m_monitor->mimeTypesMonitored());
if (m_collectionFetchStrategy == EntityTreeModel::InvisibleCollectionFetch) {
@@ -648,7 +644,7 @@ void EntityTreeModelPrivate::retrieveAncestors(const Akonadi::Collection &collec
if (!ancestors.isEmpty()) {
// Fetch the real ancestors
CollectionFetchJob *job = new CollectionFetchJob(ancestors, CollectionFetchJob::Base, m_session);
- job->fetchScope().setIncludeUnsubscribed(m_includeUnsubscribed);
+ job->fetchScope().setListFilter(m_listFilter);
job->fetchScope().setIncludeStatistics(m_includeStatistics);
q->connect(job, SIGNAL(collectionsReceived(Akonadi::Collection::List)),
q, SLOT(ancestorsFetched(Akonadi::Collection::List)));
@@ -741,6 +737,25 @@ bool EntityTreeModelPrivate::shouldBePartOfModel(const Collection &collection) c
!m_mimeChecker.isWantedCollection(collection)) {
return false;
}
+
+ if (m_listFilter == CollectionFetchScope::CollectionFetchScope::Enabled) {
+ if (!collection.enabled()) {
+ return false;
+ }
+ } else if (m_listFilter == CollectionFetchScope::CollectionFetchScope::Display) {
+ if (!collection.shouldList(Collection::ListDisplay)) {
+ return false;
+ }
+ } else if (m_listFilter == CollectionFetchScope::CollectionFetchScope::Sync) {
+ if (!collection.shouldList(Collection::ListSync)) {
+ return false;
+ }
+ } else if (m_listFilter == CollectionFetchScope::CollectionFetchScope::Index) {
+ if (!collection.shouldList(Collection::ListIndex)) {
+ return false;
+ }
+ }
+
return true;
}
@@ -842,34 +857,6 @@ void EntityTreeModelPrivate::monitoredCollectionRemoved(const Akonadi::Collectio
}
}
-void EntityTreeModelPrivate::collectionSubscribed(const Akonadi::Collection &col, const Akonadi::Collection &parent)
-{
- // If we are including unsubscribed, we don't need to deal with subscribed / unsubscribed signals.
- // We shouldn't even be getting them as Monitor should only send them if we are watching subscribed-only,
- // but this is just in case.
- if (m_includeUnsubscribed || m_collections.contains(col.id())) {
- return;
- }
-
- // Otherwise, it's a valid subscription notice. Let's add it to the collection.
- monitoredCollectionAdded(col, parent);
-}
-
-void EntityTreeModelPrivate::monitoredCollectionUnsubscribed(const Akonadi::Collection &col)
-{
- // If we are including unsubscribed, we don't need to deal with subscribed / unsubscribed signals.
- // We shouldn't even be getting them as Monitor should only send them if we are watching subscribed-only,
- // but this is just in case.
- //
- // We don't want to remove a collection if we are including all of them.
- if (m_includeUnsubscribed || !m_collections.contains(col.id())) {
- return;
- }
-
- // Otherwise, it's a valid unsubscription notice.
- monitoredCollectionRemoved(col);
-}
-
void EntityTreeModelPrivate::removeChildEntities(Collection::Id collectionId)
{
QList<Node *> childList = m_childEntities.value(collectionId);
@@ -1538,7 +1525,8 @@ void EntityTreeModelPrivate::topLevelCollectionsFetched(const Akonadi::Collectio
Q_ASSERT(collection.isValid());
CollectionFetchJob *job = new CollectionFetchJob(collection, CollectionFetchJob::Recursive, m_session);
- job->fetchScope().setIncludeUnsubscribed(m_includeUnsubscribed);
+ job->fetchScope().setListFilter(m_listFilter);
+
job->fetchScope().setIncludeStatistics(m_includeStatistics);
job->fetchScope().setAncestorRetrieval(Akonadi::CollectionFetchScope::All);
q->connect(job, SIGNAL(collectionsReceived(Akonadi::Collection::List)),
diff --git a/akonadi/entitytreemodel_p.h b/akonadi/entitytreemodel_p.h
index d50dc55..ecd3c67 100644
--- a/akonadi/entitytreemodel_p.h
+++ b/akonadi/entitytreemodel_p.h
@@ -91,9 +91,6 @@ public:
void monitoredCollectionStatisticsChanged(Akonadi::Collection::Id, const Akonadi::CollectionStatistics &);
void monitoredCollectionMoved(const Akonadi::Collection &, const Akonadi::Collection &, const Akonadi::Collection &);
- void collectionSubscribed(const Akonadi::Collection &, const Akonadi::Collection &);
- void monitoredCollectionUnsubscribed(const Akonadi::Collection &);
-
void monitoredItemAdded(const Akonadi::Item &, const Akonadi::Collection &);
void monitoredItemRemoved(const Akonadi::Item &);
void monitoredItemChanged(const Akonadi::Item &, const QSet<QByteArray> &);
@@ -156,7 +153,7 @@ public:
MimeTypeChecker m_mimeChecker;
EntityTreeModel::CollectionFetchStrategy m_collectionFetchStrategy;
EntityTreeModel::ItemPopulationStrategy m_itemPopulation;
- bool m_includeUnsubscribed;
+ CollectionFetchScope::ListFilter m_listFilter;
bool m_includeStatistics;
bool m_showRootCollection;
bool m_collectionTreeFetched;
diff --git a/akonadi/protocolhelper.cpp b/akonadi/protocolhelper.cpp
index 63d3f7f..7e98b77 100644
--- a/akonadi/protocolhelper.cpp
+++ b/akonadi/protocolhelper.cpp
@@ -130,6 +130,17 @@ void ProtocolHelper::parseAncestors( const QByteArray &data, Entity *entity, int
}
}
+static Collection::ListPreference parsePreference( const QByteArray &value )
+{
+ if ( value == "TRUE" ) {
+ return Collection::ListEnabled;
+ }
+ if ( value == "FALSE" ) {
+ return Collection::ListDisabled;
+ }
+ return Collection::ListDefault;
+}
+
int ProtocolHelper::parseCollection(const QByteArray & data, Collection & collection, int start)
{
int pos = start;
@@ -196,6 +207,14 @@ int ProtocolHelper::parseCollection(const QByteArray & data, Collection & collec
collection.setCachePolicy( policy );
} else if ( key == "ANCESTORS" ) {
parseAncestors( value, &collection );
+ } else if ( key == "ENABLED" ) {
+ collection.setEnabled( value == "TRUE" );
+ } else if ( key == "DISPLAY" ) {
+ collection.setLocalListPreference( Collection::ListDisplay, parsePreference( value ) );
+ } else if ( key == "SYNC" ) {
+ collection.setLocalListPreference( Collection::ListSync, parsePreference( value ) );
+ } else if ( key == "INDEX" ) {
+ collection.setLocalListPreference( Collection::ListIndex, parsePreference( value ) );
} else {
Attribute* attr = AttributeFactory::createAttribute( key );
Q_ASSERT( attr );
@@ -673,3 +692,40 @@ bool ProtocolHelper::streamPayloadToFile(const QByteArray &command, const QByteA
file.close();
return true;
}
+
+
+QByteArray ProtocolHelper::listPreference(Collection::ListPurpose purpose, Collection::ListPreference preference)
+{
+ QByteArray command;
+ switch(purpose) {
+ case Collection::ListDisplay:
+ command += "DISPLAY ";
+ break;
+ case Collection::ListSync:
+ command += "SYNC ";
+ break;
+ case Collection::ListIndex:
+ command += "INDEX ";
+ break;
+ }
+ switch(preference) {
+ case Collection::ListEnabled:
+ command += "TRUE";
+ break;
+ case Collection::ListDisabled:
+ command += "FALSE";
+ break;
+ case Collection::ListDefault:
+ command += "DEFAULT";
+ break;
+ }
+ return command;
+}
+
+QByteArray ProtocolHelper::enabled(bool state)
+{
+ if (state) {
+ return "ENABLED TRUE";
+ }
+ return "ENABLED FALSE";
+}
diff --git a/akonadi/protocolhelper_p.h b/akonadi/protocolhelper_p.h
index ddbb973..b0303a3 100644
--- a/akonadi/protocolhelper_p.h
+++ b/akonadi/protocolhelper_p.h
@@ -233,6 +233,9 @@ public:
static QString absolutePayloadFilePath(const QString &fileName);
static bool streamPayloadToFile(const QByteArray &command, const QByteArray &data, QByteArray &error);
+
+ static QByteArray listPreference(Collection::ListPurpose purpose, Collection::ListPreference preference);
+ static QByteArray enabled(bool);
};
}
diff --git a/akonadi/resourcebase.cpp b/akonadi/resourcebase.cpp
index 50c9292..7a7b5f3 100644
--- a/akonadi/resourcebase.cpp
+++ b/akonadi/resourcebase.cpp
@@ -848,6 +848,7 @@ void ResourceBasePrivate::slotCollectionSyncDone(KJob *job)
CollectionFetchJob *list = new CollectionFetchJob(Collection::root(), CollectionFetchJob::Recursive);
list->setFetchScope(q->changeRecorder()->collectionFetchScope());
list->fetchScope().setResource(mId);
+ list->fetchScope().setListFilter(CollectionFetchScope::Sync);
q->connect(list, SIGNAL(result(KJob*)), q, SLOT(slotLocalListDone(KJob*)));
return;
} else if (scheduler->currentTask().type == ResourceScheduler::SyncCollectionTree) {
@@ -1077,25 +1078,23 @@ void ResourceBase::synchronizeCollection(qint64 collectionId, bool recursive)
CollectionFetchJob *job = new CollectionFetchJob(Collection(collectionId), recursive ? CollectionFetchJob::Recursive : CollectionFetchJob::Base);
job->setFetchScope(changeRecorder()->collectionFetchScope());
job->fetchScope().setResource(identifier());
- job->setProperty("recursive", recursive);
+ job->fetchScope().setListFilter(CollectionFetchScope::Sync);
connect(job, SIGNAL(result(KJob*)), SLOT(slotCollectionListDone(KJob*)));
}
void ResourceBasePrivate::slotCollectionListDone(KJob *job)
{
if (!job->error()) {
- Collection::List list = static_cast<CollectionFetchJob *>(job)->collections();
- if (!list.isEmpty()) {
- if (job->property("recursive").toBool()) {
- Q_FOREACH (const Collection &collection, list) {
- scheduler->scheduleSync(collection);
- }
- } else {
- scheduler->scheduleSync(list.first());
+ const Collection::List list = static_cast<CollectionFetchJob *>(job)->collections();
+ Q_FOREACH (const Collection &collection, list) {
+ //We also get collections that should not be synced but are part of the tree.
+ if (collection.shouldList(Collection::ListSync)) {
+ scheduler->scheduleSync(collection);
}
}
+ } else {
+ kWarning() << "Failed to fetch collection for collection sync: " << job->errorString();
}
- // TODO: error handling
}
void ResourceBase::synchronizeCollectionAttributes(qint64 collectionId)
diff --git a/akonadi/tests/collectionjobtest.cpp b/akonadi/tests/collectionjobtest.cpp
index fc8202e..566398d 100644
--- a/akonadi/tests/collectionjobtest.cpp
+++ b/akonadi/tests/collectionjobtest.cpp
@@ -766,4 +766,99 @@ void CollectionJobTest::testAncestorRetrieval()
QCOMPARE( col, col2 );
}
+void CollectionJobTest::testListPreference()
+{
+ Akonadi::Collection baseCol;
+ {
+ baseCol.setParentCollection(Akonadi::Collection(res1ColId));
+ baseCol.setName("base");
+ Akonadi::CollectionCreateJob *create = new Akonadi::CollectionCreateJob(baseCol);
+ AKVERIFYEXEC(create);
+ baseCol = create->collection();
+ }
+ {
+ Akonadi::Collection col;
+ col.setParentCollection(baseCol);
+ col.setEnabled(true);
+ col.setName("enabled");
+ Akonadi::CollectionCreateJob *create = new Akonadi::CollectionCreateJob(col);
+ AKVERIFYEXEC(create);
+
+ CollectionFetchJob *job = new CollectionFetchJob(create->collection(), CollectionFetchJob::Base);
+ AKVERIFYEXEC(job);
+ Akonadi::Collection result = job->collections().first();
+ QCOMPARE(result.enabled(), true);
+ QCOMPARE(result.localListPreference(Collection::ListDisplay), Collection::ListDefault);
+ QCOMPARE(result.localListPreference(Collection::ListSync), Collection::ListDefault);
+ QCOMPARE(result.localListPreference(Collection::ListIndex), Collection::ListDefault);
+ }
+ {
+ Akonadi::Collection col;
+ col.setParentCollection(baseCol);
+ col.setName("disabledPref");
+ col.setEnabled(true);
+ col.setLocalListPreference(Collection::ListDisplay, Collection::ListDisabled);
+ col.setLocalListPreference(Collection::ListSync, Collection::ListDisabled);
+ col.setLocalListPreference(Collection::ListIndex, Collection::ListDisabled);
+ Akonadi::CollectionCreateJob *create = new Akonadi::CollectionCreateJob(col);
+ AKVERIFYEXEC(create);
+ CollectionFetchJob *job = new CollectionFetchJob(create->collection(), CollectionFetchJob::Base);
+ AKVERIFYEXEC(job);
+ Akonadi::Collection result = job->collections().first();
+ QCOMPARE(result.enabled(), true);
+ QCOMPARE(result.localListPreference(Collection::ListDisplay), Collection::ListDisabled);
+ QCOMPARE(result.localListPreference(Collection::ListSync), Collection::ListDisabled);
+ QCOMPARE(result.localListPreference(Collection::ListIndex), Collection::ListDisabled);
+ }
+ {
+ Akonadi::Collection col;
+ col.setParentCollection(baseCol);
+ col.setName("enabledPref");
+ col.setEnabled(false);
+ col.setLocalListPreference(Collection::ListDisplay, Collection::ListEnabled);
+ col.setLocalListPreference(Collection::ListSync, Collection::ListEnabled);
+ col.setLocalListPreference(Collection::ListIndex, Collection::ListEnabled);
+ Akonadi::CollectionCreateJob *create = new Akonadi::CollectionCreateJob(col);
+ AKVERIFYEXEC(create);
+ CollectionFetchJob *job = new CollectionFetchJob(create->collection(), CollectionFetchJob::Base);
+ AKVERIFYEXEC(job);
+ Akonadi::Collection result = job->collections().first();
+ QCOMPARE(result.enabled(), false);
+ QCOMPARE(result.localListPreference(Collection::ListDisplay), Collection::ListEnabled);
+ QCOMPARE(result.localListPreference(Collection::ListSync), Collection::ListEnabled);
+ QCOMPARE(result.localListPreference(Collection::ListIndex), Collection::ListEnabled);
+ }
+
+ //Check list filter
+ {
+ CollectionFetchJob *job = new CollectionFetchJob(baseCol, CollectionFetchJob::FirstLevel);
+ job->fetchScope().setListFilter(CollectionFetchScope::Display);
+ AKVERIFYEXEC(job);
+ QCOMPARE(job->collections().size(), 2);
+ }
+ {
+ CollectionFetchJob *job = new CollectionFetchJob(baseCol, CollectionFetchJob::FirstLevel);
+ job->fetchScope().setListFilter(CollectionFetchScope::Sync);
+ AKVERIFYEXEC(job);
+ QCOMPARE(job->collections().size(), 2);
+ }
+ {
+ CollectionFetchJob *job = new CollectionFetchJob(baseCol, CollectionFetchJob::FirstLevel);
+ job->fetchScope().setListFilter(CollectionFetchScope::Index);
+ AKVERIFYEXEC(job);
+ QCOMPARE(job->collections().size(), 2);
+ }
+ {
+ CollectionFetchJob *job = new CollectionFetchJob(baseCol, CollectionFetchJob::FirstLevel);
+ job->fetchScope().setListFilter(CollectionFetchScope::Enabled);
+ AKVERIFYEXEC(job);
+ QCOMPARE(job->collections().size(), 2);
+ }
+
+ //Cleanup
+ CollectionDeleteJob *deleteJob = new CollectionDeleteJob(baseCol);
+ AKVERIFYEXEC(deleteJob);
+}
+
+
#include "collectionjobtest.moc"
\ No newline at end of file
diff --git a/akonadi/tests/collectionjobtest.h b/akonadi/tests/collectionjobtest.h
index 2d08cd0..233bf0d 100644
--- a/akonadi/tests/collectionjobtest.h
+++ b/akonadi/tests/collectionjobtest.h
@@ -52,6 +52,7 @@ class CollectionJobTest : public QObject
void testRidCreateDelete_data();
void testRidCreateDelete();
void testAncestorRetrieval();
+ void testListPreference();
};
#endif
commit 552e1a9818022aab270b357f9c576ee9a1af0703
Author: Sandro Knauà <knauss at kolabsys.com>
Date: Tue Jun 3 17:17:57 2014 +0200
Fix 287242 - Empty error window when querying an ldap server
Showing a standard error text, when no one is returned from job.
BUG: 287242
FIXED-IN: 4.14
REVIEW: 118502
diff --git a/kldap/ldapconfigwidget.cpp b/kldap/ldapconfigwidget.cpp
index 5de51ad..e38f8f6 100644
--- a/kldap/ldapconfigwidget.cpp
+++ b/kldap/ldapconfigwidget.cpp
@@ -363,7 +363,11 @@ void LdapConfigWidget::Private::sendQuery()
search.abandon();
} else {
if ( search.error() ) {
- KMessageBox::error( mParent, search.errorString() );
+ if ( search.errorString().isEmpty() ) {
+ KMessageBox::error( mParent, i18nc( "%1 is a url to ldap server", "Unknown error connecting %1", _url.prettyUrl() ) );
+ } else {
+ KMessageBox::error( mParent, search.errorString() );
+ }
}
}
}
commit 080ccc2c392fba0161e39cda11ed793083d38c08
Author: Sandro Knauà <knauss at kolabsys.com>
Date: Thu May 29 20:31:53 2014 +0200
Adding ability to subclass Fakeserver.
For subclasses it is needed to have control over the received and
expeced values of transmissions.
REVIEW: 118408
diff --git a/kimap/tests/kimaptest/fakeserver.cpp b/kimap/tests/kimaptest/fakeserver.cpp
index 9bd6018..5b374ed 100644
--- a/kimap/tests/kimaptest/fakeserver.cpp
+++ b/kimap/tests/kimaptest/fakeserver.cpp
@@ -216,6 +216,12 @@ void FakeServer::writeServerPart( int scenarioNumber )
m_scenarios[scenarioNumber] = scenario;
}
+void FakeServer::compareReceived(const QByteArray& received, const QByteArray& expected) const
+{
+ QCOMPARE( QString::fromUtf8( received ), QString::fromUtf8( expected ) );
+ QCOMPARE( received, expected );
+}
+
void FakeServer::readClientPart( int scenarioNumber )
{
QList<QByteArray> scenario = m_scenarios[scenarioNumber];
@@ -225,8 +231,7 @@ void FakeServer::readClientPart( int scenarioNumber )
scenario.first().startsWith( "C: " ) ) {
QByteArray received = "C: "+clientParser->readUntilCommandEnd().trimmed();
QByteArray expected = scenario.takeFirst();
- QCOMPARE( QString::fromUtf8( received ), QString::fromUtf8( expected ) );
- QCOMPARE( received, expected );
+ compareReceived(received, expected);
if (received.contains("STARTTLS")) {
m_starttls = true;
}
diff --git a/kimap/tests/kimaptest/fakeserver.h b/kimap/tests/kimaptest/fakeserver.h
index 009a2ad..add3626 100644
--- a/kimap/tests/kimaptest/fakeserver.h
+++ b/kimap/tests/kimaptest/fakeserver.h
@@ -207,6 +207,13 @@ public:
*/
bool isAllScenarioDone() const;
+protected:
+ /**
+ * Whether the received content is the same as the expected.
+ * Use QCOMPARE, if creating subclasses.
+ */
+ virtual void compareReceived(const QByteArray& received, const QByteArray& expected) const;
+
private Q_SLOTS:
void newConnection();
void dataAvailable();
commit 8e506506d7257c8c026487a04269f0b8c9f4ce82
Author: Maximiliano Curia <maxy at debian.org>
Date: Wed May 28 12:24:08 2014 +0200
Build and install akonaditest and Knut even when kdepimlibs are built without tests
Makes it possible to still run tests of other components (runtime) that require
akonaditest and Knut.
BUG: 331529
FIXED-IN: 4.14
diff --git a/akonadi/CMakeLists.txt b/akonadi/CMakeLists.txt
index 709e9b2..a6fc0aa 100644
--- a/akonadi/CMakeLists.txt
+++ b/akonadi/CMakeLists.txt
@@ -8,7 +8,10 @@ if(CMAKE_COMPILE_GCOV)
endif()
if (KDE4_BUILD_TESTS)
-add_subdirectory( tests )
+ add_subdirectory( tests )
+else()
+ add_subdirectory( tests/testrunner )
+ add_subdirectory( tests/testresource )
endif()
add_definitions( ${AKONADI_DEFINITIONS} )
diff --git a/akonadi/tests/testresource/CMakeLists.txt b/akonadi/tests/testresource/CMakeLists.txt
index 7099aac..1ae28b7 100644
--- a/akonadi/tests/testresource/CMakeLists.txt
+++ b/akonadi/tests/testresource/CMakeLists.txt
@@ -1,5 +1,32 @@
+include_directories(
+ ${CMAKE_CURRENT_BINARY_DIR}
+ ${AKONADI_INCLUDE_DIR}
+ ${AKONADI_INCLUDE_DIR}/akonadi/private
+ ${Boost_INCLUDE_DIR}
+ ${CMAKE_SOURCE_DIR}/akonadi
+ ${CMAKE_BINARY_DIR}/akonadi
+ ${CMAKE_BINARY_DIR}/akonadi/kmime
+ ${CMAKE_BINARY_DIR}/kmime
+)
+
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${KDE4_ENABLE_EXCEPTIONS}" )
+find_package(LibXslt)
+set_package_properties(LibXslt PROPERTIES DESCRIPTION "xsltproc" URL "http://xmlsoft.org/XSLT/" TYPE REQUIRED PURPOSE "Needed to generate D-Bus interface specifications")
+
+# generates a D-Bus interface description from a KConfigXT file
+macro(kcfg_generate_dbus_interface _kcfg _name)
+ add_custom_command(
+ OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${_name}.xml
+ COMMAND ${XSLTPROC_EXECUTABLE} --stringparam interfaceName ${_name}
+ ${CMAKE_SOURCE_DIR}/akonadi/kcfg2dbus.xsl
+ ${_kcfg}
+ > ${CMAKE_CURRENT_BINARY_DIR}/${_name}.xml
+ DEPENDS ${CMAKE_SOURCE_DIR}/akonadi/kcfg2dbus.xsl
+ ${_kcfg}
+ )
+endmacro()
+
# Disabled for now, resourcetester remained in kdepim-runtime
#add_subdirectory( tests )
commit 65fd2b2389a4847f8005e96a6d82e5f61df330ec
Author: Christian Mollekopf <chrigi_1 at fastmail.fm>
Date: Tue May 27 16:33:33 2014 +0200
CollectionFetchJob: ensure result() is the last signal emitted.
If we simply use delayedEmitResult() instead of emitResult() it is already
ensured that all collections are emitted before result, the whole flushing
not necessary. This also fixes the recursive fetch, where the collections
were not emitted before result, which is IMO a bug.
I added the required tests to ensure the job behaves like it should.
REVIEW: 118329
diff --git a/akonadi/collectionfetchjob.cpp b/akonadi/collectionfetchjob.cpp
index ae24a35..5b17eb8 100644
--- a/akonadi/collectionfetchjob.cpp
+++ b/akonadi/collectionfetchjob.cpp
@@ -93,18 +93,6 @@ public:
}
}
- void flushIterativeResult()
- {
- Q_Q(CollectionFetchJob);
-
- if (mPendingCollections.isEmpty()) {
- return;
- }
-
- emit q->collectionsReceived(mPendingCollections);
- mPendingCollections.clear();
- }
-
QString jobDebuggingString() const
{
if (mBase.isValid()) {
@@ -402,20 +390,13 @@ void CollectionFetchJob::slotResult(KJob *job)
const Collection::List result = filterDescendants(d->mPrefetchList);
d->mPendingCollections += result;
d->mCollections = result;
- d->flushIterativeResult();
- emitResult();
+ d->delayedEmitResult();
}
} else {
- // We need to tell the subjob to emit its collectionsReceived signal before
- // the result signal is emitted. That will populate my mPendingCollections
- // which will be flushed by calling emitResult which will cause
- // CollectionFetchJobPrivate::timeout to be called.
- list->d_func()->flushIterativeResult();
d->mCollections += list->collections();
- // Pending collections should have already been emitted by listening to (and flushing) the job.
Job::slotResult(job);
if (!job->error() && !hasSubjobs()) {
- emitResult();
+ d->delayedEmitResult();
}
}
}
diff --git a/akonadi/tests/collectionjobtest.cpp b/akonadi/tests/collectionjobtest.cpp
index 298f489..fc8202e 100644
--- a/akonadi/tests/collectionjobtest.cpp
+++ b/akonadi/tests/collectionjobtest.cpp
@@ -160,6 +160,39 @@ void CollectionJobTest::testFolderList( )
QVERIFY( findCol( list, "bla" ).isValid() );
}
+class ResultSignalTester : public QObject
+{
+ Q_OBJECT
+public:
+ QStringList receivedSignals;
+public Q_SLOTS:
+ void onCollectionsReceived( const Akonadi::Collection::List & )
+ {
+ receivedSignals << QLatin1String( "collectionsReceived" );
+ }
+
+ void onCollectionRetrievalDone( KJob* )
+ {
+ receivedSignals << QLatin1String( "result" );
+ }
+};
+
+void CollectionJobTest::testSignalOrder()
+{
+ Akonadi::Collection::List toFetch;
+ toFetch << Collection( res1ColId );
+ toFetch << Collection( res2ColId );
+ CollectionFetchJob *job = new CollectionFetchJob( toFetch, CollectionFetchJob::Recursive );
+ ResultSignalTester spy;
+ connect( job, SIGNAL(collectionsReceived(Akonadi::Collection::List)), &spy, SLOT(onCollectionsReceived(Akonadi::Collection::List)) );
+ connect( job, SIGNAL(result(KJob*)), &spy, SLOT(onCollectionRetrievalDone(KJob*)) );
+ AKVERIFYEXEC( job );
+
+ QCOMPARE( spy.receivedSignals.size(), 2 );
+ QCOMPARE( spy.receivedSignals.at( 0 ), QLatin1String( "collectionsReceived" ) );
+ QCOMPARE( spy.receivedSignals.at( 1 ), QLatin1String( "result" ) );
+}
+
void CollectionJobTest::testNonRecursiveFolderList( )
{
CollectionFetchJob *job = new CollectionFetchJob( Collection( res1ColId ), CollectionFetchJob::Base );
@@ -570,6 +603,67 @@ void CollectionJobTest::testMultiList()
compareLists( res, req );
}
+void CollectionJobTest::testRecursiveMultiList()
+{
+ Akonadi::Collection::List toFetch;
+ toFetch << Collection( res1ColId );
+ toFetch << Collection( res2ColId );
+ CollectionFetchJob *job = new CollectionFetchJob( toFetch, CollectionFetchJob::Recursive );
+ QSignalSpy spy( job, SIGNAL(collectionsReceived(Akonadi::Collection::List)) );
+ QVERIFY( spy.isValid() );
+ AKVERIFYEXEC( job );
+
+ Collection::List list = job->collections();
+
+ int count = 0;
+ for ( int i = 0; i < spy.count(); ++i ) {
+ Collection::List l = spy[i][0].value<Akonadi::Collection::List>();
+ for ( int j = 0; j < l.count(); ++j ) {
+ QVERIFY( list.count() > count + j );
+ QCOMPARE( list[count + j].id(), l[j].id() );
+ }
+ count += l.count();
+ }
+ QCOMPARE( count, list.count() );
+
+ // check if everything is there
+ QCOMPARE( list.count(), 4 + 2 );
+ QVERIFY( findCol( list, "foo" ).isValid() );
+ QVERIFY( findCol( list, "bar" ).isValid() );
+ QVERIFY( findCol( list, "bla" ).isValid() ); //There are two bla folders, but we only check for one.
+ QVERIFY( findCol( list, "foo2" ).isValid() );
+ QVERIFY( findCol( list, "space folder" ).isValid() );
+}
+
+void CollectionJobTest::testNonOverlappingRootList()
+{
+ Akonadi::Collection::List toFetch;
+ toFetch << Collection( res1ColId );
+ toFetch << Collection( res2ColId );
+ CollectionFetchJob *job = new CollectionFetchJob( toFetch, CollectionFetchJob::NonOverlappingRoots );
+ QSignalSpy spy( job, SIGNAL(collectionsReceived(Akonadi::Collection::List)) );
+ QVERIFY( spy.isValid() );
+ AKVERIFYEXEC( job );
+
+ Collection::List list = job->collections();
+
+ int count = 0;
+ for ( int i = 0; i < spy.count(); ++i ) {
+ Collection::List l = spy[i][0].value<Akonadi::Collection::List>();
+ for ( int j = 0; j < l.count(); ++j ) {
+ QVERIFY( list.count() > count + j );
+ QCOMPARE( list[count + j].id(), l[j].id() );
+ }
+ count += l.count();
+ }
+ QCOMPARE( count, list.count() );
+
+ // check if everything is there
+ QCOMPARE( list.count(), 2 );
+ QVERIFY( findCol( list, "res1" ).isValid() );
+ QVERIFY( findCol( list, "res2" ).isValid() );
+}
+
void CollectionJobTest::testSelect()
{
CollectionPathResolver *resolver = new CollectionPathResolver( "res1/foo", this );;
@@ -672,3 +766,4 @@ void CollectionJobTest::testAncestorRetrieval()
QCOMPARE( col, col2 );
}
+#include "collectionjobtest.moc"
\ No newline at end of file
diff --git a/akonadi/tests/collectionjobtest.h b/akonadi/tests/collectionjobtest.h
index 63353c6..2d08cd0 100644
--- a/akonadi/tests/collectionjobtest.h
+++ b/akonadi/tests/collectionjobtest.h
@@ -29,6 +29,7 @@ class CollectionJobTest : public QObject
void initTestCase();
void testTopLevelList();
void testFolderList();
+ void testSignalOrder();
void testNonRecursiveFolderList();
void testEmptyFolderList();
void testSearchFolderList();
@@ -44,6 +45,8 @@ class CollectionJobTest : public QObject
void testUtf8CollectionName_data();
void testUtf8CollectionName();
void testMultiList();
+ void testRecursiveMultiList();
+ void testNonOverlappingRootList();
void testSelect();
void testRidFetch();
void testRidCreateDelete_data();
commit 53480388ee2d0970478661f853c7b52f7d04c691
Author: Dan Vrátil <dvratil at redhat.com>
Date: Mon May 26 18:05:57 2014 +0200
Implement support for direct payload streaming to Create and Modify jobs
ItemCreateJob and ItemModifyJob now handle STREAM continuation response and can
write part payload data directly into the file received in the server response.
Conflicts:
CMakeLists.txt
diff --git a/akonadi/itemcreatejob.cpp b/akonadi/itemcreatejob.cpp
index d4badd3..61d276a 100644
--- a/akonadi/itemcreatejob.cpp
+++ b/akonadi/itemcreatejob.cpp
@@ -1,6 +1,7 @@
/*
Copyright (c) 2006 - 2007 Volker Krause <vkrause at kde.org>
Copyright (c) 2007 Robert Zwerus <arzie at dds.nl>
+ Copyright (c) 2014 Daniel Vrátil <dvratil at redhat.com>
This library is free software; you can redistribute it and/or modify it
under the terms of the GNU Library General Public License as published by
@@ -30,6 +31,7 @@
#include "gid/gidextractor_p.h"
#include <QtCore/QDateTime>
+#include <QtCore/QFile>
#include <kdebug.h>
@@ -193,7 +195,15 @@ void ItemCreateJob::doHandleResponse(const QByteArray &tag, const QByteArray &da
Q_D(ItemCreateJob);
if (tag == "+") { // ready for literal data
- d->writeData(d->mPendingData);
+ if (data.startsWith("STREAM")) {
+ QByteArray error;
+ if (!ProtocolHelper::streamPayloadToFile(data, d->mPendingData, error)) {
+ d->writeData("* NO " + error);
+ return;
+ }
+ } else {
+ d->writeData(d->mPendingData);
+ }
d->writeData(d->nextPartHeader());
return;
}
diff --git a/akonadi/itemmodifyjob.cpp b/akonadi/itemmodifyjob.cpp
index 81d5da2..994047f 100644
--- a/akonadi/itemmodifyjob.cpp
+++ b/akonadi/itemmodifyjob.cpp
@@ -285,7 +285,15 @@ void ItemModifyJob::doHandleResponse(const QByteArray &_tag, const QByteArray &d
Q_D(ItemModifyJob);
if (_tag == "+") { // ready for literal data
- d->writeData(d->mPendingData);
+ if (data.startsWith("STREAM")) {
+ QByteArray error;
+ if (!ProtocolHelper::streamPayloadToFile(data, d->mPendingData, error)) {
+ d->writeData("* NO " + error);
+ return;
+ }
+ } else {
+ d->writeData(d->mPendingData);
+ }
d->writeData(d->nextPartHeader());
return;
}
diff --git a/akonadi/itemserializer.cpp b/akonadi/itemserializer.cpp
index d75de48..e78396a 100644
--- a/akonadi/itemserializer.cpp
+++ b/akonadi/itemserializer.cpp
@@ -22,15 +22,13 @@
#include "item.h"
#include "itemserializerplugin.h"
#include "typepluginloader_p.h"
-#include "servermanager.h"
-#include <akonadi/private/xdgbasedirs_p.h>
+#include "protocolhelper_p.h"
// Qt
#include <QtCore/QBuffer>
#include <QtCore/QFile>
#include <QtCore/QIODevice>
#include <QtCore/QString>
-#include <QtCore/QDir>
#include <string>
@@ -86,18 +84,7 @@ void StdStringItemSerializerPlugin::serialize(const Item &item, const QByteArray
void ItemSerializer::deserialize(Item &item, const QByteArray &label, const QByteArray &data, int version, bool external)
{
if (external) {
- QString path;
- QString fileName = QString::fromUtf8(data);
- QFileInfo fi(fileName);
- if (!fi.isAbsolute()) {
- QString fullRelPath = QLatin1String("akonadi");
- if (Akonadi::ServerManager::hasInstanceIdentifier()) {
- fullRelPath += QDir::separator() + QLatin1String("instance") + QDir::separator() + Akonadi::ServerManager::instanceIdentifier();
- }
- fullRelPath += QDir::separator() + QLatin1String("file_db_data");
- fileName = XdgBaseDirs::saveDir("data", fullRelPath) + QDir::separator() + fileName;
- }
-
+ const QString fileName = ProtocolHelper::absolutePayloadFilePath(QString::fromUtf8(data));
QFile file(fileName);
if (file.open(QIODevice::ReadOnly)) {
deserialize(item, label, file, version);
diff --git a/akonadi/protocolhelper.cpp b/akonadi/protocolhelper.cpp
index d9f30da..63d3f7f 100644
--- a/akonadi/protocolhelper.cpp
+++ b/akonadi/protocolhelper.cpp
@@ -25,10 +25,14 @@
#include "exception.h"
#include "itemserializer_p.h"
#include "itemserializerplugin.h"
+#include "servermanager.h"
+#include <akonadi/private/xdgbasedirs_p.h>
#include <QtCore/QDateTime>
#include <QtCore/QFile>
#include <QtCore/QVarLengthArray>
+#include <QtCore/QFileInfo>
+#include <QtCore/QDir>
#include <kdebug.h>
#include <klocalizedstring.h>
@@ -617,3 +621,55 @@ void ProtocolHelper::parseTagFetchResult( const QList<QByteArray> &lineTokens, T
}
}
}
+
+QString ProtocolHelper::akonadiStoragePath()
+{
+ QString fullRelPath = QLatin1String("akonadi");
+ if (Akonadi::ServerManager::hasInstanceIdentifier()) {
+ fullRelPath += QDir::separator() + QLatin1String("instance") + QDir::separator() + Akonadi::ServerManager::instanceIdentifier();
+ }
+ return XdgBaseDirs::saveDir("data", fullRelPath);
+}
+
+QString ProtocolHelper::absolutePayloadFilePath(const QString &fileName)
+{
+ QFileInfo fi(fileName);
+ if (!fi.isAbsolute()) {
+ return akonadiStoragePath() + QDir::separator() + QLatin1String("file_db_data") + QDir::separator() + fileName;
+ }
+
+ return fileName;
+}
+
+bool ProtocolHelper::streamPayloadToFile(const QByteArray &command, const QByteArray &data, QByteArray &error)
+{
+ const int fnStart = command.indexOf("[FILE ") + 6;
+ if (fnStart == -1) {
+ kDebug() << "Unexpected response";
+ return false;
+ }
+ const int fnEnd = command.indexOf("]", fnStart);
+ const QByteArray fn = command.mid(fnStart, fnEnd - fnStart);
+ const QString fileName = ProtocolHelper::absolutePayloadFilePath(QString::fromLatin1(fn));
+ if (!fileName.startsWith(akonadiStoragePath())) {
+ kWarning() << "Invalid file path" << fileName;
+ error = "Invalid file path";
+ return false;
+ }
+ QFile file(fileName);
+ if (!file.open(QIODevice::WriteOnly | QIODevice::Truncate)) {
+ kWarning() << "Failed to open destination payload file" << file.errorString();
+ error = "Failed to store payload into file";
+ return false;
+ }
+ if (file.write(data) != data.size()) {
+ kWarning() << "Failed to write all payload data to file";
+ error = "Failed to store payload into file";
+ return false;
+ }
+ kDebug() << "Wrote" << data.size() << "bytes to " << file.fileName();
+
+ // Make sure stuff is written to disk
+ file.close();
+ return true;
+}
diff --git a/akonadi/protocolhelper_p.h b/akonadi/protocolhelper_p.h
index 24ba2d2..ddbb973 100644
--- a/akonadi/protocolhelper_p.h
+++ b/akonadi/protocolhelper_p.h
@@ -229,6 +229,10 @@ public:
static void parseItemFetchResult(const QList<QByteArray> &lineTokens, Item &item, ProtocolHelperValuePool *valuePool = 0);
static void parseTagFetchResult(const QList<QByteArray> &lineTokens, Tag &tag);
+ static QString akonadiStoragePath();
+ static QString absolutePayloadFilePath(const QString &fileName);
+
+ static bool streamPayloadToFile(const QByteArray &command, const QByteArray &data, QByteArray &error);
};
}
diff --git a/akonadi/session.cpp b/akonadi/session.cpp
index 8b9ac60..f91a880 100644
--- a/akonadi/session.cpp
+++ b/akonadi/session.cpp
@@ -58,7 +58,8 @@ static const QList<QByteArray> sCapabilities = QList<QByteArray>()
<< "NOTIFY 3"
<< "NOPAYLOADPATH"
<< "AKAPPENDSTREAMING"
- << "SERVERSEARCH";
+ << "SERVERSEARCH"
+ << "DIRECTSTREAMING";
void SessionPrivate::startNext()
{
commit f3061f0ba5d0c96c3b772f3bc3c07cee5b7d6245
Author: Dan Vrátil <dvratil at redhat.com>
Date: Fri May 23 16:44:11 2014 +0200
Fix handling of tags in ItemCreateJob
Requires fixed server.
Conflicts:
CMakeLists.txt
diff --git a/akonadi/itemcreatejob.cpp b/akonadi/itemcreatejob.cpp
index 621ad6a..d4badd3 100644
--- a/akonadi/itemcreatejob.cpp
+++ b/akonadi/itemcreatejob.cpp
@@ -134,14 +134,26 @@ void ItemCreateJob::doStart()
}
if (d->mItem.d_func()->mTagsOverwritten || !merge) {
Q_FOREACH(const Akonadi::Tag &tag, d->mItem.d_func()->mAddedTags) {
- flags += "TAG " + tag.remoteId();
+ if (tag.gid().isEmpty() && !tag.remoteId().isEmpty()) {
+ flags += "\\RTag[" + tag.remoteId() + ']';
+ } else if (!tag.gid().isEmpty()) {
+ flags += "\\Tag[" + tag.gid() + ']';
+ }
}
} else {
Q_FOREACH(const Akonadi::Tag &tag, d->mItem.d_func()->mAddedTags) {
- flags += "+TAG " + tag.remoteId();
+ if (tag.gid().isEmpty() && !tag.remoteId().isEmpty()) {
+ flags += "+\\RTag[" + tag.remoteId() + ']';
+ } else if (!tag.gid().isEmpty()) {
+ flags += "+\\Tag[" + tag.gid() + ']';
+ }
}
Q_FOREACH(const Akonadi::Tag &tag, d->mItem.d_func()->mDeletedTags) {
- flags += "-TAG " + tag.remoteId();
+ if (tag.gid().isEmpty() && !tag.remoteId().isEmpty()) {
+ flags += "-\\RTag[" + tag.remoteId() + ']';
+ } else if (!tag.gid().isEmpty()) {
+ flags += "-\\Tag[" + tag.gid() + ']';
+ }
}
}
commit c68f38c4a1dcc4a5689a86e5b3e1fa2c3d306a7a
Author: Dan Vrátil <dvratil at redhat.com>
Date: Mon May 19 10:08:27 2014 +0200
Add explicit to Tag jobs ctors
diff --git a/akonadi/tagcreatejob.h b/akonadi/tagcreatejob.h
index 9a040d2..74e0c74 100644
--- a/akonadi/tagcreatejob.h
+++ b/akonadi/tagcreatejob.h
@@ -42,7 +42,7 @@ public:
* @param tag The tag to create.
* @param parent The parent object.
*/
- TagCreateJob(const Tag &tag, QObject *parent = 0);
+ explicit TagCreateJob(const Tag &tag, QObject *parent = 0);
/**
* Returns the created tag with the new unique id, or an invalid tag if the job failed.
diff --git a/akonadi/tagdeletejob.h b/akonadi/tagdeletejob.h
index cce8797..9fa6fdb 100644
--- a/akonadi/tagdeletejob.h
+++ b/akonadi/tagdeletejob.h
@@ -37,8 +37,8 @@ class AKONADI_EXPORT TagDeleteJob : public Job
Q_OBJECT
public:
- TagDeleteJob(const Tag &tag, QObject *parent = 0);
- TagDeleteJob(const Tag::List &tag, QObject *parent = 0);
+ explicit TagDeleteJob(const Tag &tag, QObject *parent = 0);
+ explicit TagDeleteJob(const Tag::List &tag, QObject *parent = 0);
/**
* Returns the tags passed to the constructor.
diff --git a/akonadi/tagfetchjob.h b/akonadi/tagfetchjob.h
index 6fcc0cb..96e108d 100644
--- a/akonadi/tagfetchjob.h
+++ b/akonadi/tagfetchjob.h
@@ -48,7 +48,7 @@ public:
*
* @param parent The parent object.
*/
- TagFetchJob(QObject *parent = 0);
+ explicit TagFetchJob(QObject *parent = 0);
/**
* Constructs a new tag fetch job that retrieves the specified tag.
@@ -60,7 +60,7 @@ public:
* @param tag The tag to fetch.
* @param parent The parent object.
*/
- TagFetchJob(const Tag &tag, QObject *parent = 0);
+ explicit TagFetchJob(const Tag &tag, QObject *parent = 0);
/**
* Constructs a new tag fetch job that retrieves specified tags.
@@ -72,7 +72,7 @@ public:
* @param tags Tags to fetch.
* @param parent The parent object.
*/
- TagFetchJob(const Tag::List &tags, QObject *parent = 0);
+ explicit TagFetchJob(const Tag::List &tags, QObject *parent = 0);
/**
* Convenience ctor equivalent to ItemFetchJob(const Item::List &items, QObject *parent = 0)
@@ -80,7 +80,7 @@ public:
* @param ids UIDs of tags to fetch.
* @param parent The parent object.
*/
- TagFetchJob(const QList<Tag::Id> &ids, QObject *parent = 0);
+ explicit TagFetchJob(const QList<Tag::Id> &ids, QObject *parent = 0);
/**
* Sets the tag fetch scope.
diff --git a/akonadi/tagmodifyjob.h b/akonadi/tagmodifyjob.h
index 31edacf..5d9be1a 100644
--- a/akonadi/tagmodifyjob.h
+++ b/akonadi/tagmodifyjob.h
@@ -42,7 +42,7 @@ public:
* @param tag The tag to modify.
* @param parent The parent object.
*/
- TagModifyJob(const Tag &tag, QObject *parent = 0);
+ explicit TagModifyJob(const Tag &tag, QObject *parent = 0);
/**
* Returns the modified tag.
commit fad78841c3bd81cfbe2937339500d17974905025
Author: Christian Mollekopf <chrigi_1 at fastmail.fm>
Date: Sun Aug 10 14:29:20 2014 +0200
Add documentation to TagFetchJob
Conflicts:
akonadi/tagfetchjob.h
diff --git a/akonadi/tagfetchjob.h b/akonadi/tagfetchjob.h
index f4dd905..6fcc0cb 100644
--- a/akonadi/tagfetchjob.h
+++ b/akonadi/tagfetchjob.h
@@ -29,7 +29,13 @@ class TagFetchScope;
class TagFetchJobPrivate;
/**
- * @short Job that fetches tags.
+ * @short Job that fetches tags from the Akonadi storage.
+ *
+ * This class is used to fetch tags from the Akonadi storage.
+ *
+ * If you want to fetch all items with given tag, use ItemFetchJob and the
+ * ItemFetchJob(const Tag &tag, QObject *parent = 0) constructor (since 4.14)
+ *
* @since 4.13
*/
class AKONADI_EXPORT TagFetchJob : public Job
@@ -37,14 +43,68 @@ class AKONADI_EXPORT TagFetchJob : public Job
Q_OBJECT
public:
-
+ /**
+ * Constructs a new tag fetch job that retrieves all tags stored in Akonadi.
+ *
+ * @param parent The parent object.
+ */
TagFetchJob(QObject *parent = 0);
+
+ /**
+ * Constructs a new tag fetch job that retrieves the specified tag.
+ * If the tag has a uid set, this is used to identify the tag on the Akonadi
+ * server. If only a remote identifier is available, that is used. However
+ * as remote identifiers are internal to resources, it's necessary to set
+ * the resource context (see ResourceSelectJob).
+ *
+ * @param tag The tag to fetch.
+ * @param parent The parent object.
+ */
TagFetchJob(const Tag &tag, QObject *parent = 0);
+
+ /**
+ * Constructs a new tag fetch job that retrieves specified tags.
+ * If the tags have a uid set, this is used to identify the tags on the Akonadi
+ * server. If only a remote identifier is available, that is used. However
+ * as remote identifiers are internal to resources, it's necessary to set
+ * the resource context (see ResourceSelectJob).
+ *
+ * @param tags Tags to fetch.
+ * @param parent The parent object.
+ */
TagFetchJob(const Tag::List &tags, QObject *parent = 0);
+
+ /**
+ * Convenience ctor equivalent to ItemFetchJob(const Item::List &items, QObject *parent = 0)
+ *
+ * @param ids UIDs of tags to fetch.
+ * @param parent The parent object.
+ */
TagFetchJob(const QList<Tag::Id> &ids, QObject *parent = 0);
+ /**
+ * Sets the tag fetch scope.
+ *
+ * The TagFetchScope controls how much of an tags's data is fetched
+ * from the server.
+ *
+ * @param fetchScope The new fetch scope for tag fetch operations.
+ * @see fetchScope()
+ */
void setFetchScope(const TagFetchScope &);
+ /**
+ * Returns the tag fetch scope.
+ *
+ * Since this returns a reference it can be used to conveniently modify the
+ * current scope in-place, i.e. by calling a method on the returned reference
+ * without storing it in a local variable. See the TagFetchScope documentation
+ * for an example.
+ *
+ * @return a reference to the current tag fetch scope
+ *
+ * @see setFetchScope() for replacing the current tag fetch scope
+ */
TagFetchScope &fetchScope();
/**
More information about the commits
mailing list