From 3cbb8d0124e839136795ae8dcf475a5fbe86c093 Mon Sep 17 00:00:00 2001 From: Thomas White Date: Thu, 26 Nov 2015 09:55:46 +0100 Subject: WIP --- src/sc_editor.c | 60 +++++++++++++++++++++++++++++++++++---------------------- 1 file changed, 37 insertions(+), 23 deletions(-) (limited to 'src/sc_editor.c') diff --git a/src/sc_editor.c b/src/sc_editor.c index bdfc842..ed554c4 100644 --- a/src/sc_editor.c +++ b/src/sc_editor.c @@ -779,29 +779,6 @@ void insert_scblock(SCBlock *scblock, SCEditor *e) static void update_local(SCEditor *e, struct frame *fr, int line, int bn) { struct wrap_box *box = &fr->lines[line].boxes[bn]; - const char *text; - size_t len_bytes; - int len_chars; - PangoLogAttr *log_attrs; - int offs; - - text = sc_block_contents(box->scblock); - len_bytes = strlen(text); - len_chars = g_utf8_strlen(text, -1); - - log_attrs = malloc((len_chars+1)*sizeof(PangoLogAttr)); - if ( log_attrs == NULL ) return; - pango_get_log_attrs(text, len_bytes, -1, e->lang, - log_attrs, len_chars+1); - - offs = box->offs_char + e->cursor_pos; - - if ( log_attrs[offs].is_line_break ) { - printf("Just typed a break!\n"); - } - - free(log_attrs); - /* Shape the box again */ shape_box(box->cf->cf); box->glyphs = box->cf->cf->glyphs; @@ -840,6 +817,11 @@ static void insert_text(char *t, SCEditor *e) int sln, sbx, sps; struct wrap_box *sbox; struct frame *fr = e->cursor_frame; + const char *text; + size_t len_bytes; + int len_chars; + PangoLogAttr *log_attrs; + int offs; if ( fr == NULL ) return; @@ -855,6 +837,38 @@ static void insert_text(char *t, SCEditor *e) printf("sps=%i, offs_char=%i\n", sps, sbox->offs_char); sc_insert_text(sbox->scblock, sps+sbox->offs_char, t); + text = sc_block_contents(sbox->scblock); + len_bytes = strlen(text); + len_chars = g_utf8_strlen(text, -1); + + log_attrs = malloc((len_chars+1)*sizeof(PangoLogAttr)); + if ( log_attrs == NULL ) return; + pango_get_log_attrs(text, len_bytes, -1, e->lang, + log_attrs, len_chars+1); + + offs = sbox->offs_char + e->cursor_pos; + + if ( log_attrs[offs+1].is_line_break ) { + + struct wrap_box *nbox; + + /* Add a new box containing the text after the break */ + insert_box(&e->cursor_frame->lines[sln], sbx); + nbox = &e->cursor_frame->lines[sln].boxes[sbx]; + nbox->type = WRAP_BOX_PANGO; + nbox->space = WRAP_SPACE_INTERWORD; + nbox->len_chars = e->cursor_pos; + + /* Shorten the text in the first box */ + sbox->len_chars -= e->cursor_pos; + + shape_box(sbox); + //shape_box(nbox); + + } + + free(log_attrs); + /* Update the length of the box in the unwrapped and un-paragraph-split * string of wrap boxes */ sbox->cf->cf->len_chars += 1; -- cgit v1.2.3