From 683e72ae5fa90fd14101bd6ec8921468e96a50f5 Mon Sep 17 00:00:00 2001 From: Thomas White Date: Sun, 25 Dec 2011 23:56:20 +0000 Subject: Load and save the slide notes --- src/loadsave.c | 8 ++++- src/notes.c | 94 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/notes.h | 3 ++ 3 files changed, 104 insertions(+), 1 deletion(-) diff --git a/src/loadsave.c b/src/loadsave.c index b85f4d0..a4c2891 100644 --- a/src/loadsave.c +++ b/src/loadsave.c @@ -36,6 +36,7 @@ #include "stylesheet.h" #include "slide_render.h" #include "mainwindow.h" +#include "notes.h" static int alloc_children(struct ds_node *node) @@ -366,7 +367,6 @@ int get_field_s(struct ds_node *root, const char *key, char **val) node = find_node(root, key, 0); if ( node == NULL ) { - fprintf(stderr, "Couldn't find field '%s'\n", key); *val = NULL; return 1; } @@ -469,6 +469,8 @@ static struct slide *tree_to_slide(struct presentation *p, struct ds_node *root) s = new_slide(); s->parent = p; + load_notes(root, s); + /* Loop over objects */ for ( i=0; in_children; i++ ) { @@ -746,6 +748,7 @@ void serialize_end(struct serializer *ser) { free(ser->stack[--ser->stack_depth]); rebuild_prefix(ser); + ser->empty_set = 1; } @@ -801,6 +804,9 @@ int save_presentation(struct presentation *p, const char *filename) serialize_end(&ser); } + + write_notes(s, &ser); + serialize_end(&ser); } diff --git a/src/notes.c b/src/notes.c index 026612b..58ca008 100644 --- a/src/notes.c +++ b/src/notes.c @@ -90,6 +90,100 @@ static gint close_notes_sig(GtkWidget *w, struct presentation *p) } +static char *escape_text(const char *a) +{ + char *b; + size_t l1, l, i; + + l1 = strlen(a); + + b = malloc(2*l1 + 1); + l = 0; + + for ( i=0; inotes); + serialize_s(ser, "notes", es); + free(es); +} + + +void load_notes(struct ds_node *node, struct slide *s) +{ + char *v; + + if ( get_field_s(node, "notes", &v) ) return; + + s->notes = unescape_text(v); + free(v); +} + + void open_notes(struct presentation *p) { struct notes *n; diff --git a/src/notes.h b/src/notes.h index b739acb..f6fba5c 100644 --- a/src/notes.h +++ b/src/notes.h @@ -34,4 +34,7 @@ extern void open_notes(struct presentation *p); extern void notify_notes_slide_changed(struct presentation *p, struct slide *np); +extern void write_notes(struct slide *s, struct serializer *ser); +extern void load_notes(struct ds_node *node, struct slide *s); + #endif /* NOTES_H */ -- cgit v1.2.3