diff options
Diffstat (limited to 'writerfilter/source/dmapper/PropertyMap.hxx')
-rw-r--r-- | writerfilter/source/dmapper/PropertyMap.hxx | 556 |
1 files changed, 556 insertions, 0 deletions
diff --git a/writerfilter/source/dmapper/PropertyMap.hxx b/writerfilter/source/dmapper/PropertyMap.hxx new file mode 100644 index 000000000000..b6dcad6d63b2 --- /dev/null +++ b/writerfilter/source/dmapper/PropertyMap.hxx @@ -0,0 +1,556 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org 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 version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ +#ifndef INCLUDED_DMAPPER_PROPERTYMAP_HXX +#define INCLUDED_DMAPPER_PROPERTYMAP_HXX + +#include <rtl/ustring.hxx> +#include <com/sun/star/uno/Sequence.hxx> +#ifndef _COM_SUN_STAR_BEANS_PROPERTYVALUE_HXX_ +#include <com/sun/star/beans/PropertyValue.hpp> +#endif +#include <com/sun/star/beans/XPropertySet.hpp> +#include <com/sun/star/uno/Any.h> +#include <PropertyIds.hxx> +#include <boost/shared_ptr.hpp> +#include <map> +#include <vector> + +#include <resourcemodel/TagLogger.hxx> + +namespace com{namespace sun{namespace star{ + namespace beans{ + struct PropertyValue; + } + namespace container{ + class XNameAccess; + class XNameContainer; + } + namespace lang{ + class XMultiServiceFactory; + } + namespace text{ + class XTextRange; + class XTextColumns; + class XFootnote; + } + namespace table{ + struct BorderLine; + } +}}} + +namespace writerfilter { +namespace dmapper{ +class DomainMapper_Impl; + +enum BorderPosition +{ + BORDER_LEFT, + BORDER_RIGHT, + BORDER_TOP, + BORDER_BOTTOM +}; +/*-- 15.06.2006 08:22:33--------------------------------------------------- + + -----------------------------------------------------------------------*/ +struct PropertyDefinition +{ + PropertyIds eId; + bool bIsTextProperty; + + PropertyDefinition( PropertyIds _eId, bool _bIsTextProperty ) : + eId( _eId ), + bIsTextProperty( _bIsTextProperty ){} + + bool operator== (const PropertyDefinition& rDef) const + { return rDef.eId == eId; } + bool operator< (const PropertyDefinition& rDef) const + { return eId < rDef.eId; } +}; +typedef std::map < PropertyDefinition, ::com::sun::star::uno::Any > _PropertyMap; +class PropertyMap : public _PropertyMap +{ + ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue > m_aValues; + //marks context as footnote context - ::text( ) events contain either the footnote character or can be ignored + //depending on sprmCSymbol + sal_Unicode m_cFootnoteSymbol; // 0 == invalid + sal_Int32 m_nFootnoteFontId; // negative values are invalid ids + ::rtl::OUString m_sFootnoteFontName; + ::com::sun::star::uno::Reference< ::com::sun::star::text::XFootnote > m_xFootnote; + +protected: + void Invalidate() + { + if(m_aValues.getLength()) + m_aValues.realloc( 0 ); + } + +public: + PropertyMap(); + virtual ~PropertyMap(); + + ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue > GetPropertyValues(); + bool hasEmptyPropertyValues() const {return !m_aValues.getLength();} + /** Add property, usually overwrites already available attributes. It shouldn't overwrite in case of default attributes + */ + void Insert( PropertyIds eId, bool bIsTextProperty, const ::com::sun::star::uno::Any& rAny, bool bOverwrite = true ); + using _PropertyMap::insert; + void insert(const boost::shared_ptr<PropertyMap> pMap, bool bOverwrite = true); + + const ::com::sun::star::uno::Reference< ::com::sun::star::text::XFootnote>& GetFootnote() const; + void SetFootnote( ::com::sun::star::uno::Reference< ::com::sun::star::text::XFootnote> xF ) { m_xFootnote = xF; } + + sal_Unicode GetFootnoteSymbol() const { return m_cFootnoteSymbol;} + void SetFootnoteSymbol(sal_Unicode cSet) { m_cFootnoteSymbol = cSet;} + + sal_Int32 GetFootnoteFontId() const { return m_nFootnoteFontId;} + void SetFootnoteFontId(sal_Int32 nSet) { m_nFootnoteFontId = nSet;} + + const ::rtl::OUString& GetFootnoteFontName() const { return m_sFootnoteFontName;} + void SetFootnoteFontName( const ::rtl::OUString& rSet ) { m_sFootnoteFontName = rSet;} + + virtual void insertTableProperties( const PropertyMap* ); + + virtual XMLTag::Pointer_t toTag() const; +}; +typedef boost::shared_ptr<PropertyMap> PropertyMapPtr; + +/*-- 24.07.2006 08:26:33--------------------------------------------------- + + -----------------------------------------------------------------------*/ +class SectionPropertyMap : public PropertyMap +{ + //--> debug + sal_Int32 nSectionNumber; + //<-- debug + //'temporarily' the section page settings are imported as page styles + // empty strings mark page settings as not yet imported + + bool m_bIsFirstSection; + ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange > m_xStartingRange; + + ::rtl::OUString m_sFirstPageStyleName; + ::rtl::OUString m_sFollowPageStyleName; + ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > m_aFirstPageStyle; + ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > m_aFollowPageStyle; + + ::com::sun::star::table::BorderLine* m_pBorderLines[4]; + sal_Int32 m_nBorderDistances[4]; + sal_Int32 m_nBorderParams; + + bool m_bTitlePage; + sal_Int16 m_nColumnCount; + sal_Int32 m_nColumnDistance; + ::std::vector< sal_Int32 > m_aColWidth; + ::std::vector< sal_Int32 > m_aColDistance; + + bool m_bSeparatorLineIsOn; + bool m_bEvenlySpaced; + bool m_bIsLandscape; + + bool m_bPageNoRestart; + sal_Int32 m_nPageNumber; + sal_Int32 m_nBreakType; + sal_Int32 m_nPaperBin; + sal_Int32 m_nFirstPaperBin; + + sal_Int32 m_nLeftMargin; + sal_Int32 m_nRightMargin; + sal_Int32 m_nTopMargin; + sal_Int32 m_nBottomMargin; + sal_Int32 m_nHeaderTop; + sal_Int32 m_nHeaderBottom; + + sal_Int32 m_nDzaGutter; + bool m_bGutterRTL; + bool m_bSFBiDi; + + sal_Int32 m_nGridType; + sal_Int32 m_nGridLinePitch; + sal_Int32 m_nDxtCharSpace; + + //line numbering + sal_Int32 m_nLnnMod; + sal_Int32 m_nLnc; + sal_Int32 m_ndxaLnn; + sal_Int32 m_nLnnMin; + + void _ApplyProperties( ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > xStyle ); + ::com::sun::star::uno::Reference< com::sun::star::text::XTextColumns > ApplyColumnProperties( + ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > xFollowPageStyle ); + void CopyLastHeaderFooter( bool bFirstPage, DomainMapper_Impl& rDM_Impl ); + void PrepareHeaderFooterProperties( bool bFirstPage ); + bool HasHeader( bool bFirstPage ) const; + bool HasFooter( bool bFirstPage ) const; + + void SetBorderDistance( ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > xStyle, + PropertyIds eMarginId, PropertyIds eDistId, sal_Int32 nDistance, sal_Int32 nOffsetFrom ); + +public: + explicit SectionPropertyMap(bool bIsFirstSection); + ~SectionPropertyMap(); + + enum PageType + { + PAGE_FIRST, + PAGE_LEFT, + PAGE_RIGHT + }; + + void SetStart( const ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange >& xRange ) + { + m_xStartingRange = xRange; + } + + const ::rtl::OUString& GetPageStyleName( bool bFirst ); + void SetPageStyleName( bool bFirst, const ::rtl::OUString& rName); + + ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > GetPageStyle( + const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer >& xStyles, + const ::com::sun::star::uno::Reference < ::com::sun::star::lang::XMultiServiceFactory >& xTextFactory, + bool bFirst ); + + void SetBorder( BorderPosition ePos, sal_Int32 nLineDistance, const ::com::sun::star::table::BorderLine& rBorderLine ); + void SetBorderParams( sal_Int32 nSet ) { m_nBorderParams = nSet; } + + void SetColumnCount( sal_Int16 nCount ) { m_nColumnCount = nCount; } + void SetColumnDistance( sal_Int32 nDist ) { m_nColumnDistance = nDist; } + void AppendColumnWidth( sal_Int32 nWidth ) { m_aColWidth.push_back( nWidth ); } + void AppendColumnSpacing( sal_Int32 nDist ) {m_aColDistance.push_back( nDist ); } + + void SetTitlePage( bool bSet ) { m_bTitlePage = bSet; } + void SetSeparatorLine( bool bSet ) { m_bSeparatorLineIsOn = bSet; } + void SetEvenlySpaced( bool bSet ) { m_bEvenlySpaced = bSet; } + void SetLandscape( bool bSet ) { m_bIsLandscape = bSet; } + void SetPageNoRestart( bool bSet ) { m_bPageNoRestart = bSet; } + void SetPageNumber( sal_Int32 nSet ) { m_nPageNumber = nSet; } + void SetBreakType( sal_Int32 nSet ) { m_nBreakType = nSet; } + void SetPaperBin( sal_Int32 nSet ); + void SetFirstPaperBin( sal_Int32 nSet ); + + void SetLeftMargin( sal_Int32 nSet ) { m_nLeftMargin = nSet; } + void SetRightMargin( sal_Int32 nSet ) { m_nRightMargin = nSet; } + void SetTopMargin( sal_Int32 nSet ) { m_nTopMargin = nSet; } + void SetBottomMargin( sal_Int32 nSet ) { m_nBottomMargin = nSet; } + void SetHeaderTop( sal_Int32 nSet ) { m_nHeaderTop = nSet; } + void SetHeaderBottom( sal_Int32 nSet ) { m_nHeaderBottom = nSet; } + + void SetGutterRTL( bool bSet ) { m_bGutterRTL = bSet;} + void SetDzaGutter( sal_Int32 nSet ) {m_nDzaGutter = nSet; } + void SetSFBiDi( bool bSet ) { m_bSFBiDi = bSet;} + + void SetGridType(sal_Int32 nSet) { m_nGridType = nSet; } + void SetGridLinePitch( sal_Int32 nSet ) { m_nGridLinePitch = nSet; } + void SetDxtCharSpace( sal_Int32 nSet ) { m_nDxtCharSpace = nSet; } + + void SetLnnMod( sal_Int32 nValue ) { m_nLnnMod = nValue; } + void SetLnc( sal_Int32 nValue ) { m_nLnc = nValue; } + void SetdxaLnn( sal_Int32 nValue ) { m_ndxaLnn = nValue; } + void SetLnnMin( sal_Int32 nValue ) { m_nLnnMin = nValue; } + + //determine which style gets the borders + void ApplyBorderToPageStyles( + const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer >& xStyles, + const ::com::sun::star::uno::Reference < ::com::sun::star::lang::XMultiServiceFactory >& xTextFactory, + sal_Int32 nValue ); + + void CloseSectionGroup( DomainMapper_Impl& rDM_Impl ); +}; +typedef boost::shared_ptr<SectionPropertyMap> SectionPropertyMapPtr; + +/*-- 28.12.2007 08:17:34--------------------------------------------------- + + -----------------------------------------------------------------------*/ +class ParagraphProperties +{ + bool m_bFrameMode; + sal_Int32 m_nDropCap; //drop, margin ST_DropCap + sal_Int32 m_nLines; //number of lines of the drop cap + sal_Int32 m_w; //width + sal_Int32 m_h; //height + sal_Int32 m_nWrap; // from ST_Wrap around, auto, none, notBeside, through, tight + sal_Int32 m_hAnchor; // page, from ST_HAnchor margin, page, text + sal_Int32 m_vAnchor; // around from ST_VAnchor margin, page, text + sal_Int32 m_x; //x-position + bool m_bxValid; + sal_Int32 m_y; //y-position + bool m_byValid; + sal_Int32 m_hSpace; //frame padding h + sal_Int32 m_vSpace; //frame padding v + sal_Int32 m_hRule; // from ST_HeightRule exact, atLeast, auto + sal_Int32 m_xAlign; // from ST_XAlign center, inside, left, outside, right + sal_Int32 m_yAlign; // from ST_YAlign bottom, center, inline, inside, outside, top + bool m_bAnchorLock; + + sal_Int8 m_nDropCapLength; //number of characters + + ::rtl::OUString m_sParaStyleName; + + ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange > m_xStartingRange; //start of a frame + ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange > m_xEndingRange; //end of the frame + +public: + ParagraphProperties(); + ParagraphProperties(const ParagraphProperties&); + ~ParagraphProperties(); + + int operator==(const ParagraphProperties&); //does not compare the starting/ending range, m_sParaStyleName and m_nDropCapLength + + void SetFrameMode() { m_bFrameMode = true; } + bool IsFrameMode()const { return m_bFrameMode; } + + void SetDropCap( sal_Int32 nSet ) { m_nDropCap = nSet; } + sal_Int32 GetDropCap()const { return m_nDropCap; } + + void SetLines( sal_Int32 nSet ) { m_nLines = nSet; } + sal_Int32 GetLines() const { return m_nLines; } + + void Setw( sal_Int32 nSet ) { m_w = nSet; } + sal_Int32 Getw() const { return m_w; } + + void Seth( sal_Int32 nSet ) { m_h = nSet; } + sal_Int32 Geth() const { return m_h; } + + void SetWrap( sal_Int32 nSet ) { m_nWrap = nSet; } + sal_Int32 GetWrap() const { return m_nWrap; } + + void SethAnchor( sal_Int32 nSet ) { m_hAnchor = nSet; } + sal_Int32 GethAnchor() const { return m_hAnchor;} + + void SetvAnchor( sal_Int32 nSet ) { m_vAnchor = nSet; } + sal_Int32 GetvAnchor() const { return m_vAnchor; } + + void Setx( sal_Int32 nSet ) { m_x = nSet; m_bxValid = true;} + sal_Int32 Getx() const { return m_x; } + bool IsxValid() const {return m_bxValid;} + + void Sety( sal_Int32 nSet ) { m_y = nSet; m_byValid = true;} + sal_Int32 Gety()const { return m_y; } + bool IsyValid() const {return m_byValid;} + + void SethSpace( sal_Int32 nSet ) { m_hSpace = nSet; } + sal_Int32 GethSpace()const { return m_hSpace; } + + void SetvSpace( sal_Int32 nSet ) { m_vSpace = nSet; } + sal_Int32 GetvSpace()const { return m_vSpace; } + + void SethRule( sal_Int32 nSet ) { m_hRule = nSet; } + sal_Int32 GethRule() const { return m_hRule; } + + void SetxAlign( sal_Int32 nSet ) { m_xAlign = nSet; } + sal_Int32 GetxAlign()const { return m_xAlign; } + + void SetyAlign( sal_Int32 nSet ) { m_yAlign = nSet; } + sal_Int32 GetyAlign()const { return m_yAlign; } + + void SetAnchorLock( bool bSet ) {m_bAnchorLock = bSet; } + + sal_Int8 GetDropCapLength() const { return m_nDropCapLength;} + void SetDropCapLength(sal_Int8 nSet) { m_nDropCapLength = nSet;} + + ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange > GetStartingRange() const { return m_xStartingRange; } + void SetStartingRange( ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange > xSet ) { m_xStartingRange = xSet; } + + ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange > GetEndingRange() const { return m_xEndingRange; } + void SetEndingRange( ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange > xSet ) { m_xEndingRange = xSet; } + + void SetParaStyleName( const ::rtl::OUString& rSet ) { m_sParaStyleName = rSet;} + const ::rtl::OUString& GetParaStyleName() const { return m_sParaStyleName;} + + +}; +typedef boost::shared_ptr<ParagraphProperties> ParagraphPropertiesPtr; +/*-- 14.06.2007 12:12:34--------------------------------------------------- + property map of a stylesheet + -----------------------------------------------------------------------*/ + +#define WW_OUTLINE_MAX sal_Int16( 9 ) + +class StyleSheetPropertyMap : public PropertyMap, public ParagraphProperties + +{ + //special table style properties +// sal_Int32 mnCT_Spacing_after; + sal_Int32 mnCT_Spacing_line; + sal_Int32 mnCT_Spacing_lineRule; + + ::rtl::OUString msCT_Fonts_ascii; + bool mbCT_TrPrBase_tblHeader; + sal_Int32 mnCT_TrPrBase_jc; + sal_Int32 mnCT_TcPrBase_vAlign; + + sal_Int32 mnCT_TblWidth_w; + sal_Int32 mnCT_TblWidth_type; + +// bool mbCT_Spacing_afterSet; + bool mbCT_Spacing_lineSet; + bool mbCT_Spacing_lineRuleSet; + + bool mbCT_TrPrBase_tblHeaderSet; + bool mbCT_TrPrBase_jcSet; + bool mbCT_TcPrBase_vAlignSet; + + bool mbCT_TblWidth_wSet; + bool mbCT_TblWidth_typeSet; + + sal_Int32 mnListId; + sal_Int16 mnListLevel; + + sal_Int16 mnOutlineLevel; +public: + explicit StyleSheetPropertyMap(); + ~StyleSheetPropertyMap(); + +// void SetCT_Spacing_after( sal_Int32 nSet ) +// {mnCT_Spacing_after = nSet; mbCT_Spacing_afterSet = true; } + void SetCT_Spacing_line( sal_Int32 nSet ) + {mnCT_Spacing_line = nSet; mbCT_Spacing_lineSet = true; } + void SetCT_Spacing_lineRule( sal_Int32 nSet ) + {mnCT_Spacing_lineRule = nSet; mbCT_Spacing_lineRuleSet = true; } + + void SetCT_Fonts_ascii( const ::rtl::OUString& rSet ) + {msCT_Fonts_ascii = rSet; } + void SetCT_TrPrBase_tblHeader( bool bSet ) + {mbCT_TrPrBase_tblHeader = bSet; mbCT_TrPrBase_tblHeaderSet = true; } + void SetCT_TrPrBase_jc( sal_Int32 nSet ) + {mnCT_TrPrBase_jc = nSet; mbCT_TrPrBase_jcSet = true; } + void SetCT_TcPrBase_vAlign( sal_Int32 nSet ) + {mnCT_TcPrBase_vAlign = nSet; mbCT_TcPrBase_vAlignSet = true; } + + void SetCT_TblWidth_w( sal_Int32 nSet ) + { mnCT_TblWidth_w = nSet; mbCT_TblWidth_wSet = true; } + void SetCT_TblWidth_type( sal_Int32 nSet ) + {mnCT_TblWidth_type = nSet; mbCT_TblWidth_typeSet = true; } + +// bool GetCT_Spacing_after( sal_Int32& rToFill) const +// { +// if( mbCT_Spacing_afterSet ) +// rToFill = mnCT_Spacing_after; +// return mbCT_Spacing_afterSet; +// } + bool GetCT_Spacing_line( sal_Int32& rToFill) const + { + if( mbCT_Spacing_lineSet ) + rToFill = mnCT_Spacing_line; + return mbCT_Spacing_lineSet; + } + bool GetCT_Spacing_lineRule(sal_Int32& rToFill) const + { + if( mbCT_Spacing_lineRuleSet ) + rToFill = mnCT_Spacing_lineRule; + return mbCT_Spacing_lineRuleSet; + } + + bool GetCT_Fonts_ascii(::rtl::OUString& rToFill) const + { + if( msCT_Fonts_ascii.getLength() > 0 ) + rToFill = msCT_Fonts_ascii; + return msCT_Fonts_ascii.getLength() > 0; + } + bool GetCT_TrPrBase_tblHeader(bool& rToFill) const + { + if( mbCT_TrPrBase_tblHeaderSet ) + rToFill = mbCT_TrPrBase_tblHeader; + return mbCT_TrPrBase_tblHeaderSet; + } + bool GetCT_TrPrBase_jc( sal_Int32& rToFill)const + { + if( mbCT_TrPrBase_jcSet ) + rToFill = mnCT_TrPrBase_jc; + return mbCT_TrPrBase_jcSet; + } + bool GetCT_TcPrBase_vAlign( sal_Int32& rToFill)const + { + if( mbCT_TcPrBase_vAlignSet ) + rToFill = mnCT_TcPrBase_vAlign; + return mbCT_TcPrBase_vAlignSet; + } + sal_Int32 GetListId() const { return mnListId; } + void SetListId(sal_Int32 nId) { mnListId = nId; } + + sal_Int16 GetListLevel() const { return mnListLevel; } + void SetListLevel(sal_Int16 nLevel) { mnListLevel = nLevel; } + + sal_Int16 GetOutlineLevel() const { return mnOutlineLevel; } + void SetOutlineLevel(sal_Int16 nLevel) + { + if ( nLevel < WW_OUTLINE_MAX ) + mnOutlineLevel = nLevel; + } +}; +/*-- 27.12.2007 12:38:06--------------------------------------------------- + + -----------------------------------------------------------------------*/ +class ParagraphPropertyMap : public PropertyMap, public ParagraphProperties +{ +public: + explicit ParagraphPropertyMap(); + ~ParagraphPropertyMap(); + +}; +/*-- 15.02.2008 16:06:52--------------------------------------------------- + + -----------------------------------------------------------------------*/ +class TablePropertyMap : public PropertyMap +{ +public: + enum TablePropertyMapTarget + { + TablePropertyMapTarget_START, + CELL_MAR_LEFT = TablePropertyMapTarget_START, + CELL_MAR_RIGHT, + CELL_MAR_TOP, + CELL_MAR_BOTTOM, + TABLE_WIDTH, + GAP_HALF, + LEFT_MARGIN, + HORI_ORIENT, + TablePropertyMapTarget_MAX + }; +private: + struct ValidValue + { + sal_Int32 nValue; + bool bValid; + ValidValue() : + nValue( 0 ), + bValid( false ){} + }; + ValidValue m_aValidValues[TablePropertyMapTarget_MAX]; + +public: + explicit TablePropertyMap(); + ~TablePropertyMap(); + + bool getValue( TablePropertyMapTarget eWhich, sal_Int32& nFill ); + void setValue( TablePropertyMapTarget eWhich, sal_Int32 nSet ); + + virtual void insertTableProperties( const PropertyMap* ); +}; +typedef boost::shared_ptr<TablePropertyMap> TablePropertyMapPtr; +} //namespace dmapper +} //namespace writerfilter +#endif |