LibreOffice Module starmath (master) 1
element.cxx
Go to the documentation of this file.
1/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */
2/*
3 * This file is part of the LibreOffice 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 <mathml/element.hxx>
11
13{
14 switch (m_aElementType)
15 {
17 m_aAttributePosList = std::vector<SmMlAttributePos>(0);
18 break;
20 m_aAttributePosList = std::vector<SmMlAttributePos>(0);
21 break;
23 m_aAttributePosList = std::vector<SmMlAttributePos>(0);
24 break;
26 m_aAttributePosList = std::vector<SmMlAttributePos>(0);
27 //m_aAttributePosList = std::vector<SmMlAttributePos>(std::begin(starmathdatabase::MlAttributeListMath), std::end(starmathdatabase::MlAttributeListMath));
28 break;
31 = std::vector<SmMlAttributePos>(std::begin(starmathdatabase::MlAttributeListMi),
33 break;
36 = std::vector<SmMlAttributePos>(std::begin(starmathdatabase::MlAttributeListMerror),
38 break;
41 = std::vector<SmMlAttributePos>(std::begin(starmathdatabase::MlAttributeListMn),
43 break;
46 = std::vector<SmMlAttributePos>(std::begin(starmathdatabase::MlAttributeListMo),
48 break;
51 = std::vector<SmMlAttributePos>(std::begin(starmathdatabase::MlAttributeListMrow),
53 break;
56 = std::vector<SmMlAttributePos>(std::begin(starmathdatabase::MlAttributeListMtext),
58 break;
61 = std::vector<SmMlAttributePos>(std::begin(starmathdatabase::MlAttributeListMstyle),
63 break;
64 default:
65 break;
66 }
67 // Create attribute vector with given pattern
69}
70
72{
73 // Look for the attribute position and return if exists
74 for (size_t i = 0; i < m_aAttributePosList.size(); ++i)
75 {
76 if (m_aAttributePosList[i].m_aAttributeValueType == aAttributeType)
78 }
79 return SmMlAttribute();
80}
81
83{
84 // Look for the attribute position and return if exists
85 for (size_t i = 0; i < m_aAttributePosList.size(); ++i)
86 {
87 if (m_aAttributePosList[i].m_aAttributeValueType == aAttributeType)
88 return m_aAttributeList[m_aAttributePosList[i].m_nPos].isSet();
89 }
90 return false;
91}
92
94{
95 // Look for the attribute position and assign if exists
96 for (size_t i = 0; i < m_aAttributePosList.size(); ++i)
97 {
98 if (m_aAttributePosList[i].m_aAttributeValueType == aAttribute->getMlAttributeValueType())
99 {
100 m_aAttributeList[m_aAttributePosList[i].m_nPos].setMlAttributeValue(aAttribute);
101 break;
102 }
103 }
104}
105
106void SmMlElement::setSubElement(size_t nPos, SmMlElement* aElement)
107{
108 // This is the new parent element
109 aElement->setParentElement(this);
110 aElement->setSubElementId(nPos);
111 // Check if the vector is long enough
112 // Careful nOldSize can be 0 and -1 will underflow
113 // We must put something on the empty locations
114 size_t nOldSize = m_aSubElements.size();
115 if (nPos + 1 > nOldSize)
116 {
117 m_aSubElements.resize(nPos + 1);
118 for (; nOldSize < nPos; ++nOldSize)
119 m_aSubElements[nOldSize] = nullptr;
120 }
121 // Assign value
122 m_aSubElements[nPos] = aElement;
123}
124
125std::vector<SmMlAttribute>
126starmathdatabase::makeMlAttributeList(std::vector<SmMlAttributePos> aAttributePosList)
127{
128 std::vector<SmMlAttribute> aAttributeList(aAttributePosList.size());
129 for (size_t i = 0; i < aAttributePosList.size(); ++i)
130 {
131 aAttributeList[i].setMlAttributeValueType(aAttributePosList[i].m_aAttributeValueType);
132 }
133 return aAttributeList;
134}
135
136/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */
SmMlAttributeValueType getMlAttributeValueType() const
Returns the type of attribute we are dealing with.
Definition: attribute.hxx:101
SmMlElementType m_aElementType
Definition: element.hxx:61
bool isAttributeSet(SmMlAttributeValueType aAttributeType) const
Checks if an attribute has been manually set.
Definition: element.cxx:82
SmMlAttribute getAttribute(size_t nAttributePos) const
Gets a given attribute.
Definition: element.hxx:154
std::vector< SmMlAttribute > m_aAttributeList
Definition: element.hxx:74
std::vector< SmMlAttributePos > m_aAttributePosList
Definition: element.hxx:77
void setSubElement(size_t nPos, SmMlElement *aElement)
Sets a given sub element.
Definition: element.cxx:106
void setSubElementId(size_t nSubElementId)
Sets subelement id.
Definition: element.hxx:256
void setAttribute(const SmMlAttribute *aAttribute)
Sets a given attribute.
Definition: element.cxx:93
std::vector< SmMlElement * > m_aSubElements
Definition: element.hxx:80
void setParentElement(SmMlElement *aParentElement)
Sets the parent element No allocation / free is done.
Definition: element.hxx:276
void SmImplAttributeType()
Definition: element.cxx:12
SmMlAttributeValueType
Definition: def.hxx:73
sal_uInt16 nPos
int i
SmMlAttributePos MlAttributeListMtext[7]
Definition: def.cxx:89
SmMlAttributePos MlAttributeListMerror[4]
Definition: def.cxx:36
std::vector< SmMlAttribute > makeMlAttributeList(std::vector< SmMlAttributePos > aAttributePosList)
Generates an attribute vector of default values from an attribute position list.
Definition: element.cxx:126
SmMlAttributePos MlAttributeListMo[18]
Definition: def.cxx:57
SmMlAttributePos MlAttributeListMstyle[18]
Definition: def.cxx:101
SmMlAttributePos MlAttributeListMn[7]
Definition: def.cxx:45
SmMlAttributePos MlAttributeListMrow[4]
Definition: def.cxx:80
SmMlAttributePos MlAttributeListMi[7]
Definition: def.cxx:24