static void apn_start(GMarkupParseContext *context, const gchar *element_name, const gchar **attribute_names, const gchar **attribute_values, gpointer userdata, GError **error) { struct ofono_gprs_provision_data *apn = userdata; if (g_str_equal(element_name, "name")) g_markup_parse_context_push(context, &text_parser, &apn->name); else if (g_str_equal(element_name, "username")) g_markup_parse_context_push(context, &text_parser, &apn->username); else if (g_str_equal(element_name, "password")) g_markup_parse_context_push(context, &text_parser, &apn->password); else if (g_str_equal(element_name, "authentication")) authentication_start(context, attribute_names, attribute_values, &apn->auth_method, error); else if (g_str_equal(element_name, "mmsc")) g_markup_parse_context_push(context, &text_parser, &apn->message_center); else if (g_str_equal(element_name, "mmsproxy")) g_markup_parse_context_push(context, &text_parser, &apn->message_proxy); else if (g_str_equal(element_name, "usage")) usage_start(context, attribute_names, attribute_values, &apn->type, error); }
// ---------------------------------------------------------------------------- // UgMarkup parse/write static void ug_dataset_parser_start_element (GMarkupParseContext* context, const gchar* element_name, const gchar** attr_names, const gchar** attr_values, UgDataset* dataset, GError** error) { const UgData1Interface* iface; UgDatalist* datalist; guint index; if (strcmp (element_name, "DataClass") != 0) { g_markup_parse_context_push (context, &ug_markup_skip_parser, NULL); return; } for (index=0; attr_names[index]; index++) { if (strcmp (attr_names[index], "name") != 0) continue; // find registered data interface (UgData1Interface) iface = ug_data1_interface_find (attr_values[index]); if (iface) { // Create new instance by UgData1Interface and prepend it to list. datalist = ug_dataset_alloc_front (dataset, iface); g_markup_parse_context_push (context, &ug_data1_parser, datalist); } else { // Skip unregistered interface, don't parse anything. g_markup_parse_context_push (context, &ug_markup_skip_parser, NULL); } break; } }
static void toplevel_gsm_start(GMarkupParseContext *context, const gchar *element_name, const gchar **atribute_names, const gchar **attribute_values, gpointer userdata, GError **error) { struct gsm_data *gsm = userdata; if (g_str_equal(element_name, "gsm")) { gsm->match_found = FALSE; g_markup_parse_context_push(context, &gsm_parser, gsm); } else if (g_str_equal(element_name, "cdma")) g_markup_parse_context_push(context, &skip_parser, NULL); }
static void toplevel_cdma_start(GMarkupParseContext *context, const gchar *element_name, const gchar **atribute_names, const gchar **attribute_values, gpointer userdata, GError **error) { struct cdma_data *cdma = userdata; if (g_str_equal(element_name, "provider") == FALSE) return; if (cdma->match_found == TRUE) g_markup_parse_context_push(context, &skip_parser, NULL); else g_markup_parse_context_push(context, &provider_parser, cdma); }
static void _start_element_cb (GMarkupParseContext *context, const gchar *element_name, const gchar **attribute_names, const gchar **attribute_values, gpointer user_data, GError **error) { XMLNode *node = (XMLNode *) user_data; if (node->text) { g_set_error (error, G_MARKUP_ERROR, G_MARKUP_ERROR_INVALID_CONTENT, " "); return; } XMLNode *p = g_slice_new0 (XMLNode); node->sub_nodes = g_list_append (node->sub_nodes, p); g_markup_parse_context_push (context, &parser, p); p->name = g_strdup (element_name); GArray *attributes = g_array_new (TRUE, TRUE, sizeof (gchar *)); while (*attribute_names != NULL && *attribute_values != NULL) { gchar *p; p = g_strdup (*attribute_names++); g_array_append_val (attributes, p); p = g_strdup (*attribute_values++); g_array_append_val (attributes, p); } p->attributes = (gchar **)g_array_free (attributes, FALSE); }
static void _start_root_element_cb (GMarkupParseContext *context, const gchar *element_name, const gchar **attribute_names, const gchar **attribute_values, gpointer user_data, GError **error) { XMLNode **node = (XMLNode **) user_data; g_assert (node != NULL); XMLNode *p = g_slice_new0 (XMLNode); p->name = g_strdup (element_name); GArray *attributes = g_array_new (TRUE, TRUE, sizeof (gchar *)); while (*attribute_names != NULL && *attribute_values != NULL) { gchar *p; p = g_strdup (*attribute_names++); g_array_append_val (attributes, p); p = g_strdup (*attribute_values++); g_array_append_val (attributes, p); } p->attributes = (gchar **) g_array_free (attributes, FALSE); g_markup_parse_context_push (context, &parser, p); *node = p; }
static void _parser_handleRootStartElement(GMarkupParseContext* context, const gchar* elementName, const gchar** attributeNames, const gchar** attributeValues, gpointer userData, GError** error) { Parser* parser = (Parser*) userData; MAGIC_ASSERT(parser); g_assert(context && error); debug("found start element '%s'", elementName); /* check for root-level elements */ if (!g_ascii_strcasecmp(elementName, "cdf")) { *error = _parser_handleCDFAttributes(parser, attributeNames, attributeValues); } else if (!g_ascii_strcasecmp(elementName, "cluster")) { *error = _parser_handleClusterAttributes(parser, attributeNames, attributeValues); } else if (!g_ascii_strcasecmp(elementName, "link")) { *error = _parser_handleLinkAttributes(parser, attributeNames, attributeValues); } else if (!g_ascii_strcasecmp(elementName, "plugin")) { *error = _parser_handlePluginAttributes(parser, attributeNames, attributeValues); } else if (!g_ascii_strcasecmp(elementName, "node")) { *error = _parser_handleNodeAttributes(parser, attributeNames, attributeValues); /* handle internal elements in a sub parser */ g_markup_parse_context_push(context, &(parser->nodeSubParser), parser); } else if (!g_ascii_strcasecmp(elementName, "kill")) { *error = _parser_handleKillAttributes(parser, attributeNames, attributeValues); } else if (!g_ascii_strcasecmp(elementName, "hosts") || !g_ascii_strcasecmp(elementName, "topology")) { /* do nothing, this is a root element */ } else { *error = g_error_new(G_MARKUP_ERROR, G_MARKUP_ERROR_UNKNOWN_ELEMENT, "unknown 'root' child starting element '%s'", elementName); } }
// ---------------------------------------------------------------------------- // "UgSetting" UgMarkup functions // static void uget_setting_start_element (GMarkupParseContext* context, const gchar* element_name, const gchar** attr_names, const gchar** attr_values, UgSetting* setting, GError** error) { guint index; // if (strcmp (element_name, "UgSetting") != 0) { // g_set_error (error, G_MARKUP_ERROR, // G_MARKUP_ERROR_UNKNOWN_ELEMENT, "Unknown element"); // return; // } for (index=0; attr_names[index]; index++) { if (strcmp (attr_names[index], "version") != 0) continue; if (strcmp (attr_values[index], "1") == 0) { g_markup_parse_context_push (context, &ug_data_parser, setting); return; } } g_set_error (error, G_MARKUP_ERROR, G_MARKUP_ERROR_UNKNOWN_ELEMENT, "Unknown element"); }
static void provider_start(GMarkupParseContext *context, const gchar *element_name, const gchar **attribute_names, const gchar **attribute_values, gpointer userdata, GError **error) { if (g_str_equal(element_name, "name")) { struct cdma_data *cdma = userdata; g_free(cdma->provider_name); cdma->provider_name = NULL; g_markup_parse_context_push(context, &text_parser, &cdma->provider_name); } else if (g_str_equal(element_name, "gsm")) g_markup_parse_context_push(context, &skip_parser, NULL); else if (g_str_equal(element_name, "cdma")) g_markup_parse_context_push(context, &cdma_parser, userdata); }
// ---------------------------------------------------------------------------- // DownloadList load/save // static void ug_download_data_start_element (GMarkupParseContext* context, const gchar* element_name, const gchar** attr_names, const gchar** attr_values, GList** list, GError** error) { UgDataset* dataset; if (strcmp (element_name, "download") != 0) { g_markup_parse_context_push (context, &ug_markup_skip_parser, NULL); return; } dataset = ug_dataset_new (); *list = g_list_prepend (*list, dataset); g_markup_parse_context_push (context, &ug_data_parser, dataset); }
// ---------------------------------------------------------------------------- // CategoryList load/save // static void ug_category_data_start_element (GMarkupParseContext* context, const gchar* element_name, const gchar** attr_names, const gchar** attr_values, GList** list, GError** error) { UgCategory* category; if (strcmp (element_name, "category") != 0) { g_markup_parse_context_push (context, &ug_markup_skip_parser, NULL); return; } // user must register data interface of UgCategory. category = ug_data_new (ug_category_iface_pointer); *list = g_list_prepend (*list, category); g_markup_parse_context_push (context, &ug_data_parser, category); }
static void apn_handler(GMarkupParseContext *context, struct gsm_data *gsm, const gchar **attribute_names, const gchar **attribute_values, GError **error) { struct ofono_gprs_provision_data *ap; const char *apn; int i; if (gsm->match_found == FALSE) { g_markup_parse_context_push(context, &skip_parser, NULL); return; } for (i = 0, apn = NULL; attribute_names[i]; i++) { if (g_str_equal(attribute_names[i], "value") == FALSE) continue; apn = attribute_values[i]; break; } if (apn == NULL) { mbpi_g_set_error(context, error, G_MARKUP_ERROR, G_MARKUP_ERROR_MISSING_ATTRIBUTE, "APN attribute missing"); return; } ap = g_new0(struct ofono_gprs_provision_data, 1); ap->apn = g_strdup(apn); ap->type = OFONO_GPRS_CONTEXT_TYPE_INTERNET; ap->proto = OFONO_GPRS_PROTO_IP; ap->auth_method = OFONO_GPRS_AUTH_METHOD_CHAP; g_markup_parse_context_push(context, &apn_parser, ap); }
// ---------------------------------------------------------------------------- // "FolderList" UgMarkup functions // static void ug_string_list_start_element (GMarkupParseContext* context, const gchar* element_name, const gchar** attr_names, const gchar** attr_values, GList** string_list, GError** error) { guint index; for (index=0; attr_names[index]; index++) { if (strcmp (attr_names[index], "value") == 0) *string_list = g_list_prepend (*string_list, g_strdup (attr_values[index])); } // skip end_element() one times. g_markup_parse_context_push (context, &ug_markup_skip_parser, NULL); }
// ---------------------------------------------------------------------------- // Category.indices load/save // static void ug_int_list_start_element (GMarkupParseContext* context, const gchar* element_name, const gchar** attr_names, const gchar** attr_values, GList** list, GError** error) { guint index; int value; for (index=0; attr_names[index]; index++) { if (strcmp (attr_names[index], "value") != 0) continue; value = atoi (attr_values[index]); *list = g_list_prepend (*list, GINT_TO_POINTER (value)); } g_markup_parse_context_push (context, &ug_markup_skip_parser, NULL); }
static void ug_download_list_start_element (GMarkupParseContext* context, const gchar* element_name, const gchar** attr_names, const gchar** attr_values, GList** list, GError** error) { // guint index; // if (strcmp (element_name, "UgDownloadList") == 0) { // for (index=0; attr_names[index]; index++) { // if (strcmp (attr_names[index], "version") != 0) // continue; // if (strcmp (attr_values[index], "1") == 0) { g_markup_parse_context_push (context, &ug_download_data_parser, list); return; // } // others... // break; // } // } // g_markup_parse_context_push (context, &ug_markup_skip_parser, NULL); }
static void brush_start_element (GMarkupParseContext *context, const gchar *element_name, const gchar **names, const gchar **values, gpointer user_data, GError **error) { GXPSBrush *brush = (GXPSBrush *)user_data; if (strcmp (element_name, "SolidColorBrush") == 0) { const gchar *color_str = NULL; gint i; for (i = 0; names[i] != NULL; i++) { if (strcmp (names[i], "Color") == 0) { color_str = values[i]; } else if (strcmp (names[i], "Opacity") == 0) { if (!gxps_value_get_double (values[i], &brush->opacity)) { gxps_parse_error (context, brush->ctx->page->priv->source, G_MARKUP_ERROR_INVALID_CONTENT, "SolidColorBrush", "Opacity", values[i], error); return; } } else { gxps_parse_error (context, brush->ctx->page->priv->source, G_MARKUP_ERROR_UNKNOWN_ATTRIBUTE, "SolidColorBrush", names[i], NULL, error); return; } } if (!color_str) { gxps_parse_error (context, brush->ctx->page->priv->source, G_MARKUP_ERROR_MISSING_ATTRIBUTE, "SolidColorBrush", "Color", NULL, error); return; } GXPS_DEBUG (g_message ("set_fill_pattern (solid)")); if (!gxps_brush_solid_color_parse (color_str, brush->ctx->page->priv->zip, brush->opacity, &brush->pattern)) { gxps_parse_error (context, brush->ctx->page->priv->source, G_MARKUP_ERROR_INVALID_CONTENT, "SolidColorBrush", "Color", color_str, error); return; } } else if (strcmp (element_name, "ImageBrush") == 0) { GXPSBrushImage *image; gchar *image_source = NULL; cairo_rectangle_t viewport = { 0, }, viewbox = { 0, }; cairo_matrix_t matrix; cairo_extend_t extend = CAIRO_EXTEND_NONE; gint i; cairo_matrix_init_identity (&matrix); for (i = 0; names[i] != NULL; i++) { if (strcmp (names[i], "ImageSource") == 0) { image_source = gxps_resolve_relative_path (brush->ctx->page->priv->source, values[i]); } else if (strcmp (names[i], "Transform") == 0) { if (!gxps_matrix_parse (values[i], &matrix)) { gxps_parse_error (context, brush->ctx->page->priv->source, G_MARKUP_ERROR_INVALID_CONTENT, "ImageBrush", "Transform", values[i], error); return; } } else if (strcmp (names[i], "Viewport") == 0) { if (!gxps_box_parse (values[i], &viewport)) { gxps_parse_error (context, brush->ctx->page->priv->source, G_MARKUP_ERROR_INVALID_CONTENT, "ImageBrush", "Viewport", values[i], error); return; } } else if (strcmp (names[i], "ViewportUnits") == 0) { } else if (strcmp (names[i], "Viewbox") == 0) { if (!gxps_box_parse (values[i], &viewbox)) { gxps_parse_error (context, brush->ctx->page->priv->source, G_MARKUP_ERROR_INVALID_CONTENT, "ImageBrush", "Viewbox", values[i], error); return; } } else if (strcmp (names[i], "ViewboxUnits") == 0) { } else if (strcmp (names[i], "TileMode") == 0) { extend = gxps_tile_mode_parse (values[i]); } else if (strcmp (names[i], "Opacity") == 0) { if (!gxps_value_get_double (values[i], &brush->opacity)) { gxps_parse_error (context, brush->ctx->page->priv->source, G_MARKUP_ERROR_INVALID_CONTENT, "ImageBrush", "Opacity", values[i], error); return; } } else { gxps_parse_error (context, brush->ctx->page->priv->source, G_MARKUP_ERROR_UNKNOWN_ATTRIBUTE, "ImageBrush", names[i], NULL, error); return; } } if (!image_source) { gxps_parse_error (context, brush->ctx->page->priv->source, G_MARKUP_ERROR_MISSING_ATTRIBUTE, element_name, "ImageSource", NULL, error); return; } /* GXPSBrushImage takes ownership of image_source */ image = gxps_brush_image_new (brush, image_source, &viewport, &viewbox); image->extend = extend; image->matrix = matrix; g_markup_parse_context_push (context, &brush_image_parser, image); } else if (strcmp (element_name, "LinearGradientBrush") == 0) { gint i; gdouble x0, y0, x1, y1; cairo_extend_t extend = CAIRO_EXTEND_PAD; cairo_matrix_t matrix; x0 = y0 = x1 = y1 = -1; cairo_matrix_init_identity (&matrix); for (i = 0; names[i] != NULL; i++) { if (strcmp (names[i], "MappingMode") == 0) { } else if (strcmp (names[i], "StartPoint") == 0) { if (!gxps_point_parse (values[i], &x0, &y0)) { gxps_parse_error (context, brush->ctx->page->priv->source, G_MARKUP_ERROR_INVALID_CONTENT, "LinearGradientBrush", "StartPoint", values[i], error); return; } } else if (strcmp (names[i], "EndPoint") == 0) { if (!gxps_point_parse (values[i], &x1, &y1)) { gxps_parse_error (context, brush->ctx->page->priv->source, G_MARKUP_ERROR_INVALID_CONTENT, "LinearGradientBrush", "EndPoint", values[i], error); return; } } else if (strcmp (names[i], "SpreadMethod") == 0) { extend = gxps_spread_method_parse (values[i]); } else if (strcmp (names[i], "Opacity") == 0) { if (!gxps_value_get_double (values[i], &brush->opacity)) { gxps_parse_error (context, brush->ctx->page->priv->source, G_MARKUP_ERROR_INVALID_CONTENT, "LinearGradientBrush", "Opacity", values[i], error); return; } } else if (strcmp (names[i], "Transform") == 0) { if (!gxps_matrix_parse (values[i], &matrix)) { gxps_parse_error (context, brush->ctx->page->priv->source, G_MARKUP_ERROR_INVALID_CONTENT, "LinearGradientBrush", "Transform", values[i], error); return; } } else if (strcmp (names[i], "ColorInterpolationMode") == 0) { GXPS_DEBUG (g_debug ("Unsupported %s attribute: ColorInterpolationMode", element_name)); } else { gxps_parse_error (context, brush->ctx->page->priv->source, G_MARKUP_ERROR_UNKNOWN_ATTRIBUTE, element_name, names[i], NULL, error); return; } } if (x0 == -1 || y0 == -1 || x1 == -1 || y1 == -1) { gxps_parse_error (context, brush->ctx->page->priv->source, G_MARKUP_ERROR_MISSING_ATTRIBUTE, element_name, (x0 == -1 || y0 == -1) ? "StartPoint" : "EndPoint", NULL, error); return; } GXPS_DEBUG (g_message ("set_fill_pattern (linear)")); brush->pattern = cairo_pattern_create_linear (x0, y0, x1, y1); cairo_pattern_set_matrix (brush->pattern, &matrix); cairo_pattern_set_extend (brush->pattern, extend); g_markup_parse_context_push (context, &brush_gradient_parser, brush); } else if (strcmp (element_name, "RadialGradientBrush") == 0) { gint i; gdouble cx0, cy0, r0, cx1, cy1, r1; cairo_extend_t extend = CAIRO_EXTEND_PAD; cairo_matrix_t matrix; cx0 = cy0 = r0 = cx1 = cy1 = r1 = -1; cairo_matrix_init_identity (&matrix); for (i = 0; names[i] != NULL; i++) { if (strcmp (names[i], "MappingMode") == 0) { } else if (strcmp (names[i], "GradientOrigin") == 0) { if (!gxps_point_parse (values[i], &cx0, &cy0)) { gxps_parse_error (context, brush->ctx->page->priv->source, G_MARKUP_ERROR_INVALID_CONTENT, "RadialGradientBrush", "GradientOrigin", values[i], error); return; } } else if (strcmp (names[i], "Center") == 0) { if (!gxps_point_parse (values[i], &cx1, &cy1)) { gxps_parse_error (context, brush->ctx->page->priv->source, G_MARKUP_ERROR_INVALID_CONTENT, "RadialGradientBrush", "Center", values[i], error); return; } } else if (strcmp (names[i], "RadiusX") == 0) { if (!gxps_value_get_double (values[i], &r0)) { gxps_parse_error (context, brush->ctx->page->priv->source, G_MARKUP_ERROR_INVALID_CONTENT, "RadialGradientBrush", "RadiusX", values[i], error); return; } } else if (strcmp (names[i], "RadiusY") == 0) { if (!gxps_value_get_double (values[i], &r1)) { gxps_parse_error (context, brush->ctx->page->priv->source, G_MARKUP_ERROR_INVALID_CONTENT, "RadialGradientBrush", "RadiusY", values[i], error); return; } } else if (strcmp (names[i], "SpreadMethod") == 0) { extend = gxps_spread_method_parse (values[i]); } else if (strcmp (names[i], "Opacity") == 0) { if (!gxps_value_get_double (values[i], &brush->opacity)) { gxps_parse_error (context, brush->ctx->page->priv->source, G_MARKUP_ERROR_INVALID_CONTENT, "RadialGradientBrush", "Opacity", values[i], error); return; } } else if (strcmp (names[i], "Transform") == 0) { if (!gxps_matrix_parse (values[i], &matrix)) { gxps_parse_error (context, brush->ctx->page->priv->source, G_MARKUP_ERROR_INVALID_CONTENT, "RadialGradientBrush", "Transform", values[i], error); return; } } else if (strcmp (names[i], "ColorInterpolationMode") == 0) { GXPS_DEBUG (g_debug ("Unsupported %s attribute: ColorInterpolationMode", element_name)); } else { gxps_parse_error (context, brush->ctx->page->priv->source, G_MARKUP_ERROR_UNKNOWN_ATTRIBUTE, element_name, names[i], NULL, error); return; } } if (cx0 == -1 || cy0 == -1 || cx1 == -1 || cy1 == -1) { gxps_parse_error (context, brush->ctx->page->priv->source, G_MARKUP_ERROR_MISSING_ATTRIBUTE, element_name, (cx0 == -1 || cy0 == -1) ? "GradientOrigin" : "Center", NULL, error); return; } if (r0 == -1 || r1 == -1) { gxps_parse_error (context, brush->ctx->page->priv->source, G_MARKUP_ERROR_MISSING_ATTRIBUTE, element_name, (r0 == -1) ? "RadiusX" : "RadiusY", NULL, error); return; } GXPS_DEBUG (g_message ("set_fill_pattern (radial)")); brush->pattern = cairo_pattern_create_radial (cx0, cy0, 0, cx1, cy1, r1); cairo_pattern_set_matrix (brush->pattern, &matrix); cairo_pattern_set_extend (brush->pattern, extend); g_markup_parse_context_push (context, &brush_gradient_parser, brush); } else if (strcmp (element_name, "VisualBrush") == 0) { GXPSBrushVisual *visual; GXPSRenderContext *sub_ctx; cairo_rectangle_t viewport = { 0, }, viewbox = { 0, }; cairo_matrix_t matrix; cairo_extend_t extend = CAIRO_EXTEND_NONE; double width, height; gint i; cairo_matrix_init_identity (&matrix); for (i = 0; names[i] != NULL; i++) { if (strcmp (names[i], "TileMode") == 0) { extend = gxps_tile_mode_parse (values[i]); } else if (strcmp (names[i], "Transform") == 0) { if (!gxps_matrix_parse (values[i], &matrix)) { gxps_parse_error (context, brush->ctx->page->priv->source, G_MARKUP_ERROR_INVALID_CONTENT, "VisualBrush", "Transform", values[i], error); return; } } else if (strcmp (names[i], "Viewport") == 0) { if (!gxps_box_parse (values[i], &viewport)) { gxps_parse_error (context, brush->ctx->page->priv->source, G_MARKUP_ERROR_INVALID_CONTENT, "VisualBrush", "Viewport", values[i], error); return; } } else if (strcmp (names[i], "ViewportUnits") == 0) { } else if (strcmp (names[i], "Viewbox") == 0) { if (!gxps_box_parse (values[i], &viewbox)) { gxps_parse_error (context, brush->ctx->page->priv->source, G_MARKUP_ERROR_INVALID_CONTENT, "VisualBrush", "Viewbox", values[i], error); return; } } else if (strcmp (names[i], "ViewboxUnits") == 0) { } else if (strcmp (names[i], "Opacity") == 0) { GXPS_DEBUG (g_debug ("Unsupported %s attribute: Opacity", element_name)); } else if (strcmp (names[i], "Visual") == 0) { GXPS_DEBUG (g_debug ("Unsupported %s attribute: Visual", element_name)); } else { gxps_parse_error (context, brush->ctx->page->priv->source, G_MARKUP_ERROR_UNKNOWN_ATTRIBUTE, element_name, names[i], NULL, error); return; } } /* TODO: check required values */ width = gxps_transform_hypot (&matrix, viewport.width, 0); height = gxps_transform_hypot (&matrix, 0, viewport.height); cairo_save (brush->ctx->cr); cairo_rectangle (brush->ctx->cr, 0, 0, width, height); cairo_clip (brush->ctx->cr); cairo_push_group (brush->ctx->cr); cairo_translate (brush->ctx->cr, -viewbox.x, -viewbox.y); cairo_scale (brush->ctx->cr, width / viewbox.width, height / viewbox.height); visual = gxps_brush_visual_new (brush, &viewport, &viewbox); visual->extend = extend; cairo_matrix_init (&visual->matrix, viewport.width / width, 0, 0, viewport.height / height, viewport.x, viewport.y); cairo_matrix_multiply (&visual->matrix, &visual->matrix, &matrix); cairo_matrix_invert (&visual->matrix); sub_ctx = g_slice_new0 (GXPSRenderContext); sub_ctx->page = brush->ctx->page; sub_ctx->cr = brush->ctx->cr; sub_ctx->visual = visual; gxps_page_render_parser_push (context, sub_ctx); } else { gxps_parse_error (context, brush->ctx->page->priv->source, G_MARKUP_ERROR_UNKNOWN_ELEMENT, element_name, NULL, NULL, error); } }
void gxps_brush_parser_push (GMarkupParseContext *context, GXPSBrush *brush) { g_markup_parse_context_push (context, &brush_parser, brush); }
// UgData* user_data static void ug_data1_parser_start_element (GMarkupParseContext* context, const gchar* element_name, const gchar** attr_names, const gchar** attr_values, UgData1* data, GError** error) { const UgDataEntry* entry; const gchar* src; gpointer dest; guint index; entry = data->iface->entry; if (entry == NULL) { // don't parse anything. g_markup_parse_context_push (context, &ug_markup_skip_parser, NULL); return; } // data parser for (; entry->name; entry++) { if (strcmp (entry->name, element_name) != 0) continue; src = NULL; for (index=0; attr_names[index]; index++) { if (strcmp (attr_names[index], "value") == 0) { src = attr_values[index]; break; } } dest = ((guint8*) data) + entry->offset; switch (entry->type) { case UG_TYPE_STRING: if (src) { g_free (*(gchar**) dest); *(gchar**) dest = g_strdup (src); } break; case UG_TYPE_INT: if (src) *(gint*) dest = strtol (src, NULL, 10); break; case UG_TYPE_UINT: if (src) *(guint*) dest = (guint) strtoul (src, NULL, 10); break; case UG_TYPE_INT64: // C99 Standard if (src) *(gint64*) dest = strtoll (src, NULL, 10);; break; case UG_TYPE_DOUBLE: if (src) *(gdouble*) dest = strtod (src, NULL); break; case UG_TYPE_INSTANCE: if (entry->parser == NULL) break; if (*(gpointer*) dest == NULL) *(gpointer*) dest = ug_data1_new (entry->parser); dest = *(gpointer*) dest; case UG_TYPE_STATIC: g_markup_parse_context_push (context, &ug_data1_parser, dest); return; case UG_TYPE_CUSTOM: if (entry->parser) { ((UgParseFunc) entry->parser) (dest, context); return; } // g_set_error (error, G_MARKUP_ERROR, G_MARKUP_ERROR_UNKNOWN_ELEMENT, "Unknow element"); break; default: break; } // End of switch (entry->type) break; } // don't parse anything. g_markup_parse_context_push (context, &ug_markup_skip_parser, NULL); }
void gxps_matrix_parser_push (GMarkupParseContext *context, GXPSMatrix *matrix) { g_markup_parse_context_push (context, &matrix_parser, matrix); }
static void ug_dataset_in_markup (UgDataset* dataset, GMarkupParseContext* context) { g_markup_parse_context_push (context, &ug_dataset_parser, dataset); }
static void ug_string_list_in_markup (GList** string_list, GMarkupParseContext* context) { g_markup_parse_context_push (context, &ug_string_list_parser, string_list); }
static void ug_schedule_state_in_markup (guint (*state)[7][24], GMarkupParseContext* context) { g_markup_parse_context_push (context, &ug_schedule_state_parser, state); }