Coverage Report

Created: 2026-04-29 07:28

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/libstaroffice/src/lib/STOFFSpreadsheetEncoder.cxx
Line
Count
Source
1
/* -*- Mode: C++; c-default-style: "k&r"; indent-tabs-mode: nil; tab-width: 2; c-basic-offset: 2 -*- */
2
3
/* libstaroffice
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) 2006 Ariya Hidayat (ariya@kde.org)
18
* Copyright (C) 2004 Marc Oude Kotte (marc@solcon.nl)
19
* Copyright (C) 2002 William Lachance (wrlach@gmail.com)
20
* Copyright (C) 2002,2004 Marc Maurer (uwog@uwog.net)
21
* Copyright (C) 2004-2006 Fridrich Strba (fridrich.strba@bluewin.ch)
22
* Copyright (C) 2006, 2007 Andrew Ziem
23
* Copyright (C) 2011, 2012 Alonso Laurent (alonso@loria.fr)
24
*
25
*
26
* All Rights Reserved.
27
*
28
* For minor contributions see the git repository.
29
*
30
* Alternatively, the contents of this file may be used under the terms of
31
* the GNU Lesser General Public License Version 2 or later (the "LGPLv2+"),
32
* in which case the provisions of the LGPLv2+ are applicable
33
* instead of those above.
34
*/
35
36
#include <string.h>
37
38
#include <map>
39
#include <sstream>
40
#include <string>
41
42
#include <librevenge/librevenge.h>
43
#include <libstaroffice/libstaroffice.hxx>
44
45
#include "libstaroffice_internal.hxx"
46
47
#include "STOFFPropertyHandler.hxx"
48
49
#include "STOFFSpreadsheetEncoder.hxx"
50
51
//! a name space used to define internal data of STOFFSpreadsheetEncoder
52
namespace STOFFSpreadsheetEncoderInternal
53
{
54
//! the state of a STOFFSpreadsheetEncoder
55
struct State {
56
  //! constructor
57
  State()
58
157
    : m_encoder()
59
157
  {
60
157
  }
61
  //! the encoder
62
  STOFFPropertyHandlerEncoder m_encoder;
63
};
64
65
}
66
67
STOFFSpreadsheetEncoder::STOFFSpreadsheetEncoder()
68
157
  : librevenge::RVNGSpreadsheetInterface()
69
157
  , m_state(new STOFFSpreadsheetEncoderInternal::State)
70
157
{
71
157
}
72
73
STOFFSpreadsheetEncoder::~STOFFSpreadsheetEncoder()
74
157
{
75
157
}
76
77
bool STOFFSpreadsheetEncoder::getBinaryResult(STOFFEmbeddedObject &object)
78
156
{
79
156
  librevenge::RVNGBinaryData data;
80
156
  if (!m_state->m_encoder.getData(data))
81
0
    return false;
82
156
  object=STOFFEmbeddedObject(data, "image/stoff-ods");
83
156
  return true;
84
156
}
85
86
void STOFFSpreadsheetEncoder::setDocumentMetaData(const librevenge::RVNGPropertyList &list)
87
157
{
88
157
  m_state->m_encoder.insertElement("SetDocumentMetaData", list);
89
157
}
90
91
void STOFFSpreadsheetEncoder::startDocument(const ::librevenge::RVNGPropertyList &list)
92
157
{
93
157
  m_state->m_encoder.insertElement("StartDocument", list);
94
157
}
95
96
void STOFFSpreadsheetEncoder::endDocument()
97
156
{
98
156
  m_state->m_encoder.insertElement("EndDocument");
99
156
}
100
101
//
102
// page
103
//
104
void STOFFSpreadsheetEncoder::definePageStyle(const librevenge::RVNGPropertyList &list)
105
0
{
106
0
  m_state->m_encoder.insertElement("DefinePageStyle", list);
107
0
}
108
109
void STOFFSpreadsheetEncoder::defineEmbeddedFont(const librevenge::RVNGPropertyList &list)
110
0
{
111
0
  m_state->m_encoder.insertElement("DefineEmbeddedFont", list);
112
0
}
113
114
void STOFFSpreadsheetEncoder::openPageSpan(const librevenge::RVNGPropertyList &list)
115
292
{
116
292
  m_state->m_encoder.insertElement("OpenPageSpan", list);
117
292
}
118
void STOFFSpreadsheetEncoder::closePageSpan()
119
291
{
120
291
  m_state->m_encoder.insertElement("ClosePageSpan");
121
291
}
122
123
void STOFFSpreadsheetEncoder::openHeader(const librevenge::RVNGPropertyList &list)
124
0
{
125
0
  m_state->m_encoder.insertElement("OpenHeader", list);
126
0
}
127
void STOFFSpreadsheetEncoder::closeHeader()
128
0
{
129
0
  m_state->m_encoder.insertElement("CloseHeader");
130
0
}
131
132
void STOFFSpreadsheetEncoder::openFooter(const librevenge::RVNGPropertyList &list)
133
0
{
134
0
  m_state->m_encoder.insertElement("OpenFooter", list);
135
0
}
136
void STOFFSpreadsheetEncoder::closeFooter()
137
0
{
138
0
  m_state->m_encoder.insertElement("CloseFooter");
139
0
}
140
141
//
142
// spreadsheet
143
//
144
void STOFFSpreadsheetEncoder::defineSheetNumberingStyle(const librevenge::RVNGPropertyList &list)
145
0
{
146
0
  m_state->m_encoder.insertElement("DefineSheetNumberingStyle", list);
147
0
}
148
void STOFFSpreadsheetEncoder::openSheet(const librevenge::RVNGPropertyList &list)
149
453
{
150
453
  m_state->m_encoder.insertElement("OpenSheet", list);
151
453
}
152
void STOFFSpreadsheetEncoder::closeSheet()
153
452
{
154
452
  m_state->m_encoder.insertElement("CloseSheet");
155
452
}
156
void STOFFSpreadsheetEncoder::openSheetRow(const librevenge::RVNGPropertyList &list)
157
952
{
158
952
  m_state->m_encoder.insertElement("OpenSheetRow", list);
159
952
}
160
161
void STOFFSpreadsheetEncoder::closeSheetRow()
162
952
{
163
952
  m_state->m_encoder.insertElement("CloseSheetRow");
164
952
}
165
166
void STOFFSpreadsheetEncoder::openSheetCell(const librevenge::RVNGPropertyList &list)
167
1.58k
{
168
1.58k
  m_state->m_encoder.insertElement("OpenSheetCell", list);
169
1.58k
}
170
171
void STOFFSpreadsheetEncoder::closeSheetCell()
172
1.58k
{
173
1.58k
  m_state->m_encoder.insertElement("CloseSheetCell");
174
1.58k
}
175
176
//
177
// chart
178
//
179
180
void STOFFSpreadsheetEncoder::defineChartStyle(const librevenge::RVNGPropertyList &list)
181
0
{
182
0
  m_state->m_encoder.insertElement("DefineChartStyle", list);
183
0
}
184
185
void STOFFSpreadsheetEncoder::openChart(const librevenge::RVNGPropertyList &list)
186
0
{
187
0
  m_state->m_encoder.insertElement("OpenChart", list);
188
0
}
189
190
void STOFFSpreadsheetEncoder::closeChart()
191
0
{
192
0
  m_state->m_encoder.insertElement("CloseChart");
193
0
}
194
195
void STOFFSpreadsheetEncoder::openChartTextObject(const librevenge::RVNGPropertyList &list)
196
0
{
197
0
  m_state->m_encoder.insertElement("OpenChartTextObject", list);
198
0
}
199
200
void STOFFSpreadsheetEncoder::closeChartTextObject()
201
0
{
202
0
  m_state->m_encoder.insertElement("CloseChartTextObject");
203
0
}
204
205
void STOFFSpreadsheetEncoder::openChartPlotArea(const librevenge::RVNGPropertyList &list)
206
0
{
207
0
  m_state->m_encoder.insertElement("OpenChartPlotArea", list);
208
0
}
209
210
void STOFFSpreadsheetEncoder::closeChartPlotArea()
211
0
{
212
0
  m_state->m_encoder.insertElement("CloseChartPlotArea");
213
0
}
214
215
void STOFFSpreadsheetEncoder::insertChartAxis(const librevenge::RVNGPropertyList &list)
216
0
{
217
0
  m_state->m_encoder.insertElement("InsertChartAxis", list);
218
0
}
219
220
void STOFFSpreadsheetEncoder::openChartSerie(const librevenge::RVNGPropertyList &list)
221
0
{
222
0
  m_state->m_encoder.insertElement("OpenChartSerie", list);
223
0
}
224
225
void STOFFSpreadsheetEncoder::closeChartSerie()
226
0
{
227
0
  m_state->m_encoder.insertElement("CloseChartSerie");
228
0
}
229
230
231
//
232
// para styles + character styles + link
233
//
234
void STOFFSpreadsheetEncoder::defineParagraphStyle(const librevenge::RVNGPropertyList &list)
235
0
{
236
0
  m_state->m_encoder.insertElement("DefineParagraphStyle", list);
237
0
}
238
239
void STOFFSpreadsheetEncoder::openParagraph(const librevenge::RVNGPropertyList &list)
240
7
{
241
7
  m_state->m_encoder.insertElement("OpenParagraph", list);
242
7
}
243
244
void STOFFSpreadsheetEncoder::closeParagraph()
245
7
{
246
7
  m_state->m_encoder.insertElement("CloseParagraph");
247
7
}
248
249
void STOFFSpreadsheetEncoder::defineCharacterStyle(const librevenge::RVNGPropertyList &list)
250
0
{
251
0
  m_state->m_encoder.insertElement("DefineCharacterStyle", list);
252
0
}
253
254
void STOFFSpreadsheetEncoder::openSpan(const librevenge::RVNGPropertyList &list)
255
7
{
256
7
  m_state->m_encoder.insertElement("OpenSpan", list);
257
7
}
258
259
void STOFFSpreadsheetEncoder::closeSpan()
260
7
{
261
7
  m_state->m_encoder.insertElement("CloseSpan");
262
7
}
263
264
void STOFFSpreadsheetEncoder::openLink(const librevenge::RVNGPropertyList &list)
265
0
{
266
0
  m_state->m_encoder.insertElement("OpenLink", list);
267
0
}
268
269
void STOFFSpreadsheetEncoder::closeLink()
270
0
{
271
0
  m_state->m_encoder.insertElement("CloseLink");
272
0
}
273
274
//
275
// section + add basic char
276
//
277
void STOFFSpreadsheetEncoder::defineSectionStyle(const librevenge::RVNGPropertyList &list)
278
0
{
279
0
  m_state->m_encoder.insertElement("DefineSectionStyle", list);
280
0
}
281
282
void STOFFSpreadsheetEncoder::openSection(const librevenge::RVNGPropertyList &list)
283
0
{
284
0
  m_state->m_encoder.insertElement("OpenSection", list);
285
0
}
286
287
void STOFFSpreadsheetEncoder::closeSection()
288
0
{
289
0
  m_state->m_encoder.insertElement("CloseSection");
290
0
}
291
292
void STOFFSpreadsheetEncoder::insertTab()
293
0
{
294
0
  m_state->m_encoder.insertElement("InsertTab");
295
0
}
296
297
void STOFFSpreadsheetEncoder::insertSpace()
298
0
{
299
0
  m_state->m_encoder.insertElement("InsertSpace");
300
0
}
301
302
void STOFFSpreadsheetEncoder::insertText(const librevenge::RVNGString &text)
303
7
{
304
7
  m_state->m_encoder.characters(text);
305
7
}
306
307
void STOFFSpreadsheetEncoder::insertLineBreak()
308
0
{
309
0
  m_state->m_encoder.insertElement("InsertLineBreak");
310
0
}
311
312
void STOFFSpreadsheetEncoder::insertField(const librevenge::RVNGPropertyList &list)
313
0
{
314
0
  m_state->m_encoder.insertElement("InsertField", list);
315
0
}
316
317
//
318
// list
319
//
320
void STOFFSpreadsheetEncoder::openOrderedListLevel(const librevenge::RVNGPropertyList &list)
321
0
{
322
0
  m_state->m_encoder.insertElement("OpenOrderedListLevel", list);
323
0
}
324
325
void STOFFSpreadsheetEncoder::openUnorderedListLevel(const librevenge::RVNGPropertyList &list)
326
0
{
327
0
  m_state->m_encoder.insertElement("OpenUnorderedListLevel", list);
328
0
}
329
330
void STOFFSpreadsheetEncoder::closeOrderedListLevel()
331
0
{
332
0
  m_state->m_encoder.insertElement("CloseOrderedListLevel");
333
0
}
334
335
void STOFFSpreadsheetEncoder::closeUnorderedListLevel()
336
0
{
337
0
  m_state->m_encoder.insertElement("CloseOrderedListLevel");
338
0
}
339
340
void STOFFSpreadsheetEncoder::openListElement(const librevenge::RVNGPropertyList &list)
341
0
{
342
0
  m_state->m_encoder.insertElement("OpenListElement", list);
343
0
}
344
345
void STOFFSpreadsheetEncoder::closeListElement()
346
0
{
347
0
  m_state->m_encoder.insertElement("CloseListElement");
348
0
}
349
350
//
351
// footnote, comment, frame
352
//
353
354
void STOFFSpreadsheetEncoder::openFootnote(const librevenge::RVNGPropertyList &list)
355
0
{
356
0
  m_state->m_encoder.insertElement("OpenFootnote", list);
357
0
}
358
359
void STOFFSpreadsheetEncoder::closeFootnote()
360
0
{
361
0
  m_state->m_encoder.insertElement("CloseFootnote");
362
0
}
363
364
void STOFFSpreadsheetEncoder::openComment(const librevenge::RVNGPropertyList &list)
365
1
{
366
1
  m_state->m_encoder.insertElement("OpenComment", list);
367
1
}
368
void STOFFSpreadsheetEncoder::closeComment()
369
1
{
370
1
  m_state->m_encoder.insertElement("CloseComment");
371
1
}
372
373
void STOFFSpreadsheetEncoder::openFrame(const librevenge::RVNGPropertyList &list)
374
0
{
375
0
  m_state->m_encoder.insertElement("OpenFrame", list);
376
0
}
377
void STOFFSpreadsheetEncoder::closeFrame()
378
0
{
379
0
  m_state->m_encoder.insertElement("CloseFrame");
380
0
}
381
void STOFFSpreadsheetEncoder::insertBinaryObject(const librevenge::RVNGPropertyList &list)
382
0
{
383
0
  m_state->m_encoder.insertElement("InsertBinaryObject", list);
384
0
}
385
386
//
387
// specific text/table
388
//
389
void STOFFSpreadsheetEncoder::openTextBox(const librevenge::RVNGPropertyList &list)
390
0
{
391
0
  m_state->m_encoder.insertElement("OpenTextBox", list);
392
0
}
393
394
void STOFFSpreadsheetEncoder::closeTextBox()
395
0
{
396
0
  m_state->m_encoder.insertElement("CloseTextBox");
397
0
}
398
399
void STOFFSpreadsheetEncoder::openTable(const librevenge::RVNGPropertyList &list)
400
0
{
401
0
  m_state->m_encoder.insertElement("OpenTable", list);
402
0
}
403
void STOFFSpreadsheetEncoder::closeTable()
404
0
{
405
0
  m_state->m_encoder.insertElement("CloseTable");
406
0
}
407
void STOFFSpreadsheetEncoder::openTableRow(const librevenge::RVNGPropertyList &list)
408
0
{
409
0
  m_state->m_encoder.insertElement("OpenTableRow", list);
410
0
}
411
412
void STOFFSpreadsheetEncoder::closeTableRow()
413
0
{
414
0
  m_state->m_encoder.insertElement("CloseTableRow");
415
0
}
416
417
void STOFFSpreadsheetEncoder::openTableCell(const librevenge::RVNGPropertyList &list)
418
0
{
419
0
  m_state->m_encoder.insertElement("OpenTableCell", list);
420
0
}
421
422
void STOFFSpreadsheetEncoder::closeTableCell()
423
0
{
424
0
  m_state->m_encoder.insertElement("CloseTableCell");
425
0
}
426
427
void STOFFSpreadsheetEncoder::insertCoveredTableCell(const librevenge::RVNGPropertyList &list)
428
0
{
429
0
  m_state->m_encoder.insertElement("InsertCoveredTableCell", list);
430
0
}
431
432
//
433
// simple Graphic
434
//
435
436
void STOFFSpreadsheetEncoder::openGroup(const librevenge::RVNGPropertyList &list)
437
0
{
438
0
  m_state->m_encoder.insertElement("OpenGroup", list);
439
0
}
440
441
void STOFFSpreadsheetEncoder::closeGroup()
442
0
{
443
0
  m_state->m_encoder.insertElement("CloseGroup");
444
0
}
445
446
void STOFFSpreadsheetEncoder::defineGraphicStyle(const librevenge::RVNGPropertyList &list)
447
367
{
448
367
  m_state->m_encoder.insertElement("DefineGraphicStyle", list);
449
367
}
450
451
void STOFFSpreadsheetEncoder::drawRectangle(const ::librevenge::RVNGPropertyList &list)
452
367
{
453
367
  m_state->m_encoder.insertElement("DrawRectangle", list);
454
367
}
455
456
void STOFFSpreadsheetEncoder::drawEllipse(const ::librevenge::RVNGPropertyList &list)
457
0
{
458
0
  m_state->m_encoder.insertElement("DrawEllipse", list);
459
0
}
460
461
void STOFFSpreadsheetEncoder::drawPolygon(const ::librevenge::RVNGPropertyList &vertices)
462
0
{
463
0
  m_state->m_encoder.insertElement("DrawPolygon", vertices);
464
0
}
465
466
void STOFFSpreadsheetEncoder::drawPolyline(const ::librevenge::RVNGPropertyList &vertices)
467
0
{
468
0
  m_state->m_encoder.insertElement("DrawPolyline", vertices);
469
0
}
470
471
void STOFFSpreadsheetEncoder::drawPath(const ::librevenge::RVNGPropertyList &path)
472
0
{
473
0
  m_state->m_encoder.insertElement("DrawPath", path);
474
0
}
475
476
void STOFFSpreadsheetEncoder::drawConnector(const ::librevenge::RVNGPropertyList &list)
477
0
{
478
0
  m_state->m_encoder.insertElement("DrawConnector", list);
479
0
}
480
481
//
482
// equation
483
//
484
void STOFFSpreadsheetEncoder::insertEquation(const ::librevenge::RVNGPropertyList &list)
485
0
{
486
0
  m_state->m_encoder.insertElement("InsertEquation", list);
487
0
}
488
489
490
// vim: set filetype=cpp tabstop=2 shiftwidth=2 cindent autoindent smartindent noexpandtab: