forked from enlightenment/efl
parent
448751a841
commit
1da0b4df76
|
@ -49,31 +49,97 @@ _on_focus_hook(void *data, Evas_Object *obj)
|
||||||
elm_widget_focus_set(wd->entry, 1);
|
elm_widget_focus_set(wd->entry, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static char *
|
||||||
|
_buf_append(char *buf, const char *str, int *len, int *alloc)
|
||||||
|
{
|
||||||
|
int len2;
|
||||||
|
|
||||||
|
len2 = strlen(str);
|
||||||
|
if ((*len + len2) >= *alloc)
|
||||||
|
{
|
||||||
|
char *buf2;
|
||||||
|
|
||||||
|
buf2 = realloc(buf, *alloc + 512);
|
||||||
|
if (!buf2) return NULL;
|
||||||
|
buf = buf2;
|
||||||
|
*alloc += 512;
|
||||||
|
}
|
||||||
|
strcpy(buf + *len, str);
|
||||||
|
*len += len2;
|
||||||
|
return buf;
|
||||||
|
}
|
||||||
|
|
||||||
static char *
|
static char *
|
||||||
_load_markup_utf8(const char *file)
|
_load_markup_utf8(const char *file)
|
||||||
{
|
{
|
||||||
FILE *f;
|
FILE *f;
|
||||||
long size;
|
size_t size;
|
||||||
char *text = NULL;
|
int alloc = 0, len = 0, pos;
|
||||||
|
char *text = NULL, buf[4096];
|
||||||
|
|
||||||
f = fopen(file, "r");
|
f = fopen(file, "r");
|
||||||
if (!f) return NULL;
|
if (!f) return NULL;
|
||||||
fseek(f, 0, SEEK_END);
|
while (size = fread(buf, 1, sizeof(buf), f))
|
||||||
size = ftell(f);
|
|
||||||
if (size > 0)
|
|
||||||
{
|
{
|
||||||
rewind(f);
|
pos = 0;
|
||||||
text = malloc(size + 1);
|
buf[size] = 0;
|
||||||
if (text)
|
while (pos < size)
|
||||||
{
|
{
|
||||||
if (fread(text, size, 1, f))
|
int ch;
|
||||||
|
char str[2];
|
||||||
|
|
||||||
|
ch = buf[pos];
|
||||||
|
if (ch != '\n')
|
||||||
{
|
{
|
||||||
text[size] = 0;
|
str[0] = ch;
|
||||||
|
str[1] = 0;
|
||||||
|
text = _buf_append(text, str, &len, &alloc);
|
||||||
}
|
}
|
||||||
|
pos++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fclose(f);
|
||||||
|
return text;
|
||||||
|
}
|
||||||
|
|
||||||
|
static char *
|
||||||
|
_load_plain_utf8(const char *file)
|
||||||
|
{
|
||||||
|
FILE *f;
|
||||||
|
size_t size;
|
||||||
|
int alloc = 0, len = 0, pos;
|
||||||
|
char *text = NULL, buf[4096];
|
||||||
|
|
||||||
|
f = fopen(file, "r");
|
||||||
|
if (!f) return NULL;
|
||||||
|
while (size = fread(buf, 1, sizeof(buf), f))
|
||||||
|
{
|
||||||
|
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, "<br>", &len, &alloc);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
free(text);
|
int stlen = 0;
|
||||||
text = NULL;
|
const char *escape;
|
||||||
|
char str[16];
|
||||||
|
|
||||||
|
escape = evas_textblock_string_escape_get(buf + ppos, &stlen);
|
||||||
|
printf("esc = %s\n", escape);
|
||||||
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -95,7 +161,7 @@ _load(Evas_Object *obj)
|
||||||
switch (wd->format)
|
switch (wd->format)
|
||||||
{
|
{
|
||||||
case ELM_TEXT_FORMAT_PLAIN_UTF8:
|
case ELM_TEXT_FORMAT_PLAIN_UTF8:
|
||||||
// FIXME: convert plaintext to markup
|
text = _load_plain_utf8(wd->file);
|
||||||
break;
|
break;
|
||||||
case ELM_TEXT_FORMAT_MARKUP_UTF8:
|
case ELM_TEXT_FORMAT_MARKUP_UTF8:
|
||||||
text = _load_markup_utf8(wd->file);
|
text = _load_markup_utf8(wd->file);
|
||||||
|
@ -132,6 +198,111 @@ _save_markup_utf8(const char *file, const char *text)
|
||||||
fputs(text, f); // FIXME: catch error
|
fputs(text, f); // FIXME: catch error
|
||||||
fputs("\n", f); // FIXME: catch error
|
fputs("\n", f); // FIXME: catch error
|
||||||
fclose(f);
|
fclose(f);
|
||||||
|
printf(".. written\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
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 (;;)
|
||||||
|
{
|
||||||
|
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++;
|
||||||
|
}
|
||||||
|
fclose(f);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -142,9 +313,10 @@ _save(Evas_Object *obj)
|
||||||
switch (wd->format)
|
switch (wd->format)
|
||||||
{
|
{
|
||||||
case ELM_TEXT_FORMAT_PLAIN_UTF8:
|
case ELM_TEXT_FORMAT_PLAIN_UTF8:
|
||||||
// FIXME: convert markup to plaintext
|
_save_plain_utf8(wd->file, elm_entry_entry_get(wd->entry));
|
||||||
break;
|
break;
|
||||||
case ELM_TEXT_FORMAT_MARKUP_UTF8:
|
case ELM_TEXT_FORMAT_MARKUP_UTF8:
|
||||||
|
printf(".. save markup\n");
|
||||||
_save_markup_utf8(wd->file, elm_entry_entry_get(wd->entry));
|
_save_markup_utf8(wd->file, elm_entry_entry_get(wd->entry));
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -156,6 +328,7 @@ static int
|
||||||
_delay_write(void *data)
|
_delay_write(void *data)
|
||||||
{
|
{
|
||||||
Widget_Data *wd = elm_widget_data_get(data);
|
Widget_Data *wd = elm_widget_data_get(data);
|
||||||
|
printf(".. save\n");
|
||||||
_save(data);
|
_save(data);
|
||||||
wd->delay_write = NULL;
|
wd->delay_write = NULL;
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -165,6 +338,7 @@ static void
|
||||||
_entry_changed(void *data, Evas_Object *obj, void *event_info)
|
_entry_changed(void *data, Evas_Object *obj, void *event_info)
|
||||||
{
|
{
|
||||||
Widget_Data *wd = elm_widget_data_get(data);
|
Widget_Data *wd = elm_widget_data_get(data);
|
||||||
|
printf(".. changed\n");
|
||||||
if (wd->delay_write)
|
if (wd->delay_write)
|
||||||
{
|
{
|
||||||
ecore_timer_del(wd->delay_write);
|
ecore_timer_del(wd->delay_write);
|
||||||
|
@ -192,7 +366,7 @@ elm_notepad_add(Evas_Object *parent)
|
||||||
wd->scroller = elm_scroller_add(parent);
|
wd->scroller = elm_scroller_add(parent);
|
||||||
elm_widget_resize_object_set(obj, wd->scroller);
|
elm_widget_resize_object_set(obj, wd->scroller);
|
||||||
wd->entry = elm_entry_add(parent);
|
wd->entry = elm_entry_add(parent);
|
||||||
evas_object_size_hint_weight_set(wd->entry, 1.0, 0.0);
|
evas_object_size_hint_weight_set(wd->entry, 1.0, 1.0);
|
||||||
evas_object_size_hint_align_set(wd->entry, -1.0, -1.0);
|
evas_object_size_hint_align_set(wd->entry, -1.0, -1.0);
|
||||||
elm_scroller_content_set(wd->scroller, wd->entry);
|
elm_scroller_content_set(wd->scroller, wd->entry);
|
||||||
evas_object_show(wd->entry);
|
evas_object_show(wd->entry);
|
||||||
|
|
Loading…
Reference in New Issue