mirror of
https://bitbucket.org/smil3y/kdelibs.git
synced 2025-02-24 02:42:48 +00:00
229 lines
8.2 KiB
C++
229 lines
8.2 KiB
C++
/*
|
|
Copyright 2009, 2010 John Layt <john@layt.net>
|
|
|
|
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 "kcalendarsystemjapanese_p.h"
|
|
#include "kcalendarsystemgregorianprivate_p.h"
|
|
|
|
#include "kdebug.h"
|
|
#include "klocale.h"
|
|
|
|
#include <QtCore/qdatetime.h>
|
|
|
|
//Reuse the Gregorian private implementation
|
|
class KCalendarSystemJapanesePrivate : public KCalendarSystemGregorianPrivate
|
|
{
|
|
public:
|
|
explicit KCalendarSystemJapanesePrivate(KCalendarSystemJapanese *q);
|
|
virtual ~KCalendarSystemJapanesePrivate();
|
|
|
|
virtual KLocale::CalendarSystem calendarSystem() const;
|
|
virtual void loadDefaultEraList();
|
|
virtual int earliestValidYear() const;
|
|
};
|
|
|
|
//Override only a few of the Gregorian private methods
|
|
|
|
KCalendarSystemJapanesePrivate::KCalendarSystemJapanesePrivate(KCalendarSystemJapanese *q)
|
|
: KCalendarSystemGregorianPrivate(q)
|
|
{
|
|
}
|
|
|
|
KCalendarSystemJapanesePrivate::~KCalendarSystemJapanesePrivate()
|
|
{
|
|
}
|
|
|
|
KLocale::CalendarSystem KCalendarSystemJapanesePrivate::calendarSystem() const
|
|
{
|
|
return KLocale::JapaneseCalendar;
|
|
}
|
|
|
|
void KCalendarSystemJapanesePrivate::loadDefaultEraList()
|
|
{
|
|
QString name, shortName, format;
|
|
|
|
// Nengō, Only do most recent for now, use AD for the rest.
|
|
// Feel free to add more, but have mercy on the translators :-)
|
|
|
|
name = i18nc("Calendar Era: Gregorian Christian Era, years > 0, LongFormat", "Anno Domini");
|
|
shortName = i18nc("Calendar Era: Gregorian Christian Era, years > 0, ShortFormat", "AD");
|
|
format = i18nc("(kdedt-format) Gregorian, AD, full era year format used for %EY, e.g. 2000 AD", "%Ey %EC");
|
|
addEra('+', 1, q->epoch(), 1, QDate(1868, 9, 7), name, shortName, format);
|
|
|
|
name = i18nc("Calendar Era: Japanese Nengō, Meiji Era, LongFormat", "Meiji");
|
|
shortName = name;
|
|
format = i18nc("(kdedt-format) Japanese, Meiji, full era year format used for %EY, year = 1, e.g. Meiji 1", "%EC Gannen");
|
|
addEra('+', 1, QDate(1868, 9, 8), 1868, QDate(1868, 12, 31), name, shortName, format);
|
|
format = i18nc("(kdedt-format) Japanese, Meiji, full era year format used for %EY, year > 1, e.g. Meiji 22", "%EC %Ey");
|
|
addEra('+', 2, QDate(1869, 1, 1), 1869, QDate(1912, 7, 29), name, shortName, format);
|
|
|
|
name = i18nc("Calendar Era: Japanese Nengō, Taishō Era, LongFormat", "Taishō");
|
|
shortName = name;
|
|
format = i18nc("(kdedt-format) Japanese, Taishō, full era year format used for %EY, year = 1, e.g. Taishō 1", "%EC Gannen");
|
|
addEra('+', 1, QDate(1912, 7, 30), 1912, QDate(1912, 12, 31), name, shortName, format);
|
|
format = i18nc("(kdedt-format) Japanese, Taishō, full era year format used for %EY, year > 1, e.g. Taishō 22", "%EC %Ey");
|
|
addEra('+', 2, QDate(1913, 1, 1), 1913, QDate(1926, 12, 24), name, shortName, format);
|
|
|
|
name = i18nc("Calendar Era: Japanese Nengō, Shōwa Era, LongFormat", "Shōwa");
|
|
shortName = name;
|
|
format = i18nc("(kdedt-format) Japanese, Shōwa, full era year format used for %EY, year = 1, e.g. Shōwa 1", "%EC Gannen");
|
|
addEra('+', 1, QDate(1926, 12, 25), 1926, QDate(1926, 12, 31), name, shortName, format);
|
|
format = i18nc("(kdedt-format) Japanese, Shōwa, full era year format used for %EY, year > 1, e.g. Shōwa 22", "%EC %Ey");
|
|
addEra('+', 2, QDate(1927, 1, 1), 1927, QDate(1989, 1, 7), name, shortName, format);
|
|
|
|
name = i18nc("Calendar Era: Japanese Nengō, Heisei Era, LongFormat", "Heisei");
|
|
shortName = name;
|
|
format = i18nc("(kdedt-format) Japanese, Heisei, full era year format used for %EY, year = 1, e.g. Heisei 1", "%EC Gannen");
|
|
addEra('+', 1, QDate(1989, 1, 8), 1989, QDate(1989, 12, 31), name, shortName, format);
|
|
format = i18nc("(kdedt-format) Japanese, Heisei, full era year format used for %EY, year > 1, e.g. Heisei 22", "%EC %Ey");
|
|
addEra('+', 2, QDate(1990, 1, 1), 1990, q->latestValidDate(), name, shortName, format);
|
|
}
|
|
|
|
int KCalendarSystemJapanesePrivate::earliestValidYear() const
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
|
|
KCalendarSystemJapanese::KCalendarSystemJapanese(const KLocale *locale)
|
|
: KCalendarSystemGregorian(*new KCalendarSystemJapanesePrivate(this), KSharedConfig::Ptr(), locale)
|
|
{
|
|
d_ptr->loadConfig(calendarType());
|
|
}
|
|
|
|
KCalendarSystemJapanese::KCalendarSystemJapanese(const KSharedConfig::Ptr config, const KLocale *locale)
|
|
: KCalendarSystemGregorian(*new KCalendarSystemJapanesePrivate(this), config, locale)
|
|
{
|
|
d_ptr->loadConfig(calendarType());
|
|
}
|
|
|
|
KCalendarSystemJapanese::KCalendarSystemJapanese(KCalendarSystemJapanesePrivate &dd,
|
|
const KSharedConfig::Ptr config, const KLocale *locale)
|
|
: KCalendarSystemGregorian(dd, config, locale)
|
|
{
|
|
d_ptr->loadConfig(calendarType());
|
|
}
|
|
|
|
KCalendarSystemJapanese::~KCalendarSystemJapanese()
|
|
{
|
|
}
|
|
|
|
QString KCalendarSystemJapanese::calendarType() const
|
|
{
|
|
return QLatin1String("japanese");
|
|
}
|
|
|
|
QDate KCalendarSystemJapanese::epoch() const
|
|
{
|
|
// 0001-01-01 Gregorian for now
|
|
return QDate::fromJulianDay(1721426);
|
|
}
|
|
|
|
QDate KCalendarSystemJapanese::earliestValidDate() const
|
|
{
|
|
// 0001-01-01 Gregorian for now
|
|
return QDate::fromJulianDay(1721426);
|
|
}
|
|
|
|
QDate KCalendarSystemJapanese::latestValidDate() const
|
|
{
|
|
// Set to last day of year 9999 until confirm date formats & widgets support > 9999
|
|
// 9999-12-31 Gregorian
|
|
return QDate::fromJulianDay(5373484);
|
|
}
|
|
|
|
bool KCalendarSystemJapanese::isValid(int year, int month, int day) const
|
|
{
|
|
return KCalendarSystemGregorian::isValid(year, month, day);
|
|
}
|
|
|
|
bool KCalendarSystemJapanese::isValid(const QDate &date) const
|
|
{
|
|
return KCalendarSystemGregorian::isValid(date);
|
|
}
|
|
|
|
bool KCalendarSystemJapanese::isLeapYear(int year) const
|
|
{
|
|
return KCalendarSystemGregorian::isLeapYear(year);
|
|
}
|
|
|
|
bool KCalendarSystemJapanese::isLeapYear(const QDate &date) const
|
|
{
|
|
return KCalendarSystemGregorian::isLeapYear(date);
|
|
}
|
|
|
|
QString KCalendarSystemJapanese::monthName(int month, int year, MonthNameFormat format) const
|
|
{
|
|
return KCalendarSystemGregorian::monthName(month, year, format);
|
|
}
|
|
|
|
QString KCalendarSystemJapanese::monthName(const QDate &date, MonthNameFormat format) const
|
|
{
|
|
return KCalendarSystemGregorian::monthName(date, format);
|
|
}
|
|
|
|
QString KCalendarSystemJapanese::weekDayName(int weekDay, WeekDayNameFormat format) const
|
|
{
|
|
return KCalendarSystemGregorian::weekDayName(weekDay, format);
|
|
}
|
|
|
|
QString KCalendarSystemJapanese::weekDayName(const QDate &date, WeekDayNameFormat format) const
|
|
{
|
|
return KCalendarSystemGregorian::weekDayName(date, format);
|
|
}
|
|
|
|
int KCalendarSystemJapanese::yearStringToInteger(const QString &sNum, int &iLength) const
|
|
{
|
|
QString gannen = i18nc("Japanese year 1 of era", "Gannen");
|
|
if (sNum.startsWith(gannen, Qt::CaseInsensitive)) {
|
|
iLength = gannen.length();
|
|
return 1;
|
|
} else {
|
|
return KCalendarSystemGregorian::yearStringToInteger(sNum, iLength);
|
|
}
|
|
}
|
|
|
|
bool KCalendarSystemJapanese::isLunar() const
|
|
{
|
|
return KCalendarSystemGregorian::isLunar();
|
|
}
|
|
|
|
bool KCalendarSystemJapanese::isLunisolar() const
|
|
{
|
|
return KCalendarSystemGregorian::isLunisolar();
|
|
}
|
|
|
|
bool KCalendarSystemJapanese::isSolar() const
|
|
{
|
|
return KCalendarSystemGregorian::isSolar();
|
|
}
|
|
|
|
bool KCalendarSystemJapanese::isProleptic() const
|
|
{
|
|
return false;
|
|
}
|
|
|
|
bool KCalendarSystemJapanese::julianDayToDate(int jd, int &year, int &month, int &day) const
|
|
{
|
|
return KCalendarSystemGregorian::julianDayToDate(jd, year, month, day);
|
|
}
|
|
|
|
bool KCalendarSystemJapanese::dateToJulianDay(int year, int month, int day, int &jd) const
|
|
{
|
|
return KCalendarSystemGregorian::dateToJulianDay(year, month, day, jd);
|
|
}
|