/* exportxml.h * Header file for exporting "native" Denemo XML files * * for Denemo, a gtk+ frontend to GNU Lilypond * (c) 2001 Eric Galluzzo */ #ifndef EXPORTXML_H #define EXPORTXML_H #include #include "xmldefs.h" #include /* libxml includes: for libxml2 this should be */ #include /* * This is the "interface" that all export handlers must "implement" if they * wish to export data from 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 _DenemoExportXMLNSHandler { /* * The prefix of the XML namespace (e.g. "lily") */ gchar * xmlnsPrefix; /* * The actual XML namespace URI (e.g. * "http://www.denemo.sourceforge.net/Denemo/Lilypond") */ gchar * xmlnsURI; /* * The DenemoObject types for which to call this structure's exportObjectInfo * and createXMLObject callbacks */ gint numHandlerObjectTypes; gint * handlerObjectTypes; /* * 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) (DenemoScore* si); /* * Delete the given user data. If no user data is required, set this * endScore function to NULL. */ void (* endScore) (DenemoScore * si, gpointer userData); /* * Export any information related to this score as children of * scoreInfoElem. All XML elements should be in the given namespace. */ void (* exportScoreInfo) (DenemoScore * si, xmlNsPtr ns, xmlNodePtr scoreInfoElem); /* * Export any information related to this staff as children of * staffInfoElem. All XML elements should be in the given namespace. */ void (* exportStaffInfo) (DenemoScore * si, xmlNsPtr ns, xmlNodePtr staffInfoElem); /* * Export any metadata about this voice as children of voiceInfoElem. All * XML elements should be in the given namespace. */ void (* exportVoiceInfo) (DenemoScore * si, xmlNsPtr ns, xmlNodePtr voiceInfoElem); /* * Export any non-built-in initial parameters for this voice as children of * voiceInitParamsElem. All XML elements should be in the given namespace. */ void (* exportVoiceInitParams) (DenemoScore * si, xmlNsPtr ns, xmlNodePtr voiceInitParamsElem); /* * Export any information related to this measure as children of measureElem. * All XML elements should be in the given namespace. */ void (* exportMeasure) (DenemoScore * si, xmlNsPtr ns, xmlNodePtr measureElem); /* * Export any information related to this built-in type DenemoObject as * children of objectElem. All XML elements should be in the given * namespace. */ void (* exportObjectInfo) (DenemoScore * si, xmlNsPtr ns, xmlNodePtr objectElem); /* * Export any information related to this note as children of chordElem. * All XML elements should be in the given namespace. */ void (* exportNoteInfo) (DenemoScore * si, xmlNsPtr ns, xmlNodePtr chordElem); /* * Create a new XML element or multiple elements corresponding to the given * custom type DenemoObject, as children of measureElem. All XML elements * should be in the given namespace. */ void (* exportCustomObject) (DenemoScore * si, xmlNsPtr ns, xmlNodePtr measureElem); } DenemoExportXMLNSHandler; /* * Export the given score as Denemo's "native" XML file format to the given * filename. The file will be exported from the measures numbered start to * end. */ void exportXML (gchar * thefilename, DenemoGUI *gui, gint start, gint end); void registerExportXMLNSHandler (DenemoExportXMLNSHandler * handler); void unregisterExportXMLNSHandler (DenemoExportXMLNSHandler * handler); #endif