MsWks4Text.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 MS_WKS4_TEXT
35# define MS_WKS4_TEXT
36
37#include <vector>
38
39#include "MWAWEntry.hxx"
40#include "MWAWDebug.hxx"
41#include "MWAWInputStream.hxx"
42
43namespace MsWks4TextInternal
44{
45struct Font;
46struct Paragraph;
47struct State;
48}
49
50class MsWksDocument;
51class MsWks4Zone;
52
65{
66 friend class MsWks4Zone;
67protected:
68 struct DataFOD;
75 typedef bool (MsWks4Text::* FDPParser)(MWAWInputStreamPtr &input, long endPos,
76 int &id, std::string &mess);
77public:
79 explicit MsWks4Text(MsWksDocument &document);
80
83
85 void setDefault(MWAWFont const &font);
86
88 int numPages() const;
89
91 void flushExtra(MWAWInputStreamPtr /*input*/) {}
92
93protected:
97 bool readStructures(MWAWInputStreamPtr input, bool mainOle);
98
100 bool readText(MWAWInputStreamPtr input, MWAWEntry const &entry, bool mainOle);
101
103 bool readFootNote(MWAWInputStreamPtr input, int id);
104
105 //----------------------------------------
106 // PLC parsing, setting
107 //----------------------------------------
115 typedef bool (MsWks4Text::* DataParser)
116 (MWAWInputStreamPtr input, long endPos, long bot, long eot, int id, std::string &mess);
117
125 bool readPLC(MWAWInputStreamPtr input, MWAWEntry const &entry,
126 std::vector<long> &textPtrs, std::vector<long> &listValues,
135 bool readSimplePLC(MWAWInputStreamPtr &input, MWAWEntry const &entry,
136 std::vector<long> &textPtrs,
137 std::vector<long> &listValues)
138 {
139 return readPLC(input, entry, textPtrs, listValues);
140 }
141
143 bool defDataParser(MWAWInputStreamPtr input, long endPos,
144 long bot, long eot, int id, std::string &mess);
145
147 bool readFontNames(MWAWInputStreamPtr input, MWAWEntry const &entry);
148
150 bool readFont(MWAWInputStreamPtr &input, long endPos,
151 int &id, std::string &mess);
152
156 bool readParagraph(MWAWInputStreamPtr &input, long endPos,
157 int &id, std::string &mess);
158
160 bool ftntDataParser(MWAWInputStreamPtr input, long endPos,
161 long bot, long eot, int id, std::string &mess);
162
164 bool eobjDataParser(MWAWInputStreamPtr input, long endPos,
165 long bot, long eot, int id, std::string &mess);
166
170 bool toknDataParser(MWAWInputStreamPtr input, long endPos,
171 long bot, long eot, int id, std::string &mess);
172
176 bool pgdDataParser(MWAWInputStreamPtr input, long endPos,
177 long, long, int id, std::string &mess);
178
180 void flushNote(int noteId);
181
182protected:
185 std::vector<DataFOD> mergeSortedLists
186 (std::vector<DataFOD> const &lst1, std::vector<DataFOD> const &lst2) const;
187
190 bool readFDP(MWAWInputStreamPtr &input, MWAWEntry const &entry,
191 std::vector<DataFOD> &fods, FDPParser parser);
192
199 bool findFDPStructures(MWAWInputStreamPtr &input, int which);
207 bool findFDPStructuresByHand(MWAWInputStreamPtr &input, int which);
208
209protected:
211 struct DataFOD {
219
223 , m_pos(-1)
224 , m_defPos(0)
225 , m_id(-1)
226 {
227 }
228
232 long m_pos;
236 int m_id;
237 };
238
239private:
240 MsWks4Text(MsWks4Text const &orig) = delete;
241 MsWks4Text &operator=(MsWks4Text const &orig) = delete;
242protected:
247
250
253
255 mutable std::shared_ptr<MsWks4TextInternal::State> m_state;
256
258 std::vector<DataFOD> m_FODsList;
259
261 std::vector<MWAWEntry const *> m_FDPCs;
263 std::vector<MWAWEntry const *> m_FDPPs;
264};
265
266#endif
267// vim: set filetype=cpp tabstop=2 shiftwidth=2 cindent autoindent smartindent noexpandtab:
basic class to store an entry in a file This contained :
Definition MWAWEntry.hxx:47
Class to store font.
Definition MWAWFont.hxx:44
virtual class which defines the ancestor of all main zone parser
Definition MWAWParser.hxx:100
The class which parses text zones in a mac MS Works document v4.
Definition MsWks4Text.hxx:65
std::vector< MWAWEntry const * > m_FDPPs
the list of FDPP entries
Definition MsWks4Text.hxx:263
bool readPLC(MWAWInputStreamPtr input, MWAWEntry const &entry, std::vector< long > &textPtrs, std::vector< long > &listValues, DataParser parser=&MsWks4Text::defDataParser)
reads a PLC (Pointer List Composant ?) in zone entry
Definition MsWks4Text.cxx:918
MsWks4Text(MsWks4Text const &orig)=delete
std::vector< DataFOD > m_FODsList
the list of a FOD
Definition MsWks4Text.hxx:258
bool ftntDataParser(MWAWInputStreamPtr input, long endPos, long bot, long eot, int id, std::string &mess)
parses the footnote position : FTNT
Definition MsWks4Text.cxx:1645
std::vector< MWAWEntry const * > m_FDPCs
the list of FDPC entries
Definition MsWks4Text.hxx:261
MWAWParserStatePtr m_parserState
the parser state
Definition MsWks4Text.hxx:246
~MsWks4Text()
destructor
Definition MsWks4Text.cxx:543
bool findFDPStructures(MWAWInputStreamPtr &input, int which)
Fills the vector of (FDPCs/FDPPs) paragraph/characters strutures.
Definition MsWks4Text.cxx:1811
MWAWParser * m_mainParser
the main parser;
Definition MsWks4Text.hxx:244
void flushNote(int noteId)
sends to the listener the text which corresponds to noteId
bool readStructures(MWAWInputStreamPtr input, bool mainOle)
finds and parses all structures which correspond to the text
Definition MsWks4Text.cxx:572
bool readFont(MWAWInputStreamPtr &input, long endPos, int &id, std::string &mess)
reads a font properties
Definition MsWks4Text.cxx:1207
void setDefault(MWAWFont const &font)
sets the default font
Definition MsWks4Text.cxx:1201
bool readParagraph(MWAWInputStreamPtr &input, long endPos, int &id, std::string &mess)
reads a paragraph properties
Definition MsWks4Text.cxx:1400
void setProperty(MsWks4TextInternal::Paragraph const &tabs)
sends a paragraph properties to the listener
Definition MsWks4Text.cxx:1392
bool eobjDataParser(MWAWInputStreamPtr input, long endPos, long bot, long eot, int id, std::string &mess)
parses the object position : EOBJ
Definition MsWks4Text.cxx:1613
bool pgdDataParser(MWAWInputStreamPtr input, long endPos, long, long, int id, std::string &mess)
parses the pagebreak positin entries : PGD
Definition MsWks4Text.cxx:1688
bool readFDP(MWAWInputStreamPtr &input, MWAWEntry const &entry, std::vector< DataFOD > &fods, FDPParser parser)
parses a FDPP or a FDPC entry (which contains a list of ATTR_TEXT/ATTR_PARAG with their definition ) ...
Definition MsWks4Text.cxx:1899
std::shared_ptr< MsWks4TextInternal::State > m_state
the internal state
Definition MsWks4Text.hxx:255
MsWks4Text & operator=(MsWks4Text const &orig)=delete
bool findFDPStructuresByHand(MWAWInputStreamPtr &input, int which)
Fills the vector of (FDPCs/FDPPs) paragraph/characters strutures, a function to call when the normal ...
Definition MsWks4Text.cxx:1877
bool readSimplePLC(MWAWInputStreamPtr &input, MWAWEntry const &entry, std::vector< long > &textPtrs, std::vector< long > &listValues)
reads a PLC (Pointer List Composant ?) in zone entry
Definition MsWks4Text.hxx:135
bool defDataParser(MWAWInputStreamPtr input, long endPos, long bot, long eot, int id, std::string &mess)
the default parser (does nothing)
Definition MsWks4Text.cxx:1106
bool readText(MWAWInputStreamPtr input, MWAWEntry const &entry, bool mainOle)
reads a text section and send it to the listener
Definition MsWks4Text.cxx:713
int numPages() const
returns the number of pages
Definition MsWks4Text.cxx:550
bool toknDataParser(MWAWInputStreamPtr input, long endPos, long bot, long eot, int id, std::string &mess)
parses the field properties entries : TOKN.
Definition MsWks4Text.cxx:1714
bool(MsWks4Text::* DataParser)(MWAWInputStreamPtr input, long endPos, long bot, long eot, int id, std::string &mess)
definition of the plc data parser (low level)
Definition MsWks4Text.hxx:116
std::vector< DataFOD > mergeSortedLists(std::vector< DataFOD > const &lst1, std::vector< DataFOD > const &lst2) const
function which takes two sorted list of attribute (by text position).
Definition MsWks4Text.cxx:2055
bool readFontNames(MWAWInputStreamPtr input, MWAWEntry const &entry)
reads the font names entry : FONT
Definition MsWks4Text.cxx:1130
void flushExtra(MWAWInputStreamPtr)
sends the data which have not been sent: actually do nothing
Definition MsWks4Text.hxx:91
bool readFootNote(MWAWInputStreamPtr input, int id)
sends the text which corresponds to footnote id to the listner
Definition MsWks4Text.cxx:678
MWAWEntry m_textPositions
an entry which corresponds to the complete text zone
Definition MsWks4Text.hxx:252
bool(MsWks4Text::* FDPParser)(MWAWInputStreamPtr &input, long endPos, int &id, std::string &mess)
callback when a new attribute is found in an FDPP/FDPC entry
Definition MsWks4Text.hxx:75
MsWksDocument & m_document
the main document
Definition MsWks4Text.hxx:249
The class which parses the main zones of a mac MS Works document v4.
Definition MsWks4Zone.hxx:74
the main class to read/store generic data of a MsWorks document v1-v3
Definition MsWksDocument.hxx:69
std::shared_ptr< MWAWParserState > MWAWParserStatePtr
a smart pointer of MWAWParserState
Definition libmwaw_internal.hxx:557
std::shared_ptr< MWAWInputStream > MWAWInputStreamPtr
a smart pointer of MWAWInputStream
Definition libmwaw_internal.hxx:551
Internal: the structures of a MsWks4Text.
Definition MsWks4Text.cxx:71
Internal: class to store a paragraph properties.
Definition MsWks4Text.cxx:254
structure which retrieves data information which correspond to a text position
Definition MsWks4Text.hxx:211
long m_pos
the offset position of the text modified by this attribute
Definition MsWks4Text.hxx:232
DataFOD()
the constructor
Definition MsWks4Text.hxx:221
long m_defPos
the offset position of the definition of the attribute in the file
Definition MsWks4Text.hxx:234
Type
different type which can be associated to a text position
Definition MsWks4Text.hxx:218
@ ATTR_UNKN
Definition MsWks4Text.hxx:218
@ ATTR_PARAG
Definition MsWks4Text.hxx:218
@ ATTR_PLC
Definition MsWks4Text.hxx:218
@ ATTR_TEXT
Definition MsWks4Text.hxx:218
Type m_type
the type of the attribute
Definition MsWks4Text.hxx:230
int m_id
an identificator (which must be unique by category)
Definition MsWks4Text.hxx:236

Generated on Mon Apr 8 2024 16:05:29 for libmwaw by doxygen 1.9.8