Coverage Report

Created: 2026-06-13 06:44

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/libmwaw/src/lib/FullWrtText.hxx
Line
Count
Source
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
/*
35
 * Parser to FullWrite text document
36
 *
37
 */
38
#ifndef FULL_WRT_TEXT
39
#  define FULL_WRT_TEXT
40
41
#include "libmwaw_internal.hxx"
42
43
44
#include "MWAWDebug.hxx"
45
46
#include "FullWrtStruct.hxx"
47
48
namespace FullWrtTextInternal
49
{
50
struct Font;
51
struct Paragraph;
52
53
struct LineHeader;
54
struct Zone;
55
56
struct State;
57
}
58
59
class FullWrtParser;
60
61
/** \brief the main class to read the text part of writenow file
62
 *
63
 *
64
 *
65
 */
66
class FullWrtText
67
{
68
  friend class FullWrtParser;
69
public:
70
  //! constructor
71
  explicit FullWrtText(FullWrtParser &parser);
72
  //! destructor
73
  virtual ~FullWrtText();
74
75
  /** returns the file version */
76
  int version() const;
77
78
  /** returns the number of pages */
79
  int numPages() const;
80
81
protected:
82
83
  //! sends the data which have not yet been sent to the listener
84
  void flushExtra();
85
86
  //! send a main zone
87
  bool sendMainText();
88
  //! return the header/footer blockid ( or -1)
89
  int getHeaderFooterId(bool header, int page, int &numSimilar) const;
90
91
  //! send a id zone
92
  bool send(int zId, MWAWColor fontColor=MWAWColor::black());
93
94
  //
95
  // intermediate level
96
  //
97
98
  //! check if a zone is a text zone, if so read it...
99
  bool readTextData(FullWrtStruct::EntryPtr zone);
100
101
  //! send the text
102
  bool send(std::shared_ptr<FullWrtTextInternal::Zone> zone, MWAWColor fontColor=MWAWColor::black());
103
104
  //! send a simple line
105
  void send(std::shared_ptr<FullWrtTextInternal::Zone> zone, int numChar,
106
            FullWrtTextInternal::Font &font, FullWrtTextInternal::Paragraph &ruler,
107
            std::string &str);
108
109
  //! try send a table row
110
  bool sendTable(std::shared_ptr<FullWrtTextInternal::Zone> zone,
111
                 FullWrtTextInternal::LineHeader const &lHeader,
112
                 FullWrtTextInternal::Font &font, FullWrtTextInternal::Paragraph &ruler,
113
                 std::string &str);
114
  //! send a hidden item
115
  bool sendHiddenItem(int id, FullWrtTextInternal::Font &font, FullWrtTextInternal::Paragraph &ruler);
116
117
  //! prepare the different data (called sortZones and createItemStructures)
118
  void prepareData()
119
21.6k
  {
120
21.6k
    sortZones();
121
21.6k
    createItemStructures();
122
21.6k
  }
123
124
  //! sort the different zones, finding the main zone, ...
125
  void sortZones();
126
  //! create the item structures
127
  void createItemStructures();
128
129
  //
130
  // low level
131
  //
132
133
  //! try to read the header of a line
134
  bool readLineHeader(std::shared_ptr<FullWrtTextInternal::Zone> zone, FullWrtTextInternal::LineHeader &lHeader);
135
136
  //! check if the input of the zone points to a item zone in DataStruct Zone
137
  bool readItem(FullWrtStruct::EntryPtr zone, int id=-1, bool hidden=false);
138
139
  //! check if the input of the zone points to a paragraph zone in DataStruct Zone
140
  bool readParagraphTabs(FullWrtStruct::EntryPtr zone, int id=-1);
141
  //! try to read the paragraph modifier (at the end of doc info)
142
  bool readParaModDocInfo(FullWrtStruct::EntryPtr zone);
143
144
  //! try to read a style
145
  bool readStyle(FullWrtStruct::EntryPtr zone);
146
147
  //! try to read the font/paragraph modifier zone (Zone1f)
148
  bool readDataMod(FullWrtStruct::EntryPtr zone, int id);
149
150
  //! check if the input of the zone points to the columns definition, ...
151
  bool readColumns(FullWrtStruct::EntryPtr zone);
152
153
private:
154
  FullWrtText(FullWrtText const &orig) = delete;
155
  FullWrtText &operator=(FullWrtText const &orig) = delete;
156
157
protected:
158
  //
159
  // data
160
  //
161
  //! the parser state
162
  MWAWParserStatePtr m_parserState;
163
164
  //! the state
165
  std::shared_ptr<FullWrtTextInternal::State> m_state;
166
167
  //! the main parser;
168
  FullWrtParser *m_mainParser;
169
};
170
#endif
171
// vim: set filetype=cpp tabstop=2 shiftwidth=2 cindent autoindent smartindent noexpandtab: