summaryrefslogtreecommitdiff
path: root/backend
diff options
context:
space:
mode:
Diffstat (limited to 'backend')
-rw-r--r--backend/epub/Makefile.am7
-rw-r--r--backend/epub/epub-document.c125
-rw-r--r--backend/epub/epub-document.h25
3 files changed, 154 insertions, 3 deletions
diff --git a/backend/epub/Makefile.am b/backend/epub/Makefile.am
index 6ecbdb2a..4371cde8 100644
--- a/backend/epub/Makefile.am
+++ b/backend/epub/Makefile.am
@@ -1,4 +1,4 @@
-AM_CPPFLAGS = \
+AM_CPPFLAGS = \
-I$(top_srcdir) \
-I$(top_srcdir)/libdocument \
-DMATELOCALEDIR=\"$(datadir)/locale\" \
@@ -9,8 +9,9 @@ AM_CPPFLAGS = \
backend_LTLIBRARIES = libepubdocument.la
-libepubdocument_la_SOURCES =
-
+libepubdocument_la_SOURCES = \
+ epub-document.c \
+ epub-document.h
libepubdocument_la_LDFLAGS = $(BACKEND_LIBTOOL_FLAGS)
libepubdocument_la_LIBADD = \
diff --git a/backend/epub/epub-document.c b/backend/epub/epub-document.c
new file mode 100644
index 00000000..c6bbf684
--- /dev/null
+++ b/backend/epub/epub-document.c
@@ -0,0 +1,125 @@
+#include "epub-document.h"
+
+static xmlDocPtr xmldocument ;
+static xmlNodePtr xmlroot ;
+static xmlChar* xmlkey ;
+static xmlChar* retval ;
+
+/*Open a XML document for reading */
+gboolean
+openXmlDocument ( const gchar* filename )
+{
+ xmldocument = xmlParseFile(filename);
+
+ if ( xmldocument == NULL )
+ {
+ return FALSE ;
+ }
+ else
+ {
+ return TRUE ;
+ }
+}
+
+/**
+ *Check if the root value is same as rootname .
+ *if supplied rootvalue = NULL ,just set root to rootnode .
+**/
+gboolean
+checkRoot(xmlChar* rootname)
+{
+ xmlroot = xmlDocGetRootElement(xmldocument);
+
+ if (xmlroot == NULL) {
+
+ xmlFreeDoc(xmldocument);
+ return FALSE;
+ }
+
+ if ( rootname == NULL )
+ {
+ return TRUE ;
+ }
+
+ if ( !xmlStrcmp(xmlroot->name,rootname))
+ {
+ return TRUE ;
+ }
+ else
+ {
+ return FALSE;
+ }
+}
+
+xmlChar*
+parseXMLchildren( xmlChar* parserfor,
+ XMLparsereturntype rettype,
+ xmlChar* attributename )
+{
+ xmlNodePtr topchild,children ;
+
+ retval = NULL ;
+ topchild = xmlroot->xmlChildrenNode ;
+
+ while ( topchild != NULL )
+ {
+ if ( !xmlStrcmp(topchild->name,parserfor) )
+ {
+ if ( rettype == xmlattribute )
+ {
+ retval = xmlGetProp(children,attributename);
+ return retval;
+ }
+ else
+ {
+ retval = xmlNodeListGetString(xmldocument,topchild->xmlChildrenNode, 1);
+ return retval ;
+ }
+ }
+ parseChildren( topchild , parserfor,rettype,attributename) ;
+
+ topchild = topchild->next ;
+ }
+
+ return retval ;
+}
+
+void parseChildren(xmlNodePtr parent,
+ xmlChar* parserfor,
+ XMLparsereturntype rettype,
+ xmlChar* attributename )
+{
+ xmlNodePtr child = parent->xmlChildrenNode ;
+
+ while ( child != NULL )
+ {
+ if ( !xmlStrcmp(child->name,parserfor))
+ {
+ if ( rettype == xmlattribute )
+ {
+ retval = xmlGetProp(child,attributename);
+ }
+ else
+ {
+ retval = xmlNodeListGetString(xmldocument,child->xmlChildrenNode, 1);
+ }
+ return ;
+ }
+
+ /*return already if we have retval set*/
+ if ( retval != NULL )
+ {
+ return ;
+ }
+
+ parseChildren(child,parserfor,rettype,attributename) ;
+ child = child->next ;
+ }
+}
+
+void xmlFreeAll()
+{
+ xmlFreeDoc(xmldocument);
+ xmlFree(retval);
+ xmlFree(xmlkey);
+} \ No newline at end of file
diff --git a/backend/epub/epub-document.h b/backend/epub/epub-document.h
new file mode 100644
index 00000000..157ced04
--- /dev/null
+++ b/backend/epub/epub-document.h
@@ -0,0 +1,25 @@
+#include <gtk/gtk.h>
+#include <glib.h>
+#include <libxml/parser.h>
+#include <libxml/xmlmemory.h>
+
+typedef enum
+{
+ xmlattribute,
+ xmlkeyword
+}XMLparsereturntype;
+
+gboolean openXmlDocument ( const gchar* filename );
+
+gboolean checkRoot (xmlChar* rootname);
+
+void parseChildren (xmlNodePtr parent,
+ xmlChar* parserfor,
+ XMLparsereturntype rettype,
+ xmlChar* attributename );
+
+xmlChar* parseXMLchildren (xmlChar* parserfor,
+ XMLparsereturntype rettype,
+ xmlChar* attributename );
+
+void xmlFreeAll(); \ No newline at end of file