[glabels] Added sanity tests to template parser
- From: Jim Evins <jimevins src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glabels] Added sanity tests to template parser
- Date: Thu, 6 May 2010 00:20:50 +0000 (UTC)
commit 206b483f611441d18db5360800975f2f0d35014b
Author: Jim Evins <evins snaught com>
Date: Wed May 5 20:16:26 2010 -0400
Added sanity tests to template parser
When parsing a template node, if there is no recognized frame node (e.g.
Label-rectangle), a default full-page frame with a 1x1 layout is created.
Likewise, if a frame has no layout, a default 1x1 layout is created.
This prevents potential crashes due to typos in the case of typos in
hand generated templates.
libglabels/str.c | 2 +-
libglabels/xml-template.c | 23 +++++++++++++++++++++++
2 files changed, 24 insertions(+), 1 deletions(-)
---
diff --git a/libglabels/str.c b/libglabels/str.c
index b0b7145..f206b2f 100644
--- a/libglabels/str.c
+++ b/libglabels/str.c
@@ -249,7 +249,7 @@ lgl_str_format_fraction (gdouble x)
}
if ( denom[i] == 1.0 ) {
/* Simple integer. */
- return g_strdup_printf ("%.0g", x);
+ return g_strdup_printf ("%.0f", x);
}
n = (gint)( x * denom[i] + 0.5 );
d = (gint)denom[i];
diff --git a/libglabels/xml-template.c b/libglabels/xml-template.c
index 50ae132..9a2c3c0 100644
--- a/libglabels/xml-template.c
+++ b/libglabels/xml-template.c
@@ -201,6 +201,8 @@ lgl_xml_template_parse_template_node (const xmlNodePtr template_node)
lglTemplate *template;
xmlNodePtr node;
gchar **v;
+ lglTemplateFrame *frame;
+
brand = lgl_xml_get_prop_string (template_node, "brand", NULL);
part = lgl_xml_get_prop_string (template_node, "part", NULL);
@@ -305,6 +307,27 @@ lgl_xml_template_parse_template_node (const xmlNodePtr template_node)
g_free (description);
g_free (paper_id);
+ /*
+ * Create a default full-page frame, if a known frame type was not found.
+ */
+ if ( template->frames == NULL )
+ {
+ g_message ("%s %s: missing valid frame node", template->brand, template->part);
+ frame = lgl_template_frame_rect_new ("0", page_width, page_height, 0, 0, 0);
+ lgl_template_frame_add_layout (frame, lgl_template_layout_new (1, 1, 0, 0, 0, 0));
+ lgl_template_add_frame (template, frame);
+ }
+
+ /*
+ * Create a default 1x1 layout, if layout is missing.
+ */
+ frame = (lglTemplateFrame *)template->frames->data;
+ if ( frame->all.layouts == NULL )
+ {
+ g_message ("%s %s: missing layout node", template->brand, template->part);
+ lgl_template_frame_add_layout (frame, lgl_template_layout_new (1, 1, 0, 0, 0, 0));
+ }
+
return template;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]