From c3a51770b48d4853d8cd9c49789e3f608c84d8d1 Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Tue, 27 Jan 2009 00:44:29 +0000 Subject: [PATCH] export markup<->plain utf8 conversion calls and use them too. SVN revision: 38803 --- src/bin/test.c | 2 +- src/lib/Elementary.h.in | 2 + src/lib/elc_notepad.c | 171 +++++------------------------------------------- src/lib/elm_entry.c | 12 ++++ 4 files changed, 33 insertions(+), 154 deletions(-) diff --git a/src/bin/test.c b/src/bin/test.c index dac9a9a..c264ee0 100644 --- a/src/bin/test.c +++ b/src/bin/test.c @@ -898,7 +898,7 @@ my_bt_15(void *data, Evas_Object *obj, void *event_info) evas_object_show(bx); np = elm_notepad_add(win); - elm_notepad_file_set(np, "note.txt", ELM_TEXT_FORMAT_PLAIN_UTF8); + elm_notepad_file_set(np, "note.txt", ELM_TEXT_FORMAT_MARKUP_UTF8); evas_object_size_hint_weight_set(np, 1.0, 1.0); evas_object_size_hint_align_set(np, -1.0, -1.0); elm_box_pack_end(bx, np); diff --git a/src/lib/Elementary.h.in b/src/lib/Elementary.h.in index 20fccc7..38a38af 100644 --- a/src/lib/Elementary.h.in +++ b/src/lib/Elementary.h.in @@ -306,6 +306,8 @@ extern "C" { EAPI void elm_entry_editable_set(Evas_Object *obj, Evas_Bool editable); EAPI void elm_entry_select_none(Evas_Object *obj); EAPI void elm_entry_select_all(Evas_Object *obj); + EAPI char *elm_entry_markup_to_utf8(const char *s); + EAPI char *elm_entry_utf8_to_markup(const char *s); /* smart callbacks called: * "changed" - the text content changed diff --git a/src/lib/elc_notepad.c b/src/lib/elc_notepad.c index 8c46f7e..ddcb39e 100644 --- a/src/lib/elc_notepad.c +++ b/src/lib/elc_notepad.c @@ -71,7 +71,7 @@ _buf_append(char *buf, const char *str, int *len, int *alloc) } static char * -_load_markup_utf8(const char *file) +_load_file(const char *file) { FILE *f; size_t size; @@ -82,69 +82,26 @@ _load_markup_utf8(const char *file) if (!f) return NULL; while (size = fread(buf, 1, sizeof(buf), f)) { - pos = 0; buf[size] = 0; - while (pos < size) - { - int ch; - char str[2]; - - ch = buf[pos]; - if (ch != '\n') - { - str[0] = ch; - str[1] = 0; - text = _buf_append(text, str, &len, &alloc); - } - pos++; - } + text = _buf_append(text, buf, &len, &alloc); } fclose(f); return text; } static char * -_load_plain_utf8(const char *file) +_load_plain(const char *file) { - FILE *f; - size_t size; - int alloc = 0, len = 0, pos; - char *text = NULL, buf[4096]; + char *text, *text2; - f = fopen(file, "r"); - if (!f) return NULL; - while (size = fread(buf, 1, sizeof(buf), f)) + text = _load_file(file); + if (text) { - pos = 0; - buf[size] = 0; - while (pos < size) - { - int ch, ppos; - - ppos = pos; - ch = evas_common_font_utf8_get_next(buf, &pos); - if (ch == '\n') - text = _buf_append(text, "
", &len, &alloc); - else - { - int stlen = 0; - const char *escape; - char str[16]; - - escape = evas_textblock_string_escape_get(buf + ppos, &stlen); - if (escape) - text = _buf_append(text, escape, &len, &alloc); - else - { - strncpy(str, buf + ppos, pos - ppos); - str[pos - ppos] = 0; - text = _buf_append(text, str, &len, &alloc); - } - } - } + text2 = elm_entry_utf8_to_markup(text); + free(text); + return text2; } - fclose(f); - return text; + return NULL; } static void @@ -161,10 +118,10 @@ _load(Evas_Object *obj) switch (wd->format) { case ELM_TEXT_FORMAT_PLAIN_UTF8: - text = _load_plain_utf8(wd->file); + text = _load_plain(wd->file); break; case ELM_TEXT_FORMAT_MARKUP_UTF8: - text = _load_markup_utf8(wd->file); + text = _load_file(wd->file); break; default: elm_entry_entry_set(wd->entry, "Unknown Text Format"); @@ -196,112 +153,20 @@ _save_markup_utf8(const char *file, const char *text) return; } fputs(text, f); // FIXME: catch error - fputs("\n", f); // FIXME: catch error fclose(f); } static void _save_plain_utf8(const char *file, const char *text) { - FILE *f; - char *s, *p; - char *tag_start, *tag_end, *esc_start, *esc_end; - - if ((!text) || (text[0] == 0)) - { - ecore_file_unlink(file); - return; - } - f = fopen(file, "w"); - if (!f) - { - // FIXME: report a write error - return; - } - tag_start = tag_end = esc_start = esc_end = NULL; - p = (char *)text; - s = p; - for (;;) + char *text2; + + text2 = elm_entry_markup_to_utf8(text); + if (text2) { - if ((*p == 0) || - (tag_end) || (esc_end) || - (tag_start) || (esc_start)) - { - if (tag_end) - { - char *ttag, *match; - - ttag = malloc(tag_end - tag_start); - if (ttag) - { - strncpy(ttag, tag_start + 1, tag_end - tag_start - 1); - ttag[tag_end - tag_start - 1] = 0; - if (!strcmp(ttag, "br")) fputs("\n", f); // FIXME: catch error - free(ttag); - } - tag_start = tag_end = NULL; - } - else if (esc_end) - { - char tesc[256]; - char *str; - - if ((esc_end - esc_start) < (sizeof(tesc) - 2)) - { - strncpy(tesc, esc_start, esc_end - esc_start + 1); - tesc[esc_end - esc_start + 1] = 0; - } - str = evas_textblock_escape_string_get(tesc); - if (str) fputs(str, f); // FIXME: catch error - esc_start = esc_end = NULL; - } - else if (*p == 0) - { - fwrite(s, p - s, 1, f); // FIXME: catch error - s = NULL; - } - if (*p == 0) - break; - } - if (*p == '<') - { - if (!esc_start) - { - tag_start = p; - tag_end = NULL; - fwrite(s, p - s, 1, f); // FIXME: catch error - s = NULL; - } - } - else if (*p == '>') - { - if (tag_start) - { - tag_end = p; - s = p + 1; - } - } - else if (*p == '&') - { - if (!tag_start) - { - esc_start = p; - esc_end = NULL; - fwrite(s, p - s, 1, f); // FIXME: catch error - s = NULL; - } - } - else if (*p == ';') - { - if (esc_start) - { - esc_end = p; - s = p + 1; - } - } - p++; + _save_markup_utf8(file, text2); + free(text2); } - fclose(f); } static void diff --git a/src/lib/elm_entry.c b/src/lib/elm_entry.c index bfe6d32..8b0ad16 100644 --- a/src/lib/elm_entry.c +++ b/src/lib/elm_entry.c @@ -791,3 +791,15 @@ elm_entry_select_all(Evas_Object *obj) wd->have_selection = 1; edje_object_part_text_select_all(wd->ent, "elm.text"); } + +EAPI char * +elm_entry_markup_to_utf8(const char *s) +{ + return _mkup_to_text(s); +} + +EAPI char * +elm_entry_utf8_to_markup(const char *s) +{ + return _text_to_mkup(s); +} -- 2.7.4