summaryrefslogtreecommitdiff
path: root/sw/source/core/sw3io
diff options
context:
space:
mode:
authorRüdiger Timm <rt@openoffice.org>2005-01-05 15:02:51 +0000
committerRüdiger Timm <rt@openoffice.org>2005-01-05 15:02:51 +0000
commit4c6e38d21ae2f5486594cf393cb15269a04abbc6 (patch)
tree65c5cbe0f6456ee2f2b35268b816631f864dfa2f /sw/source/core/sw3io
parent7ff93e244c16597b8c2d763ddbd77ca6483d65e8 (diff)
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
Diffstat (limited to 'sw/source/core/sw3io')
-rw-r--r--sw/source/core/sw3io/sw3convert.cxx596
1 files changed, 596 insertions, 0 deletions
diff --git a/sw/source/core/sw3io/sw3convert.cxx b/sw/source/core/sw3io/sw3convert.cxx
new file mode 100644
index 000000000000..98fd3719a287
--- /dev/null
+++ b/sw/source/core/sw3io/sw3convert.cxx
@@ -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 );
+}
+