/* importxml.h * Header file for importing "native" Denemo XML files * * for Denemo, a gtk+ frontend to GNU Lilypond * (c) 2001-2005 Eric Galluzzo */ #ifndef IMPORTXML_H #define IMPORTXML_H #include #include "xmldefs.h" #include /* libxml includes: for libxml2 this should be */ #include /* * This is the "interface" that all import handlers must "implement" if they * wish to import data into Denemo. If any of the callbacks in the structure * are NULL, then they are not called. However, all other fields must be * non-NULL. */ typedef struct _DenemoImportXMLNSHandler { /* * The XML namespace URI handled by this handler (e.g. * "http://www.denemo.sourceforge.net/Denemo/Lilypond") */ gchar * xmlnsURI; /* * Create and return user data necessary for importing the given score. If * no user data is required, set this startScore function to NULL. */ gpointer (* startScore) (xmlDocPtr doc); /* * Delete the given user data. If no user data is required, set this * endScore function to NULL. */ void (* endScore) (xmlDocPtr doc, gpointer userData); /* * Import the given score-level XML element into the given score. */ void (* importScoreInfo) (DenemoScore* si, xmlNodePtr elem); /* * Import the given staff-level XML element into the "primary" staff located * in the given score (si->currentprimarystaff). */ void (* importStaffInfo) (DenemoScore * si, xmlNodePtr elem); /* * Import the given voice-level XML element into the voice located in the * given score (si->currentstaff). Note that elem may be a child of * or . */ void (* importVoiceInfo) (DenemoScore * si, xmlNodePtr elem); /* * Import the given measure-level XML element into the measure located in * the given score (si->currentmeasure). */ void (* importMeasure) (DenemoScore * si, xmlNodePtr elem); /* * Import the given object-level XML element into the DenemoObject located * in the given score (si->currentobj). Note that this function is only * called for built-in object types, not custom types. */ void (* importObjectInfo) (DenemoScore * si, xmlNodePtr elem); /* * Import the given note-level XML element into the note located in the * given score (N.B.: not yet implemented!). */ void (* importNoteInfo) (DenemoScore * si, xmlNodePtr elem); /* * Create a new DenemoObject from the given object-level XML element and * return it. Return NULL if no object should be created. */ DenemoObject * (* importCustomObject) (DenemoScore * si, xmlNodePtr elem); } DenemoImportXMLNSHandler; /* * Import the given file in Denemo's "native" XML file format into the given * score. Return TRUE if the file was imported successfully, FALSE otherwise. */ gboolean importXML (gchar * filename, DenemoScore *si); void registerImportXMLNSHandler (DenemoImportXMLNSHandler * handler); void unregisterImportXMLNSHandler (DenemoImportXMLNSHandler * handler); #endif