forked from enlightenment/efl
efl_ui_clock: Parses the format recursively.
Summary: Some of locale formats convert as extension format. For example, uk_UA d_t_fmt is "%a, %d-%b-%Y %X %z". The %X will convert as %T. The %T format has to convert one more time to convert as %H:%M:%S. ref : https://lh.2xlibre.net/locale/uk_UA/ We need to parse the format recursively to support that kind of case. @fix Test Plan: Change the locale as uk_UA. Run elementary_test -> datetime See the time field is not appear. Reviewers: jpeg, cedric Subscribers: cedric, jpeg Differential Revision: https://phab.enlightenment.org/D5021
This commit is contained in:
parent
b433592b03
commit
4656f98e22
|
@ -202,33 +202,39 @@ static void
|
||||||
_expand_format(char *dt_fmt)
|
_expand_format(char *dt_fmt)
|
||||||
{
|
{
|
||||||
char *ptr, *expanded_fmt, ch;
|
char *ptr, *expanded_fmt, ch;
|
||||||
unsigned int idx = 0, len = 0;
|
unsigned int idx, len = 0;
|
||||||
char buf[EFL_UI_CLOCK_MAX_FORMAT_LEN] = {0, };
|
char buf[EFL_UI_CLOCK_MAX_FORMAT_LEN] = {0, };
|
||||||
Eina_Bool fmt_char = EINA_FALSE;
|
Eina_Bool fmt_char, fmt_expanded;
|
||||||
|
|
||||||
ptr = dt_fmt;
|
do {
|
||||||
while ((ch = *ptr))
|
idx = 0;
|
||||||
{
|
fmt_char = EINA_FALSE;
|
||||||
if ((fmt_char) && (strchr(multifield_formats, ch)))
|
fmt_expanded = EINA_FALSE;
|
||||||
{
|
ptr = dt_fmt;
|
||||||
/* replace the multi-field format characters with
|
while ((ch = *ptr))
|
||||||
* corresponding expanded format */
|
{
|
||||||
expanded_fmt = _expanded_fmt_str_get(ch);
|
if ((fmt_char) && (strchr(multifield_formats, ch)))
|
||||||
len = strlen(expanded_fmt);
|
{
|
||||||
buf[--idx] = 0;
|
/* replace the multi-field format characters with
|
||||||
strncat(buf, expanded_fmt, len);
|
* corresponding expanded format */
|
||||||
idx += len;
|
expanded_fmt = _expanded_fmt_str_get(ch);
|
||||||
}
|
len = strlen(expanded_fmt);
|
||||||
else buf[idx++] = ch;
|
if (len > 0) fmt_expanded = EINA_TRUE;
|
||||||
|
buf[--idx] = 0;
|
||||||
|
strncat(buf, expanded_fmt, len);
|
||||||
|
idx += len;
|
||||||
|
}
|
||||||
|
else buf[idx++] = ch;
|
||||||
|
|
||||||
if (ch == '%') fmt_char = EINA_TRUE;
|
if (ch == '%') fmt_char = EINA_TRUE;
|
||||||
else fmt_char = EINA_FALSE;
|
else fmt_char = EINA_FALSE;
|
||||||
|
|
||||||
ptr++;
|
ptr++;
|
||||||
}
|
}
|
||||||
|
|
||||||
buf[idx] = 0;
|
buf[idx] = 0;
|
||||||
strncpy(dt_fmt, buf, EFL_UI_CLOCK_MAX_FORMAT_LEN);
|
strncpy(dt_fmt, buf, EFL_UI_CLOCK_MAX_FORMAT_LEN);
|
||||||
|
} while (fmt_expanded);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
Loading…
Reference in New Issue