static void
_add_chars_till_limit(Evas_Object *obj, char **text, int can_add, Length_Unit unit)
{
- int i = 0, unit_size;
- int current_len = strlen(*text);
- char *new_text = *text;
+ int i = 0, current_len = 0;
+ char *new_text;
+
+ if (!*text) return;
if (unit >= LENGTH_UNIT_LAST) return;
+ new_text = *text;
+ current_len = strlen(*text);
while (*new_text)
{
+ int idx = 0, unit_size = 0;
+ char *markup, *utfstr;
if (*new_text == '<')
{
- while (*new_text != '>')
+ while (*(new_text + idx) != '>')
{
- new_text++;
- if (!*new_text) break;
+ idx++;
+ if (!*(new_text + idx)) break;
}
- new_text++;
}
- else
+ else if (*new_text == '&')
{
- int idx = 0;
- if (*new_text == '&')
+ while (*(new_text + idx) != ';')
{
- while (*(new_text + idx) != ';')
- {
- idx++;
- if (!*(new_text + idx)) break;
- }
+ idx++;
+ if (!*(new_text + idx)) break;
}
- char *markup;
- idx = evas_string_char_next_get(new_text, idx, NULL);
- markup = malloc(idx + 1);
+ }
+ idx = evas_string_char_next_get(new_text, idx, NULL);
+ markup = malloc(idx + 1);
+ if (markup)
+ {
strncpy(markup, new_text, idx);
markup[idx] = 0;
- if (unit == LENGTH_UNIT_BYTE)
- unit_size = strlen(elm_entry_markup_to_utf8(markup));
- else if (unit == LENGTH_UNIT_CHAR)
- unit_size = evas_string_char_len_get(elm_entry_markup_to_utf8(markup));
- if (markup)
+ utfstr = elm_entry_markup_to_utf8(markup);
+ if (utfstr)
{
- free(markup);
- markup = NULL;
+ if (unit == LENGTH_UNIT_BYTE)
+ unit_size = strlen(utfstr);
+ else if (unit == LENGTH_UNIT_CHAR)
+ unit_size = evas_string_char_len_get(utfstr);
+ free(utfstr);
+ utfstr = NULL;
}
- if (can_add < unit_size)
- {
- if (!i)
- {
- evas_object_smart_callback_call(obj, "maxlength,reached", NULL);
- free(*text);
- *text = NULL;
- return;
- }
- can_add = 0;
- strncpy(new_text, new_text + idx, current_len - ((new_text + idx) - *text));
- current_len -= idx;
- (*text)[current_len] = 0;
- }
- else
+ free(markup);
+ markup = NULL;
+ }
+ if (can_add < unit_size)
+ {
+ if (!i)
{
- new_text += idx;
- can_add -= unit_size;
+ evas_object_smart_callback_call(obj, "maxlength,reached", NULL);
+ free(*text);
+ *text = NULL;
+ return;
}
- i++;
+ can_add = 0;
+ strncpy(new_text, new_text + idx, current_len - ((new_text + idx) - *text));
+ current_len -= idx;
+ (*text)[current_len] = 0;
+ }
+ else
+ {
+ new_text += idx;
+ can_add -= unit_size;
}
+ i++;
}
evas_object_smart_callback_call(obj, "maxlength,reached", NULL);
}