aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas White <taw@physics.org>2020-01-24 14:58:01 +0100
committerThomas White <taw@physics.org>2020-01-24 14:58:01 +0100
commit6fd2388d71eb64ade70106a14617a46ee3366bfc (patch)
tree1076221ff4dc8d9a5c39fd03c9b80139f8eb0006
parentec99a5e64e7e60be52432378af823bce16cc6570 (diff)
Get rid of narrative_add_*, use narrative_insert_* instead
-rw-r--r--libstorycode/narrative.c62
-rw-r--r--libstorycode/narrative.h16
-rw-r--r--libstorycode/storycode.y14
3 files changed, 38 insertions, 54 deletions
diff --git a/libstorycode/narrative.c b/libstorycode/narrative.c
index 6bedd30..ffd7dab 100644
--- a/libstorycode/narrative.c
+++ b/libstorycode/narrative.c
@@ -114,7 +114,7 @@ void narrative_add_empty_item(Narrative *n)
return;
}
- narrative_add_text(n, runs, 1);
+ narrative_insert_text(n, n->n_items, runs, 1);
}
@@ -248,7 +248,6 @@ static struct narrative_item *add_item(Narrative *n)
if ( new_items == NULL ) return NULL;
n->items = new_items;
item = &n->items[n->n_items++];
- init_item(item);
return item;
}
@@ -256,21 +255,23 @@ static struct narrative_item *add_item(Narrative *n)
/* New item will have index 'pos' */
static struct narrative_item *insert_item(Narrative *n, int pos)
{
+ int at_end = (pos == n->n_items);
add_item(n);
- memmove(&n->items[pos+1], &n->items[pos],
- (n->n_items-pos-1)*sizeof(struct narrative_item));
+ if ( !at_end ) {
+ memmove(&n->items[pos+1], &n->items[pos],
+ (n->n_items-pos-1)*sizeof(struct narrative_item));
+ }
init_item(&n->items[pos]);
return &n->items[pos];
}
/* The new text item takes ownership of the array of runs */
-extern void add_text_item(Narrative *n, struct text_run *runs, int n_runs,
- enum narrative_item_type type)
+static void insert_text_item(Narrative *n, int pos, struct text_run *runs, int n_runs,
+ enum narrative_item_type type)
{
- struct narrative_item *item;
+ struct narrative_item *item = insert_item(n, pos);
- item = add_item(n);
if ( item == NULL ) return;
item->type = type;
@@ -284,69 +285,54 @@ extern void add_text_item(Narrative *n, struct text_run *runs, int n_runs,
}
-void narrative_add_text(Narrative *n, struct text_run *runs, int n_runs)
+void narrative_insert_text(Narrative *n, int pos, struct text_run *runs, int n_runs)
{
- add_text_item(n, runs, n_runs, NARRATIVE_ITEM_TEXT);
+ insert_text_item(n, pos, runs, n_runs, NARRATIVE_ITEM_TEXT);
}
-void narrative_add_prestitle(Narrative *n, struct text_run *runs, int n_runs)
+void narrative_insert_prestitle(Narrative *n, int pos, struct text_run *runs, int n_runs)
{
- add_text_item(n, runs, n_runs, NARRATIVE_ITEM_PRESTITLE);
+ insert_text_item(n, pos, runs, n_runs, NARRATIVE_ITEM_PRESTITLE);
}
-void narrative_add_bp(Narrative *n, struct text_run *runs, int n_runs)
+void narrative_insert_bp(Narrative *n, int pos, struct text_run *runs, int n_runs)
{
- add_text_item(n, runs, n_runs, NARRATIVE_ITEM_BP);
+ insert_text_item(n, pos, runs, n_runs, NARRATIVE_ITEM_BP);
}
-void narrative_add_segstart(Narrative *n, struct text_run *runs, int n_runs)
+void narrative_insert_segstart(Narrative *n, int pos, struct text_run *runs, int n_runs)
{
- add_text_item(n, runs, n_runs, NARRATIVE_ITEM_SEGSTART);
+ insert_text_item(n, pos, runs, n_runs, NARRATIVE_ITEM_SEGSTART);
}
-void narrative_add_segend(Narrative *n)
+void narrative_insert_segend(Narrative *n, int pos)
{
- struct narrative_item * item = add_item(n);
+ struct narrative_item *item = insert_item(n, pos);
if ( item == NULL ) return;
item->type = NARRATIVE_ITEM_SEGEND;
}
-void narrative_add_slide(Narrative *n, Slide *slide)
-{
- struct narrative_item *item;
-
- item = add_item(n);
- if ( item == NULL ) return;
-
- item->type = NARRATIVE_ITEM_SLIDE;
- item->slide = slide;
- item->slide_thumbnail = NULL;
- update_timing(item);
-}
-
-
-void narrative_add_eop(Narrative *n)
+void narrative_insert_eop(Narrative *n, int pos)
{
- struct narrative_item *item;
-
- item = add_item(n);
+ struct narrative_item *item = insert_item(n, pos);
if ( item == NULL ) return;
-
item->type = NARRATIVE_ITEM_EOP;
}
-void narrative_insert_slide(Narrative *n, Slide *slide, int pos)
+void narrative_insert_slide(Narrative *n, int pos, Slide *slide)
{
struct narrative_item *item = insert_item(n, pos);
+ if ( item == NULL ) return;
item->type = NARRATIVE_ITEM_SLIDE;
item->slide = slide;
item->slide_thumbnail = NULL;
+ update_timing(item);
}
diff --git a/libstorycode/narrative.h b/libstorycode/narrative.h
index 6881829..fba69d2 100644
--- a/libstorycode/narrative.h
+++ b/libstorycode/narrative.h
@@ -53,16 +53,14 @@ extern int narrative_get_unsaved(Narrative *n);
extern int narrative_item_is_text(Narrative *n, int item);
-extern void narrative_add_text(Narrative *n, struct text_run *runs, int n_runs);
+extern void narrative_insert_text(Narrative *n, int pos, struct text_run *runs, int n_runs);
+extern void narrative_insert_bp(Narrative *n, int pos, struct text_run *runs, int n_runs);
+extern void narrative_insert_segstart(Narrative *n, int pos, struct text_run *runs, int n_runs);
+extern void narrative_insert_prestitle(Narrative *n, int pos, struct text_run *runs, int n_runs);
+extern void narrative_insert_segend(Narrative *n, int pos);
+extern void narrative_insert_slide(Narrative *n, int pos, Slide *slide);
+extern void narrative_insert_eop(Narrative *n, int pos);
-extern void narrative_add_bp(Narrative *n, struct text_run *runs, int n_runs);
-extern void narrative_add_segstart(Narrative *n, struct text_run *runs, int n_runs);
-extern void narrative_add_prestitle(Narrative *n, struct text_run *runs, int n_runs);
-extern void narrative_add_segend(Narrative *n);
-
-extern void narrative_add_slide(Narrative *n, Slide *slide);
-extern void narrative_add_eop(Narrative *n);
-extern void narrative_insert_slide(Narrative *n, Slide *slide, int pos);
extern void narrative_delete_block(Narrative *n, int i1, size_t o1,
int i2, size_t o2);
extern void narrative_split_item(Narrative *n, int i1, size_t o1);
diff --git a/libstorycode/storycode.y b/libstorycode/storycode.y
index 6bb0e85..999abbe 100644
--- a/libstorycode/storycode.y
+++ b/libstorycode/storycode.y
@@ -324,13 +324,13 @@ narrative:
;
narrative_el:
- PRESTITLE TEXT_START text_line { narrative_add_prestitle(n, $3.runs, $3.n_runs); }
-| BP TEXT_START text_line { narrative_add_bp(n, $3.runs, $3.n_runs); }
-| SEG_START TEXT_START text_line { narrative_add_segstart(n, $3.runs, $3.n_runs); }
-| SEG_END { narrative_add_segend(n); }
-| TEXT_START text_line { narrative_add_text(n, $2.runs, $2.n_runs); }
-| slide { narrative_add_slide(n, $1); }
-| EOP { narrative_add_eop(n); }
+ PRESTITLE TEXT_START text_line { narrative_insert_prestitle(n, n->n_items, $3.runs, $3.n_runs); }
+| BP TEXT_START text_line { narrative_insert_bp(n, n->n_items, $3.runs, $3.n_runs); }
+| SEG_START TEXT_START text_line { narrative_insert_segstart(n, n->n_items, $3.runs, $3.n_runs); }
+| SEG_END { narrative_insert_segend(n, n->n_items); }
+| TEXT_START text_line { narrative_insert_text(n, n->n_items, $2.runs, $2.n_runs); }
+| slide { narrative_insert_slide(n, n->n_items, $1); }
+| EOP { narrative_insert_eop(n, n->n_items); }
;
text_line: { $<para>$.n_runs = 0;