Version 7.5.1.1, tag libreoffice-7.5.1.1
[LibreOffice.git] / sc / source / filter / oox / stylesfragment.cxx
blobe6707704dc44049624adc3441f54fb6be8a2d6c2
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3 * This file is part of the LibreOffice project.
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/.
9 * This file incorporates work covered by the following license notice:
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
20 #include <stylesfragment.hxx>
21 #include <biffhelper.hxx>
23 #include <oox/helper/attributelist.hxx>
24 #include <oox/token/namespaces.hxx>
25 #include <oox/token/tokens.hxx>
27 namespace oox::xls {
29 using namespace ::oox::core;
31 IndexedColorsContext::IndexedColorsContext( WorkbookFragmentBase& rFragment ) :
32 WorkbookContextBase( rFragment )
36 ContextHandlerRef IndexedColorsContext::onCreateContext( sal_Int32 nElement, const AttributeList& rAttribs )
38 switch( getCurrentElement() )
40 case XLS_TOKEN( indexedColors ):
41 if( nElement == XLS_TOKEN( rgbColor ) ) getStyles().importPaletteColor( rAttribs );
42 break;
44 return nullptr;
47 ContextHandlerRef IndexedColorsContext::onCreateRecordContext( sal_Int32 nRecId, SequenceInputStream& rStrm )
49 switch( getCurrentElement() )
51 case BIFF12_ID_INDEXEDCOLORS:
52 if( nRecId == BIFF12_ID_RGBCOLOR ) getStyles().importPaletteColor( rStrm );
53 break;
55 return nullptr;
58 ContextHandlerRef FontContext::onCreateContext( sal_Int32 nElement, const AttributeList& rAttribs )
60 if( mxFont )
61 mxFont->importAttribs( nElement, rAttribs );
62 return nullptr;
65 void BorderContext::onStartElement( const AttributeList& rAttribs )
67 if( mxBorder && (getCurrentElement() == XLS_TOKEN( border )) )
68 mxBorder->importBorder( rAttribs );
71 ContextHandlerRef BorderContext::onCreateContext( sal_Int32 nElement, const AttributeList& rAttribs )
73 if( mxBorder ) switch( getCurrentElement() )
75 case XLS_TOKEN( border ):
76 mxBorder->importStyle( nElement, rAttribs );
77 return this;
79 default:
80 if( nElement == XLS_TOKEN( color ) )
81 mxBorder->importColor( getCurrentElement(), rAttribs );
83 return nullptr;
86 ContextHandlerRef FillContext::onCreateContext( sal_Int32 nElement, const AttributeList& rAttribs )
88 if( mxFill ) switch( getCurrentElement() )
90 case XLS_TOKEN( fill ):
91 switch( nElement )
93 case XLS_TOKEN( patternFill ): mxFill->importPatternFill( rAttribs ); return this;
94 case XLS_TOKEN( gradientFill ): mxFill->importGradientFill( rAttribs ); return this;
96 break;
97 case XLS_TOKEN( patternFill ):
98 switch( nElement )
100 case XLS_TOKEN( fgColor ): mxFill->importFgColor( rAttribs ); break;
101 case XLS_TOKEN( bgColor ): mxFill->importBgColor( rAttribs ); break;
103 break;
104 case XLS_TOKEN( gradientFill ):
105 if( nElement == XLS_TOKEN( stop ) )
107 mfGradPos = rAttribs.getDouble( XML_position, -1.0 );
108 return this;
110 break;
111 case XLS_TOKEN( stop ):
112 if( nElement == XLS_TOKEN( color ) )
113 mxFill->importColor( rAttribs, mfGradPos );
114 break;
116 return nullptr;
119 void XfContext::onStartElement( const AttributeList& rAttribs )
121 if( mxXf && (getCurrentElement() == XLS_TOKEN( xf )) )
122 mxXf->importXf( rAttribs, mbCellXf );
125 ContextHandlerRef XfContext::onCreateContext( sal_Int32 nElement, const AttributeList& rAttribs )
127 if( mxXf ) switch( getCurrentElement() )
129 case XLS_TOKEN( xf ):
130 switch( nElement )
132 case XLS_TOKEN( alignment ): mxXf->importAlignment( rAttribs ); break;
133 case XLS_TOKEN( protection ): mxXf->importProtection( rAttribs ); break;
135 break;
137 return nullptr;
140 ContextHandlerRef DxfContext::onCreateContext( sal_Int32 nElement, const AttributeList& rAttribs )
142 if( mxDxf ) switch( getCurrentElement() )
144 case XLS_TOKEN( dxf ):
145 switch( nElement )
147 case XLS_TOKEN( font ): return new FontContext( *this, mxDxf->createFont() );
148 case XLS_TOKEN( border ): return new BorderContext( *this, mxDxf->createBorder() );
149 case XLS_TOKEN( fill ): return new FillContext( *this, mxDxf->createFill() );
151 case XLS_TOKEN( numFmt ): mxDxf->importNumFmt( rAttribs ); break;
152 #if 0
153 case XLS_TOKEN( alignment ): mxDxf->importAlignment( rAttribs ); break;
154 case XLS_TOKEN( protection ): mxDxf->importProtection( rAttribs ); break;
155 #endif
157 break;
160 if( mxExtDxf ) switch( getCurrentElement() )
162 case XLS14_TOKEN( dxf ):
163 switch( nElement )
165 case XLS_TOKEN( font ): return new FontContext( *this, mxExtDxf->createFont() );
166 case XLS_TOKEN( border ): return new BorderContext( *this, mxExtDxf->createBorder() );
167 case XLS_TOKEN( fill ): return new FillContext( *this, mxExtDxf->createFill() );
168 case XLS_TOKEN( numFmt ): mxExtDxf->importNumFmt( rAttribs ); break;
170 break;
172 return nullptr;
175 StylesFragment::StylesFragment( const WorkbookHelper& rHelper, const OUString& rFragmentPath ) :
176 WorkbookFragmentBase( rHelper, rFragmentPath )
180 ContextHandlerRef StylesFragment::onCreateContext( sal_Int32 nElement, const AttributeList& rAttribs )
182 switch( getCurrentElement() )
184 case XML_ROOT_CONTEXT:
185 if( nElement == XLS_TOKEN( styleSheet ) ) return this;
186 break;
188 case XLS_TOKEN( styleSheet ):
189 switch( nElement )
191 case XLS_TOKEN( colors ):
192 case XLS_TOKEN( numFmts ):
193 case XLS_TOKEN( fonts ):
194 case XLS_TOKEN( borders ):
195 case XLS_TOKEN( fills ):
196 case XLS_TOKEN( cellXfs ):
197 case XLS_TOKEN( cellStyleXfs ):
198 case XLS_TOKEN( dxfs ):
199 case XLS_TOKEN( cellStyles ): return this;
201 break;
203 case XLS_TOKEN( colors ):
204 if( nElement == XLS_TOKEN( indexedColors ) ) return new IndexedColorsContext( *this );
205 break;
206 case XLS_TOKEN( numFmts ):
207 if( nElement == XLS_TOKEN( numFmt ) ) getStyles().importNumFmt( rAttribs );
208 break;
209 case XLS_TOKEN( fonts ):
210 if( nElement == XLS_TOKEN( font ) ) return new FontContext( *this, getStyles().createFont() );
211 break;
212 case XLS_TOKEN( borders ):
213 if( nElement == XLS_TOKEN( border ) ) return new BorderContext( *this, getStyles().createBorder() );
214 break;
215 case XLS_TOKEN( fills ):
216 if( nElement == XLS_TOKEN( fill ) ) return new FillContext( *this, getStyles().createFill() );
217 break;
218 case XLS_TOKEN( cellXfs ):
219 if( nElement == XLS_TOKEN( xf ) ) return new XfContext( *this, getStyles().createCellXf(), true );
220 break;
221 case XLS_TOKEN( cellStyleXfs ):
222 if( nElement == XLS_TOKEN( xf ) ) return new XfContext( *this, getStyles().createStyleXf(), false );
223 break;
224 case XLS_TOKEN( dxfs ):
225 if( nElement == XLS_TOKEN( dxf ) ) return new DxfContext( *this, getStyles().createDxf() );
226 break;
227 case XLS_TOKEN( cellStyles ):
228 if( nElement == XLS_TOKEN( cellStyle ) ) getStyles().importCellStyle( rAttribs );
229 break;
231 return nullptr;
234 ContextHandlerRef StylesFragment::onCreateRecordContext( sal_Int32 nRecId, SequenceInputStream& rStrm )
236 switch( getCurrentElement() )
238 case XML_ROOT_CONTEXT:
239 if( nRecId == BIFF12_ID_STYLESHEET ) return this;
240 break;
242 case BIFF12_ID_STYLESHEET:
243 switch( nRecId )
245 case BIFF12_ID_COLORS:
246 case BIFF12_ID_NUMFMTS:
247 case BIFF12_ID_FONTS:
248 case BIFF12_ID_BORDERS:
249 case BIFF12_ID_FILLS:
250 case BIFF12_ID_CELLXFS:
251 case BIFF12_ID_CELLSTYLEXFS:
252 case BIFF12_ID_DXFS:
253 case BIFF12_ID_CELLSTYLES: return this;
255 break;
257 case BIFF12_ID_COLORS:
258 if( nRecId == BIFF12_ID_INDEXEDCOLORS ) return new IndexedColorsContext( *this );
259 break;
260 case BIFF12_ID_NUMFMTS:
261 if( nRecId == BIFF12_ID_NUMFMT ) getStyles().importNumFmt( rStrm );
262 break;
263 case BIFF12_ID_FONTS:
264 if( nRecId == BIFF12_ID_FONT ) getStyles().createFont()->importFont( rStrm );
265 break;
266 case BIFF12_ID_BORDERS:
267 if( nRecId == BIFF12_ID_BORDER ) getStyles().createBorder()->importBorder( rStrm );
268 break;
269 case BIFF12_ID_FILLS:
270 if( nRecId == BIFF12_ID_FILL ) getStyles().createFill()->importFill( rStrm );
271 break;
272 case BIFF12_ID_CELLXFS:
273 if( nRecId == BIFF12_ID_XF ) getStyles().createCellXf()->importXf( rStrm, true );
274 break;
275 case BIFF12_ID_CELLSTYLEXFS:
276 if( nRecId == BIFF12_ID_XF ) getStyles().createStyleXf()->importXf( rStrm, false );
277 break;
278 case BIFF12_ID_DXFS:
279 if( nRecId == BIFF12_ID_DXF ) getStyles().createDxf()->importDxf( rStrm );
280 break;
281 case BIFF12_ID_CELLSTYLES:
282 if( nRecId == BIFF12_ID_CELLSTYLE ) getStyles().importCellStyle( rStrm );
283 break;
285 return nullptr;
288 const RecordInfo* StylesFragment::getRecordInfos() const
290 static const RecordInfo spRecInfos[] =
292 { BIFF12_ID_BORDERS, BIFF12_ID_BORDERS + 1 },
293 { BIFF12_ID_CELLSTYLES, BIFF12_ID_CELLSTYLES + 1 },
294 { BIFF12_ID_CELLSTYLEXFS, BIFF12_ID_CELLSTYLEXFS + 1 },
295 { BIFF12_ID_CELLXFS, BIFF12_ID_CELLXFS + 1 },
296 { BIFF12_ID_COLORS, BIFF12_ID_COLORS + 1 },
297 { BIFF12_ID_DXFS, BIFF12_ID_DXFS + 1 },
298 { BIFF12_ID_FILLS, BIFF12_ID_FILLS + 1 },
299 { BIFF12_ID_FONTS, BIFF12_ID_FONTS + 1 },
300 { BIFF12_ID_INDEXEDCOLORS, BIFF12_ID_INDEXEDCOLORS + 1 },
301 { BIFF12_ID_MRUCOLORS, BIFF12_ID_MRUCOLORS + 1 },
302 { BIFF12_ID_NUMFMTS, BIFF12_ID_NUMFMTS + 1 },
303 { BIFF12_ID_STYLESHEET, BIFF12_ID_STYLESHEET + 1 },
304 { BIFF12_ID_TABLESTYLES, BIFF12_ID_TABLESTYLES + 1 },
305 { -1, -1 }
307 return spRecInfos;
310 void StylesFragment::finalizeImport()
312 getStyles().finalizeImport();
315 } // namespace oox::xls
317 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */