From: Enlightenment S. <no-...@en...> - 2011-11-15 08:26:11
|
Log: elementary/elm_entry : Text filter should consider some tags like <br>. Now tag itself has its own size, then max size filter callback will calculate that. Author: woohyun Date: 2011-11-15 00:26:02 -0800 (Tue, 15 Nov 2011) New Revision: 65225 Trac: http://trac.enlightenment.org/e/changeset/65225 Modified: trunk/elementary/src/lib/elm_entry.c Modified: trunk/elementary/src/lib/elm_entry.c =================================================================== --- trunk/elementary/src/lib/elm_entry.c 2011-11-15 07:39:24 UTC (rev 65224) +++ trunk/elementary/src/lib/elm_entry.c 2011-11-15 08:26:02 UTC (rev 65225) @@ -2037,67 +2037,63 @@ 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, unit_size = 0; - char *markup, *utfstr; - if (*new_text == '&') + while (*(new_text + idx) != ';') { - while (*(new_text + idx) != ';') - { - idx++; - if (!*(new_text + idx)) break; - } + idx++; + if (!*(new_text + idx)) break; } - idx = evas_string_char_next_get(new_text, idx, NULL); - markup = malloc(idx + 1); - if (markup) + } + idx = evas_string_char_next_get(new_text, idx, NULL); + markup = malloc(idx + 1); + if (markup) + { + strncpy(markup, new_text, idx); + markup[idx] = 0; + utfstr = elm_entry_markup_to_utf8(markup); + if (utfstr) { - strncpy(markup, new_text, idx); - markup[idx] = 0; - utfstr = elm_entry_markup_to_utf8(markup); - if (utfstr) - { - 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; - } - 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) + free(markup); + markup = NULL; + } + if (can_add < unit_size) + { + if (!i) { - 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; + evas_object_smart_callback_call(obj, "maxlength,reached", NULL); + free(*text); + *text = NULL; + return; } - else - { - new_text += idx; - can_add -= unit_size; - } - 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); } |