static void toplevel_cdma_end(GMarkupParseContext *context, const gchar *element_name, gpointer userdata, GError **error) { if (g_str_equal(element_name, "provider")) g_markup_parse_context_pop(context); }
static void gsm_end(GMarkupParseContext *context, const gchar *element_name, gpointer userdata, GError **error) { struct gsm_data *gsm; struct ofono_gprs_provision_data *ap; if (!g_str_equal(element_name, "apn")) return; gsm = userdata; ap = g_markup_parse_context_pop(context); if (ap == NULL) return; if (gsm->allow_duplicates == FALSE) { GSList *l; for (l = gsm->apns; l; l = l->next) { struct ofono_gprs_provision_data *pd = l->data; if (pd->type != ap->type) continue; mbpi_g_set_error(context, error, mbpi_error_quark(), MBPI_ERROR_DUPLICATE, "Duplicate context detected"); mbpi_ap_free(ap); return; } } gsm->apns = g_slist_append(gsm->apns, ap); }
static void apn_end(GMarkupParseContext *context, const gchar *element_name, gpointer userdata, GError **error) { if (g_str_equal(element_name, "name") || g_str_equal(element_name, "username") || g_str_equal(element_name, "password")) g_markup_parse_context_pop(context); }
static void provider_end(GMarkupParseContext *context, const gchar *element_name, gpointer userdata, GError **error) { if (g_str_equal(element_name, "name") || g_str_equal(element_name, "gsm") || g_str_equal(element_name, "cdma")) g_markup_parse_context_pop(context); }
static void _end_element_cb (GMarkupParseContext *context, const gchar *element_name, gpointer user_data, GError **error) { XMLNode *p = (XMLNode *) g_markup_parse_context_pop (context); if (p->text && p->sub_nodes) { g_debug ("Error"); } if (p->text == NULL && p->sub_nodes == NULL) { p->text = g_strdup (""); } }
static void brush_image_end_element (GMarkupParseContext *context, const gchar *element_name, gpointer user_data, GError **error) { GXPSBrushImage *image = (GXPSBrushImage *)user_data; if (strcmp (element_name, "ImageBrush.Transform") == 0) { GXPSMatrix *matrix; matrix = g_markup_parse_context_pop (context); image->matrix = matrix->matrix; gxps_matrix_free (matrix); } else { gxps_parse_error (context, image->brush->ctx->page->priv->source, G_MARKUP_ERROR_UNKNOWN_ELEMENT, element_name, NULL, NULL, error); } }
static void _parser_handleRootEndElement(GMarkupParseContext* context, const gchar* elementName, gpointer userData, GError** error) { Parser* parser = (Parser*) userData; MAGIC_ASSERT(parser); g_assert(context && error); debug("found end element '%s'", elementName); /* check for root-level elements */ if (!g_ascii_strcasecmp(elementName, "node")) { /* validate children */ if (parser->nChildApplications <= 0) { *error = g_error_new(G_MARKUP_ERROR, G_MARKUP_ERROR_EMPTY, "element 'node' requires at least 1 child 'application'"); } g_markup_parse_context_pop(context); /* reset child cache */ parser->nChildApplications = 0; if (parser->currentNodeAction) { /* this is in the actions queue and will get free'd later */ parser->currentNodeAction = NULL; } } else { if(!(!g_ascii_strcasecmp(elementName, "cluster") || !g_ascii_strcasecmp(elementName, "link") || !g_ascii_strcasecmp(elementName, "plugin") || !g_ascii_strcasecmp(elementName, "cdf") || !g_ascii_strcasecmp(elementName, "kill") || !g_ascii_strcasecmp(elementName, "hosts") || !g_ascii_strcasecmp(elementName, "topology"))) { *error = g_error_new(G_MARKUP_ERROR, G_MARKUP_ERROR_UNKNOWN_ELEMENT, "unknown 'root' child ending element '%s'", elementName); } } }
static void brush_end_element (GMarkupParseContext *context, const gchar *element_name, gpointer user_data, GError **error) { GXPSBrush *brush = (GXPSBrush *)user_data; if (strcmp (element_name, "SolidColorBrush") == 0) { } else if (strcmp (element_name, "LinearGradientBrush") == 0) { g_markup_parse_context_pop (context); } else if (strcmp (element_name, "RadialGradientBrush") == 0) { g_markup_parse_context_pop (context); } else if (strcmp (element_name, "ImageBrush") == 0) { GXPSBrushImage *brush_image; GXPSImage *image; GError *err = NULL; brush_image = g_markup_parse_context_pop (context); GXPS_DEBUG (g_message ("set_fill_pattern (image)")); image = gxps_page_get_image (brush->ctx->page, brush_image->image_uri, &err); if (image) { cairo_matrix_t matrix; gdouble x_scale, y_scale; cairo_surface_t *clip_surface; /* viewbox units is 1/96 inch, convert to pixels */ brush_image->viewbox.x *= image->res_x / 96; brush_image->viewbox.y *= image->res_y / 96; brush_image->viewbox.width *= image->res_x / 96; brush_image->viewbox.height *= image->res_y / 96; clip_surface = cairo_surface_create_for_rectangle (image->surface, brush_image->viewbox.x, brush_image->viewbox.y, brush_image->viewbox.width, brush_image->viewbox.height); brush_image->brush->pattern = cairo_pattern_create_for_surface (clip_surface); cairo_pattern_set_extend (brush_image->brush->pattern, brush_image->extend); x_scale = brush_image->viewport.width / brush_image->viewbox.width; y_scale = brush_image->viewport.height / brush_image->viewbox.height; cairo_matrix_init (&matrix, x_scale, 0, 0, y_scale, brush_image->viewport.x, brush_image->viewport.y); cairo_matrix_multiply (&matrix, &matrix, &brush_image->matrix); cairo_matrix_invert (&matrix); cairo_pattern_set_matrix (brush_image->brush->pattern, &matrix); if (brush->opacity != 1.0) { cairo_push_group (brush->ctx->cr); cairo_set_source (brush->ctx->cr, brush_image->brush->pattern); cairo_pattern_destroy (brush_image->brush->pattern); cairo_paint_with_alpha (brush->ctx->cr, brush->opacity); brush_image->brush->pattern = cairo_pop_group (brush->ctx->cr); } if (cairo_pattern_status (brush_image->brush->pattern)) { GXPS_DEBUG (g_debug ("%s", cairo_status_to_string (cairo_pattern_status (brush_image->brush->pattern)))); cairo_pattern_destroy (brush_image->brush->pattern); brush_image->brush->pattern = NULL; } cairo_surface_destroy (clip_surface); } else if (err) { GXPS_DEBUG (g_debug ("%s", err->message)); g_error_free (err); } gxps_brush_image_free (brush_image); } else if (strcmp (element_name, "VisualBrush") == 0) { GXPSRenderContext *sub_ctx; GXPSBrushVisual *visual; cairo_matrix_t matrix; sub_ctx = g_markup_parse_context_pop (context); visual = sub_ctx->visual; g_slice_free (GXPSRenderContext, sub_ctx); GXPS_DEBUG (g_message ("set_fill_pattern (visual)")); visual->brush->pattern = cairo_pop_group (brush->ctx->cr); /* Undo the clip */ cairo_restore (brush->ctx->cr); cairo_pattern_set_extend (visual->brush->pattern, visual->extend); cairo_pattern_get_matrix (visual->brush->pattern, &matrix); cairo_matrix_multiply (&matrix, &visual->matrix, &matrix); cairo_pattern_set_matrix (visual->brush->pattern, &matrix); if (cairo_pattern_status (visual->brush->pattern)) { GXPS_DEBUG (g_debug ("%s", cairo_status_to_string (cairo_pattern_status (visual->brush->pattern)))); cairo_pattern_destroy (visual->brush->pattern); visual->brush->pattern = NULL; } gxps_brush_visual_free (visual); } else { gxps_parse_error (context, brush->ctx->page->priv->source, G_MARKUP_ERROR_UNKNOWN_ELEMENT, element_name, NULL, NULL, error); } }