indent: Refactoring indent_text_auto_format().

Move the module parsing codes and creating code line list to
indent_code_lines_create() function.
This commit is contained in:
Jaehyun Cho 2016-02-19 14:34:03 +09:00
parent 02a4549906
commit 3871364b10
1 changed files with 43 additions and 23 deletions

View File

@ -236,33 +236,26 @@ indent_delete_apply(indent_data *id EINA_UNUSED, Evas_Object *entry,
return EINA_FALSE; return EINA_FALSE;
} }
static int static Eina_List *
indent_text_auto_format(indent_data *id EINA_UNUSED, indent_code_lines_create(indent_data *id, const char *utf8)
Evas_Object *entry, const char *insert)
{ {
int line_cnt = 0;
//FIXME: To improve performance, change logic not to translate text.
char *utf8 = evas_textblock_text_markup_to_utf8(NULL, insert);
int utf8_size = strlen(utf8);
Evas_Object *tb = elm_entry_textblock_get(entry);
Evas_Textblock_Cursor *cur_start = evas_object_textblock_cursor_new(tb);
Evas_Textblock_Cursor *cur_end = evas_object_textblock_cursor_get(tb);
redoundo_data *rd = evas_object_data_get(entry, "redoundo");
char *utf8_ptr = utf8;
char *utf8_lexem = NULL;
char *utf8_end = utf8 + utf8_size;
char *utf8_append_ptr = NULL;
Eina_List *code_lines = NULL; Eina_List *code_lines = NULL;
Eina_Strbuf *buf = eina_strbuf_new();
char *utf8_ptr = NULL;
char *utf8_end = NULL;
char *utf8_lexem = NULL;
char *utf8_append_ptr = NULL;
Eina_Bool keep_lexem_start_pos = EINA_FALSE; Eina_Bool keep_lexem_start_pos = EINA_FALSE;
Eina_Bool single_comment_found = EINA_FALSE; Eina_Bool single_comment_found = EINA_FALSE;
Eina_Bool multi_comment_found = EINA_FALSE; Eina_Bool multi_comment_found = EINA_FALSE;
Eina_Bool macro_found = EINA_FALSE; Eina_Bool macro_found = EINA_FALSE;
int tb_cur_pos = 0; if (!utf8) return NULL;
utf8_ptr = (char *)utf8;
utf8_end = utf8_ptr + strlen(utf8);
/* Create a list of code line strings from inserted string. /* Create a list of code line strings from inserted string.
Each code line string is generated based on lexeme. Each code line string is generated based on lexeme.
Here, lexeme starts with nonspace character and ends with the followings. Here, lexeme starts with nonspace character and ends with the followings.
@ -403,9 +396,35 @@ indent_text_auto_format(indent_data *id EINA_UNUSED,
if (utf8_lexem > utf8_append_ptr) if (utf8_lexem > utf8_append_ptr)
code_lines = eina_list_append(code_lines, code_lines = eina_list_append(code_lines,
eina_stringshare_add(utf8_lexem)); eina_stringshare_add(utf8_lexem));
free(utf8);
return code_lines;
}
static int
indent_text_auto_format(indent_data *id,
Evas_Object *entry, const char *insert)
{
int line_cnt = 0;
//FIXME: To improve performance, change logic not to translate text.
char *utf8 = evas_textblock_text_markup_to_utf8(NULL, insert);
int utf8_size = strlen(utf8);
Evas_Object *tb = elm_entry_textblock_get(entry);
Evas_Textblock_Cursor *cur_start = evas_object_textblock_cursor_new(tb);
Evas_Textblock_Cursor *cur_end = evas_object_textblock_cursor_get(tb);
int tb_cur_pos = 0;
redoundo_data *rd = evas_object_data_get(entry, "redoundo");
char *utf8_ptr = utf8;
char *utf8_end = utf8 + utf8_size;
char *utf8_lexem = NULL;
char *utf8_append_ptr = NULL;
Eina_List *code_lines = indent_code_lines_create(id, utf8);
free(utf8);
if (!code_lines) return line_cnt; if (!code_lines) return line_cnt;
tb_cur_pos = evas_textblock_cursor_pos_get(cur_end); 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_pos_set(cur_start, tb_cur_pos - utf8_size);
evas_textblock_cursor_range_delete(cur_start, cur_end); evas_textblock_cursor_range_delete(cur_start, cur_end);
@ -437,10 +456,11 @@ indent_text_auto_format(indent_data *id EINA_UNUSED,
} }
free(utf8); free(utf8);
Eina_Strbuf *buf = eina_strbuf_new();
int saved_space = 0; int saved_space = 0;
single_comment_found = EINA_FALSE; Eina_Bool single_comment_found = EINA_FALSE;
multi_comment_found = EINA_FALSE; Eina_Bool multi_comment_found = EINA_FALSE;
macro_found = EINA_FALSE; Eina_Bool macro_found = EINA_FALSE;
EINA_LIST_FOREACH(code_lines, l, line) EINA_LIST_FOREACH(code_lines, l, line)
{ {
if (!single_comment_found && !multi_comment_found && !macro_found) if (!single_comment_found && !multi_comment_found && !macro_found)