diff options
Diffstat (limited to 'backend')
| -rw-r--r-- | backend/epub/Makefile.am | 7 | ||||
| -rw-r--r-- | backend/epub/epub-document.c | 125 | ||||
| -rw-r--r-- | backend/epub/epub-document.h | 25 | 
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 | 
