51 QDateTimeParser(QMetaType::Type t, Context ctx, QCalendar cal = QCalendar())
52 : defaultLocale(QLocale::system()), parserType(t), context(ctx), calendar(cal)
55 virtual ~QDateTimeParser();
59 AmPmSection = 0x00001,
60 MSecSection = 0x00002,
61 SecondSection = 0x00004,
62 MinuteSection = 0x00008,
63 Hour12Section = 0x00010,
64 Hour24Section = 0x00020,
65 TimeZoneSection = 0x00040,
66 HourSectionMask = (Hour12Section | Hour24Section),
67 TimeSectionMask = (MSecSection | SecondSection | MinuteSection |
68 HourSectionMask | AmPmSection | TimeZoneSection),
71 MonthSection = 0x00200,
72 YearSection = 0x00400,
73 YearSection2Digits = 0x00800,
74 YearSectionMask = YearSection | YearSection2Digits,
75 DayOfWeekSectionShort = 0x01000,
76 DayOfWeekSectionLong = 0x02000,
77 DayOfWeekSectionMask = DayOfWeekSectionShort | DayOfWeekSectionLong,
78 DaySectionMask = DaySection | DayOfWeekSectionMask,
79 DateSectionMask = DaySectionMask | MonthSection | YearSectionMask,
82 FirstSection = 0x20000 | Internal,
83 LastSection = 0x40000 | Internal,
84 CalendarPopupSection = 0x80000 | Internal,
86 Q_DECLARE_FLAGS(Sections, Section)
88 static constexpr int NoSectionIndex = -1;
89 static constexpr int FirstSectionIndex = -2;
90 static constexpr int LastSectionIndex = -3;
92 struct Q_CORE_EXPORT SectionNode
94 constexpr SectionNode(Section tp,
int ps,
int ct,
int zs = 0)
95 : type(tp), pos(ps), count(ct), zeroesAdded(zs) {}
101 static QString name(Section s);
102 QString name()
const {
return name(type); }
103 QString format()
const;
104 int maxChange()
const;
114 StateNode() : state(Invalid), padded(0), conflicts(
false) {}
115 StateNode(
const QDateTime &val, State ok=Acceptable,
int pad=0,
bool bad=
false)
116 : value(val), state(ok), padded(pad), conflicts(bad) {}
128 StateNode parse(
const QString &input,
int position,
129 const QDateTime &defaultValue,
bool fixup)
const;
130 bool fromString(
const QString &text, QDate *date, QTime *time,
131 int baseYear = QLocale::DefaultTwoDigitBaseYear)
const;
132 bool fromString(
const QString &text, QDateTime *datetime,
int baseYear)
const;
133 bool parseFormat(QStringView format);
141 Q_DECLARE_FLAGS(FieldInfo, FieldInfoFlag)
143 FieldInfo fieldInfo(
int index)
const;
145 void setDefaultLocale(
const QLocale &loc) { defaultLocale = loc; }
146 virtual QString displayText()
const {
return m_text; }
147 void setCalendar(QCalendar calendar);
150 int sectionMaxSize(Section s,
int count)
const;
151 QString sectionText(
const QString &text,
int sectionIndex,
int index)
const;
152 StateNode scanString(
const QDateTime &defaultValue,
bool fixup)
const;
153 struct ParsedSection {
158 constexpr ParsedSection(State ok = Invalid,
159 int val = 0,
int read = 0,
int zs = 0)
160 : value(ok == Invalid ? -1 : val), used(read), zeroes(zs), state(ok)
163 ParsedSection parseSection(
const QDateTime ¤tValue,
int sectionIndex,
int offset)
const;
164 int findMonth(QStringView str,
int monthstart,
int sectionIndex,
165 int year, QString *monthName =
nullptr,
int *used =
nullptr)
const;
166 int findDay(QStringView str,
int intDaystart,
int sectionIndex,
167 QString *dayName =
nullptr,
int *used =
nullptr)
const;
168 ParsedSection findUtcOffset(QStringView str,
int mode)
const;
169 ParsedSection findTimeZoneName(QStringView str,
const QDateTime &when)
const;
170 ParsedSection findTimeZone(QStringView str,
const QDateTime &when,
171 int maxVal,
int minVal,
int mode)
const;
181 AmPmFinder findAmPm(QString &str,
int index,
int *used =
nullptr)
const;
183 bool potentialValue(QStringView str,
int min,
int max,
int index,
184 const QDateTime ¤tValue,
int insert)
const;
185 bool potentialValue(
const QString &str,
int min,
int max,
int index,
186 const QDateTime ¤tValue,
int insert)
const
188 return potentialValue(QStringView(str), min, max, index, currentValue, insert);
197 QString getAmPmText(AmPm ap, Case cs)
const;
198 QDateTime baseDate(
const QTimeZone &zone)
const;
200 friend class QDTPUnitTestParser;
203 int sectionSize(
int index)
const;
204 int sectionMaxSize(
int index)
const;
205 int sectionPos(
int index)
const;
206 int sectionPos(SectionNode sn)
const;
208 const SectionNode §ionNode(
int index)
const;
209 Section sectionType(
int index)
const;
210 QString sectionText(
int sectionIndex)
const;
211 int getDigit(
const QDateTime &dt,
int index)
const;
212 bool setDigit(QDateTime &t,
int index,
int newval)
const;
214 int absoluteMax(
int index,
const QDateTime &value = QDateTime())
const;
215 int absoluteMin(
int index)
const;
217 bool skipToNextSection(
int section,
const QDateTime ¤t, QStringView sectionText)
const;
218 bool skipToNextSection(
int section,
const QDateTime ¤t,
const QString §ionText)
const
220 return skipToNextSection(section, current, QStringView(sectionText));
222 QString stateName(State s)
const;
224 virtual QDateTime getMinimum(
const QTimeZone &zone)
const;
225 virtual QDateTime getMaximum(
const QTimeZone &zone)
const;
226 virtual int cursorPosition()
const {
return -1; }
227 virtual QLocale locale()
const {
return defaultLocale; }
229 mutable int currentSectionIndex =
int(NoSectionIndex);
230 mutable int defaultCenturyStart = QLocale::DefaultTwoDigitBaseYear;
233
234
235
236
237
238
239
240
241
242
243
244
245 mutable int cachedDay = -1;
246 mutable QString m_text;
247 QList<SectionNode> sectionNodes;
248 QStringList separators;
249 QString displayFormat;
250 QLocale defaultLocale;
251 QMetaType::Type parserType;