void Init_fastxml() { if (xmlHasFeature(XML_WITH_TREE) == 0) rb_raise( rb_eRuntimeError, "libxml not built with tree support" ); if (xmlHasFeature(XML_WITH_XPATH) == 0) rb_raise( rb_eRuntimeError, "libxml not built with xpath support" ); s_readlines = rb_intern("readlines"); s_to_s = rb_intern("to_s"); xmlInitParser(); xmlXPathInit(); xsltInit(); rb_mFastXml = rb_define_module( "FastXml" ); rb_define_const( rb_mFastXml, "LIBXML_VERSION", rb_str_new2( LIBXML_DOTTED_VERSION ) ); /* setting symbols */ rb_sValidateDtd = ID2SYM( rb_intern("validate") ); rb_sForgivingParse = ID2SYM( rb_intern("forgiving") ); rb_sHtmlParse = ID2SYM( rb_intern("html") ); Init_fastxml_doc(); /* Doc */ Init_fastxml_node(); /* Node */ Init_fastxml_nodelist(); /* NodeList */ Init_fastxml_attrlist(); /* AttrList */ /* pull in the ruby side of things */ rb_require( "fastxml/fastxml_lib" ); // ruby-side methods for the FastXml classes rb_require( "fastxml/fastxml_helpers" ); // FastXml and FastHtml methods }
/***************************************************************************** * Module initialization *****************************************************************************/ static int Open( vlc_object_t *p_this ) { xml_t *p_xml = (xml_t *)p_this; if( !xmlHasFeature( XML_WITH_THREAD ) ) return VLC_EGENERIC; vlc_mutex_lock( &lock ); xmlInitParser(); vlc_mutex_unlock( &lock ); p_xml->pf_reader_create = ReaderCreate; p_xml->pf_reader_delete = ReaderDelete; p_xml->pf_catalog_load = CatalogLoad; p_xml->pf_catalog_add = CatalogAdd; return VLC_SUCCESS; }
GWeatherParser * _gweather_parser_new (void) { GWeatherParser *parser; int zlib_support; int keep_going; char *filename; char *tagname, *format; time_t now; struct tm tm; _gweather_gettext_init (); parser = g_slice_new0 (GWeatherParser); zlib_support = xmlHasFeature (XML_WITH_ZLIB); filename = g_build_filename (GWEATHER_XML_LOCATION_DIR, "Locations.xml", NULL); if (!g_file_test (filename, G_FILE_TEST_IS_REGULAR) && zlib_support) { g_free (filename); filename = g_build_filename (GWEATHER_XML_LOCATION_DIR, "Locations.xml.gz", NULL); } /* Open the xml file containing the different locations */ parser->xml = xmlNewTextReaderFilename (filename); g_free (filename); if (parser->xml == NULL) goto error_out; /* fast forward to the first element */ do { /* if we encounter a problem here, exit right away */ if (xmlTextReaderRead (parser->xml) != 1) goto error_out; } while (xmlTextReaderNodeType (parser->xml) != XML_READER_TYPE_ELEMENT); /* check the name and format */ tagname = (char *) xmlTextReaderName (parser->xml); keep_going = tagname && !strcmp (tagname, "gweather"); xmlFree (tagname); if (!keep_going) goto error_out; format = (char *) xmlTextReaderGetAttribute (parser->xml, (xmlChar *) "format"); keep_going = format && !strcmp (format, "1.0"); xmlFree (format); if (!keep_going) goto error_out; /* Get timestamps for the start and end of this year */ now = time (NULL); tm = *gmtime (&now); tm.tm_mon = 0; tm.tm_mday = 1; tm.tm_hour = tm.tm_min = tm.tm_sec = 0; parser->year_start = mktime (&tm); tm.tm_year++; parser->year_end = mktime (&tm); parser->metar_code_cache = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, gweather_location_list_free); parser->timezone_cache = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, (GDestroyNotify) gweather_timezone_unref); parser->country_code_cache = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, (GDestroyNotify) gweather_location_unref); return parser; error_out: _gweather_parser_free (parser); return NULL; }