File indexing completed on 2024-12-08 03:39:31
0001 /* 0002 This file is part of the kholidays library. 0003 0004 SPDX-FileCopyrightText: 2010 John Layt <john@layt.net> 0005 0006 SPDX-License-Identifier: LGPL-2.0-or-later 0007 */ 0008 0009 #ifndef KHOLIDAYS_HOLIDAYPARSERDRIVER_P_H 0010 #define KHOLIDAYS_HOLIDAYPARSERDRIVER_P_H 0011 0012 #include "qcalendarsystem_p.h" 0013 0014 #include <QDate> 0015 #include <QString> 0016 0017 #include "holiday.h" 0018 0019 namespace KHolidays 0020 { 0021 /** 0022 * HolidayParserDriver abstract base class 0023 * 0024 * Defines a standard interface for parsing holiday files of various formats 0025 * 0026 * Derived classes must implement method parse(), other methods should work for 0027 * most circumstances 0028 * 0029 * @internal Private, for internal use only 0030 */ 0031 class HolidayParserDriver 0032 { 0033 public: 0034 /** 0035 * Constructor of abstract holiday file parser driver class. 0036 * This will be called by derived classes. 0037 * 0038 * @param filePath full path to holiday file 0039 */ 0040 explicit HolidayParserDriver(const QString &filePath); 0041 0042 /** 0043 * Destructor. 0044 */ 0045 virtual ~HolidayParserDriver(); 0046 0047 /** 0048 * Return the ISO 3166 country/region code of the file 0049 * 0050 * May be either just a country code ("US" = USA) or may include a regional 0051 * identifier ("US-CA" = California). Returns "XX" if not a country. 0052 * 0053 * @return the full country code of the file 0054 */ 0055 virtual QString fileCountryCode() const; 0056 0057 /** 0058 * Return the ISO 639-1 language code of the file 0059 * 0060 * May be either just a language code ("en" = US English) or may include a country 0061 * identifier ("en_GB" = British English). 0062 * 0063 * @return the language code of the file 0064 */ 0065 virtual QString fileLanguageCode() const; 0066 0067 /** 0068 * Return the untranslated name of the file 0069 * 0070 * @return the untranslated name code of the file 0071 */ 0072 virtual QString fileName() const; 0073 0074 /** 0075 * Return the untranslated description of the file if available 0076 * 0077 * @return the untranslated description of the file 0078 */ 0079 virtual QString fileDescription() const; 0080 0081 /** 0082 * Return a list of holidays falling between any two dates with category 0083 * 0084 * @param startDate start date of the holiday parse range 0085 * @param endDate end date of the holiday parse range 0086 * @param category only holidays with corresponing category 0087 * 0088 * @return a list of holidays 0089 */ 0090 virtual Holiday::List parseHolidays(const QDate &startDate, const QDate &endDate, const QString &category); 0091 0092 /** 0093 * Return a list of holidays falling between any two dates inclusive astro seasons 0094 * 0095 * @param startDate start date of the holiday parse range 0096 * @param endDate end date of the holiday parse range 0097 * 0098 * @return a list of holidays 0099 */ 0100 virtual Holiday::List parseHolidays(const QDate &startDate, const QDate &endDate); 0101 0102 /** 0103 * Convenience function 0104 * Return a list of holidays falling on a given date 0105 * 0106 * @param date date to return holidays for 0107 * 0108 * @return a list of holidays 0109 */ 0110 virtual Holiday::List parseHolidays(const QDate &date); 0111 0112 /** 0113 * Return a list of holidays falling between any two dates without astro seasons 0114 * 0115 * @param startDate start date of the holiday parse range 0116 * @param endDate end date of the holiday parse range 0117 * 0118 * @return a list of holidays 0119 */ 0120 virtual Holiday::List parseRawHolidays(const QDate &startDate, const QDate &endDate); 0121 0122 /** 0123 * Convenience function 0124 * Return a list of holidays falling in a given calendar year 0125 * 0126 * @param calendarYear year to return holidays for 0127 * @param calendar calendar system of year 0128 * 0129 * @return a list of holidays 0130 */ 0131 virtual Holiday::List parseHolidays(int calendarYear, QCalendarSystem::CalendarSystem calendar = QCalendarSystem::GregorianCalendar); 0132 0133 /** 0134 * Standard error message handling 0135 * 0136 * @param errorMessage error message to log 0137 */ 0138 virtual void error(const QString &errorMessage); 0139 0140 protected: 0141 /** 0142 * Actually parse the file, must be re-implemented by derived classes 0143 */ 0144 virtual void parse(); 0145 0146 /** 0147 * Parse the file for metadata only and populate the metadata variables 0148 */ 0149 virtual void parseMetadata(); 0150 0151 /** 0152 * Set the calendar system to use 0153 * 0154 * @param calendar The QCalendarSystem calendar system to use 0155 */ 0156 virtual void setParseCalendar(QCalendarSystem::CalendarSystem calendar); 0157 0158 /** 0159 * Initialise parse year variables for calendar system 0160 */ 0161 virtual void setParseStartEnd(); 0162 0163 QString m_filePath; // File to be parsed 0164 0165 QString m_fileCountryCode; // File country code in ISO 3166-2 standard 0166 QString m_fileLanguageCode; // File language 0167 QString m_fileName; // File name 0168 QString m_fileDescription; // File description 0169 0170 QDate m_requestStart; // First day of period being requested 0171 QDate m_requestEnd; // Last day of period being requested 0172 0173 Holiday::List m_resultList; // List of requested holidays 0174 0175 QCalendarSystem m_parseCalendar; // Calendar system being parsed 0176 int m_parseYear; // Year currently being parsed 0177 int m_parseStartYear; // First year to parse in parse calendar 0178 int m_parseEndYear; // Last year to parse in parse calendar 0179 }; 0180 0181 } 0182 0183 #endif // KHOLIDAYS_HOLIDAYPARSERDRIVER_P_H