1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
3 * This file is part of the LibreOffice project.
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
9 * This file incorporates work covered by the following license notice:
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
21 #include <rtl/ustring.hxx>
22 #include <tools/ref.hxx>
23 #include <com/sun/star/uno/Sequence.hxx>
24 #include <com/sun/star/beans/PropertyValue.hpp>
25 #include <com/sun/star/beans/XPropertySet.hpp>
26 #include <com/sun/star/table/BorderLine2.hpp>
27 #include <com/sun/star/text/WrapTextMode.hpp>
28 #include <com/sun/star/uno/Any.h>
29 #include <com/sun/star/drawing/XShape.hpp>
30 #include "PropertyIds.hxx"
39 namespace com::sun::star
{
47 class XMultiServiceFactory
;
60 namespace writerfilter::dmapper
{
62 class DomainMapper_Impl
;
63 struct FloatingTableInfo
;
64 struct AnchoredObjectInfo
;
83 struct RedlineParams
: public SvRefBase
89 // This can hold properties of runs that had formatted 'track changes' properties
90 css::uno::Sequence
< css::beans::PropertyValue
> m_aRevertProperties
;
93 typedef tools::SvRef
< RedlineParams
> RedlineParamsPtr
;
98 css::uno::Any m_aValue
;
99 GrabBagType m_GrabBagType
;
100 bool m_bIsDocDefault
;
103 PropValue( css::uno::Any aValue
, GrabBagType i_GrabBagType
, bool bDocDefault
)
104 : m_aValue(std::move( aValue
))
105 , m_GrabBagType( i_GrabBagType
)
106 , m_bIsDocDefault( bDocDefault
)
110 PropValue( css::uno::Any aValue
, GrabBagType i_GrabBagType
)
111 : m_aValue(std::move( aValue
))
112 , m_GrabBagType( i_GrabBagType
)
113 , m_bIsDocDefault( false )
119 , m_GrabBagType( NO_GRAB_BAG
)
120 , m_bIsDocDefault( false )
124 const css::uno::Any
& getValue() const { return m_aValue
; }
126 GrabBagType
getGrabBagType() const { return m_GrabBagType
; }
128 bool getIsDocDefault() const { return m_bIsDocDefault
; }
132 typedef tools::SvRef
< PropertyMap
> PropertyMapPtr
;
134 class PropertyMap
: public SvRefBase
137 // Cache the property values for the GetPropertyValues() call(s).
138 std::vector
< css::beans::PropertyValue
> m_aValues
;
140 // marks context as footnote context - ::text( ) events contain either the footnote character or can be ignored
141 // depending on sprmCSymbol
142 css::uno::Reference
< css::text::XFootnote
> m_xFootnote
;
143 OUString m_sFootnoteCharStyleName
;
144 std::map
< PropertyIds
, PropValue
> m_vMap
;
145 std::vector
< RedlineParamsPtr
> m_aRedlines
;
148 typedef std::pair
< PropertyIds
, css::uno::Any
> Property
;
152 // Sequence: Grab Bags: The CHAR_GRAB_BAG has Name "CharInteropGrabBag" and the PARA_GRAB_BAG has Name "ParaInteropGrabBag"
153 // the contained properties are their Value.
154 css::uno::Sequence
< css::beans::PropertyValue
> GetPropertyValues( bool bCharGrabBag
= true );
156 std::vector
< PropertyIds
> GetPropertyIds();
158 // Add property, optionally overwriting existing attributes
159 void Insert( PropertyIds eId
, const css::uno::Any
& rAny
, bool bOverwrite
= true, GrabBagType i_GrabBagType
= NO_GRAB_BAG
, bool bDocDefault
= false );
161 // Remove a named property from *this, does nothing if the property id has not been set
162 void Erase( PropertyIds eId
);
164 // Imports properties from pMap (bOverwrite==false means m_bIsDocDefault=true setting)
165 void InsertProps( const PropertyMapPtr
& rMap
, const bool bOverwrite
= true );
167 // Returns a copy of the property if it exists, .first is its PropertyIds and .second is its Value (type css::uno::Any)
168 std::optional
< Property
> getProperty( PropertyIds eId
) const;
170 // Has the property named been set (via Insert)?
171 bool isSet( PropertyIds eId
) const;
172 bool isDocDefault( PropertyIds eId
) const;
174 const css::uno::Reference
< css::text::XFootnote
>& GetFootnote() const { return m_xFootnote
; }
175 const OUString
& GetFootnoteStyle() const { return m_sFootnoteCharStyleName
; }
177 void SetFootnote(const css::uno::Reference
< css::text::XFootnote
>& xFootnote
, const OUString
& sStyleName
)
179 m_xFootnote
= xFootnote
;
180 m_sFootnoteCharStyleName
= sStyleName
;
183 virtual void insertTableProperties( const PropertyMap
*, const bool bOverwrite
= true );
185 const std::vector
< RedlineParamsPtr
>& Redlines() const { return m_aRedlines
; }
187 std::vector
< RedlineParamsPtr
>& Redlines() { return m_aRedlines
; }
189 void printProperties();
192 void dumpXml() const;
195 static css::table::ShadowFormat
getShadowFromBorder( const css::table::BorderLine2
& rBorder
);
200 if ( m_aValues
.size() )
205 class SectionPropertyMap
: public PropertyMap
208 enum class BorderApply
211 ToFirstPageInSection
= 1,
212 ToAllButFirstInSection
= 2
214 enum class BorderOffsetFrom
221 sal_Int32 m_nDebugSectionNumber
;
224 // 'temporarily' the section page settings are imported as page styles
225 // empty strings mark page settings as not yet imported
227 bool m_bIsFirstSection
;
228 css::uno::Reference
< css::text::XTextRange
> m_xStartingRange
;
230 OUString m_sFirstPageStyleName
;
231 OUString m_sFollowPageStyleName
;
232 css::uno::Reference
< css::beans::XPropertySet
> m_aFirstPageStyle
;
233 css::uno::Reference
< css::beans::XPropertySet
> m_aFollowPageStyle
;
235 std::optional
< css::table::BorderLine2
> m_oBorderLines
[4];
236 sal_Int32 m_nBorderDistances
[4];
237 BorderApply m_eBorderApply
;
238 BorderOffsetFrom m_eBorderOffsetFrom
;
239 bool m_bBorderShadows
[4];
242 sal_Int16 m_nColumnCount
;
243 sal_Int32 m_nColumnDistance
;
244 css::uno::Reference
< css::beans::XPropertySet
> m_xColumnContainer
;
245 std::vector
< sal_Int32
> m_aColWidth
;
246 std::vector
< sal_Int32
> m_aColDistance
;
248 bool m_bSeparatorLineIsOn
;
249 bool m_bEvenlySpaced
;
251 sal_Int32 m_nPageNumber
;
252 // Page number type is a value from css::style::NumberingType.
253 sal_Int16 m_nPageNumberType
;
254 sal_Int32 m_nBreakType
;
256 sal_Int32 m_nLeftMargin
;
257 sal_Int32 m_nRightMargin
;
258 sal_Int32 m_nGutterMargin
;
259 sal_Int32 m_nTopMargin
;
260 sal_Int32 m_nBottomMargin
;
261 sal_Int32 m_nHeaderTop
;
262 sal_Int32 m_nHeaderBottom
;
264 sal_Int32 m_nGridType
;
265 sal_Int32 m_nGridLinePitch
;
266 sal_Int32 m_nDxtCharSpace
;
267 bool m_bGridSnapToChars
;
275 bool m_bDynamicHeightTop
;
276 bool m_bDynamicHeightBottom
;
278 std::vector
<css::uno::Reference
<css::drawing::XShape
>> m_xRelativeWidthShapes
;
280 // The "Link To Previous" flag indicates whether the header/footer
281 // content should be taken from the previous section
282 bool m_bDefaultHeaderLinkToPrevious
;
283 bool m_bEvenPageHeaderLinkToPrevious
;
284 bool m_bFirstPageHeaderLinkToPrevious
;
285 bool m_bDefaultFooterLinkToPrevious
;
286 bool m_bEvenPageFooterLinkToPrevious
;
287 bool m_bFirstPageFooterLinkToPrevious
;
289 void ApplyProperties_( const css::uno::Reference
< css::beans::XPropertySet
>& xStyle
);
291 void DontBalanceTextColumns();
293 /// Apply section-specific properties: only valid to use after PageStyle has been determined by InheritOrFinalizePageStyles
294 void ApplySectionProperties( const css::uno::Reference
< css::beans::XPropertySet
>& xSection
, DomainMapper_Impl
& rDM_Impl
);
296 /// Check if document is protected. If so, ensure a section exists, and apply its protected value.
297 void ApplyProtectionProperties( css::uno::Reference
< css::beans::XPropertySet
>& xSection
, DomainMapper_Impl
& rDM_Impl
);
299 css::uno::Reference
< css::text::XTextColumns
> ApplyColumnProperties( const css::uno::Reference
< css::beans::XPropertySet
>& xFollowPageStyle
,
300 DomainMapper_Impl
& rDM_Impl
);
302 void CopyLastHeaderFooter( bool bFirstPage
, DomainMapper_Impl
& rDM_Impl
);
304 static void CopyHeaderFooter( const DomainMapper_Impl
& rDM_Impl
,
305 const css::uno::Reference
< css::beans::XPropertySet
>& xPrevStyle
,
306 const css::uno::Reference
< css::beans::XPropertySet
>& xStyle
,
307 bool bOmitRightHeader
= false, bool bOmitLeftHeader
= false,
308 bool bOmitRightFooter
= false, bool bOmitLeftFooter
= false );
310 static void CopyHeaderFooterTextProperty( const css::uno::Reference
< css::beans::XPropertySet
>& xPrevStyle
,
311 const css::uno::Reference
< css::beans::XPropertySet
>& xStyle
,
312 PropertyIds ePropId
);
314 void PrepareHeaderFooterProperties( bool bFirstPage
);
316 bool HasHeader( bool bFirstPage
) const;
317 bool HasFooter( bool bFirstPage
) const;
319 static void SetBorderDistance( const css::uno::Reference
< css::beans::XPropertySet
>& xStyle
,
320 PropertyIds eMarginId
,
323 BorderOffsetFrom eOffsetFrom
,
324 sal_uInt32 nLineWidth
,
325 DomainMapper_Impl
& rDM_Impl
);
327 /// Increases paragraph spacing according to Word 2013+ needs if necessary.
328 void HandleIncreasedAnchoredObjectSpacing(DomainMapper_Impl
& rDM_Impl
);
338 explicit SectionPropertyMap( bool bIsFirstSection
);
340 bool IsFirstSection() const { return m_bIsFirstSection
; }
342 void SetStart( const css::uno::Reference
< css::text::XTextRange
>& xRange
) { m_xStartingRange
= xRange
; }
344 const css::uno::Reference
< css::text::XTextRange
>& GetStartingRange() const { return m_xStartingRange
; }
346 css::uno::Reference
< css::beans::XPropertySet
> GetPageStyle( DomainMapper_Impl
& rDM_Impl
, bool bFirst
);
348 const OUString
& GetPageStyleName( bool bFirstPage
= false )
350 return bFirstPage
? m_sFirstPageStyleName
: m_sFollowPageStyleName
;
353 // @throws css::beans::UnknownPropertyException
354 // @throws css::beans::PropertyVetoException
355 // @throws css::lang::IllegalArgumentException
356 // @throws css::lang::WrappedTargetException
357 // @throws css::uno::RuntimeException
358 void InheritOrFinalizePageStyles( DomainMapper_Impl
& rDM_Impl
);
360 void SetBorder( BorderPosition ePos
, sal_Int32 nLineDistance
, const css::table::BorderLine2
& rBorderLine
, bool bShadow
);
361 void SetBorderApply( BorderApply nSet
) { m_eBorderApply
= nSet
; }
362 void SetBorderOffsetFrom( BorderOffsetFrom nSet
) { m_eBorderOffsetFrom
= nSet
; }
364 void SetColumnCount( sal_Int16 nCount
) { m_nColumnCount
= nCount
; }
365 sal_Int16
ColumnCount() const { return m_nColumnCount
; }
367 void SetColumnDistance( sal_Int32 nDist
) { m_nColumnDistance
= nDist
; }
368 void AppendColumnWidth( sal_Int32 nWidth
) { m_aColWidth
.push_back( nWidth
); }
369 void AppendColumnSpacing( sal_Int32 nDist
) { m_aColDistance
.push_back( nDist
); }
371 void SetTitlePage( bool bSet
) { m_bTitlePage
= bSet
; }
372 void SetSeparatorLine( bool bSet
) { m_bSeparatorLineIsOn
= bSet
; }
373 void SetEvenlySpaced( bool bSet
) { m_bEvenlySpaced
= bSet
; }
374 void SetPageNumber( sal_Int32 nSet
) { m_nPageNumber
= nSet
; }
375 void SetPageNumberType( sal_Int32 nSet
) { m_nPageNumberType
= nSet
; }
376 void SetBreakType( sal_Int32 nSet
) { m_nBreakType
= nSet
; }
377 // GetBreakType returns -1 if the breakType has not yet been identified for the section
378 sal_Int32
GetBreakType() const { return m_nBreakType
; }
380 void SetLeftMargin( sal_Int32 nSet
) { m_nLeftMargin
= nSet
; }
381 sal_Int32
GetLeftMargin() const { return m_nLeftMargin
; }
382 void SetRightMargin( sal_Int32 nSet
) { m_nRightMargin
= nSet
; }
383 sal_Int32
GetRightMargin() const { return m_nRightMargin
; }
384 void SetTopMargin(sal_Int32 nSet
) { m_bDynamicHeightTop
= nSet
>= 0; m_nTopMargin
= std::abs(nSet
); }
385 void SetBottomMargin( sal_Int32 nSet
) { m_bDynamicHeightBottom
= nSet
>= 0; m_nBottomMargin
= std::abs(nSet
); }
386 void SetHeaderTop( sal_Int32 nSet
) { m_nHeaderTop
= nSet
; }
387 void SetHeaderBottom( sal_Int32 nSet
) { m_nHeaderBottom
= nSet
; }
388 void SetGutterMargin( sal_Int32 nGutterMargin
) { m_nGutterMargin
= nGutterMargin
; }
389 sal_Int32
GetPageWidth() const;
391 void SetGridType( sal_Int32 nSet
) { m_nGridType
= nSet
; }
392 void SetGridLinePitch( sal_Int32 nSet
) { m_nGridLinePitch
= nSet
; }
393 void SetGridSnapToChars( bool bSet
) { m_bGridSnapToChars
= bSet
; }
394 void SetDxtCharSpace( sal_Int32 nSet
) { m_nDxtCharSpace
= nSet
; }
396 void SetLnnMod( sal_Int32 nValue
) { m_nLnnMod
= nValue
; }
397 void SetLnc( sal_Int32 nValue
) { m_nLnc
= nValue
; }
398 void SetdxaLnn( sal_Int32 nValue
) { m_ndxaLnn
= nValue
; }
399 void SetLnnMin( sal_Int32 nValue
) { m_nLnnMin
= nValue
; }
401 void addRelativeWidthShape( css::uno::Reference
<css::drawing::XShape
> xShape
) { m_xRelativeWidthShapes
.push_back( xShape
); }
403 // determine which style gets the borders
404 void ApplyBorderToPageStyles( DomainMapper_Impl
&rDM_Impl
,
405 BorderApply eBorderApply
, BorderOffsetFrom eOffsetFrom
);
407 void CloseSectionGroup( DomainMapper_Impl
& rDM_Impl
);
408 // Handling of margins, header and footer for any kind of sections breaks.
409 void HandleMarginsHeaderFooter( bool bFirstPage
, DomainMapper_Impl
& rDM_Impl
);
410 void ClearHeaderFooterLinkToPrevious( bool bHeader
, PageType eType
);
413 void BeforeConvertToTextFrame(std::deque
<css::uno::Any
>& rFramedRedlines
, std::vector
<sal_Int32
>& redPos
, std::vector
<sal_Int32
>& redLen
, std::vector
<OUString
>& redCell
, std::vector
<OUString
>& redTable
);
415 void AfterConvertToTextFrame(DomainMapper_Impl
& rDM_Impl
, std::deque
<css::uno::Any
>& aFramedRedlines
, std::vector
<sal_Int32
>& redPos
, std::vector
<sal_Int32
>& redLen
, std::vector
<OUString
>& redCell
, std::vector
<OUString
>& redTable
);
417 class ParagraphProperties
: public SvRefBase
421 sal_Int32 m_nDropCap
; // drop, margin ST_DropCap
422 sal_Int32 m_nLines
; // number of lines of the drop cap
423 sal_Int32 m_w
; // width
424 sal_Int32 m_h
; // height
425 css::text::WrapTextMode m_nWrap
; // from ST_Wrap around, auto, none, notBeside, through, tight
426 sal_Int32 m_hAnchor
; // page, from ST_HAnchor margin, page, text
427 sal_Int32 m_vAnchor
; // around from ST_VAnchor margin, page, text
428 sal_Int32 m_x
; // x-position
430 sal_Int32 m_y
; // y-position
432 sal_Int32 m_hSpace
; // frame padding h
433 sal_Int32 m_vSpace
; // frame padding v
434 sal_Int32 m_hRule
; // from ST_HeightRule exact, atLeast, auto
435 sal_Int32 m_xAlign
; // from ST_XAlign center, inside, left, outside, right
436 sal_Int32 m_yAlign
; // from ST_YAlign bottom, center, inline, inside, outside, top
437 sal_Int8 m_nDropCapLength
; // number of characters
438 OUString m_sParaStyleName
;
439 OUString m_sParaId
; // [MS-DOCX] sect. 2.2.4 "p and tr Extensions"
441 css::uno::Reference
< css::text::XTextRange
> m_xStartingRange
; // start of a frame
442 css::uno::Reference
< css::text::XTextRange
> m_xEndingRange
; // end of the frame
443 sal_Int32 m_nListId
= -1;
446 ParagraphProperties();
448 ParagraphProperties(ParagraphProperties
const &) = default;
449 ParagraphProperties(ParagraphProperties
&&) = default;
450 ParagraphProperties
& operator =(ParagraphProperties
const &) = default;
451 ParagraphProperties
& operator =(ParagraphProperties
&&) = default;
453 sal_Int32
GetListId() const { return m_nListId
; }
454 void SetListId( sal_Int32 nId
) { m_nListId
= nId
; }
456 bool IsFrameMode() const { return m_bFrameMode
; }
457 void SetFrameMode( bool set
= true ) { m_bFrameMode
= set
; }
459 sal_Int32
GetDropCap() const { return m_nDropCap
; }
460 void SetDropCap( sal_Int32 nSet
) { m_nDropCap
= nSet
; }
462 sal_Int32
GetLines() const { return m_nLines
; }
463 void SetLines( sal_Int32 nSet
) { m_nLines
= nSet
; }
465 sal_Int32
Getw() const { return m_w
; }
466 void Setw( sal_Int32 nSet
) { m_w
= nSet
; }
468 sal_Int32
Geth() const { return m_h
; }
469 void Seth( sal_Int32 nSet
) { m_h
= nSet
; }
471 css::text::WrapTextMode
GetWrap() const { return m_nWrap
; }
472 void SetWrap( css::text::WrapTextMode nSet
) { m_nWrap
= nSet
; }
474 sal_Int32
GethAnchor() const { return m_hAnchor
; }
475 void SethAnchor( sal_Int32 nSet
) { m_hAnchor
= nSet
; }
477 sal_Int32
GetvAnchor() const { return m_vAnchor
; }
478 void SetvAnchor( sal_Int32 nSet
) { m_vAnchor
= nSet
; }
480 sal_Int32
Getx() const { return m_x
; }
481 void Setx( sal_Int32 nSet
) { m_x
= nSet
; m_bxValid
= true; }
482 bool IsxValid() const { return m_bxValid
; }
484 sal_Int32
Gety() const { return m_y
; }
485 void Sety( sal_Int32 nSet
) { m_y
= nSet
; m_byValid
= true; }
486 bool IsyValid() const { return m_byValid
; }
488 void SethSpace( sal_Int32 nSet
) { m_hSpace
= nSet
; }
489 sal_Int32
GethSpace() const { return m_hSpace
; }
491 sal_Int32
GetvSpace() const { return m_vSpace
; }
492 void SetvSpace( sal_Int32 nSet
) { m_vSpace
= nSet
; }
494 sal_Int32
GethRule() const { return m_hRule
; }
495 void SethRule( sal_Int32 nSet
) { m_hRule
= nSet
; }
497 sal_Int32
GetxAlign() const { return m_xAlign
; }
498 void SetxAlign( sal_Int32 nSet
) { m_xAlign
= nSet
; }
500 sal_Int32
GetyAlign() const { return m_yAlign
; }
501 void SetyAlign( sal_Int32 nSet
) { m_yAlign
= nSet
; }
503 sal_Int8
GetDropCapLength() const { return m_nDropCapLength
; }
504 void SetDropCapLength( sal_Int8 nSet
) { m_nDropCapLength
= nSet
; }
506 const css::uno::Reference
< css::text::XTextRange
>& GetStartingRange() const { return m_xStartingRange
; }
507 void SetStartingRange( const css::uno::Reference
< css::text::XTextRange
>& xSet
) { m_xStartingRange
= xSet
; }
509 const css::uno::Reference
< css::text::XTextRange
>& GetEndingRange() const { return m_xEndingRange
; }
510 void SetEndingRange( const css::uno::Reference
< css::text::XTextRange
>& xSet
) { m_xEndingRange
= xSet
; }
512 const OUString
& GetParaStyleName() const { return m_sParaStyleName
; }
513 void SetParaStyleName( const OUString
& rSet
) { m_sParaStyleName
= rSet
; }
515 const OUString
& GetParaId() const { return m_sParaId
; }
516 void SetParaId(const OUString
& rSet
) { m_sParaId
= rSet
; }
518 void ResetFrameProperties();
521 typedef tools::SvRef
< ParagraphProperties
> ParagraphPropertiesPtr
;
523 class ParagraphPropertiesPropertyMap
: public PropertyMap
{
525 ParagraphProperties
& props() { return m_props
; }
527 ParagraphProperties
const & props() const { return m_props
; }
530 ParagraphProperties m_props
;
533 /*-------------------------------------------------------------------------
534 property map of a stylesheet
535 -----------------------------------------------------------------------*/
537 #define WW_OUTLINE_MAX sal_Int16( 9 )
538 #define WW_OUTLINE_MIN sal_Int16( 0 )
540 class StyleSheetPropertyMap
541 : public ParagraphPropertiesPropertyMap
544 sal_Int16 mnListLevel
;
545 sal_Int16 mnOutlineLevel
;
548 explicit StyleSheetPropertyMap();
550 sal_Int16
GetListLevel() const { return mnListLevel
; }
551 void SetListLevel( sal_Int16 nLevel
) { mnListLevel
= nLevel
; }
553 sal_Int16
GetOutlineLevel() const { return mnOutlineLevel
; }
554 void SetOutlineLevel(sal_Int16 nLevel
) { if (nLevel
<= WW_OUTLINE_MAX
) mnOutlineLevel
= nLevel
; }
557 class ParagraphPropertyMap
558 : public ParagraphPropertiesPropertyMap
561 explicit ParagraphPropertyMap() {}
564 class TablePropertyMap
568 enum TablePropertyMapTarget
570 TablePropertyMapTarget_START
,
571 CELL_MAR_LEFT
= TablePropertyMapTarget_START
,
579 TablePropertyMapTarget_MAX
595 ValidValue m_aValidValues
[TablePropertyMapTarget_MAX
];
598 explicit TablePropertyMap() {}
600 bool getValue( TablePropertyMapTarget eWhich
, sal_Int32
& nFill
);
601 void setValue( TablePropertyMapTarget eWhich
, sal_Int32 nSet
);
603 virtual void insertTableProperties( const PropertyMap
*, const bool bOverwrite
= true ) override
;
606 typedef tools::SvRef
< TablePropertyMap
> TablePropertyMapPtr
;
608 /// Information about a paragraph to be finished after a table end.
609 struct TableParagraph
611 css::uno::Reference
<css::text::XTextRange
> m_rStartParagraph
;
612 css::uno::Reference
<css::text::XTextRange
> m_rEndParagraph
;
613 PropertyMapPtr m_pPropertyMap
;
614 css::uno::Reference
<css::beans::XPropertySet
> m_rPropertySet
;
617 typedef std::shared_ptr
< std::vector
<TableParagraph
> > TableParagraphVectorPtr
;
619 } // namespace writerfilter::dmapper
621 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */