output: Use page_setup for parsing cairo page setup.
[pspp] / src / output / page-setup.c
index 4c9c99046433a982abef107299fb6702a2026eea..4c3ee8ec871420026aa7dc87363d1274fd0ad40c 100644 (file)
@@ -21,6 +21,8 @@
 #include <stdlib.h>
 #include <string.h>
 
+#include "output/options.h"
+
 #include "gl/xalloc.h"
 
 bool
@@ -95,3 +97,30 @@ page_setup_destroy (struct page_setup *ps)
       free (ps);
     }
 }
+
+static struct driver_option
+opt (struct driver_options *options, const char *key, const char *default_value)
+{
+  return driver_option_get (options, key, default_value);
+}
+
+struct page_setup *
+page_setup_parse (struct driver_options *o)
+{
+  struct page_setup *ps = xmalloc (sizeof *ps);
+  *ps = (struct page_setup) PAGE_SETUP_INITIALIZER;
+
+  enum { H = TABLE_HORZ, V = TABLE_VERT };
+  parse_paper_size (opt (o, "paper-size", ""), &ps->paper[H], &ps->paper[V]);
+
+  ps->margins[H][0] = parse_dimension (opt (o, "left-margin", ".5in"));
+  ps->margins[H][1] = parse_dimension (opt (o, "right-margin", ".5in"));
+  ps->margins[V][0] = parse_dimension (opt (o, "top-margin", ".5in"));
+  ps->margins[V][1] = parse_dimension (opt (o, "bottom-margin", ".5in"));
+
+  ps->object_spacing = parse_dimension (opt (o, "object-spacing", NULL));
+  if (ps->object_spacing <= 0)
+    ps->object_spacing = 12.0 / 72.0;
+
+  return ps;
+}