[Libreoffice-commits] .: 2 commits - binfilter/bf_svx

Michael Meeks mmeeks at kemper.freedesktop.org
Fri Jan 28 07:25:39 PST 2011


 binfilter/bf_svx/source/editeng/svx_editobj.cxx | 2907 +++++++++++-------------
 1 file changed, 1452 insertions(+), 1455 deletions(-)

New commits:
commit cc8be7c7be84d721a777e514a27118dbb7c16b58
Author: Kenneth Venken <kenneth.venken at gmail.com>
Date:   Thu Jan 27 20:19:18 2011 +0100

    comment removed, fixed whitespace

diff --git a/binfilter/bf_svx/source/editeng/svx_editobj.cxx b/binfilter/bf_svx/source/editeng/svx_editobj.cxx
index 0bca86e..5d11cba 100644
--- a/binfilter/bf_svx/source/editeng/svx_editobj.cxx
+++ b/binfilter/bf_svx/source/editeng/svx_editobj.cxx
@@ -495,9 +495,6 @@ BinTextObject::~BinTextObject()
     DeleteContents();
     if ( bOwnerOfPool )
     {
-        // Nicht mehr, wegen 1xDefItems.
-        // siehe auch ~EditDoc().
-//        pPool->ReleaseDefaults( TRUE /* bDelete */ );
         delete pPool;
     }
 }
commit f2ceb73db2b8c501144ac3bfecd0f5087e5d4f53
Author: Kenneth Venken <kenneth.venken at gmail.com>
Date:   Thu Jan 27 20:16:49 2011 +0100

    removed some revision control comments

diff --git a/binfilter/bf_svx/source/editeng/svx_editobj.cxx b/binfilter/bf_svx/source/editeng/svx_editobj.cxx
index 73ad9c2..0bca86e 100644
--- a/binfilter/bf_svx/source/editeng/svx_editobj.cxx
+++ b/binfilter/bf_svx/source/editeng/svx_editobj.cxx
@@ -54,1466 +54,1466 @@
 #include <tools/tenccvt.hxx>
 namespace binfilter {
 
-/*N*/ DBG_NAME( EE_EditTextObject )
-/*N*/ DBG_NAME( XEditAttribute )
+DBG_NAME( EE_EditTextObject )
+DBG_NAME( XEditAttribute )
 
 //--------------------------------------------------------------
 
-/*N*/ BOOL lcl_CreateBulletItem( const SvxNumBulletItem& rNumBullet, USHORT nLevel, SvxBulletItem& rBullet )
-/*N*/ {
-/*N*/ 	const SvxNumberFormat* pFmt = rNumBullet.GetNumRule()->Get( nLevel );
-/*N*/ 	if ( pFmt )
-/*N*/ 	{
-/*N*/ 		rBullet.SetWidth( (-pFmt->GetFirstLineOffset()) + pFmt->GetCharTextDistance() );
-/*N*/ 		rBullet.SetSymbol( pFmt->GetBulletChar() );
-/*N*/ 		rBullet.SetPrevText( pFmt->GetPrefix() );
-/*N*/ 		rBullet.SetFollowText( pFmt->GetSuffix() );
-/*N*/ 		rBullet.SetStart( pFmt->GetStart() );
-/*N*/ 		rBullet.SetScale( pFmt->GetBulletRelSize() );
-/*N*/ 
-/*N*/ 		Font aBulletFont( rBullet.GetFont() );
-/*N*/ 		if ( pFmt->GetBulletFont() )
-/*N*/ 			aBulletFont = *pFmt->GetBulletFont();
-/*N*/ 		aBulletFont.SetColor( pFmt->GetBulletColor() );
-/*N*/ 		rBullet.SetFont( aBulletFont );
-/*N*/ 
-/*N*/ 		if ( pFmt->GetBrush() && pFmt->GetBrush()->GetGraphic() )
-/*N*/ 		{
-/*?*/ 			DBG_BF_ASSERT(0, "STRIP");
-/*N*/ 		}
-/*N*/ 
-/*N*/ 		switch ( pFmt->GetNumberingType() )
-/*N*/ 		{
-/*?*/ 			case SVX_NUM_CHARS_UPPER_LETTER:
-/*?*/ 			case SVX_NUM_CHARS_UPPER_LETTER_N:
-/*?*/ 				rBullet.SetStyle( BS_ABC_BIG );
-/*?*/ 				break;
-/*?*/ 			case SVX_NUM_CHARS_LOWER_LETTER:
-/*?*/ 			case SVX_NUM_CHARS_LOWER_LETTER_N:
-/*?*/ 				rBullet.SetStyle( BS_ABC_SMALL );
-/*?*/ 				break;
-/*?*/ 			case SVX_NUM_ROMAN_UPPER:
-/*?*/ 				rBullet.SetStyle( BS_ROMAN_BIG );
-/*?*/ 				break;
-/*?*/ 			case SVX_NUM_ROMAN_LOWER:
-/*?*/ 				rBullet.SetStyle( BS_ROMAN_SMALL );
-/*?*/ 				break;
-/*?*/ 			case SVX_NUM_ARABIC:
-/*?*/ 				rBullet.SetStyle( BS_123 );
-/*?*/ 				break;
-/*?*/ 			case SVX_NUM_NUMBER_NONE:
-/*?*/ 				rBullet.SetStyle( BS_NONE );
-/*?*/ 				break;
-/*?*/ 			case SVX_NUM_CHAR_SPECIAL:
-/*N*/ 				rBullet.SetStyle( BS_BULLET );
-/*N*/ 				break;
-/*?*/ 			case SVX_NUM_PAGEDESC:
-/*?*/ 				DBG_ERROR( "Unknown: SVX_NUM_PAGEDESC" );
-/*?*/ 				rBullet.SetStyle( BS_BULLET );
-/*?*/ 				break;
-/*?*/ 			case SVX_NUM_BITMAP:
-/*?*/ 				rBullet.SetStyle( BS_BMP );
-/*?*/ 				break;
-/*?*/ 			default:
-/*?*/ 				DBG_ERROR( "Unknown NumType" );
-/*N*/ 		}
-/*N*/ 
-/*N*/ 		switch ( pFmt->GetNumAdjust() )
-/*N*/ 		{
-/*N*/ 			case SVX_ADJUST_LEFT:
-/*N*/ 				rBullet.SetJustification( BJ_VCENTER|BJ_HLEFT );
-/*N*/ 				break;
-/*?*/ 			case SVX_ADJUST_RIGHT:
-/*?*/ 				rBullet.SetJustification( BJ_VCENTER|BJ_HRIGHT );
-/*?*/ 				break;
-/*?*/ 			case SVX_ADJUST_CENTER:
-/*?*/ 				rBullet.SetJustification( BJ_VCENTER|BJ_HCENTER );
-/*?*/ 				break;
-/*?*/ 			default:
-/*?*/ 				DBG_ERROR( "Unknown or invalid NumAdjust" );
-/*N*/ 		}
-/*N*/ 	}
-/*N*/ 	return pFmt ? TRUE : FALSE;
-/*N*/ }
-
-
-/*N*/ XEditAttribute* MakeXEditAttribute( SfxItemPool& rPool, const SfxPoolItem& rItem, USHORT nStart, USHORT nEnd )
-/*N*/ {
-/*N*/ 	// das neue Attribut im Pool anlegen
-/*N*/ 	const SfxPoolItem& rNew = rPool.Put( rItem );
-/*N*/ 
-/*N*/ 	XEditAttribute* pNew = new XEditAttribute( rNew, nStart, nEnd );
-/*N*/ 	return pNew;
-/*N*/ }
-
-
-
-/*N*/ XEditAttribute::XEditAttribute( const SfxPoolItem& rAttr, USHORT nS, USHORT nE )
-/*N*/ {
-/*N*/ 	DBG_CTOR( XEditAttribute, 0 );
-/*N*/ 	pItem = &rAttr;
-/*N*/ 	nStart = nS;
-/*N*/ 	nEnd = nE;
-/*N*/ }
-
-/*N*/ XEditAttribute::~XEditAttribute()
-/*N*/ {
-/*N*/ 	DBG_DTOR( XEditAttribute, 0 );
-/*N*/ 	pItem = 0;	// Gehoert dem Pool.
-/*N*/ }
-
-/*N*/ XEditAttribute* XEditAttributeList::FindAttrib( USHORT nWhich, USHORT nChar ) const
-/*N*/ {
-/*N*/     for ( USHORT n = Count(); n; )
-/*N*/     {
-/*N*/         XEditAttribute* pAttr = GetObject( --n );
-/*N*/         if( ( pAttr->GetItem()->Which() == nWhich ) && ( pAttr->GetStart() <= nChar ) && ( pAttr->GetEnd() > nChar ) )
-/*N*/             return pAttr;
-/*N*/     }
-/*N*/     return NULL;
-/*N*/ }
-
-/*N*/ ContentInfo::ContentInfo( SfxItemPool& rPool ) : aParaAttribs( rPool, EE_PARA_START, EE_CHAR_END )
-/*N*/ {
-/*N*/ 	eFamily = SFX_STYLE_FAMILY_PARA;
-/*N*/     pTempLoadStoreInfos = NULL;
-/*N*/ }
+BOOL lcl_CreateBulletItem( const SvxNumBulletItem& rNumBullet, USHORT nLevel, SvxBulletItem& rBullet )
+{
+    const SvxNumberFormat* pFmt = rNumBullet.GetNumRule()->Get( nLevel );
+    if ( pFmt )
+    {
+        rBullet.SetWidth( (-pFmt->GetFirstLineOffset()) + pFmt->GetCharTextDistance() );
+        rBullet.SetSymbol( pFmt->GetBulletChar() );
+        rBullet.SetPrevText( pFmt->GetPrefix() );
+        rBullet.SetFollowText( pFmt->GetSuffix() );
+        rBullet.SetStart( pFmt->GetStart() );
+        rBullet.SetScale( pFmt->GetBulletRelSize() );
+
+        Font aBulletFont( rBullet.GetFont() );
+        if ( pFmt->GetBulletFont() )
+            aBulletFont = *pFmt->GetBulletFont();
+        aBulletFont.SetColor( pFmt->GetBulletColor() );
+        rBullet.SetFont( aBulletFont );
+
+        if ( pFmt->GetBrush() && pFmt->GetBrush()->GetGraphic() )
+        {
+            DBG_BF_ASSERT(0, "STRIP");
+        }
+
+        switch ( pFmt->GetNumberingType() )
+        {
+            case SVX_NUM_CHARS_UPPER_LETTER:
+            case SVX_NUM_CHARS_UPPER_LETTER_N:
+                rBullet.SetStyle( BS_ABC_BIG );
+                break;
+            case SVX_NUM_CHARS_LOWER_LETTER:
+            case SVX_NUM_CHARS_LOWER_LETTER_N:
+                rBullet.SetStyle( BS_ABC_SMALL );
+                break;
+            case SVX_NUM_ROMAN_UPPER:
+                rBullet.SetStyle( BS_ROMAN_BIG );
+                break;
+            case SVX_NUM_ROMAN_LOWER:
+                rBullet.SetStyle( BS_ROMAN_SMALL );
+                break;
+            case SVX_NUM_ARABIC:
+                rBullet.SetStyle( BS_123 );
+                break;
+            case SVX_NUM_NUMBER_NONE:
+                rBullet.SetStyle( BS_NONE );
+                break;
+            case SVX_NUM_CHAR_SPECIAL:
+                rBullet.SetStyle( BS_BULLET );
+                break;
+            case SVX_NUM_PAGEDESC:
+                DBG_ERROR( "Unknown: SVX_NUM_PAGEDESC" );
+                rBullet.SetStyle( BS_BULLET );
+                break;
+            case SVX_NUM_BITMAP:
+                rBullet.SetStyle( BS_BMP );
+                break;
+            default:
+                DBG_ERROR( "Unknown NumType" );
+        }
+
+        switch ( pFmt->GetNumAdjust() )
+        {
+            case SVX_ADJUST_LEFT:
+                rBullet.SetJustification( BJ_VCENTER|BJ_HLEFT );
+                break;
+            case SVX_ADJUST_RIGHT:
+                rBullet.SetJustification( BJ_VCENTER|BJ_HRIGHT );
+                break;
+            case SVX_ADJUST_CENTER:
+                rBullet.SetJustification( BJ_VCENTER|BJ_HCENTER );
+                break;
+            default:
+                DBG_ERROR( "Unknown or invalid NumAdjust" );
+        }
+    }
+    return pFmt ? TRUE : FALSE;
+}
+
+
+XEditAttribute* MakeXEditAttribute( SfxItemPool& rPool, const SfxPoolItem& rItem, USHORT nStart, USHORT nEnd )
+{
+    // das neue Attribut im Pool anlegen
+    const SfxPoolItem& rNew = rPool.Put( rItem );
+
+    XEditAttribute* pNew = new XEditAttribute( rNew, nStart, nEnd );
+    return pNew;
+}
+
+
+
+XEditAttribute::XEditAttribute( const SfxPoolItem& rAttr, USHORT nS, USHORT nE )
+{
+    DBG_CTOR( XEditAttribute, 0 );
+    pItem = &rAttr;
+    nStart = nS;
+    nEnd = nE;
+}
+
+XEditAttribute::~XEditAttribute()
+{
+    DBG_DTOR( XEditAttribute, 0 );
+    pItem = 0;    // Gehoert dem Pool.
+}
+
+XEditAttribute* XEditAttributeList::FindAttrib( USHORT nWhich, USHORT nChar ) const
+{
+    for ( USHORT n = Count(); n; )
+    {
+        XEditAttribute* pAttr = GetObject( --n );
+        if( ( pAttr->GetItem()->Which() == nWhich ) && ( pAttr->GetStart() <= nChar ) && ( pAttr->GetEnd() > nChar ) )
+            return pAttr;
+    }
+    return NULL;
+}
+
+ContentInfo::ContentInfo( SfxItemPool& rPool ) : aParaAttribs( rPool, EE_PARA_START, EE_CHAR_END )
+{
+    eFamily = SFX_STYLE_FAMILY_PARA;
+    pTempLoadStoreInfos = NULL;
+}
 
 // Richtiger CopyCTOR unsinning, weil ich mit einem anderen Pool arbeiten muss!
-/*N*/ ContentInfo::ContentInfo( const ContentInfo& rCopyFrom, SfxItemPool& rPoolToUse )
-/*N*/ 	: aParaAttribs( rPoolToUse, EE_PARA_START, EE_CHAR_END )
-/*N*/ {
-/*N*/     pTempLoadStoreInfos = NULL;
-/*N*/ 	// So sollten die Items im richtigen Pool landen!
-/*N*/ 	aParaAttribs.Set( rCopyFrom.GetParaAttribs() );
-/*N*/ 	aText = rCopyFrom.GetText();
-/*N*/ 	aStyle = rCopyFrom.GetStyle();
-/*N*/ 	eFamily = rCopyFrom.GetFamily();
-/*N*/ 
-/*N*/ 	// Attribute kopieren...
-/*N*/ 	for ( USHORT n = 0; n < rCopyFrom.GetAttribs().Count(); n++  )
-/*N*/ 	{
-/*N*/ 		XEditAttribute* pAttr = rCopyFrom.GetAttribs().GetObject( n );
-/*N*/ 		XEditAttribute* pMyAttr = MakeXEditAttribute( rPoolToUse, *pAttr->GetItem(), pAttr->GetStart(), pAttr->GetEnd() );
-/*N*/ 		aAttribs.Insert( pMyAttr, aAttribs.Count()  );
-/*N*/ 	}
-/*N*/ }
-
-/*N*/ ContentInfo::~ContentInfo()
-/*N*/ {
-/*N*/ 	for ( USHORT nAttr = 0; nAttr < aAttribs.Count(); nAttr++ )
-/*N*/ 	{
-/*N*/ 		XEditAttribute* pAttr = aAttribs.GetObject(nAttr);
-/*N*/ 		// Item aus Pool entfernen!
-/*N*/ 		aParaAttribs.GetPool()->Remove( *pAttr->GetItem() );
-/*N*/ 		delete pAttr;
-/*N*/ 	}
-/*N*/ 	aAttribs.Remove( 0, aAttribs.Count() );
-/*N*/ }
-
-/*N*/ void ContentInfo::CreateLoadStoreTempInfos()
-/*N*/ {
-/*N*/     delete pTempLoadStoreInfos; 
-/*N*/     pTempLoadStoreInfos = new LoadStoreTempInfos;
-/*N*/ }
-
-/*N*/ void ContentInfo::DestroyLoadStoreTempInfos()
-/*N*/ {
-/*N*/     delete pTempLoadStoreInfos; 
-/*N*/     pTempLoadStoreInfos = NULL; 
-/*N*/ }
-
-/*N*/ EditTextObject::EditTextObject( USHORT n)
-/*N*/ {
-/*N*/ 	DBG_CTOR( EE_EditTextObject, 0 );
-/*N*/ 	nWhich = n;
-/*N*/ }
-
-/*N*/ EditTextObject::EditTextObject( const EditTextObject& r )
-/*N*/ {
-/*N*/ 	DBG_CTOR( EE_EditTextObject, 0 );
-/*N*/ 	nWhich = r.nWhich;
-/*N*/ }
-
-/*N*/ EditTextObject::~EditTextObject()
-/*N*/ {
-/*N*/ 	DBG_DTOR( EE_EditTextObject, 0 );
-/*N*/ }
-
-/*N*/ USHORT EditTextObject::GetParagraphCount() const
-/*N*/ {
-/*N*/ 	DBG_ERROR( "V-Methode direkt vom EditTextObject!" );
-/*N*/ 	return 0;
-/*N*/ }
-
-/*N*/ XubString EditTextObject::GetText( USHORT ) const
-/*N*/ {DBG_BF_ASSERT(0, "STRIP"); return XubString();
-/*N*/ }
-
-/*N*/ void EditTextObject::Insert( const EditTextObject&, USHORT )
-/*N*/ {
-/*N*/ 	DBG_ERROR( "V-Methode direkt vom EditTextObject!" );
-/*N*/ }
-
-/*N*/ void EditTextObject::ClearPortionInfo()
-/*N*/ {
-/*N*/ 	DBG_ERROR( "V-Methode direkt vom EditTextObject!" );
-/*N*/ }
-
-/*N*/ void EditTextObject::MergeParaAttribs( const SfxItemSet&, USHORT, USHORT )
-/*N*/ {
-/*N*/ 	DBG_ERROR( "V-Methode direkt vom EditTextObject!" );
-/*N*/ }
-
-
-
-/*N*/ BOOL EditTextObject::HasField( TypeId ) const
-/*N*/ {
-/*N*/ 	DBG_ERROR( "V-Methode direkt vom EditTextObject!" );
-/*N*/ 	return FALSE;
-/*N*/ }
-
-/*N*/ SfxItemSet EditTextObject::GetParaAttribs( USHORT ) const
-/*N*/ {
-/*N*/ 	DBG_ERROR( "V-Methode direkt vom EditTextObject!" );
-/*N*/ 	return SfxItemSet( *(SfxItemPool*)NULL );
-/*N*/ }
-
-/*N*/ void EditTextObject::GetStyleSheet( USHORT, XubString&, SfxStyleFamily& ) const
-/*N*/ {
-/*N*/ 	DBG_ERROR( "V-Methode direkt vom EditTextObject!" );
-/*N*/ }
-
-/*N*/ void EditTextObject::SetStyleSheet( USHORT, const XubString&, const SfxStyleFamily& )
-/*N*/ {
-/*N*/ 	DBG_ERROR( "V-Methode direkt vom EditTextObject!" );
-/*N*/ }
-
-/*N*/ BOOL EditTextObject::ChangeStyleSheets( const XubString&, SfxStyleFamily,
-/*N*/ 											const XubString&, SfxStyleFamily )
-/*N*/ {
-/*N*/ 	DBG_ERROR( "V-Methode direkt vom EditTextObject!" );
-/*N*/ 	return FALSE;
-/*N*/ }
-
-/*N*/ void EditTextObject::ChangeStyleSheetName( SfxStyleFamily,
-/*N*/ 				const XubString&, const XubString& )
-/*N*/ {
-/*N*/ 	DBG_ERROR( "V-Methode direkt vom EditTextObject!" );
-/*N*/ }
-
-/*N*/ USHORT EditTextObject::GetUserType() const
-/*N*/ {
-/*N*/ 	DBG_ERROR( "V-Methode direkt vom EditTextObject!" );
-/*N*/ 	return 0;
-/*N*/ }
-
-/*N*/ void EditTextObject::SetUserType( USHORT /*n*/ )
-/*N*/ {
-/*N*/ 	DBG_ERROR( "V-Methode direkt vom EditTextObject!" );
-/*N*/ }
-
-
-
-/*N*/ BOOL EditTextObject::IsVertical() const
-/*N*/ {
-/*N*/ 	DBG_ERROR( "V-Methode direkt vom EditTextObject!" );
-/*N*/ 	return FALSE;
-/*N*/ }
-
-/*N*/ void EditTextObject::SetVertical( BOOL /*bVertical*/ )
-/*N*/ {DBG_BF_ASSERT(0, "STRIP");
-/*N*/ }
-
-
-
-/*N*/ BOOL EditTextObject::Store( SvStream& rOStream ) const
-/*N*/ {
-/*N*/ 	if ( rOStream.GetError() )
-/*N*/ 		return FALSE;
-/*N*/ 
-/*N*/ 	// Vorspann:
-/*N*/ 	ULONG nStartPos = rOStream.Tell();
-/*N*/ 
-/*N*/ 	USHORT nLclWhich = Which();
-/*N*/ 	rOStream << nLclWhich;
-/*N*/ 
-/*N*/ 	sal_uInt32 nStructSz = 0;
-/*N*/ 	rOStream << nStructSz;
-/*N*/ 
-/*N*/ 	// Eigene Daten:
-/*N*/ 	StoreData( rOStream );
-/*N*/ 
-/*N*/ 	// Nachspann:
-/*N*/ 	ULONG nEndPos = rOStream.Tell();
-/*N*/ 	nStructSz = nEndPos - nStartPos - sizeof( nLclWhich ) - sizeof( nStructSz );
-/*N*/ 	rOStream.Seek( nStartPos + sizeof( nLclWhich ) );
-/*N*/ 	rOStream << nStructSz;
-/*N*/ 	rOStream.Seek( nEndPos );
-/*N*/ 
-/*N*/ 	return rOStream.GetError() ? FALSE : TRUE;
-/*N*/ }
-
-/*N*/ EditTextObject*	EditTextObject::Create( SvStream& rIStream, SfxItemPool* pGlobalTextObjectPool )
-/*N*/ {
-/*N*/ 	ULONG nStartPos = rIStream.Tell();
-/*N*/ 
-/*N*/ 	// Ertmal sehen, was fuer ein Object...
-/*N*/ 	USHORT nLclWhich;
-/*N*/ 	rIStream >> nLclWhich;
-/*N*/ 
-/*N*/ 	sal_uInt32 nStructSz;
-/*N*/ 	rIStream >> nStructSz;
-/*N*/ 
-/*N*/ 	DBG_ASSERT( ( nLclWhich == 0x22 /*EE_FORMAT_BIN300*/ ) || ( nLclWhich == EE_FORMAT_BIN ), "CreateTextObject: Unbekanntes Objekt!" );
-/*N*/ 
-/*N*/ 	if ( rIStream.GetError() )
-/*N*/ 		return NULL;
-/*N*/ 
-/*N*/ 	EditTextObject* pTxtObj = NULL;
-/*N*/ 	switch ( nLclWhich )
-/*N*/ 	{
-/*N*/ 		case 0x22 /*BIN300*/:		pTxtObj = new BinTextObject( 0 );
-/*N*/ 									((BinTextObject*)pTxtObj)->CreateData300( rIStream );
-/*N*/ 									break;
-/*N*/ 		case EE_FORMAT_BIN:			pTxtObj = new BinTextObject( pGlobalTextObjectPool );
-/*N*/ 									pTxtObj->CreateData( rIStream );
-/*N*/ 									break;
-/*N*/ 		default:
-/*N*/ 		{
-/*N*/ 			// Wenn ich das Format nicht kenne, ueberlese ich den Inhalt:
-/*?*/ 			rIStream.SetError( EE_READWRITE_WRONGFORMAT );
-/*N*/ 		}
-/*N*/ 	}
-/*N*/ 
-/*N*/ 	// Sicherstellen, dass der Stream an der richtigen Stelle hinterlassen wird.
-/*N*/ 	ULONG nFullSz = sizeof( nLclWhich ) + sizeof( nStructSz ) + nStructSz;
-/*N*/ 	rIStream.Seek( nStartPos + nFullSz );
-/*N*/ 	return pTxtObj;
-/*N*/ }
-
-
-/*N*/ void EditTextObject::StoreData( SvStream& /*rOStream*/ ) const
-/*N*/ {
-/*N*/ 	DBG_ERROR( "StoreData: Basisklasse!" );
-/*N*/ }
-
-/*N*/ void EditTextObject::CreateData( SvStream& /*rIStream*/ )
-/*N*/ {
-/*N*/ 	DBG_ERROR( "CreateData: Basisklasse!" );
-/*N*/ }
-
-/*N*/ USHORT EditTextObject::GetVersion() const
-/*N*/ {
-/*N*/ 	DBG_ERROR( "V-Methode direkt vom EditTextObject!" );
-/*N*/ 	return 0;
-/*N*/ }
-
-
-/*N*/ void EditTextObject::AdjustImportedLRSpaceItems( BOOL /*bTurnOfBullets*/ )
-/*N*/ {
-/*N*/ 	DBG_ERROR( "V-Methode direkt vom EditTextObject!" );
-/*N*/ }
-
-/*N*/ void EditTextObject::PrepareStore( SfxStyleSheetPool* /*pStyleSheetPool*/ )
-/*N*/ {
-/*N*/ 	DBG_ERROR( "V-Methode direkt vom EditTextObject!" );
-/*N*/ }
-
-/*N*/ void EditTextObject::FinishStore()
-/*N*/ {
-/*N*/ 	DBG_ERROR( "V-Methode direkt vom EditTextObject!" );
-/*N*/ }
-
-/*N*/ void EditTextObject::FinishLoad( SfxStyleSheetPool* /*pStyleSheetPool*/ )
-/*N*/ {
-/*N*/ 	DBG_ERROR( "V-Methode direkt vom EditTextObject!" );
-/*N*/ }
-
-/*N*/ BinTextObject::BinTextObject( SfxItemPool* pP ) :
-/*N*/ 	EditTextObject( EE_FORMAT_BIN )
-/*N*/ {
-/*N*/ 	nVersion = 0;
-/*N*/ 	nMetric = 0xFFFF;
-/*N*/ 	nUserType = 0;
-/*N*/ 	nObjSettings = 0;
-/*N*/ 	pPortionInfo = 0;
-/*N*/ 	if ( pP )
-/*N*/ 	{
-/*N*/ 		pPool =	pP;
-/*N*/ 		bOwnerOfPool = FALSE;
-/*N*/ 	}
-/*N*/ 	else
-/*N*/ 	{
-/*N*/ 		pPool =	EditEngine::CreatePool();
-/*N*/ 		bOwnerOfPool =	TRUE;
-/*N*/ 	}
-/*N*/ 	bVertical = FALSE;
-/*N*/ 	bStoreUnicodeStrings = FALSE;
-/*N*/ 	nScriptType = 0;
-/*N*/ }
-
-/*N*/ BinTextObject::BinTextObject( const BinTextObject& r ) :
-/*N*/ 	EditTextObject( r )
-/*N*/ {
-/*N*/ 	nVersion = r.nVersion;
-/*N*/ 	nMetric = r.nMetric;
-/*N*/ 	nUserType = r.nUserType;
-/*N*/ 	nObjSettings = r.nObjSettings;
-/*N*/ 	bVertical = r.bVertical;
-/*N*/ 	nScriptType = r.nScriptType;
-/*N*/ 	pPortionInfo = NULL;	// PortionInfo nicht kopieren
-/*N*/ 	bStoreUnicodeStrings = FALSE;
-/*N*/ 	if ( !r.bOwnerOfPool )
-/*N*/ 	{
-/*N*/ 		// Dann den Pool mitverwenden
-/*N*/ 		pPool =	r.pPool;
-/*N*/ 		bOwnerOfPool = FALSE;
-/*N*/ 	}
-/*N*/ 	else
-/*N*/ 	{
-/*N*/ 		pPool =	EditEngine::CreatePool();
-/*N*/ 		bOwnerOfPool =	TRUE;
-/*N*/ 
-/*N*/ 	}
-/*N*/ 
-/*N*/ 	if ( bOwnerOfPool && pPool && r.pPool )
-/*N*/ 		pPool->SetDefaultMetric( r.pPool->GetMetric( DEF_METRIC ) );
-/*N*/ 
-/*N*/ 	for ( USHORT n = 0; n < r.aContents.Count(); n++ )
-/*N*/ 	{
-/*N*/ 		ContentInfo* pOrg = r.aContents.GetObject( n );
-/*N*/ 		DBG_ASSERT( pOrg, "NULL-Pointer in ContentList!" );
-/*N*/ 		ContentInfo* pNew = new ContentInfo( *pOrg, *pPool );
-/*N*/ 		aContents.Insert( pNew, aContents.Count() );
-/*N*/ 	}
-/*N*/ }
-
-/*N*/ BinTextObject::~BinTextObject()
-/*N*/ {
-/*N*/ 	ClearPortionInfo();
-/*N*/ 	DeleteContents();
-/*N*/ 	if ( bOwnerOfPool )
-/*N*/ 	{
-/*N*/ 		// Nicht mehr, wegen 1xDefItems.
-/*N*/ 		// siehe auch ~EditDoc().
-/*N*/ //		pPool->ReleaseDefaults( TRUE /* bDelete */ );
-/*N*/ 		delete pPool;
-/*N*/ 	}
-/*N*/ }
-
-/*N*/ USHORT BinTextObject::GetUserType() const
-/*N*/ {
-/*N*/ 	return nUserType;
-/*N*/ }
-
-/*N*/ void BinTextObject::SetUserType( USHORT n )
-/*N*/ {
-/*N*/ 	nUserType = n;
-/*N*/ }
-
-
-
-/*N*/ BOOL BinTextObject::IsVertical() const
-/*N*/ {
-/*N*/ 	return bVertical;
-/*N*/ }
-
-/*N*/ void BinTextObject::SetVertical( BOOL b )
-/*N*/ {
-/*N*/ 	if ( b != bVertical )
-/*N*/ 	{
-/*?*/ 		bVertical = b;
-/*?*/ 		ClearPortionInfo();
-/*N*/ 	}
-/*N*/ }
-
-
-/*N*/ void BinTextObject::SetScriptType( USHORT nType )
-/*N*/ {
-/*N*/ 	nScriptType = nType;
-/*N*/ }
-
-
-/*N*/ void BinTextObject::DeleteContents()
-/*N*/ {
-/*N*/ 	for ( USHORT n = 0; n < aContents.Count(); n++ )
-/*N*/ 	{
-/*N*/ 		ContentInfo* p = aContents.GetObject( n );
-/*N*/ 		DBG_ASSERT( p, "NULL-Pointer in ContentList!" );
-/*N*/ 		delete p;
-/*N*/ 	}
-/*N*/ 	aContents.Remove( 0, aContents.Count() );
-/*N*/ }
-
-/*N*/ EditTextObject*	BinTextObject::Clone() const
-/*N*/ {
-/*N*/ 	return new BinTextObject( *this );
-/*N*/ }
-
-/*N*/ XEditAttribute* BinTextObject::CreateAttrib( const SfxPoolItem& rItem, USHORT nStart, USHORT nEnd )
-/*N*/ {
-/*N*/ 	return MakeXEditAttribute( *pPool, rItem, nStart, nEnd );
-/*N*/ }
-
-/*N*/ void BinTextObject::DestroyAttrib( XEditAttribute* pAttr )
-/*N*/ {
-/*N*/ 	pPool->Remove( *pAttr->GetItem() );
-/*N*/ 	delete pAttr;
-/*N*/ }
-
-/*N*/ ContentInfo* BinTextObject::CreateAndInsertContent()
-/*N*/ {
-/*N*/ 	ContentInfo* pC = new ContentInfo( *pPool );
-/*N*/ 	aContents.Insert( pC, aContents.Count() );
-/*N*/ 	return pC;
-/*N*/ }
-
-/*N*/ USHORT BinTextObject::GetParagraphCount() const
-/*N*/ {
-/*N*/ 	return aContents.Count();
-/*N*/ }
-
-/*N*/ XubString BinTextObject::GetText( USHORT nPara ) const
-/*N*/ {
-/*N*/ 	DBG_ASSERT( nPara < aContents.Count(), "BinTextObject::GetText: Absatz existiert nicht!" );
-/*N*/ 	if ( nPara < aContents.Count() )
-/*N*/ 	{
-/*N*/ 		ContentInfo* pC = aContents[ nPara ];
-/*N*/ 		return pC->GetText();
-/*N*/ 	}
-/*?*/ 	return XubString();
-/*N*/ }
-
-/*N*/ void BinTextObject::Insert( const EditTextObject& rObj, USHORT nDestPara )
-/*N*/ {
-/*N*/ 	DBG_ASSERT( rObj.Which() == EE_FORMAT_BIN, "UTO: Unbekanntes Textobjekt" );
-/*N*/ 
-/*N*/ 	const BinTextObject& rBinObj = (const BinTextObject&)rObj;
-/*N*/ 
-/*N*/ 	if ( nDestPara > aContents.Count() )
-/*N*/ 		nDestPara = aContents.Count();
-/*N*/ 
-/*N*/ 	const USHORT nParas = rBinObj.GetContents().Count();
-/*N*/ 	for ( USHORT nP = 0; nP < nParas; nP++ )
-/*N*/ 	{
-/*N*/ 		ContentInfo* pC = rBinObj.GetContents()[ nP ];
-/*N*/ 		ContentInfo* pNew = new ContentInfo( *pC, *GetPool() );
-/*N*/ 		aContents.Insert( pNew, nDestPara+nP );
-/*N*/ 	}
-/*N*/ 	ClearPortionInfo();
-/*N*/ }
-
-
-
-
-/*N*/ void BinTextObject::ClearPortionInfo()
-/*N*/ {
-/*N*/ 	if ( pPortionInfo )
-/*N*/ 	{
-/*?*/ 		for ( USHORT n = pPortionInfo->Count(); n; )
-/*?*/ 			delete pPortionInfo->GetObject( --n );
-/*?*/ 		delete pPortionInfo;
-/*?*/ 		pPortionInfo = NULL;
-/*N*/ 	}
-/*N*/ }
-
-
-
-
-/*N*/ void BinTextObject::MergeParaAttribs( const SfxItemSet& rAttribs, USHORT nStart, USHORT nEnd )
-/*N*/ {
-/*N*/ 	BOOL bChanged = FALSE;
-/*N*/ 
-/*N*/ 	for ( USHORT nPara = GetContents().Count(); nPara; )
-/*N*/ 	{
-/*N*/ 		ContentInfo* pC = GetContents().GetObject( --nPara );
-/*N*/ 
-/*N*/ 		for ( USHORT nW = nStart; nW <= nEnd; nW++ )
-/*N*/ 		{
-/*N*/ 			if ( ( pC->GetParaAttribs().GetItemState( nW, FALSE ) != SFX_ITEM_ON )
-/*N*/ 					&& ( rAttribs.GetItemState( nW, FALSE ) == SFX_ITEM_ON ) )
-/*N*/ 			{
-/*N*/ 				pC->GetParaAttribs().Put( rAttribs.Get( nW ) );
-/*N*/ 				bChanged = TRUE;
-/*N*/ 			}
-/*N*/ 		}
-/*N*/ 	}
-/*N*/ 
-/*N*/ 	if ( bChanged )
-/*N*/ 		ClearPortionInfo();
-/*N*/ }
-
-
-
-/*N*/ BOOL BinTextObject::HasField( TypeId aType ) const
-/*N*/ {
-/*N*/ 	USHORT nParagraphs = GetContents().Count();
-/*N*/ 	for ( USHORT nPara = 0; nPara < nParagraphs; nPara++ )
-/*N*/ 	{
-/*N*/ 		ContentInfo* pC = GetContents().GetObject( nPara );
-/*N*/ 		USHORT nAttrs = pC->GetAttribs().Count();
-/*N*/ 		for ( USHORT nAttr = 0; nAttr < nAttrs; nAttr++ )
-/*N*/ 		{
-/*N*/ 			XEditAttribute* pAttr = pC->GetAttribs()[nAttr];
-/*N*/ 			if ( pAttr->GetItem()->Which() == EE_FEATURE_FIELD )
-/*N*/ 			{
-/*N*/ 				if ( !aType )
-/*N*/ 					return TRUE;
-/*N*/ 
-/*N*/ 				const SvxFieldData* pFldData = ((const SvxFieldItem*)pAttr->GetItem())->GetField();
-/*N*/ 				if ( pFldData && pFldData->IsA( aType ) )
-/*N*/ 					return TRUE;
-/*N*/ 			}
-/*N*/ 		}
-/*N*/ 	}
-/*N*/ 	return FALSE;
-/*N*/ }
-
-/*N*/ SfxItemSet BinTextObject::GetParaAttribs( USHORT nPara ) const
-/*N*/ {
-/*N*/ 	ContentInfo* pC = GetContents().GetObject( nPara );
-/*N*/ 	return pC->GetParaAttribs();
-/*N*/ }
-
-
-
-
-
-/*N*/ void BinTextObject::GetStyleSheet( USHORT nPara, XubString& rName, SfxStyleFamily& rFamily ) const
-/*N*/ {
-/*N*/ 	if ( nPara < aContents.Count() )
-/*N*/ 	{
-/*N*/ 		ContentInfo* pC = aContents[ nPara ];
-/*N*/ 		rName = pC->GetStyle();
-/*N*/ 		rFamily = pC->GetFamily();
-/*N*/ 	}
-/*N*/ }
-
-/*N*/ void BinTextObject::SetStyleSheet( USHORT, const XubString&, const SfxStyleFamily& )
-/*N*/ {DBG_BF_ASSERT(0, "STRIP");
-/*N*/ }
-
-/*N*/ BOOL BinTextObject::ImpChangeStyleSheets(
-/*N*/ 					const XubString& rOldName, SfxStyleFamily eOldFamily,
-/*N*/ 					const XubString& rNewName, SfxStyleFamily eNewFamily )
-/*N*/ {
-/*N*/ 	const USHORT nParagraphs = GetContents().Count();
-/*N*/ 	BOOL bChanges = FALSE;
-/*N*/ 
-/*N*/ 	for ( USHORT nPara = 0; nPara < nParagraphs; nPara++ )
-/*N*/ 	{
-/*N*/ 		ContentInfo* pC = GetContents().GetObject( nPara );
-/*N*/ 		if ( pC->GetFamily() == eOldFamily )
-/*N*/ 		{
-/*N*/ 			if ( pC->GetStyle() == rOldName )
-/*N*/ 			{
-/*N*/ 				pC->GetStyle() = rNewName;
-/*N*/ 				pC->GetFamily() = eNewFamily;
-/*N*/ 				bChanges = TRUE;
-/*N*/ 			}
-/*N*/ 		}
-/*N*/ 	}
-/*N*/ 	return bChanges;
-/*N*/ }
-
-/*N*/ BOOL BinTextObject::ChangeStyleSheets(
-/*N*/ 					const XubString& rOldName, SfxStyleFamily eOldFamily,
-/*N*/ 					const XubString& rNewName, SfxStyleFamily eNewFamily )
-/*N*/ {
-/*N*/ 	BOOL bChanges = ImpChangeStyleSheets( rOldName, eOldFamily, rNewName, eNewFamily );
-/*N*/ 	if ( bChanges )
-/*N*/ 		ClearPortionInfo();
-/*N*/ 
-/*N*/ 	return bChanges;
-/*N*/ }
-
-/*N*/ void BinTextObject::ChangeStyleSheetName( SfxStyleFamily eFamily,
-/*N*/ 				const XubString& rOldName, const XubString& rNewName )
-/*N*/ {
-/*N*/ 	ImpChangeStyleSheets( rOldName, eFamily, rNewName, eFamily );
-/*N*/ }
-
-/*N*/ void BinTextObject::StoreData( SvStream& rOStream ) const
-/*N*/ {
-/*N*/ 	USHORT nVer = 602;
-/*N*/ 	rOStream << nVer;
-/*N*/ 
-/*N*/ 	rOStream << bOwnerOfPool;
-/*N*/ 
-/*N*/ 	// Erst den Pool speichern, spaeter nur noch Surregate
-/*N*/ 	if ( bOwnerOfPool )
-/*N*/ 	{
-/*N*/ 		GetPool()->SetFileFormatVersion( SOFFICE_FILEFORMAT_50 );
-/*N*/ 		GetPool()->Store( rOStream );
-/*N*/ 	}
-/*N*/ 
-/*N*/ 	// Aktuelle Zeichensatz speichern...
-/*N*/ 	// #90477# GetSOStoreTextEncoding: Bug in 5.2, when default char set is multi byte text encoding
-/*N*/ 	rtl_TextEncoding eEncoding = GetSOStoreTextEncoding( gsl_getSystemTextEncoding(), (USHORT) rOStream.GetVersion() );
-/*N*/ 	rOStream << (USHORT) eEncoding;
-/*N*/ 
-/*N*/ 	// Die Anzahl der Absaetze...
-/*N*/ 	USHORT nParagraphs = GetContents().Count();
-/*N*/ 	rOStream << nParagraphs;
-/*N*/ 
-/*N*/ 	char cFeatureConverted = ByteString( CH_FEATURE, eEncoding ).GetChar(0);
-/*N*/ 
-/*N*/ 	// Die einzelnen Absaetze...
-/*N*/ 	for ( USHORT nPara = 0; nPara < nParagraphs; nPara++ )
-/*N*/ 	{
-/*N*/ 		ContentInfo* pC = GetContents().GetObject( nPara );
-/*N*/ 
-/*N*/ 		// Text...
-/*N*/ 		ByteString aText( pC->GetText(), eEncoding );
-/*N*/ 
-/*N*/         // Symbols?
-/*N*/         BOOL bSymbolPara = FALSE;
-/*N*/         if ( pC->GetLoadStoreTempInfos() && pC->GetLoadStoreTempInfos()->bSymbolParagraph_Store )
-/*N*/         {
-/*?*/             DBG_ASSERT( pC->GetParaAttribs().GetItemState( EE_CHAR_FONTINFO ) != SFX_ITEM_ON, "Why bSymbolParagraph_Store?" );
-/*?*/ 		    aText = ByteString( pC->GetText(), RTL_TEXTENCODING_SYMBOL );
-/*?*/             bSymbolPara = TRUE;
-/*N*/         }
-/*N*/         else if ( pC->GetParaAttribs().GetItemState( EE_CHAR_FONTINFO ) == SFX_ITEM_ON )
-/*N*/         {
-/*N*/             const SvxFontItem& rFontItem = (const SvxFontItem&)pC->GetParaAttribs().Get( EE_CHAR_FONTINFO );
-/*N*/             if ( rFontItem.GetCharSet() == RTL_TEXTENCODING_SYMBOL )
-/*N*/             {
-/*?*/ 		        aText = ByteString( pC->GetText(), RTL_TEXTENCODING_SYMBOL );
-/*?*/                 bSymbolPara = TRUE;
-/*N*/             }
-/*N*/         }
-/*N*/ 		for ( USHORT nA = 0; nA < pC->GetAttribs().Count(); nA++ )
-/*N*/ 		{
-/*N*/ 			XEditAttribute* pAttr = pC->GetAttribs().GetObject( nA );
-/*N*/ 
-/*N*/ 			if ( pAttr->GetItem()->Which() == EE_CHAR_FONTINFO )
-/*N*/ 			{
-/*N*/                 const SvxFontItem& rFontItem = (const SvxFontItem&)*pAttr->GetItem();
-/*N*/                 if ( ( !bSymbolPara && ( rFontItem.GetCharSet() == RTL_TEXTENCODING_SYMBOL ) )
-/*N*/                       || ( bSymbolPara && ( rFontItem.GetCharSet() != RTL_TEXTENCODING_SYMBOL ) ) )
-/*N*/                 {
-/*N*/                     // Not correctly converted
-/*N*/                     String aPart( pC->GetText(), pAttr->GetStart(), pAttr->GetEnd() - pAttr->GetStart() );
-/*N*/                     ByteString aNew( aPart, rFontItem.GetCharSet() );
-/*N*/                     aText.Erase( pAttr->GetStart(), pAttr->GetEnd() - pAttr->GetStart() );
-/*N*/                     aText.Insert( aNew, pAttr->GetStart() );
-/*N*/                 }
-/*N*/ 
-/*N*/                 // #88414# Convert StarSymbol back to StarBats
-/*N*/                 FontToSubsFontConverter hConv = CreateFontToSubsFontConverter( rFontItem.GetFamilyName(), FONTTOSUBSFONT_EXPORT | FONTTOSUBSFONT_ONLYOLDSOSYMBOLFONTS );
-/*N*/                 if ( hConv )
-/*N*/                 {
-/*N*/                     // Don't create a new Attrib with StarBats font, MBR changed the
-/*N*/                     // SvxFontItem::Store() to store StarBats instead of StarSymbol!
-/*N*/                     for ( USHORT nChar = pAttr->GetStart(); nChar < pAttr->GetEnd(); nChar++ )
-/*N*/                     {
-/*N*/                         sal_Unicode cOld = pC->GetText().GetChar( nChar );
-/*N*/                         char cConv = ByteString::ConvertFromUnicode( ConvertFontToSubsFontChar( hConv, cOld ), RTL_TEXTENCODING_SYMBOL );
-/*N*/                         if ( cConv )
-/*N*/                             aText.SetChar( nChar, cConv );
-/*N*/                     }
-/*N*/ 
-/*N*/                     DestroyFontToSubsFontConverter( hConv );
-/*N*/                 }
-/*N*/ 			}
-/*N*/ 		}
-/*N*/ 
-/*N*/         // #88414# Convert StarSymbol back to StarBats
-/*N*/         // StarSymbol as paragraph attribute or in StyleSheet?
-/*N*/ 
-/*N*/         FontToSubsFontConverter hConv = NULL;
-/*N*/         if ( pC->GetParaAttribs().GetItemState( EE_CHAR_FONTINFO ) == SFX_ITEM_ON )
-/*N*/         {
-/*N*/             hConv = CreateFontToSubsFontConverter( ((const SvxFontItem&)pC->GetParaAttribs().Get( EE_CHAR_FONTINFO )).GetFamilyName(), FONTTOSUBSFONT_EXPORT | FONTTOSUBSFONT_ONLYOLDSOSYMBOLFONTS );
-/*N*/         }
-/*N*/         else if ( pC->GetStyle().Len() && pC->GetLoadStoreTempInfos() )
-/*N*/         {
-/*?*/             hConv = pC->GetLoadStoreTempInfos()->hOldSymbolConv_Store;
-/*N*/         }
-/*N*/ 
-/*N*/         if ( hConv )
-/*N*/         {
-/*?*/             for ( USHORT nChar = 0; nChar < pC->GetText().Len(); nChar++ )
-/*?*/             {
-/*?*/                 if ( !pC->GetAttribs().FindAttrib( EE_CHAR_FONTINFO, nChar ) )
-/*?*/                 {
-/*?*/                     sal_Unicode cOld = pC->GetText().GetChar( nChar );
-/*?*/                     char cConv = ByteString::ConvertFromUnicode( ConvertFontToSubsFontChar( hConv, cOld ), RTL_TEXTENCODING_SYMBOL );
-/*?*/                     if ( cConv )
-/*?*/                         aText.SetChar( nChar, cConv );
-/*?*/                 }
-/*?*/             }
-/*?*/ 
-/*?*/             DestroyFontToSubsFontConverter( hConv );
-/*?*/ 
-/*?*/             if ( pC->GetLoadStoreTempInfos() )
-/*?*/                 pC->GetLoadStoreTempInfos()->hOldSymbolConv_Store = NULL;
-/*N*/         }
-/*N*/ 
-/*N*/ 
-/*N*/ 		// Convert CH_FEATURE to CH_FEATURE_OLD
-/*N*/ 		aText.SearchAndReplaceAll( cFeatureConverted, CH_FEATURE_OLD );
-/*N*/ 		rOStream.WriteByteString( aText );
-/*N*/ 
-/*N*/ 		// StyleName und Family...
-/*N*/ 		rOStream.WriteByteString( ByteString( pC->GetStyle(), eEncoding ) );
-/*N*/ 		rOStream << (USHORT)pC->GetFamily();
-/*N*/ 
-/*N*/ 		// Absatzattribute...
-/*N*/ 		pC->GetParaAttribs().Store( rOStream );
-/*N*/ 
-/*N*/ 		// Die Anzahl der Attribute...
-/*N*/ 		USHORT nAttribs = pC->GetAttribs().Count();
-/*N*/ 		rOStream << nAttribs;
-/*N*/ 
-/*N*/ 		// Und die einzelnen Attribute
-/*N*/ 		// Items als Surregate => immer 8 Byte pro Attrib
-/*N*/ 		// Which = 2; Surregat = 2; Start = 2; End = 2;
-/*N*/ 		for ( USHORT nAttr = 0; nAttr < nAttribs; nAttr++ )
-/*N*/ 		{
-/*N*/ 			XEditAttribute* pX = pC->GetAttribs().GetObject( nAttr );
-/*N*/ 
-/*N*/ 			rOStream << pX->GetItem()->Which();
-/*N*/ 			GetPool()->StoreSurrogate( rOStream, pX->GetItem() );
-/*N*/ 			rOStream << pX->GetStart();
-/*N*/ 			rOStream << pX->GetEnd();
-/*N*/ 		}
-/*N*/ 	}
-/*N*/ 
-/*N*/ 	// Ab 400:
-/*N*/ 	rOStream << nMetric;
-/*N*/ 
-/*N*/ 	// Ab 600
-/*N*/ 	rOStream << nUserType;
-/*N*/ 	rOStream << nObjSettings;
-/*N*/ 
-/*N*/ 	// Ab 601
-/*N*/ 	rOStream << bVertical;
-/*N*/ 
-/*N*/ 	// Ab 602
-/*N*/ 	rOStream << nScriptType;
-/*N*/ 
-/*N*/ 	rOStream << bStoreUnicodeStrings;
-/*N*/ 	if ( bStoreUnicodeStrings )
-/*N*/ 	{
-/*?*/ 		for ( USHORT nPara = 0; nPara < nParagraphs; nPara++ )
-/*?*/ 		{
-/*?*/ 			ContentInfo* pC = GetContents().GetObject( nPara );
-/*?*/ 			USHORT nL = pC->GetText().Len();
-/*?*/ 			rOStream << nL;
-/*?*/ 			rOStream.Write( pC->GetText().GetBuffer(), nL*sizeof(sal_Unicode) );
-/*?*/ 
-/*?*/             // #91575# StyleSheetName must be Unicode too!
-/*?*/             // Copy/Paste from EA3 to BETA or from BETA to EA3 not possible, not needed...
-/*?*/             // If needed, change nL back to ULONG and increase version...
-/*?*/             nL = pC->GetStyle().Len();
-/*?*/ 			rOStream << nL;
-/*?*/ 			rOStream.Write( pC->GetStyle().GetBuffer(), nL*sizeof(sal_Unicode) );
-/*?*/ 		}
-/*N*/ 	}
-/*N*/ }
-
-/*N*/ void BinTextObject::CreateData( SvStream& rIStream )
-/*N*/ {
-/*N*/ 	rIStream >> nVersion;
-/*N*/ 
-/*N*/ 	// Das Textobject wurde erstmal mit der aktuellen Einstellung
-/*N*/ 	// von pTextObjectPool erzeugt.
-/*N*/ 	BOOL bOwnerOfCurrent = bOwnerOfPool;
-/*N*/ 	rIStream >> bOwnerOfPool;
-/*N*/ 
-/*N*/ 	if ( bOwnerOfCurrent && !bOwnerOfPool )
-/*N*/ 	{
-/*N*/ 		// Es wurde ein globaler Pool verwendet, mir jetzt nicht uebergeben,
-/*N*/ 		// aber ich brauche ihn!
-/*?*/ 		DBG_ERROR( "Man gebe mir den globalen TextObjectPool!" );
-/*?*/ 		return;
-/*N*/ 	}
-/*N*/ 	else if ( !bOwnerOfCurrent && bOwnerOfPool )
-/*N*/ 	{
-/*N*/ 		// Es soll ein globaler Pool verwendet werden, aber dieses
-/*N*/ 		// Textobject hat einen eigenen.
-/*N*/ 		pPool =	EditEngine::CreatePool();
-/*N*/ 	}
-/*N*/ 
-/*N*/ 	if ( bOwnerOfPool )
-/*N*/ 		GetPool()->Load( rIStream );
-/*N*/ 
-/*N*/ 	// CharSet, in dem gespeichert wurde:
-/*N*/ 	USHORT nCharSet;
-/*N*/ 	rIStream >> nCharSet;
-/*N*/ 
-/*N*/ 	rtl_TextEncoding eSrcEncoding = GetSOLoadTextEncoding( (rtl_TextEncoding)nCharSet, (USHORT)rIStream.GetVersion() );
-/*N*/ 
-/*N*/ 	// Die Anzahl der Absaetze...
-/*N*/ 	USHORT nParagraphs;
-/*N*/ 	rIStream >> nParagraphs;
-/*N*/ 
-/*N*/ 	// Die einzelnen Absaetze...
-/*N*/ 	for ( ULONG nPara = 0; nPara < nParagraphs; nPara++ )
-/*N*/ 	{
-/*N*/ 		ContentInfo* pC = CreateAndInsertContent();
-/*N*/ 
-/*N*/ 		// Der Text...
-/*N*/ 		ByteString aByteString;
-/*N*/ 		rIStream.ReadByteString( aByteString );
-/*N*/ 		pC->GetText() = String( aByteString, eSrcEncoding );
-/*N*/ 
-/*N*/ 		// StyleName und Family...
-/*N*/ 		rIStream.ReadByteString( pC->GetStyle(), eSrcEncoding );
-/*N*/ 		USHORT nStyleFamily;
-/*N*/ 		rIStream >> nStyleFamily;
-/*N*/ 		pC->GetFamily() = (SfxStyleFamily)nStyleFamily;
-/*N*/ 
-/*N*/ 		// Absatzattribute...
-/*N*/ 		pC->GetParaAttribs().Load( rIStream );
-/*N*/ 
-/*N*/ 		// Die Anzahl der Attribute...
-/*N*/ 		USHORT nAttribs;
-/*N*/ 		rIStream >> nAttribs;
-/*N*/ 
-/*N*/ 		// Und die einzelnen Attribute
-/*N*/ 		// Items als Surregate => immer 8 Byte pro Attrib
-/*N*/ 		// Which = 2; Surregat = 2; Start = 2; End = 2;
-/*N*/         USHORT nAttr;
-/*N*/ 		for ( nAttr = 0; nAttr < nAttribs; nAttr++ )
-/*N*/ 		{
-/*N*/ 			USHORT nLclWhich, nStart, nEnd;
-/*N*/ 			const SfxPoolItem* pItem;
-/*N*/ 
-/*N*/ 			rIStream >> nLclWhich;
-/*N*/ 			nLclWhich = pPool->GetNewWhich( nLclWhich );
-/*N*/ 			pItem = pPool->LoadSurrogate( rIStream, nLclWhich, 0 );
-/*N*/ 			rIStream >> nStart;
-/*N*/ 			rIStream >> nEnd;
-/*N*/ 			if ( pItem )
-/*N*/ 			{
-/*N*/ 				if ( pItem->Which() == EE_FEATURE_NOTCONV )
-/*N*/ 				{
-/*?*/ 					pC->GetText().SetChar( nStart, ByteString::ConvertToUnicode( aByteString.GetChar( nStart ), ((SvxCharSetColorItem*)pItem)->GetCharSet() ) );
-/*N*/ 				}
-/*N*/ 				else
-/*N*/ 				{
-/*N*/ 					XEditAttribute* pAttr = new XEditAttribute( *pItem, nStart, nEnd );
-/*N*/ 					pC->GetAttribs().Insert( pAttr, pC->GetAttribs().Count() );
-/*N*/ 
-/*N*/ 					if ( ( nLclWhich >= EE_FEATURE_START ) && ( nLclWhich <= EE_FEATURE_END ) )
-/*N*/ 					{
-/*N*/ 						// Convert CH_FEATURE to CH_FEATURE_OLD
-/*N*/ 						DBG_ASSERT( (BYTE) aByteString.GetChar( nStart ) == CH_FEATURE_OLD, "CreateData: CH_FEATURE expected!" );
-/*N*/ 						if ( (BYTE) aByteString.GetChar( nStart ) == CH_FEATURE_OLD )
-/*N*/ 							pC->GetText().SetChar( nStart, CH_FEATURE );
-/*N*/ 					}
-/*N*/ 				}
-/*N*/ 			}
-/*N*/ 		}
-/*N*/ 
-/*N*/         // Symbol-Conversion neccessary?
-/*N*/         // All Strings are converted with the SourceCharSet in CreateData()...
-/*N*/ 
-/*N*/         // Keep old ByteString, maybe Symbol-Conversion neccessary, will be
-/*N*/         // checked in FinishLoad(), I need the StyleSheetPool for this...
-/*N*/         if ( pC->GetStyle().Len() && ( pC->GetParaAttribs().GetItemState( EE_CHAR_FONTINFO ) != SFX_ITEM_ON ) )
-/*N*/         {
-/*N*/             pC->CreateLoadStoreTempInfos();
-/*N*/             pC->GetLoadStoreTempInfos()->aOrgString_Load = aByteString;
-/*N*/         }
-/*N*/ 
-/*N*/         // But check for paragraph and character symbol attribs here,
-/*N*/         // FinishLoad will not be called in OpenOffice Calc, no StyleSheets...
-/*N*/ 
-/*N*/         BOOL bSymbolPara = FALSE;
-/*N*/         if ( pC->GetParaAttribs().GetItemState( EE_CHAR_FONTINFO ) == SFX_ITEM_ON )
-/*N*/         {
-/*N*/             const SvxFontItem& rFontItem = (const SvxFontItem&)pC->GetParaAttribs().Get( EE_CHAR_FONTINFO );
-/*N*/             if ( rFontItem.GetCharSet() == RTL_TEXTENCODING_SYMBOL )
-/*N*/             {
-/*N*/ 		        pC->GetText() = String( aByteString, RTL_TEXTENCODING_SYMBOL );
-/*N*/                 bSymbolPara = TRUE;
-/*N*/             }
-/*N*/         }
-/*N*/ 
-/*N*/ 		for ( nAttr = pC->GetAttribs().Count(); nAttr; )
-/*N*/ 		{
-/*N*/ 			XEditAttribute* pAttr = pC->GetAttribs().GetObject( --nAttr );
-/*N*/             if ( pAttr->GetItem()->Which() == EE_CHAR_FONTINFO )
-/*N*/             {
-/*N*/                 const SvxFontItem& rFontItem = (const SvxFontItem&)*pAttr->GetItem();
-/*N*/                 if ( ( !bSymbolPara && ( rFontItem.GetCharSet() == RTL_TEXTENCODING_SYMBOL ) )
-/*N*/                       || ( bSymbolPara && ( rFontItem.GetCharSet() != RTL_TEXTENCODING_SYMBOL ) ) )
-/*N*/                 {
-/*N*/                     // Not correctly converted
-/*N*/                     ByteString aPart( aByteString, pAttr->GetStart(), pAttr->GetEnd()-pAttr->GetStart() );
-/*N*/                     String aNew( aPart, rFontItem.GetCharSet() );
-/*N*/                     pC->GetText().Erase( pAttr->GetStart(), pAttr->GetEnd()-pAttr->GetStart() );
-/*N*/                     pC->GetText().Insert( aNew, pAttr->GetStart() );
-/*N*/                 }
-/*N*/ 
-/*N*/                 // #88414# Convert StarMath and StarBats to StarSymbol
-/*N*/                 FontToSubsFontConverter hConv = CreateFontToSubsFontConverter( rFontItem.GetFamilyName(), FONTTOSUBSFONT_IMPORT | FONTTOSUBSFONT_ONLYOLDSOSYMBOLFONTS );
-/*N*/                 if ( hConv )
-/*N*/                 {
-/*N*/                     SvxFontItem aNewFontItem( rFontItem );
-/*N*/ 		            aNewFontItem.GetFamilyName() = GetFontToSubsFontName( hConv );
-/*N*/ 
-/*N*/                     pC->GetAttribs().Remove( nAttr );
-/*N*/                     XEditAttribute* pNewAttr = CreateAttrib( aNewFontItem, pAttr->GetStart(), pAttr->GetEnd() );
-/*N*/                     pC->GetAttribs().Insert( pNewAttr, nAttr );
-/*N*/                     DestroyAttrib( pAttr );
-/*N*/ 
-/*N*/                     for ( USHORT nChar = pNewAttr->GetStart(); nChar < pNewAttr->GetEnd(); nChar++ )
-/*N*/                     {
-/*N*/                         sal_Unicode cOld = pC->GetText().GetChar( nChar );
-/*N*/                         DBG_ASSERT( cOld >= 0xF000, "cOld not converted?!" );
-/*N*/                         sal_Unicode cConv = ConvertFontToSubsFontChar( hConv, cOld );
-/*N*/                         if ( cConv )
-/*N*/                             pC->GetText().SetChar( nChar, cConv );
-/*N*/                     }
-/*N*/ 
-/*N*/                     DestroyFontToSubsFontConverter( hConv );
-/*N*/                 }
-/*N*/             }
-/*N*/         }
-/*N*/ 
-/*N*/ 
-/*N*/         // #88414# Convert StarMath and StarBats to StarSymbol
-/*N*/         // Maybe old symbol font as paragraph attribute?
-/*N*/         if ( pC->GetParaAttribs().GetItemState( EE_CHAR_FONTINFO ) == SFX_ITEM_ON )
-/*N*/         {
-/*N*/             const SvxFontItem& rFontItem = (const SvxFontItem&)pC->GetParaAttribs().Get( EE_CHAR_FONTINFO );
-/*N*/             FontToSubsFontConverter hConv = CreateFontToSubsFontConverter( rFontItem.GetFamilyName(), FONTTOSUBSFONT_IMPORT | FONTTOSUBSFONT_ONLYOLDSOSYMBOLFONTS );
-/*N*/             if ( hConv )
-/*N*/             {
-/*N*/                 SvxFontItem aNewFontItem( rFontItem );
-/*N*/ 		        aNewFontItem.GetFamilyName() = GetFontToSubsFontName( hConv );
-/*N*/                 pC->GetParaAttribs().Put( aNewFontItem );
-/*N*/ 
-/*N*/                 for ( USHORT nChar = 0; nChar < pC->GetText().Len(); nChar++ )
-/*N*/                 {
-/*N*/                     if ( !pC->GetAttribs().FindAttrib( EE_CHAR_FONTINFO, nChar ) )
-/*N*/                     {
-/*N*/                         sal_Unicode cOld = pC->GetText().GetChar( nChar );
-/*N*/                         DBG_ASSERT( cOld >= 0xF000, "cOld not converted?!" );
-/*N*/                         sal_Unicode cConv = ConvertFontToSubsFontChar( hConv, cOld );
-/*N*/                         if ( cConv )
-/*N*/                             pC->GetText().SetChar( nChar, cConv );
-/*N*/                     }
-/*N*/                 }
-/*N*/ 
-/*N*/                 DestroyFontToSubsFontConverter( hConv );
-/*N*/             }
-/*N*/         }
-/*N*/     }
-/*N*/ 
-/*N*/ 	// Ab 400 auch die DefMetric:
-/*N*/ 	if ( nVersion >= 400 )
-/*N*/ 	{
-/*N*/ 		USHORT nTmpMetric;
-/*N*/ 		rIStream >> nTmpMetric;
-/*N*/ 		if ( nVersion >= 401 )
-/*N*/ 		{
-/*N*/ 			// In der 400 gab es noch einen Bug bei Textobjekten mit eigenem
-/*N*/ 			// Pool, deshalb erst ab 401 auswerten.
-/*N*/ 			nMetric = nTmpMetric;
-/*N*/ 			if ( bOwnerOfPool && pPool && ( nMetric != 0xFFFF ) )
-/*N*/ 				pPool->SetDefaultMetric( (SfxMapUnit)nMetric );
-/*N*/ 		}
-/*N*/ 	}
-/*N*/ 
-/*N*/ 	if ( nVersion >= 600 )
-/*N*/ 	{
-/*N*/ 		rIStream >> nUserType;
-/*N*/ 		rIStream >> nObjSettings;
-/*N*/ 	}
-/*N*/ 
-/*N*/ 	if ( nVersion >= 601 )
-/*N*/ 	{
-/*N*/ 		rIStream >> bVertical;
-/*N*/ 	}
-/*N*/ 
-/*N*/ 	if ( nVersion >= 602 )
-/*N*/ 	{
-/*N*/ 		rIStream >> nScriptType;
-/*N*/ 
-/*N*/ 		BOOL bUnicodeStrings;
-/*N*/ 		rIStream >> bUnicodeStrings;
-/*N*/ 		if ( bUnicodeStrings )
-/*N*/ 		{
-/*?*/ 			for ( USHORT nPara = 0; nPara < nParagraphs; nPara++ )
-/*?*/ 			{
-/*?*/ 				ContentInfo* pC = GetContents().GetObject( nPara );
-/*?*/ 				USHORT nL;
-/*?*/ 
-/*?*/                 // Text
-/*?*/ 				rIStream >> nL;
-/*?*/                 if ( nL )
-/*?*/                 {
-/*?*/ 				    pC->GetText().AllocBuffer( nL );
-/*?*/ 				    rIStream.Read( pC->GetText().GetBufferAccess(), nL*sizeof(sal_Unicode) );
-/*?*/ 				    pC->GetText().ReleaseBufferAccess( (USHORT)nL );
-/*?*/                 }
-/*?*/ 
-/*?*/                 // StyleSheetName
-/*?*/                 rIStream >> nL;
-/*?*/                 if ( nL )
-/*?*/                 {
-/*?*/ 				    pC->GetStyle().AllocBuffer( nL );
-/*?*/ 				    rIStream.Read( pC->GetStyle().GetBufferAccess(), nL*sizeof(sal_Unicode) );
-/*?*/ 				    pC->GetStyle().ReleaseBufferAccess( (USHORT)nL );
-/*?*/                 }
-/*?*/ 			}
-/*N*/ 		}
-/*N*/ 	}
-/*N*/ 
-/*N*/ 
-/*N*/ 	// Ab 500 werden die Tabs anders interpretiert: TabPos + LI, vorher nur TabPos.
-/*N*/ 	// Wirkt nur wenn auch Tab-Positionen eingestellt wurden, nicht beim DefTab.
-/*N*/ 	if ( nVersion < 500 )
-/*N*/ 	{
-/*N*/ 		for ( USHORT n = 0; n < aContents.Count(); n++ )
-/*N*/ 		{
-/*N*/ 			ContentInfo* pC = aContents.GetObject( n );
-/*N*/ 			const SvxLRSpaceItem& rLRSpace = (const SvxLRSpaceItem&) pC->GetParaAttribs().Get( EE_PARA_LRSPACE );
-/*N*/ 			if ( rLRSpace.GetTxtLeft() && ( pC->GetParaAttribs().GetItemState( EE_PARA_TABS ) == SFX_ITEM_ON ) )
-/*N*/ 			{
-/*N*/ 				const SvxTabStopItem& rTabs = (const SvxTabStopItem&) pC->GetParaAttribs().Get( EE_PARA_TABS );
-/*N*/ 				SvxTabStopItem aNewTabs( 0, 0, SVX_TAB_ADJUST_LEFT, EE_PARA_TABS );
-/*N*/ 				for ( USHORT t = 0; t < rTabs.Count(); t++ )
-/*N*/ 				{
-/*N*/ 					const SvxTabStop& rT = rTabs[ t ];
-/*N*/ 					aNewTabs.Insert( SvxTabStop( rT.GetTabPos() - rLRSpace.GetTxtLeft(),
-/*N*/ 								rT.GetAdjustment(), rT.GetDecimal(), rT.GetFill() ) );
-/*N*/ 				}
-/*N*/ 				pC->GetParaAttribs().Put( aNewTabs );
-/*N*/ 			}
-/*N*/ 		}
-/*N*/ 	}
-/*N*/ }
-
-/*N*/ USHORT BinTextObject::GetVersion() const
-/*N*/ {
-/*N*/ 	return nVersion;
-/*N*/ }
-
-
-/*N*/ void BinTextObject::PrepareStore( SfxStyleSheetPool* pStyleSheetPool )
-/*N*/ {
-/*N*/ 	// Some Items must be generated for the 5.0 file format,
-/*N*/ 	// because we don't have a special format for 5.x or 6.x
-/*N*/ 	USHORT nParas = GetContents().Count();
-/*N*/ 	const SvxNumBulletItem** ppNumBulletItems = new const SvxNumBulletItem*[nParas];
-/*N*/ 	for ( USHORT nPara = nParas; nPara; )
-/*N*/ 	{
-/*N*/ 		ContentInfo* pC = GetContents().GetObject( --nPara );
-/*N*/ 		const SvxNumBulletItem* pSvxNumBulletItem = NULL;
-/*N*/ 		const SfxPoolItem* pTmpItem = NULL;
-/*N*/ 		if ( pC->GetParaAttribs().GetItemState(EE_PARA_NUMBULLET, FALSE, &pTmpItem ) == SFX_ITEM_ON )
-/*N*/ 		{
-/*N*/ 			pSvxNumBulletItem = (const SvxNumBulletItem*)pTmpItem;
-/*N*/ 		}
-/*N*/ 		else if ( pStyleSheetPool && pC->GetStyle().Len() )
-/*N*/ 		{
-/*N*/ 			SfxStyleSheet* pStyle = (SfxStyleSheet*)pStyleSheetPool->Find( pC->GetStyle(), pC->GetFamily() );
-/*N*/ 			if ( pStyle )
-/*N*/ 				pSvxNumBulletItem = &(const SvxNumBulletItem&)pStyle->GetItemSet().Get(EE_PARA_NUMBULLET);
-/*N*/ 		}
-/*N*/ 
-/*N*/ 		ppNumBulletItems[nPara] = pSvxNumBulletItem;
-/*N*/ 
-/*N*/ 		if ( pSvxNumBulletItem )
-/*N*/ 		{
-/*N*/ 			// Check if Item allready used, don't create a new one in this case.
-/*N*/ 			BOOL bInserted = FALSE;
-/*N*/ 			for ( USHORT nP = nPara+1; nP < nParas; nP++ )
-/*N*/ 			{
-/*N*/ 				if ( ppNumBulletItems[nP] == pSvxNumBulletItem )
-/*N*/ 				{
-/*N*/ 					ContentInfo* pTmpC = GetContents().GetObject( nP );
-/*N*/ 					pC->GetParaAttribs().Put( pTmpC->GetParaAttribs().Get( EE_PARA_BULLET ) );
-/*N*/ 					bInserted = TRUE;
-/*N*/ 					break;
-/*N*/ 				}
-/*N*/ 			}
-/*N*/ 			if ( !bInserted )
-/*N*/ 			{
-/*N*/ 				SvxBulletItem aNewBullet( EE_PARA_BULLET );
-/*N*/ 				const SfxUInt16Item& rLevel = (const SfxUInt16Item&) pC->GetParaAttribs().Get( EE_PARA_OUTLLEVEL );
-/*N*/ 				lcl_CreateBulletItem( *pSvxNumBulletItem, rLevel.GetValue(), aNewBullet );
-/*N*/ 				pC->GetParaAttribs().Put( aNewBullet );
-/*N*/ 			}
-/*N*/ 		}
-/*N*/ 
-/*N*/         // SymbolConvertion because of StyleSheet?
-/*N*/         // Cannot be checked in StoreData, no StyleSheetPool, so do it here...
-/*N*/ 
-/*N*/         pC->DestroyLoadStoreTempInfos();    // Maybe old infos, if somebody is not calling FinishLoad after CreateData, but PrepareStore...
-/*N*/ 
-/*N*/         if ( ( pC->GetParaAttribs().GetItemState( EE_CHAR_FONTINFO ) != SFX_ITEM_ON ) && pC->aStyle.Len() && pStyleSheetPool )
-/*N*/         {
-/*N*/             SfxStyleSheet* pStyle = (SfxStyleSheet*)pStyleSheetPool->Find( pC->GetStyle(), pC->GetFamily() );
-/*N*/             if ( pStyle )
-/*N*/             {
-/*N*/                 const SvxFontItem& rFontItem = (const SvxFontItem&)pStyle->GetItemSet().Get( EE_CHAR_FONTINFO );
-/*N*/                 if ( rFontItem.GetCharSet() == RTL_TEXTENCODING_SYMBOL )
-/*N*/                 {
-/*?*/                     if ( !pC->GetLoadStoreTempInfos() )
-/*?*/                         pC->CreateLoadStoreTempInfos();
-/*?*/                     pC->GetLoadStoreTempInfos()->bSymbolParagraph_Store = TRUE;
-/*N*/                 }
-/*N*/ 
-/*N*/                 FontToSubsFontConverter hConv = CreateFontToSubsFontConverter( rFontItem.GetFamilyName(), FONTTOSUBSFONT_EXPORT | FONTTOSUBSFONT_ONLYOLDSOSYMBOLFONTS );
-/*N*/                 if ( hConv )
-/*N*/                 {
-/*?*/                     // #88414# Convert StarSymbol back to StarBats
-/*?*/                     if ( !pC->GetLoadStoreTempInfos() )
-/*?*/                         pC->CreateLoadStoreTempInfos();
-/*?*/                     pC->GetLoadStoreTempInfos()->hOldSymbolConv_Store = hConv;
-/*N*/                 }
-/*N*/             }
-/*N*/         }
-/*N*/  	}
-/*N*/ 
-/*N*/     delete[] ppNumBulletItems;
-/*N*/ }
-
-/*N*/ void BinTextObject::FinishStore()
-/*N*/ {
-/*N*/ 	for ( USHORT nPara = GetContents().Count(); nPara; )
-/*N*/ 	{
-/*N*/ 		ContentInfo* pC = GetContents().GetObject( --nPara );
-/*N*/ 		pC->GetParaAttribs().ClearItem( EE_PARA_BULLET );
-/*N*/ 
-/*N*/         pC->DestroyLoadStoreTempInfos();
-/*N*/ 	}
-/*N*/ }
-
-/*N*/ void BinTextObject::FinishLoad( SfxStyleSheetPool* pStyleSheetPool )
-/*N*/ {
-/*N*/ 	BOOL bCreateNumBulletItem = nVersion && ( nVersion < 501 );
-/*N*/ 	for ( USHORT nPara = GetContents().Count(); nPara; )
-/*N*/ 	{
-/*N*/ 		ContentInfo* pC = GetContents().GetObject( --nPara );
-/*N*/ 
-/*N*/ 		if( GetUserType() == 0x0003 ) // !! OUTLINERMODE_OUTLINEOBJECT !!
-/*N*/ 		{
-/*N*/ 			if ( pC->GetParaAttribs().GetItemState( EE_PARA_NUMBULLET ) == SFX_ITEM_ON )
-/*N*/ 			{
-/*?*/ 				SvxNumBulletItem* pNumBullet = (SvxNumBulletItem*) &pC->GetParaAttribs().Get( EE_PARA_NUMBULLET );
-/*?*/ 				if( pNumBullet->GetNumRule()->GetNumRuleType() != SVX_RULETYPE_PRESENTATION_NUMBERING )
-/*?*/ 				{
-/*?*/ 					pNumBullet->GetNumRule()->SetNumRuleType( SVX_RULETYPE_PRESENTATION_NUMBERING );
-/*?*/ 					pC->GetParaAttribs().Put( *pNumBullet, EE_PARA_NUMBULLET );
-/*?*/ 				}
-/*N*/ 			}
-/*N*/ 		}
-/*N*/ 
-/*N*/ 		if ( bCreateNumBulletItem )
-/*N*/ 		{
-/*N*/ 			BOOL bBulletInPara = pC->GetParaAttribs().GetItemState( EE_PARA_BULLET ) == SFX_ITEM_ON;
-/*N*/ 			BOOL bLRSpaceInPara = pC->GetParaAttribs().GetItemState( EE_PARA_LRSPACE ) == SFX_ITEM_ON;
-/*N*/ 
-/*N*/ 			// Nur wenn ein Attribut hart gesetzt, ansonsten muss es in den Vorlagen
-/*N*/ 			// richtig konvertiert sein.
-/*N*/ 
-/*N*/ 			if ( bBulletInPara || bLRSpaceInPara )
-/*N*/ 			{
-/*N*/ 				const SvxBulletItem* pBullet = NULL;
-/*N*/ 				const SvxLRSpaceItem* pLRSpace = NULL;
-/*N*/ 				SvxNumBulletItem* pNumBullet = NULL;
-/*N*/ 				SfxStyleSheet* pStyle = NULL;
-/*N*/ 
-/*N*/ 				if ( pC->GetStyle().Len() )
-/*N*/ 					pStyle = (SfxStyleSheet*)pStyleSheetPool->Find( pC->GetStyle(), pC->GetFamily() );
-/*N*/ 
-/*N*/ 				const SfxUInt16Item& rLevel = (const SfxUInt16Item&) pC->GetParaAttribs().Get( EE_PARA_OUTLLEVEL );
-/*N*/ 				USHORT nLevel = rLevel.GetValue();
-/*N*/ 
-/*N*/ 				if ( !pStyle || bBulletInPara )
-/*N*/ 					pBullet = (const SvxBulletItem*) &pC->GetParaAttribs().Get( EE_PARA_BULLET );
-/*N*/ 				else
-/*N*/ 					pBullet = (const SvxBulletItem*) &pStyle->GetItemSet().Get( EE_PARA_BULLET );
-/*N*/ 
-/*N*/ 				if ( !pStyle || bLRSpaceInPara )
-/*N*/ 					pLRSpace = (const SvxLRSpaceItem*) &pC->GetParaAttribs().Get( EE_PARA_LRSPACE );
-/*N*/ 				else
-/*?*/ 					pLRSpace = (const SvxLRSpaceItem*) &pStyle->GetItemSet().Get( EE_PARA_LRSPACE );
-/*N*/ 
-/*N*/ 				if ( !pStyle || ( pC->GetParaAttribs().GetItemState( EE_PARA_NUMBULLET ) == SFX_ITEM_ON ) )
-/*?*/ 					pNumBullet = (SvxNumBulletItem*) &pC->GetParaAttribs().Get( EE_PARA_NUMBULLET );
-/*N*/ 				else
-/*N*/ 					pNumBullet = (SvxNumBulletItem*) &pStyle->GetItemSet().Get( EE_PARA_NUMBULLET );
-/*N*/ 
-/*N*/ 				SvxNumBulletItem aNumBullet( *pNumBullet );
-/*N*/ 				EditEngine::ImportBulletItem( aNumBullet, nLevel, pBullet, pLRSpace );
-/*N*/ 				pC->GetParaAttribs().Put( aNumBullet );
-/*N*/ 
-/*N*/ 				if ( bLRSpaceInPara )
-/*N*/ 					pC->GetParaAttribs().ClearItem( EE_PARA_LRSPACE );
-/*N*/ 			}
-/*N*/ 		}
-/*N*/ 
-/*N*/         // Symbol-Convertion because of StyleSheet?
-/*N*/         if ( pStyleSheetPool && pC->GetLoadStoreTempInfos() && pC->GetLoadStoreTempInfos()->aOrgString_Load.Len() )
-/*N*/         {
-/*N*/             SfxStyleSheet* pStyle = (SfxStyleSheet*)pStyleSheetPool->Find( pC->GetStyle(), pC->GetFamily() );
-/*N*/             if ( pStyle )
-/*N*/             {
-/*N*/                 const SvxFontItem& rFontItem = (const SvxFontItem&)pStyle->GetItemSet().Get( EE_CHAR_FONTINFO );
-/*N*/                 if ( rFontItem.GetCharSet() == RTL_TEXTENCODING_SYMBOL )
-/*N*/                 {
-/*?*/                     String aConverted( pC->GetLoadStoreTempInfos()->aOrgString_Load, RTL_TEXTENCODING_SYMBOL );
-/*?*/ 
-/*?*/                     // Replace only Parts without hard font attribute, other symbol encoding
-/*?*/                     // is already done in CreateData()...
-/*?*/ 
-/*?*/                     USHORT nLastEnd = 0;
-/*?*/                     for ( USHORT nAttr = 0; nAttr < pC->GetAttribs().Count(); nAttr++ )
-/*?*/ 		            {
-/*?*/ 			            XEditAttribute* pAttr = pC->GetAttribs().GetObject( nAttr );
-/*?*/                         if ( pAttr->GetItem()->Which() == EE_CHAR_FONTINFO )
-/*?*/                         {
-/*?*/                             if ( nLastEnd < pAttr->GetStart() )
-/*?*/                             {
-/*?*/                                 USHORT nLen = pAttr->GetStart() - nLastEnd;
-/*?*/                                 pC->GetText().Erase( nLastEnd, nLen );
-/*?*/                                 pC->GetText().Insert( aConverted, nLastEnd, nLen, nLastEnd );
-/*?*/                             }
-/*?*/                             nLastEnd = pAttr->GetEnd();
-/*?*/ 
-/*?*/                         }
-/*?*/                     }
-/*?*/                     if ( nLastEnd < pC->GetText().Len() )
-/*?*/                     {
-/*?*/                         USHORT nLen = pC->GetText().Len() - nLastEnd;
-/*?*/                         pC->GetText().Erase( nLastEnd, nLen );
-/*?*/                         pC->GetText().Insert( aConverted, nLastEnd, nLen, nLastEnd );
-/*?*/                     }
-/*N*/                 }
-/*N*/             }
-/*N*/         }
-/*N*/ 
-/*N*/         pC->DestroyLoadStoreTempInfos();
-/*N*/ 
-/*N*/ 		// MT 07/00: EE_PARA_BULLET no longer needed
-/*N*/ 		pC->GetParaAttribs().ClearItem( EE_PARA_BULLET );
-/*N*/ 	}
-/*N*/ }
-
-/*N*/ void BinTextObject::AdjustImportedLRSpaceItems( BOOL bTurnOfBullets )
-/*N*/ {
-/*N*/ 	for ( USHORT nPara = GetContents().Count(); nPara; )
-/*N*/ 	{
-/*N*/ 		ContentInfo* pC = GetContents().GetObject( --nPara );
-/*N*/ 		if ( !bTurnOfBullets )
-/*N*/ 		{
-/*N*/ 			for ( USHORT n = 0; n <=1; n++ )
-/*N*/ 			{
-/*N*/ 				USHORT nItemId = n ? EE_PARA_LRSPACE : EE_PARA_OUTLLRSPACE;
-/*N*/ 				if ( pC->GetParaAttribs().GetItemState( nItemId ) == SFX_ITEM_ON )
-/*N*/ 				{
-/*N*/ 					const SvxLRSpaceItem& rItem = (const SvxLRSpaceItem&) pC->GetParaAttribs().Get( nItemId );
-/*N*/ 					if ( !rItem.GetTxtFirstLineOfst() )
-/*N*/ 					{
-/*N*/ 						SvxLRSpaceItem aNewItem( rItem );
-/*N*/ 						aNewItem.SetTxtFirstLineOfst( (short) -1200 ); // Outliner im Draw mit MAP100TH_MM
-/*N*/ 						if( pC->GetParaAttribs().GetItemState( EE_PARA_NUMBULLET ) == SFX_ITEM_ON )
-/*N*/ 						{
-/*?*/ 							const SvxNumBulletItem& rNumBullet = (const SvxNumBulletItem&) pC->GetParaAttribs().Get( EE_PARA_NUMBULLET );
-/*?*/ 							const SfxUInt16Item& rLevel = (const SfxUInt16Item&) pC->GetParaAttribs().Get( EE_PARA_OUTLLEVEL );
-/*?*/ 							const SvxNumberFormat* pFmt = rNumBullet.GetNumRule()->Get( rLevel.GetValue() );
-/*?*/ 							if ( pFmt )
-/*?*/ 								aNewItem.SetTxtFirstLineOfst( pFmt->GetFirstLineOffset() );
-/*N*/ 						}
-/*N*/ 						pC->GetParaAttribs().Put( aNewItem );
-/*N*/ 					}
-/*N*/ 				}
-/*N*/ 			}
-/*N*/ 		}
-/*N*/ 
-/*N*/ 		// Wurden in alten Versionen vom Outliner mal am Absatz gesetzt, soll nicht mehr sein
-/*N*/ 		if ( !bTurnOfBullets && ( nVersion < 500 ) )
-/*N*/ 		{
-/*N*/ 			for ( USHORT nW = EE_CHAR_START; nW <= EE_CHAR_END; nW++  )
-/*N*/ 				pC->GetParaAttribs().ClearItem( nW );
-/*N*/ 		}
-/*N*/ 
-/*N*/ 		if ( bTurnOfBullets )
-/*N*/ 		{
-/*N*/ 			SfxUInt16Item aBulletState( EE_PARA_BULLETSTATE, 0 );
-/*N*/ 			pC->GetParaAttribs().Put( aBulletState );
-/*N*/ 		}
-/*N*/ 	}
-/*N*/ }
-
-
-
-/*N*/ #define CHARSETMARKER	0x9999
-
-/*N*/ void BinTextObject::CreateData300( SvStream& rIStream )
-/*N*/ {
-/*N*/ 	// Fuer Aufwaertskompatibilitaet.
-/*N*/ 
-/*N*/ 	// Erst den Pool laden...
-/*N*/ 	// Ist in der 300 immer gespeichert worden!
-/*N*/ 	GetPool()->Load( rIStream );
-/*N*/ 
-/*N*/ 	// Die Anzahl der Absaetze...
-/*N*/ 	sal_uInt32 nParagraphs;
-/*N*/ 	rIStream >> nParagraphs;
-/*N*/ 
-/*N*/ 	// Die einzelnen Absaetze...
-/*N*/ 	for ( sal_uInt32 nPara = 0; nPara < nParagraphs; nPara++ )
-/*N*/ 	{
-/*N*/ 		ContentInfo* pC = CreateAndInsertContent();
-/*N*/ 
-/*N*/ 		// Der Text...
-/*N*/ 		rIStream.ReadByteString( pC->GetText() );
-/*N*/ 
-/*N*/ 		// StyleName und Family...
-/*N*/ 		rIStream.ReadByteString( pC->GetStyle() );
-/*N*/ 		USHORT nStyleFamily;
-/*N*/ 		rIStream >> nStyleFamily;
-/*N*/ 		pC->GetFamily() = (SfxStyleFamily)nStyleFamily;
-/*N*/ 
-/*N*/ 		// Absatzattribute...
-/*N*/ 		pC->GetParaAttribs().Load( rIStream );
-/*N*/ 
-/*N*/ 		// Die Anzahl der Attribute...
-/*N*/ 		sal_uInt32 nAttribs;
-/*N*/ 		rIStream >> nAttribs;
-/*N*/ 
-/*N*/ 		// Und die einzelnen Attribute
-/*N*/ 		// Items als Surregate => immer 8 Byte pro Attrib
-/*N*/ 		// Which = 2; Surregat = 2; Start = 2; End = 2;
-/*N*/ 		for ( sal_uInt32 nAttr = 0; nAttr < nAttribs; nAttr++ )
-/*N*/ 		{
-/*N*/ 			USHORT nLclWhich, nStart, nEnd;
-/*N*/ 			const SfxPoolItem* pItem;
-/*N*/ 
-/*N*/ 			rIStream >> nLclWhich;
-/*N*/ 			nLclWhich = pPool->GetNewWhich( nLclWhich );
-/*N*/ 			pItem = pPool->LoadSurrogate( rIStream, nLclWhich, 0 );
-/*N*/ 			rIStream >> nStart;
-/*N*/ 			rIStream >> nEnd;
-/*N*/ 			if ( pItem )
-/*N*/ 			{
-/*N*/ 				XEditAttribute* pAttr = new XEditAttribute( *pItem, nStart, nEnd );
-/*N*/ 				pC->GetAttribs().Insert( pAttr, pC->GetAttribs().Count() );
-/*N*/ 			}
-/*N*/ 		}
-/*N*/ 	}
-/*N*/ 
-/*N*/ 	// Prueffen, ob ein Zeichensatz gespeichert wurde
-/*N*/ 	USHORT nCharSetMarker;
-/*N*/ 	rIStream >> nCharSetMarker;
-/*N*/ 	if ( nCharSetMarker == CHARSETMARKER )
-/*N*/ 	{
-/*N*/ 		USHORT nCharSet;
-/*N*/ 		rIStream >> nCharSet;
-/*N*/ 	}
-/*N*/ }
+ContentInfo::ContentInfo( const ContentInfo& rCopyFrom, SfxItemPool& rPoolToUse )
+    : aParaAttribs( rPoolToUse, EE_PARA_START, EE_CHAR_END )
+{
+    pTempLoadStoreInfos = NULL;
+    // So sollten die Items im richtigen Pool landen!
+    aParaAttribs.Set( rCopyFrom.GetParaAttribs() );
+    aText = rCopyFrom.GetText();
+    aStyle = rCopyFrom.GetStyle();
+    eFamily = rCopyFrom.GetFamily();
+
+    // Attribute kopieren...
+    for ( USHORT n = 0; n < rCopyFrom.GetAttribs().Count(); n++  )
+    {
+        XEditAttribute* pAttr = rCopyFrom.GetAttribs().GetObject( n );
+        XEditAttribute* pMyAttr = MakeXEditAttribute( rPoolToUse, *pAttr->GetItem(), pAttr->GetStart(), pAttr->GetEnd() );
+        aAttribs.Insert( pMyAttr, aAttribs.Count()  );
+    }
+}
+
+ContentInfo::~ContentInfo()
+{
+    for ( USHORT nAttr = 0; nAttr < aAttribs.Count(); nAttr++ )
+    {
+        XEditAttribute* pAttr = aAttribs.GetObject(nAttr);
+        // Item aus Pool entfernen!
+        aParaAttribs.GetPool()->Remove( *pAttr->GetItem() );
+        delete pAttr;
+    }
+    aAttribs.Remove( 0, aAttribs.Count() );
+}
+
+void ContentInfo::CreateLoadStoreTempInfos()
+{
+    delete pTempLoadStoreInfos;
+    pTempLoadStoreInfos = new LoadStoreTempInfos;
+}
+
+void ContentInfo::DestroyLoadStoreTempInfos()
+{
+    delete pTempLoadStoreInfos;
+    pTempLoadStoreInfos = NULL;
+}
+
+EditTextObject::EditTextObject( USHORT n)
+{
+    DBG_CTOR( EE_EditTextObject, 0 );
+    nWhich = n;
+}
+
+EditTextObject::EditTextObject( const EditTextObject& r )
+{
+    DBG_CTOR( EE_EditTextObject, 0 );
+    nWhich = r.nWhich;
+}
+
+EditTextObject::~EditTextObject()
+{
+    DBG_DTOR( EE_EditTextObject, 0 );
+}
+
+USHORT EditTextObject::GetParagraphCount() const
+{
+    DBG_ERROR( "V-Methode direkt vom EditTextObject!" );
+    return 0;
+}
+
+XubString EditTextObject::GetText( USHORT ) const
+{DBG_BF_ASSERT(0, "STRIP"); return XubString();
+}
+
+void EditTextObject::Insert( const EditTextObject&, USHORT )
+{
+    DBG_ERROR( "V-Methode direkt vom EditTextObject!" );
+}
+
+void EditTextObject::ClearPortionInfo()
+{
+    DBG_ERROR( "V-Methode direkt vom EditTextObject!" );
+}
+
+void EditTextObject::MergeParaAttribs( const SfxItemSet&, USHORT, USHORT )
+{
+    DBG_ERROR( "V-Methode direkt vom EditTextObject!" );
+}
+
+
+
+BOOL EditTextObject::HasField( TypeId ) const
+{
+    DBG_ERROR( "V-Methode direkt vom EditTextObject!" );
+    return FALSE;
+}
+
+SfxItemSet EditTextObject::GetParaAttribs( USHORT ) const
+{
+    DBG_ERROR( "V-Methode direkt vom EditTextObject!" );
+    return SfxItemSet( *(SfxItemPool*)NULL );
+}
+
+void EditTextObject::GetStyleSheet( USHORT, XubString&, SfxStyleFamily& ) const
+{
+    DBG_ERROR( "V-Methode direkt vom EditTextObject!" );
+}
+
+void EditTextObject::SetStyleSheet( USHORT, const XubString&, const SfxStyleFamily& )
+{
+    DBG_ERROR( "V-Methode direkt vom EditTextObject!" );
+}
+
+BOOL EditTextObject::ChangeStyleSheets( const XubString&, SfxStyleFamily,
+                                            const XubString&, SfxStyleFamily )
+{
+    DBG_ERROR( "V-Methode direkt vom EditTextObject!" );
+    return FALSE;
+}
+
+void EditTextObject::ChangeStyleSheetName( SfxStyleFamily,
+                const XubString&, const XubString& )
+{
+    DBG_ERROR( "V-Methode direkt vom EditTextObject!" );
+}
+
+USHORT EditTextObject::GetUserType() const
+{
+    DBG_ERROR( "V-Methode direkt vom EditTextObject!" );
+    return 0;
+}
+
+void EditTextObject::SetUserType( USHORT )
+{
+    DBG_ERROR( "V-Methode direkt vom EditTextObject!" );
+}
+
+
+
+BOOL EditTextObject::IsVertical() const
+{
+    DBG_ERROR( "V-Methode direkt vom EditTextObject!" );
+    return FALSE;
+}
+
+void EditTextObject::SetVertical( BOOL /*bVertical*/ )
+{DBG_BF_ASSERT(0, "STRIP");
+}
+
+
+
+BOOL EditTextObject::Store( SvStream& rOStream ) const
+{
+    if ( rOStream.GetError() )
+        return FALSE;
+
+    // Vorspann:
+    ULONG nStartPos = rOStream.Tell();
+
+    USHORT nLclWhich = Which();
+    rOStream << nLclWhich;
+
+    sal_uInt32 nStructSz = 0;
+    rOStream << nStructSz;
+
+    // Eigene Daten:
+    StoreData( rOStream );
+
+    // Nachspann:
+    ULONG nEndPos = rOStream.Tell();
+    nStructSz = nEndPos - nStartPos - sizeof( nLclWhich ) - sizeof( nStructSz );
+    rOStream.Seek( nStartPos + sizeof( nLclWhich ) );
+    rOStream << nStructSz;
+    rOStream.Seek( nEndPos );
+
+    return rOStream.GetError() ? FALSE : TRUE;
+}
+
+EditTextObject*    EditTextObject::Create( SvStream& rIStream, SfxItemPool* pGlobalTextObjectPool )
+{
+    ULONG nStartPos = rIStream.Tell();
+
+    // Ertmal sehen, was fuer ein Object...
+    USHORT nLclWhich;
+    rIStream >> nLclWhich;
+
+    sal_uInt32 nStructSz;
+    rIStream >> nStructSz;
+
+    DBG_ASSERT( ( nLclWhich == 0x22 /*EE_FORMAT_BIN300*/ ) || ( nLclWhich == EE_FORMAT_BIN ), "CreateTextObject: Unbekanntes Objekt!" );
+
+    if ( rIStream.GetError() )
+        return NULL;
+
+    EditTextObject* pTxtObj = NULL;
+    switch ( nLclWhich )
+    {
+        case 0x22 /*BIN300*/:        pTxtObj = new BinTextObject( 0 );
+                                    ((BinTextObject*)pTxtObj)->CreateData300( rIStream );
+                                    break;
+        case EE_FORMAT_BIN:            pTxtObj = new BinTextObject( pGlobalTextObjectPool );
+                                    pTxtObj->CreateData( rIStream );
+                                    break;
+        default:
+        {
+            // Wenn ich das Format nicht kenne, ueberlese ich den Inhalt:
+            rIStream.SetError( EE_READWRITE_WRONGFORMAT );
+        }
+    }
+
+    // Sicherstellen, dass der Stream an der richtigen Stelle hinterlassen wird.
+    ULONG nFullSz = sizeof( nLclWhich ) + sizeof( nStructSz ) + nStructSz;
+    rIStream.Seek( nStartPos + nFullSz );
+    return pTxtObj;
+}
+
+
+void EditTextObject::StoreData( SvStream& /*rOStream*/ ) const
+{
+    DBG_ERROR( "StoreData: Basisklasse!" );
+}
+
+void EditTextObject::CreateData( SvStream& /*rIStream*/ )
+{
+    DBG_ERROR( "CreateData: Basisklasse!" );
+}
+
+USHORT EditTextObject::GetVersion() const
+{
+    DBG_ERROR( "V-Methode direkt vom EditTextObject!" );
+    return 0;
+}
+
+
+void EditTextObject::AdjustImportedLRSpaceItems( BOOL /*bTurnOfBullets*/ )
+{
+    DBG_ERROR( "V-Methode direkt vom EditTextObject!" );
+}
+
+void EditTextObject::PrepareStore( SfxStyleSheetPool* /*pStyleSheetPool*/ )
+{
+    DBG_ERROR( "V-Methode direkt vom EditTextObject!" );
+}
+
+void EditTextObject::FinishStore()
+{
+    DBG_ERROR( "V-Methode direkt vom EditTextObject!" );
+}
+
+void EditTextObject::FinishLoad( SfxStyleSheetPool* /*pStyleSheetPool*/ )
+{
+    DBG_ERROR( "V-Methode direkt vom EditTextObject!" );
+}
+
+BinTextObject::BinTextObject( SfxItemPool* pP ) :
+    EditTextObject( EE_FORMAT_BIN )
+{
+    nVersion = 0;
+    nMetric = 0xFFFF;
+    nUserType = 0;
+    nObjSettings = 0;
+    pPortionInfo = 0;
+    if ( pP )
+    {
+        pPool =    pP;
+        bOwnerOfPool = FALSE;
+    }
+    else
+    {
+        pPool =    EditEngine::CreatePool();
+        bOwnerOfPool =    TRUE;
+    }
+    bVertical = FALSE;
+    bStoreUnicodeStrings = FALSE;
+    nScriptType = 0;
+}
+
+BinTextObject::BinTextObject( const BinTextObject& r ) :
+    EditTextObject( r )
+{
+    nVersion = r.nVersion;
+    nMetric = r.nMetric;
+    nUserType = r.nUserType;
+    nObjSettings = r.nObjSettings;
+    bVertical = r.bVertical;
+    nScriptType = r.nScriptType;
+    pPortionInfo = NULL;    // PortionInfo nicht kopieren
+    bStoreUnicodeStrings = FALSE;
+    if ( !r.bOwnerOfPool )
+    {
+        // Dann den Pool mitverwenden
+        pPool =    r.pPool;
+        bOwnerOfPool = FALSE;
+    }
+    else
+    {
+        pPool =    EditEngine::CreatePool();
+        bOwnerOfPool =    TRUE;
+
+    }
+
+    if ( bOwnerOfPool && pPool && r.pPool )
+        pPool->SetDefaultMetric( r.pPool->GetMetric( DEF_METRIC ) );
+
+    for ( USHORT n = 0; n < r.aContents.Count(); n++ )
+    {
+        ContentInfo* pOrg = r.aContents.GetObject( n );
+        DBG_ASSERT( pOrg, "NULL-Pointer in ContentList!" );
+        ContentInfo* pNew = new ContentInfo( *pOrg, *pPool );
+        aContents.Insert( pNew, aContents.Count() );
+    }
+}
+
+BinTextObject::~BinTextObject()
+{
+    ClearPortionInfo();
+    DeleteContents();
+    if ( bOwnerOfPool )
+    {
+        // Nicht mehr, wegen 1xDefItems.
+        // siehe auch ~EditDoc().
+//        pPool->ReleaseDefaults( TRUE /* bDelete */ );
+        delete pPool;
+    }
+}
+
+USHORT BinTextObject::GetUserType() const
+{
+    return nUserType;
+}
+
+void BinTextObject::SetUserType( USHORT n )
+{
+    nUserType = n;
+}
+
+
+
+BOOL BinTextObject::IsVertical() const
+{
+    return bVertical;
+}
+
+void BinTextObject::SetVertical( BOOL b )
+{
+    if ( b != bVertical )
+    {
+        bVertical = b;
+        ClearPortionInfo();
+    }
+}
+
+
+void BinTextObject::SetScriptType( USHORT nType )
+{
+    nScriptType = nType;
+}
+
+
+void BinTextObject::DeleteContents()
+{
+    for ( USHORT n = 0; n < aContents.Count(); n++ )
+    {
+        ContentInfo* p = aContents.GetObject( n );
+        DBG_ASSERT( p, "NULL-Pointer in ContentList!" );
+        delete p;
+    }
+    aContents.Remove( 0, aContents.Count() );
+}
+
+EditTextObject*    BinTextObject::Clone() const
+{
+    return new BinTextObject( *this );
+}
+
+XEditAttribute* BinTextObject::CreateAttrib( const SfxPoolItem& rItem, USHORT nStart, USHORT nEnd )
+{
+    return MakeXEditAttribute( *pPool, rItem, nStart, nEnd );
+}
+
+void BinTextObject::DestroyAttrib( XEditAttribute* pAttr )
+{
+    pPool->Remove( *pAttr->GetItem() );
+    delete pAttr;
+}
+
+ContentInfo* BinTextObject::CreateAndInsertContent()
+{
+    ContentInfo* pC = new ContentInfo( *pPool );
+    aContents.Insert( pC, aContents.Count() );
+    return pC;
+}
+
+USHORT BinTextObject::GetParagraphCount() const
+{
+    return aContents.Count();
+}
+
+XubString BinTextObject::GetText( USHORT nPara ) const
+{
+    DBG_ASSERT( nPara < aContents.Count(), "BinTextObject::GetText: Absatz existiert nicht!" );
+    if ( nPara < aContents.Count() )
+    {
+        ContentInfo* pC = aContents[ nPara ];
+        return pC->GetText();
+    }
+    return XubString();
+}
+
+void BinTextObject::Insert( const EditTextObject& rObj, USHORT nDestPara )
+{
+    DBG_ASSERT( rObj.Which() == EE_FORMAT_BIN, "UTO: Unbekanntes Textobjekt" );
+
+    const BinTextObject& rBinObj = (const BinTextObject&)rObj;
+
+    if ( nDestPara > aContents.Count() )
+        nDestPara = aContents.Count();
+
+    const USHORT nParas = rBinObj.GetContents().Count();
+    for ( USHORT nP = 0; nP < nParas; nP++ )
+    {
+        ContentInfo* pC = rBinObj.GetContents()[ nP ];
+        ContentInfo* pNew = new ContentInfo( *pC, *GetPool() );
+        aContents.Insert( pNew, nDestPara+nP );
+    }
+    ClearPortionInfo();
+}
+
+
+
+
+void BinTextObject::ClearPortionInfo()
+{
+    if ( pPortionInfo )
+    {
+        for ( USHORT n = pPortionInfo->Count(); n; )
+            delete pPortionInfo->GetObject( --n );
+        delete pPortionInfo;
+        pPortionInfo = NULL;
+    }
+}
+
+
+
+
+void BinTextObject::MergeParaAttribs( const SfxItemSet& rAttribs, USHORT nStart, USHORT nEnd )
+{
+    BOOL bChanged = FALSE;
+
+    for ( USHORT nPara = GetContents().Count(); nPara; )
+    {
+        ContentInfo* pC = GetContents().GetObject( --nPara );
+
+        for ( USHORT nW = nStart; nW <= nEnd; nW++ )
+        {
+            if ( ( pC->GetParaAttribs().GetItemState( nW, FALSE ) != SFX_ITEM_ON )
+                    && ( rAttribs.GetItemState( nW, FALSE ) == SFX_ITEM_ON ) )
+            {
+                pC->GetParaAttribs().Put( rAttribs.Get( nW ) );
+                bChanged = TRUE;
+            }
+        }
+    }
+
+    if ( bChanged )
+        ClearPortionInfo();
+}
+
+
+
+BOOL BinTextObject::HasField( TypeId aType ) const
+{
+    USHORT nParagraphs = GetContents().Count();
+    for ( USHORT nPara = 0; nPara < nParagraphs; nPara++ )
+    {
+        ContentInfo* pC = GetContents().GetObject( nPara );
+        USHORT nAttrs = pC->GetAttribs().Count();
+        for ( USHORT nAttr = 0; nAttr < nAttrs; nAttr++ )
+        {
+            XEditAttribute* pAttr = pC->GetAttribs()[nAttr];
+            if ( pAttr->GetItem()->Which() == EE_FEATURE_FIELD )
+            {
+                if ( !aType )
+                    return TRUE;
+
+                const SvxFieldData* pFldData = ((const SvxFieldItem*)pAttr->GetItem())->GetField();
+                if ( pFldData && pFldData->IsA( aType ) )
+                    return TRUE;
+            }
+        }
+    }
+    return FALSE;
+}
+
+SfxItemSet BinTextObject::GetParaAttribs( USHORT nPara ) const
+{
+    ContentInfo* pC = GetContents().GetObject( nPara );
+    return pC->GetParaAttribs();
+}
+
+
+
+
+
+void BinTextObject::GetStyleSheet( USHORT nPara, XubString& rName, SfxStyleFamily& rFamily ) const
+{
+    if ( nPara < aContents.Count() )
+    {
+        ContentInfo* pC = aContents[ nPara ];
+        rName = pC->GetStyle();
+        rFamily = pC->GetFamily();
+    }
+}
+
+void BinTextObject::SetStyleSheet( USHORT, const XubString&, const SfxStyleFamily& )
+{DBG_BF_ASSERT(0, "STRIP");
+}
+
+BOOL BinTextObject::ImpChangeStyleSheets(
+                    const XubString& rOldName, SfxStyleFamily eOldFamily,
+                    const XubString& rNewName, SfxStyleFamily eNewFamily )
+{
+    const USHORT nParagraphs = GetContents().Count();
+    BOOL bChanges = FALSE;
+
+    for ( USHORT nPara = 0; nPara < nParagraphs; nPara++ )
+    {
+        ContentInfo* pC = GetContents().GetObject( nPara );
+        if ( pC->GetFamily() == eOldFamily )
+        {
+            if ( pC->GetStyle() == rOldName )
+            {
+                pC->GetStyle() = rNewName;
+                pC->GetFamily() = eNewFamily;
+                bChanges = TRUE;
+            }
+        }
+    }
+    return bChanges;
+}
+
+BOOL BinTextObject::ChangeStyleSheets(
+                    const XubString& rOldName, SfxStyleFamily eOldFamily,
+                    const XubString& rNewName, SfxStyleFamily eNewFamily )
+{
+    BOOL bChanges = ImpChangeStyleSheets( rOldName, eOldFamily, rNewName, eNewFamily );
+    if ( bChanges )
+        ClearPortionInfo();
+
+    return bChanges;
+}
+
+void BinTextObject::ChangeStyleSheetName( SfxStyleFamily eFamily,
+                const XubString& rOldName, const XubString& rNewName )
+{
+    ImpChangeStyleSheets( rOldName, eFamily, rNewName, eFamily );
+}
+
+void BinTextObject::StoreData( SvStream& rOStream ) const
+{
+    USHORT nVer = 602;
+    rOStream << nVer;
+
+    rOStream << bOwnerOfPool;
+
+    // Erst den Pool speichern, spaeter nur noch Surregate
+    if ( bOwnerOfPool )
+    {
+        GetPool()->SetFileFormatVersion( SOFFICE_FILEFORMAT_50 );
+        GetPool()->Store( rOStream );
+    }
+
+    // Aktuelle Zeichensatz speichern...
+    // #90477# GetSOStoreTextEncoding: Bug in 5.2, when default char set is multi byte text encoding
+    rtl_TextEncoding eEncoding = GetSOStoreTextEncoding( gsl_getSystemTextEncoding(), (USHORT) rOStream.GetVersion() );
+    rOStream << (USHORT) eEncoding;
+
+    // Die Anzahl der Absaetze...
+    USHORT nParagraphs = GetContents().Count();
+    rOStream << nParagraphs;
+
+    char cFeatureConverted = ByteString( CH_FEATURE, eEncoding ).GetChar(0);
+
+    // Die einzelnen Absaetze...
+    for ( USHORT nPara = 0; nPara < nParagraphs; nPara++ )
+    {
+        ContentInfo* pC = GetContents().GetObject( nPara );
+
+        // Text...
+        ByteString aText( pC->GetText(), eEncoding );
+
+        // Symbols?
+        BOOL bSymbolPara = FALSE;
+        if ( pC->GetLoadStoreTempInfos() && pC->GetLoadStoreTempInfos()->bSymbolParagraph_Store )
+        {
+            DBG_ASSERT( pC->GetParaAttribs().GetItemState( EE_CHAR_FONTINFO ) != SFX_ITEM_ON, "Why bSymbolParagraph_Store?" );
+            aText = ByteString( pC->GetText(), RTL_TEXTENCODING_SYMBOL );
+            bSymbolPara = TRUE;
+        }
+        else if ( pC->GetParaAttribs().GetItemState( EE_CHAR_FONTINFO ) == SFX_ITEM_ON )
+        {
+            const SvxFontItem& rFontItem = (const SvxFontItem&)pC->GetParaAttribs().Get( EE_CHAR_FONTINFO );
+            if ( rFontItem.GetCharSet() == RTL_TEXTENCODING_SYMBOL )
+            {
+                aText = ByteString( pC->GetText(), RTL_TEXTENCODING_SYMBOL );
+                bSymbolPara = TRUE;
+            }
+        }
+        for ( USHORT nA = 0; nA < pC->GetAttribs().Count(); nA++ )
+        {
+            XEditAttribute* pAttr = pC->GetAttribs().GetObject( nA );
+
+            if ( pAttr->GetItem()->Which() == EE_CHAR_FONTINFO )
+            {
+                const SvxFontItem& rFontItem = (const SvxFontItem&)*pAttr->GetItem();
+                if ( ( !bSymbolPara && ( rFontItem.GetCharSet() == RTL_TEXTENCODING_SYMBOL ) )
+                      || ( bSymbolPara && ( rFontItem.GetCharSet() != RTL_TEXTENCODING_SYMBOL ) ) )
+                {
+                    // Not correctly converted
+                    String aPart( pC->GetText(), pAttr->GetStart(), pAttr->GetEnd() - pAttr->GetStart() );
+                    ByteString aNew( aPart, rFontItem.GetCharSet() );
+                    aText.Erase( pAttr->GetStart(), pAttr->GetEnd() - pAttr->GetStart() );
+                    aText.Insert( aNew, pAttr->GetStart() );
+                }
+
+                // #88414# Convert StarSymbol back to StarBats
+                FontToSubsFontConverter hConv = CreateFontToSubsFontConverter( rFontItem.GetFamilyName(), FONTTOSUBSFONT_EXPORT | FONTTOSUBSFONT_ONLYOLDSOSYMBOLFONTS );
+                if ( hConv )
+                {
+                    // Don't create a new Attrib with StarBats font, MBR changed the
+                    // SvxFontItem::Store() to store StarBats instead of StarSymbol!
+                    for ( USHORT nChar = pAttr->GetStart(); nChar < pAttr->GetEnd(); nChar++ )
+                    {
+                        sal_Unicode cOld = pC->GetText().GetChar( nChar );
+                        char cConv = ByteString::ConvertFromUnicode( ConvertFontToSubsFontChar( hConv, cOld ), RTL_TEXTENCODING_SYMBOL );
+                        if ( cConv )
+                            aText.SetChar( nChar, cConv );
+                    }
+
+                    DestroyFontToSubsFontConverter( hConv );
+                }
+            }
+        }
+
+        // #88414# Convert StarSymbol back to StarBats
+        // StarSymbol as paragraph attribute or in StyleSheet?
+
+        FontToSubsFontConverter hConv = NULL;
+        if ( pC->GetParaAttribs().GetItemState( EE_CHAR_FONTINFO ) == SFX_ITEM_ON )
+        {
+            hConv = CreateFontToSubsFontConverter( ((const SvxFontItem&)pC->GetParaAttribs().Get( EE_CHAR_FONTINFO )).GetFamilyName(), FONTTOSUBSFONT_EXPORT | FONTTOSUBSFONT_ONLYOLDSOSYMBOLFONTS );
+        }
+        else if ( pC->GetStyle().Len() && pC->GetLoadStoreTempInfos() )
+        {
+            hConv = pC->GetLoadStoreTempInfos()->hOldSymbolConv_Store;
+        }
+
+        if ( hConv )
+        {
+            for ( USHORT nChar = 0; nChar < pC->GetText().Len(); nChar++ )
+            {
+                if ( !pC->GetAttribs().FindAttrib( EE_CHAR_FONTINFO, nChar ) )
+                {
+                    sal_Unicode cOld = pC->GetText().GetChar( nChar );
+                    char cConv = ByteString::ConvertFromUnicode( ConvertFontToSubsFontChar( hConv, cOld ), RTL_TEXTENCODING_SYMBOL );
+                    if ( cConv )
+                        aText.SetChar( nChar, cConv );
+                }
+            }
+
+            DestroyFontToSubsFontConverter( hConv );
+
+            if ( pC->GetLoadStoreTempInfos() )
+                pC->GetLoadStoreTempInfos()->hOldSymbolConv_Store = NULL;
+        }
+
+
+        // Convert CH_FEATURE to CH_FEATURE_OLD
+        aText.SearchAndReplaceAll( cFeatureConverted, CH_FEATURE_OLD );
+        rOStream.WriteByteString( aText );
+
+        // StyleName und Family...
+        rOStream.WriteByteString( ByteString( pC->GetStyle(), eEncoding ) );
+        rOStream << (USHORT)pC->GetFamily();
+
+        // Absatzattribute...
+        pC->GetParaAttribs().Store( rOStream );
+
+        // Die Anzahl der Attribute...
+        USHORT nAttribs = pC->GetAttribs().Count();
+        rOStream << nAttribs;
+
+        // Und die einzelnen Attribute
+        // Items als Surregate => immer 8 Byte pro Attrib
+        // Which = 2; Surregat = 2; Start = 2; End = 2;
+        for ( USHORT nAttr = 0; nAttr < nAttribs; nAttr++ )
+        {
+            XEditAttribute* pX = pC->GetAttribs().GetObject( nAttr );
+
+            rOStream << pX->GetItem()->Which();
+            GetPool()->StoreSurrogate( rOStream, pX->GetItem() );
+            rOStream << pX->GetStart();
+            rOStream << pX->GetEnd();
+        }
+    }
+
+    // Ab 400:
+    rOStream << nMetric;
+
+    // Ab 600
+    rOStream << nUserType;
+    rOStream << nObjSettings;
+
+    // Ab 601
+    rOStream << bVertical;
+
+    // Ab 602
+    rOStream << nScriptType;
+
+    rOStream << bStoreUnicodeStrings;
+    if ( bStoreUnicodeStrings )
+    {
+        for ( USHORT nPara = 0; nPara < nParagraphs; nPara++ )
+        {
+            ContentInfo* pC = GetContents().GetObject( nPara );
+            USHORT nL = pC->GetText().Len();
+            rOStream << nL;
+            rOStream.Write( pC->GetText().GetBuffer(), nL*sizeof(sal_Unicode) );
+
+            // #91575# StyleSheetName must be Unicode too!
+            // Copy/Paste from EA3 to BETA or from BETA to EA3 not possible, not needed...
+            // If needed, change nL back to ULONG and increase version...
+            nL = pC->GetStyle().Len();
+            rOStream << nL;
+            rOStream.Write( pC->GetStyle().GetBuffer(), nL*sizeof(sal_Unicode) );
+        }
+    }
+}
+
+void BinTextObject::CreateData( SvStream& rIStream )
+{
+    rIStream >> nVersion;
+
+    // Das Textobject wurde erstmal mit der aktuellen Einstellung
+    // von pTextObjectPool erzeugt.
+    BOOL bOwnerOfCurrent = bOwnerOfPool;
+    rIStream >> bOwnerOfPool;
+
+    if ( bOwnerOfCurrent && !bOwnerOfPool )
+    {
+        // Es wurde ein globaler Pool verwendet, mir jetzt nicht uebergeben,
+        // aber ich brauche ihn!
+        DBG_ERROR( "Man gebe mir den globalen TextObjectPool!" );
+        return;
+    }
+    else if ( !bOwnerOfCurrent && bOwnerOfPool )
+    {
+        // Es soll ein globaler Pool verwendet werden, aber dieses
+        // Textobject hat einen eigenen.
+        pPool =    EditEngine::CreatePool();
+    }
+
+    if ( bOwnerOfPool )
+        GetPool()->Load( rIStream );
+
+    // CharSet, in dem gespeichert wurde:
+    USHORT nCharSet;
+    rIStream >> nCharSet;
+
+    rtl_TextEncoding eSrcEncoding = GetSOLoadTextEncoding( (rtl_TextEncoding)nCharSet, (USHORT)rIStream.GetVersion() );
+
+    // Die Anzahl der Absaetze...
+    USHORT nParagraphs;
+    rIStream >> nParagraphs;
+
+    // Die einzelnen Absaetze...
+    for ( ULONG nPara = 0; nPara < nParagraphs; nPara++ )
+    {
+        ContentInfo* pC = CreateAndInsertContent();
+
+        // Der Text...
+        ByteString aByteString;
+        rIStream.ReadByteString( aByteString );
+        pC->GetText() = String( aByteString, eSrcEncoding );
+
+        // StyleName und Family...
+        rIStream.ReadByteString( pC->GetStyle(), eSrcEncoding );
+        USHORT nStyleFamily;
+        rIStream >> nStyleFamily;
+        pC->GetFamily() = (SfxStyleFamily)nStyleFamily;
+
+        // Absatzattribute...
+        pC->GetParaAttribs().Load( rIStream );
+
+        // Die Anzahl der Attribute...
+        USHORT nAttribs;
+        rIStream >> nAttribs;
+
+        // Und die einzelnen Attribute
+        // Items als Surregate => immer 8 Byte pro Attrib
+        // Which = 2; Surregat = 2; Start = 2; End = 2;
+        USHORT nAttr;
+        for ( nAttr = 0; nAttr < nAttribs; nAttr++ )
+        {
+            USHORT nLclWhich, nStart, nEnd;
+            const SfxPoolItem* pItem;
+
+            rIStream >> nLclWhich;
+            nLclWhich = pPool->GetNewWhich( nLclWhich );
+            pItem = pPool->LoadSurrogate( rIStream, nLclWhich, 0 );
+            rIStream >> nStart;
+            rIStream >> nEnd;
+            if ( pItem )
+            {
+                if ( pItem->Which() == EE_FEATURE_NOTCONV )
+                {
+                    pC->GetText().SetChar( nStart, ByteString::ConvertToUnicode( aByteString.GetChar( nStart ), ((SvxCharSetColorItem*)pItem)->GetCharSet() ) );
+                }
+                else
+                {
+                    XEditAttribute* pAttr = new XEditAttribute( *pItem, nStart, nEnd );
+                    pC->GetAttribs().Insert( pAttr, pC->GetAttribs().Count() );
+
+                    if ( ( nLclWhich >= EE_FEATURE_START ) && ( nLclWhich <= EE_FEATURE_END ) )
+                    {
+                        // Convert CH_FEATURE to CH_FEATURE_OLD
+                        DBG_ASSERT( (BYTE) aByteString.GetChar( nStart ) == CH_FEATURE_OLD, "CreateData: CH_FEATURE expected!" );
+                        if ( (BYTE) aByteString.GetChar( nStart ) == CH_FEATURE_OLD )
+                            pC->GetText().SetChar( nStart, CH_FEATURE );
+                    }
+                }
+            }
+        }
+
+        // Symbol-Conversion neccessary?
+        // All Strings are converted with the SourceCharSet in CreateData()...
+
+        // Keep old ByteString, maybe Symbol-Conversion neccessary, will be
+        // checked in FinishLoad(), I need the StyleSheetPool for this...
+        if ( pC->GetStyle().Len() && ( pC->GetParaAttribs().GetItemState( EE_CHAR_FONTINFO ) != SFX_ITEM_ON ) )
+        {
+            pC->CreateLoadStoreTempInfos();
+            pC->GetLoadStoreTempInfos()->aOrgString_Load = aByteString;
+        }
+
+        // But check for paragraph and character symbol attribs here,
+        // FinishLoad will not be called in OpenOffice Calc, no StyleSheets...
+
+        BOOL bSymbolPara = FALSE;
+        if ( pC->GetParaAttribs().GetItemState( EE_CHAR_FONTINFO ) == SFX_ITEM_ON )
+        {
+            const SvxFontItem& rFontItem = (const SvxFontItem&)pC->GetParaAttribs().Get( EE_CHAR_FONTINFO );
+            if ( rFontItem.GetCharSet() == RTL_TEXTENCODING_SYMBOL )
+            {
+                pC->GetText() = String( aByteString, RTL_TEXTENCODING_SYMBOL );
+                bSymbolPara = TRUE;
+            }
+        }
+
+        for ( nAttr = pC->GetAttribs().Count(); nAttr; )
+        {
+            XEditAttribute* pAttr = pC->GetAttribs().GetObject( --nAttr );
+            if ( pAttr->GetItem()->Which() == EE_CHAR_FONTINFO )
+            {
+                const SvxFontItem& rFontItem = (const SvxFontItem&)*pAttr->GetItem();
+                if ( ( !bSymbolPara && ( rFontItem.GetCharSet() == RTL_TEXTENCODING_SYMBOL ) )
+                      || ( bSymbolPara && ( rFontItem.GetCharSet() != RTL_TEXTENCODING_SYMBOL ) ) )
+                {
+                    // Not correctly converted
+                    ByteString aPart( aByteString, pAttr->GetStart(), pAttr->GetEnd()-pAttr->GetStart() );
+                    String aNew( aPart, rFontItem.GetCharSet() );
+                    pC->GetText().Erase( pAttr->GetStart(), pAttr->GetEnd()-pAttr->GetStart() );
+                    pC->GetText().Insert( aNew, pAttr->GetStart() );
+                }
+
+                // #88414# Convert StarMath and StarBats to StarSymbol
+                FontToSubsFontConverter hConv = CreateFontToSubsFontConverter( rFontItem.GetFamilyName(), FONTTOSUBSFONT_IMPORT | FONTTOSUBSFONT_ONLYOLDSOSYMBOLFONTS );
+                if ( hConv )
+                {
+                    SvxFontItem aNewFontItem( rFontItem );
+                    aNewFontItem.GetFamilyName() = GetFontToSubsFontName( hConv );
+
+                    pC->GetAttribs().Remove( nAttr );
+                    XEditAttribute* pNewAttr = CreateAttrib( aNewFontItem, pAttr->GetStart(), pAttr->GetEnd() );
+                    pC->GetAttribs().Insert( pNewAttr, nAttr );
+                    DestroyAttrib( pAttr );
+
+                    for ( USHORT nChar = pNewAttr->GetStart(); nChar < pNewAttr->GetEnd(); nChar++ )
+                    {
+                        sal_Unicode cOld = pC->GetText().GetChar( nChar );
+                        DBG_ASSERT( cOld >= 0xF000, "cOld not converted?!" );
+                        sal_Unicode cConv = ConvertFontToSubsFontChar( hConv, cOld );
+                        if ( cConv )
+                            pC->GetText().SetChar( nChar, cConv );
+                    }
+
+                    DestroyFontToSubsFontConverter( hConv );
+                }
+            }
+        }
+
+
+        // #88414# Convert StarMath and StarBats to StarSymbol
+        // Maybe old symbol font as paragraph attribute?
+        if ( pC->GetParaAttribs().GetItemState( EE_CHAR_FONTINFO ) == SFX_ITEM_ON )
+        {
+            const SvxFontItem& rFontItem = (const SvxFontItem&)pC->GetParaAttribs().Get( EE_CHAR_FONTINFO );
+            FontToSubsFontConverter hConv = CreateFontToSubsFontConverter( rFontItem.GetFamilyName(), FONTTOSUBSFONT_IMPORT | FONTTOSUBSFONT_ONLYOLDSOSYMBOLFONTS );
+            if ( hConv )
+            {
+                SvxFontItem aNewFontItem( rFontItem );
+                aNewFontItem.GetFamilyName() = GetFontToSubsFontName( hConv );
+                pC->GetParaAttribs().Put( aNewFontItem );
+
+                for ( USHORT nChar = 0; nChar < pC->GetText().Len(); nChar++ )
+                {
+                    if ( !pC->GetAttribs().FindAttrib( EE_CHAR_FONTINFO, nChar ) )
+                    {
+                        sal_Unicode cOld = pC->GetText().GetChar( nChar );
+                        DBG_ASSERT( cOld >= 0xF000, "cOld not converted?!" );
+                        sal_Unicode cConv = ConvertFontToSubsFontChar( hConv, cOld );
+                        if ( cConv )
+                            pC->GetText().SetChar( nChar, cConv );
+                    }
+                }
+
+                DestroyFontToSubsFontConverter( hConv );
+            }
+        }
+    }
+
+    // Ab 400 auch die DefMetric:
+    if ( nVersion >= 400 )
+    {
+        USHORT nTmpMetric;
+        rIStream >> nTmpMetric;
+        if ( nVersion >= 401 )
+        {
+            // In der 400 gab es noch einen Bug bei Textobjekten mit eigenem
+            // Pool, deshalb erst ab 401 auswerten.
+            nMetric = nTmpMetric;
+            if ( bOwnerOfPool && pPool && ( nMetric != 0xFFFF ) )
+                pPool->SetDefaultMetric( (SfxMapUnit)nMetric );
+        }
+    }
+
+    if ( nVersion >= 600 )
+    {
+        rIStream >> nUserType;
+        rIStream >> nObjSettings;
+    }
+
+    if ( nVersion >= 601 )
+    {
+        rIStream >> bVertical;
+    }
+
+    if ( nVersion >= 602 )
+    {
+        rIStream >> nScriptType;
+
+        BOOL bUnicodeStrings;
+        rIStream >> bUnicodeStrings;
+        if ( bUnicodeStrings )
+        {
+            for ( USHORT nPara = 0; nPara < nParagraphs; nPara++ )
+            {
+                ContentInfo* pC = GetContents().GetObject( nPara );
+                USHORT nL;
+
+                // Text
+                rIStream >> nL;
+                if ( nL )
+                {
+                    pC->GetText().AllocBuffer( nL );
+                    rIStream.Read( pC->GetText().GetBufferAccess(), nL*sizeof(sal_Unicode) );
+                    pC->GetText().ReleaseBufferAccess( (USHORT)nL );
+                }
+
+                // StyleSheetName
+                rIStream >> nL;
+                if ( nL )
+                {
+                    pC->GetStyle().AllocBuffer( nL );
+                    rIStream.Read( pC->GetStyle().GetBufferAccess(), nL*sizeof(sal_Unicode) );
+                    pC->GetStyle().ReleaseBufferAccess( (USHORT)nL );
+                }
+            }
+        }
+    }
+
+
+    // Ab 500 werden die Tabs anders interpretiert: TabPos + LI, vorher nur TabPos.
+    // Wirkt nur wenn auch Tab-Positionen eingestellt wurden, nicht beim DefTab.
+    if ( nVersion < 500 )
+    {
+        for ( USHORT n = 0; n < aContents.Count(); n++ )
+        {
+            ContentInfo* pC = aContents.GetObject( n );
+            const SvxLRSpaceItem& rLRSpace = (const SvxLRSpaceItem&) pC->GetParaAttribs().Get( EE_PARA_LRSPACE );
+            if ( rLRSpace.GetTxtLeft() && ( pC->GetParaAttribs().GetItemState( EE_PARA_TABS ) == SFX_ITEM_ON ) )
+            {
+                const SvxTabStopItem& rTabs = (const SvxTabStopItem&) pC->GetParaAttribs().Get( EE_PARA_TABS );
+                SvxTabStopItem aNewTabs( 0, 0, SVX_TAB_ADJUST_LEFT, EE_PARA_TABS );
+                for ( USHORT t = 0; t < rTabs.Count(); t++ )
+                {
+                    const SvxTabStop& rT = rTabs[ t ];
+                    aNewTabs.Insert( SvxTabStop( rT.GetTabPos() - rLRSpace.GetTxtLeft(),
+                                rT.GetAdjustment(), rT.GetDecimal(), rT.GetFill() ) );
+                }
+                pC->GetParaAttribs().Put( aNewTabs );
+            }
+        }
+    }
+}
+
+USHORT BinTextObject::GetVersion() const
+{
+    return nVersion;
+}
+
+
+void BinTextObject::PrepareStore( SfxStyleSheetPool* pStyleSheetPool )
+{
+    // Some Items must be generated for the 5.0 file format,
+    // because we don't have a special format for 5.x or 6.x
+    USHORT nParas = GetContents().Count();
+    const SvxNumBulletItem** ppNumBulletItems = new const SvxNumBulletItem*[nParas];
+    for ( USHORT nPara = nParas; nPara; )
+    {
+        ContentInfo* pC = GetContents().GetObject( --nPara );
+        const SvxNumBulletItem* pSvxNumBulletItem = NULL;
+        const SfxPoolItem* pTmpItem = NULL;
+        if ( pC->GetParaAttribs().GetItemState(EE_PARA_NUMBULLET, FALSE, &pTmpItem ) == SFX_ITEM_ON )
+        {
+            pSvxNumBulletItem = (const SvxNumBulletItem*)pTmpItem;
+        }
+        else if ( pStyleSheetPool && pC->GetStyle().Len() )
+        {
+            SfxStyleSheet* pStyle = (SfxStyleSheet*)pStyleSheetPool->Find( pC->GetStyle(), pC->GetFamily() );
+            if ( pStyle )
+                pSvxNumBulletItem = &(const SvxNumBulletItem&)pStyle->GetItemSet().Get(EE_PARA_NUMBULLET);
+        }
+
+        ppNumBulletItems[nPara] = pSvxNumBulletItem;
+
+        if ( pSvxNumBulletItem )
+        {
+            // Check if Item allready used, don't create a new one in this case.
+            BOOL bInserted = FALSE;
+            for ( USHORT nP = nPara+1; nP < nParas; nP++ )
+            {
+                if ( ppNumBulletItems[nP] == pSvxNumBulletItem )
+                {
+                    ContentInfo* pTmpC = GetContents().GetObject( nP );
+                    pC->GetParaAttribs().Put( pTmpC->GetParaAttribs().Get( EE_PARA_BULLET ) );
+                    bInserted = TRUE;
+                    break;
+                }
+            }
+            if ( !bInserted )
+            {
+                SvxBulletItem aNewBullet( EE_PARA_BULLET );
+                const SfxUInt16Item& rLevel = (const SfxUInt16Item&) pC->GetParaAttribs().Get( EE_PARA_OUTLLEVEL );
+                lcl_CreateBulletItem( *pSvxNumBulletItem, rLevel.GetValue(), aNewBullet );
+                pC->GetParaAttribs().Put( aNewBullet );
+            }
+        }
+
+        // SymbolConvertion because of StyleSheet?
+        // Cannot be checked in StoreData, no StyleSheetPool, so do it here...
+
+        pC->DestroyLoadStoreTempInfos();    // Maybe old infos, if somebody is not calling FinishLoad after CreateData, but PrepareStore...
+
+        if ( ( pC->GetParaAttribs().GetItemState( EE_CHAR_FONTINFO ) != SFX_ITEM_ON ) && pC->aStyle.Len() && pStyleSheetPool )
+        {
+            SfxStyleSheet* pStyle = (SfxStyleSheet*)pStyleSheetPool->Find( pC->GetStyle(), pC->GetFamily() );
+            if ( pStyle )
+            {
+                const SvxFontItem& rFontItem = (const SvxFontItem&)pStyle->GetItemSet().Get( EE_CHAR_FONTINFO );
+                if ( rFontItem.GetCharSet() == RTL_TEXTENCODING_SYMBOL )
+                {
+                    if ( !pC->GetLoadStoreTempInfos() )
+                        pC->CreateLoadStoreTempInfos();
+                    pC->GetLoadStoreTempInfos()->bSymbolParagraph_Store = TRUE;
+                }
+
+                FontToSubsFontConverter hConv = CreateFontToSubsFontConverter( rFontItem.GetFamilyName(), FONTTOSUBSFONT_EXPORT | FONTTOSUBSFONT_ONLYOLDSOSYMBOLFONTS );
+                if ( hConv )
+                {
+                    // #88414# Convert StarSymbol back to StarBats
+                    if ( !pC->GetLoadStoreTempInfos() )
+                        pC->CreateLoadStoreTempInfos();
+                    pC->GetLoadStoreTempInfos()->hOldSymbolConv_Store = hConv;
+                }
+            }
+        }
+     }
+
+    delete[] ppNumBulletItems;
+}
+
+void BinTextObject::FinishStore()
+{
+    for ( USHORT nPara = GetContents().Count(); nPara; )
+    {
+        ContentInfo* pC = GetContents().GetObject( --nPara );
+        pC->GetParaAttribs().ClearItem( EE_PARA_BULLET );
+
+        pC->DestroyLoadStoreTempInfos();
+    }
+}
+
+void BinTextObject::FinishLoad( SfxStyleSheetPool* pStyleSheetPool )
+{
+    BOOL bCreateNumBulletItem = nVersion && ( nVersion < 501 );
+    for ( USHORT nPara = GetContents().Count(); nPara; )
+    {
+        ContentInfo* pC = GetContents().GetObject( --nPara );
+
+        if( GetUserType() == 0x0003 ) // !! OUTLINERMODE_OUTLINEOBJECT !!
+        {
+            if ( pC->GetParaAttribs().GetItemState( EE_PARA_NUMBULLET ) == SFX_ITEM_ON )
+            {
+                SvxNumBulletItem* pNumBullet = (SvxNumBulletItem*) &pC->GetParaAttribs().Get( EE_PARA_NUMBULLET );
+                if( pNumBullet->GetNumRule()->GetNumRuleType() != SVX_RULETYPE_PRESENTATION_NUMBERING )
+                {
+                    pNumBullet->GetNumRule()->SetNumRuleType( SVX_RULETYPE_PRESENTATION_NUMBERING );
+                    pC->GetParaAttribs().Put( *pNumBullet, EE_PARA_NUMBULLET );
+                }
+            }
+        }
+
+        if ( bCreateNumBulletItem )
+        {
+            BOOL bBulletInPara = pC->GetParaAttribs().GetItemState( EE_PARA_BULLET ) == SFX_ITEM_ON;
+            BOOL bLRSpaceInPara = pC->GetParaAttribs().GetItemState( EE_PARA_LRSPACE ) == SFX_ITEM_ON;
+
+            // Nur wenn ein Attribut hart gesetzt, ansonsten muss es in den Vorlagen
+            // richtig konvertiert sein.
+
+            if ( bBulletInPara || bLRSpaceInPara )
+            {
+                const SvxBulletItem* pBullet = NULL;
+                const SvxLRSpaceItem* pLRSpace = NULL;
+                SvxNumBulletItem* pNumBullet = NULL;
+                SfxStyleSheet* pStyle = NULL;
+
+                if ( pC->GetStyle().Len() )
+                    pStyle = (SfxStyleSheet*)pStyleSheetPool->Find( pC->GetStyle(), pC->GetFamily() );
+
+                const SfxUInt16Item& rLevel = (const SfxUInt16Item&) pC->GetParaAttribs().Get( EE_PARA_OUTLLEVEL );
+                USHORT nLevel = rLevel.GetValue();
+
+                if ( !pStyle || bBulletInPara )
+                    pBullet = (const SvxBulletItem*) &pC->GetParaAttribs().Get( EE_PARA_BULLET );
+                else
+                    pBullet = (const SvxBulletItem*) &pStyle->GetItemSet().Get( EE_PARA_BULLET );
+
+                if ( !pStyle || bLRSpaceInPara )
+                    pLRSpace = (const SvxLRSpaceItem*) &pC->GetParaAttribs().Get( EE_PARA_LRSPACE );
+                else
+                    pLRSpace = (const SvxLRSpaceItem*) &pStyle->GetItemSet().Get( EE_PARA_LRSPACE );
+
+                if ( !pStyle || ( pC->GetParaAttribs().GetItemState( EE_PARA_NUMBULLET ) == SFX_ITEM_ON ) )
+                    pNumBullet = (SvxNumBulletItem*) &pC->GetParaAttribs().Get( EE_PARA_NUMBULLET );
+                else
+                    pNumBullet = (SvxNumBulletItem*) &pStyle->GetItemSet().Get( EE_PARA_NUMBULLET );
+
+                SvxNumBulletItem aNumBullet( *pNumBullet );
+                EditEngine::ImportBulletItem( aNumBullet, nLevel, pBullet, pLRSpace );
+                pC->GetParaAttribs().Put( aNumBullet );
+
+                if ( bLRSpaceInPara )
+                    pC->GetParaAttribs().ClearItem( EE_PARA_LRSPACE );
+            }
+        }
+
+        // Symbol-Convertion because of StyleSheet?
+        if ( pStyleSheetPool && pC->GetLoadStoreTempInfos() && pC->GetLoadStoreTempInfos()->aOrgString_Load.Len() )
+        {
+            SfxStyleSheet* pStyle = (SfxStyleSheet*)pStyleSheetPool->Find( pC->GetStyle(), pC->GetFamily() );
+            if ( pStyle )
+            {
+                const SvxFontItem& rFontItem = (const SvxFontItem&)pStyle->GetItemSet().Get( EE_CHAR_FONTINFO );
+                if ( rFontItem.GetCharSet() == RTL_TEXTENCODING_SYMBOL )
+                {
+                    String aConverted( pC->GetLoadStoreTempInfos()->aOrgString_Load, RTL_TEXTENCODING_SYMBOL );
+
+                    // Replace only Parts without hard font attribute, other symbol encoding
+                    // is already done in CreateData()...
+

... etc. - the rest is truncated


More information about the Libreoffice-commits mailing list