1 /**************************************************************
2 *
3 * Licensed to the Apache Software Foundation (ASF) under one
4 * or more contributor license agreements. See the NOTICE file
5 * distributed with this work for additional information
6 * regarding copyright ownership. The ASF licenses this file
7 * to you under the Apache License, Version 2.0 (the
8 * "License"); you may not use this file except in compliance
9 * with the License. You may obtain a copy of the License at
10 *
11 * http://www.apache.org/licenses/LICENSE-2.0
12 *
13 * Unless required by applicable law or agreed to in writing,
14 * software distributed under the License is distributed on an
15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16 * KIND, either express or implied. See the License for the
17 * specific language governing permissions and limitations
18 * under the License.
19 *
20 *************************************************************/
21
22
23
24 #include <ThemeTable.hxx>
25 #ifndef INCLUDED_RESOURCESIDS
26 #include <doctok/resourceids.hxx>
27 #include <ooxml/resourceids.hxx>
28 #endif
29 #include "dmapperLoggers.hxx"
30
31 #ifdef DEBUG_DOMAINMAPPER
32 #include <resourcemodel/QNameToString.hxx>
33 #endif
34
35 namespace writerfilter {
36 namespace dmapper
37 {
38
39 struct ThemeTable_Impl
40 {
ThemeTable_Implwriterfilter::dmapper::ThemeTable_Impl41 ThemeTable_Impl() :
42 m_currentThemeFontId(0),
43 m_currentFontThemeEntry() {}
44 std::map<sal_uInt32, std::map<sal_uInt32, ::rtl::OUString> > m_themeFontMap;
45 sal_uInt32 m_currentThemeFontId;
46 std::map<sal_uInt32, ::rtl::OUString> m_currentFontThemeEntry;
47 };
48
ThemeTable()49 ThemeTable::ThemeTable()
50 : LoggedProperties(dmapper_logger, "ThemeTable")
51 , LoggedTable(dmapper_logger, "ThemeTable")
52 , m_pImpl( new ThemeTable_Impl )
53 {
54 // printf("ThemeTable::ThemeTable()\n");
55 }
56
~ThemeTable()57 ThemeTable::~ThemeTable()
58 {
59 delete m_pImpl;
60 }
61
lcl_attribute(Id Name,Value & val)62 void ThemeTable::lcl_attribute(Id Name, Value & val)
63 {
64 #ifdef DEBUG_DOMAINMAPPER
65 dmapper_logger->startElement("ThemeTable.attribute");
66 dmapper_logger->attribute("name", (*QNameToString::Instance())(Name));
67 dmapper_logger->attribute("value", val.toString());
68 #endif
69 // int nIntValue = val.getInt();
70 ::rtl::OUString sValue = val.getString();
71 // printf ( "ThemeTable::attribute(0x%.4x, 0x%.4x) [%s]\n", (unsigned int)Name, (unsigned int)nIntValue, ::rtl::OUStringToOString(sValue, RTL_TEXTENCODING_DONTKNOW).getStr());
72 /* WRITERFILTERSTATUS: table: ThemeTable_attributedata */
73 switch(Name)
74 {
75 /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
76 case NS_ooxml::LN_CT_TextFont_typeface:
77 if (sValue.getLength())
78 m_pImpl->m_currentFontThemeEntry[m_pImpl->m_currentThemeFontId] = sValue;
79 break;
80 default:
81 {
82 #ifdef DEBUG_DOMAINMAPPER
83 dmapper_logger->element("unhandled");
84 #endif
85 }
86 }
87 #ifdef DEBUG_DOMAINMAPPER
88 dmapper_logger->endElement("ThemeTable.attribute");
89 #endif
90 }
91
lcl_sprm(Sprm & rSprm)92 void ThemeTable::lcl_sprm(Sprm& rSprm)
93 {
94 #ifdef DEBUG_DOMAINMAPPER
95 dmapper_logger->startElement("ThemeTable.sprm");
96 dmapper_logger->chars(rSprm.toString());
97 #endif
98
99 sal_uInt32 nSprmId = rSprm.getId();
100 (void)nSprmId;
101
102 Value::Pointer_t pValue = rSprm.getValue();
103 sal_Int32 nIntValue = pValue->getInt();
104 (void)nIntValue;
105 rtl::OUString sStringValue = pValue->getString();
106
107 // printf ( "ThemeTable::sprm(0x%.4x, 0x%.4x) [%s]\n", (unsigned int)nSprmId, (unsigned int)nIntValue, ::rtl::OUStringToOString(sStringValue, RTL_TEXTENCODING_DONTKNOW).getStr());
108
109 /* WRITERFILTERSTATUS: table: ThemeTable_sprm */
110 switch(nSprmId)
111 {
112 /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
113 case NS_ooxml::LN_CT_BaseStyles_fontScheme:
114 {
115 writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
116 if( pProperties.get())
117 pProperties->resolve(*this);
118 }
119 break;
120 /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
121 case NS_ooxml::LN_CT_FontScheme_majorFont:
122 /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
123 case NS_ooxml::LN_CT_FontScheme_minorFont:
124 {
125 writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
126 m_pImpl->m_currentFontThemeEntry = std::map<sal_uInt32, rtl::OUString>();
127 if( pProperties.get())
128 pProperties->resolve(*this);
129 m_pImpl->m_themeFontMap[nSprmId] = m_pImpl->m_currentFontThemeEntry;
130 }
131 break;
132 /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
133 case NS_ooxml::LN_CT_FontCollection_latin:
134 /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
135 case NS_ooxml::LN_CT_FontCollection_ea:
136 /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
137 case NS_ooxml::LN_CT_FontCollection_cs:
138 {
139 m_pImpl->m_currentThemeFontId = nSprmId;
140 writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
141 if( pProperties.get())
142 pProperties->resolve(*this);
143 }
144 break;
145 default:
146 {
147 #ifdef DEBUG_DOMAINMAPPER
148 dmapper_logger->element("unhandled");
149 #endif
150 }
151 }
152 #ifdef DEBUG_DOMAINMAPPER
153 dmapper_logger->endElement("ThemeTable.sprm");
154 #endif
155 }
156
lcl_entry(int,writerfilter::Reference<Properties>::Pointer_t ref)157 void ThemeTable::lcl_entry(int /*pos*/, writerfilter::Reference<Properties>::Pointer_t ref)
158 {
159 #ifdef DEBUG_DOMAINMAPPER
160 dmapper_logger->startElement("ThemeTable.entry");
161 #endif
162
163 ref->resolve(*this);
164
165 #ifdef DEBUG_DOMAINMAPPER
166 dmapper_logger->endElement("ThemeTable.entry");
167 #endif
168 }
169
getFontNameForTheme(const Id id) const170 const ::rtl::OUString ThemeTable::getFontNameForTheme(const Id id) const
171 {
172 std::map<sal_uInt32, ::rtl::OUString> tmpThemeFontMap;
173 switch (id)
174 {
175 case NS_ooxml::LN_Value_ST_Theme_majorEastAsia:
176 case NS_ooxml::LN_Value_ST_Theme_majorBidi:
177 case NS_ooxml::LN_Value_ST_Theme_majorAscii:
178 case NS_ooxml::LN_Value_ST_Theme_majorHAnsi:
179 tmpThemeFontMap = m_pImpl->m_themeFontMap[NS_ooxml::LN_CT_FontScheme_majorFont];
180 break;
181 case NS_ooxml::LN_Value_ST_Theme_minorEastAsia:
182 case NS_ooxml::LN_Value_ST_Theme_minorBidi:
183 case NS_ooxml::LN_Value_ST_Theme_minorAscii:
184 case NS_ooxml::LN_Value_ST_Theme_minorHAnsi:
185 tmpThemeFontMap = m_pImpl->m_themeFontMap[NS_ooxml::LN_CT_FontScheme_minorFont];
186 break;
187 default:
188 return ::rtl::OUString();
189 }
190
191 switch (id)
192 {
193 case NS_ooxml::LN_Value_ST_Theme_majorAscii:
194 case NS_ooxml::LN_Value_ST_Theme_majorHAnsi:
195 case NS_ooxml::LN_Value_ST_Theme_minorAscii:
196 case NS_ooxml::LN_Value_ST_Theme_minorHAnsi:
197 {
198 std::map<sal_uInt32, ::rtl::OUString>::const_iterator Iter = tmpThemeFontMap.find(NS_ooxml::LN_CT_FontCollection_latin);
199 if (Iter != tmpThemeFontMap.end())
200 return (Iter)->second;
201 return ::rtl::OUString();
202 }
203 case NS_ooxml::LN_Value_ST_Theme_majorBidi:
204 case NS_ooxml::LN_Value_ST_Theme_minorBidi:
205 {
206 std::map<sal_uInt32, ::rtl::OUString>::const_iterator Iter = tmpThemeFontMap.find(NS_ooxml::LN_CT_FontCollection_cs);
207 if (Iter != tmpThemeFontMap.end())
208 return (Iter)->second;
209 return ::rtl::OUString();
210 }
211 case NS_ooxml::LN_Value_ST_Theme_majorEastAsia:
212 case NS_ooxml::LN_Value_ST_Theme_minorEastAsia:
213 {
214 std::map<sal_uInt32, ::rtl::OUString>::const_iterator Iter = tmpThemeFontMap.find(NS_ooxml::LN_CT_FontCollection_ea);
215 if (Iter != tmpThemeFontMap.end())
216 return (Iter)->second;
217 return ::rtl::OUString();
218 }
219 default:
220 return ::rtl::OUString();
221 }
222 }
223
224 }//namespace dmapper
225 } //namespace writerfilter
226