/* Lasem * * Copyright © 2007-2009 Emmanuel Pacaud * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1335, USA. * * Author: * Emmanuel Pacaud */ #include #include #include #include #include static GHashTable *document_types = NULL; static void lsm_dom_implementation_add_document_create_function (const char *qualified_name, LsmDomDocumentCreateFunction create_function) { if (document_types == NULL) document_types = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL); g_hash_table_insert (document_types, g_strdup (qualified_name), create_function); g_hash_table_insert (document_types, g_strdup_printf ("%s:%s", qualified_name, qualified_name), create_function); } /** * lsm_dom_implementation_create_document: * @namespace_uri: namespace uri * @qualified_name: qualified name * * Returns: (transfer full): a new #LsmDomDocument */ LsmDomDocument * lsm_dom_implementation_create_document (const char *namespace_uri, const char *qualified_name) { LsmDomDocumentCreateFunction create_function; g_return_val_if_fail (qualified_name != NULL, NULL); if (document_types == NULL) { lsm_dom_implementation_add_document_create_function ("math", lsm_mathml_document_new); lsm_dom_implementation_add_document_create_function ("svg", lsm_svg_document_new); } create_function = g_hash_table_lookup (document_types, qualified_name); if (create_function == NULL) { lsm_debug_dom ("[LsmDomImplementation::create_document] Unknow document type (%s)", qualified_name); return NULL; } return create_function (); } void lsm_dom_implementation_cleanup (void) { if (document_types == NULL) return; g_hash_table_unref (document_types); document_types = NULL; }