summaryrefslogtreecommitdiff
path: root/sw/source/filter/xml/xmlfmte.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'sw/source/filter/xml/xmlfmte.cxx')
-rw-r--r--sw/source/filter/xml/xmlfmte.cxx1144
1 files changed, 1144 insertions, 0 deletions
diff --git a/sw/source/filter/xml/xmlfmte.cxx b/sw/source/filter/xml/xmlfmte.cxx
new file mode 100644
index 000000000000..ebac28eab0ff
--- /dev/null
+++ b/sw/source/filter/xml/xmlfmte.cxx
@@ -0,0 +1,1144 @@
+/*************************************************************************
+ *
+ * $RCSfile: xmlfmte.cxx,v $
+ *
+ * $Revision: 1.1.1.1 $
+ *
+ * last change: $Author: hr $ $Date: 2000-09-18 17:15:00 $
+ *
+ * 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
+
+#ifndef _HINTS_HXX //autogen wg. SwFmtChg
+#include <hints.hxx>
+#endif
+
+#ifndef _COM_SUN_STAR_TEXT_XTEXTDOCUMENT_HPP_
+#include <com/sun/star/text/XTextDocument.hpp>
+#endif
+
+#ifndef _COM_SUN_STAR_TEXT_XTEXT_HPP_
+#include <com/sun/star/text/XText.hpp>
+#endif
+#ifndef _RTL_USTRBUF_HXX_
+#include <rtl/ustrbuf.hxx>
+#endif
+
+#ifndef _SVSTDARR_STRINGSSORT_DECL
+#define _SVSTDARR_STRINGSSORT
+#include <svtools/svstdarr.hxx>
+#endif
+
+#ifndef _XMLOFF_XMLNMSPE_HXX
+#include <xmloff/xmlnmspe.hxx>
+#endif
+
+#ifndef _XMLOFF_ATTRLIST_HXX
+#include <xmloff/attrlist.hxx>
+#endif
+
+#ifndef _XMLOFF_XMLASTPL_HXX
+#include <xmloff/xmlastpl.hxx>
+#endif
+
+#ifndef _XMLOFF_XMLITMPR_HXX
+#include <xmloff/xmlexpit.hxx>
+#endif
+
+#ifndef _XMLOFF_XMLKYWD_HXX
+#include <xmloff/xmlkywd.hxx>
+#endif
+
+#ifndef _XMLOFF_NMSPMAP_HXX
+#include <xmloff/nmspmap.hxx>
+#endif
+
+#ifndef _XMLOFF_TXTSTYLE_HXX
+#include <xmloff/txtstyle.hxx>
+#endif
+
+#ifndef _XMLOFF_XMLPROPERTYSETMAPPER_HXX
+#include <xmloff/xmlprmap.hxx>
+#endif
+#ifndef _XMLOFF_XMLPROPMAPPINGTYPES_HXX
+#include <xmloff/maptype.hxx>
+#endif
+#ifndef _XMLOFF_XMLTYPES_HXX
+#include <xmloff/xmltypes.hxx>
+#endif
+#ifndef _XMLOFF_TXTPARAE_HXX
+#include <xmloff/txtparae.hxx>
+#endif
+#ifndef _XMLOFF_TXTPRMAP_HXX
+#include <xmloff/txtprmap.hxx>
+#endif
+#ifndef _XMLOFF_XMLEXPPR_HXX
+#include <xmloff/xmlexppr.hxx>
+#endif
+#ifndef _XMLOFF_XMLASTPLP_HXX
+#include <xmloff/xmlaustp.hxx>
+#endif
+#ifndef _XMLOFF_FAMILIES_HXX_
+#include <xmloff/families.hxx>
+#endif
+
+#ifndef _FORMAT_HXX //autogen wg. SwFmt
+#include <format.hxx>
+#endif
+#ifndef _FMTCOL_HXX //autogen wg. SwTxtFmtColl
+#include <fmtcol.hxx>
+#endif
+#ifndef _CHARFMT_HXX //autogen wg. SwCharFmt
+#include <charfmt.hxx>
+#endif
+#ifndef _PARATR_HXX
+#include <paratr.hxx>
+#endif
+
+#ifndef _DOC_HXX //autogen wg. SwDoc
+#include <doc.hxx>
+#endif
+#include "docary.hxx"
+#ifndef _NDTXT_HXX //autogen wg. SwTxtNode
+#include <ndtxt.hxx>
+#endif
+#ifndef _SECTION_HXX //autogen wg. SwSection
+#include <section.hxx>
+#endif
+#ifndef _PAM_HXX //autogen wg. SwPaM
+#include <pam.hxx>
+#endif
+#ifndef _TXATBASE_HXX
+#include <txatbase.hxx>
+#endif
+#ifndef _XMLEXP_HXX
+#include "xmlexp.hxx"
+#endif
+#ifndef _XMLECTXT_HXX
+#include "xmlectxt.hxx"
+#endif
+#ifndef _XMLFMTE_HXX
+#include "xmlfmte.hxx"
+#endif
+#ifndef _XMLTEXTE_HXX
+#include "xmltexte.hxx"
+#endif
+
+#ifndef _SWDOCSH_HXX
+#include "docsh.hxx"
+#endif
+#ifndef _COM_SUN_STAR_FRAME_XMODEL_HPP_
+#include <com/sun/star/frame/XModel.hpp>
+#endif
+#ifndef _XMLOFF_XMLUCONV_HXX
+#include <xmloff/xmluconv.hxx>
+#endif
+#ifndef XML_CORE_API
+#ifndef _XMLOFF_XMLTEXTLISTAUTOSTYLEPOOL_HXX
+#include <xmloff/XMLTextListAutoStylePool.hxx>
+#endif
+#endif
+
+#ifndef _COM_SUN_STAR_TEXT_XTEXTFIELD_HPP_
+#include <com/sun/star/text/XTextField.hpp>
+#endif
+
+#ifndef _UNOFIELD_HXX
+#include <unofield.hxx>
+#endif
+
+#ifndef _XMLOFF_TXTFLDE_HXX
+#include <xmloff/txtflde.hxx>
+#endif
+
+#ifndef _XMLOFF_XMLNUMFE_HXX
+#include <xmloff/xmlnumfe.hxx>
+#endif
+
+#ifndef _UNOSTYLE_HXX
+#include "unostyle.hxx"
+#endif
+
+
+using namespace rtl;
+using namespace ::com::sun::star;
+using namespace ::com::sun::star::xml::sax;
+using namespace ::com::sun::star::style;
+using namespace ::com::sun::star::frame;
+using namespace ::com::sun::star::uno;
+using namespace ::com::sun::star::lang;
+using namespace ::com::sun::star::text;
+
+void SwXMLExport::ExportFmt( const SwFmt& rFmt, const char *pFamily )
+{
+ // <style:style ...>
+ CheckAttrList();
+
+ // style:family="..."
+ const sal_Char *pStr = pFamily;
+#ifdef XML_CORE_API
+ SfxStyleFamily eFamily = SFX_STYLE_FAMILY_ALL;
+ switch( rFmt.Which() )
+ {
+ case RES_CHRFMT:
+ if( !pStr )
+ pStr = sXML_text;
+ eFamily = SFX_STYLE_FAMILY_CHAR;
+ break;
+ case RES_FRMFMT:
+ if( !pStr )
+ pStr = sXML_frame;
+ eFamily = SFX_STYLE_FAMILY_FRAME;
+ break;
+ case RES_TXTFMTCOLL:
+ case RES_CONDTXTFMTCOLL:
+ if( !pStr )
+ pStr = sXML_paragraph;
+ eFamily = SFX_STYLE_FAMILY_PARA;
+ break;
+ case RES_FLYFRMFMT:
+ case RES_GRFFMTCOLL:
+ DBG_ASSERT( pStr, "SwXMLExport::ExportFmt: which id unexpected" );
+ break;
+ default:
+ DBG_ASSERT( pStr, "SwXMLExport::ExportFmt: which id unknown" );
+ break;
+ }
+ // style:name="..."
+ AddAttribute( XML_NAMESPACE_STYLE, sXML_name,
+ SwXStyleFamilies::GetProgrammaticName( rFmt.GetName(), eFamily ) );
+#else
+ DBG_ASSERT( RES_FRMFMT==rFmt.Which(), "frame format expected" );
+ if( RES_FRMFMT != rFmt.Which() )
+ return;
+ DBG_ASSERT( pStr, "family must be specified" );
+ // style:name="..."
+ AddAttribute( XML_NAMESPACE_STYLE, sXML_name, rFmt.GetName() );
+#endif
+
+ if( pStr )
+ AddAttributeASCII( XML_NAMESPACE_STYLE, sXML_family, pStr );
+
+#ifdef XML_CORE_API
+ // register name to prevent it from beeing reused as an automtic
+ // style name
+ if( SFX_STYLE_FAMILY_ALL != eFamily )
+ pItemSetAutoStylePool->RegisterName( eFamily, rFmt.GetName() );
+#endif
+
+ // style:parent-style-name="..." (if its not the default only)
+ const SwFmt* pParent = rFmt.DerivedFrom();
+ // Parent-Namen nur uebernehmen, wenn kein Default
+ if( pParent && !pParent->IsDefault() )
+ {
+#ifdef XML_CORE_API
+ AddAttribute( XML_NAMESPACE_STYLE, sXML_parent_style_name,
+ SwXStyleFamilies::GetProgrammaticName( pParent->GetName(),
+ eFamily ) );
+#else
+ AddAttribute( XML_NAMESPACE_STYLE, sXML_parent_style_name,
+ pParent->GetName() );
+#endif
+ }
+
+#ifdef XML_CORE_API
+ // style:next-style-name="..."
+ // (if its not the default and not the same style only)
+ if( RES_TXTFMTCOLL == rFmt.Which() || RES_CONDTXTFMTCOLL == rFmt.Which() )
+ {
+ const SwTxtFmtColl& rFollow =
+ ((const SwTxtFmtColl&)rFmt).GetNextTxtFmtColl();
+ if( !rFollow.IsDefault() && &rFollow != &rFmt )
+ {
+ AddAttribute( XML_NAMESPACE_STYLE, sXML_next_style_name,
+ SwXStyleFamilies::GetProgrammaticName( rFollow.GetName(),
+ eFamily ) );
+ }
+ }
+
+#if 0
+ // style:pool-id="..."
+ if( USHRT_MAX != rFmt.GetPoolFmtId() )
+ {
+ OUStringBuffer sTmp( 5L );
+ sTmp.append( (sal_Int32)rFmt.GetPoolFmtId() );
+ AddAttribute( XML_NAMESPACE_STYLE, sXML_pool_id,
+ sTmp.makeStringAndClear() );
+ }
+
+ // style:help-file-name="..." and style:help-id="..."
+ if( UCHAR_MAX != rFmt.GetPoolHlpFileId() )
+ {
+ AddAttribute( XML_NAMESPACE_STYLE, sXML_help_file_name,
+ *pDoc->GetDocPattern( rFmt.GetPoolHlpFileId() ) );
+ OUStringBuffer sTmp( 5L );
+ sTmp.append( (sal_Int32)rFmt.GetPoolHelpId() );
+ AddAttribute( XML_NAMESPACE_STYLE, sXML_help_id,
+ sTmp.makeStringAndClear() );
+ }
+#endif
+
+ // style:auto-update="..."
+ if( rFmt.IsAutoUpdateFmt() )
+ {
+ AddAttributeASCII( XML_NAMESPACE_STYLE, sXML_auto_update, sXML_true );
+ }
+
+ // text:list-style-name
+ if( RES_TXTFMTCOLL == rFmt.Which() || RES_CONDTXTFMTCOLL == rFmt.Which() )
+ {
+ const SfxPoolItem *pItem;
+ if( SFX_ITEM_SET == rFmt.GetAttrSet().GetItemState( RES_PARATR_NUMRULE,
+ sal_False, &pItem ) )
+ {
+ AddAttribute( XML_NAMESPACE_STYLE, sXML_list_style_name,
+ SwXStyleFamilies::GetProgrammaticName(
+ ((const SwNumRuleItem *)pItem)->GetValue(),
+ SFX_STYLE_FAMILY_PSEUDO ) );
+ }
+ }
+#else
+ ASSERT( USHRT_MAX == rFmt.GetPoolFmtId(), "pool ids arent'supported" );
+ ASSERT( UCHAR_MAX == rFmt.GetPoolHlpFileId(), "help ids aren't supported" );
+#endif
+
+ {
+ SvXMLElementExport aElem( *this, XML_NAMESPACE_STYLE, sXML_style,
+ sal_True, sal_True );
+
+#ifdef XML_CORE_API
+ switch( rFmt.Which() )
+ {
+ case RES_TXTFMTCOLL:
+ case RES_CONDTXTFMTCOLL:
+ case RES_CHRFMT:
+ GetParaItemMapper().exportXML( GetDocHandler(),
+ rFmt.GetAttrSet(),
+ GetTwipUnitConverter(),
+ GetNamespaceMap(),
+ XML_EXPORT_FLAG_IGN_WS );
+ break;
+ case RES_FRMFMT:
+ {
+#endif
+ SvXMLItemMapEntriesRef xItemMap;
+ if( sXML_table == pStr )
+ xItemMap = xTableItemMap;
+ else if( sXML_table_row == pStr )
+ xItemMap = xTableRowItemMap;
+ else if( sXML_table_cell == pStr )
+ xItemMap = xTableCellItemMap;
+
+ if( xItemMap.Is() )
+ {
+ SvXMLExportItemMapper& rItemMapper = GetTableItemMapper();
+ rItemMapper.setMapEntries( xItemMap );
+
+ GetTableItemMapper().exportXML( GetDocHandler(),
+ rFmt.GetAttrSet(),
+ GetTwipUnitConverter(),
+ GetNamespaceMap(),
+ XML_EXPORT_FLAG_IGN_WS );
+ }
+#ifdef XML_CORE_API
+ }
+ break;
+ default:
+ DBG_ASSERT( !this,
+ "SwXMLExport::ExportFmt: attribute export missing" );
+ break;
+ }
+
+ if( RES_CONDTXTFMTCOLL == rFmt.Which() )
+ {
+ const SwFmtCollConditions& rConditions =
+ ((SwConditionTxtFmtColl&)rFmt). GetCondColls();
+ for( sal_uInt16 i=0; i < rConditions.Count(); i++ )
+ {
+ const SwCollCondition& rCond = *rConditions[i];
+
+ const sal_Char *pFunc = 0;
+ OUStringBuffer sBuffer( 20 );
+ switch( rCond.GetCondition() )
+ {
+ case PARA_IN_LIST:
+ pFunc = sXML_list_level;
+ sBuffer.append( (sal_Int32)(rCond.GetSubCondition()+1) );
+ break;
+ case PARA_IN_OUTLINE:
+ pFunc = sXML_outline_level;
+ sBuffer.append( (sal_Int32)(rCond.GetSubCondition()+1) );
+ break;
+ case PARA_IN_FRAME:
+ pFunc = sXML_text_box;
+ break;
+ case PARA_IN_TABLEHEAD:
+ pFunc = sXML_table_header;
+ break;
+ case PARA_IN_TABLEBODY:
+ pFunc = sXML_table;
+ break;
+ case PARA_IN_SECTION:
+ pFunc = sXML_section;
+ break;
+ case PARA_IN_FOOTENOTE:
+ pFunc = sXML_footnote;
+ break;
+ case PARA_IN_FOOTER:
+ pFunc = sXML_footer;
+ break;
+ case PARA_IN_HEADER:
+ pFunc = sXML_header;
+ break;
+ case PARA_IN_ENDNOTE:
+ pFunc = sXML_endnote;
+ break;
+ }
+ OUString sVal( sBuffer.makeStringAndClear() );
+
+ DBG_ASSERT( pFunc, "SwXMLExport::ExportFmt: unknon condition" );
+ if( pFunc )
+ {
+ sBuffer.appendAscii( pFunc );
+ sBuffer.append( (sal_Unicode)'(' );
+ sBuffer.append( (sal_Unicode)')' );
+ if( sVal.getLength() )
+ {
+ sBuffer.append( (sal_Unicode)'=' );
+ sBuffer.append( sVal );
+ }
+
+ AddAttribute( XML_NAMESPACE_STYLE, sXML_condition,
+ sBuffer.makeStringAndClear() );
+ const String& rName =
+ SwXStyleFamilies::GetProgrammaticName(
+ rCond.GetTxtFmtColl()->GetName(),
+ SFX_STYLE_FAMILY_PARA );
+ AddAttribute( XML_NAMESPACE_STYLE, sXML_apply_style_name,
+ rName );
+ SvXMLElementExport aElem( *this, XML_NAMESPACE_STYLE,
+ sXML_map, sal_True, sal_True );
+ }
+ }
+ }
+#endif
+ }
+}
+
+#ifndef XML_CORE_API
+
+SwXMLTextParagraphExport::SwXMLTextParagraphExport(
+ SwXMLExport& rExp,
+ SvXMLAutoStylePoolP& rAutoStylePool ) :
+ XMLTextParagraphExport( rExp, rAutoStylePool ),
+ sTextTable( RTL_CONSTASCII_USTRINGPARAM( "TextTable" ) )
+{
+}
+
+SwXMLTextParagraphExport::~SwXMLTextParagraphExport()
+{
+}
+
+void SwXMLTextParagraphExport::exportStyleContent(
+ const Reference< XStyle > & rStyle )
+{
+
+ const SwXStyle* pStyle = 0;
+ Reference<XUnoTunnel> xStyleTunnel( rStyle, UNO_QUERY);
+ if( xStyleTunnel.is() )
+ {
+ pStyle = (SwXStyle*)xStyleTunnel->getSomething(
+ SwXStyle::getUnoTunnelId() );
+ }
+ if( pStyle && SFX_STYLE_FAMILY_PARA == pStyle->GetFamily() )
+ {
+ const SwDoc& rDoc = ((SwXMLExport&)GetExport()).GetDoc();
+ const SwTxtFmtColl *pColl =
+ rDoc.FindTxtFmtCollByName( SwXStyleFamilies::GetUIName( pStyle->GetStyleName(), SFX_STYLE_FAMILY_PARA ) );
+ ASSERT( pColl, "There is the text collection?" );
+ if( pColl && RES_CONDTXTFMTCOLL == pColl->Which() )
+ {
+ const SwFmtCollConditions& rConditions =
+ ((const SwConditionTxtFmtColl *)pColl)->GetCondColls();
+ for( sal_uInt16 i=0; i < rConditions.Count(); i++ )
+ {
+ const SwCollCondition& rCond = *rConditions[i];
+
+ const sal_Char *pFunc = 0;
+ OUStringBuffer sBuffer( 20 );
+ switch( rCond.GetCondition() )
+ {
+ case PARA_IN_LIST:
+ pFunc = sXML_list_level;
+ sBuffer.append( (sal_Int32)(rCond.GetSubCondition()+1) );
+ break;
+ case PARA_IN_OUTLINE:
+ pFunc = sXML_outline_level;
+ sBuffer.append( (sal_Int32)(rCond.GetSubCondition()+1) );
+ break;
+ case PARA_IN_FRAME:
+ pFunc = sXML_text_box;
+ break;
+ case PARA_IN_TABLEHEAD:
+ pFunc = sXML_table_header;
+ break;
+ case PARA_IN_TABLEBODY:
+ pFunc = sXML_table;
+ break;
+ case PARA_IN_SECTION:
+ pFunc = sXML_section;
+ break;
+ case PARA_IN_FOOTENOTE:
+ pFunc = sXML_footnote;
+ break;
+ case PARA_IN_FOOTER:
+ pFunc = sXML_footer;
+ break;
+ case PARA_IN_HEADER:
+ pFunc = sXML_header;
+ break;
+ case PARA_IN_ENDNOTE:
+ pFunc = sXML_endnote;
+ break;
+ }
+ OUString sVal( sBuffer.makeStringAndClear() );
+
+ DBG_ASSERT( pFunc, "SwXMLExport::ExportFmt: unknon condition" );
+ if( pFunc )
+ {
+ sBuffer.appendAscii( pFunc );
+ sBuffer.append( (sal_Unicode)'(' );
+ sBuffer.append( (sal_Unicode)')' );
+ if( sVal.getLength() )
+ {
+ sBuffer.append( (sal_Unicode)'=' );
+ sBuffer.append( sVal );
+ }
+
+ GetExport().AddAttribute( XML_NAMESPACE_STYLE,
+ sXML_condition,
+ sBuffer.makeStringAndClear() );
+ const String& rName =
+ SwXStyleFamilies::GetProgrammaticName(
+ rCond.GetTxtFmtColl()->GetName(),
+ SFX_STYLE_FAMILY_PARA );
+ GetExport().AddAttribute( XML_NAMESPACE_STYLE,
+ sXML_apply_style_name, rName );
+ SvXMLElementExport aElem( GetExport(), XML_NAMESPACE_STYLE,
+ sXML_map, sal_True, sal_True );
+ }
+ }
+ }
+ }
+}
+
+#endif
+
+void SwXMLExport::_ExportStyles( sal_Bool bUsed )
+{
+#ifdef XML_CORE_API
+ // text collections
+ SvStringsSort *pCollNames = bUsed ? new SvStringsSort : 0;
+ sal_uInt16 nCount = pDoc->GetTxtFmtColls()->Count();
+ sal_uInt16 i;
+ for( i=0; i<nCount; i++ )
+ {
+ const SwTxtFmtColl *pColl = (*pDoc->GetTxtFmtColls())[i];
+ if( ( !bUsed || pDoc->IsUsed( *pColl ) ) && !pColl->IsDefault() )
+ {
+ ExportFmt( *pColl );
+ if( pCollNames )
+ pCollNames->Insert( (String *)&pColl->GetName() );
+ }
+ }
+ if( bUsed )
+ {
+ // Even if some next styles have not been used, they have to be
+ // exported.
+ for( i = 0; i < nCount; i++ )
+ {
+ const SwTxtFmtColl* pColl = (*pDoc->GetTxtFmtColls())[ i ];
+ if( pColl != &pColl->GetNextTxtFmtColl() &&
+ !pCollNames->Seek_Entry(
+ (String *)&pColl->GetNextTxtFmtColl().GetName() ) )
+ {
+ ExportFmt( pColl->GetNextTxtFmtColl() );
+ pCollNames->Insert(
+ (String *)&pColl->GetNextTxtFmtColl().GetName() );
+ }
+ }
+ delete pCollNames;
+ }
+
+ // char fmts
+ nCount = pDoc->GetCharFmts()->Count();
+ for( i=0; i<nCount; i++ )
+ {
+ const SwCharFmt *pFmt = (*pDoc->GetCharFmts())[i];
+ if( ( !bUsed || pDoc->IsUsed( *pFmt ) ) && !pFmt->IsDefault() )
+ ExportFmt( *pFmt );
+ }
+
+ // num rules
+ ExportNumRules( sal_False, bUsed );
+#else
+ GetTextParagraphExport()->exportTextStyles( bUsed );
+#endif
+}
+
+// ---------------------------------------------------------------------
+
+#ifdef XML_CORE_API
+void SwXMLExport::AddTextAutoStyle( const SfxPoolItem& rItem )
+{
+ SfxItemSet aItemSet( pDoc->GetAttrPool(),
+ RES_CHRATR_BEGIN, RES_CHRATR_END - 1,
+ RES_UNKNOWNATR_BEGIN, RES_UNKNOWNATR_END - 1, 0 );
+ aItemSet.Put( rItem );
+ pItemSetAutoStylePool->Add( SFX_STYLE_FAMILY_CHAR, aItemSet );
+}
+
+void SwXMLExport::AddParaAutoStyle( const OUString& rParent,
+ const SfxItemSet& rItemSet )
+{
+ pItemSetAutoStylePool->Add( SFX_STYLE_FAMILY_PARA,
+ SwXStyleFamilies::GetProgrammaticName(rParent, SFX_STYLE_FAMILY_PARA ),
+ rItemSet );
+}
+
+OUString SwXMLExport::FindTextAutoStyle( const SfxPoolItem& rItem )
+{
+ SfxItemSet aItemSet( pDoc->GetAttrPool(),
+ RES_CHRATR_BEGIN, RES_CHRATR_END - 1,
+ RES_UNKNOWNATR_BEGIN, RES_UNKNOWNATR_END - 1, 0 );
+ aItemSet.Put( rItem );
+ return pItemSetAutoStylePool->Find( SFX_STYLE_FAMILY_CHAR, aItemSet );
+}
+
+OUString SwXMLExport::FindParaAutoStyle( const OUString& rParent,
+ const SfxItemSet& rItemSet )
+{
+ return pItemSetAutoStylePool->Find(
+ SFX_STYLE_FAMILY_PARA,
+ SwXStyleFamilies::GetProgrammaticName(rParent, SFX_STYLE_FAMILY_PARA ),
+ rItemSet );
+}
+
+void SwXMLExport::ExportTxtNodeAutoStyles( const SwTxtNode& rTxtNd,
+ xub_StrLen nStart, xub_StrLen nEnd,
+ sal_Bool bExportWholeNode )
+{
+ const SfxItemSet *pItemSet = rTxtNd.GetpSwAttrSet();
+ if( pItemSet )
+ {
+ const SwFmtColl& rColl = rTxtNd.GetAnyFmtColl();
+ OUString sParent( rColl.GetName() );
+ AddParaAutoStyle( sParent, *pItemSet );
+
+ if( rTxtNd.GetCondFmtColl() &&
+ &rColl != rTxtNd.GetFmtColl() )
+ {
+ const SwFmtColl *pColl = rTxtNd.GetFmtColl();
+ sParent = pColl->GetName();
+ AddParaAutoStyle( sParent, *pItemSet );
+ }
+ }
+
+ xub_StrLen nPos = pCurPaM->GetPoint()->nContent.GetIndex();
+ xub_StrLen nEndPos = rTxtNd.GetTxt().Len();
+ if( pCurPaM->GetPoint()->nNode == pCurPaM->GetMark()->nNode )
+ nEndPos = pCurPaM->GetMark()->nContent.GetIndex();
+
+ const SwpHints *pHints = rTxtNd.GetpSwpHints();
+ sal_uInt16 nHintCount = pHints ? pHints->Count() : 0;
+ sal_uInt16 nHintPos = 0;
+ const SwTxtAttr * pTxtAttr = 0;
+
+ if( nHintCount && nPos > *( pTxtAttr = (*pHints)[0] )->GetStart() )
+ {
+ do
+ {
+ nHintPos++;
+ sal_uInt16 nWhich = pTxtAttr->Which();
+ if( pTxtAttr->GetEnd() &&
+ ( (nWhich >= RES_CHRATR_BEGIN && nWhich < RES_CHRATR_END) ||
+ (nWhich >= RES_UNKNOWNATR_BEGIN &&
+ nWhich < RES_UNKNOWNATR_END) ) )
+ {
+ xub_StrLen nHtEnd = *pTxtAttr->GetEnd(),
+ nHtStt = *pTxtAttr->GetStart();
+ if( (bExportWholeNode || nHtEnd > nPos) &&
+ nHtEnd != nHtStt )
+ {
+ AddTextAutoStyle( pTxtAttr->GetAttr() );
+ }
+ }
+
+ }
+ while( nHintPos < nHintCount &&
+ nPos > *( pTxtAttr = (*pHints)[nHintPos ] )->GetStart() );
+ }
+
+ for( ; nPos < nEndPos; nPos++ )
+ {
+ if( nHintPos < nHintCount && *pTxtAttr->GetStart() == nPos
+ && nPos != nEndPos )
+ {
+ do
+ {
+ sal_uInt16 nWhich = pTxtAttr->Which();
+ if( pTxtAttr->GetEnd() && *pTxtAttr->GetEnd() != nPos &&
+ ( (nWhich >= RES_CHRATR_BEGIN && nWhich < RES_CHRATR_END) ||
+ (nWhich >= RES_UNKNOWNATR_BEGIN &&
+ nWhich < RES_UNKNOWNATR_END) ) )
+ {
+ AddTextAutoStyle( pTxtAttr->GetAttr() );
+ } else if( nWhich == RES_TXTATR_FIELD ) {
+ // text field found: export AutoStyle
+#ifdef XML_CORE_API
+// Reference < text::XTextField > xFld = new SwXTextField(
+// ((const SwFmtFld&)pTxtAttr->GetAttr()), &GetDoc() );
+//
+// GetTextFieldExport().ExportFieldAutoStyle( xFld );
+#endif
+ }
+ }
+ while( ++nHintPos < nHintCount &&
+ nPos == *( pTxtAttr = (*pHints)[nHintPos] )->GetStart() );
+ }
+ }
+}
+
+void SwXMLExport::ExportSectionAutoStyles( const SwSectionNode& rSectNd )
+{
+ SwNode *pStartNd = pDoc->GetNodes()[rSectNd.GetIndex() + 1];
+ SwNode *pEndNd = pDoc->GetNodes()[rSectNd.EndOfSectionIndex() - 1];
+
+ {
+ SwXMLExpContext aContext( *this, *pStartNd, *pEndNd, 0, STRING_LEN );
+ ExportCurPaMAutoStyles();
+ }
+
+ pCurPaM->GetPoint()->nNode = *rSectNd.EndOfSectionNode();
+}
+
+void SwXMLExport::ExportCurPaMAutoStyles( sal_Bool bExportWholePaM )
+{
+ sal_Bool bFirstNode = sal_True;
+ sal_Bool bExportWholeNode = bExportWholePaM;
+
+ while( pCurPaM->GetPoint()->nNode.GetIndex() <
+ pCurPaM->GetMark()->nNode.GetIndex() ||
+ ( pCurPaM->GetPoint()->nNode.GetIndex() ==
+ pCurPaM->GetMark()->nNode.GetIndex() &&
+ pCurPaM->GetPoint()->nContent.GetIndex() <=
+ pCurPaM->GetMark()->nContent.GetIndex() ) )
+ {
+ SwNode *pNd = pCurPaM->GetNode();
+
+ ASSERT( !(pNd->IsGrfNode() || pNd->IsOLENode()),
+ "SwXMLExport::exportCurPaM: grf or OLE node unexpected" );
+ if( pNd->IsTxtNode() )
+ {
+ SwTxtNode* pTxtNd = pNd->GetTxtNode();
+
+ if( !bFirstNode )
+ pCurPaM->GetPoint()->nContent.Assign( pTxtNd, 0 );
+
+ ExportTxtNodeAutoStyles( *pTxtNd, 0, STRING_LEN, bExportWholeNode );
+ }
+ else if( pNd->IsTableNode() )
+ {
+ ExportTableAutoStyles( *pNd->GetTableNode() );
+ }
+ else if( pNd->IsSectionNode() )
+ {
+ ExportSectionAutoStyles( *pNd->GetSectionNode() );
+ }
+ else if( pNd == &pDoc->GetNodes().GetEndOfContent() )
+ break;
+
+ pCurPaM->GetPoint()->nNode++; // next node
+
+ // if not everything should be exported, the WriteAll flag must be
+ // set for all but the first and last node anyway.
+ bExportWholeNode = bExportWholePaM ||
+ pCurPaM->GetPoint()->nNode.GetIndex() !=
+ pCurPaM->GetMark()->nNode.GetIndex();
+ bFirstNode = sal_False;
+ }
+}
+#endif
+
+void SwXMLExport::_ExportAutoStyles()
+{
+#ifdef XML_CORE_API
+ // export all PaMs
+ SwPaM *pPaM = pOrigPaM;
+ sal_Bool bContinue = sal_True;
+ do
+ {
+ // export PaM content
+ ExportCurPaMAutoStyles( bExportWholeDoc );
+
+ bContinue = pPaM->GetNext() != pOrigPaM;
+
+ // the current PaM must be at the start if this loop finishes
+ pPaM = (SwPaM *)pPaM->GetNext();
+ SetCurPaM( *pPaM, bExportWholeDoc, bExportFirstTableOnly );
+
+ } while( bContinue );
+
+ // text collections
+ ((SvXMLAutoStylePool *)pItemSetAutoStylePool)->exportXML( SFX_STYLE_FAMILY_PARA,
+ GetParaItemMapper(),
+ GetDocHandler(),
+ GetTwipUnitConverter(),
+ GetNamespaceMap() );
+
+ // char fmts
+ ((SvXMLAutoStylePool *)pItemSetAutoStylePool)->exportXML( SFX_STYLE_FAMILY_CHAR,
+ GetParaItemMapper(),
+ GetDocHandler(),
+ GetTwipUnitConverter(),
+ GetNamespaceMap() );
+
+ // num rules
+ ExportNumRules( sal_True, sal_False );
+
+ // text field styles
+// GetNumberFormatExport().Export( GetNamespaceMap() );
+
+#else
+ Reference < XTextDocument > xTextDoc( GetModel(), UNO_QUERY );
+ Reference < XText > xText = xTextDoc->getText();
+
+ GetTextParagraphExport()->collectFrameBoundToPageAutoStyles();
+ GetTextParagraphExport()->collectTextAutoStyles( xText );
+ GetTextParagraphExport()->exportTextAutoStyles();
+ exportAutoDataStyles();
+
+#endif
+
+}
+
+void SwXMLExport::_ExportMasterStyles()
+{
+}
+
+// ---------------------------------------------------------------------
+
+#ifdef XML_CORE_API
+void SwXMLAutoStylePool::exportXML( SvXMLAttributeList& rAttrList,
+ SfxStyleFamily eFamily, const SfxItemSet& rItemSet,
+ const SvXMLUnitConverter& rUnitConverter,
+ const SvXMLNamespaceMap& rNamespaceMap ) const
+{
+ if( SFX_STYLE_FAMILY_PARA == eFamily )
+ {
+ const SfxPoolItem *pItem;
+ if( SFX_ITEM_SET == rItemSet.GetItemState( RES_PARATR_NUMRULE, sal_False,
+ &pItem ) )
+ {
+ OUString sName( rNamespaceMap.GetQNameByKey( XML_NAMESPACE_STYLE,
+ OUString::createFromAscii(sXML_list_style_name) ) );
+ rAttrList.AddAttribute( sName,
+ OUString::createFromAscii( sXML_CDATA ),
+ ((const SwNumRuleItem *)pItem)->GetValue() );
+ }
+ }
+}
+
+SwXMLAutoStylePool::~SwXMLAutoStylePool()
+{
+}
+#else
+
+class SwXMLAutoStylePoolP : public SvXMLAutoStylePoolP
+{
+ SvXMLExport& rExport;
+ const OUString sListStyleName;
+ const OUString sCDATA;
+
+protected:
+
+ virtual void exportStyleAttributes(
+ SvXMLAttributeList& rAttrList,
+ sal_Int32 nFamily,
+ const ::std::vector< XMLPropertyState >& rProperties,
+ const SvXMLExportPropertyMapper& rPropExp,
+ const SvXMLUnitConverter& rUnitConverter,
+ const SvXMLNamespaceMap& rNamespaceMap) const;
+public:
+
+ SwXMLAutoStylePoolP( SvXMLExport& rExport );
+ virtual ~SwXMLAutoStylePoolP();
+};
+
+void SwXMLAutoStylePoolP::exportStyleAttributes(
+ SvXMLAttributeList& rAttrList,
+ sal_Int32 nFamily,
+ const ::std::vector< XMLPropertyState >& rProperties,
+ const SvXMLExportPropertyMapper& rPropExp,
+ const SvXMLUnitConverter& rUnitConverter,
+ const SvXMLNamespaceMap& rNamespaceMap) const
+{
+ if( XML_STYLE_FAMILY_TEXT_PARAGRAPH == nFamily )
+ {
+ for( ::std::vector< XMLPropertyState >::const_iterator
+ aProperty = rProperties.begin();
+ aProperty != rProperties.end();
+ aProperty++ )
+ {
+ switch( rPropExp.getPropertySetMapper()->
+ GetEntryContextId( aProperty->mnIndex ) )
+ {
+ case CTF_NUMBERINGSTYLENAME:
+ {
+ OUString sStyleName;
+ aProperty->maValue >>= sStyleName;
+ if( sStyleName.getLength() )
+ {
+ OUString sTmp = rExport.GetTextParagraphExport()->GetListAutoStylePool().Find( sStyleName );
+ if( sTmp.getLength() )
+ sStyleName = sTmp;
+ OUString sName( rNamespaceMap.GetQNameByKey(
+ XML_NAMESPACE_STYLE, sListStyleName ) );
+ rAttrList.AddAttribute( sName, sCDATA, sStyleName );
+ }
+ }
+ break;
+ }
+ }
+ }
+}
+
+SwXMLAutoStylePoolP::SwXMLAutoStylePoolP(SvXMLExport& rExp ) :
+ SvXMLAutoStylePoolP(),
+ rExport( rExp ),
+ sListStyleName( RTL_CONSTASCII_USTRINGPARAM( sXML_list_style_name) ),
+ sCDATA( RTL_CONSTASCII_USTRINGPARAM( sXML_CDATA) )
+{
+}
+
+
+SwXMLAutoStylePoolP::~SwXMLAutoStylePoolP()
+{
+}
+
+SvXMLAutoStylePoolP* SwXMLExport::CreateAutoStylePool()
+{
+ return new SwXMLAutoStylePoolP( *this );
+}
+#endif
+
+/*************************************************************************
+
+ Source Code Control System - Header
+
+ $Header: /zpool/svn/migration/cvs_rep_09_09_08/code/sw/source/filter/xml/xmlfmte.cxx,v 1.1.1.1 2000-09-18 17:15:00 hr Exp $
+
+ Source Code Control System - Update
+
+ $Log: not supported by cvs2svn $
+ Revision 1.23 2000/09/18 16:05:06 willem.vandorp
+ OpenOffice header added.
+
+ Revision 1.22 2000/09/18 11:58:02 mib
+ text frames/graphics import and export continued
+
+ Revision 1.21 2000/09/07 05:29:00 mib
+ #78555#: Search paragraph styles by programmatic name instead of UI name
+
+ Revision 1.20 2000/08/24 11:16:41 mib
+ text import continued
+
+ Revision 1.19 2000/08/21 11:02:50 dvo
+ - fixed data style export (for textfields)
+
+ Revision 1.18 2000/08/10 10:22:16 mib
+ #74404#: Adeptions to new XSL/XLink working draft
+
+ Revision 1.17 2000/08/02 14:52:39 mib
+ text export continued
+
+ Revision 1.16 2000/07/31 09:42:35 mib
+ text export continued
+
+ Revision 1.15 2000/07/27 08:06:34 mib
+ text import continued
+
+ Revision 1.14 2000/07/26 05:11:20 mib
+ text import/export continued
+
+ Revision 1.13 2000/07/24 10:19:02 dvo
+ - textfield export for XML_CORE_API
+
+ Revision 1.12 2000/07/21 12:55:15 mib
+ text import/export using StarOffice API
+
+ Revision 1.11 2000/07/10 06:58:49 mib
+ text styles
+
+ Revision 1.10 2000/07/07 13:58:36 mib
+ text styles using StarOffice API
+
+ Revision 1.9 2000/06/08 09:45:54 aw
+ changed to use functionality from xmloff project now
+
+ Revision 1.8 2000/05/03 12:08:05 mib
+ unicode
+
+ Revision 1.7 2000/03/13 14:33:44 mib
+ UNO3
+
+ Revision 1.6 2000/03/06 10:46:11 mib
+ #72585#: toInt32
+
+ Revision 1.5 2000/02/11 14:41:57 hr
+ #70473# changes for unicode ( patched by automated patchtool )
+
+ Revision 1.4 2000/02/07 10:03:28 mib
+ #70271#: tables
+
+ Revision 1.3 2000/01/20 10:03:16 mib
+ #70271#: Lists reworked
+
+ Revision 1.2 2000/01/12 15:00:23 mib
+ #70271#: lists
+
+ Revision 1.1 2000/01/06 15:03:40 mib
+ #70271#:separation of text/layout, cond. styles, adaptions to wd-xlink-19991229
+
+ Revision 1.23 1999/12/13 08:28:25 mib
+ #70271#: Support for element items added
+
+ Revision 1.22 1999/12/06 11:41:33 mib
+ #70258#: Container item for unkown attributes
+
+ Revision 1.21 1999/11/26 11:13:57 mib
+ loading of styles only and insert mode
+
+ Revision 1.20 1999/11/22 15:52:34 os
+ headers added
+
+ Revision 1.19 1999/11/17 20:08:49 nn
+ document language
+
+ Revision 1.18 1999/11/12 14:50:28 mib
+ meta import and export reactivated
+
+ Revision 1.17 1999/11/12 11:43:03 mib
+ using item mapper, part iii
+
+ Revision 1.16 1999/11/10 15:08:09 mib
+ Import now uses XMLItemMapper
+
+ Revision 1.15 1999/11/09 15:40:08 mib
+ Using XMLItemMapper for export
+
+ Revision 1.14 1999/11/05 19:44:11 nn
+ handle office:meta
+
+ Revision 1.13 1999/11/01 11:38:50 mib
+ List style import
+
+ Revision 1.12 1999/10/25 10:41:48 mib
+ Using new OUString ASCII methods
+
+ Revision 1.11 1999/10/22 09:49:16 mib
+ List style export
+
+ Revision 1.10 1999/10/15 12:37:05 mib
+ integrated SvXMLStyle into SvXMLStyleContext
+
+ Revision 1.9 1999/10/08 11:47:45 mib
+ moved some file to SVTOOLS/SVX
+
+ Revision 1.8 1999/10/01 13:02:51 mib
+ no comparisons between OUString and char* any longer
+
+ Revision 1.7 1999/09/28 10:47:58 mib
+ char fmts again
+
+ Revision 1.6 1999/09/28 08:31:15 mib
+ char fmts, hints
+
+ Revision 1.5 1999/09/23 11:53:58 mib
+ i18n, token maps and hard paragraph attributes
+
+ Revision 1.4 1999/09/22 11:56:57 mib
+ string -> wstring
+
+ Revision 1.3 1999/08/19 12:57:42 MIB
+ attribute import added
+
+
+ Rev 1.2 19 Aug 1999 14:57:42 MIB
+ attribute import added
+
+ Rev 1.1 18 Aug 1999 17:03:36 MIB
+ Style import
+
+ Rev 1.0 13 Aug 1999 16:18:10 MIB
+ Initial revision.
+
+
+*************************************************************************/
+