diff options
author | Thomas White <taw@bitwiz.me.uk> | 2019-03-10 22:23:21 +0100 |
---|---|---|
committer | Thomas White <taw@bitwiz.me.uk> | 2019-03-10 22:23:21 +0100 |
commit | 44f874ed89b364bc0b60b35572f64fae44154733 (patch) | |
tree | 2fbe1ed43ddc2afa86a4ccd86601a9bc177cad8c /libstorycode/narrative.c | |
parent | baf6594f68719664953ff7b47ee539a02ebba4e9 (diff) |
Implement enter press / paragraph split
Diffstat (limited to 'libstorycode/narrative.c')
-rw-r--r-- | libstorycode/narrative.c | 43 |
1 files changed, 39 insertions, 4 deletions
diff --git a/libstorycode/narrative.c b/libstorycode/narrative.c index caf9bc9..81b55f0 100644 --- a/libstorycode/narrative.c +++ b/libstorycode/narrative.c @@ -70,6 +70,15 @@ void narrative_free(Narrative *n) } +static void init_item(struct narrative_item *item) +{ + item->layout = NULL; + item->text = NULL; + item->slide = NULL; + item->slide_thumbnail = NULL; +} + + static struct narrative_item *add_item(Narrative *n) { struct narrative_item *new_items; @@ -78,14 +87,21 @@ static struct narrative_item *add_item(Narrative *n) if ( new_items == NULL ) return NULL; n->items = new_items; item = &n->items[n->n_items++]; - item->layout = NULL; - item->text = NULL; - item->slide = NULL; - item->slide_thumbnail = NULL; + init_item(item); return item; } +static struct narrative_item *insert_item(Narrative *n, int pos) +{ + add_item(n); + memmove(&n->items[pos+1], &n->items[pos], + (n->n_items-pos-1)*sizeof(struct narrative_item)); + init_item(&n->items[pos+1]); + return &n->items[pos+1]; +} + + void narrative_add_prestitle(Narrative *n, char *text) { struct narrative_item *item; @@ -213,3 +229,22 @@ void narrative_delete_block(Narrative *n, int i1, size_t o1, int i2, size_t o2) delete_item(n, i2); } } + + +void narrative_split_item(Narrative *n, int i1, size_t o1) +{ + struct narrative_item *item1; + struct narrative_item *item2; + + item1 = &n->items[i1]; + item2 = insert_item(n, i1); + + if ( item1->type != NARRATIVE_ITEM_SLIDE ) { + item2->text = strdup(&item1->text[o1]); + item1->text[o1] = '\0'; + } else { + item2->text = strdup(""); + } + + item2->type = NARRATIVE_ITEM_TEXT; +} |