RagTime5StyleManager.hxx
Go to the documentation of this file.
1/* -*- Mode: C++; c-default-style: "k&r"; indent-tabs-mode: nil; tab-width: 2; c-basic-offset: 2 -*- */
2
3/* libmwaw
4* Version: MPL 2.0 / LGPLv2+
5*
6* The contents of this file are subject to the Mozilla Public License Version
7* 2.0 (the "License"); you may not use this file except in compliance with
8* the License or as specified alternatively below. You may obtain a copy of
9* the License at http://www.mozilla.org/MPL/
10*
11* Software distributed under the License is distributed on an "AS IS" basis,
12* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
13* for the specific language governing rights and limitations under the
14* License.
15*
16* Major Contributor(s):
17* Copyright (C) 2002 William Lachance (wrlach@gmail.com)
18* Copyright (C) 2002,2004 Marc Maurer (uwog@uwog.net)
19* Copyright (C) 2004-2006 Fridrich Strba (fridrich.strba@bluewin.ch)
20* Copyright (C) 2006, 2007 Andrew Ziem
21* Copyright (C) 2011, 2012 Alonso Laurent (alonso@loria.fr)
22*
23*
24* All Rights Reserved.
25*
26* For minor contributions see the git repository.
27*
28* Alternatively, the contents of this file may be used under the terms of
29* the GNU Lesser General Public License Version 2 or later (the "LGPLv2+"),
30* in which case the provisions of the LGPLv2+ are applicable
31* instead of those above.
32*/
33
34#ifndef RAG_TIME_5_STYLE_MANAGER
35# define RAG_TIME_5_STYLE_MANAGER
36
37#include <map>
38#include <ostream>
39#include <sstream>
40#include <set>
41#include <string>
42#include <vector>
43
44#include "libmwaw_internal.hxx"
45#include "MWAWDebug.hxx"
46#include "MWAWEntry.hxx"
47#include "MWAWGraphicStyle.hxx"
48
51
53{
54struct State;
55}
56
57class RagTime5Parser;
58
61{
62 friend class RagTime5Parser;
63public:
65 explicit RagTime5StyleManager(RagTime5Parser &parser);
68
69 struct GraphicStyle;
70 struct TextStyle;
71
80
82 bool updateSurfaceStyle(int graphicId, MWAWGraphicStyle &surfaceStyle) const;
84 bool updateBorderStyle(int graphicId, MWAWGraphicStyle &borderStyle, bool isLine) const;
86 bool getLineColor(int graphicId, MWAWColor &color) const;
88 bool updateTextStyles(int textId, MWAWFont &font, MWAWParagraph &para) const;
90 bool getCellBorder(int graphicId, MWAWBorder &border) const;
92 bool getCellBackgroundColor(int graphicId, MWAWColor &color) const;
94 bool updateCellFormat(int formatId, MWAWCell &cell) const;
95
96protected:
98 void updateTextStyles(size_t id, RagTime5StyleManager::TextStyle const &style,
99 std::vector<RagTime5StyleManager::TextStyle> const &listReadStyles,
100 std::multimap<size_t, size_t> const &idToChildIpMap,
101 std::set<size_t> &seens);
103 void updateGraphicStyles(size_t id, RagTime5StyleManager::GraphicStyle const &style,
104 std::vector<RagTime5StyleManager::GraphicStyle> const &listReadStyles,
105 std::multimap<size_t, size_t> const &idToChildIpMap,
106 std::set<size_t> &seens);
107
108public:
113 m_position(-1), m_cap(1), m_mitter(-1), m_limitPercent(-1), m_hidden(false), m_extra("")
114 {
118 }
120 virtual ~GraphicStyle();
122 bool isDefault() const
123 {
124 return m_parentId<=-1000 && m_width<0 && !m_dash.isSet() && !m_pattern &&
125 m_gradient<0 && m_gradientRotation<=-1000 && !m_gradientCenter.isSet() &&
126 m_position<0 && m_cap<0 && m_mitter<0 &&
127 !m_colors[0].isSet() && !m_colors[1].isSet() && m_colorsAlpha[0]<0 && m_colorsAlpha[1]<0 &&
128 m_limitPercent<0 && !m_hidden.isSet() && m_extra.empty();
129 }
131 friend std::ostream &operator<<(std::ostream &o, GraphicStyle const &style);
133 void insert(GraphicStyle const &childStyle);
135 bool read(MWAWInputStreamPtr &input, RagTime5StructManager::Field const &field, std::vector<MWAWColor> const &colorList);
139 float m_width;
147 shared_ptr<MWAWGraphicStyle::Pattern> m_pattern;
157 int m_cap;
165 std::string m_extra;
166 };
168 struct TextStyle {
173 m_numColumns(-1), m_columnGap(-1), m_extra("")
174 {
175 m_parentId[0]=m_parentId[1]=-1;
176 m_fontFlags[0]=m_fontFlags[1]=0;
177 for (int i=0; i<3; ++i) {
178 m_margins[i]=-1;
179 m_spacings[i]=-1;
180 m_spacingUnits[i]=-1;
181 }
182 for (int i=0; i<4; ++i) m_letterSpacings[i]=0;
183 }
185 virtual ~TextStyle();
187 bool isDefault() const
188 {
189 if (m_parentId[0]>=0 || m_parentId[1]>=0 || !m_linkIdList.empty() ||
191 m_keepWithNext.isSet() || m_justify>=0 || m_breakMethod>=0 || !m_tabList.empty() ||
192 !m_fontName.empty() || m_fontId>=0 || m_fontSize>=0 || m_fontFlags[0] || m_fontFlags[1] || m_scriptPosition.isSet() ||
193 m_fontScaling>=0 || m_underline>=0 || m_caps>=0 || m_language>=0 || m_widthStreching>=0 ||
194 m_numColumns>=0 || m_columnGap>=0 || !m_extra.empty())
195 return false;
196 for (int i=0; i<3; ++i) {
197 if (m_margins[i]>=0 || m_spacings[i]>=0 || m_spacingUnits[i]>=0)
198 return false;
199 }
200 for (int i=0; i<4; ++i) {
201 if (m_letterSpacings[i]>0 || m_letterSpacings[i]<0)
202 return false;
203 }
204 return true;
205 }
207 static std::string getLanguageLocale(int id);
208
210 friend std::ostream &operator<<(std::ostream &o, TextStyle const &style);
212 void insert(TextStyle const &childStyle);
214 bool read(RagTime5StructManager::Field const &field);
218 std::vector<int> m_linkIdList;
225
226 // paragraph
227
233 double m_spacings[3];
239 double m_margins[3];
241 std::vector<RagTime5StructManager::TabStop> m_tabList;
242
243 // character
244
246 librevenge::RVNGString m_fontName;
252 uint32_t m_fontFlags[2];
267
268 // column
269
274
276 std::string m_extra;
277 };
278
279protected:
280 //
281 // data
282 //
283
288
290 shared_ptr<RagTime5StyleManagerInternal::State> m_state;
291
292private:
295};
296
297#endif
298// vim: set filetype=cpp tabstop=2 shiftwidth=2 cindent autoindent smartindent noexpandtab:
a structure used to define a cell and its format
Definition: MWAWCell.hxx:53
Class to store font.
Definition: MWAWFont.hxx:44
a structure used to define a picture style
Definition: MWAWGraphicStyle.hxx:48
class to store the paragraph properties
Definition: MWAWParagraph.hxx:82
the main class to read a RagTime v5 file
Definition: RagTime5Parser.hxx:74
basic class used to read/store RagTime 5/6 styles
Definition: RagTime5StyleManager.hxx:61
bool updateTextStyles(int textId, MWAWFont &font, MWAWParagraph &para) const
update the font and the paragraph properties using a text style
Definition: RagTime5StyleManager.cxx:738
bool updateSurfaceStyle(int graphicId, MWAWGraphicStyle &surfaceStyle) const
updates a graphic style
Definition: RagTime5StyleManager.cxx:562
bool updateCellFormat(int formatId, MWAWCell &cell) const
updates the cell format
Definition: RagTime5StyleManager.cxx:1204
bool readFormats(RagTime5ClusterManager::Cluster &cluster)
try to read the list of format
Definition: RagTime5StyleManager.cxx:880
bool readGraphicStyles(RagTime5ClusterManager::Cluster &cluster)
try to read a main graphic styles
Definition: RagTime5StyleManager.cxx:311
RagTime5StyleManager(RagTime5Parser &parser)
constructor
Definition: RagTime5StyleManager.cxx:290
RagTime5StyleManager(RagTime5StyleManager const &orig)
void updateGraphicStyles(size_t id, RagTime5StyleManager::GraphicStyle const &style, std::vector< RagTime5StyleManager::GraphicStyle > const &listReadStyles, std::multimap< size_t, size_t > const &idToChildIpMap, std::set< size_t > &seens)
recursive function use to update the style list
Definition: RagTime5StyleManager.cxx:417
bool updateBorderStyle(int graphicId, MWAWGraphicStyle &borderStyle, bool isLine) const
updates a graphic style(border)
Definition: RagTime5StyleManager.cxx:526
bool getCellBorder(int graphicId, MWAWBorder &border) const
returns a cell border
Definition: RagTime5StyleManager.cxx:454
MWAWParserStatePtr m_parserState
the parser state
Definition: RagTime5StyleManager.hxx:287
RagTime5StyleManager operator=(RagTime5StyleManager const &orig)
bool readTextStyles(RagTime5ClusterManager::Cluster &cluster)
try to read a main text styles
Definition: RagTime5StyleManager.cxx:598
RagTime5Parser & m_mainParser
the parser
Definition: RagTime5StyleManager.hxx:285
bool readGraphicColors(RagTime5ClusterManager::Cluster &cluster)
try to read a graphic color zone
Definition: RagTime5StyleManager.cxx:302
bool getLineColor(int graphicId, MWAWColor &color) const
returns the line color corresponding to a graphic style
Definition: RagTime5StyleManager.cxx:440
bool getCellBackgroundColor(int graphicId, MWAWColor &color) const
returns the cell background
Definition: RagTime5StyleManager.cxx:500
~RagTime5StyleManager()
destructor
Definition: RagTime5StyleManager.cxx:295
shared_ptr< RagTime5StyleManagerInternal::State > m_state
the state
Definition: RagTime5StyleManager.hxx:290
shared_ptr< MWAWInputStream > MWAWInputStreamPtr
a smart pointer of MWAWInputStream
Definition: libmwaw_internal.hxx:503
shared_ptr< MWAWParserState > MWAWParserStatePtr
a smart pointer of MWAWParserState
Definition: libmwaw_internal.hxx:509
Internal: the structures of a RagTime5Style.
Definition: RagTime5StyleManager.cxx:52
a border
Definition: libmwaw_internal.hxx:314
the class to store a color
Definition: libmwaw_internal.hxx:182
static MWAWColor black()
return the back color
Definition: libmwaw_internal.hxx:226
static MWAWColor white()
return the white color
Definition: libmwaw_internal.hxx:231
bool isSet() const
return true if the variable is set
Definition: libmwaw_internal.hxx:586
the cluster data
Definition: RagTime5ClusterManager.hxx:216
a field of RagTime 5/6 structures
Definition: RagTime5StructManager.hxx:218
the graphic style of a RagTime v5-v6 document
Definition: RagTime5StyleManager.hxx:110
shared_ptr< MWAWGraphicStyle::Pattern > m_pattern
the line pattern
Definition: RagTime5StyleManager.hxx:147
friend std::ostream & operator<<(std::ostream &o, GraphicStyle const &style)
operator<<
Definition: RagTime5StyleManager.cxx:1554
int m_position
the line position inside=1/normal/outside/round
Definition: RagTime5StyleManager.hxx:155
MWAWVariable< MWAWColor > m_colors[2]
the first and second color
Definition: RagTime5StyleManager.hxx:141
virtual ~GraphicStyle()
destructor
Definition: RagTime5StyleManager.cxx:1228
int m_parentId
the parent id
Definition: RagTime5StyleManager.hxx:137
float m_width
the line width (in point)
Definition: RagTime5StyleManager.hxx:139
float m_limitPercent
the line limit
Definition: RagTime5StyleManager.hxx:161
std::string m_extra
extra data
Definition: RagTime5StyleManager.hxx:165
GraphicStyle()
constructor
Definition: RagTime5StyleManager.hxx:112
float m_colorsAlpha[2]
alpha of the first and second color
Definition: RagTime5StyleManager.hxx:143
int m_mitter
the line mitter ( triangle=1, round, out)
Definition: RagTime5StyleManager.hxx:159
MWAWVariable< bool > m_hidden
flag to know if we need to print the shape
Definition: RagTime5StyleManager.hxx:163
MWAWVariable< std::vector< long > > m_dash
the line dash/...
Definition: RagTime5StyleManager.hxx:145
bool isDefault() const
returns true if the line style is default
Definition: RagTime5StyleManager.hxx:122
bool read(MWAWInputStreamPtr &input, RagTime5StructManager::Field const &field, std::vector< MWAWColor > const &colorList)
try to read a graphic style
Definition: RagTime5StyleManager.cxx:1232
int m_gradient
the gradient 0: none, normal, radial
Definition: RagTime5StyleManager.hxx:149
void insert(GraphicStyle const &childStyle)
update the current style
Definition: RagTime5StyleManager.cxx:1528
MWAWVariable< MWAWVec2f > m_gradientCenter
the rotation center(checkme)
Definition: RagTime5StyleManager.hxx:153
int m_cap
the line caps ( normal=1, round, square)
Definition: RagTime5StyleManager.hxx:157
float m_gradientRotation
the gradient rotation(checkme)
Definition: RagTime5StyleManager.hxx:151
the text style of a RagTime v5-v6 document
Definition: RagTime5StyleManager.hxx:168
int m_fontId
the font id
Definition: RagTime5StyleManager.hxx:248
int m_graphLineStyleId
the graphic line style id
Definition: RagTime5StyleManager.hxx:224
int m_caps
caps : none, all caps, lower caps, inital caps + other lowers
Definition: RagTime5StyleManager.hxx:260
void insert(TextStyle const &childStyle)
update the current style
Definition: RagTime5StyleManager.cxx:2265
virtual ~TextStyle()
destructor
Definition: RagTime5StyleManager.cxx:1657
double m_letterSpacings[4]
the spacings in percent ( normal, minimum, maximum)
Definition: RagTime5StyleManager.hxx:264
int m_language
the language
Definition: RagTime5StyleManager.hxx:262
MWAWVariable< float > m_scriptPosition
the font script position ( in percent)
Definition: RagTime5StyleManager.hxx:254
int m_underline
underline : none, single, double
Definition: RagTime5StyleManager.hxx:258
friend std::ostream & operator<<(std::ostream &o, TextStyle const &style)
operator<<
Definition: RagTime5StyleManager.cxx:2309
float m_fontSize
the font size
Definition: RagTime5StyleManager.hxx:250
int m_justify
justify 0: left, 1:center, 2:right, 3:full, 4:full all
Definition: RagTime5StyleManager.hxx:231
int m_breakMethod
the break method 0: asIs, next container, next page, next even page, next odd page
Definition: RagTime5StyleManager.hxx:237
bool isDefault() const
returns true if the line style is default
Definition: RagTime5StyleManager.hxx:187
double m_columnGap
the gap between columns
Definition: RagTime5StyleManager.hxx:273
std::vector< RagTime5StructManager::TabStop > m_tabList
the tabulations
Definition: RagTime5StyleManager.hxx:241
TextStyle()
constructor
Definition: RagTime5StyleManager.hxx:170
int m_parentId[2]
the parent id ( main and style ?)
Definition: RagTime5StyleManager.hxx:216
double m_widthStreching
the width streching
Definition: RagTime5StyleManager.hxx:266
static std::string getLanguageLocale(int id)
returns the language locale name corresponding to an id ( if known)
Definition: RagTime5StyleManager.cxx:1661
float m_fontScaling
the font script position ( in percent)
Definition: RagTime5StyleManager.hxx:256
int m_graphStyleId
the graphic style id
Definition: RagTime5StyleManager.hxx:222
std::string m_extra
extra data
Definition: RagTime5StyleManager.hxx:276
int m_numColumns
the number of columns
Definition: RagTime5StyleManager.hxx:271
uint32_t m_fontFlags[2]
the font flags (add and remove )
Definition: RagTime5StyleManager.hxx:252
librevenge::RVNGString m_fontName
the font name
Definition: RagTime5StyleManager.hxx:246
int m_dateStyleId
the date style id
Definition: RagTime5StyleManager.hxx:220
int m_spacingUnits[3]
the interline/before/after unit 0: line, 1:point
Definition: RagTime5StyleManager.hxx:235
double m_spacings[3]
the interline/before/after value
Definition: RagTime5StyleManager.hxx:233
std::vector< int > m_linkIdList
the link id list
Definition: RagTime5StyleManager.hxx:218
double m_margins[3]
the spacings in point ( left, right, first)
Definition: RagTime5StyleManager.hxx:239
MWAWVariable< bool > m_keepWithNext
the keep with next flag
Definition: RagTime5StyleManager.hxx:229
bool read(RagTime5StructManager::Field const &field)
try to read a text style
Definition: RagTime5StyleManager.cxx:1714

Generated on Wed Jan 19 2022 22:23:17 for libmwaw by doxygen 1.9.3