Autoindent: fix increase line numbers.

Summary:
Function indent_insert_apply reutn count of inserted lines.
It is provide increse line numbers correctly.

@fix T2510

Reviewers: Hermet

Maniphest Tasks: T2510

Differential Revision: https://phab.enlightenment.org/D2745
This commit is contained in:
Mykyta Biliavskyi 2015-06-24 13:14:14 +09:00 committed by ChunEon Park
parent 533994772f
commit c2d6bae122
3 changed files with 19 additions and 13 deletions

View File

@ -239,29 +239,29 @@ edit_changed_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info)
if (info->insert)
{
int increase = 0;
if ((info->change.insert.plain_length == 1)&&
(info->change.insert.content[0] == ' ')) return;
if (!strcmp(info->change.insert.content, EOL))
{
edit_line_increase(ed, 1);
increase++;
syntax_color = EINA_FALSE;
}
else
{
int increase =
increase =
parser_line_cnt_get(ed->pd, info->change.insert.content);
edit_line_increase(ed, increase);
}
if (ed->auto_indent)
{
indent_insert_apply(syntax_indent_data_get(ed->sh), ed->en_edit,
increase = indent_insert_apply(syntax_indent_data_get(ed->sh), ed->en_edit,
info->change.insert.content, ed->cur_line);
int increase =
parser_line_cnt_get(ed->pd, info->change.insert.content);
edit_line_increase(ed, increase);
}
else
edit_line_increase(ed, increase);
}
else

View File

@ -129,7 +129,7 @@ indent_data *syntax_indent_data_get(syntax_helper *sh);
indent_data *indent_init(Eina_Strbuf *strbuf);
void indent_term(indent_data *id);
int indent_space_get(indent_data *id, Evas_Object *entry);
void indent_insert_apply(indent_data *id, Evas_Object *entry, const char *insert, int cur_line);
int indent_insert_apply(indent_data *id, Evas_Object *entry, const char *insert, int cur_line);
Eina_Bool indent_delete_apply(indent_data *id, Evas_Object *entry, const char *del, int cur_line);

View File

@ -231,10 +231,11 @@ indent_delete_apply(indent_data *id EINA_UNUSED, Evas_Object *entry,
return EINA_FALSE;
}
static void
static int
indent_text_auto_format(indent_data *id EINA_UNUSED,
Evas_Object *entry, const char *insert)
{
int line_cnt = 0;
char *utf8 = evas_textblock_text_markup_to_utf8(NULL, insert);
int utf8_size = strlen(utf8);
@ -276,7 +277,7 @@ indent_text_auto_format(indent_data *id EINA_UNUSED,
}
free(utf8);
if (!code_lines) return;
if (!code_lines) return line_cnt;
tb_cur_pos = evas_textblock_cursor_pos_get(cur_end);
evas_textblock_cursor_pos_set(cur_start, tb_cur_pos - utf8_size);
evas_textblock_cursor_range_delete(cur_start, cur_end);
@ -297,6 +298,7 @@ indent_text_auto_format(indent_data *id EINA_UNUSED,
memset(p, 0x0, space);
if (strstr(line, "{")) space += TAB_SPACE;
eina_stringshare_del(line);
line_cnt++;
}
frmt_buf = eina_strbuf_string_steal(buf);
@ -313,10 +315,10 @@ indent_text_auto_format(indent_data *id EINA_UNUSED,
eina_strbuf_free(buf);
free(frmt_buf);
evas_textblock_cursor_free(cur_start);
return;
return line_cnt;
}
void
int
indent_insert_apply(indent_data *id, Evas_Object *entry, const char *insert,
int cur_line)
{
@ -325,12 +327,16 @@ indent_insert_apply(indent_data *id, Evas_Object *entry, const char *insert,
{
if (insert[0] == '}')
indent_insert_bracket_case(id, entry, cur_line);
return 0;
}
else
{
if (!strcmp(insert, EOL))
indent_insert_br_case(id, entry);
{
indent_insert_br_case(id, entry);
return 1;
}
else
indent_text_auto_format(id, entry, insert);
return indent_text_auto_format(id, entry, insert);
}
}