static void gnm_soi_prep_sax_parser (SheetObject *so, GsfXMLIn *xin, xmlChar const **attrs, G_GNUC_UNUSED GnmConventions const *convs) { static GsfXMLInNode const dtd[] = { GSF_XML_IN_NODE (CONTENT, CONTENT, -1, "Content", GSF_XML_CONTENT, &content_start, &content_end), GSF_XML_IN_NODE_END }; static GsfXMLInDoc *doc = NULL; SheetObjectImage *soi = SHEET_OBJECT_IMAGE (so); if (NULL == doc) doc = gsf_xml_in_doc_new (dtd, NULL); gsf_xml_in_push_state (xin, doc, NULL, NULL, attrs); for (; attrs != NULL && attrs[0] && attrs[1] ; attrs += 2) { if (gnm_xml_attr_double (attrs, "crop-top", &soi->crop_top)) ; else if (gnm_xml_attr_double (attrs, "crop-bottom", &soi->crop_bottom)) /* Nothing */ ; else if (gnm_xml_attr_double (attrs, "crop-left", &soi->crop_left)) /* Nothing */ ; else if (gnm_xml_attr_double (attrs, "crop-right", &soi->crop_right)) /* Nothing */ ; } }
static void gnm_so_path_prep_sax_parser (SheetObject *so, GsfXMLIn *xin, xmlChar const **attrs, G_GNUC_UNUSED GnmConventions const *convs) { static GsfXMLInNode const dtd[] = { GSF_XML_IN_NODE (SOPATH, SOPATH, -1, "SheetObjectPath", GSF_XML_NO_CONTENT, NULL, NULL), GSF_XML_IN_NODE (SOPATH, PATH, -1, "Path", GSF_XML_NO_CONTENT, &sop_sax_path, NULL), GSF_XML_IN_NODE (SOPATH, STYLE, -1, "Style", GSF_XML_NO_CONTENT, &sop_sax_style, NULL), GSF_XML_IN_NODE_END }; static GsfXMLInDoc *doc = NULL; GnmSOPath *sop = GNM_SO_PATH(so); if (NULL == doc) { doc = gsf_xml_in_doc_new (dtd, NULL); gnm_xml_in_doc_dispose_on_exit (&doc); } gsf_xml_in_push_state (xin, doc, NULL, NULL, attrs); for (; attrs != NULL && attrs[0] && attrs[1] ; attrs += 2) if (attr_eq (attrs[0], "Label")) g_object_set (G_OBJECT (sop), "text", attrs[1], NULL); else if (attr_eq (attrs[0], "LabelFormat")) { GOFormat * fmt = go_format_new_from_XL (attrs[1]); if (go_format_is_markup (fmt)) g_object_set (G_OBJECT (sop), "markup", go_format_get_markup (fmt), NULL); go_format_unref (fmt); } else if (attr_eq (attrs[0], "Path")) { GOPath *path = go_path_new_from_svg (attrs[1]); if (path) { g_object_set (G_OBJECT (sop), "path", path, NULL); go_path_free (path); } } }
rel->is_extern = is_extern; /* Make sure we don't point to a freed rel in the type hash. */ orel = g_hash_table_lookup (rels->by_type, type); if (orel) g_hash_table_remove (rels->by_type, orel->type); g_hash_table_replace (rels->by_type, rel->type, rel); /* This will free a duplicate rel, so do this last. */ g_hash_table_replace (rels->by_id, rel->id, rel); } static GsfXMLInNode const open_pkg_rel_dtd[] = { GSF_XML_IN_NODE_FULL (START, START, -1, NULL, GSF_XML_NO_CONTENT, FALSE, TRUE, NULL, NULL, 0), GSF_XML_IN_NODE_FULL (START, RELS, OPEN_PKG_NS_REL, "Relationships", GSF_XML_NO_CONTENT, FALSE, TRUE, NULL, NULL, 0), GSF_XML_IN_NODE (RELS, REL, OPEN_PKG_NS_REL, "Relationship", GSF_XML_NO_CONTENT, open_pkg_rel_begin, NULL), GSF_XML_IN_NODE_END }; /** * gsf_open_pkg_rel_is_extern: * @rel: #GsfOpenPkgRel * * Returns: %TRUE if @rel has mode 'External' **/ gboolean gsf_open_pkg_rel_is_extern (GsfOpenPkgRel const *rel) { g_return_val_if_fail (rel != NULL, FALSE); return rel->is_extern;
state->obj_stack = g_slist_remove (state->obj_stack, state->obj); } else { g_slist_free (state->obj_stack); state->obj_stack = NULL; } } static void go_sax_parser_done (GsfXMLIn *xin, GogXMLReadState *state) { (*state->handler) (state->obj, state->user_data); g_free (state); } static GsfXMLInNode const gog_dtd[] = { GSF_XML_IN_NODE (GOG_OBJ, GOG_OBJ, -1, "GogObject", GSF_XML_NO_CONTENT, &gogo_start, &gogo_end), GSF_XML_IN_NODE (GOG_OBJ, GOG_OBJ_PROP, -1, "property", GSF_XML_CONTENT, &gogo_prop_start, &gogo_prop_end), GSF_XML_IN_NODE (GOG_OBJ, GOG_OBJ_DATA, -1, "data", GSF_XML_NO_CONTENT, NULL, NULL), GSF_XML_IN_NODE (GOG_OBJ_DATA, GOG_DATA_DIM, -1, "dimension", GSF_XML_CONTENT, &gogo_dim_start, &gogo_dim_end), GSF_XML_IN_NODE_END }; static GsfXMLInDoc *gog_sax_doc = NULL; /** * gog_object_sax_push_parser: * @xin: #GsfXMLIn * @attrs: XML attributes * @handler: (scope call): callback * @user_unserialize: user data for #GOData reading * @user_data: user data for @handler *
if (GMR == xin->node->ns_id && 0 == strcmp (xin->node->id, "MEMBERS_MEMBER")) { char const *type_name = gsf_xml_in_check_ns (xin, CXML2C (elem), GNM); if (type_name && strcmp (type_name, "Style") == 0) { gnm_xml_prep_style_parser (xin, attrs, sax_style_handler, NULL); return TRUE; } } return FALSE; } static GsfXMLInNode template_dtd[] = { GSF_XML_IN_NODE_FULL (START, START, -1, NULL, GSF_XML_NO_CONTENT, FALSE, TRUE, NULL, NULL, 0), GSF_XML_IN_NODE (START, TEMPLATE, GMR, "FormatTemplate", GSF_XML_NO_CONTENT, NULL, NULL), GSF_XML_IN_NODE (TEMPLATE, TEMPLATE_INFORMATION, GMR, "Information", GSF_XML_NO_CONTENT, sax_information, NULL), GSF_XML_IN_NODE (TEMPLATE, TEMPLATE_MEMBERS, GMR, "Members", GSF_XML_NO_CONTENT, NULL, sax_members_end), GSF_XML_IN_NODE (TEMPLATE_MEMBERS, MEMBERS_MEMBER, GMR, "Member", GSF_XML_NO_CONTENT, sax_member, sax_member_end), GSF_XML_IN_NODE (MEMBERS_MEMBER, MEMBER_ROW, GMR, "Row", GSF_XML_NO_CONTENT, NULL, NULL), GSF_XML_IN_NODE (MEMBER_ROW, ROW_PLACEMENT, GMR, "Placement", GSF_XML_NO_CONTENT, sax_row_placement, NULL), GSF_XML_IN_NODE (MEMBER_ROW, ROW_DIMENSIONS, GMR, "Dimensions", GSF_XML_NO_CONTENT, sax_row_dimensions, NULL), GSF_XML_IN_NODE (MEMBERS_MEMBER, MEMBER_COL, GMR, "Col", GSF_XML_NO_CONTENT, NULL, NULL), GSF_XML_IN_NODE (MEMBER_COL, COL_PLACEMENT, GMR, "Placement", GSF_XML_NO_CONTENT, sax_col_placement, NULL), GSF_XML_IN_NODE (MEMBER_COL, COL_DIMENSIONS, GMR, "Dimensions", GSF_XML_NO_CONTENT, sax_col_dimensions, NULL), GSF_XML_IN_NODE (MEMBERS_MEMBER, MEMBER_FREQUENCY, GMR, "Frequency", GSF_XML_NO_CONTENT, sax_frequency, NULL), GSF_XML_IN_NODE_END }; /** * gnm_ft_new_from_file: