Coverage Report

Created: 2026-09-06 07:18

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/libetonyek/src/lib/contexts/KEY1FillElement.cpp
Line
Count
Source
1
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2
/*
3
 * This file is part of the libetonyek project.
4
 *
5
 * This Source Code Form is subject to the terms of the Mozilla Public
6
 * License, v. 2.0. If a copy of the MPL was not distributed with this
7
 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8
 */
9
10
#include <deque>
11
#include <memory>
12
13
#include "KEY1FillElement.h"
14
15
#include "IWORKParser.h"
16
#include "IWORKTokenizer.h"
17
#include "KEY1Dictionary.h"
18
#include "KEY1ParserState.h"
19
#include "KEY1StringConverter.h"
20
#include "KEY1Token.h"
21
22
#include "libetonyek_utils.h"
23
#include "libetonyek_xml.h"
24
25
namespace libetonyek
26
{
27
KEY1FillElement::KEY1FillElement(KEY1ParserState &state, boost::optional<IWORKFill> &fill)
28
0
  : KEY1XMLElementContextBase(state)
29
0
  , m_fill(fill)
30
0
  , m_type()
31
0
  , m_color()
32
0
  , m_imageName()
33
0
  , m_imageType()
34
0
{
35
0
}
36
37
void KEY1FillElement::attribute(const int name, const char *const value)
38
0
{
39
0
  switch (name)
40
0
  {
41
0
  case KEY1Token::fill_color :
42
0
    m_color=KEY1StringConverter<IWORKColor>::convert(value);
43
0
    break;
44
0
  case KEY1Token::fill_type :
45
0
    switch (getState().getTokenizer().getId(value))
46
0
    {
47
0
    case KEY1Token::color :
48
0
      m_type=FILL_TYPE_COLOR;
49
0
      break;
50
0
    case KEY1Token::image :
51
0
      m_type=FILL_TYPE_IMAGE;
52
0
      break;
53
0
    case KEY1Token::none :
54
0
      m_type=FILL_TYPE_NONE;
55
0
      break;
56
0
    default :
57
0
      ETONYEK_DEBUG_MSG(("KEY1FillElement::attribute[KEY1Parser.cpp]: unexpected type %s\n", value));
58
0
      break;
59
0
    }
60
0
    break;
61
0
  case KEY1Token::id :
62
0
    setId(value);
63
0
    break;
64
0
  case KEY1Token::image_data :
65
0
    m_imageName=value;
66
0
    break;
67
0
  case KEY1Token::image_scale :
68
0
    switch (getState().getTokenizer().getId(value))
69
0
    {
70
0
    case KEY1Token::scale_to_fit :
71
0
      m_imageType=IWORK_IMAGE_TYPE_SCALE_TO_FIT;
72
0
      break;
73
0
    case KEY1Token::tile :
74
0
      m_imageType=IWORK_IMAGE_TYPE_TILE;
75
0
      break;
76
0
    default :
77
0
      ETONYEK_DEBUG_MSG(("KEY1FillElement::attribute[KEY1Parser.cpp]: unexpected imageType type %s\n", value));
78
0
      break;
79
0
    }
80
0
    break;
81
0
  case KEY1Token::byte_size : // the image size
82
0
    break;
83
0
  default :
84
0
    ETONYEK_DEBUG_MSG(("KEY1FillElement::attribute[KEY1Parser.cpp]: unexpected attribute\n"));
85
0
    break;
86
0
  }
87
0
}
88
89
IWORKXMLContextPtr_t KEY1FillElement::element(const int name)
90
0
{
91
0
  switch (name)
92
0
  {
93
0
  default :
94
0
    ETONYEK_DEBUG_MSG(("KEY1FillElement::element[KEY1Parser.cpp]: unknown element\n"));
95
0
    break;
96
0
  }
97
98
0
  return IWORKXMLContextPtr_t();
99
0
}
100
101
void KEY1FillElement::endOfElement()
102
0
{
103
0
  if (!m_type) return;
104
0
  switch (get(m_type))
105
0
  {
106
0
  case FILL_TYPE_COLOR :
107
0
    if (!m_color)
108
0
    {
109
0
      ETONYEK_DEBUG_MSG(("KEY1FillElement::endOfElement[KEY1Parser.cpp]: can not find the color\n"));
110
0
      break;
111
0
    }
112
0
    m_fill=get(m_color);
113
0
    break;
114
0
  case FILL_TYPE_IMAGE :
115
0
  {
116
0
    if (!m_imageName)
117
0
    {
118
0
      ETONYEK_DEBUG_MSG(("KEY1FillElement::endOfElement[KEY1Parser.cpp]: can not find the image name\n"));
119
0
      break;
120
0
    }
121
0
    IWORKMediaContent image;
122
0
    image.m_data = std::make_shared<IWORKData>();
123
0
    image.m_data->m_stream.reset(getState().getParser().getPackage()->getSubStreamByName(get(m_imageName).c_str()));
124
0
    if (m_imageType) image.m_type=get(m_imageType);
125
0
    image.m_fillColor=m_color;
126
0
    m_fill=image;
127
0
    break;
128
0
  }
129
0
  case FILL_TYPE_NONE :
130
0
    break;
131
0
  default:
132
0
    ETONYEK_DEBUG_MSG(("KEY1FillElement::endOfElement[KEY1Parser.cpp]: unknown type\n"));
133
0
  }
134
0
  if (getId() && m_fill)
135
0
    getState().getDictionary().m_fills[get(getId())]=get(m_fill);
136
0
}
137
138
}
139
140
/* vim:set shiftwidth=2 softtabstop=2 expandtab: */