From e1b502003f4ea3eb14da5087c947ed7929892a78 Mon Sep 17 00:00:00 2001 From: Pierre Pronchery Date: Tue, 16 Nov 2010 16:13:39 +0000 Subject: [PATCH] Implemented the saving function (doesn't save attributes yet) --- po/fr.po | 10 +++++----- src/test/test1.xml | 12 ++++++------ src/xmleditor.c | 48 +++++++++++++++++++++++++++++++++++++++++++--- 3 files changed, 56 insertions(+), 14 deletions(-) diff --git a/po/fr.po b/po/fr.po index 0f3916d..e8b0b21 100644 --- a/po/fr.po +++ b/po/fr.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: XMLEditor 0.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-11-16 15:08+0100\n" +"POT-Creation-Date: 2010-11-16 17:11+0100\n" "PO-Revision-Date: 2010-11-14 00:20+0100\n" "Last-Translator: Pierre Pronchery \n" "Language-Team: French\n" @@ -116,8 +116,8 @@ msgstr "(Sans titre)" msgid "Error" msgstr "Erreur" -#: ../src/xmleditor.c:333 ../src/xmleditor.c:343 ../src/xmleditor.c:485 -#: ../src/xmleditor.c:490 +#: ../src/xmleditor.c:333 ../src/xmleditor.c:343 ../src/xmleditor.c:527 +#: ../src/xmleditor.c:532 msgid "Warning" msgstr "Avertissement" @@ -131,10 +131,10 @@ msgstr "" msgid "Open file..." msgstr "Ouvrir un fichier..." -#: ../src/xmleditor.c:489 +#: ../src/xmleditor.c:531 msgid "This file already exists. Overwrite?" msgstr "Ce fichier existe déjà. Écraser?" -#: ../src/xmleditor.c:508 +#: ../src/xmleditor.c:550 msgid "Save as..." msgstr "Enregistrer sous..." diff --git a/src/test/test1.xml b/src/test/test1.xml index ce0ad05..c19c292 100644 --- a/src/test/test1.xml +++ b/src/test/test1.xml @@ -1,8 +1,8 @@ - + some data - - -more data and an &entity; (yup) - + + +more data and an &entity; (yup) + - + \ No newline at end of file diff --git a/src/xmleditor.c b/src/xmleditor.c index b1ce0e7..28b0201 100644 --- a/src/xmleditor.c +++ b/src/xmleditor.c @@ -445,11 +445,14 @@ void xmleditor_open_dialog(XMLEditor * xmleditor) /* xmleditor_save */ +static void _save_do(XMLEditor * xmleditor, FILE * fp, GtkTreeIter * parent); + gboolean xmleditor_save(XMLEditor * xmleditor) { char const * filename; - char * buf; FILE * fp; + char * buf; + GtkTreeIter iter; if(xmleditor->xml == NULL) return xmleditor_save_as_dialog(xmleditor); @@ -461,12 +464,51 @@ gboolean xmleditor_save(XMLEditor * xmleditor) g_free(buf); return FALSE; } - /* FIXME implement */ + if(gtk_tree_model_iter_children(GTK_TREE_MODEL(xmleditor->store), &iter, + NULL) == TRUE) + _save_do(xmleditor, fp, &iter); fclose(fp); - return FALSE; return TRUE; } +static void _save_do(XMLEditor * xmleditor, FILE * fp, GtkTreeIter * parent) +{ + GtkTreeModel * model = GTK_TREE_MODEL(xmleditor->store); + GtkTreeIter child; + gchar * name; + gboolean valid; + gchar * tag; + gchar * data; + gchar * entity; + + gtk_tree_model_get(model, parent, XEC_TAGNAME, &name, -1); + fprintf(fp, "<%s", name); + /* attributes */ + gtk_tree_model_iter_children(model, &child, parent); + /* FIXME implement */ + fprintf(fp, ">"); + /* content */ + gtk_tree_model_iter_children(model, &child, parent); + for(valid = gtk_tree_model_iter_children(model, &child, parent); + valid == TRUE; + valid = gtk_tree_model_iter_next(model, &child)) + { + gtk_tree_model_get(model, &child, XEC_TAGNAME, &tag, + XEC_DATA, &data, XEC_ENTITY, &entity, -1); + if(tag != NULL) + _save_do(xmleditor, fp, &child); + else if(data != NULL) + fprintf(fp, "%s", data); + else if(entity != NULL) + fprintf(fp, "&%s;", entity); + g_free(tag); + g_free(data); + g_free(entity); + } + fprintf(fp, "", name); + g_free(name); +} + /* xmleditor_save_as */ gboolean xmleditor_save_as(XMLEditor * xmleditor, char const * filename)