char *fmt_char;
int def_min;
int def_max;
+ char *ignore_sep;
};
// default limits for individual fields
static Format_Map mapping[DATETIME_TYPE_COUNT] = {
- [ELM_DATETIME_YEAR] = { "Yy", -1, -1 },
- [ELM_DATETIME_MONTH] = { "mbBh", 0, 11 },
- [ELM_DATETIME_DATE] = { "de", 1, 31 },
- [ELM_DATETIME_HOUR] = { "IHkl", 0, 23 },
- [ELM_DATETIME_MINUTE] = { "M", 0, 59 },
- [ELM_DATETIME_AMPM] = { "pP", 0, 1 }
+ [ELM_DATETIME_YEAR] = { "Yy", -1, -1, "" },
+ [ELM_DATETIME_MONTH] = { "mbBh", 0, 11, "" },
+ [ELM_DATETIME_DATE] = { "de", 1, 31, "" },
+ [ELM_DATETIME_HOUR] = { "IHkl", 0, 23, "" },
+ [ELM_DATETIME_MINUTE] = { "M", 0, 59, ":" },
+ [ELM_DATETIME_AMPM] = { "pP", 0, 1, "" }
};
static const char *multifield_formats = "cxXrRTDF";
+static const char *ignore_separators = "()";
static Datetime_Mod_Api *dt_mod = NULL;
static const char *widtype = NULL;
snprintf(buf, sizeof(buf), EDC_PART_FIELD_ENABLE_SIG_STR, field->location);
edje_object_signal_emit(wd->base, buf, "elm");
snprintf(buf, sizeof(buf), EDC_PART_SEPARATOR_STR, field->location);
- edje_object_part_text_set(wd->base, buf, field->separator);
+ edje_object_part_text_escaped_set(wd->base, buf, field->separator);
dt_mod->field_value_display(wd->mod_data, field->item_obj);
}
else
{
Widget_Data *wd;
Datetime_Field *field = NULL;
- unsigned int len = 0, idx, location = 0;
+ unsigned int len = 0, idx = 0, location = 0;
char separator[MAX_SEPARATOR_LEN];
char cur;
Eina_Bool fmt_parsing = EINA_FALSE, sep_parsing = EINA_FALSE,
separator[len] = 0;
if (field) eina_stringshare_replace(&field->separator, separator);
}
+
+ // ignore the set of chars (global, field specific) as field separators.
if (sep_parsing && (len < MAX_SEPARATOR_LEN - 1) &&
- (field->type != ELM_DATETIME_AMPM) &&
- (!((field->type == ELM_DATETIME_MINUTE) && (cur ==':'))))
+ (field->type != ELM_DATETIME_AMPM) && (!strchr(ignore_separators, cur)) &&
+ (!strchr(mapping[idx].ignore_sep, cur)))
separator[len++] = cur;
if (sep_lookup) sep_parsing = EINA_TRUE;
sep_lookup = EINA_FALSE;
#endif
dt_fmt = (char *)malloc(MAX_FORMAT_LEN);
+ if (!dt_fmt) return;
strncpy(dt_fmt, wd->format, MAX_FORMAT_LEN);
_expand_format(dt_fmt);
edje_object_signal_emit(wd->base, buf, "elm");
}
snprintf(buf, sizeof(buf), EDC_PART_SEPARATOR_STR, (field->location + 1));
- edje_object_part_text_set(wd->base, buf, field->separator);
+ edje_object_part_text_escaped_set(wd->base, buf, field->separator);
}
edje_object_message_signal_process(wd->base);
_field_list_arrange(obj);