aboutsummaryrefslogtreecommitdiff
path: root/libstorycode/narrative.c
diff options
context:
space:
mode:
authorThomas White <taw@bitwiz.me.uk>2019-03-10 22:23:21 +0100
committerThomas White <taw@bitwiz.me.uk>2019-03-10 22:23:21 +0100
commit44f874ed89b364bc0b60b35572f64fae44154733 (patch)
tree2fbe1ed43ddc2afa86a4ccd86601a9bc177cad8c /libstorycode/narrative.c
parentbaf6594f68719664953ff7b47ee539a02ebba4e9 (diff)
Implement enter press / paragraph split
Diffstat (limited to 'libstorycode/narrative.c')
-rw-r--r--libstorycode/narrative.c43
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;
+}