summaryrefslogtreecommitdiffstats
path: root/kdecore/kcalendarsystemjalali.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kdecore/kcalendarsystemjalali.cpp')
-rw-r--r--kdecore/kcalendarsystemjalali.cpp560
1 files changed, 0 insertions, 560 deletions
diff --git a/kdecore/kcalendarsystemjalali.cpp b/kdecore/kcalendarsystemjalali.cpp
deleted file mode 100644
index 6197ca75f..000000000
--- a/kdecore/kcalendarsystemjalali.cpp
+++ /dev/null
@@ -1,560 +0,0 @@
-/*
- Copyright (C) 2002-2003 Arash Bijanzadeh and FarsiKDE Project <www.farsikde.org>
- Contact: Arash Bijanzadeh <a.bijanzadeh@linuxiran.org>
-
- This program is part of FarsiKDE
-
- FarsiKDE 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.
-
- FarsiKDE 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 <tqdatetime.h>
-#include <tqstring.h>
-#include <tqstringlist.h>
-#include <math.h>
-
-#include <kglobal.h>
-#include <klocale.h>
-#include <kdebug.h>
-#include <stdio.h>
-
-#include "kcalendarsystemjalali.h"
-
-static const int gMonthDay[2][13]={
- {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
- {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
-};
-
-static const int jMonthDay[2][13] = {
- {0, 31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 29},
- {0, 31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 30},
-};
-
-typedef struct {
- int day;
- int mon;
- int year;
- } SDATE;
-// converting funcs from
-
-static int Ceil(float number)
-{
- int ret;
- if(number>0)
- number += 0.5;
- ret =(int) number;
- return ret;
-}
-
-static long jalali_jdn(int year, int month, int day)
-{
- const long PERSIAN_EPOCH = 1948321; /* The JDN of 1 Farvardin 1*/
- int epbase;
- long epyear;
- long mdays;
- long jdn;
- epbase = year - 474;
- epyear = 474 + (epbase % 2820);
- if (month <= 7)
- mdays = (month - 1) * 31;
- else
- mdays = (month - 1) * 30 + 6;
- jdn = day + mdays ;
- jdn += (((epyear * 682) - 110) / 2816) ;
- jdn += (epyear - 1) * 365;
- jdn += (epbase / 2820) * 1029983 ;
- jdn += (PERSIAN_EPOCH - 1);
- return jdn;
-}
-
-
-static SDATE jdn_jalali(long jdn)
-{
- static SDATE ret;
- int day, month, year;
- int iYear, iMonth, iDay;
- int depoch;
- int cycle;
- int cyear;
- int ycycle;
- int aux1, aux2;
- int yday;
- day = 1;
- month = 1;
- year = 475;
- depoch = jdn - jalali_jdn(year,month, day);
- cycle = (int) (depoch / 1029983);
- cyear = depoch % 1029983;
- if( cyear == 1029982)
- ycycle = 2820;
- else{
- aux1 = cyear / 366;
- aux2 = cyear % 366;
- ycycle = (((2134 * aux1) + (2816 * aux2) + 2815) / 1028522) + aux1 + 1;
- }
- iYear = ycycle + (2820 * cycle) + 474;
- if (iYear <= 0)
- iYear = iYear - 1;
- year = iYear;
- yday = (jdn - jalali_jdn(year, month, day)) + 1;
- if(yday <= 186 )
- iMonth = Ceil((yday-1) / 31);
- else
- iMonth = Ceil((yday - 7) / 30);
- iMonth++;
- month = iMonth;
- iDay = (jdn - jalali_jdn(year, month, day)) + 1;
- ret.day = iDay;
- ret.mon = iMonth;
- ret.year = iYear;
- return ret;
-}
-
-
-
-static long civil_jdn(int year, int month, int day)
-{
- long jdn = ((1461 * (year + 4800 + ((month - 14) / 12))) / 4)
- + ((367 * (month - 2 - 12 * (((month - 14) / 12)))) / 12)
- - ((3 * (((year + 4900 + ((month - 14) / 12)) / 100))) / 4)
- + day - 32075;
- return jdn;
-}
-
-static SDATE jdn_civil(long jdn)
-{
- long l, n, i, j;
- static SDATE ret;
- int iday, imonth, iyear;
- l = jdn + 68569;
- n = ((4 * l) / 146097);
- l = l - ((146097 * n + 3) / 4);
- i = ((4000 * (l + 1)) / 1461001);
- l = l - ((1461 * i) / 4) + 31;
- j = ((80 * l) / 2447);
- iday = l - ((2447 * j) / 80);
- l = (j / 11);
- imonth = j + 2 - 12 * l;
- iyear = 100 * (n - 49) + i + l;
- ret.day = iday;
- ret.mon = imonth;
- ret.year = iyear;
- return (ret);
-}
-
-static SDATE *jalaliToGregorian(int y,int m,int d)
-{
-static SDATE sd;
-long jday = jalali_jdn(y,m,d);
-sd= jdn_civil(jday);
-return (&sd);
-}
-static SDATE *gregorianToJalali(int y,int m, int d)
-{
- static SDATE sd;
- long jdn = civil_jdn(y,m,d);//TQDate::gregorianToJulian(y, m, d);
- sd = jdn_jalali(jdn);
- return(&sd);
-}
-static void gregorianToJalali(const TQDate & date, int * pYear, int * pMonth,
- int * pDay)
-{
- SDATE *sd;
- sd = gregorianToJalali(date.year(), date.month(), date.day());
- if (pYear)
- *pYear = sd->year;
- if (pMonth)
- *pMonth = sd->mon;
- if (pDay)
- *pDay = sd->day;
-
-}
-
-// End of converting functions
-
-static int isJalaliLeap(int year)
-{
- int tmp;
- tmp = year % 33;
- if (tmp == 1 || tmp == 5||tmp==9||tmp==13||tmp==17||tmp==22||tmp==26||tmp==30)
- return 1;
-else
- return 0;
-}
-static int hndays(int m,int y)
-{
- return jMonthDay[isJalaliLeap(y)][m];
-}
-
-
-KCalendarSystemJalali::KCalendarSystemJalali(const KLocale * locale)
- : KCalendarSystem(locale)
-{
-}
-
-KCalendarSystemJalali::~KCalendarSystemJalali()
-{
-}
-
-int KCalendarSystemJalali::year(const TQDate& date) const
-
-{
- kdDebug(5400) << "Jalali year..." << endl;
-int y;
- gregorianToJalali(date, &y, 0, 0);
- return y;
-}
-
-int KCalendarSystemJalali::month (const TQDate& date) const
-
-{
- kdDebug(5400) << "Jalali month..." << endl;
-int m;
- gregorianToJalali(date, 0 , &m, 0);
- return m;
-}
-
-int KCalendarSystemJalali::day(const TQDate& date) const
-
-{
- kdDebug(5400) << "Jalali day..." << endl;
-int d;
- gregorianToJalali(date, 0, 0, &d);
- return d;
-}
-
-int KCalendarSystemJalali::dayOfWeek(const TQDate& date) const
-{
-//same same I think?!
- return date.dayOfWeek();
-
-}
-
-//NOT TESTED YET
-int KCalendarSystemJalali::dayOfYear(const TQDate & date) const
-{
- TQDate first;
- setYMD(first, year(date), 1, 1);
-
- return first.daysTo(date) + 1;
-}
-
-//MAY BE BUGGY
-bool KCalendarSystemJalali::setYMD(TQDate & date, int y, int m, int d) const
-{
- // range checks
- if ( y < minValidYear() || y > maxValidYear() )
- return false;
-
- if ( m < 1 || m > 12 )
- return false;
-
- if ( d < 1 || d > hndays(m, y) )
- return false;
-
- SDATE *gd =jalaliToGregorian( y, m, d);
-
- return date.setYMD(gd->year, gd->mon, gd->day);
-}
-
-TQDate KCalendarSystemJalali::addYears( const TQDate & date, int nyears ) const
-{
- TQDate result = date;
- int y = year(date) + nyears;
- setYMD( result, y, month(date), day(date) );
-
- return result;
-}
-
-TQDate KCalendarSystemJalali::addMonths( const TQDate & date, int nmonths ) const
-{
- TQDate result = date;
- int m = month(date);
- int y = year(date);
-
- if ( nmonths < 0 )
- {
- m += 12;
- y -= 1;
- }
-
- --m; // this only works if we start counting at zero
- m += nmonths;
- y += m / 12;
- m %= 12;
- ++m;
-
- setYMD( result, y, m, day(date) );
-
- return result;
-}
-
-TQDate KCalendarSystemJalali::addDays( const TQDate & date, int ndays ) const
-{
- return TQT_TQDATE_OBJECT(date.addDays( ndays ));
-}
-
-int KCalendarSystemJalali::monthsInYear( const TQDate & date ) const
-{
- Q_UNUSED( date )
-
- return 12;
-}
-
-int KCalendarSystemJalali::daysInYear(const TQDate & date) const
-{
-Q_UNUSED(date);
-int result;
-//SDATE *sd = gregorianToJalali(year(date),month(date),day(date));
-//if (isJalaliLeap(sd->year))
- result=366;
-//else
-// result=365;
-return result;
-}
-
-int KCalendarSystemJalali::daysInMonth(const TQDate & date) const
-{
-SDATE *sd = gregorianToJalali(date.year(),date.month(),date.day());
-return hndays(sd->mon,sd->year);
-}
-
-int KCalendarSystemJalali::weeksInYear(int year) const
-
-{
- Q_UNUSED(year);
-// couldn't understand it!
-return 52;
-}
-
-int KCalendarSystemJalali::weekNumber(const TQDate& date, int * yearNum) const
-{
- TQDate firstDayWeek1, lastDayOfYear;
- int y = year(date);
- int week;
- int weekDay1, dayOfWeek1InYear;
-
- // let's guess 1st day of 1st week
- setYMD(firstDayWeek1, y, 1, 1);
- weekDay1 = dayOfWeek(firstDayWeek1);
-
- // iso 8601: week 1 is the first containing thursday and week starts on
- // monday
- if (weekDay1 > 4 /*Thursday*/)
- firstDayWeek1 = addDays(firstDayWeek1 , 7 - weekDay1 + 1); // next monday
-
- dayOfWeek1InYear = dayOfYear(firstDayWeek1);
-
- if ( dayOfYear(date) < dayOfWeek1InYear ) // our date in prev year's week
- {
- if ( yearNum )
- *yearNum = y - 1;
- return weeksInYear(y - 1);
- }
- // let' check if its last week belongs to next year
- setYMD(lastDayOfYear, y, 12, hndays(12, y));
- if ( (dayOfYear(date) >= daysInYear(date) - dayOfWeek(lastDayOfYear) + 1)
- // our date is in last week
- && dayOfWeek(lastDayOfYear) < 4) // 1st week in next year has thursday
- {
- if ( yearNum )
- *yearNum = y + 1;
- week = 1;
- }
- else
- week = firstDayWeek1.daysTo(date) / 7 + 1;
-
- return week;
-}
-
-TQString KCalendarSystemJalali::monthName(int month, int year, bool shortName)
- const
-{
- Q_UNUSED(year);
-
- if (shortName)
- switch ( month )
- {
- case 1:
- return locale()->translate("Far");
- case 2:
- return locale()->translate("Ord");
- case 3:
- return locale()->translate("Kho");
- case 4:
- return locale()->translate("Tir");
- case 5:
- return locale()->translate("Mor");
- case 6:
- return locale()->translate("Sha");
- case 7:
- return locale()->translate("Meh");
- case 8:
- return locale()->translate("Aba");
- case 9:
- return locale()->translate("Aza");
- case 10:
- return locale()->translate("Dei");
- case 11:
- return locale()->translate("Bah");
- case 12:
- return locale()->translate("Esf");
- }
- else
- switch ( month )
- {
- case 1:
- return locale()->translate("Farvardin");
- case 2:
- return locale()->translate("Ordibehesht");
- case 3:
- return locale()->translate("Khordad");
- case 4:
- return locale()->translate("Tir");
- case 5:
- return locale()->translate("Mordad");
- case 6:
- return locale()->translate("Shahrivar");
- case 7:
- return locale()->translate("Mehr");
- case 8:
- return locale()->translate("Aban");
- case 9:
- return locale()->translate("Azar");
- case 10:
- return locale()->translate("Dei");
- case 11:
- return locale()->translate("Bahman");
- case 12:
- return locale()->translate("Esfand");
- }
-
- return TQString::null;
-}
-
-TQString KCalendarSystemJalali::monthName(const TQDate& date, bool shortName)
- const
-{
- int mon;
- gregorianToJalali(date,0,&mon,0);
- //SDATE *sd = gregorianToJalali(date.year(),date.month(),date.day());
- return (monthName(mon, 0, shortName));
-}
-
-TQString KCalendarSystemJalali::monthNamePossessive(const TQDate& date,
- bool shortName ) const
-{
- return monthName(date,shortName);
-}
-
-TQString KCalendarSystemJalali::monthNamePossessive(int month, int year,
- bool shortName ) const
-{
- return monthName(month,year,shortName);
-}
-
-
-TQString KCalendarSystemJalali::weekDayName(int day, bool shortName) const
-{
- if ( shortName )
- switch (day)
- {
- case 1:
- return locale()->translate("2sh");
- case 2:
- return locale()->translate("3sh");
- case 3:
- return locale()->translate("4sh");
- case 4:
- return locale()->translate("5sh");
- case 5:
- return locale()->translate("Jom");
- case 6:
- return locale()->translate("shn");
- case 7:
- return locale()->translate("1sh");
- }
- else
- switch ( day )
- {
- case 1:
- return locale()->translate("Do shanbe");
- case 2:
- return locale()->translate("Se shanbe");
- case 3:
- return locale()->translate("Chahar shanbe");
- case 4:
- return locale()->translate("Panj shanbe");
- case 5:
- return locale()->translate("Jumee");
- case 6:
- return locale()->translate("Shanbe");
- case 7:
- return locale()->translate("Yek-shanbe");
- }
-
- return TQString::null;
-}
-
-TQString KCalendarSystemJalali::weekDayName(const TQDate &date,bool shortName)
- const
-{
- return weekDayName(dayOfWeek(date), shortName);
-}
-
-// Min valid year that may be converted to QDate
-int KCalendarSystemJalali::minValidYear() const
-{
- TQDate date(1753, 1, 1);
-
- return year(date);
-}
-
-// Max valid year that may be converted to QDate
-int KCalendarSystemJalali::maxValidYear() const
-{
-/*
- TQDate date(8000, 1, 1);
-
- SDATE *sd = toJalali(date);
-
- return sd->year;
- */
- return 10000;
-}
-int KCalendarSystemJalali::weekDayOfPray() const
-{
- return 5; // friday
-}
-TQString KCalendarSystemJalali::calendarName() const
-{
- return TQString::tqfromLatin1("jalali");
-}
-
-bool KCalendarSystemJalali::isLunar() const
-{
- return false;
-}
-
-bool KCalendarSystemJalali::isLunisolar() const
-{
- return false;
-}
-
-bool KCalendarSystemJalali::isSolar() const
-{
- return true;
-}