ultimatepp/uppdev/XLS/font.h
cxl 3cd394812c Merge continued
git-svn-id: svn://ultimatepp.org/upp/trunk@10263 f0d560ea-af0d-0410-9eb7-867de7ffcac7
2016-10-04 08:34:39 +00:00

441 lines
15 KiB
C++

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* This file is part of xlslib -- A multiplatform, C/C++ library
* for dynamic generation of Excel(TM) files.
*
* xlslib is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* xlslib 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with xlslib. If not, see <http://www.gnu.org/licenses/>.
*
* Copyright 2004 Yeico S. A. de C. V.
* Copyright 2008 David Hoerl
*
* $Source: /cvsroot/xlslib/xlslib/src/xlslib/font.h,v $
* $Revision: 1.2 $
* $Author: dhoerl $
* $Date: 2008/10/25 18:39:54 $
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* File description:
*
*
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
#ifndef FONT_H
#define FONT_H
#include <XLS/config.h>
#include <XLS/common.h>
#include <XLS/rectypes.h>
#include <XLS/record.h>
#include <XLS/colors.h>
namespace xlslib_core
{
// Bold style most used values
// (it can be a number of some range. See Documentation for details):
#define FONT_BOLDNESS_BOLD ((unsigned16_t)0x02bc)
#define FONT_BOLDNESS_HALF ((unsigned16_t)0x0226)
#define FONT_BOLDNESS_NORMAL ((unsigned16_t)0x0190)
#define FONT_BOLDNESS_DOUBLE ((unsigned16_t)0x0320)
typedef enum
{
BOLDNESS_BOLD = 0,
BOLDNESS_HALF,
BOLDNESS_NORMAL,
BOLDNESS_DOUBLE
} boldness_option_t;
// Super/subscript field option values
#define FONT_SCRIPT_NONE ((unsigned16_t)0x0000)
#define FONT_SCRIPT_SUPER ((unsigned16_t)0x0001)
#define FONT_SCRIPT_SUB ((unsigned16_t)0x0002)
typedef enum
{
SCRIPT_NONE = 0,
SCRIPT_SUPER,
SCRIPT_SUB
} script_option_t;
// Underline field option values:
#define FONT_UNDERLINE_NONE ((unsigned8_t)0x00)
#define FONT_UNDERLINE_SINGLE ((unsigned8_t)0x01)
#define FONT_UNDERLINE_DOUBLE ((unsigned8_t)0x02)
#define FONT_UNDERLINE_SINGLEACC ((unsigned8_t)0x21)
#define FONT_UNDERLINE_DOUBLEACC ((unsigned8_t)0x22)
typedef enum
{
UNDERLINE_NONE = 0,
UNDERLINE_SINGLE,
UNDERLINE_DOUBLE,
UNDERLINE_SINGLEACC,
UNDERLINE_DOUBLEACC
} underline_option_t;
// The following are default values used when the font's
// constructor is called without args:
#define FONT_DFLT_FAMILY ((unsigned8_t)0x00)
#define FONT_DFLT_CHARSET ((unsigned8_t)0x00)
#define FONT_DFLT_HEIGHT ((unsigned16_t)0x00c8)
#define FONT_DFLT_ATTRIBUTES ((unsigned16_t)0x0000)
#define FONT_DFLT_PALETTE ((unsigned16_t)0x7fff)
#define FONT_DFLT_FONTNAME ((std::string)"Arial")
#define FONT_RESERVED ((unsigned8_t)0x00)
// The font-record field offsets:
#define FONT_OFFSET_HEIGHT ((unsigned32_t) 4)
#define FONT_OFFSET_ATTRIBUTES ((unsigned32_t) 6)
#define FONT_OFFSET_PALETTE ((unsigned32_t) 8)
#define FONT_OFFSET_BOLDSTYLE ((unsigned32_t)10)
#define FONT_OFFSET_SCRIPT ((unsigned32_t)12)
#define FONT_OFFSET_UNDERLINE ((unsigned32_t)14)
#define FONT_OFFSET_FAMILY ((unsigned32_t)15)
#define FONT_OFFSET_CHARSET ((unsigned32_t)16)
#define FONT_OFFSET_NAMELENGTH ((unsigned32_t)18)
#define FONT_OFFSET_NAME ((unsigned32_t)19)
// The attribute bit or-masks:
#define FONT_ATTR_RESERVED0 ((unsigned16_t)0x0001)
#define FONT_ATTR_ITALIC ((unsigned16_t)0x0002)
#define FONT_ATTR_RESERVED1 ((unsigned16_t)0x0004)
#define FONT_ATTR_STRIKEOUT ((unsigned16_t)0x0008)
#define FONT_ATTR_OUTLINEMACH ((unsigned16_t)0x0010)
#define FONT_ATTR_SHADOWMACH ((unsigned16_t)0x0020)
#define FONT_ATTR_RESERVED2 ((unsigned16_t)0x00c0)
#define FONT_ATTR_UNUSED ((unsigned16_t)0xff00)
// Font colors
#define FONT_COLOR_CODE_BLACK ((unsigned16_t)(COLOR_CODE_BLACK))
#define FONT_COLOR_CODE_DARK_RED ((unsigned16_t)(COLOR_CODE_DARK_RED))
#define FONT_COLOR_CODE_RED ((unsigned16_t)(COLOR_CODE_RED))
#define FONT_COLOR_CODE_FUCSIA ((unsigned16_t)(COLOR_CODE_FUCSIA))
#define FONT_COLOR_CODE_COMBINED01 ((unsigned16_t)(COLOR_CODE_COMBINED01))
#define FONT_COLOR_CODE_COMBINED02 ((unsigned16_t)(COLOR_CODE_COMBINED02))
#define FONT_COLOR_CODE_COMBINED03 ((unsigned16_t)(COLOR_CODE_COMBINED03))
#define FONT_COLOR_CODE_COMBINED04 ((unsigned16_t)(COLOR_CODE_COMBINED04))
#define FONT_COLOR_CODE_COMBINED05 ((unsigned16_t)(COLOR_CODE_COMBINED05))
#define FONT_COLOR_CODE_COMBINED06 ((unsigned16_t)(COLOR_CODE_COMBINED06))
#define FONT_COLOR_CODE_OLIVE ((unsigned16_t)(COLOR_CODE_OLIVE))
#define FONT_COLOR_CODE_DARK_YELLOW ((unsigned16_t)(COLOR_CODE_DARK_YELLOW))
#define FONT_COLOR_CODE_COMBINED07 ((unsigned16_t)(COLOR_CODE_COMBINED07))
#define FONT_COLOR_CODE_YELLOW ((unsigned16_t)(COLOR_CODE_YELLOW))
#define FONT_COLOR_CODE_LIGHT_YELLOW ((unsigned16_t)(COLOR_CODE_LIGHT_YELLOW))
#define FONT_COLOR_CODE_DARK_GREEN ((unsigned16_t)(COLOR_CODE_DARK_GREEN))
#define FONT_COLOR_CODE_GREEN ((unsigned16_t)(COLOR_CODE_GREEN))
#define FONT_COLOR_CODE_COMBINED08 ((unsigned16_t)(COLOR_CODE_COMBINED08))
#define FONT_COLOR_CODE_LIVING_GREEN ((unsigned16_t)(COLOR_CODE_LIVING_GREEN))
#define FONT_COLOR_CODE_LIGHT_GREEN ((unsigned16_t)(COLOR_CODE_LIGHT_GREEN))
#define FONT_COLOR_CODE_COMBINED09 ((unsigned16_t)(COLOR_CODE_COMBINED09))
#define FONT_COLOR_CODE_BLUE_GREEN ((unsigned16_t)(COLOR_CODE_BLUE_GREEN))
#define FONT_COLOR_CODE_AQUAMARINA ((unsigned16_t)(COLOR_CODE_AQUAMARINA))
#define FONT_COLOR_CODE_TURQOISE ((unsigned16_t)(COLOR_CODE_TURQOISE))
#define FONT_COLOR_CODE_COMBINED10 ((unsigned16_t)(COLOR_CODE_COMBINED10))
#define FONT_COLOR_CODE_DARK_BLUE ((unsigned16_t)(COLOR_CODE_DARK_BLUE))
#define FONT_COLOR_CODE_BLUE ((unsigned16_t)(COLOR_CODE_BLUE))
#define FONT_COLOR_CODE_LIGHT_BLUE ((unsigned16_t)(COLOR_CODE_LIGHT_BLUE))
#define FONT_COLOR_CODE_SKY_BLUE ((unsigned16_t)(COLOR_CODE_SKY_BLUE))
#define FONT_COLOR_CODE_COMBINED11 ((unsigned16_t)(COLOR_CODE_COMBINED11))
#define FONT_COLOR_CODE_INDIGO ((unsigned16_t)(COLOR_CODE_INDIGO))
#define FONT_COLOR_CODE_BLUE_GRAY ((unsigned16_t)(COLOR_CODE_BLUE_GRAY))
#define FONT_COLOR_CODE_VIOLET ((unsigned16_t)(COLOR_CODE_VIOLET))
#define FONT_COLOR_CODE_PLUM ((unsigned16_t)(COLOR_CODE_PLUM))
#define FONT_COLOR_CODE_LAVANDER ((unsigned16_t)(COLOR_CODE_LAVANDER))
#define FONT_COLOR_CODE_COMBINED12 ((unsigned16_t)(COLOR_CODE_COMBINED12))
#define FONT_COLOR_CODE_GRAY50 ((unsigned16_t)(COLOR_CODE_GRAY50))
#define FONT_COLOR_CODE_GRAY40 ((unsigned16_t)(COLOR_CODE_GRAY40))
#define FONT_COLOR_CODE_GRAY25 ((unsigned16_t)(COLOR_CODE_GRAY25))
#define FONT_COLOR_CODE_WHITE ((unsigned16_t)(COLOR_CODE_WHITE))
/*
******************************
CFont class declaration
******************************
*/
typedef struct
{
unsigned16_t index;
std::string name;
unsigned16_t height;
boldness_option_t boldstyle;
underline_option_t underline;
script_option_t script;
color_name_t color;
unsigned16_t attributes;
unsigned8_t family;
unsigned8_t charset;
} font_init_t;
struct font_i
{
virtual void fontname(std::string fntname) = 0;
virtual void fontheight(unsigned16_t fntheight) = 0;
virtual void fontbold(boldness_option_t fntboldness) = 0;
virtual void fontunderline(underline_option_t fntunderline) = 0;
virtual void fontscript(script_option_t fntscript) = 0;
virtual void fontcolor(color_name_t fntcolor) = 0;
virtual void fontattr(unsigned16_t attr) = 0;
virtual void fontitalic(bool italic) = 0;
virtual void fontstrikeout(bool so) = 0;
virtual void fontoutline(bool ol) = 0;
virtual void fontshadow(bool sh) = 0;
};
class font_t
{
public:
font_t();
font_t(unsigned16_t index, std::string name,
unsigned16_t height, boldness_option_t boldstyle,
underline_option_t underline, script_option_t script,
color_name_t color, unsigned16_t attributes,
unsigned8_t family, unsigned8_t charset);
font_t(const font_init_t& fontinit);
virtual ~font_t() {};
void MarkUsed();
bool IsUsed();
unsigned16_t Usage(){return m_usage_counter;};
/* FONT Index wrappers*/
void SetIndex(unsigned16_t fntidx);
unsigned16_t GetIndex(void);
/* FONT Index wrappers*/
void SetName(std::string fntname);
std::string GetName(void);
/* FONT height wrappers*/
void SetHeight(unsigned16_t fntheight);
unsigned16_t GetHeight(void);
/* FONT boldstyle wrappers*/
void SetBoldStyle(boldness_option_t fntboldness);
unsigned16_t GetBoldStyle(void);
/* FONT underline wrappers*/
void SetUnderlineStyle(underline_option_t fntunderline);
unsigned8_t GetUnderlineStyle(void);
/* FONT script wrappers*/
void SetScriptStyle(script_option_t fntscript);
unsigned16_t GetScriptStyle(void);
/* FONT script wrappers*/
void SetColor(color_name_t fntcolor);
unsigned16_t GetColor(void);
void SetItalic(bool italic);
void SetStrikeout(bool so);
/* FONT attributes wrappers */
void SetAttributes(unsigned16_t attr);
unsigned16_t GetAttributes(void);
// OSX only
void SetOutline(bool ol);
void SetShadow(bool sh);
// Miscellaneous;
void SetFamily(unsigned8_t fam);
unsigned8_t GetFamily(void);
void SetCharset(unsigned8_t chrset);
unsigned8_t GetCharset(void);
unsigned32_t GetSignature();
void operator=(font_t& right);
private:
unsigned16_t index;
std::string name;
unsigned16_t height;
unsigned16_t boldstyle;
unsigned8_t underline;
unsigned16_t script;
unsigned16_t color;
unsigned16_t attributes;
unsigned8_t family;
unsigned8_t charset;
unsigned16_t m_usage_counter;
void UpdateSignature();
unsigned32_t m_signature;
bool m_sigchanged;
static const unsigned16_t BOLD_OPTION_TABLE[];
static const unsigned16_t SCRIPT_OPTION_TABLE[];
static const unsigned8_t UNDERLINE_OPTION_TABLE[];
static const unsigned16_t COLOR_OPTION_TABLE[];
};
class fontbysig
{
public:
bool operator()(font_t* a, font_t* b) const
{
return (a->GetSignature() < b->GetSignature() ? true : false );
};
};
typedef std::set<xlslib_core::font_t*,fontbysig XLSLIB_DFLT_ALLOCATOR> Font_Set_t;
typedef Font_Set_t::iterator Font_Set_Itor_t;
typedef std::list<xlslib_core::font_t* XLSLIB_DFLT_ALLOCATOR> Font_List_t;
typedef Font_List_t::iterator Font_List_Itor_t;
class CFont: public CRecord
{
protected:
public:
CFont(std::string name = FONT_DFLT_FONTNAME,
unsigned16_t height = FONT_DFLT_HEIGHT,
unsigned16_t boldstyle = FONT_BOLDNESS_NORMAL,
unsigned8_t underline = FONT_UNDERLINE_NONE,
unsigned16_t script = FONT_SCRIPT_NONE,
unsigned16_t color = FONT_DFLT_PALETTE,
unsigned16_t attributes = FONT_DFLT_ATTRIBUTES,
unsigned8_t family = FONT_DFLT_FAMILY,
unsigned8_t charset = FONT_DFLT_CHARSET );
CFont(font_t* fontdef);
~CFont();
int SetName(std::string& name);
int GetName(std::string& name);
int SetBoldValue(unsigned16_t boldstyle);
unsigned16_t GetBoldValue(void);
int SetUnderlineStyle(unsigned8_t ul);
unsigned8_t GetUnderlineStyle(void);
int SetScriptStyle(unsigned16_t script);
unsigned16_t GetScriptStyle(void);
int SetColorIndex(unsigned16_t color);
unsigned16_t GetColorIndex(void);
int SetAttributes(unsigned16_t attr);
unsigned16_t GetAttributes(void);
int SetFamily(unsigned8_t family);
unsigned8_t GetFamily(void);
int SetCharSet(unsigned8_t charset);
unsigned8_t GetCharSet(void);
};
}
#endif //FONT_H
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* $Log: font.h,v $
* Revision 1.2 2008/10/25 18:39:54 dhoerl
* 2008
*
* Revision 1.1.1.1 2004/08/27 16:31:46 darioglz
* Initial Import.
*
* Revision 1.17 2004/04/06 22:35:43 dgonzalez
* + Added namespace xlslib_core to isolate the core xlslib library names.
*
* Revision 1.16 2004/04/06 15:10:24 dgonzalez
* + Added keys to generate distributable headers
*
* Revision 1.15 2004/01/29 03:18:55 dgonzalez
* + Using the config.h file
*
* Revision 1.14 2004/01/15 17:17:31 dgonzalez
* + The memory allocator used by STL-containers is defined #conditionally.
*
* Revision 1.13 2003/12/09 19:04:21 dgonzalez
* + Not a real difference
*
* Revision 1.12 2003/12/05 01:18:27 dgonzalez
* + Common include files were placed in common.h (and this file was
* included instead.
* + The font_interface was redefined to something lighter. Due name
* clashing with xf_i when these interfaces were defined as parent of
* cell_t.
* + Signature was implemented to font_t. Any interface function that modi
* fies any data member of the class set a flag for later signature
* update. The signature is CRC based and is used to uniquify font_t
* instances inside an stl-set-container.
* + The fontbysig functor was added for being used in the set container
* as a sorting criteria. It is based on the signature.
* + The stl-set-container of pointers to font_t* typedef was defined here.
*
* Revision 1.11 2003/11/29 17:53:49 dgonzalez
* + The larger functions were uninlined.
* + The virtual pure interface font_i was defined
*
* Revision 1.10 2003/11/28 01:31:30 dgonzalez
* + The MarkUsed functionality was added (similar to xf_t)
*
* Revision 1.9 2003/11/26 16:49:26 dgonzalez
* + Indented and untabified
*
* Revision 1.8 2003/11/04 17:07:58 dgonzalez
* + Changed the initialization of CGlobalRecord's defaults for compatibility with
* MSVC++. The original code was left commented out for future use.
*
* Revision 1.7 2003/11/04 01:04:42 dgonzalez
* + All the list containers changed to manage pointers.
* + Valgrind utility reports 960 posible memory leaks. TODO: Verify it
*
* Revision 1.6 2003/11/03 16:58:56 dgonzalez
* + The following typedefed enums were added to improve typechecking in the font
* definition:
* - boldness_option_t
* - script_option_t
* - underline_option_t
* + Font colors were defined based in the color codes defined in the module colors.h.
* + font_t is now implemented as a class. A full set of wrapper functions were implemented
* inline for Get/Set font properties.
* + font_init_t struct was added for storing initialization values of default font of a
* document.
* + The following lookup tables were added to retrieve the field's options used for setting
* the font's values.
*
* Revision 1.5 2003/10/24 23:24:32 dgonzalez
* + Added CVS-Keyword substitution.
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */