INTEGRATION: CWS os44 (1.1.2); FILE ADDED
2004/12/03 15:41:51 os 1.1.2.2: #i37761# additional include 2004/11/24 13:45:18 os 1.1.2.1: #i37761# conversion functions used from several filters
This commit is contained in:
596
sw/source/core/sw3io/sw3convert.cxx
Normal file
596
sw/source/core/sw3io/sw3convert.cxx
Normal file
@@ -0,0 +1,596 @@
|
||||
/*************************************************************************
|
||||
*
|
||||
* $RCSfile: sw3convert.cxx,v $
|
||||
*
|
||||
* $Revision: 1.2 $
|
||||
*
|
||||
* last change: $Author: rt $ $Date: 2005-01-05 16:02:51 $
|
||||
*
|
||||
* The Contents of this file are made available subject to the terms of
|
||||
* either of the following licenses
|
||||
*
|
||||
* - GNU Lesser General Public License Version 2.1
|
||||
* - Sun Industry Standards Source License Version 1.1
|
||||
*
|
||||
* Sun Microsystems Inc., October, 2000
|
||||
*
|
||||
* GNU Lesser General Public License Version 2.1
|
||||
* =============================================
|
||||
* Copyright 2000 by Sun Microsystems, Inc.
|
||||
* 901 San Antonio Road, Palo Alto, CA 94303, USA
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License version 2.1, as published by the Free Software Foundation.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||
* MA 02111-1307 USA
|
||||
*
|
||||
*
|
||||
* Sun Industry Standards Source License Version 1.1
|
||||
* =================================================
|
||||
* The contents of this file are subject to the Sun Industry Standards
|
||||
* Source License Version 1.1 (the "License"); You may not use this file
|
||||
* except in compliance with the License. You may obtain a copy of the
|
||||
* License at http://www.openoffice.org/license.html.
|
||||
*
|
||||
* Software provided under this License is provided on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
|
||||
* WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
|
||||
* MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
|
||||
* See the License for the specific provisions governing your rights and
|
||||
* obligations concerning the Software.
|
||||
*
|
||||
* The Initial Developer of the Original Code is: Sun Microsystems, Inc.
|
||||
*
|
||||
* Copyright: 2000 by Sun Microsystems, Inc.
|
||||
*
|
||||
* All Rights Reserved.
|
||||
*
|
||||
* Contributor(s): _______________________________________
|
||||
*
|
||||
*
|
||||
************************************************************************/
|
||||
|
||||
|
||||
#pragma hdrstop
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
#include <stdio.h>
|
||||
#include "hintids.hxx"
|
||||
|
||||
#ifndef _TOOLS_RESID_HXX
|
||||
#include <tools/resid.hxx>
|
||||
#endif
|
||||
#ifndef _SFXMACITEM_HXX //autogen
|
||||
#include <svtools/macitem.hxx>
|
||||
#endif
|
||||
#ifndef _ZFORLIST_HXX //autogen
|
||||
#include <svtools/zforlist.hxx>
|
||||
#endif
|
||||
#ifndef _ZFORMAT_HXX //autogen
|
||||
#include <svtools/zformat.hxx>
|
||||
#endif
|
||||
#ifndef SVTOOLS_URIHELPER_HXX
|
||||
#include <svtools/urihelper.hxx>
|
||||
#endif
|
||||
#ifndef _LINKMGR_HXX
|
||||
#include <sfx2/linkmgr.hxx>
|
||||
#endif
|
||||
|
||||
#ifndef _SVSTDARR_USHORTS_DECL
|
||||
#define _SVSTDARR_USHORTS
|
||||
#include <svtools/svstdarr.hxx>
|
||||
#endif
|
||||
#ifndef _SVX_LRSPITEM_HXX //autogen
|
||||
#include <svx/lrspitem.hxx>
|
||||
#endif
|
||||
#ifndef _SVX_TSPTITEM_HXX //autogen
|
||||
#include <svx/tstpitem.hxx>
|
||||
#endif
|
||||
|
||||
#ifndef _FMTINFMT_HXX //autogen
|
||||
#include <fmtinfmt.hxx>
|
||||
#endif
|
||||
#ifndef _FMTFLD_HXX //autogen
|
||||
#include <fmtfld.hxx>
|
||||
#endif
|
||||
#ifndef _FRMATR_HXX
|
||||
#include <frmatr.hxx>
|
||||
#endif
|
||||
#include "doc.hxx"
|
||||
#include "docary.hxx"
|
||||
#include "fldbas.hxx"
|
||||
#include "flddat.hxx"
|
||||
#include "docufld.hxx"
|
||||
#include "chpfld.hxx"
|
||||
#include "ddefld.hxx"
|
||||
#include "expfld.hxx"
|
||||
#include "reffld.hxx"
|
||||
#include "usrfld.hxx"
|
||||
#include "dbfld.hxx"
|
||||
#include "txtfld.hxx"
|
||||
#include "ndtxt.hxx"
|
||||
|
||||
//really used ids from old sw3ids.hxx
|
||||
#define SWG_INETBROWSER 0x000e // URL-Grf-Nodes, Browse-Flag, Format-Ums.
|
||||
#define SWG_NEWFIELDS 0x0200 // Felder mit Numberformatter-Zahlenformat
|
||||
#define SWG_EXPORT40 0x0110 // Version fuer 4.0-Export ab 5.0
|
||||
|
||||
|
||||
//#include "poolfmt.hxx" // fuer InSetExpField
|
||||
//#include "poolfmt.hrc" // fuer InSetExpField
|
||||
|
||||
//#if !defined(UNX) && !defined(MSC) && !defined(PPC) && !defined(CSET) && !defined(__MWERKS__) && !defined(WTC)
|
||||
|
||||
//#define FIELDFNTAB_SIZE 37
|
||||
//#if FIELDFNTAB_SIZE != RES_FIELDS_END - RES_FIELDS_BEGIN
|
||||
//#error Feld-Tabelle ist ungueltigt. Wurden neue Hint-IDs zugefuegt ??
|
||||
//#endif
|
||||
|
||||
//#endif
|
||||
|
||||
//#define SWG_AUTHORITY_ENTRY_LCL 'E'
|
||||
|
||||
//sal_Char __FAR_DATA sSW3IO_FixedField[] = "FixedExport";
|
||||
//sal_Char __FAR_DATA sSW3IO_AuthorityField[] = "AuthorityExport";
|
||||
/* #108791# */
|
||||
//sal_Char __FAR_DATA sSW3IO_DropDownField[] = "DropDownExport";
|
||||
|
||||
struct OldFormats
|
||||
{
|
||||
NfIndexTableOffset eFormatIdx;
|
||||
USHORT nOldFormat;
|
||||
};
|
||||
|
||||
static OldFormats aOldDateFmt40[] =
|
||||
{
|
||||
// Datumsfelder:
|
||||
NF_DATE_SYSTEM_SHORT, DFF_SSYS, // Kurzes Systemdatum
|
||||
NF_DATE_SYSTEM_LONG, DFF_LSYS, // Langes Systemdatum
|
||||
NF_DATE_SYS_DDMMYY, DFF_DMY, // 06.10.64
|
||||
NF_DATE_SYS_DDMMYYYY, DFF_DMYY, // 06.10.1964
|
||||
NF_DATE_SYS_DMMMYY, DFF_DMMY, // 06. Okt 64
|
||||
NF_DATE_SYS_DMMMYYYY, DFF_DMMYY, // 06. Okt 1964
|
||||
NF_DATE_DIN_DMMMMYYYY, DFF_DMMMYY, // 06. Oktober 1964
|
||||
NF_DATE_DIN_DMMMMYYYY, DFF_DMMMY, // 06. Oktober 64
|
||||
NF_DATE_SYS_NNDMMMYY, DFF_DDMMY, // Di, 06. Okt 64
|
||||
NF_DATE_SYS_NNDMMMMYYYY, DFF_DDMMMY, // Di, 06. Oktober 64
|
||||
NF_DATE_SYS_NNDMMMMYYYY, DFF_DDMMMYY, // Di, 06. Oktober 1964
|
||||
NF_DATE_SYS_NNNNDMMMMYYYY, DFF_DDDMMMYY, // Dienstag, 06. Oktober 1964
|
||||
NF_DATE_SYS_NNNNDMMMMYYYY, DFF_DDDMMMY, // Dienstag, 06. Oktober 64
|
||||
NF_DATE_SYS_MMYY, DFF_MY, // 10.64
|
||||
NF_DATE_DIN_MMDD, DFF_MD, // 10-06
|
||||
NF_DATE_DIN_YYMMDD, DFF_YMD, // 64-10-06
|
||||
NF_DATE_DIN_YYYYMMDD, DFF_YYMD, // 1964-10-06
|
||||
|
||||
NF_NUMERIC_START, 0 // Tabellenende
|
||||
};
|
||||
|
||||
static OldFormats aOldDateFmt30[] =
|
||||
{
|
||||
// Datumsfelder:
|
||||
NF_DATE_SYSTEM_SHORT, DFF_SSYS, // Kurzes Systemdatum
|
||||
NF_DATE_SYSTEM_LONG, DFF_LSYS, // Langes Systemdatum
|
||||
NF_DATE_SYS_DDMMYY, DFF_DMY, // 06.10.64
|
||||
NF_DATE_SYS_DDMMYYYY, DFF_DMYY, // 06.10.1964
|
||||
NF_DATE_SYS_DMMMYY, DFF_DMMY, // 06. Okt 64
|
||||
NF_DATE_SYS_DMMMYYYY, 4 /*DFF_DMMYY*/, // 06. Okt 1964
|
||||
NF_DATE_DIN_DMMMMYYYY, 5 /*DFF_DMMMYY*/, // 06. Oktober 1964
|
||||
NF_DATE_DIN_DMMMMYYYY, 5 /*DFF_DMMMY*/, // 06. Oktober 64
|
||||
NF_DATE_SYS_NNDMMMMYYYY, 6 /*DFF_DDMMMYY*/, // Di, 06. Oktober 1964
|
||||
NF_DATE_SYS_NNDMMMYY, 6 /*DFF_DDMMY*/, // Di, 06. Okt 64
|
||||
NF_DATE_SYS_NNDMMMMYYYY, 6 /*DFF_DDMMMY*/, // Di, 06. Oktober 64
|
||||
NF_DATE_SYS_NNNNDMMMMYYYY, 7 /*DFF_DDDMMMYY*/, // Dienstag, 06. Oktober 1964
|
||||
NF_DATE_SYS_NNNNDMMMMYYYY, 7 /*DFF_DDDMMMY*/, // Dienstag, 06. Oktober 64
|
||||
NF_DATE_SYS_MMYY, 2 /*DFF_MY*/, // 10.64
|
||||
NF_DATE_DIN_MMDD, DFF_MD, // 10-06
|
||||
NF_DATE_DIN_YYMMDD, DFF_YMD, // 64-10-06
|
||||
NF_DATE_DIN_YYYYMMDD, DFF_YYMD, // 1964-10-06
|
||||
|
||||
NF_NUMERIC_START, 0 // Tabellenende
|
||||
};
|
||||
|
||||
static OldFormats aOldTimeFmt[] =
|
||||
{
|
||||
// Zeitfelder:
|
||||
NF_TIME_HHMMSS, TF_SYSTEM, // Systemzeit
|
||||
NF_TIME_HHMM, TF_SSMM_24, // 23:25
|
||||
NF_TIME_HHMMAMPM, TF_SSMM_12, // 11:25 PM
|
||||
|
||||
NF_NUMERIC_START, 0 // Tabellenende
|
||||
};
|
||||
|
||||
static OldFormats aOldGetSetExpFmt40[] =
|
||||
{
|
||||
NF_TEXT, VVF_CMD, // Kommando anzeigen
|
||||
NF_TEXT, VVF_INVISIBLE, // unsichtbar
|
||||
NF_PERCENT_INT, VVF_XXP, // 1234%
|
||||
NF_PERCENT_DEC2, VVF_XX_XXP, // 1.234,56%
|
||||
NF_TEXT, VVF_CLEAR, // ???
|
||||
|
||||
NF_NUMBER_SYSTEM, VVF_SYS, // Zahlenformat aus der
|
||||
// Systemeinstellung
|
||||
NF_NUMBER_INT, VVF_X, // 1234
|
||||
NF_NUMBER_DEC2, VVF_X_X, // 1234,5
|
||||
NF_NUMBER_DEC2, VVF_X_XX, // 1245,56
|
||||
NF_NUMBER_1000DEC2, VVF_XX_XX, // 1.234,56
|
||||
NF_NUMBER_1000DEC2, VVF_XX_X, // 1.234,5
|
||||
NF_NUMBER_1000DEC2, VVF_XX_XXX, // 1.234,567
|
||||
NF_CURRENCY_1000DEC2, VVF_SYS_CUR, // W<>hrungsformat aus der
|
||||
// Systemeinstellung
|
||||
// (1.234,00 DM)
|
||||
NF_CURRENCY_1000INT, VVF_X_CUR, // 1234 DM
|
||||
NF_CURRENCY_1000DEC2, VVF_XX_XX_CUR, // 1234,56 DM 1234,00 DM
|
||||
NF_CURRENCY_1000DEC2_DASHED, VVF_XX_X0_CUR, // 1234,56 DM 1234,-- DM
|
||||
NF_CURRENCY_1000INT, VVF_CUR_X, // DM 1234
|
||||
NF_CURRENCY_1000DEC2, VVF_CUR_XX_XX, // DM 1234,56 DM 1234,00
|
||||
NF_CURRENCY_1000DEC2_DASHED, VVF_CUR_XX_X0, // DM 1234,56 DM 1234,--
|
||||
|
||||
NF_NUMERIC_START, 0 // Tabellenende
|
||||
};
|
||||
|
||||
static OldFormats aOldGetSetExpFmt30[] =
|
||||
{
|
||||
NF_TEXT, VVF_CMD, // Kommando anzeigen
|
||||
NF_TEXT, VVF_INVISIBLE, // unsichtbar
|
||||
NF_PERCENT_INT, VVF_XXP, // 1234%
|
||||
NF_PERCENT_DEC2, VVF_XX_XXP, // 1.234,56%
|
||||
NF_TEXT, VVF_CLEAR, // ???
|
||||
|
||||
NF_NUMBER_SYSTEM, 0x0020, // Zahlenformat aus der
|
||||
// Systemeinstellung
|
||||
NF_NUMBER_INT, 0x0080, // 1234
|
||||
NF_NUMBER_1000DEC2, 0x0100, // 1.234,56
|
||||
NF_NUMBER_DEC2, 0x0100, // 1234,5
|
||||
NF_NUMBER_DEC2, 0x0100, // 1245,56
|
||||
NF_NUMBER_1000DEC2, 0x0100, // 1.234,5
|
||||
NF_NUMBER_1000DEC2, 0x0100, // 1.234,567
|
||||
NF_CURRENCY_1000DEC2, 0x0200, // W<>hrungsformat aus der
|
||||
// Systemeinstellung
|
||||
// (1.234,00 DM)
|
||||
NF_CURRENCY_1000INT, 0x1000, // 1234 DM
|
||||
NF_CURRENCY_1000DEC2, 0x1000, // 1234,56 DM 1234,00 DM
|
||||
NF_CURRENCY_1000DEC2_DASHED, 0x1000, // 1234,56 DM 1234,-- DM
|
||||
NF_CURRENCY_1000INT, 0x1000, // DM 1234
|
||||
NF_CURRENCY_1000DEC2, 0x1000, // DM 1234,56 DM 1234,00
|
||||
NF_CURRENCY_1000DEC2_DASHED, 0x1000, // DM 1234,56 DM 1234,--
|
||||
|
||||
NF_NUMERIC_START, 0 // Tabellenende
|
||||
};
|
||||
|
||||
void sw3io_ConvertFromOldField( SwDoc& rDoc, USHORT& rWhich,
|
||||
USHORT& rSubType, ULONG &rFmt,
|
||||
USHORT nVersion )
|
||||
{
|
||||
const OldFormats *pOldFmt = 0L;
|
||||
|
||||
switch( rWhich )
|
||||
{
|
||||
case RES_DATEFLD:
|
||||
case RES_FIXDATEFLD:
|
||||
if( nVersion < SWG_NEWFIELDS )
|
||||
{
|
||||
rSubType = DATEFLD;
|
||||
if( RES_FIXDATEFLD == rWhich )
|
||||
rSubType |= FIXEDFLD;
|
||||
rWhich = RES_DATETIMEFLD;
|
||||
pOldFmt = nVersion<SWG_INETBROWSER ? aOldDateFmt30
|
||||
: aOldDateFmt40;
|
||||
}
|
||||
break;
|
||||
|
||||
case RES_TIMEFLD:
|
||||
case RES_FIXTIMEFLD:
|
||||
if( nVersion < SWG_NEWFIELDS )
|
||||
{
|
||||
rSubType = TIMEFLD;
|
||||
if( RES_FIXTIMEFLD == rWhich )
|
||||
rSubType |= FIXEDFLD;
|
||||
rWhich = RES_DATETIMEFLD;
|
||||
pOldFmt = aOldTimeFmt;
|
||||
}
|
||||
break;
|
||||
|
||||
case RES_DBFLD:
|
||||
if( nVersion < SWG_NEWFIELDS )
|
||||
{
|
||||
rSubType = SUB_OWN_FMT;
|
||||
pOldFmt = nVersion<SWG_INETBROWSER ? aOldGetSetExpFmt30
|
||||
: aOldGetSetExpFmt40;
|
||||
}
|
||||
break;
|
||||
|
||||
case RES_TABLEFLD:
|
||||
case RES_GETEXPFLD:
|
||||
case RES_SETEXPFLD:
|
||||
case RES_USERFLD:
|
||||
if( nVersion < SWG_NEWFIELDS )
|
||||
{
|
||||
if( rFmt == VVF_INVISIBLE )
|
||||
{
|
||||
rSubType = SUB_INVISIBLE;
|
||||
rFmt = 0;
|
||||
}
|
||||
else if( rFmt == VVF_CMD )
|
||||
{
|
||||
rSubType = SUB_CMD;
|
||||
rFmt = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Kleiner Hack: Bei Numernkreisen wird das
|
||||
// unkonvertierte Format noch benoetigt. Wir merken es
|
||||
// uns voruebergehend mal im Subtyp, sofern es
|
||||
// ueberhaupt als entsprechendes Format in Frage kommt.
|
||||
if( RES_SETEXPFLD==rWhich &&
|
||||
rFmt >= (USHORT)SVX_NUM_CHARS_UPPER_LETTER &&
|
||||
rFmt <= (USHORT)SVX_NUM_BITMAP )
|
||||
{
|
||||
rSubType = (USHORT)rFmt;
|
||||
}
|
||||
pOldFmt = nVersion<SWG_INETBROWSER ? aOldGetSetExpFmt30
|
||||
: aOldGetSetExpFmt40;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case RES_DOCINFOFLD:
|
||||
if( nVersion < SWG_NEWFIELDS )
|
||||
{
|
||||
switch( rFmt )
|
||||
{
|
||||
case RF_AUTHOR: rSubType = DI_SUB_AUTHOR; break;
|
||||
case RF_TIME: rSubType = DI_SUB_TIME; break;
|
||||
case RF_DATE: rSubType = DI_SUB_DATE; break;
|
||||
case RF_ALL: rSubType = DI_SUB_DATE; break;
|
||||
}
|
||||
rFmt = 0;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if( pOldFmt )
|
||||
{
|
||||
SvNumberFormatter *pFormatter = rDoc.GetNumberFormatter();
|
||||
USHORT i = 0;
|
||||
|
||||
while( pOldFmt[i].eFormatIdx != NF_NUMERIC_START ||
|
||||
pOldFmt[i].nOldFormat)
|
||||
{
|
||||
if( rFmt == pOldFmt[i].nOldFormat )
|
||||
{
|
||||
rFmt = pFormatter->GetFormatIndex(pOldFmt[i].eFormatIdx, LANGUAGE_SYSTEM);
|
||||
break;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
}
|
||||
}
|
||||
void sw3io_ConvertToOldField( const SwField* pFld, USHORT& rWhich,
|
||||
ULONG& rFmt, ULONG nFFVersion )
|
||||
{
|
||||
const OldFormats *pOldFmt = 0L;
|
||||
ULONG nOldFmt = rFmt;
|
||||
|
||||
switch( rWhich )
|
||||
{
|
||||
case RES_DOCINFOFLD:
|
||||
if( SOFFICE_FILEFORMAT_40 >= nFFVersion )
|
||||
{
|
||||
switch (pFld->GetSubType() & 0xff00)
|
||||
{
|
||||
case DI_SUB_AUTHOR: rFmt = RF_AUTHOR; break;
|
||||
case DI_SUB_TIME: rFmt = RF_TIME; break;
|
||||
case DI_SUB_DATE: rFmt = RF_DATE; break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case RES_DATETIMEFLD:
|
||||
if( SOFFICE_FILEFORMAT_40 >= nFFVersion )
|
||||
{
|
||||
USHORT nSubType = ((SwDateTimeField*) pFld)->GetSubType();
|
||||
switch( nSubType )
|
||||
{
|
||||
case DATEFLD: rWhich = RES_DATEFLD; break;
|
||||
case TIMEFLD: rWhich = RES_TIMEFLD; break;
|
||||
case DATEFLD|FIXEDFLD: rWhich = RES_FIXDATEFLD; break;
|
||||
case TIMEFLD|FIXEDFLD: rWhich = RES_FIXTIMEFLD; break;
|
||||
}
|
||||
|
||||
if( nSubType & DATEFLD )
|
||||
{
|
||||
rFmt = DFF_DMY;
|
||||
pOldFmt = aOldDateFmt40;
|
||||
}
|
||||
else
|
||||
{
|
||||
rFmt = TF_SYSTEM;
|
||||
pOldFmt = aOldTimeFmt;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case RES_DBFLD:
|
||||
case RES_TABLEFLD:
|
||||
case RES_GETEXPFLD:
|
||||
case RES_SETEXPFLD:
|
||||
case RES_USERFLD:
|
||||
if( SOFFICE_FILEFORMAT_40 >= nFFVersion )
|
||||
{
|
||||
USHORT nSubType = pFld->GetSubType();
|
||||
|
||||
if (nSubType & SUB_INVISIBLE)
|
||||
rFmt = VVF_INVISIBLE;
|
||||
else if (nSubType & SUB_CMD)
|
||||
rFmt = VVF_CMD;
|
||||
else if( !(GSE_SEQ & nSubType) )
|
||||
{
|
||||
pOldFmt = aOldGetSetExpFmt40;
|
||||
rFmt = VVF_SYS;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case RES_GETREFFLD:
|
||||
if( SOFFICE_FILEFORMAT_31 == nFFVersion )
|
||||
{
|
||||
switch( rFmt )
|
||||
{
|
||||
case REF_PAGE:
|
||||
case REF_CHAPTER:
|
||||
case REF_CONTENT:
|
||||
break;
|
||||
|
||||
default:
|
||||
// case REF_UPDOWN:
|
||||
// case REF_PAGE_PGDESC:
|
||||
rFmt = REF_PAGE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if( pOldFmt && nOldFmt )
|
||||
{
|
||||
USHORT i = 0;
|
||||
|
||||
SvNumberFormatter *pFormatter = ((SwValueField*)pFld)->GetDoc()->GetNumberFormatter();
|
||||
const SvNumberformat* pEntry = pFormatter->GetEntry( nOldFmt );
|
||||
|
||||
if( pEntry )
|
||||
{
|
||||
while( pOldFmt[i].eFormatIdx != NF_NUMERIC_START ||
|
||||
pOldFmt[i].nOldFormat )
|
||||
{
|
||||
ULONG nKey = pFormatter->GetFormatIndex(
|
||||
pOldFmt[i].eFormatIdx, pEntry->GetLanguage() );
|
||||
|
||||
if( nOldFmt == nKey )
|
||||
{
|
||||
rFmt = pOldFmt[i].nOldFormat;
|
||||
break;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
void lcl_sw3io__ConvertNumTabStop( SvxTabStopItem& rTStop, long nOffset )
|
||||
{
|
||||
for( USHORT n = 0; n < rTStop.Count(); ++n )
|
||||
{
|
||||
SvxTabStop& rTab = (SvxTabStop&)rTStop[ n ];
|
||||
if( SVX_TAB_ADJUST_DEFAULT != rTab.GetAdjustment() &&
|
||||
rTab.GetTabPos() )
|
||||
{
|
||||
rTab.GetTabPos() += nOffset;
|
||||
}
|
||||
}
|
||||
}
|
||||
void lcl_sw3io__ConvertNumTabStop( SwTxtNode& rTxtNd, long nOffset,
|
||||
BOOL bDeep )
|
||||
{
|
||||
const SfxPoolItem* pItem;
|
||||
if( SFX_ITEM_SET == rTxtNd.GetSwAttrSet().GetItemState( RES_PARATR_TABSTOP,
|
||||
bDeep, &pItem ) )
|
||||
{
|
||||
SvxTabStopItem aTStop( *(SvxTabStopItem*)pItem );
|
||||
lcl_sw3io__ConvertNumTabStop( aTStop, nOffset );
|
||||
rTxtNd.SwCntntNode::SetAttr( aTStop );
|
||||
}
|
||||
}
|
||||
|
||||
void lcl_sw3io_ChkHiddenExp( String& rCond )
|
||||
{
|
||||
// die Expression wurde bei 4.0 Export einmal gedreht, beim erneuten
|
||||
// Einlesen sollte diese nicht noch mal gedreht werden.
|
||||
xub_StrLen nLen = rCond.Len(), nPos = nLen, nCnt = 1;
|
||||
if( 3 < nPos-- && ')' == rCond.GetChar( nPos ) &&
|
||||
'!' == rCond.GetChar( nPos = 0 ) && '(' == rCond.GetChar( ++nPos ))
|
||||
{
|
||||
// dann teste mal ob es dann eine komplette Klammerung ist
|
||||
--nLen; ++nPos;
|
||||
nCnt = 0;
|
||||
while( nPos < nLen )
|
||||
switch( rCond.GetChar( nPos++ ) )
|
||||
{
|
||||
case '(': ++nCnt; break;
|
||||
case ')': if( !nCnt-- )
|
||||
nPos = nLen;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if( !nCnt )
|
||||
rCond = rCond.Copy( 2, rCond.Len() - 3);
|
||||
else
|
||||
rCond.InsertAscii( "!(", 0 ) += ')';
|
||||
}
|
||||
|
||||
void lcl_sw3io__ConvertNumLRSpace( SwTxtNode& rTxtNd, const SwNumRule& rNumRule,
|
||||
BYTE nLevel, BOOL bTabStop )
|
||||
{
|
||||
if( nLevel == NO_NUMBERING )
|
||||
return;
|
||||
|
||||
nLevel = GetRealLevel( nLevel );
|
||||
USHORT nNumLSpace = rNumRule.Get( nLevel ).GetAbsLSpace();
|
||||
|
||||
// Wenn im Absatz der Einzug eingestellt ist, dann will
|
||||
// man den wieder Erreichen, sonst den der NumRule.
|
||||
const SfxPoolItem *pItem;
|
||||
const SvxLRSpaceItem *pParaLRSpace = 0;
|
||||
const SwAttrSet *pAttrSet = rTxtNd.GetpSwAttrSet();
|
||||
if( pAttrSet &&
|
||||
SFX_ITEM_SET == pAttrSet->GetItemState( RES_LR_SPACE, FALSE, &pItem ) )
|
||||
pParaLRSpace = (const SvxLRSpaceItem *)pItem;
|
||||
USHORT nWishLSpace = pParaLRSpace ? pParaLRSpace->GetTxtLeft() : nNumLSpace;
|
||||
|
||||
// Dazu muss man den folgenden Wert im Absatz einstellen
|
||||
const SvxLRSpaceItem& rCollLRSpace = rTxtNd.GetAnyFmtColl().GetLRSpace();
|
||||
USHORT nOldLSpace = pParaLRSpace ? pParaLRSpace->GetTxtLeft()
|
||||
: rCollLRSpace.GetTxtLeft();
|
||||
USHORT nNewLSpace;
|
||||
if( rNumRule.IsAbsSpaces() )
|
||||
nNewLSpace = rCollLRSpace.GetTxtLeft();
|
||||
else
|
||||
nNewLSpace = nWishLSpace > nNumLSpace ? nWishLSpace - nNumLSpace : 0U;
|
||||
|
||||
// Wenn der neue Wert zufaellig der der Vorlage ist und der
|
||||
// rechte Einzug auch mit dem der Vorlage ueberseinstimmt,
|
||||
// dann braucht bzw. darf man das Absatz-Attribut nicht
|
||||
// setzen, sonst muss man es setzen.
|
||||
if( nNewLSpace == rCollLRSpace.GetTxtLeft() &&
|
||||
(!pParaLRSpace || pParaLRSpace->GetRight() == rCollLRSpace.GetRight()) )
|
||||
{
|
||||
if( pParaLRSpace )
|
||||
rTxtNd.ResetAttr( RES_LR_SPACE );
|
||||
}
|
||||
else
|
||||
{
|
||||
if( !pParaLRSpace )
|
||||
pParaLRSpace = &rCollLRSpace;
|
||||
SvxLRSpaceItem aLRSpace( *pParaLRSpace );
|
||||
short nFirst = aLRSpace.GetTxtFirstLineOfst();
|
||||
if( nFirst < 0 && (USHORT)-nFirst > nNewLSpace )
|
||||
aLRSpace.SetTxtFirstLineOfst( -(short)nNewLSpace );
|
||||
aLRSpace.SetTxtLeft( nNewLSpace );
|
||||
((SwCntntNode&)rTxtNd).SetAttr( aLRSpace );
|
||||
}
|
||||
|
||||
if( bTabStop && nOldLSpace != nNewLSpace )
|
||||
lcl_sw3io__ConvertNumTabStop( rTxtNd,
|
||||
(long)nOldLSpace - (long)nNewLSpace,
|
||||
TRUE );
|
||||
}
|
||||
|
Reference in New Issue
Block a user