00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef KHOLIDAYS_HOLIDAYPARSERDRIVERPLAN_P_H
00023 #define KHOLIDAYS_HOLIDAYPARSERDRIVERPLAN_P_H
00024
00025 #include <fstream>
00026
00027 #include <QByteArray>
00028 #include <QStringList>
00029
00030 #include "../holidayparserdriver_p.h"
00031
00032 namespace KHolidays {
00033
00034 class HolidayScannerPlan;
00035 class HolidayParserPlan;
00036 class location;
00037
00052 class HolidayParserDriverPlan : public HolidayParserDriver
00053 {
00054 public:
00055
00061 HolidayParserDriverPlan( const QString &planFilename );
00062
00066 ~HolidayParserDriverPlan();
00067
00073 void error( const KHolidays::location &errorLocation, const QString &errorMessage );
00074
00080 void error( const QString &errorMessage );
00081
00082 protected:
00086 void parse();
00087
00091 void parseMetadata();
00092
00093
00094 friend class HolidayParserPlan;
00095
00096
00097 QString filePath();
00098
00099
00100 int adjustedMonthNumber( int month );
00101 bool isLeapYear( int year );
00102 int parseYear();
00103
00104
00105 int julianDayFromEventName( const QString &eventName );
00106 int julianDayFromEaster();
00107 int julianDayFromPascha();
00108 int julianDayFromMonthDay( int month, int day );
00109 int julianDayFromRelativeWeekday( int occurrence, int weekday, int jd );
00110 int julianDayFromWeekdayInMonth( int occurrence, int weekday, int month );
00111
00112
00113 void setFileCountryCode( const QString &countryCode );
00114 void setFileLanguageCode( const QString &languageCode );
00115 void setFileName( const QString &ame );
00116 void setFileDescription( const QString &description );
00117 void setEventName( const QString &eventName );
00118 void setEventColorName( int nameColor );
00119 void setEventColorDay( int dayColor );
00120 void setEventCalendarType( const QString &calendarType = "gregorian" );
00121 void setEventDate( int eventYear, int eventMonth, int eventDay );
00122 void setEventDate( int jd );
00123
00124
00125 void setFromEaster( int offset, int duration );
00126 void setFromPascha( int offset, int duration );
00127 void setFromDate( int offset, int condition, int duration );
00128 void setFromWeekdayInMonth( int occurrence, int weekday, int month, int offset, int duration );
00129 void setFromRelativeWeekday( int occurrence, int weekday, int offset, int duration );
00130 void setEvent( int event_jd, int observe_offset, int duration );
00131
00132 private:
00133
00134 int monthsInYear( int year );
00135 int daysInMonth( int year, int month );
00136 int julianDay( int year, int month, int day );
00137 void julianDayToDate( int jd, int *year, int *month, int *day );
00138 QDate easter( int year );
00139 QDate pascha( int year );
00140
00141 int conditionalOffset( int year, int month, int day, int condition );
00142
00143 QByteArray m_scanData;
00144
00145 QStringList m_fileCalendarTypes;
00146
00147 bool m_traceParsing;
00148 HolidayParserPlan *m_parser;
00149
00150 bool m_traceScanning;
00151 HolidayScannerPlan *m_scanner;
00152
00153 bool m_parseMetadataOnly;
00154 QDate m_parseYearStart;
00155 QDate m_parseYearEaster;
00156 QDate m_parseYearPascha;
00157
00158 QString m_eventCalendarType;
00159 QString m_eventName;
00160 int m_eventYear;
00161 int m_eventMonth;
00162 int m_eventDay;
00163 int m_eventColorName;
00164 int m_eventColorDay;
00165 };
00166
00167 }
00168
00169 #endif // KHOLIDAYS_HOLIDAYPARSERDRIVERPLAN_P_H