From 021c5ac6eceaeaf4e28d8278722a195a06afca65 Mon Sep 17 00:00:00 2001 From: Robin Haberkorn Date: Fri, 11 May 2012 09:33:59 +0200 Subject: first draft of the libexperiment-reader helper class it hides libXML2 details when dealing with session.dtd XML files (Folker-transcript + session data) --- lib/experiment-reader/Makefile.am | 19 +++++ lib/experiment-reader/experiment-reader.c | 113 ++++++++++++++++++++++++++ lib/experiment-reader/experiment-reader.h | 40 ++++++++- lib/experiment-reader/session.dtd | 130 ++++++++++++++++++++++++++++++ lib/gtk-experiment-widgets/Makefile.am | 2 +- 5 files changed, 301 insertions(+), 3 deletions(-) create mode 100644 lib/experiment-reader/experiment-reader.c create mode 100755 lib/experiment-reader/session.dtd (limited to 'lib') diff --git a/lib/experiment-reader/Makefile.am b/lib/experiment-reader/Makefile.am index d49eb8e..84be179 100644 --- a/lib/experiment-reader/Makefile.am +++ b/lib/experiment-reader/Makefile.am @@ -1,2 +1,21 @@ +AM_CFLAGS = -Wall + +reader_datadir = @datarootdir@/libexperiment-reader + +lib_LTLIBRARIES = libexperiment-reader.la +libexperiment_reader_la_SOURCES = experiment-reader.c experiment-reader.h + +libexperiment_reader_la_CFLAGS = $(AM_CFLAGS) +libexperiment_reader_la_CPPFLAGS = +libexperiment_reader_la_LDFLAGS = -bindir @bindir@ +libexperiment_reader_la_LIBADD = + +libexperiment_reader_la_CFLAGS += @LIBGLIB_CFLAGS@ +libexperiment_reader_la_LIBADD += @LIBGLIB_LIBS@ + +libexperiment_reader_la_CFLAGS += @LIBXML2_CFLAGS@ +libexperiment_reader_la_LIBADD += @LIBXML2_LIBS@ include_HEADERS = experiment-reader.h + +dist_reader_data_DATA = session.dtd diff --git a/lib/experiment-reader/experiment-reader.c b/lib/experiment-reader/experiment-reader.c new file mode 100644 index 0000000..fc22378 --- /dev/null +++ b/lib/experiment-reader/experiment-reader.c @@ -0,0 +1,113 @@ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include + +#include +#include + +#include +#include +#include +#include + +#include "experiment-reader.h" + +static void experiment_reader_class_init(ExperimentReaderClass *klass); +static void experiment_reader_init(ExperimentReader *klass); +static void experiment_reader_finalize(GObject *gobject); + +#define EXPERIMENT_READER_GET_PRIVATE(obj) \ + (G_TYPE_INSTANCE_GET_PRIVATE((obj), EXPERIMENT_TYPE_READER, ExperimentReaderPrivate)) + +struct _ExperimentReaderPrivate { + xmlDoc *doc; +}; + +GType +experiment_reader_get_type(void) +{ + static GType type = 0; + + if (!type) { + const GTypeInfo info = { + sizeof(ExperimentReaderClass), + NULL, /* base_init */ + NULL, /* base_finalize */ + (GClassInitFunc)experiment_reader_class_init, + NULL, /* class_finalize */ + NULL, /* class_data */ + sizeof(ExperimentReader), + 0, /* n_preallocs */ + (GInstanceInitFunc)experiment_reader_init, + }; + + type = g_type_register_static(G_TYPE_OBJECT, + "ExperimentReader", &info, 0); + } + + return type; +} + +static void +experiment_reader_class_init(ExperimentReaderClass *klass) +{ + GObjectClass *gobject_class = G_OBJECT_CLASS(klass); + + /* gobject_class->dispose = experiment_reader_dispose; */ + gobject_class->finalize = experiment_reader_finalize; + + g_type_class_add_private(klass, sizeof(ExperimentReaderPrivate)); +} + +static void +experiment_reader_init(ExperimentReader *klass) +{ + klass->priv = EXPERIMENT_READER_GET_PRIVATE(klass); + + klass->priv->doc = NULL; +} + +static void +experiment_reader_finalize(GObject *gobject) +{ + ExperimentReader *reader = EXPERIMENT_READER(gobject); + + if (reader->priv->doc != NULL) + xmlFreeDoc(reader->priv->doc); + + /* Chain up to the parent class */ + //G_OBJECT_CLASS(experiment_reader_parent_class)->finalize(gobject); +} + +/* + * API + */ + +ExperimentReader * +experiment_reader_new(const gchar *filename) +{ + ExperimentReader *reader; + + reader = EXPERIMENT_READER(g_object_new(EXPERIMENT_TYPE_READER, NULL)); + reader->priv->doc = xmlParseFile(filename); + if (reader->priv->doc == NULL) { + g_object_unref(G_OBJECT(reader)); + return NULL; + } + + /* TODO: validate against session.dtd */ + + return reader; +} + +#if 0 +void +experiment_reader_greeting_foreach_topic(ExperimentReader *reader, + ExperimentReaderTopicCb cb, + gpointer data) +{ + +} +#endif \ No newline at end of file diff --git a/lib/experiment-reader/experiment-reader.h b/lib/experiment-reader/experiment-reader.h index 27fd885..2558799 100644 --- a/lib/experiment-reader/experiment-reader.h +++ b/lib/experiment-reader/experiment-reader.h @@ -1,9 +1,45 @@ #ifndef __EXPERIMENT_READER_H #define __EXPERIMENT_READER_H +#include #include -/* TODO */ -typedef int ExperimentReader; +G_BEGIN_DECLS + +#define EXPERIMENT_TYPE_READER \ + (experiment_reader_get_type()) +#define EXPERIMENT_READER(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST((obj), EXPERIMENT_TYPE_READER, ExperimentReader)) +#define EXPERIMENT_READER_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST((klass), EXPERIMENT_TYPE_READER, ExperimentReaderClass)) +#define EXPERIMENT_IS_READER(obj) \ + (G_TYPE_CHECK_INSTANCE_TYPE((obj), EXPERIMENT_TYPE_READER)) +#define EXPERIMENT_IS_READER_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_TYPE((klass), EXPERIMENT_TYPE_READER)) +#define EXPERIMENT_READER_GET_CLASS(obj) \ + (G_TYPE_INSTANCE_GET_CLASS((obj), EXPERIMENT_TYPE_READER, ExperimentReaderClass)) + +typedef struct _ExperimentReaderPrivate ExperimentReaderPrivate; + +typedef struct _ExperimentReader { + GObject parent_instance; + + ExperimentReaderPrivate *priv; /** private */ +} ExperimentReader; + +typedef struct _ExperimentReaderClass { + GObjectClass parent_class; +} ExperimentReaderClass; + +GType experiment_reader_get_type(void); + +/* + * API + */ +ExperimentReader *experiment_reader_new(const gchar *filename); + + + +G_END_DECLS #endif diff --git a/lib/experiment-reader/session.dtd b/lib/experiment-reader/session.dtd new file mode 100755 index 0000000..386709a --- /dev/null +++ b/lib/experiment-reader/session.dtd @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/lib/gtk-experiment-widgets/Makefile.am b/lib/gtk-experiment-widgets/Makefile.am index 4e2f4ba..1ff6564 100644 --- a/lib/gtk-experiment-widgets/Makefile.am +++ b/lib/gtk-experiment-widgets/Makefile.am @@ -14,7 +14,7 @@ libgtk_experiment_widgets_la_CFLAGS += @LIBGTK_CFLAGS@ libgtk_experiment_widgets_la_LIBADD += @LIBGTK_LIBS@ libgtk_experiment_widgets_la_CPPFLAGS += -I@top_srcdir@/lib/experiment-reader -#libgtk_experiment_widgets_la_LIBADD += @top_srcdir@/lib/experiment-reader/libexperiment-reader.la +libgtk_experiment_widgets_la_LIBADD += @top_srcdir@/lib/experiment-reader/libexperiment-reader.la include_HEADERS = gtk-experiment-navigator.h -- cgit v1.2.3