From d7e450f5a59e704774ac67cb5c2778230572cce0 Mon Sep 17 00:00:00 2001 From: bryce Date: Mon, 31 Dec 2007 07:18:34 +0000 Subject: [PATCH] Applying patch from tbnorth to add a --query-all command to dump object data from the .svg. (Closes LP: #174701) --- src/main.cpp | 53 ++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 51 insertions(+), 2 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 3ffd0d12c..f5e76a632 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -148,6 +148,7 @@ enum { SP_ARG_QUERY_Y, SP_ARG_QUERY_WIDTH, SP_ARG_QUERY_HEIGHT, + SP_ARG_QUERY_ALL, SP_ARG_QUERY_ID, SP_ARG_VERSION, SP_ARG_VACUUM_DEFS, @@ -166,7 +167,8 @@ static void do_export_pdf(SPDocument* doc, gchar const* uri, char const *mime); static void do_export_emf(SPDocument* doc, gchar const* uri, char const *mime); #endif //WIN32 static void do_query_dimension (SPDocument *doc, bool extent, NR::Dim2 const axis, const gchar *id); - +static void do_query_all (SPDocument *doc); +static void do_query_all_recurse (SPObject *o); static gchar *sp_global_printer = NULL; static gchar *sp_export_png = NULL; @@ -196,6 +198,7 @@ static gboolean sp_query_x = FALSE; static gboolean sp_query_y = FALSE; static gboolean sp_query_width = FALSE; static gboolean sp_query_height = FALSE; +static gboolean sp_query_all = FALSE; static gchar *sp_query_id = NULL; static int sp_new_gui = FALSE; static gboolean sp_vacuum_defs = FALSE; @@ -367,6 +370,11 @@ struct poptOption options[] = { N_("Query the height of the drawing or, if specified, of the object with --query-id"), NULL}, + {"query-all", 'S', + POPT_ARG_NONE, &sp_query_all, SP_ARG_QUERY_ALL, + N_("List id,x,y,w,h for all objects"), + NULL}, + {"query-id", 'I', POPT_ARG_STRING, &sp_query_id, SP_ARG_QUERY_ID, N_("The ID of the object whose dimensions are queried"), @@ -496,6 +504,8 @@ main(int argc, char **argv) || !strncmp(argv[i], "--query-width", 13) || !strcmp(argv[i], "-H") || !strncmp(argv[i], "--query-height", 14) + || !strcmp(argv[i], "-S") + || !strncmp(argv[i], "--query-all", 11) || !strcmp(argv[i], "-X") || !strncmp(argv[i], "--query-x", 13) || !strcmp(argv[i], "-Y") @@ -791,7 +801,9 @@ sp_main_console(int argc, char const **argv) do_export_emf(doc, sp_export_emf, "image/x-emf"); } #endif //WIN32 - if (sp_query_width || sp_query_height) { + if (sp_query_all) { + do_query_all (doc); + } else if (sp_query_width || sp_query_height) { do_query_dimension (doc, true, sp_query_width? NR::X : NR::Y, sp_query_id); } else if (sp_query_x || sp_query_y) { do_query_dimension (doc, false, sp_query_x? NR::X : NR::Y, sp_query_id); @@ -846,6 +858,43 @@ do_query_dimension (SPDocument *doc, bool extent, NR::Dim2 const axis, const gch } } +static void +do_query_all (SPDocument *doc) +{ + SPObject *o = NULL; + + o = SP_DOCUMENT_ROOT(doc); + + if (o) { + sp_document_ensure_up_to_date (doc); + do_query_all_recurse(o); + } +} + +static void +do_query_all_recurse (SPObject *o) +{ + SPItem *item = ((SPItem *) o); + if (o->id && SP_IS_ITEM(item)) { + NR::Maybe area = item->getBounds(sp_item_i2doc_affine(item)); + if (area) { + Inkscape::SVGOStringStream os; + os << o->id; + os << "," << area->min()[NR::X]; + os << "," << area->min()[NR::Y]; + os << "," << area->extent(NR::X); + os << "," << area->extent(NR::Y); + g_print ("%s\n", os.str().c_str()); + } + } + + SPObject *child = o->children; + while (child) { + do_query_all_recurse (child); + child = child->next; + } +} + static void sp_do_export_png(SPDocument *doc) -- 2.30.2