nikawhite pushed a commit to branch master.

http://git.enlightenment.org/tools/enventor.git/commit/?id=3940a0e58e8fa381141fbfc833a517d68693ed6b

commit 3940a0e58e8fa381141fbfc833a517d68693ed6b
Author: Mykyta Biliavskyi <m.biliavs...@samsung.com>
Date:   Thu Dec 24 09:08:44 2015 +0900

    Edc editor: highlight error line number.
---
 src/lib/edc_editor.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 48 insertions(+)

diff --git a/src/lib/edc_editor.c b/src/lib/edc_editor.c
index 702ff02..805e3cc 100644
--- a/src/lib/edc_editor.c
+++ b/src/lib/edc_editor.c
@@ -71,6 +71,8 @@ static Eina_Bool
 image_preview_show(edit_data *ed, char *cur, Evas_Coord x, Evas_Coord y);
 static void
 edit_font_apply(edit_data *ed, const char *font_name, const char *font_style);
+static void
+error_line_num_highlight(edit_data *ed);
 
 static void
 line_init(edit_data *ed)
@@ -143,6 +145,7 @@ static void
 error_highlight(edit_data *ed, Evas_Object *tb)
 {
    Evas_Textblock_Cursor *cur1 = evas_object_textblock_cursor_new(tb);
+   error_line_num_highlight(ed);
    if (ed->error_line)
      {
         evas_textblock_cursor_line_set(cur1, ed->error_line);
@@ -1417,6 +1420,51 @@ edit_entry_get(edit_data *ed)
    return ed->en_edit;
 }
 
+/*TODO: this function should be more flexible.
+ * Will be better to change prototype like:
+ * line_num_highlight(edit_data *, int line_num, char *color);
+ * And make this function public.
+ */
+static void
+error_line_num_highlight(edit_data *ed)
+{
+#define LINE_NUM_SIZE 5
+   Evas_Object *tb = elm_entry_textblock_get(ed->en_line);
+   char *text = (char *) evas_object_textblock_text_markup_get(tb);
+
+   int from_line = 1;
+   int to_line = -1;
+
+   char *from EINA_UNUSED = NULL;
+   char *to EINA_UNUSED = NULL;
+
+   char *utf8 = (char *)color_cancel(syntax_color_data_get(ed->sh), text,
+                                     strlen(text), from_line, to_line, &from,
+                                     &to);
+   if (ed->error_line == 0)
+     {
+        evas_object_textblock_text_markup_set(tb, utf8);
+        return;
+     }
+
+   char line_str[LINE_NUM_SIZE];
+   snprintf(line_str, LINE_NUM_SIZE, "%d", ed->error_line + 1);
+   char *ptr = strstr(utf8, line_str);
+   if (!ptr) return;
+
+   Eina_Strbuf *strbuf = eina_strbuf_new();
+   eina_strbuf_append_length(strbuf, utf8, ptr - utf8);
+   eina_strbuf_append(strbuf, "<backing=on><backing_color=#ff0000>");
+   eina_strbuf_append_length(strbuf, utf8 + (ptr - utf8), strlen(line_str));
+   eina_strbuf_append(strbuf, "</backing_color><backing=off>");
+   eina_strbuf_append(strbuf, utf8 +((ptr - utf8) + strlen(line_str)));
+   evas_object_textblock_text_markup_set(tb, eina_strbuf_string_get(strbuf));
+
+   eina_strbuf_free(strbuf);
+   elm_entry_calc_force(ed->en_line);
+#undef LINE_NUM_SIZE
+}
+
 void
 edit_line_increase(edit_data *ed, int cnt)
 {

-- 


Reply via email to