summaryrefslogtreecommitdiffstats
path: root/generic
diff options
context:
space:
mode:
authorsebres <sebres@users.sourceforge.net>2017-01-10 22:38:56 (GMT)
committersebres <sebres@users.sourceforge.net>2017-01-10 22:38:56 (GMT)
commit9487f2cdcd7045ccc7f540099755acc0d2b36244 (patch)
tree4c5454ef6d689584f27bacbb860cdb9390f5c722 /generic
parentfb0ed853e7c49ff24e17f4cb633876d0780b64b5 (diff)
downloadtcl-9487f2cdcd7045ccc7f540099755acc0d2b36244.zip
tcl-9487f2cdcd7045ccc7f540099755acc0d2b36244.tar.gz
tcl-9487f2cdcd7045ccc7f540099755acc0d2b36244.tar.bz2
locale months scan switched to from list seek to index tree; bug fixing
Diffstat (limited to 'generic')
-rw-r--r--generic/tclClockFmt.c23
-rw-r--r--generic/tclDate.h4
-rw-r--r--generic/tclStrIdxTree.h2
3 files changed, 16 insertions, 13 deletions
diff --git a/generic/tclClockFmt.c b/generic/tclClockFmt.c
index 92040d8..478941b 100644
--- a/generic/tclClockFmt.c
+++ b/generic/tclClockFmt.c
@@ -682,6 +682,7 @@ ClockMCGetMultiListIdxTree(
}
ClockMCSetIdx(opts, mcKey, objPtr);
+ objPtr = NULL;
};
done:
@@ -788,22 +789,24 @@ ClockScnToken_Month_Proc(ClockFmtScnCmdArgs *opts,
return TCL_OK;
*/
+ static int monthsKeys[] = {MCLIT_MONTHS_FULL, MCLIT_MONTHS_ABBREV, 0};
+
int ret, val;
int minLen, maxLen;
+ TclStrIdxTree *idxTree;
DetermineGreedySearchLen(opts, info, tok, &minLen, &maxLen);
- ret = LocaleListSearch(opts, info, MCLIT_MONTHS_FULL, &val,
- minLen, maxLen);
+ /* get or create tree in msgcat dict */
+
+ idxTree = ClockMCGetMultiListIdxTree(opts, MCLIT_MONTHS_COMB, monthsKeys);
+ if (idxTree == NULL) {
+ return TCL_ERROR;
+ }
+
+ ret = ClockStrIdxTreeSearch(opts, info, idxTree, &val, minLen, maxLen);
if (ret != TCL_OK) {
- /* if not found */
- if (ret == TCL_RETURN) {
- ret = LocaleListSearch(opts, info, MCLIT_MONTHS_ABBREV, &val,
- minLen, maxLen);
- }
- if (ret != TCL_OK) {
- return ret;
- }
+ return ret;
}
yyMonth = val + 1;
diff --git a/generic/tclDate.h b/generic/tclDate.h
index 2728dd3..85bcd35 100644
--- a/generic/tclDate.h
+++ b/generic/tclDate.h
@@ -104,7 +104,7 @@ typedef enum ClockLiteral {
typedef enum ClockMsgCtLiteral {
MCLIT__NIL, /* placeholder */
- MCLIT_MONTHS_FULL, MCLIT_MONTHS_ABBREV,
+ MCLIT_MONTHS_FULL, MCLIT_MONTHS_ABBREV, MCLIT_MONTHS_COMB,
MCLIT_DAYS_OF_WEEK_FULL, MCLIT_DAYS_OF_WEEK_ABBREV,
MCLIT_AM, MCLIT_PM,
MCLIT_BCE, MCLIT_CE,
@@ -116,7 +116,7 @@ typedef enum ClockMsgCtLiteral {
#define CLOCK_LOCALE_LITERAL_ARRAY(litarr, pref) static const char *const litarr[] = { \
pref "", \
- pref "MONTHS_FULL", pref "MONTHS_ABBREV", \
+ pref "MONTHS_FULL", pref "MONTHS_ABBREV", pref "MONTHS_COMB", \
pref "DAYS_OF_WEEK_FULL", pref "DAYS_OF_WEEK_ABBREV", \
pref "AM", pref "PM", \
pref "BCE", pref "CE", \
diff --git a/generic/tclStrIdxTree.h b/generic/tclStrIdxTree.h
index d2d6f0b..934e28f 100644
--- a/generic/tclStrIdxTree.h
+++ b/generic/tclStrIdxTree.h
@@ -111,7 +111,7 @@ TclUtfFindEqualNCInLwr(
return ret;
}
-inline char *
+inline const char *
TclUtfNext(
register const char *src) /* The current location in the string. */
{