forked from enlightenment/efl
more fixed to textblock plus an addition - reverse the markup.
SVN revision: 36664
This commit is contained in:
parent
d905ee9bda
commit
8cd80ffc56
|
@ -619,7 +619,8 @@ extern "C" {
|
||||||
typedef enum _Evas_Textblock_Text_Type
|
typedef enum _Evas_Textblock_Text_Type
|
||||||
{
|
{
|
||||||
EVAS_TEXTBLOCK_TEXT_RAW,
|
EVAS_TEXTBLOCK_TEXT_RAW,
|
||||||
EVAS_TEXTBLOCK_TEXT_PLAIN
|
EVAS_TEXTBLOCK_TEXT_PLAIN,
|
||||||
|
EVAS_TEXTBLOCK_TEXT_MARKUP
|
||||||
} Evas_Textblock_Text_Type;
|
} Evas_Textblock_Text_Type;
|
||||||
|
|
||||||
EAPI Evas_Object *evas_object_textblock_add(Evas *e);
|
EAPI Evas_Object *evas_object_textblock_add(Evas *e);
|
||||||
|
@ -668,6 +669,7 @@ extern "C" {
|
||||||
EAPI const char *evas_textblock_cursor_node_text_get(const Evas_Textblock_Cursor *cur);
|
EAPI const char *evas_textblock_cursor_node_text_get(const Evas_Textblock_Cursor *cur);
|
||||||
EAPI int evas_textblock_cursor_node_text_length_get(const Evas_Textblock_Cursor *cur);
|
EAPI int evas_textblock_cursor_node_text_length_get(const Evas_Textblock_Cursor *cur);
|
||||||
EAPI const char *evas_textblock_cursor_node_format_get(const Evas_Textblock_Cursor *cur);
|
EAPI const char *evas_textblock_cursor_node_format_get(const Evas_Textblock_Cursor *cur);
|
||||||
|
EAPI Evas_Bool evas_textblock_cursor_node_format_is_visible_get(const Evas_Textblock_Cursor *cur);
|
||||||
EAPI char *evas_textblock_cursor_range_text_get(const Evas_Textblock_Cursor *cur1, const Evas_Textblock_Cursor *cur2, Evas_Textblock_Text_Type format);
|
EAPI char *evas_textblock_cursor_range_text_get(const Evas_Textblock_Cursor *cur1, const Evas_Textblock_Cursor *cur2, Evas_Textblock_Text_Type format);
|
||||||
|
|
||||||
EAPI int evas_textblock_cursor_char_geometry_get(const Evas_Textblock_Cursor *cur, Evas_Coord *cx, Evas_Coord *cy, Evas_Coord *cw, Evas_Coord *ch);
|
EAPI int evas_textblock_cursor_char_geometry_get(const Evas_Textblock_Cursor *cur, Evas_Coord *cx, Evas_Coord *cy, Evas_Coord *cw, Evas_Coord *ch);
|
||||||
|
|
|
@ -219,8 +219,6 @@ _style_clear(Evas_Textblock_Style *ts)
|
||||||
ts->tags = NULL;
|
ts->tags = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* setting a textblock via markup */
|
|
||||||
/*
|
|
||||||
static char *
|
static char *
|
||||||
_style_match_replace(Evas_Textblock_Style *ts, char *s)
|
_style_match_replace(Evas_Textblock_Style *ts, char *s)
|
||||||
{
|
{
|
||||||
|
@ -235,7 +233,6 @@ _style_match_replace(Evas_Textblock_Style *ts, char *s)
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
|
|
||||||
static char *
|
static char *
|
||||||
_style_match_tag(Evas_Textblock_Style *ts, char *s)
|
_style_match_tag(Evas_Textblock_Style *ts, char *s)
|
||||||
|
@ -458,6 +455,71 @@ _lines_clear(const Evas_Object *obj, Evas_Object_Textblock_Line *lines)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_nodes_adjacent_merge(const Evas_Object *obj, Evas_Object_Textblock_Node *n1)
|
||||||
|
{
|
||||||
|
Evas_Object_Textblock *o;
|
||||||
|
Evas_Object_Textblock_Node *n0, *n2;
|
||||||
|
Evas_List *l;
|
||||||
|
int plen;
|
||||||
|
|
||||||
|
if (n1->type != NODE_TEXT) return;
|
||||||
|
o = (Evas_Object_Textblock *)(obj->object_data);
|
||||||
|
n0 = (Evas_Object_Textblock_Node *)((Evas_Object_List *)n1)->prev;
|
||||||
|
n2 = (Evas_Object_Textblock_Node *)((Evas_Object_List *)n1)->next;
|
||||||
|
if ((n0) && (n0->type == NODE_TEXT))
|
||||||
|
{
|
||||||
|
plen = n0->len;
|
||||||
|
n0->text = _strbuf_append(n0->text, n1->text, &(n0->len), &(n0->alloc));
|
||||||
|
((Evas_Object_List *)n0)->next = (Evas_Object_List *)n2;
|
||||||
|
if (n2) ((Evas_Object_List *)n2)->prev = (Evas_Object_List *)n0;
|
||||||
|
// fix any cursors in n1
|
||||||
|
if (n1 == o->cursor->node)
|
||||||
|
{
|
||||||
|
o->cursor->node = n0;
|
||||||
|
o->cursor->pos += plen;
|
||||||
|
}
|
||||||
|
for (l = o->cursors; l; l = l->next)
|
||||||
|
{
|
||||||
|
if (n1 == ((Evas_Textblock_Cursor *)l->data)->node)
|
||||||
|
{
|
||||||
|
((Evas_Textblock_Cursor *)l->data)->node = n0;
|
||||||
|
((Evas_Textblock_Cursor *)l->data)->pos += plen;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (n1->text) free(n1->text);
|
||||||
|
free(n1);
|
||||||
|
n1 = n0;
|
||||||
|
}
|
||||||
|
if ((n2) && (n2->type == NODE_TEXT))
|
||||||
|
{
|
||||||
|
n0 = n1;
|
||||||
|
n1 = n2;
|
||||||
|
n2 = (Evas_Object_Textblock_Node *)((Evas_Object_List *)n1)->next;
|
||||||
|
plen = n0->len;
|
||||||
|
n0->text = _strbuf_append(n0->text, n1->text, &(n0->len), &(n0->alloc));
|
||||||
|
((Evas_Object_List *)n0)->next = (Evas_Object_List *)n2;
|
||||||
|
if (n2) ((Evas_Object_List *)n2)->prev = (Evas_Object_List *)n0;
|
||||||
|
// fix any cursors in n1
|
||||||
|
if (n1 == o->cursor->node)
|
||||||
|
{
|
||||||
|
o->cursor->node = n0;
|
||||||
|
o->cursor->pos += plen;
|
||||||
|
}
|
||||||
|
for (l = o->cursors; l; l = l->next)
|
||||||
|
{
|
||||||
|
if (n1 == ((Evas_Textblock_Cursor *)l->data)->node)
|
||||||
|
{
|
||||||
|
((Evas_Textblock_Cursor *)l->data)->node = n0;
|
||||||
|
((Evas_Textblock_Cursor *)l->data)->pos += plen;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (n1->text) free(n1->text);
|
||||||
|
free(n1);
|
||||||
|
n1 = n0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* table of html escapes (that i can find) this should be ordered with the
|
/* table of html escapes (that i can find) this should be ordered with the
|
||||||
* most common first as it's a linear search to match - no hash for this.
|
* most common first as it's a linear search to match - no hash for this.
|
||||||
*
|
*
|
||||||
|
@ -2312,9 +2374,25 @@ evas_textblock_style_set(Evas_Textblock_Style *ts, const char *text)
|
||||||
Evas_List *l;
|
Evas_List *l;
|
||||||
|
|
||||||
if (!ts) return;
|
if (!ts) return;
|
||||||
|
|
||||||
|
for (l = ts->objects; l; l = l->next)
|
||||||
|
{
|
||||||
|
Evas_Object *obj;
|
||||||
|
Evas_Object_Textblock *o;
|
||||||
|
|
||||||
|
obj = l->data;
|
||||||
|
o = (Evas_Object_Textblock *)(obj->object_data);
|
||||||
|
if (o->markup_text)
|
||||||
|
{
|
||||||
|
free(o->markup_text);
|
||||||
|
o->markup_text = NULL;
|
||||||
|
evas_object_textblock_text_markup_get(obj);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
_style_clear(ts);
|
_style_clear(ts);
|
||||||
if (text) ts->style_text = strdup(text);
|
if (text) ts->style_text = strdup(text);
|
||||||
|
|
||||||
if (ts->style_text)
|
if (ts->style_text)
|
||||||
{
|
{
|
||||||
// format MUST be KEY='VALUE'[KEY='VALUE']...
|
// format MUST be KEY='VALUE'[KEY='VALUE']...
|
||||||
|
@ -2436,6 +2514,12 @@ evas_object_textblock_style_set(Evas_Object *obj, Evas_Textblock_Style *ts)
|
||||||
TB_HEAD();
|
TB_HEAD();
|
||||||
if (ts == o->style) return;
|
if (ts == o->style) return;
|
||||||
if ((ts) && (ts->delete_me)) return;
|
if ((ts) && (ts->delete_me)) return;
|
||||||
|
if (o->markup_text)
|
||||||
|
{
|
||||||
|
free(o->markup_text);
|
||||||
|
o->markup_text = NULL;
|
||||||
|
evas_object_textblock_text_markup_get(obj);
|
||||||
|
}
|
||||||
if (o->style)
|
if (o->style)
|
||||||
{
|
{
|
||||||
Evas_Textblock_Style *old_ts;
|
Evas_Textblock_Style *old_ts;
|
||||||
|
@ -2646,6 +2730,11 @@ evas_object_textblock_text_markup_set(Evas_Object *obj, const char *text)
|
||||||
}
|
}
|
||||||
p++;
|
p++;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
evas_textblock_cursor_node_last(o->cursor);
|
||||||
|
evas_textblock_cursor_format_append(o->cursor, "\n");
|
||||||
|
if (text)
|
||||||
|
{
|
||||||
if (text != o->markup_text)
|
if (text != o->markup_text)
|
||||||
o->markup_text = strdup(text);
|
o->markup_text = strdup(text);
|
||||||
}
|
}
|
||||||
|
@ -2666,7 +2755,72 @@ evas_object_textblock_text_markup_set(Evas_Object *obj, const char *text)
|
||||||
EAPI const char *
|
EAPI const char *
|
||||||
evas_object_textblock_text_markup_get(const Evas_Object *obj)
|
evas_object_textblock_text_markup_get(const Evas_Object *obj)
|
||||||
{
|
{
|
||||||
|
Evas_Object_List *l;
|
||||||
|
char *txt = NULL;
|
||||||
|
int txt_len = 0, txt_alloc = 0;
|
||||||
|
|
||||||
TB_HEAD_RETURN(NULL);
|
TB_HEAD_RETURN(NULL);
|
||||||
|
if (o->markup_text) return(o->markup_text);
|
||||||
|
for (l = (Evas_Object_List *)o->nodes; l; l = l->next)
|
||||||
|
{
|
||||||
|
Evas_Object_Textblock_Node *n;
|
||||||
|
|
||||||
|
n = (Evas_Object_Textblock_Node *)l;
|
||||||
|
if ((n->type == NODE_FORMAT) && (n->text))
|
||||||
|
{
|
||||||
|
char *tag = _style_match_replace(o->style, n->text);
|
||||||
|
txt = _strbuf_append(txt, "<", &txt_len, &txt_alloc);
|
||||||
|
if (tag)
|
||||||
|
{
|
||||||
|
// FIXME: need to escape
|
||||||
|
txt = _strbuf_append(txt, tag, &txt_len, &txt_alloc);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
char *s;
|
||||||
|
int push = 0;
|
||||||
|
int pop = 0;
|
||||||
|
|
||||||
|
// FIXME: need to escape
|
||||||
|
s = n->text;
|
||||||
|
if (*s == '+') push = 1;
|
||||||
|
if (*s == '-') pop = 1;
|
||||||
|
while ((*s == ' ') || (*s == '+') || (*s == '-')) s++;
|
||||||
|
if (pop) txt = _strbuf_append(txt, "/", &txt_len, &txt_alloc);
|
||||||
|
txt = _strbuf_append(txt, s, &txt_len, &txt_alloc);
|
||||||
|
}
|
||||||
|
txt = _strbuf_append(txt, ">", &txt_len, &txt_alloc);
|
||||||
|
}
|
||||||
|
else if ((n->type == NODE_TEXT) && (n->text))
|
||||||
|
{
|
||||||
|
if (strchr(n->text, '<') || strchr(n->text, '>') ||
|
||||||
|
strchr(n->text, '&'))
|
||||||
|
{
|
||||||
|
char *p;
|
||||||
|
|
||||||
|
p = n->text;
|
||||||
|
while (*p)
|
||||||
|
{
|
||||||
|
char s[2];
|
||||||
|
|
||||||
|
s[0] = *p;
|
||||||
|
s[1] = 0;
|
||||||
|
if (s[0] == '<')
|
||||||
|
txt = _strbuf_append(txt, "<", &txt_len, &txt_alloc);
|
||||||
|
else if (s[0] == '>')
|
||||||
|
txt = _strbuf_append(txt, ">", &txt_len, &txt_alloc);
|
||||||
|
else if (s[0] == '&')
|
||||||
|
txt = _strbuf_append(txt, "&", &txt_len, &txt_alloc);
|
||||||
|
else
|
||||||
|
txt = _strbuf_append(txt, s, &txt_len, &txt_alloc);
|
||||||
|
p++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
txt = _strbuf_append(txt, n->text, &txt_len, &txt_alloc);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
o->markup_text = txt;
|
||||||
return o->markup_text;
|
return o->markup_text;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3107,7 +3261,7 @@ EAPI void
|
||||||
evas_textblock_cursor_text_append(Evas_Textblock_Cursor *cur, const char *text)
|
evas_textblock_cursor_text_append(Evas_Textblock_Cursor *cur, const char *text)
|
||||||
{
|
{
|
||||||
Evas_Object_Textblock *o;
|
Evas_Object_Textblock *o;
|
||||||
Evas_Object_Textblock_Node *n;
|
Evas_Object_Textblock_Node *n, *nrel;
|
||||||
int index, ch;
|
int index, ch;
|
||||||
|
|
||||||
if (!cur) return;
|
if (!cur) return;
|
||||||
|
@ -3138,9 +3292,13 @@ evas_textblock_cursor_text_append(Evas_Textblock_Cursor *cur, const char *text)
|
||||||
n = cur->node;
|
n = cur->node;
|
||||||
if ((!n) || (n->type == NODE_FORMAT))
|
if ((!n) || (n->type == NODE_FORMAT))
|
||||||
{
|
{
|
||||||
|
nrel = n;
|
||||||
n = calloc(1, sizeof(Evas_Object_Textblock_Node));
|
n = calloc(1, sizeof(Evas_Object_Textblock_Node));
|
||||||
n->type = NODE_TEXT;
|
n->type = NODE_TEXT;
|
||||||
o->nodes = evas_object_list_append(o->nodes, n);
|
if (nrel)
|
||||||
|
o->nodes = evas_object_list_append_relative(o->nodes, n, nrel);
|
||||||
|
else
|
||||||
|
o->nodes = evas_object_list_append(o->nodes, n);
|
||||||
}
|
}
|
||||||
cur->node = n;
|
cur->node = n;
|
||||||
index = cur->pos;
|
index = cur->pos;
|
||||||
|
@ -3158,6 +3316,11 @@ evas_textblock_cursor_text_append(Evas_Textblock_Cursor *cur, const char *text)
|
||||||
o->formatted.valid = 0;
|
o->formatted.valid = 0;
|
||||||
o->native.valid = 0;
|
o->native.valid = 0;
|
||||||
o->changed = 1;
|
o->changed = 1;
|
||||||
|
if (o->markup_text)
|
||||||
|
{
|
||||||
|
free(o->markup_text);
|
||||||
|
o->markup_text = NULL;
|
||||||
|
}
|
||||||
evas_object_change(cur->obj);
|
evas_object_change(cur->obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3171,7 +3334,7 @@ EAPI void
|
||||||
evas_textblock_cursor_text_prepend(Evas_Textblock_Cursor *cur, const char *text)
|
evas_textblock_cursor_text_prepend(Evas_Textblock_Cursor *cur, const char *text)
|
||||||
{
|
{
|
||||||
Evas_Object_Textblock *o;
|
Evas_Object_Textblock *o;
|
||||||
Evas_Object_Textblock_Node *n;
|
Evas_Object_Textblock_Node *n, *nrel;
|
||||||
int index;
|
int index;
|
||||||
|
|
||||||
if (!cur) return;
|
if (!cur) return;
|
||||||
|
@ -3206,9 +3369,13 @@ evas_textblock_cursor_text_prepend(Evas_Textblock_Cursor *cur, const char *text)
|
||||||
n = cur->node;
|
n = cur->node;
|
||||||
if ((!n) || (n->type == NODE_FORMAT))
|
if ((!n) || (n->type == NODE_FORMAT))
|
||||||
{
|
{
|
||||||
|
nrel = n;
|
||||||
n = calloc(1, sizeof(Evas_Object_Textblock_Node));
|
n = calloc(1, sizeof(Evas_Object_Textblock_Node));
|
||||||
n->type = NODE_TEXT;
|
n->type = NODE_TEXT;
|
||||||
o->nodes = evas_object_list_append(o->nodes, n);
|
if (nrel)
|
||||||
|
o->nodes = evas_object_list_prepend_relative(o->nodes, n, nrel);
|
||||||
|
else
|
||||||
|
o->nodes = evas_object_list_prepend(o->nodes, n);
|
||||||
}
|
}
|
||||||
cur->node = n;
|
cur->node = n;
|
||||||
index = cur->pos;
|
index = cur->pos;
|
||||||
|
@ -3220,6 +3387,11 @@ evas_textblock_cursor_text_prepend(Evas_Textblock_Cursor *cur, const char *text)
|
||||||
o->formatted.valid = 0;
|
o->formatted.valid = 0;
|
||||||
o->native.valid = 0;
|
o->native.valid = 0;
|
||||||
o->changed = 1;
|
o->changed = 1;
|
||||||
|
if (o->markup_text)
|
||||||
|
{
|
||||||
|
free(o->markup_text);
|
||||||
|
o->markup_text = NULL;
|
||||||
|
}
|
||||||
evas_object_change(cur->obj);
|
evas_object_change(cur->obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3286,6 +3458,11 @@ evas_textblock_cursor_format_append(Evas_Textblock_Cursor *cur, const char *form
|
||||||
o->formatted.valid = 0;
|
o->formatted.valid = 0;
|
||||||
o->native.valid = 0;
|
o->native.valid = 0;
|
||||||
o->changed = 1;
|
o->changed = 1;
|
||||||
|
if (o->markup_text)
|
||||||
|
{
|
||||||
|
free(o->markup_text);
|
||||||
|
o->markup_text = NULL;
|
||||||
|
}
|
||||||
evas_object_change(cur->obj);
|
evas_object_change(cur->obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3347,6 +3524,11 @@ evas_textblock_cursor_format_prepend(Evas_Textblock_Cursor *cur, const char *for
|
||||||
o->formatted.valid = 0;
|
o->formatted.valid = 0;
|
||||||
o->native.valid = 0;
|
o->native.valid = 0;
|
||||||
o->changed = 1;
|
o->changed = 1;
|
||||||
|
if (o->markup_text)
|
||||||
|
{
|
||||||
|
free(o->markup_text);
|
||||||
|
o->markup_text = NULL;
|
||||||
|
}
|
||||||
evas_object_change(cur->obj);
|
evas_object_change(cur->obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3364,6 +3546,8 @@ evas_textblock_cursor_node_delete(Evas_Textblock_Cursor *cur)
|
||||||
if (!cur) return;
|
if (!cur) return;
|
||||||
o = (Evas_Object_Textblock *)(cur->obj->object_data);
|
o = (Evas_Object_Textblock *)(cur->obj->object_data);
|
||||||
n = cur->node;
|
n = cur->node;
|
||||||
|
if ((n->text) && (!strcmp(n->text, "\n")) &&
|
||||||
|
(!((Evas_Object_List *)n)->next)) return;
|
||||||
n2 = (Evas_Object_Textblock_Node *)(((Evas_Object_List *)n)->next);
|
n2 = (Evas_Object_Textblock_Node *)(((Evas_Object_List *)n)->next);
|
||||||
if (n2)
|
if (n2)
|
||||||
{
|
{
|
||||||
|
@ -3406,9 +3590,16 @@ evas_textblock_cursor_node_delete(Evas_Textblock_Cursor *cur)
|
||||||
if (n->text) free(n->text);
|
if (n->text) free(n->text);
|
||||||
free(n);
|
free(n);
|
||||||
|
|
||||||
|
if (n2) _nodes_adjacent_merge(cur->obj, n2);
|
||||||
|
|
||||||
o->formatted.valid = 0;
|
o->formatted.valid = 0;
|
||||||
o->native.valid = 0;
|
o->native.valid = 0;
|
||||||
o->changed = 1;
|
o->changed = 1;
|
||||||
|
if (o->markup_text)
|
||||||
|
{
|
||||||
|
free(o->markup_text);
|
||||||
|
o->markup_text = NULL;
|
||||||
|
}
|
||||||
evas_object_change(cur->obj);
|
evas_object_change(cur->obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3484,6 +3675,11 @@ evas_textblock_cursor_char_delete(Evas_Textblock_Cursor *cur)
|
||||||
o->formatted.valid = 0;
|
o->formatted.valid = 0;
|
||||||
o->native.valid = 0;
|
o->native.valid = 0;
|
||||||
o->changed = 1;
|
o->changed = 1;
|
||||||
|
if (o->markup_text)
|
||||||
|
{
|
||||||
|
free(o->markup_text);
|
||||||
|
o->markup_text = NULL;
|
||||||
|
}
|
||||||
evas_object_change(cur->obj);
|
evas_object_change(cur->obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3699,6 +3895,11 @@ evas_textblock_cursor_range_delete(Evas_Textblock_Cursor *cur1, Evas_Textblock_C
|
||||||
o->formatted.valid = 0;
|
o->formatted.valid = 0;
|
||||||
o->native.valid = 0;
|
o->native.valid = 0;
|
||||||
o->changed = 1;
|
o->changed = 1;
|
||||||
|
if (o->markup_text)
|
||||||
|
{
|
||||||
|
free(o->markup_text);
|
||||||
|
o->markup_text = NULL;
|
||||||
|
}
|
||||||
evas_object_change(cur1->obj);
|
evas_object_change(cur1->obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3753,6 +3954,54 @@ evas_textblock_cursor_node_format_get(const Evas_Textblock_Cursor *cur)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* to be documented.
|
||||||
|
* @param cur to be documented.
|
||||||
|
* @return to be documented.
|
||||||
|
*/
|
||||||
|
EAPI Evas_Bool
|
||||||
|
evas_textblock_cursor_node_format_is_visible_get(const Evas_Textblock_Cursor *cur)
|
||||||
|
{
|
||||||
|
Evas_Object_Textblock_Node *n;
|
||||||
|
|
||||||
|
if (!cur) return NULL;
|
||||||
|
n = cur->node;
|
||||||
|
if (!n) return NULL;
|
||||||
|
if (n->type != NODE_FORMAT) return 0;
|
||||||
|
if (!n->text) return;
|
||||||
|
{
|
||||||
|
char *s;
|
||||||
|
char *item;
|
||||||
|
int push = 0;
|
||||||
|
int pop = 0;
|
||||||
|
int visible = 0;
|
||||||
|
|
||||||
|
s = n->text;
|
||||||
|
if (s[0] == '+')
|
||||||
|
{
|
||||||
|
push = 1;
|
||||||
|
s++;
|
||||||
|
}
|
||||||
|
else if (s[0] == '-')
|
||||||
|
{
|
||||||
|
pop = 1;
|
||||||
|
s++;
|
||||||
|
}
|
||||||
|
while ((item = _format_parse(&s)))
|
||||||
|
{
|
||||||
|
char tmp_delim = *s;
|
||||||
|
*s = '\0';
|
||||||
|
if ((!strcmp(item, "\n")) || (!strcmp(item, "\\n")))
|
||||||
|
visible = 1;
|
||||||
|
else if ((!strcmp(item, "\t")) || (!strcmp(item, "\\t")))
|
||||||
|
visible = 1;
|
||||||
|
*s = tmp_delim;
|
||||||
|
if (visible) return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* to be documented.
|
* to be documented.
|
||||||
* @param cur1 to be documented.
|
* @param cur1 to be documented.
|
||||||
|
@ -3851,14 +4100,24 @@ evas_textblock_cursor_char_geometry_get(const Evas_Textblock_Cursor *cur, Evas_C
|
||||||
int pos, ret;
|
int pos, ret;
|
||||||
|
|
||||||
if (!cur) return -1;
|
if (!cur) return -1;
|
||||||
if (!cur->node) return -1;
|
if (!cur->node)
|
||||||
|
{
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
o = (Evas_Object_Textblock *)(cur->obj->object_data);
|
o = (Evas_Object_Textblock *)(cur->obj->object_data);
|
||||||
if (!o->formatted.valid) _relayout(cur->obj);
|
if (!o->formatted.valid) _relayout(cur->obj);
|
||||||
if (cur->node->type == NODE_FORMAT)
|
if (cur->node->type == NODE_FORMAT)
|
||||||
_find_layout_format_item_line_match(cur->obj, cur->node, &ln, &fi);
|
{
|
||||||
|
_find_layout_format_item_line_match(cur->obj, cur->node, &ln, &fi);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
_find_layout_item_line_match(cur->obj, cur->node, cur->pos, &ln, &it);
|
{
|
||||||
if (!ln) return -1;
|
_find_layout_item_line_match(cur->obj, cur->node, cur->pos, &ln, &it);
|
||||||
|
}
|
||||||
|
if (!ln)
|
||||||
|
{
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
if (it)
|
if (it)
|
||||||
{
|
{
|
||||||
pos = cur->pos - it->source_pos;
|
pos = cur->pos - it->source_pos;
|
||||||
|
@ -3893,7 +4152,10 @@ evas_textblock_cursor_char_geometry_get(const Evas_Textblock_Cursor *cur, Evas_C
|
||||||
w = fi->w;
|
w = fi->w;
|
||||||
h = ln->h;
|
h = ln->h;
|
||||||
}
|
}
|
||||||
else return -1;
|
else
|
||||||
|
{
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
if (cx) *cx = x;
|
if (cx) *cx = x;
|
||||||
if (cy) *cy = y;
|
if (cy) *cy = y;
|
||||||
if (cw) *cw = w;
|
if (cw) *cw = w;
|
||||||
|
@ -4196,11 +4458,6 @@ evas_object_textblock_clear(Evas_Object *obj)
|
||||||
cur->node = NULL;
|
cur->node = NULL;
|
||||||
cur->pos = 0;
|
cur->pos = 0;
|
||||||
}
|
}
|
||||||
if (o->markup_text)
|
|
||||||
{
|
|
||||||
free(o->markup_text);
|
|
||||||
o->markup_text = NULL;
|
|
||||||
}
|
|
||||||
if (o->lines)
|
if (o->lines)
|
||||||
{
|
{
|
||||||
_lines_clear(obj, o->lines);
|
_lines_clear(obj, o->lines);
|
||||||
|
@ -4209,6 +4466,11 @@ evas_object_textblock_clear(Evas_Object *obj)
|
||||||
o->formatted.valid = 0;
|
o->formatted.valid = 0;
|
||||||
o->native.valid = 0;
|
o->native.valid = 0;
|
||||||
o->changed = 1;
|
o->changed = 1;
|
||||||
|
if (o->markup_text)
|
||||||
|
{
|
||||||
|
free(o->markup_text);
|
||||||
|
o->markup_text = NULL;
|
||||||
|
}
|
||||||
evas_object_change(obj);
|
evas_object_change(obj);
|
||||||
/* FIXME: adjust cursors that are affected by the change */
|
/* FIXME: adjust cursors that are affected by the change */
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue