// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -*- mode: C++ -*- // // Copyright (C) 2013-2022 Red Hat, Inc. #include #include #include "abg-internal.h" // ABG_BEGIN_EXPORT_DECLARATIONS #include "abg-viz-svg.h" ABG_END_EXPORT_DECLARATIONS // 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 style primary_row_sty = { color::white, color::black, "" }; const style base_row_sty = { color::white, color::gray75, "" }; const style member_row_sty = { color::black, color::gray25, "" }; const 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_attributes if necessary. return strip; } }//end namespace abigail