elm_code: Tidying our callbacks and line manipulation.

Now the line_done callback allows styling to be set during the load process.
This commit is contained in:
Andy Williams 2015-02-14 23:14:06 +00:00
parent 4f49e230bd
commit 9a0f269e92
15 changed files with 218 additions and 150 deletions

View File

@ -31,12 +31,12 @@ static void _append_line(Elm_Code_File *file, const char *line)
int length;
length = strlen(line);
elm_code_file_line_append(file, line, length);
elm_code_file_line_append(file, line, length, NULL);
}
static Eina_Bool
_elm_code_test_line_cb(void *data EINA_UNUSED, Eo *obj EINA_UNUSED,
const Eo_Event_Description *desc EINA_UNUSED, void *event_info)
_elm_code_test_line_clicked_cb(void *data EINA_UNUSED, Eo *obj EINA_UNUSED,
const Eo_Event_Description *desc EINA_UNUSED, void *event_info)
{
Elm_Code_Line *line;
@ -46,6 +46,22 @@ _elm_code_test_line_cb(void *data EINA_UNUSED, Eo *obj EINA_UNUSED,
return EINA_TRUE;
}
static Eina_Bool
_elm_code_test_line_done_cb(void *data EINA_UNUSED, Eo *obj EINA_UNUSED,
const Eo_Event_Description *desc EINA_UNUSED, void *event_info)
{
Elm_Code_Line *line;
line = (Elm_Code_Line *)event_info;
if (line->number == 1)
elm_code_line_token_add(line, 14, 21, ELM_CODE_TOKEN_TYPE_COMMENT);
else if (line->number == 4)
line->status = ELM_CODE_STATUS_TYPE_ERROR;
return EO_CALLBACK_STOP;
}
static Evas_Object *
_elm_code_test_welcome_setup(Evas_Object *parent)
{
@ -57,14 +73,13 @@ _elm_code_test_welcome_setup(Evas_Object *parent)
eo_do(widget,
elm_code_widget_code_set(code),
elm_code_widget_font_size_set(12),
eo_event_callback_add(ELM_CODE_WIDGET_EVENT_LINE_CLICKED, _elm_code_test_line_cb, code));
eo_event_callback_add(&ELM_CODE_EVENT_LINE_LOAD_DONE, _elm_code_test_line_done_cb, NULL);
eo_event_callback_add(ELM_CODE_WIDGET_EVENT_LINE_CLICKED, _elm_code_test_line_clicked_cb, code));
_append_line(code->file, "Hello World, Elm Code!");
elm_code_file_line_token_add(code->file, 1, 14, 21, ELM_CODE_TOKEN_TYPE_COMMENT);
_append_line(code->file, "");
_append_line(code->file, "This is a demo of elm_code's capabilities.");
_append_line(code->file, "*** Currently experimental ***");
elm_code_file_line_status_set(code->file, 4, ELM_CODE_STATUS_TYPE_ERROR);
evas_object_size_hint_weight_set(widget, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(widget, EVAS_HINT_FILL, EVAS_HINT_FILL);

View File

@ -34,6 +34,7 @@
#endif /* ! _WIN32 */
#include "elm_code_common.h"
#include "elm_code_line.h"
#include "elm_code_file.h"
#include "elm_code_parse.h"
#include "elm_code_widget.eo.h"

View File

@ -19,6 +19,7 @@ lib_LTLIBRARIES = libelm_code.la
includes_HEADERS = \
elm_code_common.h \
elm_code_line.h \
elm_code_file.h \
elm_code_parse.h \
elm_code_widget.eo.h \
@ -28,6 +29,7 @@ Elm_Code.h
includesdir = $(includedir)/edi-@VMAJ@
libelm_code_la_SOURCES = \
elm_code_line.c \
elm_code_file.c \
elm_code_parse.c \
elm_code_widget_text.c \

View File

@ -12,8 +12,10 @@
static int _elm_code_init = 0;
int _elm_code_lib_log_dom = -1;
EAPI const Eo_Event_Description ELM_CODE_EVENT_LINE_SET_DONE =
EO_EVENT_DESCRIPTION("line,set,done", "");
EAPI const Eo_Event_Description ELM_CODE_EVENT_LINE_STYLE_SET =
EO_EVENT_DESCRIPTION("line,style,set", "");
EAPI const Eo_Event_Description ELM_CODE_EVENT_LINE_LOAD_DONE =
EO_EVENT_DESCRIPTION("line,load,done", "");
EAPI const Eo_Event_Description ELM_CODE_EVENT_FILE_LOAD_DONE =
EO_EVENT_DESCRIPTION("file,load,done", "");

View File

@ -4,7 +4,11 @@
typedef struct _Elm_Code Elm_Code;
typedef struct _Elm_Code_File Elm_Code_File;
EAPI extern const Eo_Event_Description ELM_CODE_EVENT_LINE_SET_DONE;
/** Event used to notify that a line's style callbacks have completed */
EAPI extern const Eo_Event_Description ELM_CODE_EVENT_LINE_STYLE_SET;
/** Event marking that a single line has loaded and ready to be styled */
EAPI extern const Eo_Event_Description ELM_CODE_EVENT_LINE_LOAD_DONE;
/** Event that marks a file load has been completed */
EAPI extern const Eo_Event_Description ELM_CODE_EVENT_FILE_LOAD_DONE;
typedef enum {

View File

@ -6,78 +6,89 @@
#include "elm_code_private.h"
#define ELM_CODE_DIFF_WIDGET_LEFT "diffwidgetleft"
#define ELM_CODE_DIFF_WIDGET_RIGHT "diffwidgetright"
#define _ELM_CODE_DIFF_WIDGET_LEFT "diffwidgetleft"
#define _ELM_CODE_DIFF_WIDGET_RIGHT "diffwidgetright"
static void _elm_code_diff_widget_parse_diff_line(Elm_Code_Line *line, int number, Elm_Code_File *left, Elm_Code_File *right)
#define _ELM_CODE_DIFF_WIDGET_TYPE_ADDED "added"
#define _ELM_CODE_DIFF_WIDGET_TYPE_REMOVED "removed"
#define _ELM_CODE_DIFF_WIDGET_TYPE_CHANGED "changed"
static void
_elm_code_diff_widget_parse_diff_line(Elm_Code_Line *line, Elm_Code_File *left, Elm_Code_File *right)
{
if (line->length < 1)
{
elm_code_file_line_append(left, "", 0);
elm_code_file_line_append(right, "", 0);
elm_code_file_line_append(left, "", 0, NULL);
elm_code_file_line_append(right, "", 0, NULL);
}
if (line->content[0] == '+')
{
elm_code_file_line_append(left, "", 0);
elm_code_file_line_append(right, line->content+1, line->length-1);
elm_code_file_line_status_set(right, number, ELM_CODE_STATUS_TYPE_ADDED);
elm_code_file_line_append(left, "", 0, NULL);
elm_code_file_line_append(right, line->content+1, line->length-1, _ELM_CODE_DIFF_WIDGET_TYPE_ADDED);
}
else if (line->content[0] == '-')
{
elm_code_file_line_append(left, line->content+1, line->length-1);
elm_code_file_line_append(right, "", 0);
elm_code_file_line_status_set(left, number, ELM_CODE_STATUS_TYPE_REMOVED);
elm_code_file_line_append(left, line->content+1, line->length-1, _ELM_CODE_DIFF_WIDGET_TYPE_REMOVED);
elm_code_file_line_append(right, "", 0, NULL);
}
else
{
elm_code_file_line_append(left, line->content+1, line->length-1);
elm_code_file_line_append(right, line->content+1, line->length-1);
elm_code_file_line_append(left, line->content+1, line->length-1, NULL);
elm_code_file_line_append(right, line->content+1, line->length-1, NULL);
}
}
static void _elm_code_diff_widget_parse_diff(Elm_Code_File *diff, Elm_Code_File *left, Elm_Code_File *right)
static void
_elm_code_diff_widget_parse_diff(Elm_Code_File *diff, Elm_Code_File *left, Elm_Code_File *right)
{
Eina_List *item;
Elm_Code_Line *line;
int number, offset;
int offset;
number = 0;
offset = 0;
EINA_LIST_FOREACH(diff->lines, item, line)
{
if (line->length > 0)
if (line->length > 0 && (line->content[0] == 'd' || line->content[0] == 'i' || line->content[0] == 'n'))
{
if (line->content[0] == 'd' || line->content[0] == 'i' || line->content[0] == 'n')
{
offset = 0;
continue;
}
offset = 0;
continue;
}
number++;
if (offset == 0)
{
elm_code_file_line_append(left, line->content+4, line->length-4);
elm_code_file_line_status_set(left, number, ELM_CODE_STATUS_TYPE_CHANGED);
}
elm_code_file_line_append(left, line->content+4, line->length-4, _ELM_CODE_DIFF_WIDGET_TYPE_CHANGED);
else if (offset == 1)
{
number--;
elm_code_file_line_append(right, line->content+4, line->length-4);
elm_code_file_line_status_set(right, number, ELM_CODE_STATUS_TYPE_CHANGED);
}
elm_code_file_line_append(right, line->content+4, line->length-4, _ELM_CODE_DIFF_WIDGET_TYPE_CHANGED);
else
{
_elm_code_diff_widget_parse_diff_line(line, number, left, right);
}
_elm_code_diff_widget_parse_diff_line(line, left, right);
offset++;
}
}
EAPI Evas_Object *elm_code_diff_widget_add(Evas_Object *parent, Elm_Code *code)
static Eina_Bool
_elm_code_diff_widget_line_cb(void *data EINA_UNUSED, Eo *obj EINA_UNUSED,
const Eo_Event_Description *desc EINA_UNUSED, void *event_info)
{
Elm_Code_Line *line;
line = (Elm_Code_Line *)event_info;
if (!line->data)
return EO_CALLBACK_CONTINUE;
if (!strcmp(_ELM_CODE_DIFF_WIDGET_TYPE_ADDED, (char *)line->data))
line->status = ELM_CODE_STATUS_TYPE_ADDED;
else if (!strcmp(_ELM_CODE_DIFF_WIDGET_TYPE_REMOVED, (char *)line->data))
line->status = ELM_CODE_STATUS_TYPE_REMOVED;
else if (!strcmp(_ELM_CODE_DIFF_WIDGET_TYPE_CHANGED, (char *)line->data))
line->status = ELM_CODE_STATUS_TYPE_CHANGED;
return EO_CALLBACK_CONTINUE;
}
EAPI Evas_Object *
elm_code_diff_widget_add(Evas_Object *parent, Elm_Code *code)
{
Elm_Code *wcode1, *wcode2;
Elm_Code_Widget *widget_left, *widget_right;
@ -93,37 +104,40 @@ EAPI Evas_Object *elm_code_diff_widget_add(Evas_Object *parent, Elm_Code *code)
wcode1 = elm_code_create();
widget_left = eo_add(ELM_CODE_WIDGET_CLASS, parent);
eo_do(widget_left,
elm_code_widget_code_set(wcode1));
elm_code_widget_code_set(wcode1),
eo_event_callback_add(&ELM_CODE_EVENT_LINE_LOAD_DONE, _elm_code_diff_widget_line_cb, NULL));
evas_object_size_hint_weight_set(widget_left, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(widget_left, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_show(widget_left);
evas_object_data_set(hbox, ELM_CODE_DIFF_WIDGET_LEFT, widget_left);
evas_object_data_set(hbox, _ELM_CODE_DIFF_WIDGET_LEFT, widget_left);
elm_object_part_content_set(hbox, "left", widget_left);
// right side of diff
wcode2 = elm_code_create();
widget_right = eo_add(ELM_CODE_WIDGET_CLASS, parent);
eo_do(widget_right,
elm_code_widget_code_set(wcode2));
elm_code_widget_code_set(wcode2),
eo_event_callback_add(&ELM_CODE_EVENT_LINE_LOAD_DONE, _elm_code_diff_widget_line_cb, NULL));
evas_object_size_hint_weight_set(widget_right, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(widget_right, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_show(widget_right);
evas_object_data_set(hbox, ELM_CODE_DIFF_WIDGET_RIGHT, widget_right);
evas_object_data_set(hbox, _ELM_CODE_DIFF_WIDGET_RIGHT, widget_right);
elm_object_part_content_set(hbox, "right", widget_right);
_elm_code_diff_widget_parse_diff(code->file, wcode1->file, wcode2->file);
return hbox;
}
EAPI void elm_code_diff_widget_font_size_set(Evas_Object *widget, int size)
EAPI void
elm_code_diff_widget_font_size_set(Evas_Object *widget, int size)
{
Elm_Code_Widget *child;
child = (Elm_Code_Widget *) evas_object_data_get(widget, ELM_CODE_DIFF_WIDGET_LEFT);
child = (Elm_Code_Widget *) evas_object_data_get(widget, _ELM_CODE_DIFF_WIDGET_LEFT);
eo_do(child, elm_code_widget_font_size_set(size));
child = (Elm_Code_Widget *) evas_object_data_get(widget, ELM_CODE_DIFF_WIDGET_RIGHT);
child = (Elm_Code_Widget *) evas_object_data_get(widget, _ELM_CODE_DIFF_WIDGET_RIGHT);
eo_do(child, elm_code_widget_font_size_set(size));
}

View File

@ -6,7 +6,7 @@
#include "elm_code_private.h"
static Elm_Code_Line *_elm_code_blank_create(int line)
static Elm_Code_Line *_elm_code_blank_create(int line, void *data)
{
Elm_Code_Line *ecl;
@ -15,14 +15,16 @@ static Elm_Code_Line *_elm_code_blank_create(int line)
ecl->number = line;
ecl->status = ELM_CODE_STATUS_TYPE_DEFAULT;
ecl->data = data;
return ecl;
}
static void _elm_code_file_line_append_data(Elm_Code_File *file, const char *content, int length, int row, Eina_Bool mapped)
static void _elm_code_file_line_append_data(Elm_Code_File *file, const char *content, int length, int row, Eina_Bool mapped, void *data)
{
Elm_Code_Line *line;
line = _elm_code_blank_create(row);
line = _elm_code_blank_create(row, data);
if (!line) return;
if (mapped)
@ -43,7 +45,10 @@ static void _elm_code_file_line_append_data(Elm_Code_File *file, const char *con
if (file->parent)
{
elm_code_parse_line(file->parent, line);
elm_code_callback_fire(file->parent, &ELM_CODE_EVENT_LINE_SET_DONE, line);
elm_code_callback_fire(file->parent, &ELM_CODE_EVENT_LINE_LOAD_DONE, line);
// this is called so we can refresh after any styling changes from LOAD_DONE
elm_code_callback_fire(file->parent, &ELM_CODE_EVENT_LINE_STYLE_SET, line);
}
}
@ -83,13 +88,13 @@ EAPI Elm_Code_File *elm_code_file_open(Elm_Code *code, const char *path)
/* Working around the issue that eina_file_map_lines does not trigger an item for empty lines */
while (lastindex < line->index - 1)
{
ecl = _elm_code_blank_create(++lastindex);
ecl = _elm_code_blank_create(++lastindex, NULL);
if (!ecl) continue;
ret->lines = eina_list_append(ret->lines, ecl);
}
_elm_code_file_line_append_data(ret, line->start, line->length, lastindex = line->index, EINA_TRUE);
_elm_code_file_line_append_data(ret, line->start, line->length, lastindex = line->index, EINA_TRUE, NULL);
}
eina_iterator_free(it);
@ -159,12 +164,12 @@ EAPI unsigned int elm_code_file_lines_get(Elm_Code_File *file)
}
EAPI void elm_code_file_line_append(Elm_Code_File *file, const char *line, int length)
EAPI void elm_code_file_line_append(Elm_Code_File *file, const char *line, int length, void *data)
{
int row;
row = elm_code_file_lines_get(file);
_elm_code_file_line_append_data(file, line, length, row+1, EINA_FALSE);
return _elm_code_file_line_append_data(file, line, length, row+1, EINA_FALSE, data);
}
EAPI Elm_Code_Line *elm_code_file_line_get(Elm_Code_File *file, unsigned int number)
@ -172,53 +177,3 @@ EAPI Elm_Code_Line *elm_code_file_line_get(Elm_Code_File *file, unsigned int num
return eina_list_nth(file->lines, number - 1);
}
EAPI const char *elm_code_file_line_content_get(Elm_Code_File *file, unsigned int number, int *length)
{
Elm_Code_Line *line;
line = elm_code_file_line_get(file, number);
if (!line)
return NULL;
*length = line->length;
if (line->modified)
return line->modified;
return line->content;
}
EAPI void elm_code_file_line_status_set(Elm_Code_File *file, unsigned int number, Elm_Code_Status_Type status)
{
Elm_Code_Line *line;
line = elm_code_file_line_get(file, number);
if (!line)
return;
line->status = status;
if (file->parent)
elm_code_callback_fire(file->parent, &ELM_CODE_EVENT_LINE_SET_DONE, line);
}
EAPI void elm_code_file_line_token_add(Elm_Code_File *file, unsigned int number, int start, int end,
Elm_Code_Token_Type type)
{
Elm_Code_Line *line;
Elm_Code_Token *tok;
line = elm_code_file_line_get(file, number);
tok = calloc(1, sizeof(Elm_Code_Token));
tok->start = start;
tok->end = end;
tok->type = type;
line->tokens = eina_list_append(line->tokens, tok);
if (file->parent)
elm_code_callback_fire(file->parent, &ELM_CODE_EVENT_LINE_SET_DONE, line);
}

View File

@ -10,27 +10,6 @@ extern "C" {
* @brief These routines are used for interacting with files using Elm Code.
*/
typedef struct _Elm_Code_Token
{
int start, end;
Elm_Code_Token_Type type;
} Elm_Code_Token;
typedef struct _Elm_Code_Line
{
const char *content;
int length;
unsigned int number;
char *modified;
Elm_Code_Status_Type status;
Eina_List *tokens;
} Elm_Code_Line;
struct _Elm_Code_File
{
void *parent;
@ -79,17 +58,10 @@ EAPI void elm_code_file_clear(Elm_Code_File *file);
EAPI unsigned int elm_code_file_lines_get(Elm_Code_File *file);
EAPI void elm_code_file_line_append(Elm_Code_File *file, const char *line, int length);
EAPI void elm_code_file_line_append(Elm_Code_File *file, const char *line, int length, void *data);
EAPI Elm_Code_Line *elm_code_file_line_get(Elm_Code_File *file, unsigned int line);
EAPI const char *elm_code_file_line_content_get(Elm_Code_File *file, unsigned int line, int *length);
EAPI void elm_code_file_line_status_set(Elm_Code_File *file, unsigned int line, Elm_Code_Status_Type status);
EAPI void elm_code_file_line_token_add(Elm_Code_File *file, unsigned int number, int start, int end,
Elm_Code_Token_Type type);
/**
* @}
*/

View File

@ -0,0 +1,44 @@
#ifdef HAVE_CONFIG
# include "config.h"
#endif
#include "Elm_Code.h"
#include "elm_code_private.h"
EAPI const char *elm_code_line_content_get(Elm_Code_Line *line, int *length)
{
if (!line)
return NULL;
*length = line->length;
if (line->modified)
return line->modified;
return line->content;
}
EAPI void elm_code_line_status_set(Elm_Code_Line *line, Elm_Code_Status_Type status)
{
if (!line)
return;
line->status = status;
}
EAPI void elm_code_line_token_add(Elm_Code_Line *line, int start, int end, Elm_Code_Token_Type type)
{
Elm_Code_Token *tok;
if (!line)
return;
tok = calloc(1, sizeof(Elm_Code_Token));
tok->start = start;
tok->end = end;
tok->type = type;
line->tokens = eina_list_append(line->tokens, tok);
}

View File

@ -0,0 +1,58 @@
#ifndef ELM_CODE_LINE_H_
# define ELM_CODE_LINE_H_
#ifdef __cplusplus
extern "C" {
#endif
/**
* @file
* @brief These routines are used for interacting with lines of content using Elm Code.
*/
typedef struct _Elm_Code_Token
{
int start, end;
Elm_Code_Token_Type type;
} Elm_Code_Token;
typedef struct _Elm_Code_Line
{
const char *content;
int length;
unsigned int number;
char *modified;
Elm_Code_Status_Type status;
Eina_List *tokens;
void *data;
} Elm_Code_Line;
/**
* @brief Line handling functions.
* @defgroup Line and content manipulation
*
* @{
*
* Functions for handling content and styling of lines within elm code.
*
*/
EAPI const char *elm_code_line_content_get(Elm_Code_Line *line, int *length);
EAPI void elm_code_line_status_set(Elm_Code_Line *line, Elm_Code_Status_Type status);
EAPI void elm_code_line_token_add(Elm_Code_Line *line, int start, int end, Elm_Code_Token_Type type);
/**
* @}
*/
#ifdef __cplusplus
}
#endif
#endif /* ELM_CODE_LINE_H_ */

View File

@ -243,7 +243,7 @@ _elm_code_widget_line_cb(void *data, Eo *obj EINA_UNUSED,
cells = evas_object_textgrid_cellrow_get(pd->grid, line->number - 1);
_elm_code_widget_fill_line(widget, cells, line);
return EINA_TRUE;
return EO_CALLBACK_CONTINUE;
}
@ -256,7 +256,7 @@ _elm_code_widget_file_cb(void *data, Eo *obj EINA_UNUSED, const Eo_Event_Descrip
widget = (Elm_Code_Widget *)data;
_elm_code_widget_fill(widget);
return EINA_TRUE;
return EO_CALLBACK_CONTINUE;
}
static void
@ -674,7 +674,7 @@ _elm_code_widget_evas_object_smart_add(Eo *obj, Elm_Code_Widget_Data *pd)
evas_object_smart_callback_add(obj, "unfocused", _elm_code_widget_unfocused_event_cb, obj);
eo_do(obj,
eo_event_callback_add(&ELM_CODE_EVENT_LINE_SET_DONE, _elm_code_widget_line_cb, obj);
eo_event_callback_add(&ELM_CODE_EVENT_LINE_STYLE_SET, _elm_code_widget_line_cb, obj);
eo_event_callback_add(&ELM_CODE_EVENT_FILE_LOAD_DONE, _elm_code_widget_file_cb, obj));
_elm_code_widget_font_size_set(obj, pd, 10);

View File

@ -17,6 +17,7 @@ elm_code_suite_CPPFLAGS = -I$(top_builddir)/elm_code/src/lib/ \
-DEFL_BETA_API_SUPPORT \
-DEFL_EO_API_SUPPORT \
-I$(top_srcdir)/elm_code/src/lib \
-DPACKAGE_DATA_DIR=\"$(datadir)/$(PACKAGE)\" \
-DPACKAGE_TESTS_DIR=\"$(top_srcdir)/elm_code/src/tests/\" \
-DPACKAGE_BUILD_DIR=\"`pwd`/$(top_builddir)/elm_code/src/tests/\" \
-DTESTS_DIR=\"$(abspath $(srcdir))/\" \

View File

@ -11,7 +11,7 @@ START_TEST (elm_code_file_memory_lines)
code = elm_code_create();
ck_assert_uint_eq(0, elm_code_file_lines_get(code->file));
elm_code_file_line_append(code->file, "a line", 6);
elm_code_file_line_append(code->file, "a line", 6, NULL);
ck_assert_uint_eq(1, elm_code_file_lines_get(code->file));
elm_code_free(code);
@ -26,10 +26,10 @@ START_TEST (elm_code_file_memory_tokens)
code = elm_code_create();
file = code->file;
elm_code_file_line_append(file, "a line", 6);
elm_code_file_line_token_add(file, 1, 2, 5, ELM_CODE_TOKEN_TYPE_COMMENT);
elm_code_file_line_append(file, "a line", 6, NULL);
line = elm_code_file_line_get(file, 1);
elm_code_line_token_add(line, 2, 5, ELM_CODE_TOKEN_TYPE_COMMENT);
ck_assert_uint_eq(1, eina_list_count(line->tokens));
elm_code_free(code);
}

View File

@ -29,7 +29,7 @@ START_TEST (elm_code_parse_hook_memory_test)
file = elm_code_file_new(code);
elm_code_parser_add(code, _parser_line_callback, _parser_file_callback);
elm_code_file_line_append(file, "some \"test content\" for parsing", 31);
elm_code_file_line_append(file, "some \"test content\" for parsing", 31, NULL);
ck_assert_int_eq(1, line_calls);
ck_assert_int_eq(0, file_calls);

View File

@ -22,12 +22,12 @@ START_TEST (elm_code_widget_token_render_simple_test)
code = elm_code_create();
file = code->file;
elm_code_file_line_append(file, "some \"test content\", 45", 23);
elm_code_file_line_append(file, "some \"test content\", 45", 23, NULL);
line = elm_code_file_line_get(file, 1);
length = line->length;
elm_code_file_line_token_add(file, 1, 6+1, 17+1, ELM_CODE_TOKEN_TYPE_COMMENT);
elm_code_file_line_token_add(file, 1, 21+1, 22+1, ELM_CODE_TOKEN_TYPE_COMMENT);
elm_code_line_token_add(line, 6+1, 17+1, ELM_CODE_TOKEN_TYPE_COMMENT);
elm_code_line_token_add(line, 21+1, 22+1, ELM_CODE_TOKEN_TYPE_COMMENT);
_elm_code_widget_fill_line_tokens(NULL, cells, length+1, line);
_assert_cell_type(cells[1], ELM_CODE_TOKEN_TYPE_DEFAULT, 1);