/*************************************************************************
 *
 *  $RCSfile: swxmlat.cxx,v $
 *
 *  $Revision: 1.1.1.1 $
 *
 *  last change: $Author: hr $ $Date: 2000/09/18 17:14:59 $
 *
 *  The Contents of this file are made available subject to the terms of
 *  either of the following licenses
 *
 *         - GNU Lesser General Public License Version 2.1
 *         - Sun Industry Standards Source License Version 1.1
 *
 *  Sun Microsystems Inc., October, 2000
 *
 *  GNU Lesser General Public License Version 2.1
 *  =============================================
 *  Copyright 2000 by Sun Microsystems, Inc.
 *  901 San Antonio Road, Palo Alto, CA 94303, USA
 *
 *  This library is free software; you can redistribute it and/or
 *  modify it under the terms of the GNU Lesser General Public
 *  License version 2.1, as published by the Free Software Foundation.
 *
 *  This library is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 *  Lesser General Public License for more details.
 *
 *  You should have received a copy of the GNU Lesser General Public
 *  License along with this library; if not, write to the Free Software
 *  Foundation, Inc., 59 Temple Place, Suite 330, Boston,
 *  MA  02111-1307  USA
 *
 *
 *  Sun Industry Standards Source License Version 1.1
 *  =================================================
 *  The contents of this file are subject to the Sun Industry Standards
 *  Source License Version 1.1 (the "License"); You may not use this file
 *  except in compliance with the License. You may obtain a copy of the
 *  License at http://www.openoffice.org/license.html.
 *
 *  Software provided under this License is provided on an "AS IS" basis,
 *  WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
 *  WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
 *  MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
 *  See the License for the specific provisions governing your rights and
 *  obligations concerning the Software.
 *
 *  The Initial Developer of the Original Code is: Sun Microsystems, Inc.
 *
 *  Copyright: 2000 by Sun Microsystems, Inc.
 *
 *  All Rights Reserved.
 *
 *  Contributor(s): _______________________________________
 *
 *
 ************************************************************************/

#ifdef PRECOMPILED
#include "filt_pch.hxx"
#endif

#pragma hdrstop

#include <hintids.hxx>

#ifndef _RSCSFX_HXX
#include <rsc/rscsfx.hxx>
#endif

#ifndef _RTL_USTRING_HXX_
#include <rtl/ustring.hxx>
#endif
#ifndef _RTL_USTRBUF_HXX_
#include <rtl/ustrbuf.hxx>
#endif

#ifndef _DOC_HXX //autogen wg. SwDoc
#include <doc.hxx>
#endif
#ifndef _FCHRFMT_HXX
#include <fchrfmt.hxx>
#endif
#ifndef _CHARFMT_HXX
#include <charfmt.hxx>
#endif
#ifndef _PARATR_HXX
#include <paratr.hxx>
#endif
#ifndef _PARATR_HXX
#include <paratr.hxx>
#endif
#ifndef _FMTPDSC_HXX
#include <fmtpdsc.hxx>
#endif
#ifndef _FMTTSPLT_HXX 
#include "fmtlsplt.hxx"
#endif
#ifndef _FMTORNT_HXX 
#include "fmtornt.hxx"
#endif
#ifndef _FMTFSIZE_HXX 
#include "fmtfsize.hxx"
#endif
#ifndef _UNOMID_H
#include <unomid.h>
#endif
#ifndef _UNOSTYLE_HXX
#include "unostyle.hxx"
#endif

#ifndef _XMLOFF_XMLUCONV_HXX
#include <xmloff/xmluconv.hxx>
#endif
#ifndef _XMLOFF_NMSPMAP_HXX
#include <xmloff/nmspmap.hxx>
#endif
#ifndef _XMLOFF_XMLKYWD_HXX
#include <xmloff/xmlkywd.hxx>
#endif
#ifndef _XMLOFF_XMLNMSPE_HXX
#include <xmloff/xmlnmspe.hxx>
#endif
#ifndef _XMLOFF_XMLTKMAP_HXX
#include <xmloff/xmltkmap.hxx>
#endif
#ifndef _XMLOFF_I18NMAP_HXX
#include <xmloff/i18nmap.hxx>
#endif

#ifndef _XMLIMP_HXX
#include "xmlimp.hxx"
#endif
#ifndef _XMLDROPI_HXX
#include "xmldropi.hxx"
#endif
#ifndef _XMLDROPE_HXX
#include "xmldrope.hxx"
#endif

using namespace ::rtl;
using namespace ::com::sun::star;
using namespace ::com::sun::star::uno;

#ifdef XML_CORE_API
enum SvXMLTokenMapDropAttrs
{
	XML_TOK_DROP_LINES,
	XML_TOK_DROP_LENGTH,
	XML_TOK_DROP_DISTANCE,
	XML_TOK_DROP_STYLE,
	XML_TOK_DROP_END=XML_TOK_UNKNOWN
};

static __FAR_DATA SvXMLTokenMapEntry aDropAttrTokenMap[] =
{
	{ XML_NAMESPACE_STYLE, sXML_lines, 		XML_TOK_DROP_LINES	},
	{ XML_NAMESPACE_STYLE, sXML_length, 	XML_TOK_DROP_LENGTH	},
	{ XML_NAMESPACE_STYLE, sXML_distance,	XML_TOK_DROP_DISTANCE	},
	{ XML_NAMESPACE_STYLE, sXML_style_name,	XML_TOK_DROP_STYLE	},
	XML_TOKEN_MAP_END 
};

void SwXMLFmtDropImportContext::ProcessAttrs(
		const Reference< xml::sax::XAttributeList >& xAttrList,
	    const SvXMLUnitConverter& rUnitConv )
{
	SvXMLTokenMap aTokenMap( aDropAttrTokenMap );

	sal_Int32 nTmp;
	sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
	for( sal_Int16 i=0; i < nAttrCount; i++ )
	{
		const OUString& rAttrName = xAttrList->getNameByIndex( i );
		OUString aLocalName;
		sal_uInt16 nPrefix =
			GetImport().GetNamespaceMap().GetKeyByAttrName( rAttrName,
															&aLocalName );
		const OUString& rValue = xAttrList->getValueByIndex( i );

		switch( aTokenMap.Get( nPrefix, aLocalName ) )
		{
		case XML_TOK_DROP_LINES:
			if( rUnitConv.convertNumber( nTmp, rValue, 0, 255 ) )
			{
				pItem->GetLines() = nTmp < 2 ? 0 : (sal_Int8)nTmp;
			}
			break;

		case XML_TOK_DROP_LENGTH:
			if( rValue.compareToAscii( sXML_word ) == 0 )
			{
				pItem->GetWholeWord() = sal_True;
				pItem->GetChars() = 1;
			}
			else if( rUnitConv.convertNumber( nTmp, rValue, 1, 255 ) )
			{
				pItem->GetWholeWord() = sal_False;
				pItem->GetChars() = (sal_Int8)nTmp;
			}
			break;
				
		case XML_TOK_DROP_DISTANCE:
			if( rUnitConv.convertMeasure( nTmp, rValue, 0, USHRT_MAX ) )
			{
				pItem->GetDistance() = (sal_uInt16)nTmp;
			}
			break;

		case XML_TOK_DROP_STYLE:
			if( rValue.getLength() )
			{
				SwXMLImport& rImport = (SwXMLImport&)GetImport();
				SvI18NMap& rI18NMap = rImport.GetI18NMap();
				String sName( rI18NMap.Get( SFX_STYLE_FAMILY_CHAR, rValue ) );
				SwCharFmt *pCharFmt =
					rImport.GetDoc().FindCharFmtByName( sName );
				if( pCharFmt )
					pItem->SetCharFmt( pCharFmt );
			}
			break;
		}
	}
	
	if( pItem->GetLines() > 1 && pItem->GetChars() < 1 )
		pItem->GetChars() = 1;
}

SwXMLFmtDropImportContext::SwXMLFmtDropImportContext(
		SwXMLImport& rImport, sal_uInt16 nPrfx,
		const OUString& rLName,
		const Reference< xml::sax::XAttributeList > & xAttrList,
		const SvXMLUnitConverter& rUnitConv,
		const SwFmtDrop& rItem ) :
	SvXMLImportContext( rImport, nPrfx, rLName ),
	pItem( new SwFmtDrop( rItem ) )
{
	// delete any grephic that is existing
	pItem->GetLines() = 0;
	pItem->GetChars() = 0;
	pItem->GetWholeWord() = sal_False;
	pItem->SetCharFmt( 0 );

	ProcessAttrs( xAttrList, rUnitConv );
}

SwXMLFmtDropImportContext::SwXMLFmtDropImportContext(
		SwXMLImport& rImport, sal_uInt16 nPrfx,
		const OUString& rLName,
		const Reference< xml::sax::XAttributeList > & xAttrList,
		const SvXMLUnitConverter& rUnitConv,
		sal_uInt16 ) :
	SvXMLImportContext( rImport, nPrfx, rLName ),
	pItem( new SwFmtDrop() )
{
	ProcessAttrs( xAttrList, rUnitConv );
}

SwXMLFmtDropImportContext::~SwXMLFmtDropImportContext()
{
	delete pItem;
}
#endif

// ---------------------------------------------------------------------

#ifdef XML_CORE_API

OUString SwXMLFmtDropExport::GetQNameByKey( sal_uInt16 nKey, 
								   			const OUString& rLocalName ) const
{
	if( pNamespaceMap )
		return pNamespaceMap->GetQNameByKey( nKey, rLocalName );
	else
		return rLocalName;
}

void SwXMLFmtDropExport::ClearAttrList()
{
	pAttrList->Clear();
}

#ifndef PRODUCT
void SwXMLFmtDropExport::CheckAttrList()
{
	DBG_ASSERT( !pAttrList->getLength(),
				"SwXMLFmtDropExport::CheckAttrList: list is not empty" );
}
#endif

void SwXMLFmtDropExport::AddAttribute( sal_uInt16 nPrefixKey,
									   const sal_Char *pName,
									   const OUString& rValue )
{
	OUString sName( OUString::createFromAscii( pName ) );

	pAttrList->AddAttribute( GetQNameByKey( nPrefixKey, sName ),
							 sCDATA, rValue );
}

SwXMLFmtDropExport::SwXMLFmtDropExport(
		const Reference< xml::sax::XDocumentHandler > & rHandler,
		const SvXMLUnitConverter& rUnitConverter ) :
	sCDATA( OUString::createFromAscii( sXML_CDATA ) ),
	pNamespaceMap( 0 ),
	rUnitConv( rUnitConverter ),
	pAttrList( new SvXMLAttributeList )
{
	xHandler = rHandler;
	xAttrList = pAttrList;
}

SwXMLFmtDropExport::~SwXMLFmtDropExport()
{
}

void SwXMLFmtDropExport::exportXML( const SwFmtDrop& rItem,
								 	const SvXMLNamespaceMap& rNamespaceMap )
{
	pNamespaceMap = &rNamespaceMap;

	CheckAttrList();

	OUString sValue;
	OUStringBuffer sBuffer;
	sal_Int8 nLines = rItem.GetLines();
	if( nLines > 1 )
	{
		// style:lines
		rUnitConv.convertNumber( sBuffer, (sal_Int32)nLines );
		AddAttribute( XML_NAMESPACE_STYLE, sXML_lines,
					  sBuffer.makeStringAndClear() );
		
		// style:length
		if( rItem.GetWholeWord() )
		{
			sValue = OUString::createFromAscii(sXML_word);
		}
		else if( rItem.GetChars() > 1 )
		{
			rUnitConv.convertNumber( sBuffer, (sal_Int32)rItem.GetChars() );
			sValue = sBuffer.makeStringAndClear();
		}
		if( sValue.getLength() )
			AddAttribute( XML_NAMESPACE_STYLE, sXML_length, sValue );

		// style:distance
		if( rItem.GetDistance() > 0 )
		{
			rUnitConv.convertMeasure( sBuffer, rItem.GetDistance() );
			AddAttribute( XML_NAMESPACE_STYLE, sXML_distance,
						  sBuffer.makeStringAndClear() );
		}
		
		// style:style-name
		const SwCharFmt *pCharFmt = rItem.GetCharFmt();
		if( pCharFmt )
			AddAttribute( XML_NAMESPACE_STYLE, sXML_style_name,
				  SwXStyleFamilies::GetProgrammaticName( pCharFmt->GetName(),
													 SFX_STYLE_FAMILY_CHAR ) );
	}

	OUString sElem = GetQNameByKey( XML_NAMESPACE_STYLE,
									OUString::createFromAscii(sXML_drop_cap) );
	xHandler->startElement( sElem, xAttrList );
	ClearAttrList();
	xHandler->endElement( sElem );
	
	pNamespaceMap = 0;
}
#endif

sal_Bool SwFmtDrop::equalsXML( const SfxPoolItem& rItem ) const
{
#ifdef XML_CORE_API
	// Everything except pDefinedIn must be the same.
	return ( nLines == ((SwFmtDrop&)rItem).GetLines() &&
			 nChars == ((SwFmtDrop&)rItem).GetChars() &&
			 nDistance ==  ((SwFmtDrop&)rItem).GetDistance() &&
			 bWholeWord == ((SwFmtDrop&)rItem).GetWholeWord() &&
			 GetCharFmt() == ((SwFmtDrop&)rItem).GetCharFmt() );
#else
	ASSERT( !this, "obsolete implementation!" );
	return sal_True;
#endif
}

// ---------------------------------------------------------------------

sal_Bool SwRegisterItem::importXML( const OUString& rValue, sal_uInt16,
									const SvXMLUnitConverter& rUnitConverter )
{
#ifdef XML_CORE_API
	sal_Bool bValue;
	sal_Bool bRet = rUnitConverter.convertBool( bValue, rValue );
	if( bRet )
		SetValue( bValue );

	return bRet;
#else
	ASSERT( !this, "obsolete implementation!" );
	return sal_False;
#endif
}

sal_Bool SwRegisterItem::exportXML(
		OUString& rValue, sal_uInt16,
		const SvXMLUnitConverter& rUnitConverter ) const
{
#ifdef XML_CORE_API
	OUStringBuffer aOut;

	rUnitConverter.convertBool( aOut, GetValue() );
	rValue = aOut.makeStringAndClear();

	return sal_True;
#else
	ASSERT( !this, "obsolete implementation!" );
	return sal_True;
#endif
}

// ---------------------------------------------------------------------

sal_Bool SwNumRuleItem::equalsXML( const SfxPoolItem& rItem ) const
{
#ifdef XML_CORE_API
	// Everything except pDefinedIn must be the same.
	return GetValue() == ((SwNumRuleItem&)rItem).GetValue();
#else
	ASSERT( !this, "obsolete implementation!" );
	return sal_True;
#endif
}

// ---------------------------------------------------------------------

sal_Bool SwFmtPageDesc::equalsXML( const SfxPoolItem& rItem ) const
{
#ifdef XML_CORE_API
	// Everything except pDefinedIn must be the same.
	return ( nNumOffset == ((SwFmtPageDesc&)rItem).nNumOffset ) &&
		   ( GetPageDesc() == ((SwFmtPageDesc&)rItem).GetPageDesc() );
#else
	ASSERT( !this, "obsolete implementation!" );
	return sal_True;
#endif
}

// ---------------------------------------------------------------------

sal_Bool SwFmtCharFmt::exportXML( OUString& rValue, sal_uInt16,
							  const SvXMLUnitConverter& ) const
{
#ifdef XML_CORE_API
	const SwCharFmt *pCharFmt = GetCharFmt();
	rValue = SwXStyleFamilies::GetProgrammaticName( pCharFmt->GetName(),
													SFX_STYLE_FAMILY_CHAR );

	return sal_True;
#else
	ASSERT( !this, "obsolete implementation!" );
	return sal_True;
#endif
}

// ---------------------------------------------------------------------

sal_Bool SwFmtLayoutSplit::importXML( const OUString& rValue, sal_uInt16,
								  	  const SvXMLUnitConverter& rUnitConverter )
{
	sal_Bool bValue;
	sal_Bool bRet = rUnitConverter.convertBool( bValue, rValue );
	if( bRet )
		SetValue( bValue );

	return bRet;
}

sal_Bool SwFmtLayoutSplit::exportXML(
		OUString& rValue, sal_uInt16,
		const SvXMLUnitConverter& rUnitConverter ) const
{
	OUStringBuffer aOut;

	rUnitConverter.convertBool( aOut, GetValue() );
	rValue = aOut.makeStringAndClear();

	return sal_True;
}

// ---------------------------------------------------------------------

static __FAR_DATA SvXMLEnumMapEntry aXMLTableAlignMap[] =
{
	{ sXML_left,				HORI_LEFT			},
	{ sXML_left,				HORI_LEFT_AND_WIDTH	},
	{ sXML_center, 				HORI_CENTER			},
	{ sXML_right, 				HORI_RIGHT			},
	{ sXML_margins, 			HORI_FULL			},
	{ sXML_margins,				HORI_NONE			},
	{ 0,        0 }
};

sal_Bool SwFmtHoriOrient::importXML( const OUString& rValue, sal_uInt16,
								  	 const SvXMLUnitConverter& rUnitConverter )
{
	sal_uInt16 nValue;
	sal_Bool bRet = rUnitConverter.convertEnum( nValue, rValue,
												aXMLTableAlignMap );
	if( bRet )
		SetHoriOrient( (SwHoriOrient)nValue );

	return bRet;
}

sal_Bool SwFmtHoriOrient::exportXML(
		OUString& rValue, sal_uInt16,
		const SvXMLUnitConverter& rUnitConverter ) const
{
	OUStringBuffer aOut;

	rUnitConverter.convertEnum( aOut, GetHoriOrient(), aXMLTableAlignMap );
	rValue = aOut.makeStringAndClear();

	return sal_True;
}

// ---------------------------------------------------------------------

static __FAR_DATA SvXMLEnumMapEntry aXMLTableVAlignMap[] =
{
	{ sXML_top,					VERT_TOP		},
	{ sXML_middle,				VERT_CENTER		},
	{ sXML_bottom, 				VERT_BOTTOM		},
	{ 0,        0 }
};

sal_Bool SwFmtVertOrient::importXML( const OUString& rValue, sal_uInt16,
								  	 const SvXMLUnitConverter& rUnitConverter )
{
	sal_uInt16 nValue;
	sal_Bool bRet =
		rUnitConverter.convertEnum( nValue, rValue,aXMLTableVAlignMap );
	if( bRet )
		SetVertOrient( (SwVertOrient)nValue );

	return bRet;
}

sal_Bool SwFmtVertOrient::exportXML(
		OUString& rValue, sal_uInt16,
		const SvXMLUnitConverter& rUnitConverter ) const
{
	OUStringBuffer aOut;

	rUnitConverter.convertEnum( aOut, GetVertOrient(), aXMLTableVAlignMap );
	rValue = aOut.makeStringAndClear();

	return sal_True;
}

// ---------------------------------------------------------------------

sal_Bool SwFmtFrmSize::importXML( const OUString& rValue, sal_uInt16 nMemberId,
								  const SvXMLUnitConverter& rUnitConverter )
{
	sal_Bool bRet = sal_False;
	sal_Bool bSetHeight = sal_False;
	sal_Bool bSetWidth = sal_False;
	sal_Bool bSetSizeType = sal_False;
	SwFrmSize eSizeType = ATT_VAR_SIZE;

	switch( nMemberId )
	{
	case MID_FRMSIZE_REL_WIDTH:
		{
			sal_Int32 nValue;
			bRet = rUnitConverter.convertPercent( nValue, rValue );
			if( bRet )
			{
				if( nValue < 1 )
					nValue = 1;
				else if( nValue > 100 )
					nValue = 100;

				SetWidthPercent( (sal_Int8)nValue );
			}
		}
		break;
	case MID_FRMSIZE_WIDTH:
		bSetWidth = sal_True;
		break;
	case MID_FRMSIZE_MIN_HEIGHT:
		eSizeType = ATT_MIN_SIZE;
		bSetHeight = sal_True;
		bSetSizeType = sal_True;
		break;
	case MID_FRMSIZE_FIX_HEIGHT:
		eSizeType = ATT_FIX_SIZE;
		bSetHeight = sal_True;
		bSetSizeType = sal_True;
		break;
	case MID_FRMSIZE_COL_WIDTH:
		eSizeType = ATT_FIX_SIZE;
		bSetWidth = sal_True;
		bSetSizeType = sal_True;
		break;
	case MID_FRMSIZE_REL_COL_WIDTH:
		{
			sal_Int32 nPos = rValue.indexOf( (sal_Unicode)'*' );
			if( -1L != nPos )
			{
				OUString sNum( rValue.copy( 0L, nPos ) );
				sal_Int32 nValue = rValue.toInt32();
				if( nValue < MINLAY )
					nValue = MINLAY;
				else if( nValue > USHRT_MAX )
					nValue = USHRT_MAX;

				SetWidth( (sal_uInt16)nValue );
				SetSizeType( ATT_VAR_SIZE );
				bRet = sal_True;
			}
		}
		break;
	}

	sal_Int32 nValue;
	if( bSetHeight || bSetWidth )
	{
		bRet = rUnitConverter.convertMeasure( nValue, rValue, MINLAY,
											  USHRT_MAX );
		if( bRet )
		{
			if( bSetWidth )
				SetWidth( (sal_uInt16)nValue );
			if( bSetHeight )
				SetHeight( (sal_uInt16)nValue );
			if( bSetSizeType )
				SetSizeType( eSizeType );
		}
	}
	return bRet;
}

sal_Bool SwFmtFrmSize::exportXML(
		OUString& rValue, sal_uInt16 nMemberId,
		const SvXMLUnitConverter& rUnitConverter ) const
{
	sal_Bool bRet = sal_False;
	sal_Bool bOutHeight = sal_False;
	switch( nMemberId )
	{
	case MID_FRMSIZE_REL_WIDTH:
		if( GetWidthPercent() )
		{
			OUStringBuffer aOut;
			rUnitConverter.convertPercent( aOut, GetWidthPercent() );
			rValue = aOut.makeStringAndClear();
			bRet = sal_True;
		}
		break;
	case MID_FRMSIZE_MIN_HEIGHT:
		if( ATT_MIN_SIZE == GetSizeType() )
			bOutHeight = sal_True;
		break;
	case MID_FRMSIZE_FIX_HEIGHT:
		if( ATT_FIX_SIZE == GetSizeType() )
			bOutHeight = sal_True;
		break;
	}

	if( bOutHeight )
	{
		OUStringBuffer aOut;
		rUnitConverter.convertMeasure( aOut, GetHeight() );
		rValue = aOut.makeStringAndClear();
		bRet = sal_True;
	}

	return bRet;
}

/*************************************************************************

	  Source Code Control System - Header

	  $Header: /cvs/oo/sw/sw/source/filter/xml/swxmlat.cxx,v 1.1.1.1 2000/09/18 17:14:59 hr Exp $

	  Source Code Control System - Update

	  $Log: swxmlat.cxx,v $
	  Revision 1.1.1.1  2000/09/18 17:14:59  hr
	  initial import
	
	  Revision 1.32  2000/09/18 16:05:04  willem.vandorp
	  OpenOffice header added.
	
	  Revision 1.31  2000/08/29 07:33:47  mib
	  text import continued
	
	  Revision 1.30  2000/08/10 10:22:15  mib
	  #74404#: Adeptions to new XSL/XLink working draft
	
	  Revision 1.29  2000/08/02 14:52:38  mib
	  text export continued
	
	  Revision 1.28  2000/07/26 09:03:59  mib
	  call to convertNummber now unique
	
	  Revision 1.27  2000/06/08 09:45:54  aw
	  changed to use functionality from xmloff project now
	
	  Revision 1.26  2000/05/03 12:08:05  mib
	  unicode
	
	  Revision 1.25  2000/03/13 14:33:44  mib
	  UNO3
	
	  Revision 1.24  2000/02/17 14:40:30  mib
	  #70271#: XML table import
	
	  Revision 1.22  2000/02/07 10:03:28  mib
	  #70271#: tables
	
	  Revision 1.21  2000/01/20 10:03:15  mib
	  #70271#: Lists reworked
	
	  Revision 1.20  1999/12/14 07:33:26  mib
	  #70271#: XML import/export of drop cap/register/language item, splitted swxmlat
	
	  Revision 1.19  1999/12/13 08:29:07  mib
	  #70271#: Support for element items added, background and brush item
	
	  Revision 1.18  1999/12/08 10:43:24  cl
	  #70271# fixed the getitem
	
	  Revision 1.17  1999/12/06 11:41:33  mib
	  #70258#: Container item for unkown attributes
	
	  Revision 1.16  1999/12/04 16:52:39  cl
	  #70271# added support for exporting tab-stop elements
	
	  Revision 1.15  1999/11/15 13:18:41  mib
	  additional SfxPoolItems
	
	  Revision 1.14  1999/11/12 14:49:23  mib
	  removed obsolete importXML
	
	  Revision 1.13  1999/11/12 11:43:03  mib
	  using item mapper, part iii
	
	  Revision 1.12  1999/11/10 15:08:09  mib
	  Import now uses XMLItemMapper
	
	  Revision 1.11  1999/11/09 15:40:08  mib
	  Using XMLItemMapper for export
	
	  Revision 1.10  1999/11/01 11:38:50  mib
	  List style import
	
	  Revision 1.9  1999/10/26 13:33:29  mib
	  list styles continued
	
	  Revision 1.8  1999/10/15 12:35:49  mib
	  moved adding of length/percentage values to XMLExportHelper class
	
	  Revision 1.7  1999/10/08 11:47:02  mib
	  moved some file to SVTOOLS/SVX
	
	  Revision 1.6  1999/09/28 08:30:54  mib
	  char fmts, hints
	
	  Revision 1.5  1999/09/23 11:53:53  mib
	  i18n, token maps and hard paragraph attributes
	
	  Revision 1.4  1999/08/19 12:57:08  MIB
	  attribute import added
	

	  Rev 1.3   19 Aug 1999 14:57:08   MIB
   attribute import added

	  Rev 1.2   13 Aug 1999 16:19:42   MIB
   styles and sections

	  Rev 1.1   12 Aug 1999 18:05:20   MIB
   Export ofSvxFontItem, SvxFontHeightItem and SvxLRSpaceItem

	  Rev 1.0   12 Aug 1999 12:31:36   MIB
   Initial revision.

*************************************************************************/

