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