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