diff --git a/src/Makefile.am b/src/Makefile.am
index cc6bc1a3..737090f7 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -10,6 +10,7 @@ abg-hash.h \
abg-writer.h \
abg-config.h \
abg-version.h \
+abg-viz-common.h \
abg-viz-dot.h \
abg-viz-svg.h
@@ -21,6 +22,7 @@ abg-libxml-utils.cc \
abg-hash.cc \
abg-writer.cc \
abg-config.cc \
+abg-viz-common.cc \
abg-viz-dot.cc \
abg-viz-svg.cc
diff --git a/src/Makefile.in b/src/Makefile.in
index 1047fc8a..0669167e 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -99,7 +99,7 @@ libabigail_la_LIBADD =
am__objects_1 =
am_libabigail_la_OBJECTS = $(am__objects_1) abg-ir.lo abg-reader.lo \
abg-corpus.lo abg-libxml-utils.lo abg-hash.lo abg-writer.lo \
- abg-config.lo abg-viz-dot.lo abg-viz-svg.lo
+ abg-config.lo abg-viz-common.lo abg-viz-dot.lo abg-viz-svg.lo
libabigail_la_OBJECTS = $(am_libabigail_la_OBJECTS)
AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
@@ -309,6 +309,7 @@ abg-hash.h \
abg-writer.h \
abg-config.h \
abg-version.h \
+abg-viz-common.h \
abg-viz-dot.h \
abg-viz-svg.h
@@ -320,6 +321,7 @@ abg-libxml-utils.cc \
abg-hash.cc \
abg-writer.cc \
abg-config.cc \
+abg-viz-common.cc \
abg-viz-dot.cc \
abg-viz-svg.cc
@@ -413,6 +415,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/abg-ir.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/abg-libxml-utils.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/abg-reader.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/abg-viz-common.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/abg-viz-dot.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/abg-viz-svg.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/abg-writer.Plo@am__quote@
diff --git a/src/abg-viz-common.cc b/src/abg-viz-common.cc
new file mode 100644
index 00000000..60b1cb43
--- /dev/null
+++ b/src/abg-viz-common.cc
@@ -0,0 +1,154 @@
+
+// Copyright (C) 2013 Free Software Foundation, Inc.
+//
+// This file is part of the GNU Application Binary Interface Generic
+// Analysis and Instrumentation Library (libabigail). This library is
+// free software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the Free
+// Software Foundation; either version 3, or (at your option) any
+// later version.
+
+// This library is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License
+// and a copy of the GCC Runtime Library Exception along with this
+// program; see the files COPYING3 and COPYING.RUNTIME respectively.
+// If not, see .
+
+// -*- mode: C++ -*-
+
+#include "abg-viz-svg.h"
+#include
+#include
+
+namespace abigail
+{
+
+using std::ostream;
+using std::ostringstream;
+
+// Constants.
+
+// Using pixels, units vs. representation
+// const canvas ansi_letter_mm = { units::millimeter, 215.9, 279.4 };
+// const canvas iso_a4_mm = { units::millimeter, 210, 297 };
+// const canvas ansi_letter_px = { units::pixel, 765, 990 };
+// const canvas iso_a4_px = { units::pixel, 765, 990 };
+const canvas ansi_letter_canvas = { units::pixel, 765, 990 };
+const canvas iso_a4_canvas = { units::pixel, 765, 990 };
+
+const typography arial_typo = \
+ { "'ArialMT'", 12, color::black, R"(text-anchor="middle")"};
+
+const typography source_code_pro_typo = \
+ { "Source Code Pro Light", 12, color::black, R"(text-anchor="middle")"};
+
+const typography roboto_typo = \
+ { "Roboto Light", 12, color::black, R"(text-anchor="middle")"};
+
+const row::style primary_row_sty = { color::white, color::black, "" };
+const row::style base_row_sty = { color::white, color::gray75, "" };
+const row::style member_row_sty = { color::black, color::gray25, "" };
+const row::style implementation_row_sty = { color::black, color::white, "" };
+
+
+// XXX Do not export.
+void
+string_replace(std::string& target, const std::string& match,
+ const std::string& replace)
+{
+ size_t pos = 0;
+ while((pos = target.find(match, pos)) != std::string::npos)
+ {
+ target.replace(pos, match.length(), replace);
+ pos += replace.length();
+ }
+}
+
+std::string
+units_to_string(units __val)
+{
+ std::string ret;
+ switch (__val)
+ {
+ case units::millimeter:
+ ret = "mm";
+ break;
+ case units::pixel:
+ ret = "px";
+ break;
+ default:
+ throw std::logic_error("abigail::units_to_string units not recognized");
+ break;
+ }
+ return ret;
+}
+
+std::string
+color_to_string(color __val)
+{
+ std::string ret;
+ switch (__val)
+ {
+ case color::white:
+ ret = "white";
+ break;
+ case color::gray25:
+ ret = "gainsboro";
+ break;
+ case color::gray75:
+ ret = "slategray";
+ break;
+ case color::black:
+ ret = "black";
+ break;
+ default:
+ throw std::logic_error("abigail::color_to_string color not recognized");
+ break;
+ }
+ return ret;
+}
+
+std::string
+typography::anchor_to_string(anchor __val) const
+{
+ std::string ret;
+ switch (__val)
+ {
+ case start:
+ ret = "start";
+ break;
+ case middle:
+ ret = "middle";
+ break;
+ default:
+ throw std::logic_error("abigail::anchor_to_string anchor not recognized");
+ break;
+ }
+ return ret;
+}
+
+
+std::string
+typography::to_attribute(anchor __a) const
+{
+ const std::string name("__name");
+ const std::string size("__size");
+ const std::string anchor("__anchor");
+ std::string strip = R"(font-family="__name" font-size="__size" text-anchor="__anchor")";
+ string_replace(strip, name, _M_face);
+ string_replace(strip, size, std::to_string(_M_size));
+ string_replace(strip, anchor, anchor_to_string(__a));
+
+ // NB: Add in extra _M_style if necessary.
+ return strip;
+}
+
+}//end namespace abigail
diff --git a/src/abg-viz-common.h b/src/abg-viz-common.h
new file mode 100644
index 00000000..43212624
--- /dev/null
+++ b/src/abg-viz-common.h
@@ -0,0 +1,121 @@
+// Copyright (C) 2013 Free Software Foundation, Inc.
+//
+// This file is part of the GNU Application Binary Interface Generic
+// Analysis and Instrumentation Library (libabigail). This library is
+// free software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the Free
+// Software Foundation; either version 3, or (at your option) any
+// later version.
+
+// This library is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+
+// Under Section 7 of GPL version 3, you are granted additional
+// permissions described in the GCC Runtime Library Exception, version
+// 3.1, as published by the Free Software Foundation.
+
+// You should have received a copy of the GNU General Public License
+// and a copy of the GCC Runtime Library Exception along with this
+// program; see the files COPYING3 and COPYING.RUNTIME respectively.
+// If not, see .
+
+// -*- mode: C++ -*-
+/// @file
+
+#ifndef __ABG_VIZ_COMMON_H__
+#define __ABG_VIZ_COMMON_H__
+
+#include //stringstream
+#include
+#include
+#include
+
+namespace abigail
+{
+
+/// Measurement abstraction type, conversion function.
+enum class units
+{
+ // NB: 1 pixel = .264583 mm
+ millimeter, // mm
+ pixel // px
+};
+
+std::string
+units_to_string(units);
+
+typedef unsigned short units_type;
+
+
+/// Color, conversion function.
+enum class color
+{
+ white,
+ gray25, // gainsboro
+ gray75, // slategray
+ black
+};
+
+std::string
+color_to_string(color);
+
+
+/*
+ Page/Canvas/Drawing area description.
+ Size, origin location in 2D (x,y), heigh, width
+
+ ANSI Letter mm == (units::millimeter, 215.9, 279.4);
+ ANSI Letter pixels == (units::pixel, 765, 990);
+ ISO A4 mm == (units::millimeter, 210, 297);
+ ISO A4 pixels == (units::pixel, 744.09, 1052.36);
+ */
+struct canvas
+{
+ units _M_units;
+ units_type _M_width;
+ units_type _M_height;
+};
+
+/// Useful canvas constants.
+extern const canvas ansi_letter_canvas;
+extern const canvas iso_a4_canvas;
+
+
+/*
+ Character rendering, type, fonts, styles.
+
+ Expect to keep changing the output, so use this abstraction to set
+ styling defaults, so that one can just assign types instead of doing
+ a bunch of search-and-replace operations when changing type
+ characteristics.
+ */
+struct typography
+{
+ enum anchor { start, middle };
+
+ std::string _M_face; // System font name
+ unsigned short _M_size; // Display size
+ color _M_color;
+ std::string _M_style; // Any other attributes
+
+ std::string
+ to_attribute(anchor) const;
+
+ std::string
+ anchor_to_string(anchor) const;
+};
+
+/// Useful typography constants.
+extern const typography arial_typo;
+extern const typography source_code_pro_typo;
+extern const typography roboto_light_typo;
+
+// Utility function, like regex_replace.
+void
+string_replace(std::string&, const std::string&, const std::string&);
+
+}// end namespace abigail
+
+#endif //__ABG_VIZ_COMMON_H__
diff --git a/src/abg-viz-dot.h b/src/abg-viz-dot.h
index de2830c4..5bf03f5c 100644
--- a/src/abg-viz-dot.h
+++ b/src/abg-viz-dot.h
@@ -24,95 +24,14 @@
// -*- mode: C++ -*-
/// @file
-#ifndef __ABG_VIZ_SVG_H__
-#define __ABG_VIZ_SVG_H__
-
-#include //stringstream
-#include
-#include
-#include
+#ifndef __ABG_VIZ_DOT_H__
+#define __ABG_VIZ_DOT_H__
+#include
namespace abigail
{
-/// Measurement abstraction type, conversion function.
-enum class units
-{
- // NB: 1 pixel = .264583 mm
- millimeter, // mm
- pixel // px
-};
-
-std::string
-units_to_string(units);
-
-typedef unsigned short units_type;
-
-
-/// Color, conversion function.
-enum class color
-{
- white,
- gray25, // gainsboro
- gray75, // slategray
- black
-};
-
-std::string
-color_to_string(color);
-
-
-/*
- Page/Canvas/Drawing area description.
- Size, origin location in 2D (x,y), heigh, width
-
- ANSI Letter mm == (units::millimeter, 215.9, 279.4);
- ANSI Letter pixels == (units::pixel, 765, 990);
- ISO A4 mm == (units::millimeter, 210, 297);
- ISO A4 pixels == (units::pixel, 744.09, 1052.36);
- */
-struct canvas
-{
- units _M_units;
- units_type _M_width;
- units_type _M_height;
-};
-
-/// Useful canvas constants.
-extern const canvas ansi_letter_canvas;
-extern const canvas iso_a4_canvas;
-
-
-/*
- Character rendering, type, fonts, styles.
-
- Expect to keep changing the output, so use this abstraction to set
- styling defaults, so that one can just assign types instead of doing
- a bunch of search-and-replace operations when changing type
- characteristics.
- */
-struct typography
-{
- enum anchor { start, middle };
-
- std::string _M_face; // System font name
- unsigned short _M_size; // Display size
- color _M_color;
- std::string _M_style; // Any other attributes
-
- std::string
- to_attribute(anchor) const;
-
- std::string
- anchor_to_string(anchor) const;
-};
-
-/// Useful typography constants.
-extern const typography arial_typo;
-extern const typography source_code_pro_typo;
-extern const typography roboto_light_typo;
-
/// Base class for graph nodes.
struct node_base
{ };
diff --git a/src/abg-viz-svg.cc b/src/abg-viz-svg.cc
index d6706580..47301542 100644
--- a/src/abg-viz-svg.cc
+++ b/src/abg-viz-svg.cc
@@ -31,127 +31,6 @@
namespace abigail
{
-using std::ostream;
-using std::ostringstream;
-
-// Constants.
-
-// Using pixels, units vs. representation
-// const canvas ansi_letter_mm = { units::millimeter, 215.9, 279.4 };
-// const canvas iso_a4_mm = { units::millimeter, 210, 297 };
-// const canvas ansi_letter_px = { units::pixel, 765, 990 };
-// const canvas iso_a4_px = { units::pixel, 765, 990 };
-const canvas ansi_letter_canvas = { units::pixel, 765, 990 };
-const canvas iso_a4_canvas = { units::pixel, 765, 990 };
-
-const typography arial_typo = \
- { "'ArialMT'", 12, color::black, R"(text-anchor="middle")"};
-
-const typography source_code_pro_typo = \
- { "Source Code Pro Light", 12, color::black, R"(text-anchor="middle")"};
-
-const typography roboto_typo = \
- { "Roboto Light", 12, color::black, R"(text-anchor="middle")"};
-
-const row::style primary_row_sty = { color::white, color::black, "" };
-const row::style base_row_sty = { color::white, color::gray75, "" };
-const row::style member_row_sty = { color::black, color::gray25, "" };
-const row::style implementation_row_sty = { color::black, color::white, "" };
-
-
-// Utility function, like regex_replace.
-void
-string_replace(std::string& target, const std::string& match,
- const std::string& replace)
-{
- size_t pos = 0;
- while((pos = target.find(match, pos)) != std::string::npos)
- {
- target.replace(pos, match.length(), replace);
- pos += replace.length();
- }
-}
-
-std::string
-units_to_string(units __val)
-{
- std::string ret;
- switch (__val)
- {
- case units::millimeter:
- ret = "mm";
- break;
- case units::pixel:
- ret = "px";
- break;
- default:
- throw std::logic_error("abigail::units_to_string units not recognized");
- break;
- }
- return ret;
-}
-
-std::string
-color_to_string(color __val)
-{
- std::string ret;
- switch (__val)
- {
- case color::white:
- ret = "white";
- break;
- case color::gray25:
- ret = "gainsboro";
- break;
- case color::gray75:
- ret = "slategray";
- break;
- case color::black:
- ret = "black";
- break;
- default:
- throw std::logic_error("abigail::color_to_string color not recognized");
- break;
- }
- return ret;
-}
-
-std::string
-typography::anchor_to_string(anchor __val) const
-{
- std::string ret;
- switch (__val)
- {
- case start:
- ret = "start";
- break;
- case middle:
- ret = "middle";
- break;
- default:
- throw std::logic_error("abigail::anchor_to_string anchor not recognized");
- break;
- }
- return ret;
-}
-
-
-std::string
-typography::to_attribute(anchor __a) const
-{
- const std::string name("__name");
- const std::string size("__size");
- const std::string anchor("__anchor");
- std::string strip = R"(font-family="__name" font-size="__size" text-anchor="__anchor")";
- string_replace(strip, name, _M_face);
- string_replace(strip, size, std::to_string(_M_size));
- string_replace(strip, anchor, anchor_to_string(__a));
-
- // NB: Add in extra _M_style if necessary.
- return strip;
-}
-
-
void
svg::write()
{
diff --git a/src/abg-viz-svg.h b/src/abg-viz-svg.h
index f935540a..214a3404 100644
--- a/src/abg-viz-svg.h
+++ b/src/abg-viz-svg.h
@@ -27,93 +27,11 @@
#ifndef __ABG_VIZ_SVG_H__
#define __ABG_VIZ_SVG_H__
-#include //stringstream
-#include
-#include
-#include
-
+#include
namespace abigail
{
-/// Measurement abstraction type, conversion function.
-enum class units
-{
- // NB: 1 pixel = .264583 mm
- millimeter, // mm
- pixel // px
-};
-
-std::string
-units_to_string(units);
-
-typedef unsigned short units_type;
-
-
-/// Color, conversion function.
-enum class color
-{
- white,
- gray25, // gainsboro
- gray75, // slategray
- black
-};
-
-std::string
-color_to_string(color);
-
-
-/*
- Page/Canvas/Drawing area description.
- Size, origin location in 2D (x,y), heigh, width
-
- ANSI Letter mm == (units::millimeter, 215.9, 279.4);
- ANSI Letter pixels == (units::pixel, 765, 990);
- ISO A4 mm == (units::millimeter, 210, 297);
- ISO A4 pixels == (units::pixel, 744.09, 1052.36);
- */
-struct canvas
-{
- units _M_units;
- units_type _M_width;
- units_type _M_height;
-};
-
-/// Useful canvas constants.
-extern const canvas ansi_letter_canvas;
-extern const canvas iso_a4_canvas;
-
-
-/*
- Character rendering, type, fonts, styles.
-
- Expect to keep changing the output, so use this abstraction to set
- styling defaults, so that one can just assign types instead of doing
- a bunch of search-and-replace operations when changing type
- characteristics.
- */
-struct typography
-{
- enum anchor { start, middle };
-
- std::string _M_face; // System font name
- unsigned short _M_size; // Display size
- color _M_color;
- std::string _M_style; // Any other attributes
-
- std::string
- to_attribute(anchor) const;
-
- std::string
- anchor_to_string(anchor) const;
-};
-
-/// Useful typography constants.
-extern const typography arial_typo;
-extern const typography source_code_pro_typo;
-extern const typography roboto_light_typo;
-
-
/*
Row displaying one element of member data.