Scribus
Open source desktop publishing at your fingertips
charstyle.h
1 /*
2  For general Scribus (>=1.3.2) copyright and licensing information please refer
3  to the COPYING file provided with the program. Following this notice may exist
4  a copyright and/or license notice that predates the release of Scribus 1.3.2
5  for which a new license (GPL+exception) is in place.
6  */
7 /***************************************************************************
8 * *
9 * This program is free software; you can redistribute it and/or modify *
10 * it under the terms of the GNU General Public License as published by *
11 * the Free Software Foundation; either version 2 of the License, or *
12 * (at your option) any later version. *
13 * *
14 ***************************************************************************/
15 
16 #ifndef CHARSTYLE_H
17 #define CHARSTYLE_H
18 
19 
20 #include "style.h"
21 
22 class ResourceCollection;
23 
24 enum StyleFlagValue {
25  ScStyle_None = 0,
26  ScStyle_Default = 0,
27  ScStyle_Superscript = 1,
28  ScStyle_Subscript = 2,
29  ScStyle_Outline = 4,
30  ScStyle_Underline = 8,
31  ScStyle_Strikethrough = 16,
32  ScStyle_AllCaps = 32,
33  ScStyle_SmallCaps = 64,
34  ScStyle_HyphenationPossible=128, //Hyphenation possible here (Soft Hyphen)
35  ScStyle_Shadowed = 256,
36  ScStyle_UnderlineWords= 512,
37  xScStyle_Reserved01 = 1024, //free, not used in the moment
38  xScStyle_DropCap = 2048,
39  xScStyle_SuppressSpace = 4096,//internal use in PageItem (Suppresses spaces when in Block alignment)
40  xScStyle_SoftHyphenVisible=8192, //Soft Hyphen visible at line end
41  xScStyle_StartOfLine = 16384,
42  ScStyle_UserStyles = 1919, // == 1024 + 512 + 256 + 64 + 32 + 16 + 8 + 4 + 2 + 1
43  ScStyle_NonUserStyles = 30848, // == 128 + 2048 + 4096 + 8192 + 16384
44  ScStyle_All = 65535
45 };
46 
47 class SCRIBUS_API StyleFlag
48 {
49 public:
50 
51  StyleFlagValue value;
52 
53  StyleFlag(void) { value = ScStyle_Default; }
54  StyleFlag(StyleFlagValue val) { value = val; }
55  StyleFlag(int val) { value = static_cast<StyleFlagValue>(val); }
56 
57  operator StyleFlagValue() const { return value; }
58 
59  QStringList featureList() const;
60 
61  StyleFlag& operator= (StyleFlagValue val) { value = val; return *this;}
62  StyleFlag& operator&= (const StyleFlag& right);
63  StyleFlag& operator|= (const StyleFlag& right);
64  StyleFlag operator& (const StyleFlag& right);
65  StyleFlag operator& (int right);
66  StyleFlag operator| (const StyleFlag& right);
67  StyleFlag operator^ (const StyleFlag& right);
68  StyleFlag operator^ (int right);
69  StyleFlag operator~ ();
70 
71  bool operator== (const StyleFlag& right) const;
72  bool operator== (const StyleFlagValue right) const;
73  bool operator== (int right) const;
74  bool operator!= (const StyleFlag& right) const;
75  bool operator!= (const StyleFlagValue right) const;
76 };
77 
78 class SCRIBUS_API CharStyle : public Style {
79 public:
80 
81  static const QString INHERIT;
82  static const QString BOLD;
83  static const QString ITALIC;
84  static const QString UNDERLINE;
85  static const QString UNDERLINEWORDS;
86  static const QString STRIKETHROUGH;
87  static const QString SUPERSCRIPT;
88  static const QString SUBSCRIPT;
89  static const QString OUTLINE;
90  static const QString SHADOWED;
91  static const QString ALLCAPS;
92  static const QString SMALLCAPS;
93 
94  CharStyle() : Style() {
95 #define ATTRDEF(attr_TYPE, attr_GETTER, attr_NAME, attr_DEFAULT) \
96  m_##attr_NAME = attr_DEFAULT; \
97  inh_##attr_NAME = true;
98 #include "charstyle.attrdefs.cxx"
99 #undef ATTRDEF
100  m_isDefaultStyle=false;
101  };
102 
103  CharStyle(const ScFace& font, int size, StyleFlag style = ScStyle_Default) : Style() {
104 #define ATTRDEF(attr_TYPE, attr_GETTER, attr_NAME, attr_DEFAULT) \
105  m_##attr_NAME = attr_DEFAULT; \
106  inh_##attr_NAME = true;
107 #include "charstyle.attrdefs.cxx"
108 #undef ATTRDEF
109  m_isDefaultStyle=false;
110  setFont(font);
111  setFontSize(size);
112  setEffects(style);
113  };
114 
115  CharStyle(const CharStyle & other);
116 
117  CharStyle & operator=(const CharStyle & other);
118 
119  static const Xml_string saxxDefaultElem;
120  static void desaxeRules(const Xml_string& prefixPattern, desaxe::Digester& ruleset, Xml_string elemtag = saxxDefaultElem);
121 
122  virtual void saxx(SaxHandler& handler, const Xml_string& elemtag) const;
123  virtual void saxx(SaxHandler& handler) const { saxx(handler, saxxDefaultElem); }
124 
125 
126  void getNamedResources(ResourceCollection& lists) const;
127  void replaceNamedResources(ResourceCollection& newNames);
128 
129  QString displayName() const;
130 
131  void update(const StyleContext * b);
132 
135  void updateFeatures();
136 
137  bool equiv(const Style& other) const;
138 
139  void applyCharStyle(const CharStyle & other);
140  void eraseCharStyle(const CharStyle & other);
141  void setStyle(const CharStyle & other);
142  void erase() { eraseCharStyle(*this); }
143  void eraseDirectFormatting();
144 
145  QString asString() const;
146 
148  const StyleFlag effects() const { validate(); return m_Effects; }
149  void setEffects(StyleFlag flags) { m_Effects = flags; }
150 
151 
154 #define ATTRDEF(attr_TYPE, attr_GETTER, attr_NAME, attr_DEFAULT) \
155  const attr_TYPE &attr_GETTER() const { validate(); return m_##attr_NAME; }
156 #include "charstyle.attrdefs.cxx"
157 #undef ATTRDEF
158 
161 #define ATTRDEF(attr_TYPE, attr_GETTER, attr_NAME, attr_DEFAULT) \
162  void set##attr_NAME(attr_TYPE v) { m_##attr_NAME = v; inh_##attr_NAME = false; }
163 #include "charstyle.attrdefs.cxx"
164 #undef ATTRDEF
165 
168 #define ATTRDEF(attr_TYPE, attr_GETTER, attr_NAME, attr_DEFAULT) \
169  void reset##attr_NAME() { m_##attr_NAME = attr_DEFAULT; inh_##attr_NAME = true; }
170 #include "charstyle.attrdefs.cxx"
171 #undef ATTRDEF
172 
174 #define ATTRDEF(attr_TYPE, attr_GETTER, attr_NAME, attr_DEFAULT) \
175  bool isInh##attr_NAME() const { return inh_##attr_NAME; }
176 #include "charstyle.attrdefs.cxx"
177 #undef ATTRDEF
178 
179 
181 #define ATTRDEF(attr_TYPE, attr_GETTER, attr_NAME, attr_DEFAULT) \
182  bool isDef##attr_NAME() const { \
183  if ( !inh_##attr_NAME ) return true; \
184  const CharStyle * par = dynamic_cast<const CharStyle*>(parentStyle()); \
185  return par && par->isDef##attr_NAME(); \
186  }
187 #include "charstyle.attrdefs.cxx"
188 #undef ATTRDEF
189 
190 
191 private:
192 
193  void runFeatures(const QStringList& featurelist, const CharStyle* parent);
194 
195  StyleFlag m_Effects;
196  // member declarations:
197 
198 #define ATTRDEF(attr_TYPE, attr_GETTER, attr_NAME, attr_DEFAULT) \
199  attr_TYPE m_##attr_NAME; \
200  bool inh_##attr_NAME;
201 #include "charstyle.attrdefs.cxx"
202 #undef ATTRDEF
203 };
204 
205 
206 inline CharStyle & CharStyle::operator=(const CharStyle & other)
207 {
208  static_cast<Style&>(*this) = static_cast<const Style&>(other);
209 #define ATTRDEF(attr_TYPE, attr_GETTER, attr_NAME, attr_DEFAULT) \
210  m_##attr_NAME = other.m_##attr_NAME; \
211  inh_##attr_NAME = other.inh_##attr_NAME;
212 #include "charstyle.attrdefs.cxx"
213 #undef ATTRDEF
214  m_Effects = other.m_Effects;
215 // m_context = NULL;
216  m_contextversion = -1;
217  return *this;
218 }
219 
220 inline CharStyle::CharStyle(const CharStyle & other) : Style(other)
221 {
222 #define ATTRDEF(attr_TYPE, attr_GETTER, attr_NAME, attr_DEFAULT) \
223  m_##attr_NAME = other.m_##attr_NAME; \
224  inh_##attr_NAME = other.inh_##attr_NAME;
225 #include "charstyle.attrdefs.cxx"
226 #undef ATTRDEF
227  m_Effects = other.m_Effects;
228 // m_context = NULL;
229  m_contextversion = -1;
230 }
231 
232 #endif
Definition: charstyle.h:47
Definition: charstyle.h:78
virtual bool equiv(const Style &other) const =0
Definition: stylecontext.h:35
void erase()
Definition: charstyle.h:142
Definition: saxhandler.h:21
virtual void saxx(SaxHandler &handler) const
Definition: charstyle.h:123
virtual void update(const StyleContext *b=NULL)
Definition: style.cpp:54
const StyleFlag effects() const
Definition: charstyle.h:148
Definition: style.h:37
Base Class ScFace : This is a total rewrite of the old Foi class.
Definition: scface.h:73
static const Xml_string saxxDefaultElem
Definition: saxio.h:40
Point operator^(Point const &a, Point const &b)
Definition: point.h:141
Definition: digester.h:100
virtual void saxx(SaxHandler &, const Xml_string &) const =0
void validate() const
Definition: style.h:113
Definition: resourcecollection.h:41