// 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__