xref: /AOO41X/main/xmloff/source/draw/XMLNumberStyles.cxx (revision cdf0e10c4e3984b49a9502b011690b615761d4a3)
1*cdf0e10cSrcweir /*************************************************************************
2*cdf0e10cSrcweir  *
3*cdf0e10cSrcweir  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4*cdf0e10cSrcweir  *
5*cdf0e10cSrcweir  * Copyright 2000, 2010 Oracle and/or its affiliates.
6*cdf0e10cSrcweir  *
7*cdf0e10cSrcweir  * OpenOffice.org - a multi-platform office productivity suite
8*cdf0e10cSrcweir  *
9*cdf0e10cSrcweir  * This file is part of OpenOffice.org.
10*cdf0e10cSrcweir  *
11*cdf0e10cSrcweir  * OpenOffice.org is free software: you can redistribute it and/or modify
12*cdf0e10cSrcweir  * it under the terms of the GNU Lesser General Public License version 3
13*cdf0e10cSrcweir  * only, as published by the Free Software Foundation.
14*cdf0e10cSrcweir  *
15*cdf0e10cSrcweir  * OpenOffice.org is distributed in the hope that it will be useful,
16*cdf0e10cSrcweir  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17*cdf0e10cSrcweir  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18*cdf0e10cSrcweir  * GNU Lesser General Public License version 3 for more details
19*cdf0e10cSrcweir  * (a copy is included in the LICENSE file that accompanied this code).
20*cdf0e10cSrcweir  *
21*cdf0e10cSrcweir  * You should have received a copy of the GNU Lesser General Public License
22*cdf0e10cSrcweir  * version 3 along with OpenOffice.org.  If not, see
23*cdf0e10cSrcweir  * <http://www.openoffice.org/license.html>
24*cdf0e10cSrcweir  * for a copy of the LGPLv3 License.
25*cdf0e10cSrcweir  *
26*cdf0e10cSrcweir  ************************************************************************/
27*cdf0e10cSrcweir 
28*cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
29*cdf0e10cSrcweir #include "precompiled_xmloff.hxx"
30*cdf0e10cSrcweir #include <tools/debug.hxx>
31*cdf0e10cSrcweir #include <XMLNumberStylesExport.hxx>
32*cdf0e10cSrcweir #include <XMLNumberStylesImport.hxx>
33*cdf0e10cSrcweir #include "xmloff/xmlnmspe.hxx"
34*cdf0e10cSrcweir #include <xmloff/xmlimp.hxx>
35*cdf0e10cSrcweir #include <xmloff/nmspmap.hxx>
36*cdf0e10cSrcweir #include <xmloff/xmltoken.hxx>
37*cdf0e10cSrcweir 
38*cdf0e10cSrcweir #include "sdxmlexp_impl.hxx"
39*cdf0e10cSrcweir #include "sdxmlimp_impl.hxx"
40*cdf0e10cSrcweir 
41*cdf0e10cSrcweir using namespace rtl;
42*cdf0e10cSrcweir using namespace ::xmloff::token;
43*cdf0e10cSrcweir 
44*cdf0e10cSrcweir struct SdXMLDataStyleNumber
45*cdf0e10cSrcweir {
46*cdf0e10cSrcweir 	enum XMLTokenEnum meNumberStyle;
47*cdf0e10cSrcweir 	sal_Bool	mbLong;
48*cdf0e10cSrcweir 	sal_Bool	mbTextual;
49*cdf0e10cSrcweir 	sal_Bool	mbDecimal02;
50*cdf0e10cSrcweir 	const char* mpText;
51*cdf0e10cSrcweir }
52*cdf0e10cSrcweir 	aSdXMLDataStyleNumbers[] =
53*cdf0e10cSrcweir {
54*cdf0e10cSrcweir 	{ XML_DAY,			sal_False,		sal_False,		sal_False,		NULL },
55*cdf0e10cSrcweir 	{ XML_DAY,			sal_True,		sal_False,		sal_False,		NULL },
56*cdf0e10cSrcweir 	{ XML_MONTH,		sal_True,		sal_False,		sal_False,		NULL },
57*cdf0e10cSrcweir 	{ XML_MONTH,		sal_False,		sal_True,		sal_False,		NULL },
58*cdf0e10cSrcweir 	{ XML_MONTH,		sal_True,		sal_True,		sal_False,		NULL },
59*cdf0e10cSrcweir 	{ XML_YEAR,		    sal_False,		sal_False,		sal_False,		NULL },
60*cdf0e10cSrcweir 	{ XML_YEAR,		    sal_True,		sal_False,		sal_False,		NULL },
61*cdf0e10cSrcweir 	{ XML_DAY_OF_WEEK,	sal_False,		sal_False,		sal_False,		NULL },
62*cdf0e10cSrcweir 	{ XML_DAY_OF_WEEK,  sal_True,		sal_False,		sal_False,		NULL },
63*cdf0e10cSrcweir 	{ XML_TEXT,		    sal_False,		sal_False,		sal_False,		"."	 },
64*cdf0e10cSrcweir 	{ XML_TEXT,		    sal_False,		sal_False,		sal_False,		" "  },
65*cdf0e10cSrcweir 	{ XML_TEXT,		    sal_False,		sal_False,		sal_False,		", " },
66*cdf0e10cSrcweir 	{ XML_TEXT,		    sal_False,		sal_False,		sal_False,		". " },
67*cdf0e10cSrcweir 	{ XML_HOURS,		sal_False,		sal_False,		sal_False,		NULL },
68*cdf0e10cSrcweir 	{ XML_MINUTES,		sal_False,		sal_False,		sal_False,		NULL },
69*cdf0e10cSrcweir 	{ XML_TEXT,		    sal_False,		sal_False,		sal_False,		":"  },
70*cdf0e10cSrcweir 	{ XML_AM_PM,		sal_False,		sal_False,		sal_False,		NULL },
71*cdf0e10cSrcweir 	{ XML_SECONDS,		sal_False,		sal_False,		sal_False,		NULL },
72*cdf0e10cSrcweir 	{ XML_SECONDS,		sal_False,		sal_False,		sal_True,		NULL },
73*cdf0e10cSrcweir 	{ XML_TOKEN_INVALID,        0,              0,             0,       NULL  }
74*cdf0e10cSrcweir };
75*cdf0e10cSrcweir 
76*cdf0e10cSrcweir // date
77*cdf0e10cSrcweir 
78*cdf0e10cSrcweir #define DATA_STYLE_NUMBER_END				0
79*cdf0e10cSrcweir #define DATA_STYLE_NUMBER_DAY				1	// <number:day/>
80*cdf0e10cSrcweir #define DATA_STYLE_NUMBER_DAY_LONG			2	// <number:day number:style="long"/>
81*cdf0e10cSrcweir #define DATA_STYLE_NUMBER_MONTH_LONG		3	// <number:month number:style="long"/>
82*cdf0e10cSrcweir #define DATA_STYLE_NUMBER_MONTH_TEXT		4	// <number:month number:textual="true"/>
83*cdf0e10cSrcweir #define DATA_STYLE_NUMBER_MONTH_LONG_TEXT	5	// <number:month number:style="long" number:textual="true"/>
84*cdf0e10cSrcweir #define DATA_STYLE_NUMBER_YEAR				6	// <number:year/>
85*cdf0e10cSrcweir #define DATA_STYLE_NUMBER_YEAR_LONG			7	// <number:year number:style="long"/>
86*cdf0e10cSrcweir #define DATA_STYLE_NUMBER_DAYOFWEEK			8	// <number:day-of-week/>
87*cdf0e10cSrcweir #define DATA_STYLE_NUMBER_DAYOFWEEK_LONG	9	// <number:day-of-week number:style="long"/>
88*cdf0e10cSrcweir #define DATA_STYLE_NUMBER_TEXT_POINT		10	// <number:text>.</number:text>
89*cdf0e10cSrcweir #define DATA_STYLE_NUMBER_TEXT_SPACE		11	// <number:text> </number:text>
90*cdf0e10cSrcweir #define DATA_STYLE_NUMBER_TEXT_COMMASPACE	12	// <number:text>, </number:text>
91*cdf0e10cSrcweir #define DATA_STYLE_NUMBER_TEXT_POINTSPACE	13	// <number:text>. </number:text>
92*cdf0e10cSrcweir #define DATA_STYLE_NUMBER_HOURS				14	// <number:hours/>
93*cdf0e10cSrcweir #define DATA_STYLE_NUMBER_MINUTES			15	// <number:minutes/>
94*cdf0e10cSrcweir #define DATA_STYLE_NUMBER_TEXT_COLON		16	// <number:text>:</number:text>
95*cdf0e10cSrcweir #define DATA_STYLE_NUMBER_AMPM				17	// <number:am-pm/>
96*cdf0e10cSrcweir #define DATA_STYLE_NUMBER_SECONDS			18	// <number:seconds/>
97*cdf0e10cSrcweir #define DATA_STYLE_NUMBER_SECONDS_02		19	// <number:seconds number:/>
98*cdf0e10cSrcweir 
99*cdf0e10cSrcweir 
100*cdf0e10cSrcweir struct SdXMLFixedDataStyle
101*cdf0e10cSrcweir {
102*cdf0e10cSrcweir 	const char*	mpName;
103*cdf0e10cSrcweir 	sal_Bool	mbAutomatic;
104*cdf0e10cSrcweir 	sal_Bool	mbDateStyle;
105*cdf0e10cSrcweir 	sal_uInt8	mpFormat[8];
106*cdf0e10cSrcweir };
107*cdf0e10cSrcweir 
108*cdf0e10cSrcweir const SdXMLFixedDataStyle aSdXML_Standard_Short =
109*cdf0e10cSrcweir {
110*cdf0e10cSrcweir 	"D1", sal_True, sal_True,
111*cdf0e10cSrcweir 	{
112*cdf0e10cSrcweir 		DATA_STYLE_NUMBER_DAY_LONG,
113*cdf0e10cSrcweir 		DATA_STYLE_NUMBER_TEXT_POINT,
114*cdf0e10cSrcweir 		DATA_STYLE_NUMBER_MONTH_LONG,
115*cdf0e10cSrcweir 		DATA_STYLE_NUMBER_TEXT_POINT,
116*cdf0e10cSrcweir 		DATA_STYLE_NUMBER_YEAR_LONG,
117*cdf0e10cSrcweir 		0, 0, 0
118*cdf0e10cSrcweir 	}
119*cdf0e10cSrcweir };
120*cdf0e10cSrcweir 
121*cdf0e10cSrcweir const SdXMLFixedDataStyle aSdXML_Standard_Long =
122*cdf0e10cSrcweir {
123*cdf0e10cSrcweir 	"D2", sal_True, sal_True,
124*cdf0e10cSrcweir 	{
125*cdf0e10cSrcweir 		DATA_STYLE_NUMBER_DAYOFWEEK_LONG,
126*cdf0e10cSrcweir 		DATA_STYLE_NUMBER_TEXT_COMMASPACE,
127*cdf0e10cSrcweir 		DATA_STYLE_NUMBER_DAY,
128*cdf0e10cSrcweir 		DATA_STYLE_NUMBER_TEXT_POINTSPACE,
129*cdf0e10cSrcweir 		DATA_STYLE_NUMBER_MONTH_LONG_TEXT,
130*cdf0e10cSrcweir 		DATA_STYLE_NUMBER_TEXT_SPACE,
131*cdf0e10cSrcweir 		DATA_STYLE_NUMBER_YEAR_LONG,
132*cdf0e10cSrcweir 		0
133*cdf0e10cSrcweir 	}
134*cdf0e10cSrcweir };
135*cdf0e10cSrcweir 
136*cdf0e10cSrcweir const SdXMLFixedDataStyle aSdXML_DateStyle_1 =
137*cdf0e10cSrcweir {
138*cdf0e10cSrcweir 	"D3", sal_False, sal_True,
139*cdf0e10cSrcweir 	{
140*cdf0e10cSrcweir 		DATA_STYLE_NUMBER_DAY_LONG,
141*cdf0e10cSrcweir 		DATA_STYLE_NUMBER_TEXT_POINT,
142*cdf0e10cSrcweir 		DATA_STYLE_NUMBER_MONTH_LONG,
143*cdf0e10cSrcweir 		DATA_STYLE_NUMBER_TEXT_POINT,
144*cdf0e10cSrcweir 		DATA_STYLE_NUMBER_YEAR,
145*cdf0e10cSrcweir 		0, 0, 0
146*cdf0e10cSrcweir 	}
147*cdf0e10cSrcweir };
148*cdf0e10cSrcweir 
149*cdf0e10cSrcweir const SdXMLFixedDataStyle aSdXML_DateStyle_2 =
150*cdf0e10cSrcweir {
151*cdf0e10cSrcweir 	"D4", sal_False, sal_True,
152*cdf0e10cSrcweir 	{
153*cdf0e10cSrcweir 		DATA_STYLE_NUMBER_DAY_LONG,
154*cdf0e10cSrcweir 		DATA_STYLE_NUMBER_TEXT_POINT,
155*cdf0e10cSrcweir 		DATA_STYLE_NUMBER_MONTH_LONG,
156*cdf0e10cSrcweir 		DATA_STYLE_NUMBER_TEXT_POINT,
157*cdf0e10cSrcweir 		DATA_STYLE_NUMBER_YEAR_LONG,
158*cdf0e10cSrcweir 		0, 0, 0
159*cdf0e10cSrcweir 	}
160*cdf0e10cSrcweir };
161*cdf0e10cSrcweir 
162*cdf0e10cSrcweir const SdXMLFixedDataStyle aSdXML_DateStyle_3 =
163*cdf0e10cSrcweir {
164*cdf0e10cSrcweir 	"D5", sal_False, sal_True,
165*cdf0e10cSrcweir 	{
166*cdf0e10cSrcweir 		DATA_STYLE_NUMBER_DAY,
167*cdf0e10cSrcweir 		DATA_STYLE_NUMBER_TEXT_POINTSPACE,
168*cdf0e10cSrcweir 		DATA_STYLE_NUMBER_MONTH_TEXT,
169*cdf0e10cSrcweir 		DATA_STYLE_NUMBER_TEXT_SPACE,
170*cdf0e10cSrcweir 		DATA_STYLE_NUMBER_YEAR_LONG,
171*cdf0e10cSrcweir 		0, 0, 0
172*cdf0e10cSrcweir 	}
173*cdf0e10cSrcweir };
174*cdf0e10cSrcweir 
175*cdf0e10cSrcweir const SdXMLFixedDataStyle aSdXML_DateStyle_4 =
176*cdf0e10cSrcweir {
177*cdf0e10cSrcweir 	"D6", sal_False, sal_True,
178*cdf0e10cSrcweir 	{
179*cdf0e10cSrcweir 		DATA_STYLE_NUMBER_DAY,
180*cdf0e10cSrcweir 		DATA_STYLE_NUMBER_TEXT_POINTSPACE,
181*cdf0e10cSrcweir 		DATA_STYLE_NUMBER_MONTH_LONG_TEXT,
182*cdf0e10cSrcweir 		DATA_STYLE_NUMBER_TEXT_SPACE,
183*cdf0e10cSrcweir 		DATA_STYLE_NUMBER_YEAR_LONG,
184*cdf0e10cSrcweir 		0, 0, 0
185*cdf0e10cSrcweir 	}
186*cdf0e10cSrcweir };
187*cdf0e10cSrcweir 
188*cdf0e10cSrcweir const SdXMLFixedDataStyle aSdXML_DateStyle_5 =
189*cdf0e10cSrcweir {
190*cdf0e10cSrcweir 	"D7", sal_False, sal_True,
191*cdf0e10cSrcweir 	{
192*cdf0e10cSrcweir 		DATA_STYLE_NUMBER_DAYOFWEEK,
193*cdf0e10cSrcweir 		DATA_STYLE_NUMBER_TEXT_COMMASPACE,
194*cdf0e10cSrcweir 		DATA_STYLE_NUMBER_DAY,
195*cdf0e10cSrcweir 		DATA_STYLE_NUMBER_TEXT_POINTSPACE,
196*cdf0e10cSrcweir 		DATA_STYLE_NUMBER_MONTH_LONG_TEXT,
197*cdf0e10cSrcweir 		DATA_STYLE_NUMBER_TEXT_SPACE,
198*cdf0e10cSrcweir 		DATA_STYLE_NUMBER_YEAR_LONG,
199*cdf0e10cSrcweir 		0
200*cdf0e10cSrcweir 	}
201*cdf0e10cSrcweir };
202*cdf0e10cSrcweir 
203*cdf0e10cSrcweir const SdXMLFixedDataStyle aSdXML_DateStyle_6 =
204*cdf0e10cSrcweir {
205*cdf0e10cSrcweir 	"D8", sal_False, sal_True,
206*cdf0e10cSrcweir 	{
207*cdf0e10cSrcweir 		DATA_STYLE_NUMBER_DAYOFWEEK_LONG,
208*cdf0e10cSrcweir 		DATA_STYLE_NUMBER_TEXT_COMMASPACE,
209*cdf0e10cSrcweir 		DATA_STYLE_NUMBER_DAY,
210*cdf0e10cSrcweir 		DATA_STYLE_NUMBER_TEXT_POINTSPACE,
211*cdf0e10cSrcweir 		DATA_STYLE_NUMBER_MONTH_LONG_TEXT,
212*cdf0e10cSrcweir 		DATA_STYLE_NUMBER_TEXT_SPACE,
213*cdf0e10cSrcweir 		DATA_STYLE_NUMBER_YEAR_LONG,
214*cdf0e10cSrcweir 		0
215*cdf0e10cSrcweir 	}
216*cdf0e10cSrcweir };
217*cdf0e10cSrcweir 
218*cdf0e10cSrcweir const SdXMLFixedDataStyle aSdXML_TimeStyle_1 =
219*cdf0e10cSrcweir {	"T1", sal_True, sal_False,
220*cdf0e10cSrcweir 	{
221*cdf0e10cSrcweir 		DATA_STYLE_NUMBER_HOURS,
222*cdf0e10cSrcweir 		DATA_STYLE_NUMBER_TEXT_COLON,
223*cdf0e10cSrcweir 		DATA_STYLE_NUMBER_MINUTES,
224*cdf0e10cSrcweir 		DATA_STYLE_NUMBER_TEXT_COLON,
225*cdf0e10cSrcweir 		DATA_STYLE_NUMBER_SECONDS,
226*cdf0e10cSrcweir 		DATA_STYLE_NUMBER_AMPM,
227*cdf0e10cSrcweir 		0, 0,
228*cdf0e10cSrcweir 	}
229*cdf0e10cSrcweir };
230*cdf0e10cSrcweir 
231*cdf0e10cSrcweir const SdXMLFixedDataStyle aSdXML_TimeStyle_2 =
232*cdf0e10cSrcweir {	"T2", sal_False, sal_False,
233*cdf0e10cSrcweir 	{
234*cdf0e10cSrcweir 		DATA_STYLE_NUMBER_HOURS,
235*cdf0e10cSrcweir 		DATA_STYLE_NUMBER_TEXT_COLON,
236*cdf0e10cSrcweir 		DATA_STYLE_NUMBER_MINUTES,
237*cdf0e10cSrcweir 		0, 0, 0, 0, 0
238*cdf0e10cSrcweir 	}
239*cdf0e10cSrcweir };
240*cdf0e10cSrcweir 
241*cdf0e10cSrcweir const SdXMLFixedDataStyle aSdXML_TimeStyle_3 =
242*cdf0e10cSrcweir {	"T3", sal_False, sal_False,
243*cdf0e10cSrcweir 	{
244*cdf0e10cSrcweir 		DATA_STYLE_NUMBER_HOURS,
245*cdf0e10cSrcweir 		DATA_STYLE_NUMBER_TEXT_COLON,
246*cdf0e10cSrcweir 		DATA_STYLE_NUMBER_MINUTES,
247*cdf0e10cSrcweir 		DATA_STYLE_NUMBER_TEXT_COLON,
248*cdf0e10cSrcweir 		DATA_STYLE_NUMBER_SECONDS,
249*cdf0e10cSrcweir 		0, 0, 0
250*cdf0e10cSrcweir 	}
251*cdf0e10cSrcweir };
252*cdf0e10cSrcweir 
253*cdf0e10cSrcweir const SdXMLFixedDataStyle aSdXML_TimeStyle_4 =
254*cdf0e10cSrcweir {	"T4", sal_False, sal_False,
255*cdf0e10cSrcweir 	{
256*cdf0e10cSrcweir 		DATA_STYLE_NUMBER_HOURS,
257*cdf0e10cSrcweir 		DATA_STYLE_NUMBER_TEXT_COLON,
258*cdf0e10cSrcweir 		DATA_STYLE_NUMBER_MINUTES,
259*cdf0e10cSrcweir 		DATA_STYLE_NUMBER_TEXT_COLON,
260*cdf0e10cSrcweir 		DATA_STYLE_NUMBER_SECONDS_02,
261*cdf0e10cSrcweir 		0, 0, 0
262*cdf0e10cSrcweir 	}
263*cdf0e10cSrcweir };
264*cdf0e10cSrcweir 
265*cdf0e10cSrcweir const SdXMLFixedDataStyle aSdXML_TimeStyle_5 =
266*cdf0e10cSrcweir {	"T5", sal_False, sal_False,
267*cdf0e10cSrcweir 	{
268*cdf0e10cSrcweir 		DATA_STYLE_NUMBER_HOURS,
269*cdf0e10cSrcweir 		DATA_STYLE_NUMBER_TEXT_COLON,
270*cdf0e10cSrcweir 		DATA_STYLE_NUMBER_MINUTES,
271*cdf0e10cSrcweir 		DATA_STYLE_NUMBER_AMPM,
272*cdf0e10cSrcweir 		0, 0, 0, 0
273*cdf0e10cSrcweir 	}
274*cdf0e10cSrcweir };
275*cdf0e10cSrcweir 
276*cdf0e10cSrcweir const SdXMLFixedDataStyle aSdXML_TimeStyle_6 =
277*cdf0e10cSrcweir {	"T6", sal_False, sal_False,
278*cdf0e10cSrcweir 	{
279*cdf0e10cSrcweir 		DATA_STYLE_NUMBER_HOURS,
280*cdf0e10cSrcweir 		DATA_STYLE_NUMBER_TEXT_COLON,
281*cdf0e10cSrcweir 		DATA_STYLE_NUMBER_MINUTES,
282*cdf0e10cSrcweir 		DATA_STYLE_NUMBER_TEXT_COLON,
283*cdf0e10cSrcweir 		DATA_STYLE_NUMBER_SECONDS,
284*cdf0e10cSrcweir 		DATA_STYLE_NUMBER_AMPM,
285*cdf0e10cSrcweir 		0, 0
286*cdf0e10cSrcweir 	}
287*cdf0e10cSrcweir };
288*cdf0e10cSrcweir 
289*cdf0e10cSrcweir const SdXMLFixedDataStyle aSdXML_TimeStyle_7 =
290*cdf0e10cSrcweir {	"T7", sal_False, sal_False,
291*cdf0e10cSrcweir 	{
292*cdf0e10cSrcweir 		DATA_STYLE_NUMBER_HOURS,
293*cdf0e10cSrcweir 		DATA_STYLE_NUMBER_TEXT_COLON,
294*cdf0e10cSrcweir 		DATA_STYLE_NUMBER_MINUTES,
295*cdf0e10cSrcweir 		DATA_STYLE_NUMBER_TEXT_COLON,
296*cdf0e10cSrcweir 		DATA_STYLE_NUMBER_SECONDS_02,
297*cdf0e10cSrcweir 		DATA_STYLE_NUMBER_AMPM,
298*cdf0e10cSrcweir 		0, 0
299*cdf0e10cSrcweir 	}
300*cdf0e10cSrcweir };
301*cdf0e10cSrcweir 
302*cdf0e10cSrcweir const SdXMLFixedDataStyle* aSdXMLFixedDateFormats[SdXMLDateFormatCount] =
303*cdf0e10cSrcweir {
304*cdf0e10cSrcweir 	&aSdXML_Standard_Short,
305*cdf0e10cSrcweir 	&aSdXML_Standard_Long,
306*cdf0e10cSrcweir 	&aSdXML_DateStyle_1,
307*cdf0e10cSrcweir 	&aSdXML_DateStyle_2,
308*cdf0e10cSrcweir 	&aSdXML_DateStyle_3,
309*cdf0e10cSrcweir 	&aSdXML_DateStyle_4,
310*cdf0e10cSrcweir 	&aSdXML_DateStyle_5,
311*cdf0e10cSrcweir 	&aSdXML_DateStyle_6,
312*cdf0e10cSrcweir };
313*cdf0e10cSrcweir 
314*cdf0e10cSrcweir const SdXMLFixedDataStyle* aSdXMLFixedTimeFormats[SdXMLTimeFormatCount] =
315*cdf0e10cSrcweir {
316*cdf0e10cSrcweir 	&aSdXML_TimeStyle_1,
317*cdf0e10cSrcweir 	&aSdXML_TimeStyle_2,
318*cdf0e10cSrcweir 	&aSdXML_TimeStyle_3,
319*cdf0e10cSrcweir 	&aSdXML_TimeStyle_4,
320*cdf0e10cSrcweir 	&aSdXML_TimeStyle_5,
321*cdf0e10cSrcweir 	&aSdXML_TimeStyle_6,
322*cdf0e10cSrcweir 	&aSdXML_TimeStyle_7
323*cdf0e10cSrcweir };
324*cdf0e10cSrcweir 
325*cdf0e10cSrcweir 
326*cdf0e10cSrcweir ///////////////////////////////////////////////////////////////////////
327*cdf0e10cSrcweir // export
328*cdf0e10cSrcweir 
329*cdf0e10cSrcweir #ifndef SVX_LIGHT
330*cdf0e10cSrcweir 
331*cdf0e10cSrcweir static void SdXMLExportDataStyleNumber( SdXMLExport& rExport, SdXMLDataStyleNumber& rElement )
332*cdf0e10cSrcweir {
333*cdf0e10cSrcweir 	if( rElement.mbDecimal02 )
334*cdf0e10cSrcweir 	{
335*cdf0e10cSrcweir 		rExport.AddAttribute( XML_NAMESPACE_NUMBER, XML_DECIMAL_PLACES, XML_2 );
336*cdf0e10cSrcweir 	}
337*cdf0e10cSrcweir 
338*cdf0e10cSrcweir 	if( rElement.mbLong )
339*cdf0e10cSrcweir 	{
340*cdf0e10cSrcweir 		rExport.AddAttribute( XML_NAMESPACE_NUMBER, XML_STYLE, XML_LONG );
341*cdf0e10cSrcweir 	}
342*cdf0e10cSrcweir 
343*cdf0e10cSrcweir 	if( rElement.mbTextual )
344*cdf0e10cSrcweir 	{
345*cdf0e10cSrcweir 		rExport.AddAttribute( XML_NAMESPACE_NUMBER, XML_TEXTUAL, XML_TRUE );
346*cdf0e10cSrcweir 	}
347*cdf0e10cSrcweir 
348*cdf0e10cSrcweir 	SvXMLElementExport aNumberStyle( rExport, XML_NAMESPACE_NUMBER, rElement.meNumberStyle, sal_True, sal_False );
349*cdf0e10cSrcweir 	if( rElement.mpText )
350*cdf0e10cSrcweir 	{
351*cdf0e10cSrcweir 		OUString sAttrValue( OUString::createFromAscii( rElement.mpText ) );
352*cdf0e10cSrcweir 		rExport.GetDocHandler()->characters( sAttrValue );
353*cdf0e10cSrcweir 	}
354*cdf0e10cSrcweir }
355*cdf0e10cSrcweir 
356*cdf0e10cSrcweir static void SdXMLExportStyle( SdXMLExport& rExport, const SdXMLFixedDataStyle* pStyle, const SdXMLFixedDataStyle* pStyle2 = NULL )
357*cdf0e10cSrcweir {
358*cdf0e10cSrcweir 	OUString sAttrValue;
359*cdf0e10cSrcweir 
360*cdf0e10cSrcweir 	// name
361*cdf0e10cSrcweir 	sAttrValue = OUString::createFromAscii( pStyle->mpName );
362*cdf0e10cSrcweir 	if( pStyle2 )
363*cdf0e10cSrcweir 		sAttrValue += OUString::createFromAscii( pStyle2->mpName );
364*cdf0e10cSrcweir 
365*cdf0e10cSrcweir 	rExport.AddAttribute( XML_NAMESPACE_STYLE, XML_NAME, sAttrValue );
366*cdf0e10cSrcweir 
367*cdf0e10cSrcweir 	if( pStyle->mbAutomatic )
368*cdf0e10cSrcweir 	{
369*cdf0e10cSrcweir 		rExport.AddAttribute( XML_NAMESPACE_NUMBER, XML_AUTOMATIC_ORDER, XML_TRUE );
370*cdf0e10cSrcweir 	}
371*cdf0e10cSrcweir 
372*cdf0e10cSrcweir 	SvXMLElementExport aElement( rExport, XML_NAMESPACE_NUMBER, pStyle->mbDateStyle ? XML_DATE_STYLE : XML_TIME_STYLE, sal_True, sal_True );
373*cdf0e10cSrcweir 
374*cdf0e10cSrcweir 	do
375*cdf0e10cSrcweir 	{
376*cdf0e10cSrcweir 
377*cdf0e10cSrcweir 		const sal_uInt8* pElements = (const sal_uInt8*)&pStyle->mpFormat[0];
378*cdf0e10cSrcweir 
379*cdf0e10cSrcweir 		while( *pElements )
380*cdf0e10cSrcweir 		{
381*cdf0e10cSrcweir 			SdXMLDataStyleNumber& rElement = aSdXMLDataStyleNumbers[ (*pElements++) - 1 ];
382*cdf0e10cSrcweir 			SdXMLExportDataStyleNumber( rExport, rElement );
383*cdf0e10cSrcweir 		}
384*cdf0e10cSrcweir 
385*cdf0e10cSrcweir 		if( pStyle2 )
386*cdf0e10cSrcweir 		{
387*cdf0e10cSrcweir 			SdXMLDataStyleNumber& rElement = aSdXMLDataStyleNumbers[ DATA_STYLE_NUMBER_TEXT_SPACE - 1 ];
388*cdf0e10cSrcweir 			SdXMLExportDataStyleNumber( rExport, rElement );
389*cdf0e10cSrcweir 		}
390*cdf0e10cSrcweir 
391*cdf0e10cSrcweir 		pStyle = pStyle2;
392*cdf0e10cSrcweir 		pStyle2 = NULL;
393*cdf0e10cSrcweir 	}
394*cdf0e10cSrcweir 	while( pStyle );
395*cdf0e10cSrcweir }
396*cdf0e10cSrcweir 
397*cdf0e10cSrcweir void SdXMLNumberStylesExporter::exportTimeStyle( SdXMLExport& rExport, sal_Int32 nStyle )
398*cdf0e10cSrcweir {
399*cdf0e10cSrcweir 	DBG_ASSERT( (nStyle >= 0) && (nStyle < SdXMLTimeFormatCount), "Unknown time style!" );
400*cdf0e10cSrcweir 	if( (nStyle >= 0) && (nStyle < SdXMLTimeFormatCount) )
401*cdf0e10cSrcweir 		SdXMLExportStyle( rExport, aSdXMLFixedTimeFormats[ nStyle ] );
402*cdf0e10cSrcweir }
403*cdf0e10cSrcweir 
404*cdf0e10cSrcweir void SdXMLNumberStylesExporter::exportDateStyle( SdXMLExport& rExport, sal_Int32 nStyle )
405*cdf0e10cSrcweir {
406*cdf0e10cSrcweir 	if( nStyle > 0x0f )
407*cdf0e10cSrcweir 	{
408*cdf0e10cSrcweir 		int nDateStyle = nStyle & 0x0f;
409*cdf0e10cSrcweir 		bool bHasDate = nDateStyle != 0;
410*cdf0e10cSrcweir 
411*cdf0e10cSrcweir 		if( nDateStyle > 1 )
412*cdf0e10cSrcweir 			nDateStyle -= 2;
413*cdf0e10cSrcweir 
414*cdf0e10cSrcweir 		DBG_ASSERT( (nDateStyle >= 0) && (nDateStyle < SdXMLDateFormatCount), "unknown date style!" );
415*cdf0e10cSrcweir 
416*cdf0e10cSrcweir 		int nTimeStyle = (nStyle >> 4) & 0x0f;
417*cdf0e10cSrcweir 		bool bHasTime = nTimeStyle != 0;
418*cdf0e10cSrcweir 
419*cdf0e10cSrcweir 		if( nTimeStyle > 1 )
420*cdf0e10cSrcweir 			nTimeStyle -= 2;
421*cdf0e10cSrcweir 
422*cdf0e10cSrcweir 		DBG_ASSERT( (nTimeStyle >= 0) && (nTimeStyle < SdXMLTimeFormatCount), "Unknown time style!" );
423*cdf0e10cSrcweir 
424*cdf0e10cSrcweir 		if( (nDateStyle >= 0) && (nDateStyle < SdXMLDateFormatCount) && (nTimeStyle >= 0) && (nTimeStyle < SdXMLTimeFormatCount) )
425*cdf0e10cSrcweir 		{
426*cdf0e10cSrcweir 			if( bHasDate )
427*cdf0e10cSrcweir 			{
428*cdf0e10cSrcweir 				if( bHasTime )
429*cdf0e10cSrcweir 				{
430*cdf0e10cSrcweir 					SdXMLExportStyle( rExport, aSdXMLFixedDateFormats[ nDateStyle ], aSdXMLFixedTimeFormats[ nTimeStyle ] );
431*cdf0e10cSrcweir 				}
432*cdf0e10cSrcweir 				else
433*cdf0e10cSrcweir 				{
434*cdf0e10cSrcweir 					SdXMLExportStyle( rExport, aSdXMLFixedDateFormats[ nDateStyle ] );
435*cdf0e10cSrcweir 				}
436*cdf0e10cSrcweir 			}
437*cdf0e10cSrcweir 			else if( bHasTime )
438*cdf0e10cSrcweir 			{
439*cdf0e10cSrcweir 				SdXMLExportStyle( rExport, aSdXMLFixedTimeFormats[ nTimeStyle ] );
440*cdf0e10cSrcweir 			}
441*cdf0e10cSrcweir 		}
442*cdf0e10cSrcweir 	}
443*cdf0e10cSrcweir 	else
444*cdf0e10cSrcweir 	{
445*cdf0e10cSrcweir 		DBG_ASSERT( (nStyle >= 0) && (nStyle < SdXMLDateFormatCount), "unknown date style!" );
446*cdf0e10cSrcweir 		if( (nStyle >= 0) && (nStyle < SdXMLDateFormatCount) )
447*cdf0e10cSrcweir 			SdXMLExportStyle( rExport, aSdXMLFixedDateFormats[ nStyle ] );
448*cdf0e10cSrcweir 	}
449*cdf0e10cSrcweir }
450*cdf0e10cSrcweir 
451*cdf0e10cSrcweir OUString SdXMLNumberStylesExporter::getTimeStyleName(const sal_Int32 nTimeFormat )
452*cdf0e10cSrcweir {
453*cdf0e10cSrcweir 	sal_Int32 nFormat = nTimeFormat;
454*cdf0e10cSrcweir 	if( nFormat > 1 )
455*cdf0e10cSrcweir 		nFormat -= 2;
456*cdf0e10cSrcweir 
457*cdf0e10cSrcweir 	if( (nFormat >= 0) && (nFormat < SdXMLTimeFormatCount) )
458*cdf0e10cSrcweir 	{
459*cdf0e10cSrcweir 		return OUString::createFromAscii(aSdXMLFixedTimeFormats[nFormat]->mpName );
460*cdf0e10cSrcweir 	}
461*cdf0e10cSrcweir 	else
462*cdf0e10cSrcweir 	{
463*cdf0e10cSrcweir 		return OUString();
464*cdf0e10cSrcweir 	}
465*cdf0e10cSrcweir }
466*cdf0e10cSrcweir 
467*cdf0e10cSrcweir OUString SdXMLNumberStylesExporter::getDateStyleName(const sal_Int32 nDateFormat )
468*cdf0e10cSrcweir {
469*cdf0e10cSrcweir 	sal_Int32 nFormat = nDateFormat;
470*cdf0e10cSrcweir 
471*cdf0e10cSrcweir 	if( nFormat > 0x0f )
472*cdf0e10cSrcweir 	{
473*cdf0e10cSrcweir 		OUString aStr;
474*cdf0e10cSrcweir 		if( nFormat & 0x0f )
475*cdf0e10cSrcweir 			aStr = getDateStyleName( nFormat & 0x0f );
476*cdf0e10cSrcweir 		aStr += getTimeStyleName( (nFormat >> 4) & 0x0f );
477*cdf0e10cSrcweir 		return aStr;
478*cdf0e10cSrcweir 	}
479*cdf0e10cSrcweir 
480*cdf0e10cSrcweir 	if( nFormat > 1 )
481*cdf0e10cSrcweir 		nFormat -= 2;
482*cdf0e10cSrcweir 
483*cdf0e10cSrcweir 	if( (nFormat >= 0) && (nFormat < SdXMLDateFormatCount) )
484*cdf0e10cSrcweir 	{
485*cdf0e10cSrcweir 		return OUString::createFromAscii(aSdXMLFixedDateFormats[nFormat]->mpName );
486*cdf0e10cSrcweir 	}
487*cdf0e10cSrcweir 	else
488*cdf0e10cSrcweir 	{
489*cdf0e10cSrcweir 		return OUString();
490*cdf0e10cSrcweir 	}
491*cdf0e10cSrcweir }
492*cdf0e10cSrcweir 
493*cdf0e10cSrcweir #endif // #ifndef SVX_LIGHT
494*cdf0e10cSrcweir 
495*cdf0e10cSrcweir 
496*cdf0e10cSrcweir ///////////////////////////////////////////////////////////////////////
497*cdf0e10cSrcweir // import
498*cdf0e10cSrcweir 
499*cdf0e10cSrcweir class SdXMLNumberFormatMemberImportContext : public SvXMLImportContext
500*cdf0e10cSrcweir {
501*cdf0e10cSrcweir private:
502*cdf0e10cSrcweir 	SdXMLNumberFormatImportContext* mpParent;
503*cdf0e10cSrcweir 
504*cdf0e10cSrcweir 	OUString maNumberStyle;
505*cdf0e10cSrcweir 	sal_Bool mbLong;
506*cdf0e10cSrcweir 	sal_Bool mbTextual;
507*cdf0e10cSrcweir 	sal_Bool mbDecimal02;
508*cdf0e10cSrcweir 	OUString maText;
509*cdf0e10cSrcweir 	SvXMLImportContext* mpSlaveContext;
510*cdf0e10cSrcweir 
511*cdf0e10cSrcweir public:
512*cdf0e10cSrcweir 	TYPEINFO();
513*cdf0e10cSrcweir 
514*cdf0e10cSrcweir 	SdXMLNumberFormatMemberImportContext( SvXMLImport& rImport,
515*cdf0e10cSrcweir 		sal_uInt16 nPrfx,
516*cdf0e10cSrcweir 		const rtl::OUString& rLocalName,
517*cdf0e10cSrcweir 		const com::sun::star::uno::Reference< com::sun::star::xml::sax::XAttributeList>& xAttrList,
518*cdf0e10cSrcweir 		SdXMLNumberFormatImportContext* pParent,
519*cdf0e10cSrcweir 		SvXMLImportContext* pSlaveContext );
520*cdf0e10cSrcweir 	virtual ~SdXMLNumberFormatMemberImportContext();
521*cdf0e10cSrcweir 
522*cdf0e10cSrcweir 	virtual SvXMLImportContext *CreateChildContext( sal_uInt16 nPrefix,
523*cdf0e10cSrcweir 								   const ::rtl::OUString& rLocalName,
524*cdf0e10cSrcweir 								   const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList >& xAttrList );
525*cdf0e10cSrcweir 
526*cdf0e10cSrcweir 	virtual void StartElement( const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList >& xAttrList );
527*cdf0e10cSrcweir 
528*cdf0e10cSrcweir 	virtual void EndElement();
529*cdf0e10cSrcweir 
530*cdf0e10cSrcweir 	virtual void Characters( const ::rtl::OUString& rChars );
531*cdf0e10cSrcweir };
532*cdf0e10cSrcweir 
533*cdf0e10cSrcweir TYPEINIT1( SdXMLNumberFormatMemberImportContext, SvXMLImportContext );
534*cdf0e10cSrcweir 
535*cdf0e10cSrcweir SdXMLNumberFormatMemberImportContext::SdXMLNumberFormatMemberImportContext( SvXMLImport& rImport, sal_uInt16 nPrfx, const rtl::OUString& rLocalName, const com::sun::star::uno::Reference< com::sun::star::xml::sax::XAttributeList>& xAttrList, SdXMLNumberFormatImportContext* pParent, SvXMLImportContext* pSlaveContext )
536*cdf0e10cSrcweir :	SvXMLImportContext(rImport, nPrfx, rLocalName),
537*cdf0e10cSrcweir 	mpParent( pParent ),
538*cdf0e10cSrcweir 	maNumberStyle( rLocalName ),
539*cdf0e10cSrcweir 	mpSlaveContext( pSlaveContext )
540*cdf0e10cSrcweir {
541*cdf0e10cSrcweir 	mbLong = sal_False;
542*cdf0e10cSrcweir 	mbTextual = sal_False;
543*cdf0e10cSrcweir 	mbDecimal02 = sal_False;
544*cdf0e10cSrcweir 
545*cdf0e10cSrcweir 	const sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
546*cdf0e10cSrcweir 	for(sal_Int16 i=0; i < nAttrCount; i++)
547*cdf0e10cSrcweir 	{
548*cdf0e10cSrcweir 		OUString sAttrName = xAttrList->getNameByIndex( i );
549*cdf0e10cSrcweir 		OUString aLocalName;
550*cdf0e10cSrcweir 		sal_uInt16 nPrefix = GetImport().GetNamespaceMap().GetKeyByAttrName( sAttrName, &aLocalName );
551*cdf0e10cSrcweir 		OUString sValue = xAttrList->getValueByIndex( i );
552*cdf0e10cSrcweir 
553*cdf0e10cSrcweir 		if( nPrefix == XML_NAMESPACE_NUMBER )
554*cdf0e10cSrcweir 		{
555*cdf0e10cSrcweir 			if( IsXMLToken( aLocalName, XML_DECIMAL_PLACES ) )
556*cdf0e10cSrcweir 			{
557*cdf0e10cSrcweir 				mbDecimal02 =  IsXMLToken( sValue, XML_2 );
558*cdf0e10cSrcweir 			}
559*cdf0e10cSrcweir 			else if( IsXMLToken( aLocalName, XML_STYLE ) )
560*cdf0e10cSrcweir 			{
561*cdf0e10cSrcweir 				mbLong = IsXMLToken( sValue, XML_LONG );
562*cdf0e10cSrcweir 			}
563*cdf0e10cSrcweir 			else if( IsXMLToken( aLocalName, XML_TEXTUAL ) )
564*cdf0e10cSrcweir 			{
565*cdf0e10cSrcweir 				mbTextual = IsXMLToken( sValue, XML_TRUE );
566*cdf0e10cSrcweir 			}
567*cdf0e10cSrcweir 		}
568*cdf0e10cSrcweir 	}
569*cdf0e10cSrcweir 
570*cdf0e10cSrcweir }
571*cdf0e10cSrcweir 
572*cdf0e10cSrcweir SdXMLNumberFormatMemberImportContext::~SdXMLNumberFormatMemberImportContext()
573*cdf0e10cSrcweir {
574*cdf0e10cSrcweir }
575*cdf0e10cSrcweir 
576*cdf0e10cSrcweir SvXMLImportContext *SdXMLNumberFormatMemberImportContext::CreateChildContext( sal_uInt16 nPrefix,
577*cdf0e10cSrcweir 						   const ::rtl::OUString& rLocalName,
578*cdf0e10cSrcweir 						   const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList >& xAttrList )
579*cdf0e10cSrcweir {
580*cdf0e10cSrcweir 	return mpSlaveContext->CreateChildContext( nPrefix, rLocalName, xAttrList );
581*cdf0e10cSrcweir }
582*cdf0e10cSrcweir 
583*cdf0e10cSrcweir void SdXMLNumberFormatMemberImportContext::StartElement( const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XAttributeList >& xAttrList )
584*cdf0e10cSrcweir {
585*cdf0e10cSrcweir 	mpSlaveContext->StartElement( xAttrList );
586*cdf0e10cSrcweir }
587*cdf0e10cSrcweir 
588*cdf0e10cSrcweir void SdXMLNumberFormatMemberImportContext::EndElement()
589*cdf0e10cSrcweir {
590*cdf0e10cSrcweir 	mpSlaveContext->EndElement();
591*cdf0e10cSrcweir 
592*cdf0e10cSrcweir 	if( mpParent )
593*cdf0e10cSrcweir 		mpParent->add( maNumberStyle, mbLong, mbTextual, mbDecimal02, maText );
594*cdf0e10cSrcweir }
595*cdf0e10cSrcweir 
596*cdf0e10cSrcweir void SdXMLNumberFormatMemberImportContext::Characters( const ::rtl::OUString& rChars )
597*cdf0e10cSrcweir {
598*cdf0e10cSrcweir 	mpSlaveContext->Characters( rChars );
599*cdf0e10cSrcweir 	maText += rChars;
600*cdf0e10cSrcweir }
601*cdf0e10cSrcweir 
602*cdf0e10cSrcweir TYPEINIT1( SdXMLNumberFormatImportContext, SvXMLImportContext );
603*cdf0e10cSrcweir 
604*cdf0e10cSrcweir 
605*cdf0e10cSrcweir SdXMLNumberFormatImportContext::SdXMLNumberFormatImportContext( SdXMLImport& rImport, sal_uInt16 nPrfx,	const rtl::OUString& rLocalName, SvXMLNumImpData* pNewData, sal_uInt16 nNewType, const com::sun::star::uno::Reference< com::sun::star::xml::sax::XAttributeList>& xAttrList, SvXMLStylesContext& rStyles)
606*cdf0e10cSrcweir :	SvXMLNumFormatContext(rImport, nPrfx, rLocalName, pNewData, nNewType, xAttrList, rStyles),
607*cdf0e10cSrcweir 	mrImport( rImport ),
608*cdf0e10cSrcweir 	mbAutomatic( sal_False ),
609*cdf0e10cSrcweir 	mnIndex(0),
610*cdf0e10cSrcweir 	mnKey( -1 )
611*cdf0e10cSrcweir {
612*cdf0e10cSrcweir 	mbTimeStyle = IsXMLToken( rLocalName, XML_TIME_STYLE );
613*cdf0e10cSrcweir 
614*cdf0e10cSrcweir 	const sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
615*cdf0e10cSrcweir 	for(sal_Int16 i=0; i < nAttrCount; i++)
616*cdf0e10cSrcweir 	{
617*cdf0e10cSrcweir 		OUString sAttrName = xAttrList->getNameByIndex( i );
618*cdf0e10cSrcweir 		OUString aLocalName;
619*cdf0e10cSrcweir 		sal_uInt16 nPrefix = GetImport().GetNamespaceMap().GetKeyByAttrName( sAttrName, &aLocalName );
620*cdf0e10cSrcweir 		OUString sValue = xAttrList->getValueByIndex( i );
621*cdf0e10cSrcweir 
622*cdf0e10cSrcweir 		if( nPrefix == XML_NAMESPACE_NUMBER )
623*cdf0e10cSrcweir 		{
624*cdf0e10cSrcweir 			if( IsXMLToken( aLocalName, XML_AUTOMATIC_ORDER ) )
625*cdf0e10cSrcweir 			{
626*cdf0e10cSrcweir 				mbAutomatic = IsXMLToken( sValue, XML_TRUE );
627*cdf0e10cSrcweir 			}
628*cdf0e10cSrcweir 		}
629*cdf0e10cSrcweir 	}
630*cdf0e10cSrcweir }
631*cdf0e10cSrcweir 
632*cdf0e10cSrcweir SdXMLNumberFormatImportContext::~SdXMLNumberFormatImportContext()
633*cdf0e10cSrcweir {
634*cdf0e10cSrcweir }
635*cdf0e10cSrcweir 
636*cdf0e10cSrcweir void SdXMLNumberFormatImportContext::add( OUString& rNumberStyle, sal_Bool bLong, sal_Bool bTextual, sal_Bool	bDecimal02, OUString& rText )
637*cdf0e10cSrcweir {
638*cdf0e10cSrcweir 	if( mnIndex == -1 || mnIndex == 16 )
639*cdf0e10cSrcweir 	{
640*cdf0e10cSrcweir 		mnIndex = -1;
641*cdf0e10cSrcweir 		return;
642*cdf0e10cSrcweir 	}
643*cdf0e10cSrcweir 
644*cdf0e10cSrcweir 	const SdXMLDataStyleNumber* pStyleMember = aSdXMLDataStyleNumbers;
645*cdf0e10cSrcweir 	for( sal_uInt8 nIndex = 0; pStyleMember->meNumberStyle != XML_TOKEN_INVALID; nIndex++, pStyleMember++ )
646*cdf0e10cSrcweir 	{
647*cdf0e10cSrcweir 		if( (IsXMLToken(rNumberStyle, pStyleMember->meNumberStyle) &&
648*cdf0e10cSrcweir 			(pStyleMember->mbLong == bLong) &&
649*cdf0e10cSrcweir 			(pStyleMember->mbTextual == bTextual) &&
650*cdf0e10cSrcweir 			(pStyleMember->mbDecimal02 == bDecimal02) &&
651*cdf0e10cSrcweir 			( ( (pStyleMember->mpText == NULL) && (rText.getLength() == 0) ) ||
652*cdf0e10cSrcweir 			  ( pStyleMember->mpText && (rText.compareToAscii( pStyleMember->mpText )  == 0 )) ) ) )
653*cdf0e10cSrcweir 		{
654*cdf0e10cSrcweir 			mnElements[mnIndex++] = nIndex + 1;
655*cdf0e10cSrcweir 			return;
656*cdf0e10cSrcweir 		}
657*cdf0e10cSrcweir 	}
658*cdf0e10cSrcweir }
659*cdf0e10cSrcweir 
660*cdf0e10cSrcweir bool SdXMLNumberFormatImportContext::compareStyle( const SdXMLFixedDataStyle* pStyle, sal_Int16& nIndex ) const
661*cdf0e10cSrcweir {
662*cdf0e10cSrcweir 	if( (pStyle->mbAutomatic != mbAutomatic) && (nIndex == 0))
663*cdf0e10cSrcweir 		return sal_False;
664*cdf0e10cSrcweir 
665*cdf0e10cSrcweir 	sal_Int16 nCompareIndex;
666*cdf0e10cSrcweir 	for( nCompareIndex = 0; nCompareIndex < 8; nIndex++, nCompareIndex++ )
667*cdf0e10cSrcweir 	{
668*cdf0e10cSrcweir 		if( pStyle->mpFormat[nCompareIndex] != mnElements[nIndex] )
669*cdf0e10cSrcweir 			return sal_False;
670*cdf0e10cSrcweir 	}
671*cdf0e10cSrcweir 
672*cdf0e10cSrcweir 	return sal_True;
673*cdf0e10cSrcweir }
674*cdf0e10cSrcweir 
675*cdf0e10cSrcweir void SdXMLNumberFormatImportContext::EndElement()
676*cdf0e10cSrcweir {
677*cdf0e10cSrcweir 	SvXMLNumFormatContext::EndElement();
678*cdf0e10cSrcweir 
679*cdf0e10cSrcweir 	for( ; mnIndex < 16; mnIndex++ )
680*cdf0e10cSrcweir 	{
681*cdf0e10cSrcweir 		mnElements[mnIndex] = 0;
682*cdf0e10cSrcweir 	}
683*cdf0e10cSrcweir 
684*cdf0e10cSrcweir 	if( mbTimeStyle )
685*cdf0e10cSrcweir 	{
686*cdf0e10cSrcweir 		// compare import with all time styles
687*cdf0e10cSrcweir 		for( sal_Int16 nFormat = 0; nFormat < SdXMLTimeFormatCount; nFormat++ )
688*cdf0e10cSrcweir 		{
689*cdf0e10cSrcweir 			sal_Int16 nIndex = 0;
690*cdf0e10cSrcweir 			if( compareStyle( aSdXMLFixedTimeFormats[nFormat], nIndex ) )
691*cdf0e10cSrcweir 			{
692*cdf0e10cSrcweir 				mnKey = nFormat + 2;
693*cdf0e10cSrcweir 				break;
694*cdf0e10cSrcweir 			}
695*cdf0e10cSrcweir 		}
696*cdf0e10cSrcweir 	}
697*cdf0e10cSrcweir 	else
698*cdf0e10cSrcweir 	{
699*cdf0e10cSrcweir 		// compare import with all date styles
700*cdf0e10cSrcweir 		for( sal_Int16 nFormat = 0; nFormat < SdXMLDateFormatCount; nFormat++ )
701*cdf0e10cSrcweir 		{
702*cdf0e10cSrcweir 			sal_Int16 nIndex = 0;
703*cdf0e10cSrcweir 			if( compareStyle( aSdXMLFixedDateFormats[nFormat], nIndex ) )
704*cdf0e10cSrcweir 			{
705*cdf0e10cSrcweir 				mnKey = nFormat + 2;
706*cdf0e10cSrcweir 				break;
707*cdf0e10cSrcweir 			}
708*cdf0e10cSrcweir 			else if( mnElements[nIndex] == DATA_STYLE_NUMBER_TEXT_SPACE )
709*cdf0e10cSrcweir 			{
710*cdf0e10cSrcweir 				// if its a valid date ending with a space, see if a time style follows
711*cdf0e10cSrcweir 				for( sal_Int16 nTimeFormat = 0; nTimeFormat < SdXMLTimeFormatCount; nTimeFormat++ )
712*cdf0e10cSrcweir 				{
713*cdf0e10cSrcweir 					sal_Int16 nIndex2 = nIndex + 1;
714*cdf0e10cSrcweir 					if( compareStyle( aSdXMLFixedTimeFormats[nTimeFormat], nIndex2 ) )
715*cdf0e10cSrcweir 					{
716*cdf0e10cSrcweir 						mnKey = (nFormat + 2) | ((nTimeFormat + 2) << 4);
717*cdf0e10cSrcweir 						break;
718*cdf0e10cSrcweir 					}
719*cdf0e10cSrcweir 				}
720*cdf0e10cSrcweir 			}
721*cdf0e10cSrcweir 		}
722*cdf0e10cSrcweir 
723*cdf0e10cSrcweir 		// no date style found? maybe its an extended time style
724*cdf0e10cSrcweir 		if( mnKey == -1 )
725*cdf0e10cSrcweir 		{
726*cdf0e10cSrcweir 			// compare import with all time styles
727*cdf0e10cSrcweir 			for( sal_Int16 nFormat = 0; nFormat < SdXMLTimeFormatCount; nFormat++ )
728*cdf0e10cSrcweir 			{
729*cdf0e10cSrcweir 				sal_Int16 nIndex = 0;
730*cdf0e10cSrcweir 				if( compareStyle( aSdXMLFixedTimeFormats[nFormat], nIndex ) )
731*cdf0e10cSrcweir 				{
732*cdf0e10cSrcweir 					mnKey = (nFormat + 2) << 4;
733*cdf0e10cSrcweir 					break;
734*cdf0e10cSrcweir 				}
735*cdf0e10cSrcweir 			}
736*cdf0e10cSrcweir 		}
737*cdf0e10cSrcweir 	}
738*cdf0e10cSrcweir }
739*cdf0e10cSrcweir 
740*cdf0e10cSrcweir SvXMLImportContext * SdXMLNumberFormatImportContext::CreateChildContext( sal_uInt16 nPrefix, const ::rtl::OUString& rLocalName, const com::sun::star::uno::Reference< com::sun::star::xml::sax::XAttributeList>& xAttrList )
741*cdf0e10cSrcweir {
742*cdf0e10cSrcweir 	return new SdXMLNumberFormatMemberImportContext( GetImport(), nPrefix, rLocalName, xAttrList, this, SvXMLNumFormatContext::CreateChildContext( nPrefix, rLocalName, xAttrList ) );
743*cdf0e10cSrcweir }
744