blob: dc9cb23c8d31917f946064a48688c63e2bf68843 [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
#ifndef INCLUDED_STYLESHEETTABLE_HXX
#define INCLUDED_STYLESHEETTABLE_HXX
#include "TblStylePrHandler.hxx"
#include <WriterFilterDllApi.hxx>
#include <dmapper/DomainMapper.hxx>
#include <com/sun/star/lang/XComponent.hpp>
#include <PropertyMap.hxx>
#include <FontTable.hxx>
#include <resourcemodel/LoggedResources.hxx>
namespace com{ namespace sun { namespace star { namespace text{
class XTextDocument;
}}}}
namespace writerfilter {
namespace dmapper
{
enum StyleType
{
STYLE_TYPE_UNKNOWN,
STYLE_TYPE_PARA,
STYLE_TYPE_CHAR,
STYLE_TYPE_TABLE,
STYLE_LIST
};
struct StyleSheetTable_Impl;
class StyleSheetEntry
{
public:
::rtl::OUString sStyleIdentifierI;
::rtl::OUString sStyleIdentifierD;
bool bIsDefaultStyle;
bool bInvalidHeight;
bool bHasUPE; //universal property expansion
StyleType nStyleTypeCode; //sgc
::rtl::OUString sBaseStyleIdentifier;
::rtl::OUString sNextStyleIdentifier;
::rtl::OUString sStyleName;
::rtl::OUString sStyleName1;
PropertyMapPtr pProperties;
::rtl::OUString sConvertedStyleName;
StyleSheetEntry();
virtual ~StyleSheetEntry();
};
typedef boost::shared_ptr<StyleSheetEntry> StyleSheetEntryPtr;
typedef ::std::deque<StyleSheetEntryPtr> StyleSheetEntryDeque;
typedef boost::shared_ptr<StyleSheetEntryDeque> StyleSheetEntryDequePtr;
class DomainMapper;
class StyleSheetTable :
public LoggedProperties,
public LoggedTable
{
StyleSheetTable_Impl *m_pImpl;
public:
StyleSheetTable( DomainMapper& rDMapper,
::com::sun::star::uno::Reference< ::com::sun::star::text::XTextDocument> xTextDocument );
virtual ~StyleSheetTable();
void ApplyStyleSheets( FontTablePtr rFontTable );
const StyleSheetEntryPtr FindStyleSheetByISTD(const ::rtl::OUString& sIndex);
const StyleSheetEntryPtr FindStyleSheetByStyleName(const ::rtl::OUString& rIndex);
const StyleSheetEntryPtr FindStyleSheetByConvertedStyleName(const ::rtl::OUString& rIndex);
// returns the parent of the one with the given name - if empty the parent of the current style sheet is returned
const StyleSheetEntryPtr FindParentStyleSheet(::rtl::OUString sBaseStyle);
::rtl::OUString ConvertStyleName( const ::rtl::OUString& rWWName, bool bExtendedSearch = false );
::rtl::OUString GetStyleIdFromIndex(const sal_uInt32 sti);
::rtl::OUString getOrCreateCharStyle( PropertyValueVector_t& rCharProperties );
private:
// Properties
virtual void lcl_attribute(Id Name, Value & val);
virtual void lcl_sprm(Sprm & sprm);
// Table
virtual void lcl_entry(int pos, writerfilter::Reference<Properties>::Pointer_t ref);
void resolveAttributeProperties(Value & val);
void resolveSprmProps(Sprm & sprm_);
void applyDefaults(bool bParaProperties);
};
typedef boost::shared_ptr< StyleSheetTable > StyleSheetTablePtr;
class WRITERFILTER_DLLPRIVATE TableStyleSheetEntry :
public StyleSheetEntry
{
private:
typedef std::map<TblStyleType, PropertyMapPtr> TblStylePrs;
StyleSheetTable* m_pStyleSheet;
TblStylePrs m_aStyles;
public:
short m_nColBandSize;
short m_nRowBandSize;
// Adds a new tblStylePr to the table style entry. This method
// fixes some possible properties conflicts, like borders ones.
void AddTblStylePr( TblStyleType nType, PropertyMapPtr pProps );
// Gets all the properties
// + corresponding to the mask,
// + from the parent styles
//
// @param mask mask describing which properties to return
// @param pStack already processed StyleSheetEntries
PropertyMapPtr GetProperties( sal_Int32 nMask, StyleSheetEntryDequePtr pStack = StyleSheetEntryDequePtr());
TableStyleSheetEntry( StyleSheetEntry& aEntry, StyleSheetTable* pStyles );
virtual ~TableStyleSheetEntry( );
protected:
PropertyMapPtr GetLocalPropertiesFromMask( const sal_Int32 nMask );
void MergePropertiesFromMask(const short nBit, const sal_Int32 nMask,
const TblStyleType nStyleId, PropertyMapPtr pToFill);
};
typedef boost::shared_ptr<TableStyleSheetEntry> TableStyleSheetEntryPtr;
}}
#endif //