/* -----------------------------------------------------------------------
* formatting.c
*
- * $Header: /cvsroot/pgsql/src/backend/utils/adt/formatting.c,v 1.6 2000/03/16 01:35:41 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/utils/adt/formatting.c,v 1.7 2000/04/07 19:17:31 momjian Exp $
*
*
* Portions Copyright (c) 1999-2000, PostgreSQL, Inc
* In this module the POSIX 'struct tm' type is *not* used, but rather
* PgSQL type, which has tm_mon based on one (*non* zero) and
* year *not* based on 1900, but is used full year number.
- * Module supports AC / BC years.
+ * Module supports AD / BC / AM / PM.
*
* Supported types for to_char():
*
* UnComment me for DEBUG
* ----------
*/
-/***
+/***
#define DEBUG_TO_FROM_CHAR
#define DEBUG_elog_output NOTICE
***/
* KeyWord Index (ascii from position 32 (' ') to 126 (~))
* ----------
*/
-#define KeyWord_INDEX_SIZE ('~' - ' ' + 1)
-#define KeyWord_INDEX_FILTER(_c) ((_c) < ' ' || (_c) > '~' ? 0 : 1)
+#define KeyWord_INDEX_SIZE ('~' - ' ')
+#define KeyWord_INDEX_FILTER(_c) ((_c) <= ' ' || (_c) >= '~' ? 0 : 1)
/* ----------
* Maximal length of one node
* ----------
*/
#define YEAR_ABS(_y) (_y < 0 ? -(_y -1) : _y)
-#define BC_STR " BC"
+#define BC_STR_ORIG " BC"
+
+#define A_D_STR "A.D."
+#define a_d_STR "a.d."
+#define AD_STR "AD"
+#define ad_STR "ad"
+
+#define B_C_STR "B.C."
+#define b_c_STR "b.c."
+#define BC_STR "BC"
+#define bc_STR "bc"
+
+
+/* ----------
+ * AM / PM
+ * ----------
+ */
+#define A_M_STR "A.M."
+#define a_m_STR "a.m."
+#define AM_STR "AM"
+#define am_STR "am"
+
+#define P_M_STR "P.M."
+#define p_m_STR "p.m."
+#define PM_STR "PM"
+#define pm_STR "pm"
+
/* ----------
* Months in roman-numeral
* 'VIII' must be over 'V')
* ----------
*/
-static char *rm_months[] = {
- "XII", "XI", "X", "IX", "VIII", "VII",
- "VI", "V", "IV", "III", "II", "I", NULL
-};
+static char *rm_months_upper[] =
+{ "XII", "XI", "X", "IX", "VIII", "VII", "VI", "V", "IV", "III", "II", "I", NULL };
+
+static char *rm_months_lower[] =
+{ "xii", "xi", "x", "ix", "viii", "vii", "vi", "v", "iv", "iii", "ii", "i", NULL };
/* ----------
* Roman numbers
*/
static KeySuffix DCH_suff[] = {
{ "FM", 2, DCH_S_FM, SUFFTYPE_PREFIX },
+ { "fm", 2, DCH_S_FM, SUFFTYPE_PREFIX },
{ "TH", 2, DCH_S_TH, SUFFTYPE_POSTFIX },
{ "th", 2, DCH_S_th, SUFFTYPE_POSTFIX },
{ "SP", 2, DCH_S_SP, SUFFTYPE_POSTFIX },
*/
typedef enum {
+ DCH_A_D,
+ DCH_A_M,
+ DCH_AD,
+ DCH_AM,
+ DCH_B_C,
+ DCH_BC,
DCH_CC,
DCH_DAY,
DCH_DDD,
DCH_MON,
DCH_Month,
DCH_Mon,
+ DCH_P_M,
+ DCH_PM,
DCH_Q,
DCH_RM,
DCH_SSSS,
DCH_YYY,
DCH_YY,
DCH_Y,
- DCH_day,
+ DCH_a_d,
+ DCH_a_m,
+ DCH_ad,
+ DCH_am,
+ DCH_b_c,
+ DCH_bc,
+ DCH_cc,
+ DCH_day,
+ DCH_ddd,
+ DCH_dd,
DCH_dy,
+ DCH_d,
+ DCH_fx,
+ DCH_hh24,
+ DCH_hh12,
+ DCH_hh,
+ DCH_j,
+ DCH_mi,
+ DCH_mm,
DCH_month,
DCH_mon,
+ DCH_p_m,
+ DCH_pm,
+ DCH_q,
+ DCH_rm,
+ DCH_ssss,
+ DCH_ss,
+ DCH_ww,
+ DCH_w,
+ DCH_y_yyy,
+ DCH_yyyy,
+ DCH_yyy,
+ DCH_yy,
+ DCH_y,
+
/* last */
_DCH_last_
} DCH_poz;
NUM_S,
NUM_TH,
NUM_V,
+ NUM_b,
+ NUM_c,
+ NUM_d,
+ NUM_e,
+ NUM_fm,
+ NUM_g,
+ NUM_l,
+ NUM_mi,
+ NUM_pl,
+ NUM_pr,
NUM_rn,
+ NUM_sg,
+ NUM_sp,
+ NUM_s,
NUM_th,
+ NUM_v,
+
/* last */
_NUM_last_
} NUM_poz;
*/
static KeyWord DCH_keywords[] = {
/* keyword, len, func. type is in Index */
-
-{ "CC", 2, dch_date, DCH_CC }, /*C*/
-{ "DAY", 3, dch_date, DCH_DAY }, /*D*/
-{ "DDD", 3, dch_date, DCH_DDD },
-{ "DD", 2, dch_date, DCH_DD },
-{ "DY", 2, dch_date, DCH_DY },
-{ "Day", 3, dch_date, DCH_Day },
-{ "Dy", 2, dch_date, DCH_Dy },
-{ "D", 1, dch_date, DCH_D },
-{ "FX", 2, dch_global, DCH_FX }, /*F*/
-{ "HH24", 4, dch_time, DCH_HH24 }, /*H*/
-{ "HH12", 4, dch_time, DCH_HH12 },
-{ "HH", 2, dch_time, DCH_HH },
-{ "J", 1, dch_date, DCH_J }, /*J*/
-{ "MI", 2, dch_time, DCH_MI },
-{ "MM", 2, dch_date, DCH_MM },
-{ "MONTH", 5, dch_date, DCH_MONTH },
-{ "MON", 3, dch_date, DCH_MON },
-{ "Month", 5, dch_date, DCH_Month },
-{ "Mon", 3, dch_date, DCH_Mon },
-{ "Q", 1, dch_date, DCH_Q }, /*Q*/
-{ "RM", 2, dch_date, DCH_RM }, /*R*/
-{ "SSSS", 4, dch_time, DCH_SSSS }, /*S*/
-{ "SS", 2, dch_time, DCH_SS },
-{ "WW", 2, dch_date, DCH_WW }, /*W*/
-{ "W", 1, dch_date, DCH_W },
-{ "Y,YYY", 5, dch_date, DCH_Y_YYY }, /*Y*/
-{ "YYYY", 4, dch_date, DCH_YYYY },
-{ "YYY", 3, dch_date, DCH_YYY },
-{ "YY", 2, dch_date, DCH_YY },
-{ "Y", 1, dch_date, DCH_Y },
-{ "day", 3, dch_date, DCH_day }, /*d*/
-{ "dy", 2, dch_date, DCH_dy },
-{ "month", 5, dch_date, DCH_month }, /*m*/
-{ "mon", 3, dch_date, DCH_mon },
-
+{ "A.D.", 4, dch_date, DCH_A_D }, /*A*/
+{ "A.M.", 4, dch_time, DCH_A_M },
+{ "AD", 2, dch_date, DCH_AD },
+{ "AM", 2, dch_time, DCH_AM },
+{ "B.C.", 4, dch_date, DCH_B_C }, /*B*/
+{ "BC", 2, dch_date, DCH_BC },
+{ "CC", 2, dch_date, DCH_CC }, /*C*/
+{ "DAY", 3, dch_date, DCH_DAY }, /*D*/
+{ "DDD", 3, dch_date, DCH_DDD },
+{ "DD", 2, dch_date, DCH_DD },
+{ "DY", 2, dch_date, DCH_DY },
+{ "Day", 3, dch_date, DCH_Day },
+{ "Dy", 2, dch_date, DCH_Dy },
+{ "D", 1, dch_date, DCH_D },
+{ "FX", 2, dch_global, DCH_FX }, /*F*/
+{ "HH24", 4, dch_time, DCH_HH24 }, /*H*/
+{ "HH12", 4, dch_time, DCH_HH12 },
+{ "HH", 2, dch_time, DCH_HH },
+{ "J", 1, dch_date, DCH_J }, /*J*/
+{ "MI", 2, dch_time, DCH_MI },
+{ "MM", 2, dch_date, DCH_MM },
+{ "MONTH", 5, dch_date, DCH_MONTH },
+{ "MON", 3, dch_date, DCH_MON },
+{ "Month", 5, dch_date, DCH_Month },
+{ "Mon", 3, dch_date, DCH_Mon },
+{ "P.M.", 4, dch_time, DCH_P_M }, /*P*/
+{ "PM", 2, dch_time, DCH_PM },
+{ "Q", 1, dch_date, DCH_Q }, /*Q*/
+{ "RM", 2, dch_date, DCH_RM }, /*R*/
+{ "SSSS", 4, dch_time, DCH_SSSS }, /*S*/
+{ "SS", 2, dch_time, DCH_SS },
+{ "WW", 2, dch_date, DCH_WW }, /*W*/
+{ "W", 1, dch_date, DCH_W },
+{ "Y,YYY", 5, dch_date, DCH_Y_YYY }, /*Y*/
+{ "YYYY", 4, dch_date, DCH_YYYY },
+{ "YYY", 3, dch_date, DCH_YYY },
+{ "YY", 2, dch_date, DCH_YY },
+{ "Y", 1, dch_date, DCH_Y },
+{ "a.d.", 4, dch_date, DCH_a_d }, /*a*/
+{ "a.m.", 4, dch_time, DCH_a_m },
+{ "ad", 2, dch_date, DCH_ad },
+{ "am", 2, dch_time, DCH_am },
+{ "b.c.", 4, dch_date, DCH_b_c }, /*b*/
+{ "bc", 2, dch_date, DCH_bc },
+{ "cc", 2, dch_date, DCH_CC }, /*c*/
+{ "day", 3, dch_date, DCH_day }, /*d*/
+{ "ddd", 3, dch_date, DCH_DDD },
+{ "dd", 2, dch_date, DCH_DD },
+{ "dy", 2, dch_date, DCH_dy },
+{ "d", 1, dch_date, DCH_D },
+{ "fx", 2, dch_global, DCH_FX }, /*f*/
+{ "hh24", 4, dch_time, DCH_HH24 }, /*h*/
+{ "hh12", 4, dch_time, DCH_HH12 },
+{ "hh", 2, dch_time, DCH_HH },
+{ "j", 1, dch_time, DCH_J }, /*j*/
+{ "mi", 2, dch_time, DCH_MI }, /*m*/
+{ "mm", 2, dch_date, DCH_MM },
+{ "month", 5, dch_date, DCH_month },
+{ "mon", 3, dch_date, DCH_mon },
+{ "p.m.", 4, dch_time, DCH_p_m }, /*p*/
+{ "pm", 2, dch_time, DCH_pm },
+{ "q", 1, dch_date, DCH_Q }, /*q*/
+{ "rm", 2, dch_date, DCH_rm }, /*r*/
+{ "ssss", 4, dch_time, DCH_SSSS }, /*s*/
+{ "ss", 2, dch_time, DCH_SS },
+{ "ww", 2, dch_date, DCH_WW }, /*w*/
+{ "w", 1, dch_date, DCH_W },
+{ "y,yyy", 5, dch_date, DCH_Y_YYY }, /*y*/
+{ "yyyy", 4, dch_date, DCH_YYYY },
+{ "yyy", 3, dch_date, DCH_YYY },
+{ "yy", 2, dch_date, DCH_YY },
+{ "y", 1, dch_date, DCH_Y },
/* last */
-{ NULL, 0, NULL, 0 }};
+{ NULL, 0, NULL, 0 }};
/* ----------
* KeyWords for NUMBER version
*/
static KeyWord NUM_keywords[] = {
/* keyword, len, func. type is in Index */
-{ ",", 1, NULL, NUM_COMMA }, /*,*/
-{ ".", 1, NULL, NUM_DEC }, /*.*/
-{ "0", 1, NULL, NUM_0 }, /*0*/
-{ "9", 1, NULL, NUM_9 }, /*9*/
-{ "B", 1, NULL, NUM_B }, /*B*/
-{ "C", 1, NULL, NUM_C }, /*C*/
-{ "D", 1, NULL, NUM_D }, /*D*/
-{ "E", 1, NULL, NUM_E }, /*E*/
-{ "FM", 2, NULL, NUM_FM }, /*F*/
-{ "G", 1, NULL, NUM_G }, /*G*/
-{ "L", 1, NULL, NUM_L }, /*L*/
-{ "MI", 2, NULL, NUM_MI }, /*M*/
-{ "PL", 2, NULL, NUM_PL }, /*P*/
-{ "PR", 2, NULL, NUM_PR },
-{ "RN", 2, NULL, NUM_RN }, /*R*/
-{ "SG", 2, NULL, NUM_SG }, /*S*/
-{ "SP", 2, NULL, NUM_SP },
-{ "S", 1, NULL, NUM_S },
-{ "TH", 2, NULL, NUM_TH }, /*T*/
-{ "V", 1, NULL, NUM_V }, /*V*/
-{ "rn", 2, NULL, NUM_rn }, /*r*/
-{ "th", 2, NULL, NUM_th }, /*t*/
+{ ",", 1, NULL, NUM_COMMA }, /*,*/
+{ ".", 1, NULL, NUM_DEC }, /*.*/
+{ "0", 1, NULL, NUM_0 }, /*0*/
+{ "9", 1, NULL, NUM_9 }, /*9*/
+{ "B", 1, NULL, NUM_B }, /*B*/
+{ "C", 1, NULL, NUM_C }, /*C*/
+{ "D", 1, NULL, NUM_D }, /*D*/
+{ "E", 1, NULL, NUM_E }, /*E*/
+{ "FM", 2, NULL, NUM_FM }, /*F*/
+{ "G", 1, NULL, NUM_G }, /*G*/
+{ "L", 1, NULL, NUM_L }, /*L*/
+{ "MI", 2, NULL, NUM_MI }, /*M*/
+{ "PL", 2, NULL, NUM_PL }, /*P*/
+{ "PR", 2, NULL, NUM_PR },
+{ "RN", 2, NULL, NUM_RN }, /*R*/
+{ "SG", 2, NULL, NUM_SG }, /*S*/
+{ "SP", 2, NULL, NUM_SP },
+{ "S", 1, NULL, NUM_S },
+{ "TH", 2, NULL, NUM_TH }, /*T*/
+{ "V", 1, NULL, NUM_V }, /*V*/
+{ "b", 1, NULL, NUM_B }, /*b*/
+{ "c", 1, NULL, NUM_C }, /*c*/
+{ "d", 1, NULL, NUM_D }, /*d*/
+{ "e", 1, NULL, NUM_E }, /*e*/
+{ "fm", 2, NULL, NUM_FM }, /*f*/
+{ "g", 1, NULL, NUM_G }, /*g*/
+{ "l", 1, NULL, NUM_L }, /*l*/
+{ "mi", 2, NULL, NUM_MI }, /*m*/
+{ "pl", 2, NULL, NUM_PL }, /*p*/
+{ "pr", 2, NULL, NUM_PR },
+{ "rn", 2, NULL, NUM_rn }, /*r*/
+{ "sg", 2, NULL, NUM_SG }, /*s*/
+{ "sp", 2, NULL, NUM_SP },
+{ "s", 1, NULL, NUM_S },
+{ "th", 2, NULL, NUM_th }, /*t*/
+{ "v", 1, NULL, NUM_V }, /*v*/
/* last */
{ NULL, 0, NULL, 0 }};
* KeyWords index for DATE-TIME version
* ----------
*/
-static int DCH_index[256 - 32] = {
+static int DCH_index[ KeyWord_INDEX_SIZE ] = {
/*
0 1 2 3 4 5 6 7 8 9
*/
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
--1, -1, -1, -1, -1, -1, -1, DCH_CC, DCH_DAY,-1,
+-1, -1, -1, -1, -1, DCH_A_D,DCH_B_C,DCH_CC, DCH_DAY,-1,
DCH_FX, -1, DCH_HH24,-1, DCH_J, -1, -1, DCH_MI, -1, -1,
--1, DCH_Q, DCH_RM, DCH_SSSS,-1, -1, -1, DCH_WW, -1, DCH_Y_YYY,
--1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-DCH_day,-1, -1, -1, -1, -1, -1, -1, -1, DCH_month,
--1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
--1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
--1, -1, -1, -1, -1, -1
+DCH_P_M, DCH_Q, DCH_RM, DCH_SSSS,-1, -1, -1, DCH_WW, -1, DCH_Y_YYY,
+-1, -1, -1, -1, -1, -1, -1, DCH_a_d,DCH_b_c,DCH_cc,
+DCH_day,-1, DCH_fx, -1, DCH_hh24,-1, DCH_j, -1, -1, DCH_mi,
+-1, -1, DCH_p_m, DCH_q, DCH_rm, DCH_ssss,-1, -1, -1, DCH_ww,
+-1, DCH_y_yyy,-1, -1, -1, -1
/*---- chars over 126 are skiped ----*/
};
* KeyWords index for NUMBER version
* ----------
*/
-static int NUM_index[256 - 32] = {
+static int NUM_index[ KeyWord_INDEX_SIZE ] = {
/*
0 1 2 3 4 5 6 7 8 9
*/
-1, -1, -1, -1, -1, -1, NUM_B, NUM_C, NUM_D, NUM_E,
NUM_FM, NUM_G, -1, -1, -1, -1, NUM_L, NUM_MI, -1, -1,
NUM_PL,-1, NUM_RN, NUM_SG, NUM_TH, -1, NUM_V, -1, -1, -1,
--1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
--1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
--1, -1, -1, -1, NUM_rn, -1, NUM_th, -1, -1, -1,
--1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+-1, -1, -1, -1, -1, -1, -1, -1, NUM_b, NUM_c,
+NUM_d, NUM_e, NUM_fm, NUM_g, -1, -1, -1, -1, NUM_l, NUM_mi,
+-1, -1, NUM_pl, -1, NUM_rn, NUM_sg, NUM_th, -1, NUM_v, -1,
-1, -1, -1, -1, -1, -1
/*---- chars over 126 are skiped ----*/
static int int4len(int4 num);
static char *str_toupper(char *buff);
static char *str_tolower(char *buff);
-static int is_acdc(char *str, int *len);
+/* static int is_acdc(char *str, int *len); */
static int seq_search(char *name, char **array, int type, int max, int *len);
static int dch_global(int arg, char *inout, int suf, int flag, FormatNode *node);
static int dch_time(int arg, char *inout, int suf, int flag, FormatNode *node);
* Check if in string is AC or BC (return: 0==none; -1==BC; 1==AC)
* ----------
*/
+/************* not used - use AD/BC format pictures instead **********
static int
is_acdc(char *str, int *len)
{
}
return 0;
}
+******************************/
/* ----------
* Sequential search with to upper/lower conversion
char *p_inout = inout;
switch(arg) {
+
+ case DCH_A_M:
+ case DCH_P_M:
+ if (flag == TO_CHAR) {
+ strcpy(inout, (tm->tm_hour > 13 ? P_M_STR : A_M_STR ));
+ return 3;
+
+ } else if (flag == FROM_CHAR) {
+ if (strncmp(inout, P_M_STR, 4)==0 && tm->tm_hour < 13)
+ tm->tm_hour += 12;
+ return 3;
+ }
+
+ case DCH_AM:
+ case DCH_PM:
+ if (flag == TO_CHAR) {
+ strcpy(inout, (tm->tm_hour > 13 ? PM_STR : AM_STR ));
+ return 1;
+
+ } else if (flag == FROM_CHAR) {
+ if (strncmp(inout, PM_STR, 2)==0 && tm->tm_hour < 13)
+ tm->tm_hour += 12;
+ return 1;
+ }
+
+ case DCH_a_m:
+ case DCH_p_m:
+ if (flag == TO_CHAR) {
+ strcpy(inout, (tm->tm_hour > 13 ? p_m_STR : a_m_STR ));
+ return 3;
+
+ } else if (flag == FROM_CHAR) {
+ if (strncmp(inout, p_m_STR, 4)==0 && tm->tm_hour < 13)
+ tm->tm_hour += 12;
+ return 3;
+ }
+
+ case DCH_am:
+ case DCH_pm:
+ if (flag == TO_CHAR) {
+ strcpy(inout, (tm->tm_hour > 13 ? pm_STR : am_STR ));
+ return 1;
+
+ } else if (flag == FROM_CHAR) {
+ if (strncmp(inout, pm_STR, 2)==0 && tm->tm_hour < 13)
+ tm->tm_hour += 12;
+ return 1;
+ }
case DCH_HH:
case DCH_HH12:
str_numth(p_inout, inout, S_TH_TYPE(suf));
return strlen(p_inout)-1;
} else if (flag == FROM_CHAR)
- elog(ERROR, "to_datatime(): SSSS is not supported");
+ elog(ERROR, "to_timestamp(): SSSS is not supported");
}
return -1;
}
}
switch(arg) {
+
+ case DCH_A_D:
+ case DCH_B_C:
+ if (flag == TO_CHAR) {
+ strcpy(inout, (tm->tm_year < 0 ? B_C_STR : A_D_STR ));
+ return 3;
+
+ } else if (flag == FROM_CHAR) {
+ if (strncmp(inout, B_C_STR, 4)==0 && tm->tm_year > 0)
+ tm->tm_year = -(tm->tm_year);
+ if (tm->tm_year < 0)
+ tm->tm_year = tm->tm_year+1;
+ return 3;
+ }
+
+ case DCH_AD:
+ case DCH_BC:
+ if (flag == TO_CHAR) {
+ strcpy(inout, (tm->tm_year < 0 ? BC_STR : AD_STR ));
+ return 1;
+
+ } else if (flag == FROM_CHAR) {
+ if (strncmp(inout, BC_STR, 2)==0 && tm->tm_year > 0)
+ tm->tm_year = -(tm->tm_year);
+ if (tm->tm_year < 0)
+ tm->tm_year = tm->tm_year+1;
+ return 1;
+ }
+
+ case DCH_a_d:
+ case DCH_b_c:
+ if (flag == TO_CHAR) {
+ strcpy(inout, (tm->tm_year < 0 ? b_c_STR : a_d_STR ));
+ return 3;
+
+ } else if (flag == FROM_CHAR) {
+ if (strncmp(inout, b_c_STR, 4)==0 && tm->tm_year > 0)
+ tm->tm_year = -(tm->tm_year);
+ if (tm->tm_year < 0)
+ tm->tm_year = tm->tm_year+1;
+ return 3;
+ }
+
+ case DCH_ad:
+ case DCH_bc:
+ if (flag == TO_CHAR) {
+ strcpy(inout, (tm->tm_year < 0 ? bc_STR : ad_STR ));
+ return 1;
+
+ } else if (flag == FROM_CHAR) {
+ if (strncmp(inout, bc_STR, 2)==0 && tm->tm_year > 0)
+ tm->tm_year = -(tm->tm_year);
+ if (tm->tm_year < 0)
+ tm->tm_year = tm->tm_year+1;
+ return 1;
+ }
+
case DCH_MONTH:
strcpy(inout, months_full[ tm->tm_mon - 1]);
sprintf(inout, "%*s", S_FM(suf) ? 0 : -9, str_toupper(inout));
sprintf(inout, "%d,%03d", i, YEAR_ABS(tm->tm_year) -(i*1000));
if (S_THth(suf))
str_numth(p_inout, inout, S_TH_TYPE(suf));
+ /*
if (tm->tm_year < 0)
- strcat(inout, BC_STR);
+ strcat(inout, BC_STR_ORIG);
+ */
return strlen(p_inout)-1;
} else if (flag == FROM_CHAR) {
else
len = int4len((int4) tm->tm_year)+1;
len += SKIP_THth(suf);
- /* AC/BC */
+ /* AC/BC
if (is_acdc(inout+len, &len) < 0 && tm->tm_year > 0)
tm->tm_year = -(tm->tm_year);
if (tm->tm_year < 0)
tm->tm_year = tm->tm_year+1;
+ */
return len-1;
}
- case DCH_YYYY:
+ case DCH_YYYY :
if (flag == TO_CHAR) {
if (tm->tm_year <= 9999 && tm->tm_year >= -9998)
sprintf(inout, "%0*d", S_FM(suf) ? 0 : 4, YEAR_ABS(tm->tm_year));
sprintf(inout, "%d", YEAR_ABS(tm->tm_year));
if (S_THth(suf))
str_numth(p_inout, inout, S_TH_TYPE(suf));
+ /*
if (tm->tm_year < 0)
- strcat(inout, BC_STR);
+ strcat(inout, BC_STR_ORIG);
+ */
return strlen(p_inout)-1;
} else if (flag == FROM_CHAR) {
else
len = int4len((int4) tm->tm_year);
len += SKIP_THth(suf);
- /* AC/BC */
+ /* AC/BC
if (is_acdc(inout+len, &len) < 0 && tm->tm_year > 0)
tm->tm_year = -(tm->tm_year);
if (tm->tm_year < 0)
tm->tm_year = tm->tm_year+1;
+ */
return len-1;
}
case DCH_RM:
if (flag == TO_CHAR) {
sprintf(inout, "%*s", S_FM(suf) ? 0 : -4,
- rm_months[ 12 - tm->tm_mon ]);
+ rm_months_upper[ 12 - tm->tm_mon ]);
if (S_FM(suf))
return strlen(p_inout)-1;
else
return 3;
} else if (flag == FROM_CHAR) {
- tm->tm_mon = 11-seq_search(inout, rm_months, ALL_UPPER, FULL_SIZ, &len);
+ tm->tm_mon = 11-seq_search(inout, rm_months_upper, ALL_UPPER, FULL_SIZ, &len);
CHECK_SEQ_SEARCH(len, "RM");
++tm->tm_mon;
if (S_FM(suf))
else
return 3;
}
+
+ case DCH_rm:
+ if (flag == TO_CHAR) {
+ sprintf(inout, "%*s", S_FM(suf) ? 0 : -4,
+ rm_months_lower[ 12 - tm->tm_mon ]);
+ if (S_FM(suf))
+ return strlen(p_inout)-1;
+ else
+ return 3;
+
+ } else if (flag == FROM_CHAR) {
+ tm->tm_mon = 11-seq_search(inout, rm_months_lower, ALL_UPPER, FULL_SIZ, &len);
+ CHECK_SEQ_SEARCH(len, "rm");
+ ++tm->tm_mon;
+ if (S_FM(suf))
+ return len-1;
+ else
+ return 3;
+ }
case DCH_W:
if (flag == TO_CHAR) {
#ifdef DEBUG_TO_FROM_CHAR
/* dump_node(ent->format, len); */
- /* dump_index(DCH_keywords, DCH_index); */
+ /* dump_index(DCH_keywords, DCH_index); */
#endif
}
format = ent->format;
Num->zero_end = ent->Num.zero_end;
}
+#ifdef DEBUG_TO_FROM_CHAR
+ /* dump_node(format, len); */
+ dump_index(NUM_keywords, NUM_index);
+#endif
+
pfree(str);
return format;
}