summaryrefslogtreecommitdiff
path: root/writerfilter/source
diff options
context:
space:
mode:
Diffstat (limited to 'writerfilter/source')
-rw-r--r--writerfilter/source/dmapper/BorderHandler.cxx213
-rw-r--r--writerfilter/source/dmapper/BorderHandler.hxx80
-rw-r--r--writerfilter/source/dmapper/CellColorHandler.cxx331
-rw-r--r--writerfilter/source/dmapper/CellColorHandler.hxx66
-rw-r--r--writerfilter/source/dmapper/CellMarginHandler.cxx177
-rw-r--r--writerfilter/source/dmapper/CellMarginHandler.hxx64
-rw-r--r--writerfilter/source/dmapper/ConversionHelper.cxx670
-rw-r--r--writerfilter/source/dmapper/ConversionHelper.hxx58
-rw-r--r--writerfilter/source/dmapper/DomainMapper.cxx4080
-rw-r--r--writerfilter/source/dmapper/DomainMapper.hxx182
-rw-r--r--writerfilter/source/dmapper/DomainMapperTableHandler.cxx1697
-rw-r--r--writerfilter/source/dmapper/DomainMapperTableHandler.hxx124
-rw-r--r--writerfilter/source/dmapper/DomainMapperTableManager.cxx827
-rw-r--r--writerfilter/source/dmapper/DomainMapperTableManager.hxx138
-rw-r--r--writerfilter/source/dmapper/DomainMapper_Impl.cxx7519
-rw-r--r--writerfilter/source/dmapper/DomainMapper_Impl.hxx1121
-rw-r--r--writerfilter/source/dmapper/FFDataHandler.cxx190
-rw-r--r--writerfilter/source/dmapper/FFDataHandler.hxx101
-rw-r--r--writerfilter/source/dmapper/FieldTypes.hxx306
-rw-r--r--writerfilter/source/dmapper/FontTable.cxx299
-rw-r--r--writerfilter/source/dmapper/FontTable.hxx107
-rw-r--r--writerfilter/source/dmapper/FormControlHelper.cxx375
-rw-r--r--writerfilter/source/dmapper/FormControlHelper.hxx55
-rw-r--r--writerfilter/source/dmapper/GraphicHelpers.cxx348
-rw-r--r--writerfilter/source/dmapper/GraphicHelpers.hxx82
-rw-r--r--writerfilter/source/dmapper/GraphicImport.cxx1632
-rw-r--r--writerfilter/source/dmapper/GraphicImport.hxx136
-rw-r--r--writerfilter/source/dmapper/LatentStyleHandler.cxx71
-rw-r--r--writerfilter/source/dmapper/LatentStyleHandler.hxx38
-rw-r--r--writerfilter/source/dmapper/LoggedResources.cxx382
-rw-r--r--writerfilter/source/dmapper/LoggedResources.hxx138
-rw-r--r--writerfilter/source/dmapper/MeasureHandler.cxx136
-rw-r--r--writerfilter/source/dmapper/MeasureHandler.hxx63
-rw-r--r--writerfilter/source/dmapper/ModelEventListener.cxx117
-rw-r--r--writerfilter/source/dmapper/ModelEventListener.hxx42
-rw-r--r--writerfilter/source/dmapper/NumberingManager.cxx1174
-rw-r--r--writerfilter/source/dmapper/NumberingManager.hxx259
-rw-r--r--writerfilter/source/dmapper/OLEHandler.cxx331
-rw-r--r--writerfilter/source/dmapper/OLEHandler.hxx97
-rw-r--r--writerfilter/source/dmapper/PageBordersHandler.cxx142
-rw-r--r--writerfilter/source/dmapper/PageBordersHandler.hxx65
-rw-r--r--writerfilter/source/dmapper/PropertyIds.cxx377
-rw-r--r--writerfilter/source/dmapper/PropertyIds.hxx374
-rw-r--r--writerfilter/source/dmapper/PropertyMap.cxx2155
-rw-r--r--writerfilter/source/dmapper/PropertyMap.hxx607
-rw-r--r--writerfilter/source/dmapper/PropertyMapHelper.cxx98
-rw-r--r--writerfilter/source/dmapper/PropertyMapHelper.hxx37
-rw-r--r--writerfilter/source/dmapper/SdtHelper.cxx250
-rw-r--r--writerfilter/source/dmapper/SdtHelper.hxx116
-rw-r--r--writerfilter/source/dmapper/SectionColumnHandler.cxx90
-rw-r--r--writerfilter/source/dmapper/SectionColumnHandler.hxx65
-rw-r--r--writerfilter/source/dmapper/SettingsTable.cxx891
-rw-r--r--writerfilter/source/dmapper/SettingsTable.hxx111
-rw-r--r--writerfilter/source/dmapper/SmartTagHandler.cxx127
-rw-r--r--writerfilter/source/dmapper/SmartTagHandler.hxx63
-rw-r--r--writerfilter/source/dmapper/StyleSheetTable.cxx1648
-rw-r--r--writerfilter/source/dmapper/StyleSheetTable.hxx150
-rw-r--r--writerfilter/source/dmapper/TDefTableHandler.cxx458
-rw-r--r--writerfilter/source/dmapper/TDefTableHandler.hxx75
-rw-r--r--writerfilter/source/dmapper/TableData.hxx393
-rw-r--r--writerfilter/source/dmapper/TableManager.cxx603
-rw-r--r--writerfilter/source/dmapper/TableManager.hxx524
-rw-r--r--writerfilter/source/dmapper/TablePositionHandler.cxx154
-rw-r--r--writerfilter/source/dmapper/TablePositionHandler.hxx71
-rw-r--r--writerfilter/source/dmapper/TablePropertiesHandler.cxx394
-rw-r--r--writerfilter/source/dmapper/TablePropertiesHandler.hxx97
-rw-r--r--writerfilter/source/dmapper/TagLogger.cxx237
-rw-r--r--writerfilter/source/dmapper/TagLogger.hxx68
-rw-r--r--writerfilter/source/dmapper/TblStylePrHandler.cxx259
-rw-r--r--writerfilter/source/dmapper/TblStylePrHandler.hxx85
-rw-r--r--writerfilter/source/dmapper/TextEffectsHandler.cxx803
-rw-r--r--writerfilter/source/dmapper/TextEffectsHandler.hxx72
-rw-r--r--writerfilter/source/dmapper/ThemeTable.cxx564
-rw-r--r--writerfilter/source/dmapper/ThemeTable.hxx61
-rw-r--r--writerfilter/source/dmapper/TrackChangesHandler.cxx95
-rw-r--r--writerfilter/source/dmapper/TrackChangesHandler.hxx43
-rw-r--r--writerfilter/source/dmapper/WrapPolygonHandler.cxx217
-rw-r--r--writerfilter/source/dmapper/WrapPolygonHandler.hxx85
-rw-r--r--writerfilter/source/dmapper/domainmapperfactory.cxx39
-rw-r--r--writerfilter/source/dmapper/util.cxx70
-rw-r--r--writerfilter/source/dmapper/util.hxx35
-rw-r--r--writerfilter/source/filter/RtfFilter.cxx220
-rw-r--r--writerfilter/source/filter/WriterFilter.cxx366
-rw-r--r--writerfilter/source/ooxml/Handler.cxx428
-rw-r--r--writerfilter/source/ooxml/Handler.hxx180
-rw-r--r--writerfilter/source/ooxml/OOXMLBinaryObjectReference.cxx71
-rw-r--r--writerfilter/source/ooxml/OOXMLBinaryObjectReference.hxx46
-rw-r--r--writerfilter/source/ooxml/OOXMLDocumentImpl.cxx883
-rw-r--r--writerfilter/source/ooxml/OOXMLDocumentImpl.hxx150
-rw-r--r--writerfilter/source/ooxml/OOXMLFactory.cxx216
-rw-r--r--writerfilter/source/ooxml/OOXMLFactory.hxx108
-rw-r--r--writerfilter/source/ooxml/OOXMLFastContextHandler.cxx2203
-rw-r--r--writerfilter/source/ooxml/OOXMLFastContextHandler.hxx606
-rw-r--r--writerfilter/source/ooxml/OOXMLFastDocumentHandler.cxx147
-rw-r--r--writerfilter/source/ooxml/OOXMLFastDocumentHandler.hxx93
-rw-r--r--writerfilter/source/ooxml/OOXMLFastHelper.hxx63
-rw-r--r--writerfilter/source/ooxml/OOXMLParserState.cxx280
-rw-r--r--writerfilter/source/ooxml/OOXMLParserState.hxx120
-rw-r--r--writerfilter/source/ooxml/OOXMLPropertySet.cxx857
-rw-r--r--writerfilter/source/ooxml/OOXMLPropertySet.hxx416
-rw-r--r--writerfilter/source/ooxml/OOXMLStreamImpl.cxx443
-rw-r--r--writerfilter/source/ooxml/OOXMLStreamImpl.hxx85
-rw-r--r--writerfilter/source/ooxml/README13
-rw-r--r--writerfilter/source/ooxml/factory_ns.py76
-rw-r--r--writerfilter/source/ooxml/factoryimpl.py215
-rw-r--r--writerfilter/source/ooxml/factoryimpl_ns.py759
-rw-r--r--writerfilter/source/ooxml/factoryinc.py49
-rw-r--r--writerfilter/source/ooxml/model.xml19198
-rw-r--r--writerfilter/source/ooxml/modelpreprocess.py90
-rw-r--r--writerfilter/source/ooxml/qnametostr.py64
-rw-r--r--writerfilter/source/ooxml/resourceids.py60
-rw-r--r--writerfilter/source/ooxml/tox.ini2
-rw-r--r--writerfilter/source/rtftok/README12
-rw-r--r--writerfilter/source/rtftok/rtfcharsets.cxx55
-rw-r--r--writerfilter/source/rtftok/rtfcharsets.hxx27
-rw-r--r--writerfilter/source/rtftok/rtfcontrolwords.cxx1900
-rw-r--r--writerfilter/source/rtftok/rtfcontrolwords.hxx2053
-rw-r--r--writerfilter/source/rtftok/rtfdispatchdestination.cxx682
-rw-r--r--writerfilter/source/rtftok/rtfdispatchflag.cxx1239
-rw-r--r--writerfilter/source/rtftok/rtfdispatchsymbol.cxx432
-rw-r--r--writerfilter/source/rtftok/rtfdispatchvalue.cxx1801
-rw-r--r--writerfilter/source/rtftok/rtfdocumentfactory.cxx28
-rw-r--r--writerfilter/source/rtftok/rtfdocumentimpl.cxx3852
-rw-r--r--writerfilter/source/rtftok/rtfdocumentimpl.hxx983
-rw-r--r--writerfilter/source/rtftok/rtffly.hxx141
-rw-r--r--writerfilter/source/rtftok/rtflistener.hxx72
-rw-r--r--writerfilter/source/rtftok/rtflookahead.cxx101
-rw-r--r--writerfilter/source/rtftok/rtflookahead.hxx60
-rw-r--r--writerfilter/source/rtftok/rtfreferenceproperties.cxx40
-rw-r--r--writerfilter/source/rtftok/rtfreferenceproperties.hxx36
-rw-r--r--writerfilter/source/rtftok/rtfreferencetable.cxx29
-rw-r--r--writerfilter/source/rtftok/rtfreferencetable.hxx35
-rw-r--r--writerfilter/source/rtftok/rtfsdrimport.cxx1152
-rw-r--r--writerfilter/source/rtftok/rtfsdrimport.hxx106
-rw-r--r--writerfilter/source/rtftok/rtfskipdestination.cxx42
-rw-r--r--writerfilter/source/rtftok/rtfskipdestination.hxx36
-rw-r--r--writerfilter/source/rtftok/rtfsprm.cxx448
-rw-r--r--writerfilter/source/rtftok/rtfsprm.hxx104
-rw-r--r--writerfilter/source/rtftok/rtftokenizer.cxx330
-rw-r--r--writerfilter/source/rtftok/rtftokenizer.hxx75
-rw-r--r--writerfilter/source/rtftok/rtfvalue.cxx210
-rw-r--r--writerfilter/source/rtftok/rtfvalue.hxx87
142 files changed, 0 insertions, 81369 deletions
diff --git a/writerfilter/source/dmapper/BorderHandler.cxx b/writerfilter/source/dmapper/BorderHandler.cxx
deleted file mode 100644
index 0045805d6e85..000000000000
--- a/writerfilter/source/dmapper/BorderHandler.cxx
+++ /dev/null
@@ -1,213 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * 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 .
- */
-#include "BorderHandler.hxx"
-#include "TDefTableHandler.hxx"
-#include "PropertyMap.hxx"
-#include "ConversionHelper.hxx"
-#include <com/sun/star/table/BorderLine2.hpp>
-#include <o3tl/enumarray.hxx>
-#include <o3tl/enumrange.hxx>
-#include <ooxml/resourceids.hxx>
-#include <filter/msfilter/util.hxx>
-#include <comphelper/sequence.hxx>
-#include <tools/color.hxx>
-
-namespace writerfilter::dmapper {
-
-using namespace ::com::sun::star;
-
-
-BorderHandler::BorderHandler( bool bOOXML ) :
-LoggedProperties("BorderHandler"),
-m_nLineWidth(15), // Word default, in twips
-m_nLineType(0),
-m_nLineColor(0),
-m_nLineDistance(0),
-m_bShadow(false),
-m_bOOXML( bOOXML )
-{
- m_aFilledLines.fill(false);
- m_aBorderLines.fill(table::BorderLine2());
-}
-
-BorderHandler::~BorderHandler()
-{
-}
-
-void BorderHandler::lcl_attribute(Id rName, Value & rVal)
-{
- sal_Int32 nIntValue = rVal.getInt();
- switch( rName )
- {
- case NS_ooxml::LN_CT_Border_sz:
- // width of a single line in 1/8 pt, max of 32 pt -> twip * 5 / 2.
- m_nLineWidth = nIntValue * 5 / 2;
- appendGrabBag("sz", OUString::number(nIntValue));
- break;
- case NS_ooxml::LN_CT_Border_val:
- m_nLineType = nIntValue;
- appendGrabBag("val", TDefTableHandler::getBorderTypeString(nIntValue));
- break;
- case NS_ooxml::LN_CT_Border_color:
- m_nLineColor = nIntValue;
- appendGrabBag("color", OUString::fromUtf8(msfilter::util::ConvertColor(Color(ColorTransparency, nIntValue))));
- break;
- case NS_ooxml::LN_CT_Border_space: // border distance in points
- m_nLineDistance = ConversionHelper::convertTwipToMM100( nIntValue * 20 );
- appendGrabBag("space", OUString::number(nIntValue));
- break;
- case NS_ooxml::LN_CT_Border_shadow:
- m_bShadow = nIntValue;
- break;
- case NS_ooxml::LN_CT_Border_frame:
- case NS_ooxml::LN_CT_Border_themeTint:
- appendGrabBag("themeTint", OUString::number(nIntValue, 16));
- break;
- case NS_ooxml::LN_CT_Border_themeColor:
- appendGrabBag("themeColor", TDefTableHandler::getThemeColorTypeString(nIntValue));
- break;
- default:
- OSL_FAIL( "unknown attribute");
- }
-}
-
-void BorderHandler::lcl_sprm(Sprm & rSprm)
-{
- BorderPosition pos;
- const bool rtl = false; // TODO detect
- OUString aBorderPos;
- switch( rSprm.getId())
- {
- case NS_ooxml::LN_CT_TblBorders_top:
- pos = BorderPosition::Top;
- aBorderPos = "top";
- break;
- case NS_ooxml::LN_CT_TblBorders_start:
- pos = rtl ? BorderPosition::Right : BorderPosition::Left;
- aBorderPos = "start";
- break;
- case NS_ooxml::LN_CT_TblBorders_left:
- pos = BorderPosition::Left;
- aBorderPos = "left";
- break;
- case NS_ooxml::LN_CT_TblBorders_bottom:
- pos = BorderPosition::Bottom;
- aBorderPos = "bottom";
- break;
- case NS_ooxml::LN_CT_TblBorders_end:
- pos = rtl ? BorderPosition::Left : BorderPosition::Right;
- aBorderPos = "end";
- break;
- case NS_ooxml::LN_CT_TblBorders_right:
- pos = BorderPosition::Right;
- aBorderPos = "right";
- break;
- case NS_ooxml::LN_CT_TblBorders_insideH:
- pos = BorderPosition::Horizontal;
- aBorderPos = "insideH";
- break;
- case NS_ooxml::LN_CT_TblBorders_insideV:
- pos = BorderPosition::Vertical;
- aBorderPos = "insideV";
- break;
- default:
- return;
- }
- writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
- if( pProperties)
- {
- std::vector<beans::PropertyValue> aSavedGrabBag;
- if (!m_aInteropGrabBagName.isEmpty())
- {
- aSavedGrabBag = m_aInteropGrabBag;
- m_aInteropGrabBag.clear();
- }
- pProperties->resolve(*this);
- if (!m_aInteropGrabBagName.isEmpty())
- {
- aSavedGrabBag.push_back(getInteropGrabBag(aBorderPos));
- m_aInteropGrabBag = aSavedGrabBag;
- }
- }
- ConversionHelper::MakeBorderLine( m_nLineWidth, m_nLineType, m_nLineColor,
- m_aBorderLines[ pos ], m_bOOXML );
- m_aFilledLines[ pos ] = true;
-}
-
-PropertyMapPtr BorderHandler::getProperties()
-{
- static const o3tl::enumarray<BorderPosition, PropertyIds> aPropNames =
- {
- PROP_TOP_BORDER,
- PROP_LEFT_BORDER,
- PROP_BOTTOM_BORDER,
- PROP_RIGHT_BORDER,
- META_PROP_HORIZONTAL_BORDER,
- META_PROP_VERTICAL_BORDER
- };
- PropertyMapPtr pPropertyMap(new PropertyMap);
- // don't fill in default properties
- if( m_bOOXML )
- {
- for( auto nProp: o3tl::enumrange<BorderPosition>())
- {
- if ( m_aFilledLines[nProp] ) {
- pPropertyMap->Insert( aPropNames[nProp], uno::makeAny( m_aBorderLines[nProp] ) );
- }
- }
- }
- return pPropertyMap;
-}
-
-table::BorderLine2 BorderHandler::getBorderLine()
-{
- table::BorderLine2 aBorderLine;
- ConversionHelper::MakeBorderLine( m_nLineWidth, m_nLineType, m_nLineColor, aBorderLine, m_bOOXML );
- return aBorderLine;
-}
-
-
-void BorderHandler::enableInteropGrabBag(const OUString& aName)
-{
- m_aInteropGrabBagName = aName;
-}
-
-beans::PropertyValue BorderHandler::getInteropGrabBag(const OUString& aName)
-{
- beans::PropertyValue aRet;
- if (aName.isEmpty())
- aRet.Name = m_aInteropGrabBagName;
- else
- aRet.Name = aName;
-
- aRet.Value <<= comphelper::containerToSequence(m_aInteropGrabBag);
- return aRet;
-}
-
-void BorderHandler::appendGrabBag(const OUString& aKey, const OUString& aValue)
-{
- beans::PropertyValue aProperty;
- aProperty.Name = aKey;
- aProperty.Value <<= aValue;
- m_aInteropGrabBag.push_back(aProperty);
-}
-
-} //namespace writerfilter::dmapper
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/BorderHandler.hxx b/writerfilter/source/dmapper/BorderHandler.hxx
deleted file mode 100644
index 9e8aa7a62a90..000000000000
--- a/writerfilter/source/dmapper/BorderHandler.hxx
+++ /dev/null
@@ -1,80 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * 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 .
- */
-#ifndef INCLUDED_WRITERFILTER_SOURCE_DMAPPER_BORDERHANDLER_HXX
-#define INCLUDED_WRITERFILTER_SOURCE_DMAPPER_BORDERHANDLER_HXX
-
-#include <vector>
-#include "LoggedResources.hxx"
-#include "PropertyMap.hxx"
-#include <com/sun/star/table/BorderLine2.hpp>
-#include <com/sun/star/beans/PropertyValue.hpp>
-#include <o3tl/enumarray.hxx>
-
-namespace writerfilter::dmapper
-{
-class PropertyMap;
-class BorderHandler : public LoggedProperties
-{
-private:
- //todo: order is a guess
- enum class BorderPosition
- {
- Top,
- Left,
- Bottom,
- Right,
- Horizontal,
- Vertical,
- LAST = Vertical
- };
-
- //values of the current border
- sal_Int32 m_nLineWidth;
- sal_Int32 m_nLineType;
- sal_Int32 m_nLineColor;
- sal_Int32 m_nLineDistance;
- bool m_bShadow;
- bool m_bOOXML;
-
- o3tl::enumarray<BorderPosition, bool> m_aFilledLines;
- o3tl::enumarray<BorderPosition, css::table::BorderLine2> m_aBorderLines;
- OUString m_aInteropGrabBagName;
- std::vector<css::beans::PropertyValue> m_aInteropGrabBag;
- void appendGrabBag(const OUString& aKey, const OUString& aValue);
-
- // Properties
- virtual void lcl_attribute(Id Name, Value & val) override;
- virtual void lcl_sprm(Sprm & sprm) override;
-
-public:
- explicit BorderHandler( bool bOOXML );
- virtual ~BorderHandler() override;
-
- PropertyMapPtr getProperties();
- css::table::BorderLine2 getBorderLine();
- sal_Int32 getLineDistance() const { return m_nLineDistance;}
- bool getShadow() const { return m_bShadow;}
- void enableInteropGrabBag(const OUString& aName);
- css::beans::PropertyValue getInteropGrabBag(const OUString& aName = OUString());
-};
-}
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/CellColorHandler.cxx b/writerfilter/source/dmapper/CellColorHandler.cxx
deleted file mode 100644
index 193477a31fc2..000000000000
--- a/writerfilter/source/dmapper/CellColorHandler.cxx
+++ /dev/null
@@ -1,331 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * 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 .
- */
-#include "CellColorHandler.hxx"
-#include "PropertyMap.hxx"
-#include "TDefTableHandler.hxx"
-#include <ooxml/resourceids.hxx>
-#include <com/sun/star/drawing/FillStyle.hpp>
-#include <com/sun/star/drawing/ShadingPattern.hpp>
-#include <filter/msfilter/util.hxx>
-#include <comphelper/sequence.hxx>
-#include <tools/color.hxx>
-
-namespace writerfilter::dmapper {
-
-using namespace ::com::sun::star;
-
-CellColorHandler::CellColorHandler() :
-LoggedProperties("CellColorHandler"),
-m_nShadingPattern( drawing::ShadingPattern::CLEAR ),
-m_nColor( 0xffffffff ),
-m_nFillColor( 0xffffffff ),
-m_bAutoFillColor( true ),
-m_bFillSpecified( false ),
- m_OutputFormat( Form )
-{
-}
-
-CellColorHandler::~CellColorHandler()
-{
-}
-
-// ST_Shd strings are converted to integers by the tokenizer, store strings in
-// the InteropGrabBag
-static uno::Any lcl_ConvertShd(sal_Int32 nIntValue)
-{
- OUString aRet;
- // This should be in sync with the ST_Shd list in ooxml's model.xml.
- switch (nIntValue)
- {
- case NS_ooxml::LN_Value_ST_Shd_clear: aRet = "clear"; break;
- case NS_ooxml::LN_Value_ST_Shd_solid: aRet = "solid"; break;
- case NS_ooxml::LN_Value_ST_Shd_pct5: aRet = "pct5"; break;
- case NS_ooxml::LN_Value_ST_Shd_pct10: aRet = "pct10"; break;
- case NS_ooxml::LN_Value_ST_Shd_pct20: aRet = "pct20"; break;
- case NS_ooxml::LN_Value_ST_Shd_pct25: aRet = "pct25"; break;
- case NS_ooxml::LN_Value_ST_Shd_pct30: aRet = "pct30"; break;
- case NS_ooxml::LN_Value_ST_Shd_pct40: aRet = "pct40"; break;
- case NS_ooxml::LN_Value_ST_Shd_pct50: aRet = "pct50"; break;
- case NS_ooxml::LN_Value_ST_Shd_pct60: aRet = "pct60"; break;
- case NS_ooxml::LN_Value_ST_Shd_pct70: aRet = "pct70"; break;
- case NS_ooxml::LN_Value_ST_Shd_pct75: aRet = "pct75"; break;
- case NS_ooxml::LN_Value_ST_Shd_pct80: aRet = "pct80"; break;
- case NS_ooxml::LN_Value_ST_Shd_pct90: aRet = "pct90"; break;
- case NS_ooxml::LN_Value_ST_Shd_horzStripe: aRet = "horzStripe"; break;
- case NS_ooxml::LN_Value_ST_Shd_vertStripe: aRet = "vertStripe"; break;
- case NS_ooxml::LN_Value_ST_Shd_reverseDiagStripe: aRet = "reverseDiagStripe"; break;
- case NS_ooxml::LN_Value_ST_Shd_diagStripe: aRet = "diagStripe"; break;
- case NS_ooxml::LN_Value_ST_Shd_horzCross: aRet = "horzCross"; break;
- case NS_ooxml::LN_Value_ST_Shd_diagCross: aRet = "diagCross"; break;
- case NS_ooxml::LN_Value_ST_Shd_thinHorzStripe: aRet = "thinHorzStripe"; break;
- case NS_ooxml::LN_Value_ST_Shd_thinVertStripe: aRet = "thinVertStripe"; break;
- case NS_ooxml::LN_Value_ST_Shd_thinReverseDiagStripe: aRet = "thinReverseDiagStripe"; break;
- case NS_ooxml::LN_Value_ST_Shd_thinDiagStripe: aRet = "thinDiagStripe"; break;
- case NS_ooxml::LN_Value_ST_Shd_thinHorzCross: aRet = "thinHorzCross"; break;
- case NS_ooxml::LN_Value_ST_Shd_thinDiagCross: aRet = "thinDiagCross"; break;
- case NS_ooxml::LN_Value_ST_Shd_pct12: aRet = "pct12"; break;
- case NS_ooxml::LN_Value_ST_Shd_pct15: aRet = "pct15"; break;
- case NS_ooxml::LN_Value_ST_Shd_pct35: aRet = "pct35"; break;
- case NS_ooxml::LN_Value_ST_Shd_pct37: aRet = "pct37"; break;
- case NS_ooxml::LN_Value_ST_Shd_pct45: aRet = "pct45"; break;
- case NS_ooxml::LN_Value_ST_Shd_pct55: aRet = "pct55"; break;
- case NS_ooxml::LN_Value_ST_Shd_pct62: aRet = "pct62"; break;
- case NS_ooxml::LN_Value_ST_Shd_pct65: aRet = "pct65"; break;
- case NS_ooxml::LN_Value_ST_Shd_pct85: aRet = "pct85"; break;
- case NS_ooxml::LN_Value_ST_Shd_pct87: aRet = "pct87"; break;
- case NS_ooxml::LN_Value_ST_Shd_pct95: aRet = "pct95"; break;
- case NS_ooxml::LN_Value_ST_Shd_nil: aRet = "nil"; break;
- }
- return uno::makeAny(aRet);
-}
-
-void CellColorHandler::lcl_attribute(Id rName, Value & rVal)
-{
- sal_Int32 nIntValue = rVal.getInt();
- switch( rName )
- {
- case NS_ooxml::LN_CT_Shd_val:
- {
- createGrabBag("val", lcl_ConvertShd(nIntValue));
- m_nShadingPattern = nIntValue;
- }
- break;
- case NS_ooxml::LN_CT_Shd_fill:
- createGrabBag("fill", uno::makeAny(OUString::fromUtf8(msfilter::util::ConvertColor(Color(ColorTransparency, nIntValue)))));
- if( nIntValue == sal_Int32(COL_AUTO) )
- nIntValue = 0xffffff; //fill color auto means white
- else
- m_bAutoFillColor = false;
-
- m_nFillColor = nIntValue;
- m_bFillSpecified = true;
- break;
- case NS_ooxml::LN_CT_Shd_color:
- createGrabBag("color", uno::makeAny(OUString::fromUtf8(msfilter::util::ConvertColor(Color(ColorTransparency, nIntValue)))));
- if( nIntValue == sal_Int32(COL_AUTO) )
- nIntValue = 0; //shading color auto means black
- //color of the shading
- m_nColor = nIntValue;
- break;
- case NS_ooxml::LN_CT_Shd_themeFill:
- createGrabBag("themeFill", uno::makeAny(TDefTableHandler::getThemeColorTypeString(nIntValue)));
- break;
- case NS_ooxml::LN_CT_Shd_themeFillShade:
- createGrabBag("themeFillShade", uno::makeAny(OUString::number(nIntValue, 16)));
- break;
- case NS_ooxml::LN_CT_Shd_themeFillTint:
- createGrabBag("themeFillTint", uno::makeAny(OUString::number(nIntValue, 16)));
- break;
- case NS_ooxml::LN_CT_Shd_themeColor:
- createGrabBag("themeColor", uno::makeAny(TDefTableHandler::getThemeColorTypeString(nIntValue)));
- break;
- case NS_ooxml::LN_CT_Shd_themeShade:
- createGrabBag("themeShade", uno::makeAny(OUString::number(nIntValue, 16)));
- break;
- case NS_ooxml::LN_CT_Shd_themeTint:
- createGrabBag("themeTint", uno::makeAny(OUString::number(nIntValue, 16)));
- break;
- default:
- OSL_FAIL( "unknown attribute");
- }
-}
-
-void CellColorHandler::lcl_sprm(Sprm &) {}
-
-TablePropertyMapPtr CellColorHandler::getProperties()
-{
- TablePropertyMapPtr pPropertyMap(new TablePropertyMap);
-
- // Code from binary word filter (the values are out of 1000)
- sal_Int32 nWW8BrushStyle = 0;
- switch (m_nShadingPattern)
- {
- // Clear-Brush
- case NS_ooxml::LN_Value_ST_Shd_clear: nWW8BrushStyle = 0; break;
- // Solid-Brush
- case NS_ooxml::LN_Value_ST_Shd_solid: nWW8BrushStyle = 1000; break;
- // Percent values
- case NS_ooxml::LN_Value_ST_Shd_pct5: nWW8BrushStyle = 50; break;
- case NS_ooxml::LN_Value_ST_Shd_pct10: nWW8BrushStyle = 100; break;
- case NS_ooxml::LN_Value_ST_Shd_pct20: nWW8BrushStyle = 200; break;
- case NS_ooxml::LN_Value_ST_Shd_pct25: nWW8BrushStyle = 250; break;
- case NS_ooxml::LN_Value_ST_Shd_pct30: nWW8BrushStyle = 300; break;
- case NS_ooxml::LN_Value_ST_Shd_pct40: nWW8BrushStyle = 400; break;
- case NS_ooxml::LN_Value_ST_Shd_pct50: nWW8BrushStyle = 500; break;
- case NS_ooxml::LN_Value_ST_Shd_pct60: nWW8BrushStyle = 600; break;
- case NS_ooxml::LN_Value_ST_Shd_pct70: nWW8BrushStyle = 700; break;
- case NS_ooxml::LN_Value_ST_Shd_pct75: nWW8BrushStyle = 750; break;
- case NS_ooxml::LN_Value_ST_Shd_pct80: nWW8BrushStyle = 800; break;
- case NS_ooxml::LN_Value_ST_Shd_pct90: nWW8BrushStyle = 900; break;
- // Special cases
- case NS_ooxml::LN_Value_ST_Shd_horzStripe: nWW8BrushStyle = 333; break; // Dark Horizontal
- case NS_ooxml::LN_Value_ST_Shd_vertStripe: nWW8BrushStyle = 333; break; // Dark Vertical
- case NS_ooxml::LN_Value_ST_Shd_reverseDiagStripe: nWW8BrushStyle = 333; break; // Dark Forward Diagonal
- case NS_ooxml::LN_Value_ST_Shd_diagStripe: nWW8BrushStyle = 333; break; // Dark Backward Diagonal
- case NS_ooxml::LN_Value_ST_Shd_horzCross: nWW8BrushStyle = 333; break; // Dark Cross
- case NS_ooxml::LN_Value_ST_Shd_diagCross: nWW8BrushStyle = 333; break; // Dark Diagonal Cross
- case NS_ooxml::LN_Value_ST_Shd_thinHorzStripe: nWW8BrushStyle = 333; break; // Horizontal
- case NS_ooxml::LN_Value_ST_Shd_thinVertStripe: nWW8BrushStyle = 333; break; // Vertical
- case NS_ooxml::LN_Value_ST_Shd_thinReverseDiagStripe: nWW8BrushStyle = 333; break; // Forward Diagonal
- case NS_ooxml::LN_Value_ST_Shd_thinDiagStripe: nWW8BrushStyle = 333; break; // Backward Diagonal
- case NS_ooxml::LN_Value_ST_Shd_thinHorzCross: nWW8BrushStyle = 333; break; // Cross
- case NS_ooxml::LN_Value_ST_Shd_thinDiagCross: nWW8BrushStyle = 333; break; // 25 Diagonal Cross
- // Different shading types
- case NS_ooxml::LN_Value_ST_Shd_pct12: nWW8BrushStyle = 125; break;
- case NS_ooxml::LN_Value_ST_Shd_pct15: nWW8BrushStyle = 150; break;
- case NS_ooxml::LN_Value_ST_Shd_pct35: nWW8BrushStyle = 350; break;
- case NS_ooxml::LN_Value_ST_Shd_pct37: nWW8BrushStyle = 375; break;
- case NS_ooxml::LN_Value_ST_Shd_pct45: nWW8BrushStyle = 450; break;
- case NS_ooxml::LN_Value_ST_Shd_pct55: nWW8BrushStyle = 550; break;
- case NS_ooxml::LN_Value_ST_Shd_pct62: nWW8BrushStyle = 625; break;
- case NS_ooxml::LN_Value_ST_Shd_pct65: nWW8BrushStyle = 650; break;
- case NS_ooxml::LN_Value_ST_Shd_pct85: nWW8BrushStyle = 850; break;
- case NS_ooxml::LN_Value_ST_Shd_pct87: nWW8BrushStyle = 875; break;
- case NS_ooxml::LN_Value_ST_Shd_pct95: nWW8BrushStyle = 950; break;
- }
-
- sal_Int32 nApplyColor = 0;
- if( !nWW8BrushStyle )
- {
- // Clear-Brush
- if ( m_bFillSpecified && m_bAutoFillColor )
- nApplyColor = sal_Int32(COL_AUTO);
- else
- nApplyColor = m_nFillColor;
- }
- else
- {
- sal_Int32 nFore = m_nColor;
- sal_Int32 nBack = m_nFillColor;
-
- sal_uInt32 nRed = ((nFore & 0xff0000)>>0x10) * nWW8BrushStyle;
- sal_uInt32 nGreen = ((nFore & 0xff00)>>0x8) * nWW8BrushStyle;
- sal_uInt32 nBlue = (nFore & 0xff) * nWW8BrushStyle;
- nRed += ((nBack & 0xff0000)>>0x10) * (1000L - nWW8BrushStyle);
- nGreen += ((nBack & 0xff00)>>0x8)* (1000L - nWW8BrushStyle);
- nBlue += (nBack & 0xff) * (1000L - nWW8BrushStyle);
-
- nApplyColor = ( (nRed/1000) << 0x10 ) + ((nGreen/1000) << 8) + nBlue/1000;
- }
-
- // Check if it is a 'Character'
- if (m_OutputFormat == Character)
- {
- sal_Int32 nShadingPattern = drawing::ShadingPattern::CLEAR;
- switch (m_nShadingPattern)
- {
- case NS_ooxml::LN_Value_ST_Shd_clear: nShadingPattern = drawing::ShadingPattern::CLEAR; break;
- case NS_ooxml::LN_Value_ST_Shd_solid: nShadingPattern = drawing::ShadingPattern::SOLID; break;
- case NS_ooxml::LN_Value_ST_Shd_pct5: nShadingPattern = drawing::ShadingPattern::PCT5; break;
- case NS_ooxml::LN_Value_ST_Shd_pct10: nShadingPattern = drawing::ShadingPattern::PCT10; break;
- case NS_ooxml::LN_Value_ST_Shd_pct20: nShadingPattern = drawing::ShadingPattern::PCT20; break;
- case NS_ooxml::LN_Value_ST_Shd_pct25: nShadingPattern = drawing::ShadingPattern::PCT25; break;
- case NS_ooxml::LN_Value_ST_Shd_pct30: nShadingPattern = drawing::ShadingPattern::PCT30; break;
- case NS_ooxml::LN_Value_ST_Shd_pct40: nShadingPattern = drawing::ShadingPattern::PCT40; break;
- case NS_ooxml::LN_Value_ST_Shd_pct50: nShadingPattern = drawing::ShadingPattern::PCT50; break;
- case NS_ooxml::LN_Value_ST_Shd_pct60: nShadingPattern = drawing::ShadingPattern::PCT60; break;
- case NS_ooxml::LN_Value_ST_Shd_pct70: nShadingPattern = drawing::ShadingPattern::PCT70; break;
- case NS_ooxml::LN_Value_ST_Shd_pct75: nShadingPattern = drawing::ShadingPattern::PCT75; break;
- case NS_ooxml::LN_Value_ST_Shd_pct80: nShadingPattern = drawing::ShadingPattern::PCT80; break;
- case NS_ooxml::LN_Value_ST_Shd_pct90: nShadingPattern = drawing::ShadingPattern::PCT90; break;
- case NS_ooxml::LN_Value_ST_Shd_horzStripe: nShadingPattern = drawing::ShadingPattern::HORZ_STRIPE; break;
- case NS_ooxml::LN_Value_ST_Shd_vertStripe: nShadingPattern = drawing::ShadingPattern::VERT_STRIPE; break;
- case NS_ooxml::LN_Value_ST_Shd_reverseDiagStripe: nShadingPattern = drawing::ShadingPattern::REVERSE_DIAG_STRIPE; break;
- case NS_ooxml::LN_Value_ST_Shd_diagStripe: nShadingPattern = drawing::ShadingPattern::DIAG_STRIPE; break;
- case NS_ooxml::LN_Value_ST_Shd_horzCross: nShadingPattern = drawing::ShadingPattern::HORZ_CROSS; break;
- case NS_ooxml::LN_Value_ST_Shd_diagCross: nShadingPattern = drawing::ShadingPattern::DIAG_CROSS; break;
- case NS_ooxml::LN_Value_ST_Shd_thinHorzStripe: nShadingPattern = drawing::ShadingPattern::THIN_HORZ_STRIPE; break;
- case NS_ooxml::LN_Value_ST_Shd_thinVertStripe: nShadingPattern = drawing::ShadingPattern::THIN_VERT_STRIPE; break;
- case NS_ooxml::LN_Value_ST_Shd_thinReverseDiagStripe: nShadingPattern = drawing::ShadingPattern::THIN_REVERSE_DIAG_STRIPE; break;
- case NS_ooxml::LN_Value_ST_Shd_thinDiagStripe: nShadingPattern = drawing::ShadingPattern::THIN_DIAG_STRIPE; break;
- case NS_ooxml::LN_Value_ST_Shd_thinHorzCross: nShadingPattern = drawing::ShadingPattern::THIN_HORZ_CROSS; break;
- case NS_ooxml::LN_Value_ST_Shd_thinDiagCross: nShadingPattern = drawing::ShadingPattern::THIN_DIAG_CROSS; break;
- case NS_ooxml::LN_Value_ST_Shd_pct12: nShadingPattern = drawing::ShadingPattern::PCT12; break;
- case NS_ooxml::LN_Value_ST_Shd_pct15: nShadingPattern = drawing::ShadingPattern::PCT15; break;
- case NS_ooxml::LN_Value_ST_Shd_pct35: nShadingPattern = drawing::ShadingPattern::PCT35; break;
- case NS_ooxml::LN_Value_ST_Shd_pct37: nShadingPattern = drawing::ShadingPattern::PCT37; break;
- case NS_ooxml::LN_Value_ST_Shd_pct45: nShadingPattern = drawing::ShadingPattern::PCT45; break;
- case NS_ooxml::LN_Value_ST_Shd_pct55: nShadingPattern = drawing::ShadingPattern::PCT55; break;
- case NS_ooxml::LN_Value_ST_Shd_pct62: nShadingPattern = drawing::ShadingPattern::PCT62; break;
- case NS_ooxml::LN_Value_ST_Shd_pct65: nShadingPattern = drawing::ShadingPattern::PCT65; break;
- case NS_ooxml::LN_Value_ST_Shd_pct85: nShadingPattern = drawing::ShadingPattern::PCT85; break;
- case NS_ooxml::LN_Value_ST_Shd_pct87: nShadingPattern = drawing::ShadingPattern::PCT87; break;
- case NS_ooxml::LN_Value_ST_Shd_pct95: nShadingPattern = drawing::ShadingPattern::PCT95; break;
- }
-
- // Write the shading pattern property
- pPropertyMap->Insert(PROP_CHAR_SHADING_VALUE, uno::makeAny( nShadingPattern ));
- }
-
- if (m_OutputFormat == Paragraph && m_nShadingPattern != NS_ooxml::LN_Value_ST_Shd_nil)
- {
- if (nWW8BrushStyle || !m_bAutoFillColor)
- pPropertyMap->Insert(PROP_FILL_STYLE, uno::makeAny(drawing::FillStyle_SOLID));
- else if (m_bFillSpecified) // m_bAutoFillColor == true
- pPropertyMap->Insert(PROP_FILL_STYLE, uno::makeAny(drawing::FillStyle_NONE));
-
- pPropertyMap->Insert(PROP_FILL_COLOR, uno::makeAny(nApplyColor));
- }
- else if ( nWW8BrushStyle || !m_bAutoFillColor || m_bFillSpecified )
- pPropertyMap->Insert( m_OutputFormat == Form ? PROP_BACK_COLOR
- : PROP_CHAR_BACK_COLOR, uno::makeAny( nApplyColor ));
-
- createGrabBag("originalColor", uno::makeAny(OUString::fromUtf8(msfilter::util::ConvertColor(Color(ColorTransparency, nApplyColor)))));
-
- return pPropertyMap;
-}
-
-void CellColorHandler::createGrabBag(const OUString& aName, const uno::Any& rAny)
-{
- if (m_aInteropGrabBagName.isEmpty())
- return;
-
- beans::PropertyValue aValue;
- aValue.Name = aName;
- aValue.Value = rAny;
- m_aInteropGrabBag.push_back(aValue);
-}
-
-void CellColorHandler::enableInteropGrabBag(const OUString& aName)
-{
- m_aInteropGrabBagName = aName;
-}
-
-beans::PropertyValue CellColorHandler::getInteropGrabBag()
-{
- beans::PropertyValue aRet;
- aRet.Name = m_aInteropGrabBagName;
- aRet.Value <<= comphelper::containerToSequence(m_aInteropGrabBag);
- return aRet;
-}
-
-void CellColorHandler::disableInteropGrabBag()
-{
- m_aInteropGrabBagName.clear();
- m_aInteropGrabBag.clear();
-}
-
-bool CellColorHandler::isInteropGrabBagEnabled() const
-{
- return !(m_aInteropGrabBagName.isEmpty());
-}
-
-} //namespace writerfilter
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/CellColorHandler.hxx b/writerfilter/source/dmapper/CellColorHandler.hxx
deleted file mode 100644
index a011cd9fd794..000000000000
--- a/writerfilter/source/dmapper/CellColorHandler.hxx
+++ /dev/null
@@ -1,66 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * 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 .
- */
-#pragma once
-
-#include "LoggedResources.hxx"
-#include "PropertyMap.hxx"
-#include <vector>
-
-#include <com/sun/star/beans/PropertyValue.hpp>
-
-namespace writerfilter::dmapper
-{
-class TablePropertyMap;
-class CellColorHandler : public LoggedProperties
-{
-public:
- enum OutputFormat { Form, Paragraph, Character }; // for what part of the document
-private:
- sal_Int32 m_nShadingPattern;
- sal_Int32 m_nColor;
- sal_Int32 m_nFillColor;
- bool m_bAutoFillColor;
- bool m_bFillSpecified;
- OutputFormat m_OutputFormat;
-
- OUString m_aInteropGrabBagName;
- std::vector<css::beans::PropertyValue> m_aInteropGrabBag;
-
- // Properties
- virtual void lcl_attribute(Id Name, Value & val) override;
- virtual void lcl_sprm(Sprm & sprm) override;
-
- void createGrabBag(const OUString& aName, const css::uno::Any& rValue);
-
-public:
- CellColorHandler( );
- virtual ~CellColorHandler() override;
-
- TablePropertyMapPtr getProperties();
-
- void setOutputFormat( OutputFormat format ) { m_OutputFormat = format; }
-
- void enableInteropGrabBag(const OUString& aName);
- css::beans::PropertyValue getInteropGrabBag();
- void disableInteropGrabBag();
- bool isInteropGrabBagEnabled() const;
-};
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/CellMarginHandler.cxx b/writerfilter/source/dmapper/CellMarginHandler.cxx
deleted file mode 100644
index 8b7b5fa77c23..000000000000
--- a/writerfilter/source/dmapper/CellMarginHandler.cxx
+++ /dev/null
@@ -1,177 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * 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 .
- */
-#include "CellMarginHandler.hxx"
-#include "ConversionHelper.hxx"
-#include <ooxml/resourceids.hxx>
-#include <comphelper/propertysequence.hxx>
-#include <comphelper/sequence.hxx>
-#include <sal/log.hxx>
-
-namespace writerfilter::dmapper {
-
-using namespace ::com::sun::star;
-using namespace ::writerfilter;
-
-CellMarginHandler::CellMarginHandler() :
-LoggedProperties("CellMarginHandler"),
-m_nValue( 0 ),
-m_nWidth( 0 ),
-m_nType( 0 ),
-m_nLeftMargin( 0 ),
-m_bLeftMarginValid( false ),
-m_nRightMargin( 0 ),
-m_bRightMarginValid( false ),
-m_nTopMargin( 0 ),
-m_bTopMarginValid( false ),
-m_nBottomMargin( 0 ),
-m_bBottomMarginValid( false )
-{
-}
-
-CellMarginHandler::~CellMarginHandler()
-{
-}
-
-void CellMarginHandler::lcl_attribute(Id rName, Value & rVal)
-{
- sal_Int32 nIntValue = rVal.getInt();
- switch( rName )
- {
- case NS_ooxml::LN_CT_TblWidth_w:
- m_nWidth = nIntValue;
- m_nValue = ConversionHelper::convertTwipToMM100Unsigned( nIntValue );
- break;
- case NS_ooxml::LN_CT_TblWidth_type:
- SAL_WARN_IF(NS_ooxml::LN_Value_ST_TblWidth_dxa != sal::static_int_cast<Id>(nIntValue), "writerfilter", "CellMarginHandler: cell margins work for absolute values only");
- m_nType = nIntValue;
- break;
- default:
- SAL_WARN("writerfilter", "CellMarginHandler::lcl_attribute: unknown attribute");
- }
-}
-
-void CellMarginHandler::createGrabBag(const OUString& aName)
-{
- if (m_aInteropGrabBagName.isEmpty())
- return;
-
- beans::PropertyValue aRet;
- aRet.Name = aName;
-
- OUString sType;
- switch (m_nType)
- {
- case NS_ooxml::LN_Value_ST_TblWidth_nil: sType = "nil"; break;
- case NS_ooxml::LN_Value_ST_TblWidth_pct: sType = "pct"; break;
- case NS_ooxml::LN_Value_ST_TblWidth_dxa: sType = "dxa"; break;
- case NS_ooxml::LN_Value_ST_TblWidth_auto: sType = "auto"; break;
- }
- uno::Sequence<beans::PropertyValue> aSeq( comphelper::InitPropertySequence({
- { "w", uno::Any(m_nWidth) },
- { "type", uno::Any(sType) }
- }));
-
- aRet.Value <<= aSeq;
- m_aInteropGrabBag.push_back(aRet);
-}
-
-void CellMarginHandler::lcl_sprm(Sprm & rSprm)
-{
- writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
- if( pProperties)
- {
- pProperties->resolve( *this );
- const bool rtl = false; // TODO
- switch( rSprm.getId() )
- {
- case NS_ooxml::LN_CT_TblCellMar_top:
- case NS_ooxml::LN_CT_TcMar_top:
- m_nTopMargin = m_nValue;
- m_bTopMarginValid = true;
- createGrabBag("top");
- break;
- case NS_ooxml::LN_CT_TblCellMar_start:
- case NS_ooxml::LN_CT_TcMar_start:
- if( rtl )
- {
- m_nRightMargin = m_nValue;
- m_bRightMarginValid = true;
- }
- else
- {
- m_nLeftMargin = m_nValue;
- m_bLeftMarginValid = true;
- }
- createGrabBag("start");
- break;
- case NS_ooxml::LN_CT_TblCellMar_left:
- case NS_ooxml::LN_CT_TcMar_left:
- m_nLeftMargin = m_nValue;
- m_bLeftMarginValid = true;
- createGrabBag("left");
- break;
- case NS_ooxml::LN_CT_TblCellMar_bottom:
- case NS_ooxml::LN_CT_TcMar_bottom:
- m_nBottomMargin = m_nValue;
- m_bBottomMarginValid = true;
- createGrabBag("bottom");
- break;
- case NS_ooxml::LN_CT_TblCellMar_end:
- case NS_ooxml::LN_CT_TcMar_end:
- if( rtl )
- {
- m_nLeftMargin = m_nValue;
- m_bLeftMarginValid = true;
- }
- else
- {
- m_nRightMargin = m_nValue;
- m_bRightMarginValid = true;
- }
- createGrabBag("end");
- break;
- case NS_ooxml::LN_CT_TblCellMar_right:
- case NS_ooxml::LN_CT_TcMar_right:
- m_nRightMargin = m_nValue;
- m_bRightMarginValid = true;
- createGrabBag("right");
- break;
- default:
- SAL_WARN("writerfilter", "CellMarginHandler::lcl_sprm: unknown sprm");
- }
- }
- m_nValue = 0;
-}
-
-void CellMarginHandler::enableInteropGrabBag(const OUString& aName)
-{
- m_aInteropGrabBagName = aName;
-}
-
-beans::PropertyValue CellMarginHandler::getInteropGrabBag()
-{
- beans::PropertyValue aRet;
- aRet.Name = m_aInteropGrabBagName;
- aRet.Value <<= comphelper::containerToSequence(m_aInteropGrabBag);
- return aRet;
-}
-
-} //namespace writerfilter::dmapper
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/CellMarginHandler.hxx b/writerfilter/source/dmapper/CellMarginHandler.hxx
deleted file mode 100644
index 8dcbf2dc5245..000000000000
--- a/writerfilter/source/dmapper/CellMarginHandler.hxx
+++ /dev/null
@@ -1,64 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * 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 .
- */
-#pragma once
-
-#include "LoggedResources.hxx"
-#include <vector>
-#include <com/sun/star/beans/PropertyValue.hpp>
-
-namespace writerfilter::dmapper
-{
-class TablePropertyMap;
-class CellMarginHandler : public LoggedProperties
-{
-private:
- sal_Int32 m_nValue; ///< Converted value.
- sal_Int32 m_nWidth; ///< Original value.
- sal_Int32 m_nType; ///< Unit of the value (dxa, etc).
-
- OUString m_aInteropGrabBagName;
- std::vector<css::beans::PropertyValue> m_aInteropGrabBag;
-
- // Properties
- virtual void lcl_attribute(Id Name, Value & val) override;
- virtual void lcl_sprm(Sprm & sprm) override;
-
- void createGrabBag(const OUString& aName);
-
-public:
- sal_Int32 m_nLeftMargin;
- bool m_bLeftMarginValid;
- sal_Int32 m_nRightMargin;
- bool m_bRightMarginValid;
- sal_Int32 m_nTopMargin;
- bool m_bTopMarginValid;
- sal_Int32 m_nBottomMargin;
- bool m_bBottomMarginValid;
-
-public:
- CellMarginHandler( );
- virtual ~CellMarginHandler() override;
-
- void enableInteropGrabBag(const OUString& aName);
- css::beans::PropertyValue getInteropGrabBag();
-
-};
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/ConversionHelper.cxx b/writerfilter/source/dmapper/ConversionHelper.cxx
deleted file mode 100644
index 809e85c90372..000000000000
--- a/writerfilter/source/dmapper/ConversionHelper.cxx
+++ /dev/null
@@ -1,670 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * 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 .
- */
-#include "ConversionHelper.hxx"
-#include <com/sun/star/table/BorderLine2.hpp>
-#include <com/sun/star/lang/Locale.hpp>
-#include <com/sun/star/text/HoriOrientation.hpp>
-#include <com/sun/star/style/NumberingType.hpp>
-#include <editeng/borderline.hxx>
-#include <ooxml/resourceids.hxx>
-#include <rtl/ustrbuf.hxx>
-#include <tools/color.hxx>
-#include <tools/mapunit.hxx>
-#include <tools/UnitConversion.hxx>
-
-using namespace com::sun::star;
-
-namespace writerfilter::dmapper::ConversionHelper{
-
-/// Convert OOXML border style to WW8 that editeng can handle.
-static sal_Int32 lcl_convertBorderStyleFromToken(sal_Int32 nOOXMLType)
-{
- switch (nOOXMLType)
- {
- case NS_ooxml::LN_Value_ST_Border_nil: return 255;
- case NS_ooxml::LN_Value_ST_Border_none: return 0;
- case NS_ooxml::LN_Value_ST_Border_single: return 1;
- case NS_ooxml::LN_Value_ST_Border_thick: return 2;
- case NS_ooxml::LN_Value_ST_Border_double: return 3;
- case NS_ooxml::LN_Value_ST_Border_dotted: return 6;
- case NS_ooxml::LN_Value_ST_Border_dashed: return 7;
- case NS_ooxml::LN_Value_ST_Border_dotDash: return 8;
- case NS_ooxml::LN_Value_ST_Border_dotDotDash: return 9;
- case NS_ooxml::LN_Value_ST_Border_triple: return 10;
- case NS_ooxml::LN_Value_ST_Border_thinThickSmallGap: return 11;
- case NS_ooxml::LN_Value_ST_Border_thickThinSmallGap: return 12;
- case NS_ooxml::LN_Value_ST_Border_thinThickThinSmallGap: return 13;
- case NS_ooxml::LN_Value_ST_Border_thinThickMediumGap: return 14;
- case NS_ooxml::LN_Value_ST_Border_thickThinMediumGap: return 15;
- case NS_ooxml::LN_Value_ST_Border_thinThickThinMediumGap: return 16;
- case NS_ooxml::LN_Value_ST_Border_thinThickLargeGap: return 17;
- case NS_ooxml::LN_Value_ST_Border_thickThinLargeGap: return 18;
- case NS_ooxml::LN_Value_ST_Border_thinThickThinLargeGap: return 19;
- case NS_ooxml::LN_Value_ST_Border_wave: return 20;
- case NS_ooxml::LN_Value_ST_Border_doubleWave: return 21;
- case NS_ooxml::LN_Value_ST_Border_dashSmallGap: return 22;
- case NS_ooxml::LN_Value_ST_Border_dashDotStroked: return 23;
- case NS_ooxml::LN_Value_ST_Border_threeDEmboss: return 24;
- case NS_ooxml::LN_Value_ST_Border_threeDEngrave: return 25;
- case NS_ooxml::LN_Value_ST_Border_outset: return 26;
- case NS_ooxml::LN_Value_ST_Border_inset: return 27;
- case NS_ooxml::LN_Value_ST_Border_apples: return 64;
- case NS_ooxml::LN_Value_ST_Border_archedScallops: return 65;
- case NS_ooxml::LN_Value_ST_Border_babyPacifier: return 66;
- case NS_ooxml::LN_Value_ST_Border_babyRattle: return 67;
- case NS_ooxml::LN_Value_ST_Border_balloons3Colors: return 68;
- case NS_ooxml::LN_Value_ST_Border_balloonsHotAir: return 69;
- case NS_ooxml::LN_Value_ST_Border_basicBlackDashes: return 70;
- case NS_ooxml::LN_Value_ST_Border_basicBlackDots: return 71;
- case NS_ooxml::LN_Value_ST_Border_basicBlackSquares: return 72;
- case NS_ooxml::LN_Value_ST_Border_basicThinLines: return 73;
- case NS_ooxml::LN_Value_ST_Border_basicWhiteDashes: return 74;
- case NS_ooxml::LN_Value_ST_Border_basicWhiteDots: return 75;
- case NS_ooxml::LN_Value_ST_Border_basicWhiteSquares: return 76;
- case NS_ooxml::LN_Value_ST_Border_basicWideInline: return 77;
- case NS_ooxml::LN_Value_ST_Border_basicWideMidline: return 78;
- case NS_ooxml::LN_Value_ST_Border_basicWideOutline: return 79;
- case NS_ooxml::LN_Value_ST_Border_bats: return 80;
- case NS_ooxml::LN_Value_ST_Border_birds: return 81;
- case NS_ooxml::LN_Value_ST_Border_birdsFlight: return 82;
- case NS_ooxml::LN_Value_ST_Border_cabins: return 83;
- case NS_ooxml::LN_Value_ST_Border_cakeSlice: return 84;
- case NS_ooxml::LN_Value_ST_Border_candyCorn: return 85;
- case NS_ooxml::LN_Value_ST_Border_celticKnotwork: return 86;
- case NS_ooxml::LN_Value_ST_Border_certificateBanner: return 87;
- case NS_ooxml::LN_Value_ST_Border_chainLink: return 88;
- case NS_ooxml::LN_Value_ST_Border_champagneBottle: return 89;
- case NS_ooxml::LN_Value_ST_Border_checkedBarBlack: return 90;
- case NS_ooxml::LN_Value_ST_Border_checkedBarColor: return 91;
- case NS_ooxml::LN_Value_ST_Border_checkered: return 92;
- case NS_ooxml::LN_Value_ST_Border_christmasTree: return 93;
- case NS_ooxml::LN_Value_ST_Border_circlesLines: return 94;
- case NS_ooxml::LN_Value_ST_Border_circlesRectangles: return 95;
- case NS_ooxml::LN_Value_ST_Border_classicalWave: return 96;
- case NS_ooxml::LN_Value_ST_Border_clocks: return 97;
- case NS_ooxml::LN_Value_ST_Border_compass: return 98;
- case NS_ooxml::LN_Value_ST_Border_confetti: return 99;
- case NS_ooxml::LN_Value_ST_Border_confettiGrays: return 100;
- case NS_ooxml::LN_Value_ST_Border_confettiOutline: return 101;
- case NS_ooxml::LN_Value_ST_Border_confettiStreamers: return 102;
- case NS_ooxml::LN_Value_ST_Border_confettiWhite: return 103;
- case NS_ooxml::LN_Value_ST_Border_cornerTriangles: return 104;
- case NS_ooxml::LN_Value_ST_Border_couponCutoutDashes: return 105;
- case NS_ooxml::LN_Value_ST_Border_couponCutoutDots: return 106;
- case NS_ooxml::LN_Value_ST_Border_crazyMaze: return 107;
- case NS_ooxml::LN_Value_ST_Border_creaturesButterfly: return 108;
- case NS_ooxml::LN_Value_ST_Border_creaturesFish: return 109;
- case NS_ooxml::LN_Value_ST_Border_creaturesInsects: return 110;
- case NS_ooxml::LN_Value_ST_Border_creaturesLadyBug: return 111;
- case NS_ooxml::LN_Value_ST_Border_crossStitch: return 112;
- case NS_ooxml::LN_Value_ST_Border_cup: return 113;
- case NS_ooxml::LN_Value_ST_Border_decoArch: return 114;
- case NS_ooxml::LN_Value_ST_Border_decoArchColor: return 115;
- case NS_ooxml::LN_Value_ST_Border_decoBlocks: return 116;
- case NS_ooxml::LN_Value_ST_Border_diamondsGray: return 117;
- case NS_ooxml::LN_Value_ST_Border_doubleD: return 118;
- case NS_ooxml::LN_Value_ST_Border_doubleDiamonds: return 119;
- case NS_ooxml::LN_Value_ST_Border_earth1: return 120;
- case NS_ooxml::LN_Value_ST_Border_earth2: return 121;
- case NS_ooxml::LN_Value_ST_Border_eclipsingSquares1: return 122;
- case NS_ooxml::LN_Value_ST_Border_eclipsingSquares2: return 123;
- case NS_ooxml::LN_Value_ST_Border_eggsBlack: return 124;
- case NS_ooxml::LN_Value_ST_Border_fans: return 125;
- case NS_ooxml::LN_Value_ST_Border_film: return 126;
- case NS_ooxml::LN_Value_ST_Border_firecrackers: return 127;
- case NS_ooxml::LN_Value_ST_Border_flowersBlockPrint: return 128;
- case NS_ooxml::LN_Value_ST_Border_flowersDaisies: return 129;
- case NS_ooxml::LN_Value_ST_Border_flowersModern1: return 130;
- case NS_ooxml::LN_Value_ST_Border_flowersModern2: return 131;
- case NS_ooxml::LN_Value_ST_Border_flowersPansy: return 132;
- case NS_ooxml::LN_Value_ST_Border_flowersRedRose: return 133;
- case NS_ooxml::LN_Value_ST_Border_flowersRoses: return 134;
- case NS_ooxml::LN_Value_ST_Border_flowersTeacup: return 135;
- case NS_ooxml::LN_Value_ST_Border_flowersTiny: return 136;
- case NS_ooxml::LN_Value_ST_Border_gems: return 137;
- case NS_ooxml::LN_Value_ST_Border_gingerbreadMan: return 138;
- case NS_ooxml::LN_Value_ST_Border_gradient: return 139;
- case NS_ooxml::LN_Value_ST_Border_handmade1: return 140;
- case NS_ooxml::LN_Value_ST_Border_handmade2: return 141;
- case NS_ooxml::LN_Value_ST_Border_heartBalloon: return 142;
- case NS_ooxml::LN_Value_ST_Border_heartGray: return 143;
- case NS_ooxml::LN_Value_ST_Border_hearts: return 144;
- case NS_ooxml::LN_Value_ST_Border_heebieJeebies: return 145;
- case NS_ooxml::LN_Value_ST_Border_holly: return 146;
- case NS_ooxml::LN_Value_ST_Border_houseFunky: return 147;
- case NS_ooxml::LN_Value_ST_Border_hypnotic: return 148;
- case NS_ooxml::LN_Value_ST_Border_iceCreamCones: return 149;
- case NS_ooxml::LN_Value_ST_Border_lightBulb: return 150;
- case NS_ooxml::LN_Value_ST_Border_lightning1: return 151;
- case NS_ooxml::LN_Value_ST_Border_lightning2: return 152;
- case NS_ooxml::LN_Value_ST_Border_mapPins: return 153;
- case NS_ooxml::LN_Value_ST_Border_mapleLeaf: return 154;
- case NS_ooxml::LN_Value_ST_Border_mapleMuffins: return 155;
- case NS_ooxml::LN_Value_ST_Border_marquee: return 156;
- case NS_ooxml::LN_Value_ST_Border_marqueeToothed: return 157;
- case NS_ooxml::LN_Value_ST_Border_moons: return 158;
- case NS_ooxml::LN_Value_ST_Border_mosaic: return 159;
- case NS_ooxml::LN_Value_ST_Border_musicNotes: return 160;
- case NS_ooxml::LN_Value_ST_Border_northwest: return 161;
- case NS_ooxml::LN_Value_ST_Border_ovals: return 162;
- case NS_ooxml::LN_Value_ST_Border_packages: return 163;
- case NS_ooxml::LN_Value_ST_Border_palmsBlack: return 164;
- case NS_ooxml::LN_Value_ST_Border_palmsColor: return 165;
- case NS_ooxml::LN_Value_ST_Border_paperClips: return 166;
- case NS_ooxml::LN_Value_ST_Border_papyrus: return 167;
- case NS_ooxml::LN_Value_ST_Border_partyFavor: return 168;
- case NS_ooxml::LN_Value_ST_Border_partyGlass: return 169;
- case NS_ooxml::LN_Value_ST_Border_pencils: return 170;
- case NS_ooxml::LN_Value_ST_Border_people: return 171;
- case NS_ooxml::LN_Value_ST_Border_peopleWaving: return 172;
- case NS_ooxml::LN_Value_ST_Border_peopleHats: return 173;
- case NS_ooxml::LN_Value_ST_Border_poinsettias: return 174;
- case NS_ooxml::LN_Value_ST_Border_postageStamp: return 175;
- case NS_ooxml::LN_Value_ST_Border_pumpkin1: return 176;
- case NS_ooxml::LN_Value_ST_Border_pushPinNote2: return 177;
- case NS_ooxml::LN_Value_ST_Border_pushPinNote1: return 178;
- case NS_ooxml::LN_Value_ST_Border_pyramids: return 179;
- case NS_ooxml::LN_Value_ST_Border_pyramidsAbove: return 180;
- case NS_ooxml::LN_Value_ST_Border_quadrants: return 181;
- case NS_ooxml::LN_Value_ST_Border_rings: return 182;
- case NS_ooxml::LN_Value_ST_Border_safari: return 183;
- case NS_ooxml::LN_Value_ST_Border_sawtooth: return 184;
- case NS_ooxml::LN_Value_ST_Border_sawtoothGray: return 185;
- case NS_ooxml::LN_Value_ST_Border_scaredCat: return 186;
- case NS_ooxml::LN_Value_ST_Border_seattle: return 187;
- case NS_ooxml::LN_Value_ST_Border_shadowedSquares: return 188;
- case NS_ooxml::LN_Value_ST_Border_sharksTeeth: return 189;
- case NS_ooxml::LN_Value_ST_Border_shorebirdTracks: return 190;
- case NS_ooxml::LN_Value_ST_Border_skyrocket: return 191;
- case NS_ooxml::LN_Value_ST_Border_snowflakeFancy: return 192;
- case NS_ooxml::LN_Value_ST_Border_snowflakes: return 193;
- case NS_ooxml::LN_Value_ST_Border_sombrero: return 194;
- case NS_ooxml::LN_Value_ST_Border_southwest: return 195;
- case NS_ooxml::LN_Value_ST_Border_stars: return 196;
- case NS_ooxml::LN_Value_ST_Border_starsTop: return 197;
- case NS_ooxml::LN_Value_ST_Border_stars3d: return 198;
- case NS_ooxml::LN_Value_ST_Border_starsBlack: return 199;
- case NS_ooxml::LN_Value_ST_Border_starsShadowed: return 200;
- case NS_ooxml::LN_Value_ST_Border_sun: return 201;
- case NS_ooxml::LN_Value_ST_Border_swirligig: return 202;
- case NS_ooxml::LN_Value_ST_Border_tornPaper: return 203;
- case NS_ooxml::LN_Value_ST_Border_tornPaperBlack: return 204;
- case NS_ooxml::LN_Value_ST_Border_trees: return 205;
- case NS_ooxml::LN_Value_ST_Border_triangleParty: return 206;
- case NS_ooxml::LN_Value_ST_Border_triangles: return 207;
- case NS_ooxml::LN_Value_ST_Border_tribal1: return 208;
- case NS_ooxml::LN_Value_ST_Border_tribal2: return 209;
- case NS_ooxml::LN_Value_ST_Border_tribal3: return 210;
- case NS_ooxml::LN_Value_ST_Border_tribal4: return 211;
- case NS_ooxml::LN_Value_ST_Border_tribal5: return 212;
- case NS_ooxml::LN_Value_ST_Border_tribal6: return 213;
- case NS_ooxml::LN_Value_ST_Border_twistedLines1: return 214;
- case NS_ooxml::LN_Value_ST_Border_twistedLines2: return 215;
- case NS_ooxml::LN_Value_ST_Border_vine: return 216;
- case NS_ooxml::LN_Value_ST_Border_waveline: return 217;
- case NS_ooxml::LN_Value_ST_Border_weavingAngles: return 218;
- case NS_ooxml::LN_Value_ST_Border_weavingBraid: return 219;
- case NS_ooxml::LN_Value_ST_Border_weavingRibbon: return 220;
- case NS_ooxml::LN_Value_ST_Border_weavingStrips: return 221;
- case NS_ooxml::LN_Value_ST_Border_whiteFlowers: return 222;
- case NS_ooxml::LN_Value_ST_Border_woodwork: return 223;
- case NS_ooxml::LN_Value_ST_Border_xIllusions: return 224;
- case NS_ooxml::LN_Value_ST_Border_zanyTriangles: return 225;
- case NS_ooxml::LN_Value_ST_Border_zigZag: return 226;
- case NS_ooxml::LN_Value_ST_Border_zigZagStitch: return 227;
- default: break;
- }
- return 0;
-}
-
-void MakeBorderLine( sal_Int32 nLineThickness, sal_Int32 nLineToken,
- sal_Int32 nLineColor,
- table::BorderLine2& rToFill, bool bIsOOXML )
-{
- static const Color aBorderDefColor[] =
- {
- // The first item means automatic color (COL_AUTO), but we
- // do not use it anyway (see the next statement) .-)
- // See also GetLineIndex in sw/source/filter/ww8/ww8par6.cxx
- COL_AUTO, COL_BLACK, COL_LIGHTBLUE, COL_LIGHTCYAN, COL_LIGHTGREEN,
- COL_LIGHTMAGENTA, COL_LIGHTRED, COL_YELLOW, COL_WHITE, COL_BLUE,
- COL_CYAN, COL_GREEN, COL_MAGENTA, COL_RED, COL_BROWN, COL_GRAY,
- COL_LIGHTGRAY
- };
- if(!bIsOOXML && sal::static_int_cast<sal_uInt32>(nLineColor) < SAL_N_ELEMENTS(aBorderDefColor))
- nLineColor = sal_Int32(aBorderDefColor[nLineColor]);
- //no auto color for borders
- if (nLineColor == sal_Int32(COL_AUTO))
- nLineColor = sal_Int32(COL_BLACK);
-
- sal_Int32 nLineType = lcl_convertBorderStyleFromToken(nLineToken);
-
- // Map to our border types, we should use of one equal line
- // thickness, or one of smaller thickness. If too small we
- // can make the deficit up in additional white space or
- // object size
- SvxBorderLineStyle const nLineStyle(
- ::editeng::ConvertBorderStyleFromWord(nLineType));
- rToFill.LineStyle = static_cast<sal_Int16>(nLineStyle);
- double const fConverted( (SvxBorderLineStyle::NONE == nLineStyle) ? 0.0 :
- ::editeng::ConvertBorderWidthFromWord(nLineStyle, nLineThickness,
- nLineType));
- rToFill.LineWidth = convertTwipToMM100(fConverted);
- rToFill.Color = nLineColor;
-}
-
-namespace {
-void lcl_SwapQuotesInField(OUString &rFmt)
-{
- //Swap unescaped " and ' with ' and "
- sal_Int32 nLen = rFmt.getLength();
- OUStringBuffer aBuffer( rFmt );
- const sal_Unicode* pFmt = rFmt.getStr();
- for (sal_Int32 nI = 0; nI < nLen; ++nI)
- {
- if ((pFmt[nI] == '\"') && (!nI || pFmt[nI-1] != '\\'))
- aBuffer[nI] = '\'';
- else if ((pFmt[nI] == '\'') && (!nI || pFmt[nI-1] != '\\'))
- aBuffer[nI] = '\"';
- }
- rFmt = aBuffer.makeStringAndClear();
-}
-bool lcl_IsNotAM(OUString const & rFmt, sal_Int32 nPos)
-{
- return (
- (nPos == rFmt.getLength() - 1) ||
- (
- (rFmt[nPos+1] != 'M') &&
- (rFmt[nPos+1] != 'm')
- )
- );
-}
-}
-
-OUString ConvertMSFormatStringToSO(
- const OUString& rFormat, lang::Locale& rLocale, bool bHijri)
-{
- OUString sFormat(rFormat);
- lcl_SwapQuotesInField(sFormat);
-
- //#102782#, #102815#, #108341# & #111944# have to work at the same time :-)
- bool bForceJapanese(false);
- bool bForceNatNum(false);
- sal_Int32 nLen = sFormat.getLength();
- sal_Int32 nI = 0;
-// const sal_Unicode* pFormat = sFormat.getStr();
- OUStringBuffer aNewFormat( sFormat );
- while (nI < nLen)
- {
- if (aNewFormat[nI] == '\\')
- nI++;
- else if (aNewFormat[nI] == '\"')
- {
- ++nI;
- //While not at the end and not at an unescaped end quote
- while ((nI < nLen) && ((aNewFormat[nI] != '\"') && (aNewFormat[nI-1] != '\\')))
- ++nI;
- }
- else //normal unquoted section
- {
- sal_Unicode nChar = aNewFormat[nI];
- if (nChar == 'O')
- {
- aNewFormat[nI] = 'M';
- bForceNatNum = true;
- }
- else if (nChar == 'o')
- {
- aNewFormat[nI] = 'm';
- bForceNatNum = true;
- }
- else if ((nChar == 'A') && lcl_IsNotAM(sFormat, nI))
- {
- aNewFormat[nI] = 'D';
- bForceNatNum = true;
- }
- else if ((nChar == 'g') || (nChar == 'G'))
- bForceJapanese = true;
- else if ((nChar == 'a') && lcl_IsNotAM(sFormat, nI))
- bForceJapanese = true;
- else if (nChar == 'E')
- {
- if ((nI != nLen-1) && (aNewFormat[nI+1] == 'E'))
- {
- //todo: this cannot be the right way to replace a part of the string!
- aNewFormat[nI] = 'Y';
- aNewFormat[nI + 1] = 'Y';
- aNewFormat.insert(nI + 2, "YY");
- nLen+=2;
- nI+=3;
- }
- bForceJapanese = true;
- }
- else if (nChar == 'e')
- {
- if ((nI != nLen-1) && (aNewFormat[nI+1] == 'e'))
- {
- //todo: this cannot be the right way to replace a part of the string!
- aNewFormat[nI] = 'y';
- aNewFormat[nI + 1] = 'y';
- aNewFormat.insert(nI + 2, "yy");
- nLen+=2;
- nI+=3;
- }
- bForceJapanese = true;
- }
- else if (nChar == '/')
- {
- // MM We have to escape '/' in case it's used as a char
- //todo: this cannot be the right way to replace a part of the string!
- aNewFormat[nI] = '\\';
- aNewFormat.insert(nI + 1, "/");
- nI++;
- nLen++;
- }
- }
- ++nI;
- }
-
- if (bForceNatNum)
- bForceJapanese = true;
-
- if (bForceJapanese)
- {
- rLocale.Language = "ja";
- rLocale.Country = "JP";
- }
-
- if (bForceNatNum)
- {
- aNewFormat.insert( 0, "[NatNum1][$-411]");
- }
-
- if (bHijri)
- {
- aNewFormat.insert( 0, "[~hijri]");
- }
- return aNewFormat.makeStringAndClear();
-
-}
-
-sal_Int32 convertTwipToMM100(sal_Int32 _t)
-{
- // It appears that MSO handles large twip values specially, probably legacy 16bit handling,
- // anything that's bigger than 32767 appears to be simply ignored.
- if( _t >= 0x8000 )
- return 0;
- return ::convertTwipToMm100( _t );
-}
-
-double convertTwipToMM100Double(sal_Int32 _t)
-{
- // It appears that MSO handles large twip values specially, probably legacy 16bit handling,
- // anything that's bigger than 32767 appears to be simply ignored.
- if( _t >= 0x8000 )
- return 0.0;
- return _t * 254.0 / 144.0;
-}
-
-sal_uInt32 convertTwipToMM100Unsigned(sal_Int32 _t)
-{
- if( _t < 0 )
- return 0;
- return convertTwipToMM100( _t );
-}
-
-text::RubyAdjust convertRubyAlign( sal_Int32 nIntValue )
-{
- text::RubyAdjust rubyAdjust = text::RubyAdjust_LEFT;
- switch( nIntValue )
- {
- case NS_ooxml::LN_Value_ST_RubyAlign_center:
- case NS_ooxml::LN_Value_ST_RubyAlign_rightVertical:
- rubyAdjust = text::RubyAdjust_CENTER;
- break;
- case NS_ooxml::LN_Value_ST_RubyAlign_distributeLetter:
- rubyAdjust = text::RubyAdjust_BLOCK;
- break;
- case NS_ooxml::LN_Value_ST_RubyAlign_distributeSpace:
- rubyAdjust = text::RubyAdjust_INDENT_BLOCK;
- break;
- case NS_ooxml::LN_Value_ST_RubyAlign_left:
- rubyAdjust = text::RubyAdjust_LEFT;
- break;
- case NS_ooxml::LN_Value_ST_RubyAlign_right:
- rubyAdjust = text::RubyAdjust_RIGHT;
- break;
- }
- return rubyAdjust;
-}
-
-sal_Int16 convertTableJustification( sal_Int32 nIntValue )
-{
- sal_Int16 nOrient = text::HoriOrientation::LEFT_AND_WIDTH;
- switch( nIntValue )
- {
- case NS_ooxml::LN_Value_ST_Jc_center:
- nOrient = text::HoriOrientation::CENTER;
- break;
- case NS_ooxml::LN_Value_ST_Jc_right:
- case NS_ooxml::LN_Value_ST_Jc_end:
- nOrient = text::HoriOrientation::RIGHT;
- break;
- case NS_ooxml::LN_Value_ST_Jc_left:
- case NS_ooxml::LN_Value_ST_Jc_start:
- //no break
- default:;
-
- }
- return nOrient;
-}
-
-sal_Int16 ConvertNumberingType(sal_Int32 nFmt)
-{
- sal_Int16 nRet;
- switch(nFmt)
- {
- case NS_ooxml::LN_Value_ST_NumberFormat_decimal:
- nRet = style::NumberingType::ARABIC;
- break;
- case NS_ooxml::LN_Value_ST_NumberFormat_upperRoman:
- nRet = style::NumberingType::ROMAN_UPPER;
- break;
- case NS_ooxml::LN_Value_ST_NumberFormat_lowerRoman:
- nRet = style::NumberingType::ROMAN_LOWER;
- break;
- case NS_ooxml::LN_Value_ST_NumberFormat_ordinal:
- nRet = style::NumberingType::TEXT_NUMBER;
- break;
- case NS_ooxml::LN_Value_ST_NumberFormat_bullet:
- nRet = style::NumberingType::CHAR_SPECIAL;
- break;
- case NS_ooxml::LN_Value_ST_NumberFormat_none:
- nRet = style::NumberingType::NUMBER_NONE;
- break;
- case NS_ooxml::LN_Value_ST_NumberFormat_upperLetter:
- nRet = style::NumberingType::CHARS_UPPER_LETTER_N;
- break;
- case NS_ooxml::LN_Value_ST_NumberFormat_lowerLetter:
- nRet = style::NumberingType::CHARS_LOWER_LETTER_N;
- break;
- case NS_ooxml::LN_Value_ST_NumberFormat_iroha:
- nRet = style::NumberingType::IROHA_HALFWIDTH_JA;
- break;
- case NS_ooxml::LN_Value_ST_NumberFormat_irohaFullWidth:
- nRet = style::NumberingType::IROHA_FULLWIDTH_JA;
- break;
- case NS_ooxml::LN_Value_ST_NumberFormat_aiueo:
- nRet = style::NumberingType::AIU_HALFWIDTH_JA;
- break;
- case NS_ooxml::LN_Value_ST_NumberFormat_aiueoFullWidth:
- nRet = style::NumberingType::AIU_FULLWIDTH_JA;
- break;
- case NS_ooxml::LN_Value_ST_NumberFormat_hebrew2:
- nRet = style::NumberingType::CHARS_HEBREW;
- break;
- case NS_ooxml::LN_Value_ST_NumberFormat_thaiLetters:
- nRet = style::NumberingType::CHARS_THAI;
- break;
- case NS_ooxml::LN_Value_ST_NumberFormat_russianLower:
- nRet = style::NumberingType::CHARS_CYRILLIC_LOWER_LETTER_RU;
- break;
- case NS_ooxml::LN_Value_ST_NumberFormat_russianUpper:
- nRet = style::NumberingType::CHARS_CYRILLIC_UPPER_LETTER_RU;
- break;
- case NS_ooxml::LN_Value_ST_NumberFormat_decimalEnclosedCircleChinese:
- case NS_ooxml::LN_Value_ST_NumberFormat_decimalEnclosedCircle:
- case NS_ooxml::LN_Value_ST_NumberFormat_ideographEnclosedCircle:
- nRet = style::NumberingType::CIRCLE_NUMBER;
- break;
- case NS_ooxml::LN_Value_ST_NumberFormat_ideographTraditional:
- nRet = style::NumberingType::TIAN_GAN_ZH;
- break;
- case NS_ooxml::LN_Value_ST_NumberFormat_ideographZodiac:
- nRet = style::NumberingType::DI_ZI_ZH;
- break;
- case NS_ooxml::LN_Value_ST_NumberFormat_ganada:
- nRet = style::NumberingType::HANGUL_SYLLABLE_KO;
- break;
- case NS_ooxml::LN_Value_ST_NumberFormat_chosung:
- nRet = style::NumberingType::HANGUL_JAMO_KO;
- break;
- case NS_ooxml::LN_Value_ST_NumberFormat_koreanLegal:
- case NS_ooxml::LN_Value_ST_NumberFormat_koreanDigital:
- case NS_ooxml::LN_Value_ST_NumberFormat_koreanCounting:
- case NS_ooxml::LN_Value_ST_NumberFormat_koreanDigital2:
- nRet = style::NumberingType::NUMBER_HANGUL_KO;
- break;
- case NS_ooxml::LN_Value_ST_NumberFormat_ideographLegalTraditional:
- nRet = style::NumberingType::NUMBER_UPPER_ZH_TW;
- break;
- case NS_ooxml::LN_Value_ST_NumberFormat_arabicAlpha:
- nRet = style::NumberingType::CHARS_ARABIC;
- break;
- case NS_ooxml::LN_Value_ST_NumberFormat_hindiVowels:
- nRet = style::NumberingType::CHARS_NEPALI;
- break;
- case NS_ooxml::LN_Value_ST_NumberFormat_japaneseLegal:
- nRet = style::NumberingType::NUMBER_TRADITIONAL_JA;
- break;
- case NS_ooxml::LN_Value_ST_NumberFormat_chineseCounting:
- case NS_ooxml::LN_Value_ST_NumberFormat_japaneseCounting:
- case NS_ooxml::LN_Value_ST_NumberFormat_taiwaneseCounting:
- case NS_ooxml::LN_Value_ST_NumberFormat_taiwaneseCountingThousand:
- case NS_ooxml::LN_Value_ST_NumberFormat_ideographDigital:
- case NS_ooxml::LN_Value_ST_NumberFormat_chineseCountingThousand:
- nRet = style::NumberingType::NUMBER_LOWER_ZH;
- break;
- case NS_ooxml::LN_Value_ST_NumberFormat_chineseLegalSimplified:
- nRet = style::NumberingType::NUMBER_UPPER_ZH;
- break;
- case NS_ooxml::LN_Value_ST_NumberFormat_hebrew1:
- //91726
- nRet = style::NumberingType::NUMBER_HEBREW;
- break;
- case NS_ooxml::LN_Value_ST_NumberFormat_decimalFullWidth:
- case NS_ooxml::LN_Value_ST_NumberFormat_decimalFullWidth2:
- nRet = style::NumberingType::FULLWIDTH_ARABIC;
- break;
- case NS_ooxml::LN_Value_ST_NumberFormat_cardinalText:
- nRet = style::NumberingType::TEXT_CARDINAL;
- break;
- case NS_ooxml::LN_Value_ST_NumberFormat_ordinalText:
- nRet = style::NumberingType::TEXT_ORDINAL;
- break;
- case NS_ooxml::LN_Value_ST_NumberFormat_chicago:
- nRet = style::NumberingType::SYMBOL_CHICAGO;
- break;
- case NS_ooxml::LN_Value_ST_NumberFormat_decimalZero:
- nRet = style::NumberingType::ARABIC_ZERO;
- break;
- default: nRet = style::NumberingType::ARABIC;
- }
-/* TODO: Lots of additional values are available - some are supported in the I18 framework
- NS_ooxml::LN_Value_ST_NumberFormat_hex = 91685;
- NS_ooxml::LN_Value_ST_NumberFormat_decimalFullWidth = 91691;
- NS_ooxml::LN_Value_ST_NumberFormat_decimalHalfWidth = 91692;
- NS_ooxml::LN_Value_ST_NumberFormat_japaneseDigitalTenThousand = 91694;
- NS_ooxml::LN_Value_ST_NumberFormat_decimalEnclosedFullstop = 91703;
- NS_ooxml::LN_Value_ST_NumberFormat_decimalEnclosedParen = 91704;
- NS_ooxml::LN_Value_ST_NumberFormat_ideographZodiacTraditional = 91709;
- NS_ooxml::LN_Value_ST_NumberFormat_taiwaneseDigital = 91713;
- NS_ooxml::LN_Value_ST_NumberFormat_chineseLegalSimplified = 91715;
- NS_ooxml::LN_Value_ST_NumberFormat_chineseCountingThousand = 91716;
- NS_ooxml::LN_Value_ST_NumberFormat_koreanLegal = 91719;
- NS_ooxml::LN_Value_ST_NumberFormat_vietnameseCounting = 91721;
- NS_ooxml::LN_Value_ST_NumberFormat_numberInDash = 91725;
- NS_ooxml::LN_Value_ST_NumberFormat_arabicAbjad:
- NS_ooxml::LN_Value_ST_NumberFormat_hindiConsonants = 91731;
- NS_ooxml::LN_Value_ST_NumberFormat_hindiNumbers = 91732;
- NS_ooxml::LN_Value_ST_NumberFormat_hindiCounting = 91733;
- NS_ooxml::LN_Value_ST_NumberFormat_thaiNumbers = 91735;
- NS_ooxml::LN_Value_ST_NumberFormat_thaiCounting = 91736;*/
- return nRet;
-}
-
-sal_Int16 ConvertCustomNumberFormat(std::u16string_view rFormat)
-{
- sal_Int16 nRet = -1;
-
- if (rFormat == u"001, 002, 003, ...")
- {
- nRet = style::NumberingType::ARABIC_ZERO3;
- }
- else if (rFormat == u"0001, 0002, 0003, ...")
- {
- nRet = style::NumberingType::ARABIC_ZERO4;
- }
- else if (rFormat == u"00001, 00002, 00003, ...")
- {
- nRet = style::NumberingType::ARABIC_ZERO5;
- }
-
- return nRet;
-}
-
-util::DateTime ConvertDateStringToDateTime( const OUString& rDateTime )
-{
- util::DateTime aDateTime;
- //xsd::DateTime in the format [-]CCYY-MM-DDThh:mm:ss[Z|(+|-)hh:mm] example: 2008-01-21T10:42:00Z
- //OUString getToken( sal_Int32 token, sal_Unicode cTok, sal_Int32& index ) const
- sal_Int32 nIndex = 0;
- OUString sDate = rDateTime.getToken( 0, 'T', nIndex );
- // HACK: this is broken according to the spec, but MSOffice always treats the time as local,
- // and writes it as Z (=UTC+0)
- OUString sTime = rDateTime.getToken( 0, 'Z', nIndex );
- nIndex = 0;
- aDateTime.Year = sal_uInt16( sDate.getToken( 0, '-', nIndex ).toInt32() );
- aDateTime.Month = sal_uInt16( sDate.getToken( 0, '-', nIndex ).toInt32() );
- if (nIndex != -1)
- aDateTime.Day = sal_uInt16( sDate.copy( nIndex ).toInt32() );
-
- nIndex = 0;
- aDateTime.Hours = sal_uInt16( sTime.getToken( 0, ':', nIndex ).toInt32() );
- aDateTime.Minutes = sal_uInt16( sTime.getToken( 0, ':', nIndex ).toInt32() );
- if (nIndex != -1)
- aDateTime.Seconds = sal_uInt16( sTime.copy( nIndex ).toInt32() );
-
- return aDateTime;
-}
-
-
-} //namespace writerfilter
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/ConversionHelper.hxx b/writerfilter/source/dmapper/ConversionHelper.hxx
deleted file mode 100644
index ad0cd615fbec..000000000000
--- a/writerfilter/source/dmapper/ConversionHelper.hxx
+++ /dev/null
@@ -1,58 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * 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 .
- */
-#pragma once
-
-#include <sal/types.h>
-#include <rtl/ustring.hxx>
-#include <com/sun/star/util/DateTime.hpp>
-#include <com/sun/star/table/BorderLine2.hpp>
-#include <com/sun/star/text/RubyAdjust.hpp>
-
-namespace com::sun::star{
- namespace lang{
- struct Locale;
- }
- namespace table{
- struct BorderLine2;
- }
-}
-
-namespace writerfilter::dmapper::ConversionHelper{
-
- // create a border line and return the distance value
- void MakeBorderLine(sal_Int32 nLineThickness,
- sal_Int32 nLineType,
- sal_Int32 nLineColor,
- css::table::BorderLine2& rToFill,
- bool bIsOOXML);
- //convert the number format string form MS format to SO format
- OUString ConvertMSFormatStringToSO(const OUString& rFormat, css::lang::Locale& rLocale, bool bHijri);
- // export just for test
- SAL_DLLPUBLIC_EXPORT sal_Int32 convertTwipToMM100(sal_Int32 _t);
- SAL_DLLPUBLIC_EXPORT double convertTwipToMM100Double(sal_Int32 _t);
- SAL_DLLPUBLIC_EXPORT sal_uInt32 convertTwipToMM100Unsigned(sal_Int32 _t);
- sal_Int16 convertTableJustification( sal_Int32 nIntValue );
- css::text::RubyAdjust convertRubyAlign( sal_Int32 nIntValue );
- sal_Int16 ConvertNumberingType(sal_Int32 nFmt);
- sal_Int16 ConvertCustomNumberFormat(std::u16string_view rFormat);
-
- css::util::DateTime ConvertDateStringToDateTime(const OUString& rDateTime);
-} // namespace writerfilter::dmapper::ConversionHelper
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx
deleted file mode 100644
index 9604361fc110..000000000000
--- a/writerfilter/source/dmapper/DomainMapper.cxx
+++ /dev/null
@@ -1,4080 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * 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 .
- */
-#include "BorderHandler.hxx"
-#include "PageBordersHandler.hxx"
-
-#include "util.hxx"
-#include "SdtHelper.hxx"
-#include "TagLogger.hxx"
-#include "TDefTableHandler.hxx"
-#include "DomainMapper_Impl.hxx"
-#include "ConversionHelper.hxx"
-#include "ModelEventListener.hxx"
-#include "MeasureHandler.hxx"
-#include <i18nlangtag/languagetag.hxx>
-#include <i18nutil/paper.hxx>
-#include <ooxml/resourceids.hxx>
-#include <oox/token/tokens.hxx>
-#include <oox/drawingml/drawingmltypes.hxx>
-#include <com/sun/star/document/XDocumentPropertiesSupplier.hpp>
-#include <com/sun/star/document/XOOXMLDocumentPropertiesImporter.hpp>
-#include <com/sun/star/drawing/TextVerticalAdjust.hpp>
-#include <com/sun/star/table/BorderLineStyle.hpp>
-#include <com/sun/star/table/ShadowFormat.hpp>
-#include <com/sun/star/text/HoriOrientation.hpp>
-#include <com/sun/star/text/RelOrientation.hpp>
-#include <com/sun/star/text/VertOrientation.hpp>
-#include <com/sun/star/text/WrapTextMode.hpp>
-#include <com/sun/star/text/SizeType.hpp>
-#include <com/sun/star/text/XEndnotesSupplier.hpp>
-#include <com/sun/star/text/XFootnotesSupplier.hpp>
-#include <com/sun/star/text/XLineNumberingProperties.hpp>
-#include <com/sun/star/awt/FontRelief.hpp>
-#include <com/sun/star/awt/FontWeight.hpp>
-#include <com/sun/star/awt/FontUnderline.hpp>
-#include <com/sun/star/awt/FontStrikeout.hpp>
-#include <com/sun/star/awt/FontSlant.hpp>
-#include <com/sun/star/document/XEventBroadcaster.hpp>
-#include <com/sun/star/style/ParagraphAdjust.hpp>
-#include <com/sun/star/style/BreakType.hpp>
-#include <com/sun/star/style/CaseMap.hpp>
-#include <com/sun/star/style/LineSpacing.hpp>
-#include <com/sun/star/style/LineSpacingMode.hpp>
-#include <com/sun/star/text/FootnoteNumbering.hpp>
-#include <com/sun/star/text/TextGridMode.hpp>
-#include <com/sun/star/text/XDocumentIndexesSupplier.hpp>
-#include <com/sun/star/text/XTextFieldsSupplier.hpp>
-#include <com/sun/star/text/WritingMode.hpp>
-#include <com/sun/star/text/WritingMode2.hpp>
-#include <com/sun/star/text/XFootnote.hpp>
-#include <com/sun/star/text/XTextColumns.hpp>
-#include <com/sun/star/text/RubyPosition.hpp>
-#include <com/sun/star/uno/XComponentContext.hpp>
-#include <com/sun/star/text/FontEmphasis.hpp>
-#include <com/sun/star/awt/CharSet.hpp>
-#include <com/sun/star/lang/XMultiServiceFactory.hpp>
-#include <comphelper/types.hxx>
-#include <comphelper/storagehelper.hxx>
-#include <comphelper/sequence.hxx>
-#include <editeng/escapementitem.hxx>
-#include <filter/msfilter/util.hxx>
-#include <sfx2/DocumentMetadataAccess.hxx>
-#include <unotools/mediadescriptor.hxx>
-
-#include "TextEffectsHandler.hxx"
-#include "CellColorHandler.hxx"
-#include "SectionColumnHandler.hxx"
-#include "GraphicHelpers.hxx"
-#include <dmapper/GraphicZOrderHelper.hxx>
-#include <tools/diagnose_ex.h>
-#include <sal/log.hxx>
-#include <tools/UnitConversion.hxx>
-
-using namespace ::com::sun::star;
-using namespace oox;
-
-namespace writerfilter::dmapper{
-
-struct
-{
- sal_Int32 h;
- bool orient;
- sal_Int32 w;
-} CT_PageSz;
-
-
-DomainMapper::DomainMapper( const uno::Reference< uno::XComponentContext >& xContext,
- uno::Reference<io::XInputStream> const& xInputStream,
- uno::Reference<lang::XComponent> const& xModel,
- bool bRepairStorage,
- SourceDocumentType eDocumentType,
- utl::MediaDescriptor const & rMediaDesc) :
- LoggedProperties("DomainMapper"),
- LoggedTable("DomainMapper"),
- LoggedStream("DomainMapper"),
- m_pImpl(new DomainMapper_Impl(*this, xContext, xModel, eDocumentType, rMediaDesc)),
- mbIsSplitPara(false)
- ,mbHasControls(false)
-{
- // #i24363# tab stops relative to indent
- m_pImpl->SetDocumentSettingsProperty(
- getPropertyName( PROP_TABS_RELATIVE_TO_INDENT ),
- uno::makeAny( false ) );
- m_pImpl->SetDocumentSettingsProperty(
- getPropertyName( PROP_SURROUND_TEXT_WRAP_SMALL ),
- uno::makeAny( true ) );
- m_pImpl->SetDocumentSettingsProperty(
- getPropertyName( PROP_APPLY_PARAGRAPH_MARK_FORMAT_TO_NUMBERING ),
- uno::makeAny( true ) );
-
- // Don't load the default style definitions to avoid weird mix
- m_pImpl->SetDocumentSettingsProperty("StylesNoDefault", uno::makeAny(true));
- m_pImpl->SetDocumentSettingsProperty("MsWordCompTrailingBlanks", uno::makeAny(true));
- m_pImpl->SetDocumentSettingsProperty("HeaderSpacingBelowLastPara",
- uno::makeAny(true));
- m_pImpl->SetDocumentSettingsProperty("FrameAutowidthWithMorePara", uno::makeAny(true));
-
- m_pImpl->SetDocumentSettingsProperty("TabAtLeftIndentForParagraphsInList", uno::makeAny(true));
-
- // Initialize RDF metadata, to be able to add statements during the import.
- try
- {
- uno::Reference<rdf::XDocumentMetadataAccess> xDocumentMetadataAccess(xModel, uno::UNO_QUERY_THROW);
- uno::Reference<embed::XStorage> xStorage = comphelper::OStorageHelper::GetTemporaryStorage();
- OUString aBaseURL = rMediaDesc.getUnpackedValueOrDefault("URL", OUString());
- const uno::Reference<frame::XModel> xModel_(xModel,
- uno::UNO_QUERY_THROW);
- const uno::Reference<rdf::XURI> xBaseURI(sfx2::createBaseURI(xContext, xModel_, aBaseURL, OUString()));
- const uno::Reference<task::XInteractionHandler> xHandler;
- xDocumentMetadataAccess->loadMetadataFromStorage(xStorage, xBaseURI, xHandler);
- }
- catch (const uno::Exception&)
- {
- DBG_UNHANDLED_EXCEPTION("writerfilter", "failed to initialize RDF metadata");
- }
-
- if (eDocumentType == SourceDocumentType::OOXML) {
- // tdf#108350
- // In Word since version 2007, the default document font is Calibri 11 pt.
- // If a DOCX document doesn't contain font information, we should assume
- // the intended font to provide best layout match.
- try
- {
- uno::Reference< beans::XPropertySet > xDefProps(GetTextFactory()->createInstance("com.sun.star.text.Defaults"),
- uno::UNO_QUERY_THROW);
- xDefProps->setPropertyValue(getPropertyName(PROP_CHAR_FONT_NAME), css::uno::Any(OUString("Calibri")));
- xDefProps->setPropertyValue(getPropertyName(PROP_CHAR_HEIGHT), css::uno::Any(double(11)));
- }
- catch (const uno::Exception&)
- {
- DBG_UNHANDLED_EXCEPTION("writerfilter", "failed to initialize default font");
- }
- }
-
- //import document properties
- try
- {
- m_pImpl->m_xDocumentStorage = comphelper::OStorageHelper::GetStorageOfFormatFromInputStream(
- OFOPXML_STORAGE_FORMAT_STRING, xInputStream, xContext, bRepairStorage);
-
- uno::Reference< uno::XInterface > xTemp = xContext->getServiceManager()->createInstanceWithContext(
- "com.sun.star.document.OOXMLDocumentPropertiesImporter",
- xContext);
-
- uno::Reference< document::XOOXMLDocumentPropertiesImporter > xImporter( xTemp, uno::UNO_QUERY_THROW );
- uno::Reference< document::XDocumentPropertiesSupplier > xPropSupplier( xModel, uno::UNO_QUERY_THROW);
- xImporter->importProperties(m_pImpl->m_xDocumentStorage,
- xPropSupplier->getDocumentProperties());
- }
- catch( const uno::Exception& ) {}
-}
-
-DomainMapper::~DomainMapper()
-{
- try
- {
- uno::Reference< text::XDocumentIndexesSupplier> xIndexesSupplier( m_pImpl->GetTextDocument(), uno::UNO_QUERY );
- sal_Int32 nIndexes = 0;
- if( xIndexesSupplier.is() )
- {
- uno::Reference< container::XIndexAccess > xIndexes = xIndexesSupplier->getDocumentIndexes();
- nIndexes = xIndexes->getCount();
- }
- // If we have page references, those need updating as well, similar to the indexes.
- uno::Reference<text::XTextFieldsSupplier> xTextFieldsSupplier(m_pImpl->GetTextDocument(), uno::UNO_QUERY);
- if(xTextFieldsSupplier.is())
- {
- uno::Reference<container::XEnumeration> xEnumeration = xTextFieldsSupplier->getTextFields()->createEnumeration();
- while(xEnumeration->hasMoreElements())
- {
- ++nIndexes;
- xEnumeration->nextElement();
- }
- }
-
- mbHasControls |= m_pImpl->m_pSdtHelper->hasElements();
- if ( nIndexes || mbHasControls )
- {
- //index update has to wait until first view is created
- uno::Reference< document::XEventBroadcaster > xBroadcaster(xIndexesSupplier, uno::UNO_QUERY);
- if (xBroadcaster.is())
- xBroadcaster->addEventListener(uno::Reference< document::XEventListener >(new ModelEventListener(nIndexes, mbHasControls)));
- }
-
-
- // Apply the document settings after everything else
- m_pImpl->GetSettingsTable()->ApplyProperties( m_pImpl->GetTextDocument( ) );
-
- // now that importing is finished, re-enable default styles for any that were never defined/imported.
- m_pImpl->SetDocumentSettingsProperty("StylesNoDefault", uno::makeAny(false));
-
- // Grab-bag handling
- comphelper::SequenceAsHashMap aProperties;
-
- // Add the saved w:themeFontLang setting
- aProperties["ThemeFontLangProps"] <<= m_pImpl->GetSettingsTable()->GetThemeFontLangProperties();
-
- // Add the saved compat settings
- aProperties["CompatSettings"] <<= m_pImpl->GetSettingsTable()->GetCompatSettings();
-
- // Add the saved DocumentProtection settings
- aProperties["DocumentProtection"] <<= m_pImpl->GetSettingsTable()->GetDocumentProtectionSettings();
-
- // Add the saved w:hyphenationZone setting
- aProperties["HyphenationZone"] <<= m_pImpl->GetSettingsTable()->GetHyphenationZone();
-
- // Add the saved w:doNotHyphenateCaps setting
- aProperties["NoHyphenateCaps"] <<= m_pImpl->GetSettingsTable()->GetNoHyphenateCaps();
-
- uno::Reference<beans::XPropertySet> xDocProps(m_pImpl->GetTextDocument(), uno::UNO_QUERY);
- if (xDocProps.is())
- {
- comphelper::SequenceAsHashMap aGrabBag(xDocProps->getPropertyValue("InteropGrabBag"));
- aGrabBag.update(aProperties);
- xDocProps->setPropertyValue("InteropGrabBag", uno::Any(aGrabBag.getAsConstPropertyValueList()));
- }
- }
- catch( const uno::Exception& ) {}
-
-#ifdef DBG_UTIL
- TagLogger::getInstance().endDocument();
-#endif
-}
-
-void DomainMapper::lcl_attribute(Id nName, Value & val)
-{
- if (m_pImpl->hasTableManager() && m_pImpl->getTableManager().attribute(nName, val))
- return;
-
- static const int nSingleLineSpacing = 240;
- sal_Int32 nIntValue = val.getInt();
- OUString sStringValue = val.getString();
-
- SectionPropertyMap * pSectionContext = m_pImpl->GetSectionContext();
- switch( nName )
- {
- case NS_ooxml::LN_CT_Lvl_start:
- break;
- case NS_ooxml::LN_CT_Lvl_numFmt:
- break;
- case NS_ooxml::LN_CT_Lvl_isLgl:
- break;
- case NS_ooxml::LN_CT_Lvl_legacy:
- break;
- case NS_ooxml::LN_CT_AbstractNum_nsid:
- break;
- case NS_ooxml::LN_CT_AbstractNum_tmpl:
- break;
- case NS_ooxml::LN_CT_Border_sz:
- break;
- case NS_ooxml::LN_CT_Border_val:
- break;
- case NS_ooxml::LN_CT_Border_space:
- break;
- case NS_ooxml::LN_CT_Border_shadow:
- break;
- case NS_ooxml::LN_CT_Border_frame:
- break;
- case NS_ooxml::LN_headerr:
- break;
- case NS_ooxml::LN_footerr:
- break;
- case NS_ooxml::LN_endnote:
- break;
- case NS_ooxml::LN_CT_Bookmark_name:
- m_pImpl->SetBookmarkName( sStringValue );
- break;
- case NS_ooxml::LN_CT_MarkupRangeBookmark_id:
- // add a bookmark range -- this remembers a bookmark starting here
- // or, if the bookmark was already started or, if the bookmark was
- // already started before, writes out the bookmark
- m_pImpl->StartOrEndBookmark( sStringValue );
- break;
- case NS_ooxml::LN_CT_MarkupRange_displacedByCustomXml:
- break;
- case NS_ooxml::LN_NUMBERING:
- break;
- case NS_ooxml::LN_FONTTABLE:
- break;
- case NS_ooxml::LN_STYLESHEET:
- break;
-
- case NS_ooxml::LN_CT_Sym_char:
- m_pImpl->SetSymbolChar(nIntValue);
- break;
- case NS_ooxml::LN_CT_Sym_font:
- m_pImpl->SetSymbolFont(sStringValue);
- break;
- case NS_ooxml::LN_CT_Underline_val:
- if (m_pImpl->GetTopContext())
- handleUnderlineType(nIntValue, m_pImpl->GetTopContext());
- break;
- case NS_ooxml::LN_CT_Color_val:
- if (m_pImpl->GetTopContext())
- m_pImpl->GetTopContext()->Insert(PROP_CHAR_COLOR, uno::makeAny( nIntValue ) );
- m_pImpl->appendGrabBag(m_pImpl->m_aSubInteropGrabBag, "val", OUString::fromUtf8(msfilter::util::ConvertColor(Color(ColorTransparency,nIntValue))));
- break;
- case NS_ooxml::LN_CT_Underline_color:
- if (m_pImpl->GetTopContext())
- {
- m_pImpl->GetTopContext()->Insert(PROP_CHAR_UNDERLINE_HAS_COLOR, uno::makeAny( true ) );
- m_pImpl->GetTopContext()->Insert(PROP_CHAR_UNDERLINE_COLOR, uno::makeAny( nIntValue ) );
- }
- break;
-
- case NS_ooxml::LN_CT_TabStop_val:
- if (sal::static_int_cast<Id>(nIntValue) == NS_ooxml::LN_Value_ST_TabJc_clear)
- {
- m_pImpl->m_aCurrentTabStop.bDeleted = true;
- }
- else
- {
- m_pImpl->m_aCurrentTabStop.bDeleted = false;
- m_pImpl->m_aCurrentTabStop.Alignment = getTabAlignFromValue(nIntValue);
- }
- break;
- case NS_ooxml::LN_CT_TabStop_leader:
- m_pImpl->m_aCurrentTabStop.FillChar = getFillCharFromValue(nIntValue);
- break;
- case NS_ooxml::LN_CT_TabStop_pos:
- m_pImpl->m_aCurrentTabStop.Position = ConversionHelper::convertTwipToMM100(nIntValue);
- break;
-
- case NS_ooxml::LN_CT_Fonts_ascii:
- if (m_pImpl->GetTopContext())
- {
- m_pImpl->GetTopContext()->Insert(PROP_CHAR_FONT_NAME, uno::makeAny( sStringValue ));
- if (m_pImpl->GetTopContextOfType(CONTEXT_PARAGRAPH) && m_pImpl->GetTopContextOfType(CONTEXT_PARAGRAPH)->isSet(PROP_NUMBERING_RULES))
- {
- // Font of the paragraph mark should be used for the numbering as well.
- uno::Reference<beans::XPropertySet> xCharStyle(m_pImpl->GetCurrentNumberingCharStyle());
- if (xCharStyle.is())
- xCharStyle->setPropertyValue("CharFontName", uno::makeAny(sStringValue));
- }
- }
- break;
- case NS_ooxml::LN_CT_Fonts_asciiTheme:
- m_pImpl->appendGrabBag(m_pImpl->m_aSubInteropGrabBag, "asciiTheme", ThemeTable::getStringForTheme(nIntValue));
- if (m_pImpl->GetTopContext())
- {
- uno::Any aPropValue = uno::makeAny( m_pImpl->GetThemeTable()->getFontNameForTheme( nIntValue ) );
- m_pImpl->GetTopContext()->Insert(PROP_CHAR_FONT_NAME, aPropValue );
- m_pImpl->GetTopContext()->Insert(PROP_CHAR_THEME_FONT_NAME_ASCII, aPropValue, true, CHAR_GRAB_BAG );
- m_pImpl->GetTopContext()->Insert(PROP_CHAR_THEME_NAME_ASCII, uno::makeAny( ThemeTable::getStringForTheme(nIntValue) ), true, CHAR_GRAB_BAG);
- }
- break;
- case NS_ooxml::LN_CT_Fonts_hAnsi:
- break;//unsupported
- case NS_ooxml::LN_CT_Fonts_hAnsiTheme:
- m_pImpl->appendGrabBag(m_pImpl->m_aSubInteropGrabBag, "hAnsiTheme", ThemeTable::getStringForTheme(nIntValue));
- if (m_pImpl->GetTopContext())
- m_pImpl->GetTopContext()->Insert(PROP_CHAR_THEME_NAME_H_ANSI, uno::makeAny( ThemeTable::getStringForTheme(nIntValue) ), true, CHAR_GRAB_BAG);
- break;
- case NS_ooxml::LN_CT_Fonts_eastAsia:
- if (m_pImpl->GetTopContext())
- m_pImpl->GetTopContext()->Insert(PROP_CHAR_FONT_NAME_ASIAN, uno::makeAny( sStringValue ));
- break;
- case NS_ooxml::LN_CT_Fonts_eastAsiaTheme:
- m_pImpl->appendGrabBag(m_pImpl->m_aSubInteropGrabBag, "eastAsiaTheme", ThemeTable::getStringForTheme(nIntValue));
- if (m_pImpl->GetTopContext())
- {
- uno::Any aPropValue = uno::makeAny( m_pImpl->GetThemeTable()->getFontNameForTheme( nIntValue ) );
- m_pImpl->GetTopContext()->Insert(PROP_CHAR_FONT_NAME_ASIAN, aPropValue );
- m_pImpl->GetTopContext()->Insert(PROP_CHAR_THEME_FONT_NAME_EAST_ASIA, aPropValue, true, CHAR_GRAB_BAG );
- m_pImpl->GetTopContext()->Insert(PROP_CHAR_THEME_NAME_EAST_ASIA, uno::makeAny( ThemeTable::getStringForTheme(nIntValue) ), true, CHAR_GRAB_BAG);
- }
- break;
- case NS_ooxml::LN_CT_Fonts_cs:
- if (m_pImpl->GetTopContext())
- m_pImpl->GetTopContext()->Insert(PROP_CHAR_FONT_NAME_COMPLEX, uno::makeAny( sStringValue ));
- break;
- case NS_ooxml::LN_CT_Fonts_cstheme:
- m_pImpl->appendGrabBag(m_pImpl->m_aSubInteropGrabBag, "cstheme", ThemeTable::getStringForTheme(nIntValue));
- if (m_pImpl->GetTopContext())
- {
- uno::Any aPropValue = uno::makeAny( m_pImpl->GetThemeTable()->getFontNameForTheme( nIntValue ) );
- m_pImpl->GetTopContext()->Insert(PROP_CHAR_FONT_NAME_COMPLEX, aPropValue );
- m_pImpl->GetTopContext()->Insert(PROP_CHAR_THEME_FONT_NAME_CS, aPropValue, true, CHAR_GRAB_BAG );
- m_pImpl->GetTopContext()->Insert(PROP_CHAR_THEME_NAME_CS, uno::makeAny( ThemeTable::getStringForTheme(nIntValue) ), true, CHAR_GRAB_BAG);
- }
- break;
- case NS_ooxml::LN_CT_Spacing_before:
- m_pImpl->appendGrabBag(m_pImpl->m_aSubInteropGrabBag, "before", OUString::number(nIntValue));
- if (m_pImpl->GetTopContext())
- // Don't overwrite NS_ooxml::LN_CT_Spacing_beforeAutospacing.
- m_pImpl->GetTopContext()->Insert(
- PROP_PARA_TOP_MARGIN,
- uno::makeAny(static_cast<sal_Int32>(convertTwipToMm100(nIntValue))), false);
- break;
- case NS_ooxml::LN_CT_Spacing_beforeLines:
- m_pImpl->appendGrabBag(m_pImpl->m_aSubInteropGrabBag, "beforeLines", OUString::number(nIntValue));
- // We would need to make sure that this doesn't overwrite any
- // NS_ooxml::LN_CT_Spacing_before in parent styles before style
- // sheet support can be enabled.
- if (m_pImpl->GetTopContext() && !IsStyleSheetImport())
- m_pImpl->GetTopContext()->Insert(PROP_PARA_TOP_MARGIN, uno::makeAny(ConversionHelper::convertTwipToMM100(nIntValue * nSingleLineSpacing / 100)), false);
- break;
- case NS_ooxml::LN_CT_Spacing_after:
- m_pImpl->appendGrabBag(m_pImpl->m_aSubInteropGrabBag, "after", OUString::number(nIntValue));
- if (m_pImpl->GetTopContext())
- {
- // Don't overwrite NS_ooxml::LN_CT_Spacing_afterAutospacing.
- m_pImpl->GetTopContext()->Insert(PROP_PARA_BOTTOM_MARGIN, uno::makeAny( ConversionHelper::convertTwipToMM100( nIntValue ) ), false);
-
- uno::Any aContextualSpacingFromStyle = m_pImpl->GetPropertyFromParaStyleSheet(PROP_PARA_CONTEXT_MARGIN);
- if (aContextualSpacingFromStyle.hasValue())
- // Setting "after" spacing means Writer doesn't inherit
- // contextual spacing anymore from style, but Word does.
- m_pImpl->GetTopContext()->Insert(PROP_PARA_CONTEXT_MARGIN, aContextualSpacingFromStyle);
- }
- break;
- case NS_ooxml::LN_CT_Spacing_afterLines:
- m_pImpl->appendGrabBag(m_pImpl->m_aSubInteropGrabBag, "afterLines", OUString::number(nIntValue));
- // We would need to make sure that this doesn't overwrite any
- // NS_ooxml::LN_CT_Spacing_after in parent styles before style
- // sheet support can be enabled.
- if (m_pImpl->GetTopContext() && !IsStyleSheetImport())
- m_pImpl->GetTopContext()->Insert(PROP_PARA_BOTTOM_MARGIN, uno::makeAny(ConversionHelper::convertTwipToMM100(nIntValue * nSingleLineSpacing / 100)), false);
- break;
- case NS_ooxml::LN_CT_Spacing_line: //91434
- case NS_ooxml::LN_CT_Spacing_lineRule: //91435
- {
- style::LineSpacing aSpacing;
- PropertyMapPtr pTopContext = m_pImpl->GetTopContext();
- std::optional<PropertyMap::Property> aLineSpacingVal;
- if (pTopContext && (aLineSpacingVal = pTopContext->getProperty(PROP_PARA_LINE_SPACING)) )
- {
- aLineSpacingVal->second >>= aSpacing;
- }
- else
- {
- //default to single line spacing
- aSpacing.Mode = style::LineSpacingMode::FIX;
- aSpacing.Height = sal_Int16(ConversionHelper::convertTwipToMM100( nSingleLineSpacing ));
- }
- if( nName == NS_ooxml::LN_CT_Spacing_line )
- {
- m_pImpl->appendGrabBag(m_pImpl->m_aSubInteropGrabBag, "line", OUString::number(nIntValue));
- //now set the value depending on the Mode
- if( aSpacing.Mode == style::LineSpacingMode::PROP )
- aSpacing.Height = sal_Int16(nIntValue * 100 / nSingleLineSpacing );
- else
- aSpacing.Height = sal_Int16(ConversionHelper::convertTwipToMM100( nIntValue ));
- }
- else //NS_ooxml::LN_CT_Spacing_lineRule:
- {
- // exactly, atLeast, auto
- if( sal::static_int_cast<Id>(nIntValue) == NS_ooxml::LN_Value_doc_ST_LineSpacingRule_auto)
- {
- m_pImpl->appendGrabBag(m_pImpl->m_aSubInteropGrabBag, "lineRule", "auto");
- if (aSpacing.Height >= 0)
- {
- aSpacing.Mode = style::LineSpacingMode::PROP;
- //reinterpret the already set value
- aSpacing.Height = sal_Int16( aSpacing.Height * 100 / ConversionHelper::convertTwipToMM100( nSingleLineSpacing ));
- }
- else
- {
- // Negative value still means a positive height,
- // just the mode is "exact".
- aSpacing.Mode = style::LineSpacingMode::FIX;
- aSpacing.Height *= -1;
- }
- }
- else if( sal::static_int_cast<Id>(nIntValue) == NS_ooxml::LN_Value_doc_ST_LineSpacingRule_atLeast)
- {
- m_pImpl->appendGrabBag(m_pImpl->m_aSubInteropGrabBag, "lineRule", "atLeast");
- aSpacing.Mode = style::LineSpacingMode::MINIMUM;
- }
- else // NS_ooxml::LN_Value_doc_ST_LineSpacingRule_exact
- {
- m_pImpl->appendGrabBag(m_pImpl->m_aSubInteropGrabBag, "lineRule", "exact");
- aSpacing.Mode = style::LineSpacingMode::FIX;
- }
- }
- if (pTopContext)
- pTopContext->Insert(PROP_PARA_LINE_SPACING, uno::makeAny( aSpacing ));
- }
- break;
- case NS_ooxml::LN_CT_Ind_start:
- case NS_ooxml::LN_CT_Ind_left:
- if (m_pImpl->GetTopContext())
- {
- // Word inherits FirstLineIndent property of the numbering, even if ParaLeftMargin is set, Writer does not.
- // So copy it explicitly, if necessary.
- sal_Int32 nFirstLineIndent = m_pImpl->getCurrentNumberingProperty("FirstLineIndent");
- sal_Int32 nIndentAt = m_pImpl->getCurrentNumberingProperty("IndentAt");
-
- sal_Int32 nParaLeftMargin = ConversionHelper::convertTwipToMM100(nIntValue);
- if (nParaLeftMargin != 0 && nIndentAt == nParaLeftMargin)
- // Avoid direct left margin when it's the same as from the
- // numbering.
- break;
-
- if (nFirstLineIndent != 0)
- m_pImpl->GetTopContext()->Insert(PROP_PARA_FIRST_LINE_INDENT, uno::makeAny(nFirstLineIndent), /*bOverwrite=*/false);
-
- m_pImpl->GetTopContext()->Insert(PROP_PARA_LEFT_MARGIN,
- uno::makeAny(nParaLeftMargin));
- }
- break;
- case NS_ooxml::LN_CT_Ind_end:
- case NS_ooxml::LN_CT_Ind_right:
- if (m_pImpl->GetTopContext())
- {
- // Word inherits FirstLineIndent/ParaLeftMargin property of the numbering, even if ParaRightMargin is set, Writer does not.
- // So copy it explicitly, if necessary.
- sal_Int32 nFirstLineIndent = m_pImpl->getCurrentNumberingProperty("FirstLineIndent");
- sal_Int32 nParaLeftMargin = m_pImpl->getCurrentNumberingProperty("IndentAt");
-
- if (nFirstLineIndent != 0)
- m_pImpl->GetTopContext()->Insert(PROP_PARA_FIRST_LINE_INDENT, uno::makeAny(nFirstLineIndent), /*bOverwrite=*/false);
- if (nParaLeftMargin != 0)
- m_pImpl->GetTopContext()->Insert(PROP_PARA_LEFT_MARGIN, uno::makeAny(nParaLeftMargin), /*bOverwrite=*/false);
-
- m_pImpl->GetTopContext()->Insert(
- PROP_PARA_RIGHT_MARGIN, uno::makeAny( ConversionHelper::convertTwipToMM100(nIntValue ) ));
- }
- m_pImpl->appendGrabBag(m_pImpl->m_aSubInteropGrabBag, "right", OUString::number(nIntValue));
- break;
- case NS_ooxml::LN_CT_Ind_hanging:
- if (m_pImpl->GetTopContext())
- {
- sal_Int32 nValue = ConversionHelper::convertTwipToMM100( nIntValue );
- m_pImpl->GetTopContext()->Insert(
- PROP_PARA_FIRST_LINE_INDENT, uno::makeAny( - nValue ));
-
- // See above, need to inherit left margin from list style when first is set.
- sal_Int32 nParaLeftMargin = m_pImpl->getCurrentNumberingProperty("IndentAt");
- if (nParaLeftMargin != 0)
- m_pImpl->GetTopContext()->Insert(PROP_PARA_LEFT_MARGIN, uno::makeAny(nParaLeftMargin), /*bOverwrite=*/false);
- }
- break;
- case NS_ooxml::LN_CT_Ind_firstLine:
- if (m_pImpl->GetTopContext())
- {
- sal_Int32 nFirstLineIndent
- = m_pImpl->getCurrentNumberingProperty("FirstLineIndent");
- sal_Int32 nParaFirstLineIndent = ConversionHelper::convertTwipToMM100(nIntValue);
- if (nParaFirstLineIndent != 0 && nFirstLineIndent == nParaFirstLineIndent)
- // Avoid direct first margin when it's the same as from the
- // numbering.
- break;
- m_pImpl->GetTopContext()->Insert(PROP_PARA_FIRST_LINE_INDENT,
- uno::makeAny(nParaFirstLineIndent));
- }
- break;
- case NS_ooxml::LN_CT_Ind_rightChars:
- m_pImpl->appendGrabBag(m_pImpl->m_aSubInteropGrabBag, "rightChars", OUString::number(nIntValue));
- break;
-
- case NS_ooxml::LN_CT_EastAsianLayout_id:
- break;
- case NS_ooxml::LN_CT_EastAsianLayout_combine:
- if (m_pImpl->GetTopContext())
- m_pImpl->GetTopContext()->Insert(PROP_CHAR_COMBINE_IS_ON, uno::makeAny ( nIntValue != 0 ));
- break;
- case NS_ooxml::LN_CT_EastAsianLayout_combineBrackets:
- if (m_pImpl->GetTopContext())
- {
- OUString sCombinePrefix = getBracketStringFromEnum(nIntValue);
- OUString sCombineSuffix = getBracketStringFromEnum(nIntValue, false);
- m_pImpl->GetTopContext()->Insert(PROP_CHAR_COMBINE_PREFIX, uno::makeAny ( sCombinePrefix ));
- m_pImpl->GetTopContext()->Insert(PROP_CHAR_COMBINE_SUFFIX, uno::makeAny ( sCombineSuffix ));
- }
- break;
- case NS_ooxml::LN_CT_EastAsianLayout_vert:
- if (m_pImpl->GetTopContext())
- {
- sal_Int16 nRotationAngle = (nIntValue ? 900 : 0);
- m_pImpl->GetTopContext()->Insert(PROP_CHAR_ROTATION, uno::makeAny ( nRotationAngle ));
- }
- break;
- case NS_ooxml::LN_CT_EastAsianLayout_vertCompress:
- if (m_pImpl->GetTopContext())
- m_pImpl->GetTopContext()->Insert(PROP_CHAR_ROTATION_IS_FIT_TO_LINE, uno::makeAny ( nIntValue != 0 ));
- break;
-
- case NS_ooxml::LN_CT_PageSz_code:
- break;
- case NS_ooxml::LN_CT_PageSz_h:
- {
- sal_Int32 nHeight = ConversionHelper::convertTwipToMM100(nIntValue);
- CT_PageSz.h = PaperInfo::sloppyFitPageDimension(nHeight);
- }
- break;
- case NS_ooxml::LN_CT_PageSz_orient:
- CT_PageSz.orient = (nIntValue != static_cast<sal_Int32>(NS_ooxml::LN_Value_ST_PageOrientation_portrait));
- break;
- case NS_ooxml::LN_CT_PageSz_w:
- {
- sal_Int32 nWidth = ConversionHelper::convertTwipToMM100(nIntValue);
- CT_PageSz.w = PaperInfo::sloppyFitPageDimension(nWidth);
- }
- break;
-
- case NS_ooxml::LN_CT_PageMar_top:
- m_pImpl->SetPageMarginTwip( PAGE_MAR_TOP, nIntValue );
- break;
- case NS_ooxml::LN_CT_PageMar_right:
- m_pImpl->SetPageMarginTwip( PAGE_MAR_RIGHT, nIntValue );
- break;
- case NS_ooxml::LN_CT_PageMar_bottom:
- m_pImpl->SetPageMarginTwip( PAGE_MAR_BOTTOM, nIntValue );
- break;
- case NS_ooxml::LN_CT_PageMar_left:
- m_pImpl->SetPageMarginTwip( PAGE_MAR_LEFT, nIntValue );
- break;
- case NS_ooxml::LN_CT_PageMar_header:
- m_pImpl->SetPageMarginTwip( PAGE_MAR_HEADER, nIntValue );
- break;
- case NS_ooxml::LN_CT_PageMar_footer:
- m_pImpl->SetPageMarginTwip( PAGE_MAR_FOOTER, nIntValue );
- break;
- case NS_ooxml::LN_CT_PageMar_gutter:
- m_pImpl->SetPageMarginTwip( PAGE_MAR_GUTTER, nIntValue );
- break;
- case NS_ooxml::LN_CT_Language_val: //90314
- case NS_ooxml::LN_CT_Language_eastAsia: //90315
- case NS_ooxml::LN_CT_Language_bidi: //90316
- {
- if (nName == NS_ooxml::LN_CT_Language_eastAsia)
- m_pImpl->appendGrabBag(m_pImpl->m_aSubInteropGrabBag, "eastAsia", sStringValue);
- else if (nName == NS_ooxml::LN_CT_Language_val)
- m_pImpl->appendGrabBag(m_pImpl->m_aSubInteropGrabBag, "val", sStringValue);
- else if (nName == NS_ooxml::LN_CT_Language_bidi)
- m_pImpl->appendGrabBag(m_pImpl->m_aSubInteropGrabBag, "bidi", sStringValue);
- lang::Locale aLocale( LanguageTag::convertToLocale( sStringValue));
- if (m_pImpl->GetTopContext())
- m_pImpl->GetTopContext()->Insert(NS_ooxml::LN_CT_Language_val== nName ? PROP_CHAR_LOCALE :
- NS_ooxml::LN_CT_Language_eastAsia == nName ? PROP_CHAR_LOCALE_ASIAN : PROP_CHAR_LOCALE_COMPLEX,
- uno::makeAny( aLocale ) );
- }
- break;
- // See SwWW8ImplReader::GetParagraphAutoSpace() on why these are 100 and 280
- case NS_ooxml::LN_CT_Spacing_beforeAutospacing:
- {
- sal_Int32 default_spacing = -1;
- if (nIntValue)
- {
- m_pImpl->SetParaAutoBefore(true);
-
- default_spacing = 100;
- if (!m_pImpl->GetSettingsTable()->GetDoNotUseHTMLParagraphAutoSpacing())
- {
- // 49 is just the old value that should be removed, once the
- // root cause in SwTabFrm::MakeAll() is fixed.
- if (m_pImpl->GetSettingsTable()->GetView() == NS_ooxml::LN_Value_doc_ST_View_web)
- default_spacing = 49;
- else
- default_spacing = 280;
- }
- // required at export (here mainly for StyleSheets) to determine if the setting has changed from grab_bag
- m_pImpl->GetTopContext()->Insert(PROP_PARA_TOP_MARGIN, uno::makeAny(ConversionHelper::convertTwipToMM100(default_spacing)));
- }
- m_pImpl->GetTopContext()->Insert( PROP_PARA_TOP_MARGIN_BEFORE_AUTO_SPACING, uno::makeAny( ConversionHelper::convertTwipToMM100(default_spacing) ),true, PARA_GRAB_BAG );
- }
- break;
- case NS_ooxml::LN_CT_Spacing_afterAutospacing:
- {
- sal_Int32 default_spacing = -1;
- if (nIntValue)
- {
- default_spacing = 100;
- if (!m_pImpl->GetSettingsTable()->GetDoNotUseHTMLParagraphAutoSpacing())
- {
- if (m_pImpl->GetSettingsTable()->GetView() == NS_ooxml::LN_Value_doc_ST_View_web)
- default_spacing = 49;
- else
- default_spacing = 280;
- }
- m_pImpl->GetTopContext()->Insert(PROP_PARA_BOTTOM_MARGIN, uno::makeAny(ConversionHelper::convertTwipToMM100(default_spacing)));
- }
- m_pImpl->GetTopContext()->Insert( PROP_PARA_BOTTOM_MARGIN_AFTER_AUTO_SPACING, uno::makeAny( ConversionHelper::convertTwipToMM100(default_spacing) ),true, PARA_GRAB_BAG );
- }
- break;
- case NS_ooxml::LN_CT_SmartTagRun_uri:
- m_pImpl->getSmartTagHandler().setURI(val.getString());
- break;
- case NS_ooxml::LN_CT_SmartTagRun_element:
- m_pImpl->getSmartTagHandler().setElement(val.getString());
- break;
- case NS_ooxml::LN_CT_Br_type :
- //TODO: attributes for break (0x12) are not supported
- break;
- case NS_ooxml::LN_CT_Fonts_hint :
- /* assigns script type to ambiguous characters, values can be:
- NS_ooxml::LN_Value_ST_Hint_default
- NS_ooxml::LN_Value_ST_Hint_eastAsia
- NS_ooxml::LN_Value_ST_Hint_cs
- */
- //TODO: unsupported?
- break;
- case NS_ooxml::LN_CT_TblBorders_right:
- case NS_ooxml::LN_CT_TblBorders_top:
- case NS_ooxml::LN_CT_TblBorders_left:
- case NS_ooxml::LN_CT_TblBorders_bottom:
- //todo: handle cell mar
- break;
- case NS_ooxml::LN_blip: // contains the binary graphic
- case NS_ooxml::LN_shape:
- {
- //looks a bit like a hack - and it is. The graphic import is split into the inline_inline part and
- //afterwards the adding of the binary data.
- m_pImpl->GetGraphicImport( IMPORT_AS_DETECTED_INLINE )->attribute(nName, val);
- m_pImpl->ImportGraphic( val.getProperties(), IMPORT_AS_DETECTED_INLINE );
- }
- break;
- case NS_ooxml::LN_Value_math_ST_Jc_centerGroup:
- case NS_ooxml::LN_Value_math_ST_Jc_center:
- m_pImpl->appendStarMath(val);
- m_pImpl->adjustLastPara(sal_Int8(style::ParagraphAdjust::ParagraphAdjust_CENTER));
- break;
- case NS_ooxml::LN_Value_math_ST_Jc_left:
- m_pImpl->appendStarMath(val);
- m_pImpl->adjustLastPara(sal_Int8(style::ParagraphAdjust::ParagraphAdjust_LEFT));
- break;
- case NS_ooxml::LN_Value_math_ST_Jc_right:
- m_pImpl->appendStarMath(val);
- m_pImpl->adjustLastPara(sal_Int8(style::ParagraphAdjust::ParagraphAdjust_RIGHT));
- break;
- case NS_ooxml::LN_starmath:
- m_pImpl->appendStarMath(val);
- break;
- case NS_ooxml::LN_CT_FramePr_dropCap:
- case NS_ooxml::LN_CT_FramePr_lines:
- case NS_ooxml::LN_CT_FramePr_hAnchor:
- case NS_ooxml::LN_CT_FramePr_vAnchor:
- case NS_ooxml::LN_CT_FramePr_x:
- case NS_ooxml::LN_CT_FramePr_xAlign:
- case NS_ooxml::LN_CT_FramePr_y:
- case NS_ooxml::LN_CT_FramePr_yAlign:
- case NS_ooxml::LN_CT_FramePr_hRule:
- case NS_ooxml::LN_CT_FramePr_w:
- case NS_ooxml::LN_CT_FramePr_h:
- case NS_ooxml::LN_CT_FramePr_wrap:
- case NS_ooxml::LN_CT_FramePr_hSpace:
- case NS_ooxml::LN_CT_FramePr_vSpace:
- {
- ParagraphProperties* pParaProperties = nullptr;
- // handle frame properties at styles
- if( m_pImpl->GetTopContextType() == CONTEXT_STYLESHEET )
- pParaProperties = dynamic_cast< ParagraphProperties*>( m_pImpl->GetTopContextOfType( CONTEXT_STYLESHEET ).get() );
- else
- pParaProperties = dynamic_cast< ParagraphProperties*>( m_pImpl->GetTopContextOfType( CONTEXT_PARAGRAPH ).get() );
-
- if( pParaProperties )
- {
- switch( nName )
- {
- case NS_ooxml::LN_CT_FramePr_dropCap:
- pParaProperties->SetDropCap( nIntValue );
- break;
- case NS_ooxml::LN_CT_FramePr_lines:
- pParaProperties->SetLines( nIntValue );
- break;
- case NS_ooxml::LN_CT_FramePr_hAnchor:
- switch(nIntValue)
- {
- case NS_ooxml::LN_Value_doc_ST_HAnchor_text: //relative to column
- nIntValue = text::RelOrientation::FRAME; break;
- case NS_ooxml::LN_Value_doc_ST_HAnchor_margin: nIntValue = text::RelOrientation::PAGE_PRINT_AREA; break;
- case NS_ooxml::LN_Value_doc_ST_HAnchor_page: nIntValue = text::RelOrientation::PAGE_FRAME; break;
- default:;
- }
- pParaProperties->SethAnchor( nIntValue );
- break;
- case NS_ooxml::LN_CT_FramePr_vAnchor:
- switch(nIntValue)
- {
- case NS_ooxml::LN_Value_doc_ST_VAnchor_text: //relative to paragraph
- nIntValue = text::RelOrientation::FRAME; break;
- case NS_ooxml::LN_Value_doc_ST_VAnchor_margin:nIntValue = text::RelOrientation::PAGE_PRINT_AREA ; break;
- case NS_ooxml::LN_Value_doc_ST_VAnchor_page: nIntValue = text::RelOrientation::PAGE_FRAME; break;
- default:;
- }
- pParaProperties->SetvAnchor( nIntValue );
- break;
- case NS_ooxml::LN_CT_FramePr_x:
- pParaProperties->Setx( ConversionHelper::convertTwipToMM100(nIntValue ));
- pParaProperties->SetxAlign( text::HoriOrientation::NONE );
- break;
- case NS_ooxml::LN_CT_FramePr_xAlign:
- switch( nIntValue )
- {
- case NS_ooxml::LN_Value_doc_ST_XAlign_center : nIntValue = text::HoriOrientation::CENTER; break;
- case NS_ooxml::LN_Value_doc_ST_XAlign_right : nIntValue = text::HoriOrientation::RIGHT; break;
- case NS_ooxml::LN_Value_doc_ST_XAlign_inside : nIntValue = text::HoriOrientation::INSIDE; break;
- case NS_ooxml::LN_Value_doc_ST_XAlign_outside : nIntValue = text::HoriOrientation::OUTSIDE; break;
- case NS_ooxml::LN_Value_doc_ST_XAlign_left : nIntValue = text::HoriOrientation::LEFT; break;
- default: nIntValue = text::HoriOrientation::NONE;
- }
- pParaProperties->SetxAlign( nIntValue );
- break;
- case NS_ooxml::LN_CT_FramePr_y:
- pParaProperties->Sety( ConversionHelper::convertTwipToMM100(nIntValue ));
- pParaProperties->SetyAlign( text::VertOrientation::NONE );
- break;
- case NS_ooxml::LN_CT_FramePr_yAlign:
- switch( nIntValue )
- {
- case NS_ooxml::LN_Value_doc_ST_YAlign_top :
- case NS_ooxml::LN_Value_doc_ST_YAlign_inside :nIntValue = text::VertOrientation::TOP; break;
- case NS_ooxml::LN_Value_doc_ST_YAlign_center :nIntValue = text::VertOrientation::CENTER;break;
- case NS_ooxml::LN_Value_doc_ST_YAlign_bottom :
- case NS_ooxml::LN_Value_doc_ST_YAlign_outside :nIntValue = text::VertOrientation::BOTTOM;break;
- case NS_ooxml::LN_Value_doc_ST_YAlign_inline :
- {
- // HACK: This is for bnc#780851, where a table has one cell that has w:framePr,
- // which causes that paragraph to be converted to a text frame, and the original
- // paragraph object no longer exists, which makes table creation fail and furthermore
- // it would be missing in the table layout anyway. So actually no letting that paragraph
- // be a text frame "fixes" it. I'm not sure what "inline" is supposed to mean in practice
- // anyway, so as long as this doesn't cause trouble elsewhere ...
- PropertyMapPtr pContext = m_pImpl->GetTopContextOfType(CONTEXT_PARAGRAPH);
- if( pContext )
- {
- ParagraphPropertyMap* pParaContext = dynamic_cast< ParagraphPropertyMap* >( pContext.get() );
- if (pParaContext)
- pParaContext->SetFrameMode(false);
- }
- nIntValue = text::VertOrientation::NONE;
- break;
- }
- default:
- nIntValue = text::VertOrientation::NONE;
- break;
- }
- pParaProperties->SetyAlign( nIntValue );
- break;
- case NS_ooxml::LN_CT_FramePr_hRule:
- switch( nIntValue )
- {
- case NS_ooxml::LN_Value_doc_ST_HeightRule_exact:
- nIntValue = text::SizeType::FIX;
- break;
- case NS_ooxml::LN_Value_doc_ST_HeightRule_atLeast:
- nIntValue = text::SizeType::MIN;
- break;
- case NS_ooxml::LN_Value_doc_ST_HeightRule_auto:
- //no break;
- default:;
- nIntValue = text::SizeType::VARIABLE;
- }
- pParaProperties->SethRule( nIntValue );
- break;
- case NS_ooxml::LN_CT_FramePr_wrap:
- {
- //should be either LN_Value_doc_ST_Wrap_notBeside or LN_Value_doc_ST_Wrap_around or LN_Value_doc_ST_Wrap_auto
- OSL_ENSURE( sal::static_int_cast<Id>(nIntValue) == NS_ooxml::LN_Value_doc_ST_Wrap_around ||
- sal::static_int_cast<Id>(nIntValue) == NS_ooxml::LN_Value_doc_ST_Wrap_notBeside ||
- sal::static_int_cast<Id>(nIntValue) == NS_ooxml::LN_Value_doc_ST_Wrap_through ||
- sal::static_int_cast<Id>(nIntValue) == NS_ooxml::LN_Value_doc_ST_Wrap_none ||
- sal::static_int_cast<Id>(nIntValue) == NS_ooxml::LN_Value_doc_ST_Wrap_auto,
- "wrap not around, not_Beside, through, none or auto?");
- if( sal::static_int_cast<Id>(nIntValue) == NS_ooxml::LN_Value_doc_ST_Wrap_through ||
- sal::static_int_cast<Id>(nIntValue) == NS_ooxml::LN_Value_doc_ST_Wrap_auto )
- pParaProperties->SetWrap ( text::WrapTextMode_DYNAMIC ) ;
- else if (sal::static_int_cast<Id>(nIntValue) == NS_ooxml::LN_Value_doc_ST_Wrap_around)
- pParaProperties->SetWrap(text::WrapTextMode_PARALLEL);
- else if (sal::static_int_cast<Id>(nIntValue) == NS_ooxml::LN_Value_doc_ST_Wrap_none)
- pParaProperties->SetWrap ( text::WrapTextMode_THROUGH ) ;
- else
- pParaProperties->SetWrap ( text::WrapTextMode_NONE ) ;
- }
- break;
- case NS_ooxml::LN_CT_FramePr_w:
- pParaProperties->Setw(ConversionHelper::convertTwipToMM100(nIntValue));
- break;
- case NS_ooxml::LN_CT_FramePr_h:
- pParaProperties->Seth(ConversionHelper::convertTwipToMM100(nIntValue));
- break;
- case NS_ooxml::LN_CT_FramePr_hSpace:
- pParaProperties->SethSpace( ConversionHelper::convertTwipToMM100(nIntValue ));
- break;
- case NS_ooxml::LN_CT_FramePr_vSpace:
- pParaProperties->SetvSpace( ConversionHelper::convertTwipToMM100(nIntValue ));
- break;
- default:;
- }
- }
- }
- break;
- case NS_ooxml::LN_CT_TrackChange_author:
- m_pImpl->SetCurrentRedlineAuthor( sStringValue );
- break;
- case NS_ooxml::LN_CT_TrackChange_date:
- m_pImpl->SetCurrentRedlineDate( sStringValue );
- break;
- case NS_ooxml::LN_CT_Markup_id:
- m_pImpl->SetCurrentRedlineId( nIntValue );
- break;
- case NS_ooxml::LN_EG_RangeMarkupElements_commentRangeStart:
- m_pImpl->AddAnnotationPosition( true, nIntValue );
- break;
- case NS_ooxml::LN_EG_RangeMarkupElements_commentRangeEnd:
- m_pImpl->AddAnnotationPosition( false, nIntValue );
- break;
- case NS_ooxml::LN_CT_Comment_initials:
- m_pImpl->SetCurrentRedlineInitials(sStringValue);
- break;
- case NS_ooxml::LN_token:
- m_pImpl->SetCurrentRedlineToken( nIntValue );
- break;
- case NS_ooxml::LN_CT_LineNumber_start:
- case NS_ooxml::LN_CT_LineNumber_distance:
- case NS_ooxml::LN_CT_LineNumber_countBy:
- case NS_ooxml::LN_CT_LineNumber_restart:
- {
- //line numbering in Writer is a global document setting
- //in Word is a section setting
- //if line numbering is switched on anywhere in the document it's set at the global settings
- LineNumberSettings aSettings = m_pImpl->GetLineNumberSettings();
- switch( nName )
- {
- case NS_ooxml::LN_CT_LineNumber_countBy:
- aSettings.nInterval = nIntValue;
- OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
- if( pSectionContext )
- pSectionContext->SetLnnMod( nIntValue );
- break;
- case NS_ooxml::LN_CT_LineNumber_start:
- OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
- if( pSectionContext )
- pSectionContext->SetLnnMin( nIntValue );
- break;
- case NS_ooxml::LN_CT_LineNumber_distance:
- aSettings.nDistance = ConversionHelper::convertTwipToMM100( nIntValue );
- OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
- if( pSectionContext )
- pSectionContext->SetdxaLnn( nIntValue );
- break;
- case NS_ooxml::LN_CT_LineNumber_restart:
- aSettings.bRestartAtEachPage = nIntValue == static_cast<sal_Int32>(NS_ooxml::LN_Value_ST_LineNumberRestart_newPage);
- OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
- if( pSectionContext )
- pSectionContext->SetLnc( nIntValue );
- break;
- default:;
- }
- m_pImpl->SetLineNumberSettings( aSettings );
- }
- break;
- case NS_ooxml::LN_CT_FtnEdnRef_customMarkFollows:
- m_pImpl->StartCustomFootnote(m_pImpl->GetTopContext());
- break;
- case NS_ooxml::LN_CT_FtnEdnRef_id:
- // footnote or endnote reference id - not needed
- break;
- case NS_ooxml::LN_CT_Color_themeColor:
- m_pImpl->appendGrabBag(m_pImpl->m_aSubInteropGrabBag, "themeColor", TDefTableHandler::getThemeColorTypeString(nIntValue));
- break;
- case NS_ooxml::LN_CT_Color_themeTint:
- m_pImpl->appendGrabBag(m_pImpl->m_aSubInteropGrabBag, "themeTint", OUString::number(nIntValue, 16));
- break;
- case NS_ooxml::LN_CT_Color_themeShade:
- m_pImpl->appendGrabBag(m_pImpl->m_aSubInteropGrabBag, "themeShade", OUString::number(nIntValue, 16));
- break;
- case NS_ooxml::LN_CT_DocGrid_linePitch:
- {
- //see SwWW8ImplReader::SetDocumentGrid
- OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
- if(pSectionContext)
- {
- pSectionContext->SetGridLinePitch( ConversionHelper::convertTwipToMM100( nIntValue ) );
- }
- }
- break;
- case NS_ooxml::LN_CT_DocGrid_charSpace:
- {
- OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
- if(pSectionContext)
- {
- pSectionContext->SetDxtCharSpace( nIntValue );
- }
- }
- break;
- case NS_ooxml::LN_CT_DocGrid_type:
- {
- if (pSectionContext != nullptr)
- {
- switch( nIntValue )
- {
- case NS_ooxml::LN_Value_doc_ST_DocGrid_default:
- pSectionContext->SetGridType(text::TextGridMode::NONE);
- break;
- case NS_ooxml::LN_Value_doc_ST_DocGrid_lines:
- pSectionContext->SetGridType(text::TextGridMode::LINES);
- break;
- case NS_ooxml::LN_Value_doc_ST_DocGrid_linesAndChars:
- pSectionContext->SetGridType(text::TextGridMode::LINES_AND_CHARS);
- pSectionContext->SetGridSnapToChars( false );
- break;
- case NS_ooxml::LN_Value_doc_ST_DocGrid_snapToChars:
- pSectionContext->SetGridType(text::TextGridMode::LINES_AND_CHARS);
- pSectionContext->SetGridSnapToChars( true );
- break;
- default :
- OSL_FAIL("unknown SwTextGrid value");
- }
- }
- }
- break;
- case NS_ooxml::LN_CT_SdtBlock_sdtContent:
- m_pImpl->SetSdt(true);
- break;
- case NS_ooxml::LN_CT_SdtBlock_sdtEndContent:
- m_pImpl->SetSdt(false);
-
- // It's not possible to insert the relevant property to the character context here:
- // the previous, already sent character context may be still active, so the property would be lost.
- if (m_pImpl->m_pSdtHelper->isOutsideAParagraph())
- m_pImpl->setParaSdtEndDeferred(true);
- else
- m_pImpl->setSdtEndDeferred(true);
-
- if (m_pImpl->m_pSdtHelper->isInsideDropDownControl())
- m_pImpl->m_pSdtHelper->createDropDownControl();
- else if (m_pImpl->m_pSdtHelper->validateDateFormat())
- m_pImpl->m_pSdtHelper->createDateContentControl();
- break;
- case NS_ooxml::LN_CT_SdtListItem_displayText:
- // TODO handle when this is != value
- break;
- case NS_ooxml::LN_CT_SdtListItem_value:
- m_pImpl->m_pSdtHelper->getDropDownItems().push_back(sStringValue);
- break;
- case NS_ooxml::LN_CT_SdtDate_fullDate:
- m_pImpl->m_pSdtHelper->getDate().append(sStringValue);
- break;
- case NS_ooxml::LN_CT_Background_color:
- if (m_pImpl->GetSettingsTable()->GetDisplayBackgroundShape())
- m_pImpl->m_oBackgroundColor = nIntValue;
- break;
- case NS_ooxml::LN_CT_PageNumber_start:
- if (pSectionContext != nullptr && !m_pImpl->IsAltChunk())
- pSectionContext->SetPageNumber(nIntValue);
- break;
- case NS_ooxml::LN_CT_PageNumber_fmt:
- if (pSectionContext)
- {
- switch (nIntValue)
- {
- case NS_ooxml::LN_Value_ST_NumberFormat_decimal:
- // 1, 2, ...
- pSectionContext->SetPageNumberType(style::NumberingType::ARABIC);
- break;
- case NS_ooxml::LN_Value_ST_NumberFormat_upperLetter:
- // A, B, ...
- pSectionContext->SetPageNumberType(style::NumberingType::CHARS_UPPER_LETTER_N);
- break;
- case NS_ooxml::LN_Value_ST_NumberFormat_lowerLetter:
- // a, b, ...
- pSectionContext->SetPageNumberType(style::NumberingType::CHARS_LOWER_LETTER_N);
- break;
- case NS_ooxml::LN_Value_ST_NumberFormat_upperRoman:
- // I, II, ...
- pSectionContext->SetPageNumberType(style::NumberingType::ROMAN_UPPER);
- break;
- case NS_ooxml::LN_Value_ST_NumberFormat_lowerRoman:
- // i, ii, ...
- pSectionContext->SetPageNumberType(style::NumberingType::ROMAN_LOWER);
- break;
- }
- }
- break;
- case NS_ooxml::LN_CT_FtnEdn_type:
- // This is the "separator" footnote, ignore its linebreaks/text.
- if (static_cast<sal_uInt32>(nIntValue) == NS_ooxml::LN_Value_doc_ST_FtnEdn_separator)
- m_pImpl->SetSkipFootnoteState( SkipFootnoteSeparator::ON );
- else
- m_pImpl->SetSkipFootnoteState( SkipFootnoteSeparator::OFF );
- break;
- case NS_ooxml::LN_CT_FtnEdn_id:
- {
- SkipFootnoteSeparator eSkip = m_pImpl->GetSkipFootnoteState();
- if ( eSkip == SkipFootnoteSeparator::ON )
- m_pImpl->SetSkipFootnoteState( SkipFootnoteSeparator::SKIPPING );
- else if ( eSkip == SkipFootnoteSeparator::SKIPPING )
- m_pImpl->SetSkipFootnoteState( SkipFootnoteSeparator::OFF );
- }
- break;
- case NS_ooxml::LN_CT_DataBinding_prefixMappings:
- m_pImpl->appendGrabBag(m_pImpl->m_aInteropGrabBag, "ooxml:CT_DataBinding_prefixMappings", sStringValue);
- break;
- case NS_ooxml::LN_CT_DataBinding_xpath:
- m_pImpl->appendGrabBag(m_pImpl->m_aInteropGrabBag, "ooxml:CT_DataBinding_xpath", sStringValue);
- break;
- case NS_ooxml::LN_CT_DataBinding_storeItemID:
- m_pImpl->appendGrabBag(m_pImpl->m_aInteropGrabBag, "ooxml:CT_DataBinding_storeItemID", sStringValue);
- break;
- case NS_ooxml::LN_CT_PTab_leader:
- case NS_ooxml::LN_CT_PTab_relativeTo:
- case NS_ooxml::LN_CT_PTab_alignment:
- break;
- case NS_ooxml::LN_CT_Cnf_lastRowLastColumn:
- m_pImpl->appendGrabBag(m_pImpl->m_aInteropGrabBag, "lastRowLastColumn", OUString::number(nIntValue));
- break;
- case NS_ooxml::LN_CT_Cnf_lastRowFirstColumn:
- m_pImpl->appendGrabBag(m_pImpl->m_aInteropGrabBag, "lastRowFirstColumn", OUString::number(nIntValue));
- break;
- case NS_ooxml::LN_CT_Cnf_firstRowLastColumn:
- m_pImpl->appendGrabBag(m_pImpl->m_aInteropGrabBag, "firstRowLastColumn", OUString::number(nIntValue));
- break;
- case NS_ooxml::LN_CT_Cnf_oddHBand:
- m_pImpl->appendGrabBag(m_pImpl->m_aInteropGrabBag, "oddHBand", OUString::number(nIntValue));
- break;
- case NS_ooxml::LN_CT_Cnf_firstRowFirstColumn:
- m_pImpl->appendGrabBag(m_pImpl->m_aInteropGrabBag, "firstRowFirstColumn", OUString::number(nIntValue));
- break;
- case NS_ooxml::LN_CT_Cnf_evenVBand:
- m_pImpl->appendGrabBag(m_pImpl->m_aInteropGrabBag, "evenVBand", OUString::number(nIntValue));
- break;
- case NS_ooxml::LN_CT_Cnf_evenHBand:
- m_pImpl->appendGrabBag(m_pImpl->m_aInteropGrabBag, "evenHBand", OUString::number(nIntValue));
- break;
- case NS_ooxml::LN_CT_Cnf_lastColumn:
- m_pImpl->appendGrabBag(m_pImpl->m_aInteropGrabBag, "lastColumn", OUString::number(nIntValue));
- break;
- case NS_ooxml::LN_CT_Cnf_firstColumn:
- m_pImpl->appendGrabBag(m_pImpl->m_aInteropGrabBag, "firstColumn", OUString::number(nIntValue));
- break;
- case NS_ooxml::LN_CT_Cnf_oddVBand:
- m_pImpl->appendGrabBag(m_pImpl->m_aInteropGrabBag, "oddVBand", OUString::number(nIntValue));
- break;
- case NS_ooxml::LN_CT_Cnf_lastRow:
- m_pImpl->appendGrabBag(m_pImpl->m_aInteropGrabBag, "lastRow", OUString::number(nIntValue));
- break;
- case NS_ooxml::LN_CT_Cnf_firstRow:
- m_pImpl->appendGrabBag(m_pImpl->m_aInteropGrabBag, "firstRow", OUString::number(nIntValue));
- break;
- case NS_ooxml::LN_CT_Cnf_val:
- m_pImpl->appendGrabBag(m_pImpl->m_aInteropGrabBag, "val", sStringValue);
- break;
- case NS_ooxml::LN_CT_DocPartName_val:
- {
- m_sGlossaryEntryName = sStringValue;
- break;
- }
- case NS_ooxml::LN_CT_DocPartGallery_val:
- {
- const OUString& sGlossaryEntryGallery = sStringValue;
- if(m_pImpl->GetTopContext())
- {
- OUString sName = sGlossaryEntryGallery + ":" + m_sGlossaryEntryName;
- // Add glossary entry name as a first paragraph in section
- m_pImpl->appendTextPortion(sName, m_pImpl->GetTopContext());
- }
- break;
- }
- case NS_ooxml::LN_CT_PermStart_ed:
- {
- m_pImpl->setPermissionRangeEd(sStringValue);
- break;
- }
- case NS_ooxml::LN_CT_PermStart_edGrp:
- {
- m_pImpl->setPermissionRangeEdGrp(sStringValue);
- break;
- }
- case NS_ooxml::LN_CT_PermStart_id:
- {
- m_pImpl->startOrEndPermissionRange(nIntValue);
- break;
- }
- case NS_ooxml::LN_CT_PermEnd_id:
- {
- m_pImpl->startOrEndPermissionRange(nIntValue);
- break;
- }
- case NS_ooxml::LN_CT_NumFmt_val:
- {
- try
- {
- uno::Reference<beans::XPropertySet> xFtnEdnSettings;
- if (m_pImpl->IsInFootnoteProperties())
- {
- uno::Reference<text::XFootnotesSupplier> xFootnotesSupplier(
- m_pImpl->GetTextDocument(), uno::UNO_QUERY);
- if (xFootnotesSupplier.is())
- xFtnEdnSettings = xFootnotesSupplier->getFootnoteSettings();
- }
- else
- {
- uno::Reference<text::XEndnotesSupplier> xEndnotesSupplier(
- m_pImpl->GetTextDocument(), uno::UNO_QUERY);
- if (xEndnotesSupplier.is())
- xFtnEdnSettings = xEndnotesSupplier->getEndnoteSettings();
- }
- if (xFtnEdnSettings.is())
- {
- sal_Int16 nNumType = ConversionHelper::ConvertNumberingType(nIntValue);
- xFtnEdnSettings->setPropertyValue(getPropertyName(PROP_NUMBERING_TYPE),
- uno::makeAny(nNumType));
- }
- }
- catch (const uno::Exception&)
- {
- }
- }
- break;
- case NS_ooxml::LN_CT_AltChunk:
- {
- m_pImpl->HandleAltChunk(sStringValue);
- }
- break;
- default:
- SAL_WARN("writerfilter", "DomainMapper::lcl_attribute: unhandled token: " << nName);
- }
-}
-
-void DomainMapper::lcl_sprm(Sprm & rSprm)
-{
- if (!m_pImpl->hasTableManager() || !m_pImpl->getTableManager().sprm(rSprm))
- sprmWithProps(rSprm, m_pImpl->GetTopContext());
-}
-
-// In rtl-paragraphs the meaning of left/right are to be exchanged
-static bool ExchangeLeftRight(const PropertyMapPtr& rContext, DomainMapper_Impl& rImpl)
-{
- bool bExchangeLeftRight = false;
- sal_Int32 aAdjust;
- uno::Any aPropPara = rImpl.GetAnyProperty(PROP_WRITING_MODE, rContext);
- if( (aPropPara >>= aAdjust) && aAdjust == text::WritingMode2::RL_TB )
- bExchangeLeftRight = true;
- return bExchangeLeftRight;
-}
-
-void DomainMapper::sprmWithProps( Sprm& rSprm, const PropertyMapPtr& rContext )
-{
- // These SPRM's are not specific to any section, so it's expected that there is no context yet.
- switch (rSprm.getId())
- {
- case NS_ooxml::LN_background_background:
- return;
- break;
- default:
- break;
- }
-
- OSL_ENSURE(rContext, "PropertyMap has to be valid!");
- if(!rContext)
- return ;
-
- sal_uInt32 nSprmId = rSprm.getId();
- //needed for page properties
- SectionPropertyMap * pSectionContext = m_pImpl->GetSectionContext();
- Value::Pointer_t pValue = rSprm.getValue();
- sal_Int32 nIntValue = pValue->getInt();
- const OUString sStringValue = pValue->getString();
-
- switch(nSprmId)
- {
- case NS_ooxml::LN_CT_PPrBase_jc:
- {
- bool bExchangeLeftRight = !IsRTFImport() && ExchangeLeftRight(rContext, *m_pImpl);
- handleParaJustification(nIntValue, rContext, bExchangeLeftRight);
- break;
- }
- case NS_ooxml::LN_CT_PPrBase_keepLines:
- rContext->Insert(PROP_PARA_SPLIT, uno::makeAny(nIntValue == 0));
- break;
- case NS_ooxml::LN_CT_PPrBase_keepNext:
- rContext->Insert(PROP_PARA_KEEP_TOGETHER, uno::makeAny( nIntValue != 0 ) );
- break;
- case NS_ooxml::LN_CT_PPrBase_pageBreakBefore:
- rContext->Insert(PROP_BREAK_TYPE, uno::makeAny(nIntValue ? style::BreakType_PAGE_BEFORE : style::BreakType_NONE), /*bOverwrite=*/bool(nIntValue));
- break;
- case NS_ooxml::LN_CT_NumPr_ilvl:
- if (nIntValue < 0 || 10 <= nIntValue) // Writer can't do everything
- {
- SAL_INFO("writerfilter",
- "unsupported numbering level " << nIntValue);
- break;
- }
- if( IsStyleSheetImport() )
- {
- //style sheets cannot have a numbering rule attached
- StyleSheetPropertyMap* pStyleSheetPropertyMap = dynamic_cast< StyleSheetPropertyMap* >( rContext.get() );
- if (pStyleSheetPropertyMap)
- pStyleSheetPropertyMap->SetListLevel( static_cast<sal_Int16>(nIntValue) );
- }
- else
- rContext->Insert( PROP_NUMBERING_LEVEL, uno::makeAny( static_cast<sal_Int16>(nIntValue) ));
- break;
- case NS_ooxml::LN_CT_NumPr_numId:
- {
- //convert the ListTable entry to a NumberingRules property and apply it
- ListsManager::Pointer pListTable = m_pImpl->GetListTable();
- ListDef::Pointer pList = pListTable->GetList( nIntValue );
- if( IsStyleSheetImport() )
- {
- //style sheets cannot have a numbering rule attached
- StyleSheetPropertyMap* pStyleSheetPropertyMap = dynamic_cast< StyleSheetPropertyMap* >( rContext.get() );
- if (pStyleSheetPropertyMap)
- pStyleSheetPropertyMap->SetListId( nIntValue );
- }
- if( pList )
- {
- if( !IsStyleSheetImport() )
- {
- uno::Any aRules = uno::makeAny( pList->GetNumberingRules( ) );
- rContext->Insert( PROP_NUMBERING_RULES, aRules );
- PropertyMapPtr pContext = m_pImpl->GetTopContextOfType(CONTEXT_PARAGRAPH);
- if (pContext)
- {
- assert(dynamic_cast<ParagraphPropertyMap*>(pContext.get()));
- static_cast<ParagraphPropertyMap*>(pContext.get())->SetListId(pList->GetId());
- }
-
- // Indentation can came from:
- // 1) Paragraph style's numbering's indentation: the current non-style numId has priority over it.
- // 2) Numbering's indentation: Writer handles that natively, so it should not be set on rContext.
- // 3) Paragraph style's indentation: ditto.
- // 4) Direct paragraph formatting: that will came later.
- // So no situation where keeping indentation at this point would make sense -> erase.
- rContext->Erase(PROP_PARA_FIRST_LINE_INDENT);
- rContext->Erase(PROP_PARA_LEFT_MARGIN);
- rContext->Erase(PROP_PARA_RIGHT_MARGIN);
- }
- }
- else
- {
- if( !IsStyleSheetImport() )
- {
- // eg. disabled numbering using non-existent numId "0"
- rContext->Insert( PROP_NUMBERING_STYLE_NAME, uno::makeAny( OUString() ) );
- // disable inheritance of indentation of parent styles
- rContext->Insert( PROP_PARA_LEFT_MARGIN, uno::makeAny( sal_Int32(0) ), /*bOverwrite=*/false);
- rContext->Insert( PROP_PARA_FIRST_LINE_INDENT,
- uno::makeAny( sal_Int32(0) ), /*bOverwrite=*/false);
- }
- }
- }
- break;
- case NS_ooxml::LN_CT_PPrBase_suppressLineNumbers:
- rContext->Insert(PROP_PARA_LINE_NUMBER_COUNT, uno::makeAny( nIntValue == 0 ) );
- break;
- case NS_ooxml::LN_inTbl:
- break;
- case NS_ooxml::LN_tblDepth:
- //not handled via sprm but via text( 0x07 )
- break;
- case NS_ooxml::LN_CT_FramePr_w:
- break;
- case NS_ooxml::LN_CT_FramePr_wrap:
- break;
-
- case NS_ooxml::LN_CT_PrBase_pBdr: //paragraph border
- resolveSprmProps(*this, rSprm);
- break;
- case NS_ooxml::LN_CT_PBdr_top:
- case NS_ooxml::LN_CT_PBdr_left:
- case NS_ooxml::LN_CT_PBdr_bottom:
- case NS_ooxml::LN_CT_PBdr_right:
- case NS_ooxml::LN_CT_PBdr_between:
- {
- writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
- if( pProperties )
- {
- auto pBorderHandler = std::make_shared<BorderHandler>( true );
- pProperties->resolve(*pBorderHandler);
- PropertyIds eBorderId = PropertyIds( 0 );
- PropertyIds eBorderDistId = PropertyIds( 0 );
- switch( nSprmId )
- {
- case NS_ooxml::LN_CT_PBdr_top:
- eBorderId = PROP_TOP_BORDER;
- eBorderDistId = PROP_TOP_BORDER_DISTANCE;
- break;
- case NS_ooxml::LN_CT_PBdr_left:
- eBorderId = PROP_LEFT_BORDER;
- eBorderDistId = PROP_LEFT_BORDER_DISTANCE;
- break;
- case NS_ooxml::LN_CT_PBdr_bottom:
- eBorderId = PROP_BOTTOM_BORDER ;
- eBorderDistId = PROP_BOTTOM_BORDER_DISTANCE;
- break;
- case NS_ooxml::LN_CT_PBdr_right:
- eBorderId = PROP_RIGHT_BORDER;
- eBorderDistId = PROP_RIGHT_BORDER_DISTANCE ;
- break;
- case NS_ooxml::LN_CT_PBdr_between:
- //not supported
- break;
- default:;
- }
- if( eBorderId )
- rContext->Insert( eBorderId, uno::makeAny( pBorderHandler->getBorderLine()) );
- if(eBorderDistId)
- rContext->Insert(eBorderDistId, uno::makeAny( pBorderHandler->getLineDistance()));
- if ( nSprmId == NS_ooxml::LN_CT_PBdr_right )
- {
- table::ShadowFormat aFormat;
- // Word only allows shadows on visible borders
- if ( pBorderHandler->getShadow() && pBorderHandler->getBorderLine().LineStyle != table::BorderLineStyle::NONE )
- aFormat = writerfilter::dmapper::PropertyMap::getShadowFromBorder(pBorderHandler->getBorderLine());
- rContext->Insert(PROP_PARA_SHADOW_FORMAT, uno::makeAny(aFormat));
- }
- }
- }
- break;
- case NS_ooxml::LN_CT_PBdr_bar:
- break;
- case NS_ooxml::LN_CT_PPrBase_suppressAutoHyphens:
- rContext->Insert(PROP_PARA_IS_HYPHENATION, uno::makeAny( nIntValue == 0 ));
- break;
- case NS_ooxml::LN_CT_FramePr_h:
- break;
- case NS_ooxml::LN_CT_PrBase_shd:
- {
- //contains fore color, back color and shadow percentage, results in a brush
- writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
- if( pProperties )
- {
- auto pCellColorHandler = std::make_shared<CellColorHandler>();
- pCellColorHandler->setOutputFormat( CellColorHandler::Paragraph );
- bool bEnableTempGrabBag = !pCellColorHandler->isInteropGrabBagEnabled();
- if( bEnableTempGrabBag )
- pCellColorHandler->enableInteropGrabBag( "TempShdPropsGrabBag" );
-
- pProperties->resolve(*pCellColorHandler);
- rContext->InsertProps(pCellColorHandler->getProperties().get());
-
- rContext->Insert(PROP_CHAR_THEME_FILL, pCellColorHandler->getInteropGrabBag().Value, true, PARA_GRAB_BAG);
- if(bEnableTempGrabBag)
- pCellColorHandler->disableInteropGrabBag();
- }
- }
- break;
- case NS_ooxml::LN_CT_FramePr_vSpace:
- break; // sprmPDyaFromText
- case NS_ooxml::LN_CT_FramePr_hSpace:
- break; // sprmPDxaFromText
- case NS_ooxml::LN_CT_FramePr_anchorLock:
- break;
- case NS_ooxml::LN_CT_PPrBase_widowControl:
- {
- uno::Any aVal( uno::makeAny( sal_Int8(nIntValue ? 2 : 0 )));
- rContext->Insert( PROP_PARA_WIDOWS, aVal );
- rContext->Insert( PROP_PARA_ORPHANS, aVal );
- }
- break; // sprmPFWidowControl
- case NS_ooxml::LN_CT_PPrBase_overflowPunct:
- rContext->Insert(PROP_PARA_IS_HANGING_PUNCTUATION, uno::makeAny( nIntValue == 0 ));
- break;
- case NS_ooxml::LN_CT_PPrBase_topLinePunct:
- break;
- case NS_ooxml::LN_CT_PPrBase_autoSpaceDE:
- break;
- case NS_ooxml::LN_CT_PPrBase_autoSpaceDN:
- break;
- case NS_ooxml::LN_CT_PPrBase_textAlignment:
- {
- sal_Int16 nAlignment = 0;
- switch (nIntValue)
- {
- case NS_ooxml::LN_Value_doc_ST_TextAlignment_top:
- nAlignment = 2;
- break;
- case NS_ooxml::LN_Value_doc_ST_TextAlignment_center:
- nAlignment = 3;
- break;
- case NS_ooxml::LN_Value_doc_ST_TextAlignment_baseline:
- nAlignment = 1;
- break;
- case NS_ooxml::LN_Value_doc_ST_TextAlignment_bottom:
- nAlignment = 4;
- break;
- case NS_ooxml::LN_Value_doc_ST_TextAlignment_auto:
- default:
- break;
- }
- rContext->Insert( PROP_PARA_VERT_ALIGNMENT, uno::makeAny( nAlignment) );
- }
- break;
- case NS_ooxml::LN_CT_PPrBase_textDirection:
- {
- switch (nIntValue)
- {
- case NS_ooxml::LN_Value_ST_TextDirection_tbRl:
- {
- m_pImpl->SetFrameDirection(text::WritingMode2::TB_RL);
- break;
- }
- case NS_ooxml::LN_Value_ST_TextDirection_btLr:
- {
- m_pImpl->SetFrameDirection(text::WritingMode2::BT_LR);
- break;
- }
- case NS_ooxml::LN_Value_ST_TextDirection_lrTbV:
- {
- m_pImpl->SetFrameDirection(text::WritingMode2::LR_TB);
- break;
- }
- case NS_ooxml::LN_Value_ST_TextDirection_tbRlV:
- {
- m_pImpl->SetFrameDirection(text::WritingMode2::TB_RL);
- break;
- }
- case NS_ooxml::LN_Value_ST_TextDirection_lrTb:
- case NS_ooxml::LN_Value_ST_TextDirection_tbLrV:
- default:
- SAL_WARN("writerfilter", "DomainMapper::sprmWithProps: unhandled textDirection");
- }
- }
- break;
- case NS_ooxml::LN_CT_PPrBase_outlineLvl:
- {
- sal_Int16 nLvl = static_cast< sal_Int16 >( nIntValue );
- if( IsStyleSheetImport() )
- {
-
- StyleSheetPropertyMap* pStyleSheetPropertyMap = dynamic_cast< StyleSheetPropertyMap* >( rContext.get() );
- if (pStyleSheetPropertyMap)
- pStyleSheetPropertyMap->SetOutlineLevel( nLvl );
- }
- else
- {
- nLvl = nLvl >= WW_OUTLINE_MIN && nLvl < WW_OUTLINE_MAX? nLvl+1 : 0; //0 means no outline level set on
- rContext->Insert(PROP_OUTLINE_LEVEL, uno::makeAny ( nLvl ));
- }
- }
- break;
- case NS_ooxml::LN_CT_PPrBase_bidi:
- {
- // Four situations to handle:
- // 1.) bidi same as previous setting: no adjust change
- // 2.) no previous adjust: set appropriate default for this bidi
- // 3.) previous adjust and bidi different from previous: swap adjusts
- // 4.) previous adjust and no previous bidi: RTL swaps adjust
-
- const sal_Int16 nWritingMode = nIntValue ? text::WritingMode2::RL_TB : text::WritingMode2::LR_TB;
- sal_Int16 nParentBidi = -1;
- m_pImpl->GetPropertyFromParaStyleSheet(PROP_WRITING_MODE) >>= nParentBidi;
- // Paragraph justification reverses its meaning in an RTL context.
- // 1. Only make adjustments if the BiDi changes.
- if ( nParentBidi != nWritingMode && !IsRTFImport() )
- {
- style::ParagraphAdjust eAdjust = style::ParagraphAdjust(-1);
- // 2. no adjust property exists yet
- if ( !(m_pImpl->GetAnyProperty(PROP_PARA_ADJUST, rContext) >>= eAdjust) )
- {
- // RTL defaults to right adjust
- eAdjust = nIntValue ? style::ParagraphAdjust_RIGHT : style::ParagraphAdjust_LEFT;
- rContext->Insert(PROP_PARA_ADJUST, uno::makeAny( eAdjust ), /*bOverwrite=*/false);
- }
- // 3,4. existing adjust: if RTL, then swap. If LTR, but previous was RTL, also swap.
- else if ( nIntValue || nParentBidi == sal_Int16(text::WritingMode2::RL_TB) )
- {
- if ( eAdjust == style::ParagraphAdjust_RIGHT )
- rContext->Insert(PROP_PARA_ADJUST, uno::makeAny( style::ParagraphAdjust_LEFT ));
- else if ( eAdjust == style::ParagraphAdjust_LEFT )
- rContext->Insert(PROP_PARA_ADJUST, uno::makeAny( style::ParagraphAdjust_RIGHT ));
- }
- }
- rContext->Insert(PROP_WRITING_MODE, uno::makeAny( nWritingMode ));
- }
-
- break;
- case NS_ooxml::LN_EG_SectPrContents_bidi:
- if (pSectionContext != nullptr)
- {
- const sal_Int16 writingMode = (nIntValue != 0) ? sal_Int16(text::WritingMode2::RL_TB) : sal_Int16(text::WritingMode2::LR_TB);
- pSectionContext->Insert(PROP_WRITING_MODE, uno::makeAny(writingMode));
- }
- break;
- case NS_ooxml::LN_EG_RPrBase_highlight:
- {
- // MS Word completely ignores character highlighting in character styles.
- if ( IsStyleSheetImport() )
- {
- const StyleSheetEntryPtr pCurrStyle = GetStyleSheetTable()->GetCurrentEntry();
- if ( pCurrStyle && pCurrStyle->nStyleTypeCode == STYLE_TYPE_CHAR )
- break;
- }
-
- // OOXML import uses an ID
- if( IsOOXMLImport() )
- {
- sal_Int32 nColor = 0;
- if( getColorFromId(nIntValue, nColor) )
- rContext->Insert(PROP_CHAR_HIGHLIGHT, uno::makeAny( nColor ));
- }
- // RTF import uses the actual color value
- else if( IsRTFImport() )
- {
- rContext->Insert(PROP_CHAR_HIGHLIGHT, uno::makeAny( nIntValue ));
- }
- }
- break;
- case NS_ooxml::LN_EG_RPrBase_em:
- rContext->Insert(PROP_CHAR_EMPHASIS, uno::makeAny ( getEmphasisValue (nIntValue)));
- break;
- case NS_ooxml::LN_EG_RPrBase_emboss:
- case NS_ooxml::LN_EG_RPrBase_b:
- case NS_ooxml::LN_EG_RPrBase_bCs:
- case NS_ooxml::LN_EG_RPrBase_i:
- case NS_ooxml::LN_EG_RPrBase_iCs:
- case NS_ooxml::LN_EG_RPrBase_strike:
- case NS_ooxml::LN_EG_RPrBase_dstrike:
- case NS_ooxml::LN_EG_RPrBase_outline:
- case NS_ooxml::LN_EG_RPrBase_shadow:
- case NS_ooxml::LN_EG_RPrBase_caps:
- case NS_ooxml::LN_EG_RPrBase_smallCaps:
- case NS_ooxml::LN_EG_RPrBase_vanish:
- case NS_ooxml::LN_EG_RPrBase_webHidden:
- {
- PropertyIds ePropertyId = PROP_CHAR_WEIGHT; //initialized to prevent warning!
- switch( nSprmId )
- {
- case NS_ooxml::LN_EG_RPrBase_b:
- case NS_ooxml::LN_EG_RPrBase_bCs:
- ePropertyId = nSprmId != NS_ooxml::LN_EG_RPrBase_bCs ? PROP_CHAR_WEIGHT : PROP_CHAR_WEIGHT_COMPLEX;
- break;
- case NS_ooxml::LN_EG_RPrBase_i:
- case NS_ooxml::LN_EG_RPrBase_iCs:
- ePropertyId = nSprmId == NS_ooxml::LN_EG_RPrBase_i ? PROP_CHAR_POSTURE : PROP_CHAR_POSTURE_COMPLEX;
- break;
- case NS_ooxml::LN_EG_RPrBase_strike:
- case NS_ooxml::LN_EG_RPrBase_dstrike:
- ePropertyId = PROP_CHAR_STRIKEOUT;
- break;
- case NS_ooxml::LN_EG_RPrBase_outline:
- ePropertyId = PROP_CHAR_CONTOURED;
- break;
- case NS_ooxml::LN_EG_RPrBase_shadow:
- ePropertyId = PROP_CHAR_SHADOWED;
- break;
- case NS_ooxml::LN_EG_RPrBase_caps:
- case NS_ooxml::LN_EG_RPrBase_smallCaps:
- ePropertyId = PROP_CHAR_CASE_MAP;
- break;
- case NS_ooxml::LN_EG_RPrBase_vanish:
- case NS_ooxml::LN_EG_RPrBase_webHidden:
- ePropertyId = PROP_CHAR_HIDDEN;
- break;
- case NS_ooxml::LN_EG_RPrBase_emboss:
- ePropertyId = PROP_CHAR_RELIEF;
- break;
- }
- //expected: 0,1,128,129
- if(nIntValue != 128) //inherited from paragraph - ignore
- {
- if( nIntValue == 129) //inverted style sheet value
- {
- //get value from style sheet and invert it
- sal_Int16 nStyleValue = 0;
- uno::Any aStyleVal = m_pImpl->GetPropertyFromParaStyleSheet(ePropertyId);
- if( !aStyleVal.hasValue() )
- {
- nIntValue = NS_ooxml::LN_EG_RPrBase_smallCaps == nSprmId ?
- 4 : 1;
- }
- else if(aStyleVal.getValueTypeClass() == uno::TypeClass_FLOAT )
- {
- double fDoubleValue = 0;
- //only in case of awt::FontWeight
- aStyleVal >>= fDoubleValue;
- nIntValue = fDoubleValue > 100. ? 0 : 1;
- }
- else if((aStyleVal >>= nStyleValue) ||
- (nStyleValue = static_cast<sal_Int16>(comphelper::getEnumAsINT32(aStyleVal))) >= 0 )
- {
- nIntValue = NS_ooxml::LN_EG_RPrBase_smallCaps == nSprmId ?
- nStyleValue ? 0 : 4 :
- nStyleValue ? 0 : 1;
- }
- else
- {
- OSL_FAIL( "what type was it");
- }
- }
-
- switch( nSprmId )
- {
- case NS_ooxml::LN_EG_RPrBase_b:
- case NS_ooxml::LN_EG_RPrBase_bCs:
- {
- uno::Any aBold( uno::makeAny( nIntValue ? awt::FontWeight::BOLD : awt::FontWeight::NORMAL ) );
-
- rContext->Insert(ePropertyId, aBold );
- if( nSprmId != NS_ooxml::LN_EG_RPrBase_bCs )
- rContext->Insert(PROP_CHAR_WEIGHT_ASIAN, aBold );
-
- uno::Reference<beans::XPropertySet> xCharStyle(m_pImpl->GetCurrentNumberingCharStyle());
- if (xCharStyle.is())
- xCharStyle->setPropertyValue(getPropertyName(PROP_CHAR_WEIGHT), aBold);
- if (nSprmId == NS_ooxml::LN_EG_RPrBase_b)
- m_pImpl->appendGrabBag(m_pImpl->m_aInteropGrabBag, "b", OUString::number(nIntValue));
- else if (nSprmId == NS_ooxml::LN_EG_RPrBase_bCs)
- m_pImpl->appendGrabBag(m_pImpl->m_aInteropGrabBag, "bCs", OUString::number(nIntValue));
- }
- break;
- case NS_ooxml::LN_EG_RPrBase_i:
- case NS_ooxml::LN_EG_RPrBase_iCs:
- {
- uno::Any aPosture( uno::makeAny( nIntValue ? awt::FontSlant_ITALIC : awt::FontSlant_NONE ) );
- rContext->Insert( ePropertyId, aPosture );
- if (nSprmId != NS_ooxml::LN_EG_RPrBase_iCs)
- rContext->Insert(PROP_CHAR_POSTURE_ASIAN, aPosture );
- if (nSprmId == NS_ooxml::LN_EG_RPrBase_i)
- m_pImpl->appendGrabBag(m_pImpl->m_aInteropGrabBag, "i", OUString::number(nIntValue));
- }
- break;
- case NS_ooxml::LN_EG_RPrBase_strike:
- rContext->Insert(ePropertyId,
- uno::makeAny( nIntValue ? awt::FontStrikeout::SINGLE : awt::FontStrikeout::NONE ) );
- break;
- case NS_ooxml::LN_EG_RPrBase_dstrike:
- rContext->Insert(ePropertyId,
- uno::makeAny( nIntValue ? awt::FontStrikeout::DOUBLE : awt::FontStrikeout::NONE ) );
- break;
- case NS_ooxml::LN_EG_RPrBase_outline:
- case NS_ooxml::LN_EG_RPrBase_shadow:
- case NS_ooxml::LN_EG_RPrBase_vanish:
- case NS_ooxml::LN_EG_RPrBase_webHidden:
- rContext->Insert(ePropertyId, uno::makeAny( nIntValue != 0 ));
- break;
- case NS_ooxml::LN_EG_RPrBase_smallCaps:
- // If smallcaps would be just disabled and another casemap is already inserted, don't do anything.
- if (nIntValue || !rContext->isSet(ePropertyId) )
- rContext->Insert(ePropertyId, uno::makeAny( nIntValue ? style::CaseMap::SMALLCAPS : style::CaseMap::NONE));
- m_pImpl->appendGrabBag(m_pImpl->m_aInteropGrabBag, "smallCaps", OUString::number(nIntValue));
- break;
- case NS_ooxml::LN_EG_RPrBase_caps:
- rContext->Insert(ePropertyId,
- uno::makeAny( nIntValue ? style::CaseMap::UPPERCASE : style::CaseMap::NONE));
- m_pImpl->appendGrabBag(m_pImpl->m_aInteropGrabBag, "caps", OUString::number(nIntValue));
- break;
- case NS_ooxml::LN_EG_RPrBase_emboss:
- rContext->Insert(ePropertyId,
- uno::makeAny( nIntValue ? awt::FontRelief::EMBOSSED : awt::FontRelief::NONE ));
- break;
-
- }
- }
- }
- break;
- case NS_ooxml::LN_EG_RPrBase_sz:
- case NS_ooxml::LN_EG_RPrBase_szCs:
- {
- //multiples of half points (12pt == 24)
- double fVal = double(nIntValue) / 2.;
- uno::Any aVal = uno::makeAny( fVal );
- if( NS_ooxml::LN_EG_RPrBase_szCs == nSprmId )
- {
- rContext->Insert( PROP_CHAR_HEIGHT_COMPLEX, aVal );
- }
- else
- {
- const RubyInfo &aInfo = m_pImpl->GetRubyInfo();
- if (aInfo.nSprmId == NS_ooxml::LN_CT_Ruby_rt && aInfo.nHps > 0 )
- {
- fVal = double(aInfo.nHps) / 2.;
- aVal <<= fVal;
- }
- else if (aInfo.nSprmId == NS_ooxml::LN_CT_Ruby_rubyBase && aInfo.nHpsBaseText > 0 )
- {
- fVal = double(aInfo.nHpsBaseText) / 2.;
- aVal <<= fVal;
- }
- //Asian get the same value as Western
- rContext->Insert( PROP_CHAR_HEIGHT, aVal );
- rContext->Insert( PROP_CHAR_HEIGHT_ASIAN, aVal );
-
- uno::Reference<beans::XPropertySet> xCharStyle(m_pImpl->GetCurrentNumberingCharStyle());
- if (xCharStyle.is())
- xCharStyle->setPropertyValue(getPropertyName(PROP_CHAR_HEIGHT), aVal);
- }
- m_pImpl->appendGrabBag(m_pImpl->m_aInteropGrabBag, (nSprmId == NS_ooxml::LN_EG_RPrBase_sz ? OUString("sz") : OUString("szCs")), OUString::number(nIntValue));
- }
- break;
- case NS_ooxml::LN_EG_RPrBase_position:
- // The spec says 0 is the same as the lack of the value, so don't parse that.
- if ( nIntValue )
- {
- if ( !IsStyleSheetImport() )
- m_pImpl->deferCharacterProperty( nSprmId, uno::makeAny( nIntValue ));
- else
- {
- // DON'T FIXME: Truly calculating this for Character Styles will be tricky,
- // because it depends on the final fontsize - regardless of
- // where it is set. So at the style level,
- // the escapement value would need to be grabbagged.
- // At appendText time the final fontsize needs to be determined, and then
- // the escapement can be calculated from the grabbag'd half-point value
- // and directly applied. Yuck.
- // It seems best to just treat charstyle escapement like
- // pre-commit e70df84352d3670508a4666c97df44f82c1ce934
- // which just assigned default values and ignored the actual/given escapement.
- sal_Int16 nEscapement = nIntValue > 0 ? DFLT_ESC_AUTO_SUPER : DFLT_ESC_AUTO_SUB;
- sal_Int8 nProp = DFLT_ESC_PROP;
- rContext->Insert(PROP_CHAR_ESCAPEMENT, uno::makeAny( nEscapement ) );
- rContext->Insert(PROP_CHAR_ESCAPEMENT_HEIGHT, uno::makeAny( nProp ) );
- }
- }
- break;
- case NS_ooxml::LN_EG_RPrBase_spacing:
- {
- //Kerning half point values
- //TODO: there are two kerning values -
- // in ww8par6.cxx NS_sprm::LN_CHpsKern is used as boolean AutoKerning
- sal_Int16 nResult = static_cast<sal_Int16>(ConversionHelper::convertTwipToMM100(nIntValue));
- if (m_pImpl->IsInComments())
- {
- nResult = static_cast<sal_Int16>(nIntValue);
- }
- rContext->Insert(PROP_CHAR_CHAR_KERNING, uno::makeAny(nResult));
- m_pImpl->appendGrabBag(m_pImpl->m_aInteropGrabBag, "spacing", OUString::number(nIntValue));
- }
- break;
- case NS_ooxml::LN_EG_RPrBase_kern: // auto kerning is bound to a minimum font size in Word - but not in Writer :-(
- rContext->Insert(PROP_CHAR_AUTO_KERNING, uno::makeAny( nIntValue != 0 ) );
- break;
- case NS_ooxml::LN_EG_RPrBase_w:
- // ST_TextScale must fall between 1% and 600% according to spec, otherwise resets to 100% according to experience
- if ((1 <= nIntValue) && (nIntValue <= 600))
- {
- rContext->Insert(PROP_CHAR_SCALE_WIDTH,
- uno::makeAny( sal_Int16(nIntValue) ));
- }
- else
- {
- rContext->Insert(PROP_CHAR_SCALE_WIDTH,
- uno::makeAny( sal_Int16(100) ));
- }
- break;
- case NS_ooxml::LN_EG_RPrBase_imprint:
- // FontRelief: NONE, EMBOSSED, ENGRAVED
- rContext->Insert(PROP_CHAR_RELIEF,
- uno::makeAny( nIntValue ? awt::FontRelief::ENGRAVED : awt::FontRelief::NONE ));
- break;
- case NS_ooxml::LN_EG_RPrBase_effect:
- // The file-format has many character animations. We have only
- // one, so we use it always. Suboptimal solution though.
- if (nIntValue != NS_ooxml::LN_Value_ST_TextEffect_none)
- rContext->Insert(PROP_CHAR_FLASH, uno::makeAny( true ));
- else
- rContext->Insert(PROP_CHAR_FLASH, uno::makeAny( false ));
- break;
- case NS_ooxml::LN_EG_RPrBase_rtl:
- break;
- case NS_ooxml::LN_EG_RPrBase_shd:
- {
- //contains fore color, back color and shadow percentage, results in a brush
- writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
- if( pProperties )
- {
- auto pCellColorHandler = std::make_shared<CellColorHandler>();
- pCellColorHandler->setOutputFormat( CellColorHandler::Character );
- pProperties->resolve(*pCellColorHandler);
- rContext->InsertProps(pCellColorHandler->getProperties().get());
- m_pImpl->GetTopContext()->Insert(PROP_CHAR_SHADING_MARKER, uno::makeAny(true), true, CHAR_GRAB_BAG );
- }
- break;
- }
- case NS_ooxml::LN_EG_SectPrContents_type:
- /* break type
- 0 - No break
- 1 - New Column
- 2 - New page
- 3 - Even page
- 4 - odd page
- */
- OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
- if(pSectionContext)
- {
- //continuous break only allowed if it is not the only section break
- SectionPropertyMap* pLastContext = m_pImpl->GetLastSectionContext();
- if ( nIntValue != static_cast<sal_Int32>(NS_ooxml::LN_Value_ST_SectionMark_continuous) || pLastContext || m_pImpl->GetParaSectpr() )
- pSectionContext->SetBreakType( nIntValue );
- }
- break;
- case NS_ooxml::LN_EG_SectPrContents_titlePg:
- {
- OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
- if(pSectionContext)
- pSectionContext->SetTitlePage( nIntValue > 0 );//section has title page
- }
- break;
- case 165:
- {
- //page height, rounded to default values, default: 0x3dc0 twip
- sal_Int32 nHeight = ConversionHelper::convertTwipToMM100( nIntValue );
- rContext->Insert( PROP_HEIGHT, uno::makeAny( PaperInfo::sloppyFitPageDimension( nHeight ) ) );
- }
- break;
- case NS_ooxml::LN_EG_SectPrContents_textDirection:
- {
- /* 0 HoriLR 1 Vert TR 2 Vert TR 3 Vert TT 4 HoriLT
- only 0 and 1 can be imported correctly
- */
- text::WritingMode nDirection = text::WritingMode_LR_TB;
- switch( nIntValue )
- {
- case NS_ooxml::LN_Value_ST_TextDirection_lrTb:
- case NS_ooxml::LN_Value_ST_TextDirection_lrTbV:
- nDirection = text::WritingMode_LR_TB;
- break;
- case NS_ooxml::LN_Value_ST_TextDirection_tbRl:
- case NS_ooxml::LN_Value_ST_TextDirection_btLr:
- nDirection = text::WritingMode_TB_RL;
- break;
- default:;
- }
-
- PropertyMap * pTargetContext = rContext.get();
-
- if (pSectionContext)
- {
- pTargetContext = pSectionContext;
- }
-
- pTargetContext->Insert(PROP_WRITING_MODE, uno::makeAny( sal_Int16(nDirection) ) );
- }
- break; // sprmSTextFlow
- // the following are not part of the official documentation
- case NS_ooxml::LN_CT_Tabs_tab:
- resolveSprmProps(*this, rSprm);
- m_pImpl->IncorporateTabStop(m_pImpl->m_aCurrentTabStop);
- m_pImpl->m_aCurrentTabStop = DeletableTabStop();
- break;
- case NS_ooxml::LN_CT_PPrBase_tabs:
- {
- // Initialize tab stop vector from style sheet
- // fdo#81033: for RTF, a tab stop is inherited from the style if it
- // is also applied to the paragraph directly, and cleared if it is
- // not applied to the paragraph directly => don't InitTabStopFromStyle
- if ( !IsRTFImport() )
- {
- uno::Any aValue = m_pImpl->GetPropertyFromParaStyleSheet(PROP_PARA_TAB_STOPS);
- uno::Sequence< style::TabStop > aStyleTabStops;
- if(aValue >>= aStyleTabStops)
- {
- m_pImpl->InitTabStopFromStyle( aStyleTabStops );
- }
- }
- resolveSprmProps(*this, rSprm);
- rContext->Insert(PROP_PARA_TAB_STOPS, uno::makeAny( m_pImpl->GetCurrentTabStopAndClear()));
- }
- break;
-
- case NS_ooxml::LN_CT_DocDefaults_pPrDefault:
- case NS_ooxml::LN_CT_DocDefaults_rPrDefault:
- GetStyleSheetTable()->sprm( rSprm );
- break;
- case NS_ooxml::LN_EG_RPrBase_bdr:
- {
- writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
- if( pProperties )
- {
- auto pBorderHandler = std::make_shared<BorderHandler>( true );
- pProperties->resolve(*pBorderHandler);
-
- rContext->Insert( PROP_CHAR_TOP_BORDER, uno::makeAny( pBorderHandler->getBorderLine()));
- rContext->Insert( PROP_CHAR_BOTTOM_BORDER, uno::makeAny( pBorderHandler->getBorderLine()));
- rContext->Insert( PROP_CHAR_LEFT_BORDER, uno::makeAny( pBorderHandler->getBorderLine()));
- rContext->Insert( PROP_CHAR_RIGHT_BORDER, uno::makeAny( pBorderHandler->getBorderLine()));
-
- rContext->Insert( PROP_CHAR_TOP_BORDER_DISTANCE, uno::makeAny( pBorderHandler->getLineDistance()));
- rContext->Insert( PROP_CHAR_BOTTOM_BORDER_DISTANCE, uno::makeAny( pBorderHandler->getLineDistance()));
- rContext->Insert( PROP_CHAR_LEFT_BORDER_DISTANCE, uno::makeAny( pBorderHandler->getLineDistance()));
- rContext->Insert( PROP_CHAR_RIGHT_BORDER_DISTANCE, uno::makeAny( pBorderHandler->getLineDistance()));
-
- table::ShadowFormat aFormat;
- // Word only allows shadows on visible borders
- if ( pBorderHandler->getShadow() && pBorderHandler->getBorderLine().LineStyle != table::BorderLineStyle::NONE )
- aFormat = writerfilter::dmapper::PropertyMap::getShadowFromBorder(pBorderHandler->getBorderLine());
- rContext->Insert(PROP_CHAR_SHADOW_FORMAT, uno::makeAny(aFormat));
- }
- }
- break;
- case NS_ooxml::LN_CT_PPr_sectPr:
- case NS_ooxml::LN_EG_RPrBase_color:
- case NS_ooxml::LN_EG_RPrBase_rFonts:
- case NS_ooxml::LN_EG_RPrBase_eastAsianLayout:
- case NS_ooxml::LN_EG_RPrBase_u:
- case NS_ooxml::LN_EG_RPrBase_lang:
- case NS_ooxml::LN_CT_PPrBase_spacing:
- case NS_ooxml::LN_CT_PPrBase_ind:
- case NS_ooxml::LN_CT_RPrDefault_rPr:
- case NS_ooxml::LN_CT_PPrDefault_pPr:
- case NS_ooxml::LN_CT_Style_pPr:
- case NS_ooxml::LN_CT_Style_rPr:
- case NS_ooxml::LN_CT_PPr_rPr:
- case NS_ooxml::LN_CT_PPrBase_numPr:
- {
- bool bTempGrabBag = !m_pImpl->isInteropGrabBagEnabled();
- if (nSprmId == NS_ooxml::LN_CT_PPr_sectPr)
- m_pImpl->SetParaSectpr(true);
- else if (nSprmId == NS_ooxml::LN_EG_RPrBase_color && bTempGrabBag)
- // if DomainMapper grab bag is not enabled, enable it temporarily
- m_pImpl->enableInteropGrabBag("TempColorPropsGrabBag");
- resolveSprmProps(*this, rSprm);
- if (nSprmId == NS_ooxml::LN_CT_PPrBase_spacing)
- m_pImpl->appendGrabBag(m_pImpl->m_aInteropGrabBag, "spacing", m_pImpl->m_aSubInteropGrabBag);
- else if (nSprmId == NS_ooxml::LN_EG_RPrBase_rFonts)
- m_pImpl->appendGrabBag(m_pImpl->m_aInteropGrabBag, "rFonts", m_pImpl->m_aSubInteropGrabBag);
- else if (nSprmId == NS_ooxml::LN_EG_RPrBase_lang)
- m_pImpl->appendGrabBag(m_pImpl->m_aInteropGrabBag, "lang", m_pImpl->m_aSubInteropGrabBag);
- else if (nSprmId == NS_ooxml::LN_EG_RPrBase_color)
- {
- for (const auto& rItem : m_pImpl->m_aSubInteropGrabBag)
- {
- if (rItem.Name == "val")
- m_pImpl->GetTopContext()->Insert(PROP_CHAR_THEME_ORIGINAL_COLOR, rItem.Value, true, CHAR_GRAB_BAG);
- else if (rItem.Name == "themeColor")
- m_pImpl->GetTopContext()->Insert(PROP_CHAR_THEME_COLOR, rItem.Value, true, CHAR_GRAB_BAG);
- else if (rItem.Name == "themeShade")
- m_pImpl->GetTopContext()->Insert(PROP_CHAR_THEME_COLOR_SHADE, rItem.Value, true, CHAR_GRAB_BAG);
- else if (rItem.Name == "themeTint")
- m_pImpl->GetTopContext()->Insert(PROP_CHAR_THEME_COLOR_TINT, rItem.Value, true, CHAR_GRAB_BAG);
- }
- if (bTempGrabBag)
- //disable and clear DomainMapper grab bag if it wasn't enabled before
- m_pImpl->disableInteropGrabBag();
-
- m_pImpl->appendGrabBag(m_pImpl->m_aInteropGrabBag, "color", m_pImpl->m_aSubInteropGrabBag);
- }
- else if (nSprmId == NS_ooxml::LN_CT_PPrBase_ind)
- m_pImpl->appendGrabBag(m_pImpl->m_aInteropGrabBag, "ind", m_pImpl->m_aSubInteropGrabBag);
- }
- break;
- case NS_ooxml::LN_CT_PPrBase_wordWrap:
- m_pImpl->appendGrabBag(m_pImpl->m_aInteropGrabBag, "wordWrap", "");
- break;
- case NS_ooxml::LN_EG_SectPrContents_footnotePr:
- case NS_ooxml::LN_EG_SectPrContents_endnotePr:
- m_pImpl->SetInFootnoteProperties( NS_ooxml::LN_EG_SectPrContents_footnotePr == nSprmId );
- resolveSprmProps(*this, rSprm);
- break;
- case NS_ooxml::LN_EG_SectPrContents_lnNumType:
- {
- resolveSprmProps(*this, rSprm);
- LineNumberSettings aSettings = m_pImpl->GetLineNumberSettings();
- m_pImpl->SetLineNumberSettings( aSettings );
- //apply settings at XLineNumberingProperties
- try
- {
- uno::Reference< text::XLineNumberingProperties > xLineNumberingProperties( m_pImpl->GetTextDocument(), uno::UNO_QUERY_THROW );
- uno::Reference< beans::XPropertySet > xLineNumberingPropSet = xLineNumberingProperties->getLineNumberingProperties();
- if( aSettings.nInterval == 0 )
- xLineNumberingPropSet->setPropertyValue(getPropertyName( PROP_IS_ON ), uno::makeAny(false) );
- else
- {
- xLineNumberingPropSet->setPropertyValue(getPropertyName( PROP_IS_ON ), uno::makeAny(true) );
- if( aSettings.nInterval )
- xLineNumberingPropSet->setPropertyValue(getPropertyName( PROP_INTERVAL ), uno::makeAny(static_cast<sal_Int16>(aSettings.nInterval)) );
- if( aSettings.nDistance != -1 )
- xLineNumberingPropSet->setPropertyValue(getPropertyName( PROP_DISTANCE ), uno::makeAny(aSettings.nDistance) );
- else
- {
- // set Auto value (0.5 cm)
- xLineNumberingPropSet->setPropertyValue(getPropertyName( PROP_DISTANCE ), uno::makeAny(static_cast<sal_Int32>(500)) );
- if( pSectionContext )
- pSectionContext->SetdxaLnn( static_cast<sal_Int32>(283) );
- }
- xLineNumberingPropSet->setPropertyValue(getPropertyName( PROP_RESTART_AT_EACH_PAGE ), uno::makeAny(aSettings.bRestartAtEachPage) );
- }
- }
- catch( const uno::Exception& )
- {
- }
-
- }
- break;
- case NS_ooxml::LN_CT_PPrBase_framePr:
- // Avoid frames if we're inside a structured document tag, would just cause outer tables fail to create.
- if (!m_pImpl->GetSdt())
- {
- PropertyMapPtr pContext = m_pImpl->GetTopContextOfType(CONTEXT_PARAGRAPH);
- if( pContext )
- {
- // If there is a deferred page break applied to this framed paragraph,
- // create a dummy paragraph without extra properties,
- // so that the anchored frame will be on the correct page (similar to shapes).
- if (pContext->isSet(PROP_BREAK_TYPE))
- {
- pContext->Erase(PROP_BREAK_TYPE);
-
- lcl_startParagraphGroup();
- m_pImpl->GetTopContext()->Insert(PROP_BREAK_TYPE, uno::makeAny(style::BreakType_PAGE_BEFORE));
- lcl_startCharacterGroup();
- sal_uInt8 const sBreak[] = { 0xd };
- lcl_text(sBreak, 1);
- lcl_endCharacterGroup();
- lcl_endParagraphGroup();
- }
-
- ParagraphPropertyMap* pParaContext = dynamic_cast< ParagraphPropertyMap* >( pContext.get() );
- if (pParaContext)
- pParaContext->SetFrameMode();
-
- if (!IsInHeaderFooter())
- m_pImpl->m_bIsActualParagraphFramed = true;
- }
- else
- {
- //TODO: What about style sheet import of frame properties
- }
- m_pImpl->NewFrameDirection();
- resolveSprmProps(*this, rSprm);
- }
- break;
- case NS_ooxml::LN_EG_SectPrContents_pgSz:
- {
- PaperInfo aLetter(PAPER_LETTER);
- CT_PageSz.w = aLetter.getWidth();
- CT_PageSz.h = aLetter.getHeight();
- }
- CT_PageSz.orient = false;
- resolveSprmProps(*this, rSprm);
- OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
- if(pSectionContext)
- {
- if (!m_pImpl->IsAltChunk())
- {
- pSectionContext->Insert(PROP_HEIGHT, uno::makeAny(CT_PageSz.h));
- }
- pSectionContext->Insert( PROP_IS_LANDSCAPE, uno::makeAny( CT_PageSz.orient ));
- if (!m_pImpl->IsAltChunk())
- {
- pSectionContext->Insert(PROP_WIDTH, uno::makeAny(CT_PageSz.w));
- }
- }
- break;
-
- case NS_ooxml::LN_EG_SectPrContents_pgMar:
- m_pImpl->InitPageMargins();
- resolveSprmProps(*this, rSprm);
- OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
- if(pSectionContext)
- {
- const PageMar& rPageMar = m_pImpl->GetPageMargins();
- pSectionContext->SetTopMargin( rPageMar.top );
- pSectionContext->SetRightMargin( rPageMar.right );
- pSectionContext->SetBottomMargin( rPageMar.bottom );
- pSectionContext->SetLeftMargin( rPageMar.left );
- pSectionContext->SetHeaderTop( rPageMar.header );
- pSectionContext->SetHeaderBottom( rPageMar.footer );
- }
- break;
-
- case NS_ooxml::LN_EG_SectPrContents_cols:
- {
- writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
- if( pProperties )
- {
-
- tools::SvRef< SectionColumnHandler > pSectHdl( new SectionColumnHandler );
- pProperties->resolve(*pSectHdl);
- if(pSectionContext && !m_pImpl->isInIndexContext())
- {
- sal_Int16 nColumnCount = pSectHdl->GetNum() == 1 ? 0 : pSectHdl->GetNum();
- if( pSectHdl->IsEqualWidth() )
- {
- pSectionContext->SetEvenlySpaced( true );
- pSectionContext->SetColumnCount( nColumnCount );
- pSectionContext->SetColumnDistance( pSectHdl->GetSpace() );
- pSectionContext->SetSeparatorLine( pSectHdl->IsSeparator() );
- }
- else if( !pSectHdl->GetColumns().empty() )
- {
- pSectionContext->SetEvenlySpaced( false );
- pSectionContext->SetColumnDistance( pSectHdl->GetSpace() );
- nColumnCount = pSectHdl->GetColumns().size();
- pSectionContext->SetColumnCount( nColumnCount == 1 ? 0 : nColumnCount );
- std::vector<Column_>::const_iterator tmpIter = pSectHdl->GetColumns().begin();
- for (; tmpIter != pSectHdl->GetColumns().end(); ++tmpIter)
- {
- pSectionContext->AppendColumnWidth( tmpIter->nWidth );
- if ((tmpIter != pSectHdl->GetColumns().end() - 1) || (tmpIter->nSpace > 0))
- pSectionContext->AppendColumnSpacing( tmpIter->nSpace );
- }
- pSectionContext->SetSeparatorLine( pSectHdl->IsSeparator() );
- }
- else if( nColumnCount )
- {
- pSectionContext->SetColumnCount( nColumnCount );
- pSectionContext->SetColumnDistance( pSectHdl->GetSpace() );
- pSectionContext->SetSeparatorLine( pSectHdl->IsSeparator() );
- }
- }
-
- else if ( pSectionContext )
- {
- FieldContextPtr pContext = m_pImpl->GetTopFieldContext();
- uno::Reference< beans::XPropertySet > xTOC = pContext->GetTOC();
- if( xTOC.is() )
- {
- uno::Reference<text::XTextColumns> xTextColumns;
- xTOC->getPropertyValue(getPropertyName( PROP_TEXT_COLUMNS )) >>= xTextColumns;
- if (xTextColumns.is())
- {
- uno::Reference< beans::XPropertySet > xColumnPropSet( xTextColumns, uno::UNO_QUERY_THROW );
- xColumnPropSet->setPropertyValue( getPropertyName( PROP_AUTOMATIC_DISTANCE ), uno::makeAny( pSectHdl->GetSpace() ));
- xTOC->setPropertyValue( getPropertyName( PROP_TEXT_COLUMNS ), uno::makeAny( xTextColumns ) );
- }
- }
- }
- }
- }
- break;
- case NS_ooxml::LN_EG_SectPrContents_docGrid:
- resolveSprmProps(*this, rSprm);
- break;
- case NS_ooxml::LN_EG_SectPrContents_pgBorders:
- {
- writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
- if( pProperties && pSectionContext )
- {
- tools::SvRef< PageBordersHandler > pHandler( new PageBordersHandler );
- pProperties->resolve( *pHandler );
-
- // Set the borders to the context and apply them to the styles
- pHandler->SetBorders( pSectionContext );
- }
- }
- break;
-
- case NS_ooxml::LN_CT_PPrBase_snapToGrid:
- if (!IsStyleSheetImport()||!m_pImpl->isInteropGrabBagEnabled())
- {
- rContext->Insert( PROP_SNAP_TO_GRID, uno::makeAny(bool(nIntValue)));
- }
- else
- {
- m_pImpl->appendGrabBag(m_pImpl->m_aInteropGrabBag, "snapToGrid", OUString::number(nIntValue));
- }
- break;
- case NS_ooxml::LN_CT_PPrBase_pStyle:
- {
- StyleSheetTablePtr pStyleTable = m_pImpl->GetStyleSheetTable();
- const OUString sConvertedStyleName = pStyleTable->ConvertStyleName( sStringValue, true );
- m_pImpl->SetCurrentParaStyleName( sConvertedStyleName );
- if (m_pImpl->GetTopContext() && m_pImpl->GetTopContextType() != CONTEXT_SECTION)
- m_pImpl->GetTopContext()->Insert( PROP_PARA_STYLE_NAME, uno::makeAny( sConvertedStyleName ));
- }
- break;
- case NS_ooxml::LN_EG_RPrBase_rStyle:
- {
- OUString sConvertedName( m_pImpl->GetStyleSheetTable()->ConvertStyleName( sStringValue, true ) );
- if (m_pImpl->CheckFootnoteStyle())
- m_pImpl->SetHasFootnoteStyle(m_pImpl->GetFootnoteContext()->GetFootnoteStyle() == sConvertedName);
-
- // First check if the style exists in the document.
- StyleSheetEntryPtr pEntry = m_pImpl->GetStyleSheetTable( )->FindStyleSheetByConvertedStyleName( sConvertedName );
- bool bExists = pEntry && ( pEntry->nStyleTypeCode == STYLE_TYPE_CHAR );
- // Add the property if the style exists, but do not add it elements in TOC:
- // they will receive later another style references from TOC
- if ( bExists && m_pImpl->GetTopContext() && !m_pImpl->IsInTOC())
- m_pImpl->GetTopContext()->Insert( PROP_CHAR_STYLE_NAME, uno::makeAny( sConvertedName ) );
- }
- break;
- case NS_ooxml::LN_CT_TblPrBase_tblCellMar: //cell margins
- {
- resolveSprmProps(*this, rSprm);//contains LN_CT_TblCellMar_top, LN_CT_TblCellMar_left, LN_CT_TblCellMar_bottom, LN_CT_TblCellMar_right
- }
- break;
- case NS_ooxml::LN_CT_TblCellMar_top:
- case NS_ooxml::LN_CT_TblCellMar_start:
- case NS_ooxml::LN_CT_TblCellMar_left:
- case NS_ooxml::LN_CT_TblCellMar_bottom:
- case NS_ooxml::LN_CT_TblCellMar_end:
- case NS_ooxml::LN_CT_TblCellMar_right:
- {
- writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
- if( pProperties )
- {
- MeasureHandlerPtr pMeasureHandler( new MeasureHandler );
- pProperties->resolve(*pMeasureHandler);
- sal_Int32 nMeasureValue = pMeasureHandler->getMeasureValue();
- PropertyIds eId = META_PROP_CELL_MAR_TOP;
- bool rtl = false; // TODO
- switch(nSprmId)
- {
- case NS_ooxml::LN_CT_TblCellMar_top:
- break;
- case NS_ooxml::LN_CT_TblCellMar_start:
- eId = rtl ? META_PROP_CELL_MAR_RIGHT : META_PROP_CELL_MAR_LEFT;
- break;
- case NS_ooxml::LN_CT_TblCellMar_left:
- eId = META_PROP_CELL_MAR_LEFT;
- break;
- case NS_ooxml::LN_CT_TblCellMar_bottom:
- eId = META_PROP_CELL_MAR_BOTTOM;
- break;
- case NS_ooxml::LN_CT_TblCellMar_end:
- eId = rtl ? META_PROP_CELL_MAR_LEFT : META_PROP_CELL_MAR_RIGHT;
- break;
- case NS_ooxml::LN_CT_TblCellMar_right:
- eId = META_PROP_CELL_MAR_RIGHT;
- break;
- default:;
- }
- rContext->Insert( eId, uno::makeAny(nMeasureValue), false);
- }
- }
- break;
- case NS_ooxml::LN_EG_RPrBase_noProof: // no grammar and spell checking, unsupported
- break;
- case NS_ooxml::LN_anchor_anchor: // at_character drawing
- case NS_ooxml::LN_inline_inline: // as_character drawing
- {
- if ( m_pImpl->IsDiscardHeaderFooter() )
- break;
- //tdf112342: Break before images as well, if there are page break
- if (m_pImpl->isBreakDeferred(BreakType::PAGE_BREAK))
- {
- m_pImpl->GetTopContextOfType(CONTEXT_PARAGRAPH)
- ->Insert(PROP_BREAK_TYPE, uno::makeAny(style::BreakType_PAGE_BEFORE));
- m_pImpl->clearDeferredBreak(PAGE_BREAK);
- }
- writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
- if( pProperties )
- {
- GraphicImportType eGraphicType =
- (NS_ooxml::LN_anchor_anchor ==
- sal::static_int_cast<Id>(nSprmId)) ?
- IMPORT_AS_DETECTED_ANCHOR :
- IMPORT_AS_DETECTED_INLINE;
- GraphicImportPtr pGraphicImport =
- m_pImpl->GetGraphicImport(eGraphicType);
- pProperties->resolve(*pGraphicImport);
- m_pImpl->ImportGraphic(pProperties, eGraphicType);
- if( !pGraphicImport->IsGraphic() )
- {
- m_pImpl->ResetGraphicImport();
- // todo: It's a shape, now start shape import
- }
- }
- }
- break;
- case NS_ooxml::LN_EG_RPrBase_vertAlign:
- {
- sal_Int16 nEscapement = 0;
- sal_Int8 nProp = DFLT_ESC_PROP;
- if ( sStringValue == "superscript" )
- nEscapement = DFLT_ESC_AUTO_SUPER;
- else if ( sStringValue == "subscript" )
- nEscapement = DFLT_ESC_AUTO_SUB;
- else
- nProp = 100;
-
- rContext->Insert(PROP_CHAR_ESCAPEMENT, uno::makeAny( nEscapement ) );
- rContext->Insert(PROP_CHAR_ESCAPEMENT_HEIGHT, uno::makeAny( nProp ) );
- }
- break;
- case NS_ooxml::LN_CT_FtnProps_pos:
- //footnotes in word can be at page end or beneath text - writer supports only the first
- //endnotes in word can be at section end or document end - writer supports only the latter
- // -> so this property can be ignored
- break;
- case NS_ooxml::LN_CT_FtnProps_numFmt:
- case NS_ooxml::LN_CT_EdnProps_numFmt:
- {
- writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
- if (pProperties)
- {
- pProperties->resolve(*this);
- }
- }
- break;
- case NS_ooxml::LN_EG_FtnEdnNumProps_numStart:
- case NS_ooxml::LN_EG_FtnEdnNumProps_numRestart:
- {
- try
- {
- uno::Reference< beans::XPropertySet > xFtnEdnSettings;
- if( m_pImpl->IsInFootnoteProperties() )
- {
- uno::Reference< text::XFootnotesSupplier> xFootnotesSupplier( m_pImpl->GetTextDocument(), uno::UNO_QUERY );
- if (xFootnotesSupplier.is())
- xFtnEdnSettings = xFootnotesSupplier->getFootnoteSettings();
- }
- else
- {
- uno::Reference< text::XEndnotesSupplier> xEndnotesSupplier( m_pImpl->GetTextDocument(), uno::UNO_QUERY );
- if (xEndnotesSupplier.is())
- xFtnEdnSettings = xEndnotesSupplier->getEndnoteSettings();
- }
- if( NS_ooxml::LN_EG_FtnEdnNumProps_numStart == nSprmId && xFtnEdnSettings.is())
- {
- xFtnEdnSettings->setPropertyValue(
- getPropertyName( PROP_START_AT),
- uno::makeAny( sal_Int16( nIntValue - 1 )));
- }
- else if( NS_ooxml::LN_EG_FtnEdnNumProps_numRestart == nSprmId && xFtnEdnSettings.is())
- {
- sal_Int16 nFootnoteCounting = 0;
- switch (nIntValue)
- {
- case NS_ooxml::LN_Value_ST_RestartNumber_continuous: nFootnoteCounting = text::FootnoteNumbering::PER_DOCUMENT; break;
- case NS_ooxml::LN_Value_ST_RestartNumber_eachPage: nFootnoteCounting = text::FootnoteNumbering::PER_PAGE; break;
- case NS_ooxml::LN_Value_ST_RestartNumber_eachSect: nFootnoteCounting = text::FootnoteNumbering::PER_CHAPTER; break;
- default: break;
- }
- xFtnEdnSettings->setPropertyValue(
- getPropertyName( PROP_FOOTNOTE_COUNTING ),
- uno::makeAny( nFootnoteCounting ));
- }
- else if (xFtnEdnSettings.is())
- {
- sal_Int16 nNumType = ConversionHelper::ConvertNumberingType( nIntValue );
- xFtnEdnSettings->setPropertyValue(
- getPropertyName( PROP_NUMBERING_TYPE),
- uno::makeAny( nNumType ));
- }
- }
- catch( const uno::Exception& )
- {
- }
- }
- break;
- case NS_ooxml::LN_paratrackchange:
- m_pImpl->StartParaMarkerChange( );
- [[fallthrough]];
- case NS_ooxml::LN_CT_PPr_pPrChange:
- case NS_ooxml::LN_CT_ParaRPr_rPrChange:
- case NS_ooxml::LN_trackchange:
- case NS_ooxml::LN_EG_RPrContent_rPrChange:
- case NS_ooxml::LN_EG_RangeMarkupElements_customXmlDelRangeStart:
- case NS_ooxml::LN_EG_RangeMarkupElements_customXmlDelRangeEnd:
- case NS_ooxml::LN_EG_RangeMarkupElements_customXmlMoveFromRangeStart:
- case NS_ooxml::LN_EG_RangeMarkupElements_customXmlMoveFromRangeEnd:
- case NS_ooxml::LN_EG_RangeMarkupElements_customXmlMoveToRangeStart:
- case NS_ooxml::LN_EG_RangeMarkupElements_customXmlMoveToRangeEnd:
- {
- HandleRedline( rSprm );
- }
- break;
- case NS_ooxml::LN_endtrackchange:
- m_pImpl->RemoveTopRedline();
- break;
- case NS_ooxml::LN_CT_RPrChange_rPr:
- {
- // Push all the current 'Character' properties to the stack, so that we don't store them
- // as 'tracked changes' by mistake
- m_pImpl->PushProperties(CONTEXT_CHARACTER);
-
- // Resolve all the properties that are under the 'rPrChange'->'rPr' XML node
- resolveSprmProps(*this, rSprm );
-
- // Get all the properties that were processed in the 'rPrChange'->'rPr' XML node
- uno::Sequence< beans::PropertyValue > currentRedlineRevertProperties = m_pImpl->GetTopContext()->GetPropertyValues();
-
- // Pop back out the character properties that were on the run
- m_pImpl->PopProperties(CONTEXT_CHARACTER);
-
- // Store these properties in the current redline object (do it after the PopProperties() above, since
- // otherwise it'd be stored in the content dropped there).
- m_pImpl->SetCurrentRedlineRevertProperties( currentRedlineRevertProperties );
- }
- break;
- case NS_ooxml::LN_CT_PPrChange_pPr:
- {
- // Push all the current 'Paragraph' properties to the stack, so that we don't store them
- // as 'tracked changes' by mistake
- m_pImpl->PushProperties(CONTEXT_PARAGRAPH);
-
- // Resolve all the properties that are under the 'pPrChange'->'pPr' XML node
- resolveSprmProps(*this, rSprm );
-
- // Get all the properties that were processed in the 'pPrChange'->'pPr' XML node
- uno::Sequence< beans::PropertyValue > currentRedlineRevertProperties = m_pImpl->GetTopContext()->GetPropertyValues();
-
- // Pop back out the character properties that were on the run
- m_pImpl->PopProperties(CONTEXT_PARAGRAPH);
-
- // Store these properties in the current redline object (do it after the PopProperties() above, since
- // otherwise it'd be stored in the content dropped there).
- m_pImpl->SetCurrentRedlineRevertProperties( currentRedlineRevertProperties );
- }
- break;
- case NS_ooxml::LN_object:
- {
- writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
- if( pProperties )
- {
- auto pOLEHandler = std::make_shared<OLEHandler>(*this);
- pProperties->resolve(*pOLEHandler);
- if ( pOLEHandler->isOLEObject( ) )
- {
- OUString sStreamName = pOLEHandler->copyOLEOStream( m_pImpl->GetTextDocument() );
- if( !sStreamName.isEmpty() )
- {
- m_pImpl->appendOLE( sStreamName, pOLEHandler );
- }
- }
- }
- }
- break;
- case NS_ooxml::LN_EG_HdrFtrReferences_headerReference: // header reference - not needed
- case NS_ooxml::LN_EG_HdrFtrReferences_footerReference: // footer reference - not needed
- break;
- case NS_ooxml::LN_EG_RPrBase_snapToGrid: // "Use document grid settings for inter-paragraph spacing"
- break;
- case NS_ooxml::LN_CT_PPrBase_contextualSpacing:
- rContext->Insert(PROP_PARA_CONTEXT_MARGIN, uno::makeAny( nIntValue != 0 ));
- break;
- case NS_ooxml::LN_CT_PPrBase_mirrorIndents: // mirrorIndents
- rContext->Insert(PROP_MIRROR_INDENTS, uno::makeAny( nIntValue != 0 ), true, PARA_GRAB_BAG);
- break;
- case NS_ooxml::LN_EG_SectPrContents_formProt: //section protection
- {
- if( pSectionContext )
- pSectionContext->Insert( PROP_IS_PROTECTED, uno::makeAny( bool(nIntValue) ) );
- }
- break;
- case NS_ooxml::LN_EG_SectPrContents_vAlign:
- {
- OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
- if( pSectionContext )
- {
- drawing::TextVerticalAdjust nVA = drawing::TextVerticalAdjust_TOP;
- switch( nIntValue )
- {
- case NS_ooxml::LN_Value_ST_VerticalJc_center: //92367
- nVA = drawing::TextVerticalAdjust_CENTER;
- break;
- case NS_ooxml::LN_Value_ST_VerticalJc_both: //92368 - justify
- nVA = drawing::TextVerticalAdjust_BLOCK;
- break;
- case NS_ooxml::LN_Value_ST_VerticalJc_bottom: //92369
- nVA = drawing::TextVerticalAdjust_BOTTOM;
- break;
- default:
- break;
- }
- pSectionContext->Insert( PROP_TEXT_VERTICAL_ADJUST, uno::makeAny( nVA ), true, PARA_GRAB_BAG );
- }
- }
- break;
- case NS_ooxml::LN_EG_RPrBase_fitText:
- break;
- case NS_ooxml::LN_ffdata:
- {
- writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
- if (pProperties)
- {
- FFDataHandler::Pointer_t pFFDataHandler(new FFDataHandler());
-
- pProperties->resolve(*pFFDataHandler);
- m_pImpl->SetFieldFFData(pFFDataHandler);
- }
- }
- break;
- case NS_ooxml::LN_CT_SdtPr_dropDownList:
- case NS_ooxml::LN_CT_SdtPr_comboBox:
- {
- m_pImpl->m_pSdtHelper->setInsideDropDownControl(true);
- writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
- if (pProperties)
- pProperties->resolve(*this);
- }
- break;
- case NS_ooxml::LN_CT_SdtDropDownList_listItem:
- {
- writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
- if (pProperties)
- pProperties->resolve(*this);
- }
- break;
- case NS_ooxml::LN_CT_SdtPr_date:
- {
- resolveSprmProps(*this, rSprm);
- m_pImpl->m_pSdtHelper->setDateFieldStartRange(GetCurrentTextRange()->getEnd());
- }
- break;
- case NS_ooxml::LN_CT_SdtDate_dateFormat:
- {
- m_pImpl->m_pSdtHelper->getDateFormat().append(sStringValue);
- }
- break;
- case NS_ooxml::LN_CT_SdtDate_storeMappedDataAs:
- {
- }
- break;
- case NS_ooxml::LN_CT_SdtDate_calendar:
- {
- }
- break;
- case NS_ooxml::LN_CT_SdtDate_lid:
- {
- m_pImpl->m_pSdtHelper->getLocale().append(sStringValue);
- }
- break;
- case NS_ooxml::LN_CT_SdtPr_dataBinding:
- case NS_ooxml::LN_CT_SdtPr_equation:
- case NS_ooxml::LN_CT_SdtPr_checkbox:
- case NS_ooxml::LN_CT_SdtPr_docPartObj:
- case NS_ooxml::LN_CT_SdtPr_docPartList:
- case NS_ooxml::LN_CT_SdtPr_picture:
- case NS_ooxml::LN_CT_SdtPr_citation:
- case NS_ooxml::LN_CT_SdtPr_group:
- case NS_ooxml::LN_CT_SdtPr_text:
- case NS_ooxml::LN_CT_SdtPr_id:
- case NS_ooxml::LN_CT_SdtPr_alias:
- {
- // this is an unsupported SDT property, create a grab bag for it
- OUString sName;
- switch (nSprmId)
- {
- case NS_ooxml::LN_CT_SdtPr_dataBinding: sName = "ooxml:CT_SdtPr_dataBinding"; break;
- case NS_ooxml::LN_CT_SdtPr_equation: sName = "ooxml:CT_SdtPr_equation"; break;
- case NS_ooxml::LN_CT_SdtPr_checkbox: sName = "ooxml:CT_SdtPr_checkbox"; break;
- case NS_ooxml::LN_CT_SdtPr_docPartObj: sName = "ooxml:CT_SdtPr_docPartObj"; break;
- case NS_ooxml::LN_CT_SdtPr_docPartList: sName = "ooxml:CT_SdtPr_docPartList"; break;
- case NS_ooxml::LN_CT_SdtPr_picture: sName = "ooxml:CT_SdtPr_picture"; break;
- case NS_ooxml::LN_CT_SdtPr_citation: sName = "ooxml:CT_SdtPr_citation"; break;
- case NS_ooxml::LN_CT_SdtPr_group: sName = "ooxml:CT_SdtPr_group"; break;
- case NS_ooxml::LN_CT_SdtPr_text: sName = "ooxml:CT_SdtPr_text"; break;
- case NS_ooxml::LN_CT_SdtPr_id: sName = "ooxml:CT_SdtPr_id"; break;
- case NS_ooxml::LN_CT_SdtPr_alias: sName = "ooxml:CT_SdtPr_alias"; break;
- default: assert(false);
- };
- enableInteropGrabBag(sName);
-
- // process subitems
- writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
- if (pProperties)
- pProperties->resolve(*this);
-
- if (nSprmId == NS_ooxml::LN_CT_SdtPr_alias)
- {
- beans::PropertyValue aValue;
- aValue.Name = sName;
- aValue.Value <<= sStringValue;
- m_pImpl->m_pSdtHelper->appendToInteropGrabBag(aValue);
- }
- else
- m_pImpl->m_pSdtHelper->appendToInteropGrabBag(getInteropGrabBag());
- m_pImpl->m_pSdtHelper->setOutsideAParagraph(m_pImpl->IsOutsideAParagraph());
- m_pImpl->disableInteropGrabBag();
- }
- break;
- case NS_ooxml::LN_CT_SdtCheckbox_checked:
- m_pImpl->appendGrabBag(m_pImpl->m_aInteropGrabBag, "ooxml:CT_SdtCheckbox_checked", sStringValue);
- break;
- case NS_ooxml::LN_CT_SdtCheckbox_checkedState:
- m_pImpl->appendGrabBag(m_pImpl->m_aInteropGrabBag, "ooxml:CT_SdtCheckbox_checkedState", sStringValue);
- break;
- case NS_ooxml::LN_CT_SdtCheckbox_uncheckedState:
- m_pImpl->appendGrabBag(m_pImpl->m_aInteropGrabBag, "ooxml:CT_SdtCheckbox_uncheckedState", sStringValue);
- break;
- case NS_ooxml::LN_CT_SdtDocPart_docPartGallery:
- m_pImpl->appendGrabBag(m_pImpl->m_aInteropGrabBag, "ooxml:CT_SdtDocPart_docPartGallery", sStringValue);
- break;
- case NS_ooxml::LN_CT_SdtDocPart_docPartCategory:
- m_pImpl->appendGrabBag(m_pImpl->m_aInteropGrabBag, "ooxml:CT_SdtDocPart_docPartCategory", sStringValue);
- break;
- case NS_ooxml::LN_CT_SdtDocPart_docPartUnique:
- m_pImpl->appendGrabBag(m_pImpl->m_aInteropGrabBag, "ooxml:CT_SdtDocPart_docPartUnique", sStringValue);
- break;
- case NS_ooxml::LN_EG_SectPrContents_pgNumType:
- {
- writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
- if( pProperties )
- {
- pProperties->resolve(*this);
- }
- }
- break;
- case NS_ooxml::LN_tblStart:
- {
- if (m_pImpl->hasTableManager())
- {
- bool bTableStartsAtCellStart = m_pImpl->m_nTableDepth > 0 && m_pImpl->m_nTableCellDepth > m_pImpl->m_nLastTableCellParagraphDepth + 1;
- m_pImpl->getTableManager().setTableStartsAtCellStart(bTableStartsAtCellStart);
- }
- /*
- * Hack for Importing Section Properties
- * LO is not able to import section properties if first element in the
- * section is a table. So in case first element is a table add a dummy para
- * and remove it again when lcl_endSectionGroup is called
- */
- if(m_pImpl->m_nTableDepth == 0 && m_pImpl->GetIsFirstParagraphInSection()
- && !m_pImpl->GetIsDummyParaAddedForTableInSection() && !m_pImpl->GetIsTextFrameInserted()
- && !IsInHeaderFooter())
- {
- m_pImpl->AddDummyParaForTableInSection();
- }
-
- // if first paragraph style in table has break-before-page, transfer that setting to the table itself.
- if( m_pImpl->m_nTableDepth == 0 )
- {
- const uno::Any aBreakType = uno::makeAny(style::BreakType_PAGE_BEFORE);
- const PropertyMapPtr pParagraphProps = m_pImpl->GetTopContextOfType(CONTEXT_PARAGRAPH);
- if( pParagraphProps && pParagraphProps->isSet(PROP_PARA_STYLE_NAME) )
- {
- StyleSheetEntryPtr pStyle;
- OUString sStyleName;
- pParagraphProps->getProperty(PROP_PARA_STYLE_NAME)->second >>= sStyleName;
- if( !sStyleName.isEmpty() && GetStyleSheetTable() )
- pStyle = GetStyleSheetTable()->FindStyleSheetByConvertedStyleName( sStyleName );
-
- if( pStyle && pStyle->pProperties
- && pStyle->pProperties->isSet(PROP_BREAK_TYPE)
- && pStyle->pProperties->getProperty(PROP_BREAK_TYPE)->second == aBreakType )
- {
- pParagraphProps->Insert(PROP_BREAK_TYPE, aBreakType);
- }
- }
- }
-
- m_pImpl->m_nTableDepth++;
- }
- break;
- case NS_ooxml::LN_tblEnd:
- m_pImpl->m_nTableDepth--;
- break;
- case NS_ooxml::LN_tcStart:
- m_pImpl->m_nTableCellDepth++;
- break;
- case NS_ooxml::LN_tcEnd:
- m_pImpl->m_nTableCellDepth--;
- m_pImpl->m_nLastTableCellParagraphDepth = 0;
- break;
- case NS_ooxml::LN_glow_glow:
- case NS_ooxml::LN_shadow_shadow:
- case NS_ooxml::LN_reflection_reflection:
- case NS_ooxml::LN_textOutline_textOutline:
- case NS_ooxml::LN_textFill_textFill:
- case NS_ooxml::LN_scene3d_scene3d:
- case NS_ooxml::LN_props3d_props3d:
- case NS_ooxml::LN_ligatures_ligatures:
- case NS_ooxml::LN_numForm_numForm:
- case NS_ooxml::LN_numSpacing_numSpacing:
- case NS_ooxml::LN_stylisticSets_stylisticSets:
- case NS_ooxml::LN_cntxtAlts_cntxtAlts:
- {
- tools::SvRef<TextEffectsHandler> pTextEffectsHandlerPtr( new TextEffectsHandler(nSprmId) );
- std::optional<PropertyIds> aPropertyId = pTextEffectsHandlerPtr->getGrabBagPropertyId();
- if(aPropertyId)
- {
- writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
- if( pProperties )
- {
- pProperties->resolve(*pTextEffectsHandlerPtr);
-
- beans::PropertyValue aGrabBag = pTextEffectsHandlerPtr->getInteropGrabBag();
- rContext->Insert(*aPropertyId, uno::makeAny(aGrabBag), true, CHAR_GRAB_BAG);
-
- sal_Int16 nTransparency = TextEffectsHandler::GetTextFillSolidFillAlpha(aGrabBag);
- if (nTransparency != 0)
- {
- rContext->Insert(PROP_CHAR_TRANSPARENCE, uno::makeAny(nTransparency));
- }
- }
- }
- }
- break;
- case NS_ooxml::LN_CT_SdtPr_rPr:
- {
- // Make sure properties from a previous SDT are not merged with the current ones.
- m_pImpl->m_pSdtHelper->getInteropGrabBagAndClear();
- }
- break;
- case NS_ooxml::LN_CT_TblPrBase_tblLook:
- {
- writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
- if (pProperties)
- {
- pProperties->resolve(*this);
- m_pImpl->getTableManager().finishTableLook();
- }
- }
- break;
- case NS_ooxml::LN_CT_TrPrBase_cnfStyle:
- {
- m_pImpl->enableInteropGrabBag("cnfStyle");
- resolveSprmProps(*this, rSprm);
-
- TablePropertyMapPtr pPropMap(new TablePropertyMap());
- pPropMap->Insert(PROP_ROW_CNF_STYLE, uno::makeAny(comphelper::containerToSequence(m_pImpl->m_aInteropGrabBag)), true, ROW_GRAB_BAG);
- m_pImpl->getTableManager().insertRowProps(pPropMap);
-
- m_pImpl->disableInteropGrabBag();
- }
- break;
- case NS_ooxml::LN_CT_TcPrBase_cnfStyle:
- {
- m_pImpl->enableInteropGrabBag("cnfStyle");
- resolveSprmProps(*this, rSprm);
-
- TablePropertyMapPtr pPropMap(new TablePropertyMap());
- pPropMap->Insert(PROP_CELL_CNF_STYLE, uno::makeAny(comphelper::containerToSequence(m_pImpl->m_aInteropGrabBag)), true, CELL_GRAB_BAG);
- m_pImpl->getTableManager().cellProps(pPropMap);
-
- m_pImpl->disableInteropGrabBag();
- }
- break;
- case NS_ooxml::LN_CT_PPrBase_cnfStyle:
- {
- m_pImpl->enableInteropGrabBag("cnfStyle");
- resolveSprmProps(*this, rSprm);
- rContext->Insert(PROP_PARA_CNF_STYLE, uno::makeAny(comphelper::containerToSequence(m_pImpl->m_aInteropGrabBag)), true, PARA_GRAB_BAG);
- m_pImpl->disableInteropGrabBag();
- }
- break;
- case NS_ooxml::LN_EG_RunInnerContent_sym:
- {
- resolveSprmProps(*this, rSprm);
- SymbolData aSymbolData = m_pImpl->GetSymbolData();
- uno::Any aVal = uno::makeAny( aSymbolData.sFont );
- auto xFootnote = rContext->GetFootnote();
- if (!xFootnote.is() && m_pImpl->IsInCustomFootnote())
- xFootnote = m_pImpl->GetFootnoteContext()->GetFootnote();
- if (xFootnote.is())
- {
- // DOCX can have different labels for the footnote reference and the footnote area.
- // This skips the one from the footnote area and just uses the reference one.
- if (!m_pImpl->IsInFootOrEndnote())
- {
- auto xAnchorRange = xFootnote->getAnchor();
- auto xAnchorCursor(xAnchorRange->getText()->createTextCursorByRange(xAnchorRange));
-
- // append a dummy character, so the following properties will be set as
- // as SwpHints::SwTextAttr instead of the SwAttrSet of the paragraph,
- // which would be removed by SwXText::Impl::finishOrAppendParagraph
- xAnchorCursor->collapseToEnd();
- uno::Reference<text::XTextRange> xHackRange(xAnchorCursor, uno::UNO_QUERY);
- xHackRange->setString("x");
-
- uno::Reference<beans::XPropertySet> xAnchorProps(xAnchorRange, uno::UNO_QUERY);
- xAnchorProps->setPropertyValue(getPropertyName(PROP_CHAR_FONT_NAME), aVal);
- xAnchorProps->setPropertyValue(getPropertyName(PROP_CHAR_FONT_NAME_ASIAN), aVal);
- xAnchorProps->setPropertyValue(getPropertyName(PROP_CHAR_FONT_NAME_COMPLEX), aVal);
- xAnchorProps->setPropertyValue(getPropertyName(PROP_CHAR_FONT_CHAR_SET), uno::makeAny(awt::CharSet::SYMBOL));
-
- // remove the dummy char
- xHackRange->setString("");
-
- OUString sLabel = xFootnote->getLabel() + OUStringChar(aSymbolData.cSymbol);
- xFootnote->setLabel(sLabel);
- }
- }
- else //it's a _real_ symbol
- {
- rContext->Insert(PROP_CHAR_FONT_NAME, aVal);
- rContext->Insert(PROP_CHAR_FONT_NAME_ASIAN, aVal);
- rContext->Insert(PROP_CHAR_FONT_NAME_COMPLEX, aVal);
- rContext->Insert(PROP_CHAR_FONT_CHAR_SET, uno::makeAny(awt::CharSet::SYMBOL));
- utext( reinterpret_cast < const sal_uInt8 * >( &(aSymbolData.cSymbol) ), 1 );
- }
- }
- break;
- case NS_ooxml::LN_EG_RunInnerContent_ruby:
- {
- RubyInfo aInfo ;
- m_pImpl->SetRubyInfo(aInfo);
- }
- break;
- case NS_ooxml::LN_CT_RubyPr:
- case NS_ooxml::LN_CT_Ruby_rt:
- case NS_ooxml::LN_CT_Ruby_rubyBase:
- {
- m_pImpl->SetRubySprmId(nSprmId);
- if (nSprmId == NS_ooxml::LN_CT_RubyPr)
- {
- resolveSprmProps(*this, rSprm);
- }
- }
- break;
- case NS_ooxml::LN_EG_RubyContent_r:
- {
- const RubyInfo & aInfo = m_pImpl->GetRubyInfo();
- if (aInfo.nSprmId == NS_ooxml::LN_CT_Ruby_rubyBase)
- {
- rContext->Insert(PROP_RUBY_TEXT, uno::makeAny(aInfo.sRubyText));
- rContext->Insert(PROP_RUBY_STYLE, uno::makeAny(aInfo.sRubyStyle));
- rContext->Insert(PROP_RUBY_ADJUST, uno::makeAny(static_cast<sal_Int16>(ConversionHelper::convertRubyAlign(aInfo.nRubyAlign))));
- if ( aInfo.nRubyAlign == NS_ooxml::LN_Value_ST_RubyAlign_rightVertical )
- rContext->Insert(PROP_RUBY_POSITION, uno::makeAny(css::text::RubyPosition::INTER_CHARACTER));
-
- m_pImpl->SetRubySprmId(0);
- }
- }
- break;
- case NS_ooxml::LN_CT_RubyPr_rubyAlign:
- case NS_ooxml::LN_CT_RubyPr_hps:
- case NS_ooxml::LN_CT_RubyPr_hpsBaseText:
- {
- RubyInfo aInfo = m_pImpl->GetRubyInfo();
- switch(nSprmId)
- {
- case NS_ooxml::LN_CT_RubyPr_rubyAlign:
- aInfo.nRubyAlign = nIntValue;
- break;
- case NS_ooxml::LN_CT_RubyPr_hps:
- aInfo.nHps= nIntValue;
- break;
- case NS_ooxml::LN_CT_RubyPr_hpsBaseText:
- aInfo.nHpsBaseText = nIntValue;
- break;
- }
- m_pImpl->SetRubyInfo(aInfo);
- }
- break;
- case NS_ooxml::LN_CT_SmartTagRun_smartTagPr:
- {
- writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
- if (pProperties && m_pImpl->GetTopContextType() == CONTEXT_PARAGRAPH)
- pProperties->resolve(m_pImpl->getSmartTagHandler());
- }
- break;
- case NS_ooxml::LN_CT_DocPartPr_name:
- {
- writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
- if (pProperties)
- pProperties->resolve(*this);
- }
- break;
- case NS_ooxml::LN_CT_DocPartPr_category:
- {
- writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
- if (pProperties)
- pProperties->resolve(*this);
- }
- break;
- case NS_ooxml::LN_CT_DocPartCategory_gallery:
- {
- writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
- if (pProperties)
- pProperties->resolve(*this);
- }
- break;
- default:
- {
-#ifdef DBG_UTIL
- TagLogger::getInstance().startElement("unhandled");
- TagLogger::getInstance().attribute("id", nSprmId);
- TagLogger::getInstance().attribute("name", rSprm.getName());
- TagLogger::getInstance().endElement();
-#endif
- }
- }
-}
-
-void DomainMapper::processDeferredCharacterProperties( const std::map< sal_Int32, uno::Any >& deferredCharacterProperties )
-{
- assert( m_pImpl->GetTopContextType() == CONTEXT_CHARACTER );
- PropertyMapPtr rContext = m_pImpl->GetTopContext();
- for( const auto& rProp : deferredCharacterProperties )
- {
- sal_Int32 Id = rProp.first;
- sal_Int32 nIntValue = 0;
- OUString sStringValue;
- rProp.second >>= nIntValue;
- rProp.second >>= sStringValue;
- switch( Id )
- {
- case NS_ooxml::LN_EG_RPrBase_position:
- {
- double nEscapement = 0;
- sal_Int8 nProp = 0;
- if ( nIntValue )
- {
- nProp = 100;
- double fFontSize = 0;
- m_pImpl->GetAnyProperty(PROP_CHAR_HEIGHT, rContext) >>= fFontSize;
- if ( fFontSize )
- // nIntValue is in half-points, fontsize is in points, escapement is a percentage.
- nEscapement = round( nIntValue/2.0 / fFontSize * 100 );
- else
- nEscapement = nIntValue > 0 ? DFLT_ESC_SUPER : DFLT_ESC_SUB;
- }
- if ( nEscapement > MAX_ESC_POS )
- nEscapement = MAX_ESC_POS;
- else if ( nEscapement < -MAX_ESC_POS )
- nEscapement = -MAX_ESC_POS;
-
- rContext->Insert(PROP_CHAR_ESCAPEMENT, uno::makeAny( sal_Int16(nEscapement) ) );
- rContext->Insert(PROP_CHAR_ESCAPEMENT_HEIGHT, uno::makeAny( nProp ) );
- }
- break;
- default:
- SAL_WARN( "writerfilter", "Unhandled property in processDeferredCharacterProperty()" );
- break;
- }
- }
-}
-
-void DomainMapper::lcl_entry(writerfilter::Reference<Properties>::Pointer_t ref)
-{
- ref->resolve(*this);
-}
-
-void DomainMapper::data(const sal_uInt8* /*buf*/, size_t /*len*/)
-{
-}
-
-void DomainMapper::lcl_startSectionGroup()
-{
- if (!m_pImpl->isInIndexContext() && !m_pImpl->isInBibliographyContext())
- {
- m_pImpl->PushProperties(CONTEXT_SECTION);
- }
- m_pImpl->SetIsFirstParagraphInSection(true);
- m_pImpl->SetIsFirstParagraphInSectionAfterRedline(true);
-}
-
-void DomainMapper::lcl_endSectionGroup()
-{
- if (m_pImpl->isInIndexContext() || m_pImpl->isInBibliographyContext())
- return;
-
- m_pImpl->CheckUnregisteredFrameConversion();
- m_pImpl->ExecuteFrameConversion();
- // When pasting, it's fine to not have any paragraph inside the document at all.
- if (m_pImpl->GetIsFirstParagraphInSection() && m_pImpl->IsNewDoc())
- {
- // This section has no paragraph at all (e.g. they are all actually in a frame).
- // If this section has a page break, there would be nothing to apply to the page
- // style, so force a dummy paragraph.
- lcl_startParagraphGroup();
- lcl_startCharacterGroup();
- sal_uInt8 const sBreak[] = { 0xd };
- lcl_text(sBreak, 1);
- lcl_endCharacterGroup();
- lcl_endParagraphGroup();
- }
- PropertyMapPtr pContext = m_pImpl->GetTopContextOfType(CONTEXT_SECTION);
- SectionPropertyMap* pSectionContext = dynamic_cast< SectionPropertyMap* >( pContext.get() );
- OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
- if(pSectionContext)
- {
- pSectionContext->CloseSectionGroup( *m_pImpl );
- // Remove the dummy paragraph if added for
- // handling the section properties if section starts with a table
- if (m_pImpl->GetIsDummyParaAddedForTableInSection())
- m_pImpl->RemoveDummyParaForTableInSection();
- }
- m_pImpl->SetIsTextFrameInserted( false );
- m_pImpl->PopProperties(CONTEXT_SECTION);
-}
-
-void DomainMapper::lcl_startParagraphGroup()
-{
- if (m_pImpl->hasTableManager())
- m_pImpl->getTableManager().startParagraphGroup();
- /*
- * Add new para properties only if paragraph is not split
- * or the top context is not of paragraph properties
- * Set mbIsSplitPara to false as it has been handled
- */
- if (!mbIsSplitPara)
- m_pImpl->PushProperties(CONTEXT_PARAGRAPH);
- mbIsSplitPara = false;
- if (m_pImpl->GetTopContextOfType(CONTEXT_PARAGRAPH) != m_pImpl->GetTopContext())
- m_pImpl->PushProperties(CONTEXT_PARAGRAPH);
-
- if (m_pImpl->GetTopContext())
- {
- if (!m_pImpl->IsInShape())
- {
- const OUString& sDefaultParaStyle = m_pImpl->GetDefaultParaStyleName();
- m_pImpl->GetTopContext()->Insert( PROP_PARA_STYLE_NAME, uno::makeAny( sDefaultParaStyle ) );
- m_pImpl->SetCurrentParaStyleName( sDefaultParaStyle );
- }
- if (m_pImpl->isBreakDeferred(PAGE_BREAK))
- m_pImpl->GetTopContext()->Insert(PROP_BREAK_TYPE, uno::makeAny(style::BreakType_PAGE_BEFORE));
- else if (m_pImpl->isBreakDeferred(COLUMN_BREAK))
- m_pImpl->GetTopContext()->Insert(PROP_BREAK_TYPE, uno::makeAny(style::BreakType_COLUMN_BEFORE));
-
- if (m_pImpl->isParaSdtEndDeferred())
- m_pImpl->GetTopContext()->Insert(PROP_PARA_SDT_END_BEFORE, uno::makeAny(true), true, PARA_GRAB_BAG);
- }
- m_pImpl->SetIsFirstRun(true);
- m_pImpl->SetIsOutsideAParagraph(false);
- m_pImpl->clearDeferredBreaks();
- m_pImpl->setParaSdtEndDeferred(false);
-}
-
-void DomainMapper::lcl_endParagraphGroup()
-{
- m_pImpl->PopProperties(CONTEXT_PARAGRAPH);
- if (m_pImpl->hasTableManager())
- m_pImpl->getTableManager().endParagraphGroup();
- //frame conversion has to be executed after table conversion
- m_pImpl->ExecuteFrameConversion();
- m_pImpl->SetIsOutsideAParagraph(true);
-}
-
-void DomainMapper::markLastParagraphInSection( )
-{
- m_pImpl->SetIsLastParagraphInSection( true );
-}
-
-void DomainMapper::markLastSectionGroup( )
-{
- m_pImpl->SetIsLastSectionGroup( true );
-}
-
-void DomainMapper::lcl_startShape(uno::Reference<drawing::XShape> const& xShape)
-{
- assert(xShape.is());
-
- if (m_pImpl->GetTopContext())
- {
- // If there is a deferred page break, handle it now, so that the
- // started shape will be on the correct page.
- if (m_pImpl->isBreakDeferred(PAGE_BREAK))
- {
- m_pImpl->clearDeferredBreak(PAGE_BREAK);
- lcl_startCharacterGroup();
- sal_uInt8 const sBreak[] = { 0xd };
- lcl_text(sBreak, 1);
- lcl_endCharacterGroup();
- lcl_endParagraphGroup();
- lcl_startParagraphGroup();
- m_pImpl->GetTopContext()->Insert(PROP_BREAK_TYPE, uno::makeAny(style::BreakType_PAGE_BEFORE));
- }
- m_pImpl->PushShapeContext( xShape );
- lcl_startParagraphGroup();
- }
- else
- {
- // No context? Then this image should not appear directly inside the
- // document, just save it for later usage.
- m_pImpl->PushPendingShape(xShape);
- }
-
- m_pImpl->SetIsFirstParagraphInShape(true);
-
-}
-
-void DomainMapper::lcl_endShape( )
-{
- if (!m_pImpl->GetTopContext())
- return;
-
- // End the current table, if there are any. Otherwise the unavoidable
- // empty paragraph at the end of the shape text will cause problems: if
- // the shape text ends with a table, the extra paragraph will be
- // handled as an additional row of the ending table.
- if (m_pImpl->hasTableManager())
- m_pImpl->getTableManager().endTable();
-
- lcl_endParagraphGroup();
- m_pImpl->PopShapeContext( );
- // A shape is always inside a paragraph (anchored or inline).
- m_pImpl->SetIsOutsideAParagraph(false);
-}
-
-void DomainMapper::PushStyleSheetProperties( const PropertyMapPtr& pStyleProperties, bool bAffectTableMngr )
-{
- m_pImpl->PushStyleProperties( pStyleProperties );
- if ( bAffectTableMngr )
- m_pImpl->getTableManager( ).SetStyleProperties( pStyleProperties );
-}
-
-void DomainMapper::PopStyleSheetProperties( bool bAffectTableMngr )
-{
- m_pImpl->PopProperties( CONTEXT_STYLESHEET );
- if ( bAffectTableMngr )
- {
- PropertyMapPtr emptyPtr;
- m_pImpl->getTableManager( ).SetStyleProperties( emptyPtr );
- }
-}
-
-void DomainMapper::PushListProperties( const ::tools::SvRef<PropertyMap>& pListProperties )
-{
- m_pImpl->PushListProperties( pListProperties );
-}
-
-void DomainMapper::PopListProperties()
-{
- m_pImpl->PopProperties( CONTEXT_LIST );
-}
-
-void DomainMapper::lcl_startCharacterGroup()
-{
- m_pImpl->PushProperties(CONTEXT_CHARACTER);
- if (m_pImpl->isSdtEndDeferred())
- {
- // Fields have an empty character group before the real one, so don't
- // call setSdtEndDeferred(false) here, that will happen only in lcl_utext().
- m_pImpl->GetTopContext()->Insert(PROP_SDT_END_BEFORE, uno::makeAny(true), true, CHAR_GRAB_BAG);
- }
-}
-
-void DomainMapper::lcl_endCharacterGroup()
-{
- if (m_pImpl->CheckFootnoteStyle())
- {
- m_pImpl->SetCheckFootnoteStyle(m_pImpl->IsInCustomFootnote());
- m_pImpl->SetHasFootnoteStyle(false);
- }
- m_pImpl->PopProperties(CONTEXT_CHARACTER);
-}
-
-void DomainMapper::lcl_text(const sal_uInt8 * data_, size_t len)
-{
- //TODO: Determine the right text encoding (FIB?)
- OUString sText( reinterpret_cast<const char*>(data_), len, RTL_TEXTENCODING_MS_1252 );
-#ifdef DBG_UTIL
- TagLogger::getInstance().startElement("text");
- TagLogger::getInstance().chars(sText);
- TagLogger::getInstance().endElement();
-#endif
-
- try
- {
- if(len == 1)
- {
- switch(*data_)
- {
- case 0x02: return; //footnote character
- case 0x08: // Lock field if in field context
- if (m_pImpl->IsOpenField())
- m_pImpl->SetFieldLocked();
- return;
- case 0x0c: //page break
- m_pImpl->deferBreak(PAGE_BREAK);
- return;
- case 0x0e: //column break
- m_pImpl->deferBreak(COLUMN_BREAK);
- return;
- case 0x07:
- m_pImpl->getTableManager().text(data_, len);
- return;
- case 0x0d:
- {
- PropertyMapPtr pContext = m_pImpl->GetTopContextOfType(CONTEXT_PARAGRAPH);
- if (pContext && m_pImpl->isBreakDeferred(COLUMN_BREAK))
- {
- pContext->Insert(PROP_BREAK_TYPE, uno::makeAny(style::BreakType_COLUMN_BEFORE));
- m_pImpl->clearDeferredBreak(COLUMN_BREAK);
- }
- finishParagraph();
- return;
- }
- case cFieldStart:
- m_pImpl->PushFieldContext();
- return;
- case cFieldSep:
- // delimiter not necessarily available
- // appears only if field contains further content
- m_pImpl->CloseFieldCommand();
- return;
- case cFieldEnd:
- m_pImpl->PopFieldContext();
- return;
- default:
- break;
- }
- }
-
- // GetTopContext() is changed by inserted breaks, but we want to keep the current context
- PropertyMapPtr pContext = m_pImpl->GetTopContext();
- if (!m_pImpl->GetFootnoteContext())
- {
- if (m_pImpl->isBreakDeferred(PAGE_BREAK))
- m_pImpl->GetTopContext()->Insert(PROP_BREAK_TYPE, uno::makeAny(style::BreakType_PAGE_BEFORE));
- else if (m_pImpl->isBreakDeferred(COLUMN_BREAK))
- m_pImpl->GetTopContext()->Insert(PROP_BREAK_TYPE, uno::makeAny(style::BreakType_COLUMN_BEFORE));
- m_pImpl->clearDeferredBreaks();
- }
-
- if (pContext && pContext->GetFootnote().is() && m_pImpl->IsInCustomFootnote())
- {
- pContext->GetFootnote()->setLabel(sText);
- m_pImpl->EndCustomFootnote();
- //otherwise ignore sText
- }
- else if (m_pImpl->IsOpenFieldCommand() && !m_pImpl->IsForceGenericFields())
- {
- m_pImpl->AppendFieldCommand(sText);
- }
- else if( m_pImpl->IsOpenField() && m_pImpl->IsFieldResultAsString())
- /*depending on the success of the field insert operation this result will be
- set at the field or directly inserted into the text*/
- m_pImpl->AppendFieldResult(sText);
- else
- {
- if (pContext == nullptr)
- pContext = new PropertyMap();
-
- m_pImpl->appendTextPortion( sText, pContext );
- }
- }
- catch( const uno::RuntimeException& )
- {
- TOOLS_WARN_EXCEPTION("writerfilter", "");
- }
-}
-
-void DomainMapper::lcl_positionOffset(const OUString& rText, bool bVertical)
-{
- if (bVertical)
- m_pImpl->m_aPositionOffsets.second = rText;
- else
- m_pImpl->m_aPositionOffsets.first = rText;
-}
-
-awt::Point DomainMapper::getPositionOffset()
-{
- awt::Point aRet;
- aRet.X = oox::drawingml::convertEmuToHmm(m_pImpl->m_aPositionOffsets.first.toInt32());
- aRet.Y = oox::drawingml::convertEmuToHmm(m_pImpl->m_aPositionOffsets.second.toInt32());
- return aRet;
-}
-
-void DomainMapper::lcl_align(const OUString& rText, bool bVertical)
-{
- if (bVertical)
- m_pImpl->m_aAligns.second = rText;
- else
- m_pImpl->m_aAligns.first = rText;
-}
-
-void DomainMapper::lcl_positivePercentage(const OUString& rText)
-{
- m_pImpl->m_aPositivePercentages.push(rText);
-}
-
-void DomainMapper::lcl_utext(const sal_uInt8 * data_, size_t len)
-{
- // All these fixed values are defined as static const sal_Unicode codepoints in the fast parser,
- // like uFtnEdnRef = 0x2, uFtnEdnSep = 0x3, ... and have a len of 1, if they aren't valid unicode.
-
- OUString sText(reinterpret_cast<const sal_Unicode *>(data_), len);
- const RubyInfo & aInfo = m_pImpl->GetRubyInfo();
- if (aInfo.nSprmId == NS_ooxml::LN_CT_Ruby_rt)
- {
- PropertyMapPtr pContext = m_pImpl->GetTopContext();
- PropertyValueVector_t aProps = comphelper::sequenceToContainer< PropertyValueVector_t >(pContext->GetPropertyValues());
- OUString sStyle = getOrCreateCharStyle(aProps, /*bAlwaysCreate=*/false);
- m_pImpl->SetRubyText(sText,sStyle);
- return;
- }
-
- if (len == 1)
- {
- // If the footnote contains a Footnote Reference Mark, it can't be a custom footnote
- // ******
- // This code block is wrong, as it should also be in m_pImpl->IsInFootOrEndnote().
- // The main problem is that
- //
- // assert(len != 1 || sText[0] != 0x2)
- //
- // is triggered by the unit test SwLayoutWriter::testForcepoint75, so all these pseudo
- // value handling is broken.
- // But this is just a symptom, as I guess it's possible to generate broken DOCX documents,
- // which might be problematic, triggering *funny* code paths left and right.
- // ******
- if (sText[0] == 0x2)
- {
- m_pImpl->EndCustomFootnote();
- return;
- }
-
- if (m_pImpl->IsInCustomFootnote())
- {
- if (sText[0] != 0xd && sText[0] != 0x3)
- {
- // DOCX can have different labels for the footnote reference and the footnote area.
- // This skips the one from the footnote area and just uses the reference one.
- if (!m_pImpl->IsInFootOrEndnote())
- {
- if (PropertyMapPtr pFootnoteContext = m_pImpl->GetFootnoteContext())
- {
- auto xFootnote = pFootnoteContext->GetFootnote();
- xFootnote->setLabel(xFootnote->getLabel() + sText);
- }
- }
- return;
- }
- else
- m_pImpl->SetHasFootnoteStyle(true);
- }
- }
-
- if (m_pImpl->isSdtEndDeferred())
- {
- // In case we have a field context, then save the property there, so
- // SDT's ending right before a field start are handled as well.
- PropertyMapPtr pContext = m_pImpl->GetTopContext();
- if (m_pImpl->IsOpenField())
- pContext = m_pImpl->GetTopFieldContext()->getProperties();
- pContext->Insert(PROP_SDT_END_BEFORE, uno::makeAny(true), true, CHAR_GRAB_BAG);
- m_pImpl->setSdtEndDeferred(false);
- }
-
- bool bNewLine = len == 1 && (sText[0] == 0x0d || sText[0] == 0x07);
- if (m_pImpl->m_pSdtHelper->isInsideDropDownControl())
- {
- if (bNewLine)
- // Dropdown control has single-line texts, so in case of newline, create the control.
- m_pImpl->m_pSdtHelper->createDropDownControl();
- else
- {
- m_pImpl->m_pSdtHelper->getSdtTexts().append(sText);
- return;
- }
- }
- else if (!m_pImpl->m_pSdtHelper->isInteropGrabBagEmpty())
- {
- // Ignore grabbag when we have a date field, it can conflict during export
- if(m_pImpl->m_pSdtHelper->validateDateFormat())
- {
- m_pImpl->m_pSdtHelper->getInteropGrabBagAndClear();
- }
- else
- {
-
- // there are unsupported SDT properties in the document
- // save them in the paragraph interop grab bag
- if (m_pImpl->IsDiscardHeaderFooter())
- {
- // Unless we're supposed to ignore this header/footer.
- m_pImpl->m_pSdtHelper->getInteropGrabBagAndClear();
- return;
- }
- if((m_pImpl->m_pSdtHelper->containedInInteropGrabBag("ooxml:CT_SdtPr_checkbox") ||
- m_pImpl->m_pSdtHelper->containedInInteropGrabBag("ooxml:CT_SdtPr_text") ||
- m_pImpl->m_pSdtHelper->containedInInteropGrabBag("ooxml:CT_SdtPr_dataBinding") ||
- m_pImpl->m_pSdtHelper->containedInInteropGrabBag("ooxml:CT_SdtPr_citation") ||
- (m_pImpl->m_pSdtHelper->containedInInteropGrabBag("ooxml:CT_SdtPr_id") &&
- m_pImpl->m_pSdtHelper->getInteropGrabBagSize() == 1)) && !m_pImpl->m_pSdtHelper->isOutsideAParagraph())
- {
- PropertyMapPtr pContext = m_pImpl->GetTopContextOfType(CONTEXT_CHARACTER);
-
- if (m_pImpl->IsOpenField())
- // We have a field, insert the SDT properties to the field's grab-bag, so they won't be lost.
- pContext = m_pImpl->GetTopFieldContext()->getProperties();
-
- pContext->Insert(PROP_SDTPR, uno::makeAny(m_pImpl->m_pSdtHelper->getInteropGrabBagAndClear()), true, CHAR_GRAB_BAG);
- }
- else
- m_pImpl->GetTopContextOfType(CONTEXT_PARAGRAPH)->Insert(PROP_SDTPR,
- uno::makeAny(m_pImpl->m_pSdtHelper->getInteropGrabBagAndClear()), true, PARA_GRAB_BAG);
- }
- }
- else if (len == 1 && sText[0] == 0x03)
- {
- // This is the uFtnEdnSep, remember that the document has a separator.
- m_pImpl->m_bHasFtnSep = true;
- return;
- }
- else if (len == 1 && sText[0] == '\t' )
- {
- if ( m_pImpl->m_bCheckFirstFootnoteTab && m_pImpl->IsInFootOrEndnote() )
- {
- // Allow MSO to emulate LO footnote text starting at left margin - only meaningful with hanging indent
- m_pImpl->m_bCheckFirstFootnoteTab = false;
- sal_Int32 nFirstLineIndent = 0;
- m_pImpl->GetAnyProperty(PROP_PARA_FIRST_LINE_INDENT, m_pImpl->GetTopContextOfType(CONTEXT_PARAGRAPH)) >>= nFirstLineIndent;
- if ( nFirstLineIndent < 0 )
- m_pImpl->m_bIgnoreNextTab = true;
- }
-
- if ( m_pImpl->m_bIgnoreNextTab )
- {
- m_pImpl->m_bIgnoreNextTab = false;
- return;
- }
- }
- else if (m_pImpl->m_pSdtHelper->validateDateFormat())
- {
- if(IsInHeaderFooter() && m_pImpl->IsDiscardHeaderFooter())
- {
- m_pImpl->m_pSdtHelper->getDateFormat().truncate();
- m_pImpl->m_pSdtHelper->getLocale().truncate();
- return;
- }
- }
- if (!m_pImpl->hasTableManager())
- return;
-
- SkipFootnoteSeparator eSkip = m_pImpl->GetSkipFootnoteState();
- if ( eSkip == SkipFootnoteSeparator::ON || eSkip == SkipFootnoteSeparator::SKIPPING )
- {
- m_pImpl->SetSkipFootnoteState( SkipFootnoteSeparator::SKIPPING );
- return;
- }
-
- try
- {
- m_pImpl->getTableManager().utext(data_, len);
-
- if (bNewLine)
- {
- const bool bSingleParagraph = m_pImpl->GetIsFirstParagraphInSection() && m_pImpl->GetIsLastParagraphInSection();
- const bool bSingleParagraphAfterRedline = m_pImpl->GetIsFirstParagraphInSection(/*bAfterRedline=*/true) &&
- m_pImpl->GetIsLastParagraphInSection();
- PropertyMapPtr pContext = m_pImpl->GetTopContextOfType(CONTEXT_PARAGRAPH);
- if (!m_pImpl->GetFootnoteContext())
- {
- if (m_pImpl->isBreakDeferred(PAGE_BREAK))
- {
- if (m_pImpl->GetSettingsTable()->GetSplitPgBreakAndParaMark())
- {
- if ( m_pImpl->GetIsFirstParagraphInSection() || !m_pImpl->IsFirstRun() )
- {
- m_pImpl->m_bIsSplitPara = true;
- finishParagraph();
- lcl_startParagraphGroup();
- }
-
-
- pContext->Insert(PROP_BREAK_TYPE, uno::makeAny(style::BreakType_PAGE_BEFORE));
- m_pImpl->clearDeferredBreaks();
- }
- }
- else if (m_pImpl->isBreakDeferred(COLUMN_BREAK))
- {
- if ( m_pImpl->GetIsFirstParagraphInSection() || !m_pImpl->IsFirstRun() )
- {
- mbIsSplitPara = true;
- finishParagraph();
- lcl_startParagraphGroup();
- }
-
- pContext->Insert(PROP_BREAK_TYPE, uno::makeAny(style::BreakType_COLUMN_BEFORE));
- m_pImpl->clearDeferredBreaks();
- }
- }
-
- // If the paragraph contains only the section properties and it has
- // no runs, we should not create a paragraph for it in Writer, unless that would remove the whole section.
- SectionPropertyMap* pSectionContext = m_pImpl->GetSectionContext();
- bool bRemove = (!m_pImpl->GetParaChanged() && m_pImpl->GetRemoveThisPara()) ||
- (!m_pImpl->GetParaChanged() && m_pImpl->GetParaSectpr()
- && !bSingleParagraphAfterRedline
- && !m_pImpl->GetParaHadField()
- && !m_pImpl->GetIsDummyParaAddedForTableInSection()
- && !( pSectionContext && pSectionContext->GetBreakType() != -1 && pContext && pContext->isSet(PROP_BREAK_TYPE) )
- && !m_pImpl->GetIsPreviousParagraphFramed()
- && !m_pImpl->HasTopAnchoredObjects()
- && !m_pImpl->IsParaWithInlineObject());
-
- const bool bNoNumbering = bRemove || (!m_pImpl->GetParaChanged() && m_pImpl->GetParaSectpr() && bSingleParagraph);
- PropertyMapPtr xContext = bNoNumbering ? m_pImpl->GetTopContextOfType(CONTEXT_PARAGRAPH) : PropertyMapPtr();
- if (xContext)
- {
- // tdf#97417 delete numbering of the paragraph
- // it will be deleted anyway, and the numbering would be copied
- // to the next paragraph in sw SplitNode and then be applied to
- // every following paragraph
- xContext->Erase(PROP_NUMBERING_RULES);
- static_cast<ParagraphPropertyMap*>(xContext.get())->SetListId(-1);;
- xContext->Erase(PROP_NUMBERING_LEVEL);
- }
- m_pImpl->SetParaSectpr(false);
- finishParagraph(bRemove, bNoNumbering);
- if (bRemove)
- m_pImpl->RemoveLastParagraph();
- }
- else
- {
- // GetTopContext() is changed by inserted breaks, but we want to keep the current context
- PropertyMapPtr pContext = m_pImpl->GetTopContext();
- if (!m_pImpl->GetFootnoteContext())
- {
- if (m_pImpl->isBreakDeferred(PAGE_BREAK))
- {
- /* If PAGEBREAK appears in first paragraph of the section or
- * after first run of any paragraph then need to split paragraph
- * to handle it properly.
- */
- if (m_pImpl->GetIsFirstParagraphInSection() || !m_pImpl->IsFirstRun())
- {
- m_pImpl->m_bIsSplitPara = true;
- finishParagraph();
- lcl_startParagraphGroup();
- }
- m_pImpl->GetTopContext()->Insert(PROP_BREAK_TYPE, uno::makeAny(style::BreakType_PAGE_BEFORE));
- }
- else if (m_pImpl->isBreakDeferred(COLUMN_BREAK))
- {
- if (m_pImpl->GetIsFirstParagraphInSection() || !m_pImpl->IsFirstRun())
- {
- mbIsSplitPara = true;
- finishParagraph();
- lcl_startParagraphGroup();
- }
- m_pImpl->GetTopContext()->Insert(PROP_BREAK_TYPE, uno::makeAny(style::BreakType_COLUMN_BEFORE));
- }
- m_pImpl->clearDeferredBreaks();
- }
-
- if (pContext && pContext->GetFootnote().is())
- {
- pContext->GetFootnote()->setLabel( sText );
- //otherwise ignore sText
- }
- else if (m_pImpl->IsOpenFieldCommand() && !m_pImpl->IsForceGenericFields())
- {
- m_pImpl->AppendFieldCommand(sText);
- }
- else if( m_pImpl->IsOpenField() && m_pImpl->IsFieldResultAsString())
- /*depending on the success of the field insert operation this result will be
- set at the field or directly inserted into the text*/
- m_pImpl->AppendFieldResult(sText);
- else
- {
- if (pContext == nullptr)
- pContext = new PropertyMap();
-
- m_pImpl->appendTextPortion( sText, pContext );
- }
-
- }
- m_pImpl->SetIsFirstRun(false);
- }
- catch( const uno::RuntimeException& )
- {
- }
-}
-
-void DomainMapper::lcl_props(writerfilter::Reference<Properties>::Pointer_t ref)
-{
- ref->resolve(*this);
-}
-
-void DomainMapper::lcl_table(Id name, writerfilter::Reference<Table>::Pointer_t ref)
-{
- m_pImpl->SetAnyTableImport(true);
- switch(name)
- {
- case NS_ooxml::LN_FONTTABLE:
-
- // create a font table object that listens to the attributes
- // each entry call inserts a new font entry
- ref->resolve( *m_pImpl->GetFontTable() );
- break;
- case NS_ooxml::LN_STYLESHEET:
- //same as above to import style sheets
- m_pImpl->SetStyleSheetImport( true );
- ref->resolve( *m_pImpl->GetStyleSheetTable() );
- m_pImpl->GetStyleSheetTable()->ApplyStyleSheets(m_pImpl->GetFontTable());
- m_pImpl->SetStyleSheetImport( false );
- break;
- case NS_ooxml::LN_NUMBERING:
- {
-
- //the same for list tables
- ref->resolve( *m_pImpl->GetListTable() );
- m_pImpl->GetListTable( )->CreateNumberingRules( );
- }
- break;
- case NS_ooxml::LN_THEMETABLE:
- m_pImpl->GetThemeTable()->setThemeFontLangProperties(
- m_pImpl->GetSettingsTable()->GetThemeFontLangProperties() );
- ref->resolve ( *m_pImpl->GetThemeTable() );
- break;
- case NS_ooxml::LN_settings_settings:
- ref->resolve ( *m_pImpl->GetSettingsTable() );
- m_pImpl->ApplySettingsTable();
- break;
- default:
- OSL_FAIL( "which table is to be filled here?");
- }
- m_pImpl->SetAnyTableImport(false);
-}
-
-void DomainMapper::lcl_substream(Id rName, ::writerfilter::Reference<Stream>::Pointer_t ref)
-{
- m_pImpl->substream(rName, ref);
-}
-
-void DomainMapper::lcl_startGlossaryEntry()
-{
- uno::Reference< text::XTextRange > xTextRange = GetCurrentTextRange();
- m_pImpl->setGlossaryEntryStart(xTextRange);
-}
-
-void DomainMapper::lcl_endGlossaryEntry()
-{
- m_pImpl->appendGlossaryEntry();
-}
-
-void DomainMapper::handleUnderlineType(const Id nId, const ::tools::SvRef<PropertyMap>& rContext)
-{
- sal_Int16 nUnderline = awt::FontUnderline::NONE;
-
- switch (nId)
- {
- case NS_ooxml::LN_Value_ST_Underline_none:
- nUnderline = awt::FontUnderline::NONE;
- break;
- case NS_ooxml::LN_Value_ST_Underline_words:
- rContext->Insert(PROP_CHAR_WORD_MODE, uno::makeAny(true));
- [[fallthrough]];
- case NS_ooxml::LN_Value_ST_Underline_single:
- nUnderline = awt::FontUnderline::SINGLE;
- break;
- case NS_ooxml::LN_Value_ST_Underline_double:
- nUnderline = awt::FontUnderline::DOUBLE;
- break;
- case NS_ooxml::LN_Value_ST_Underline_dotted:
- nUnderline = awt::FontUnderline::DOTTED;
- break;
- case NS_ooxml::LN_Value_ST_Underline_dash:
- nUnderline = awt::FontUnderline::DASH;
- break;
- case NS_ooxml::LN_Value_ST_Underline_dotDash:
- nUnderline = awt::FontUnderline::DASHDOT;
- break;
- case NS_ooxml::LN_Value_ST_Underline_dotDotDash:
- nUnderline = awt::FontUnderline::DASHDOTDOT;
- break;
- case NS_ooxml::LN_Value_ST_Underline_thick:
- nUnderline = awt::FontUnderline::BOLD;
- break;
- case NS_ooxml::LN_Value_ST_Underline_wave:
- nUnderline = awt::FontUnderline::WAVE;
- break;
- case NS_ooxml::LN_Value_ST_Underline_dottedHeavy:
- nUnderline = awt::FontUnderline::BOLDDOTTED;
- break;
- case NS_ooxml::LN_Value_ST_Underline_dashedHeavy:
- nUnderline = awt::FontUnderline::BOLDDASH;
- break;
- case NS_ooxml::LN_Value_ST_Underline_dashLong:
- nUnderline = awt::FontUnderline::LONGDASH;
- break;
- case NS_ooxml::LN_Value_ST_Underline_dashLongHeavy:
- nUnderline = awt::FontUnderline::BOLDLONGDASH;
- break;
- case NS_ooxml::LN_Value_ST_Underline_dashDotHeavy:
- nUnderline = awt::FontUnderline::BOLDDASHDOT;
- break;
- case NS_ooxml::LN_Value_ST_Underline_dashDotDotHeavy:
- nUnderline = awt::FontUnderline::BOLDDASHDOTDOT;
- break;
- case NS_ooxml::LN_Value_ST_Underline_wavyHeavy:
- nUnderline = awt::FontUnderline::BOLDWAVE;
- break;
- case NS_ooxml::LN_Value_ST_Underline_wavyDouble:
- nUnderline = awt::FontUnderline::DOUBLEWAVE;
- break;
- }
- rContext->Insert(PROP_CHAR_UNDERLINE, uno::makeAny(nUnderline));
-}
-
-void DomainMapper::handleParaJustification(const sal_Int32 nIntValue, const ::tools::SvRef<PropertyMap>& rContext, const bool bExchangeLeftRight)
-{
- style::ParagraphAdjust nAdjust = style::ParagraphAdjust_LEFT;
- style::ParagraphAdjust nLastLineAdjust = style::ParagraphAdjust_LEFT;
- OUString aStringValue = "left";
- switch(nIntValue)
- {
- case NS_ooxml::LN_Value_ST_Jc_center:
- nAdjust = style::ParagraphAdjust_CENTER;
- aStringValue = "center";
- break;
- case NS_ooxml::LN_Value_ST_Jc_right:
- case NS_ooxml::LN_Value_ST_Jc_end:
- nAdjust = bExchangeLeftRight ? style::ParagraphAdjust_LEFT : style::ParagraphAdjust_RIGHT;
- aStringValue = "right";
- break;
- case NS_ooxml::LN_Value_ST_Jc_distribute:
- nLastLineAdjust = style::ParagraphAdjust_BLOCK;
- [[fallthrough]];
- case NS_ooxml::LN_Value_ST_Jc_both:
- nAdjust = style::ParagraphAdjust_BLOCK;
- aStringValue = "both";
- break;
- case NS_ooxml::LN_Value_ST_Jc_left:
- case NS_ooxml::LN_Value_ST_Jc_start:
- default:
- nAdjust = bExchangeLeftRight ? style::ParagraphAdjust_RIGHT : style::ParagraphAdjust_LEFT;
- break;
- }
- rContext->Insert( PROP_PARA_ADJUST, uno::makeAny( nAdjust ) );
- rContext->Insert( PROP_PARA_LAST_LINE_ADJUST, uno::makeAny( nLastLineAdjust ) );
- m_pImpl->appendGrabBag(m_pImpl->m_aInteropGrabBag, "jc", aStringValue);
-}
-
-bool DomainMapper::getColorFromId(const Id nId, sal_Int32 &nColor)
-{
- nColor = 0;
- if ((nId < NS_ooxml::LN_Value_ST_HighlightColor_black) || (nId > NS_ooxml::LN_Value_ST_HighlightColor_none))
- return false;
-
- switch (nId)
- {
- case NS_ooxml::LN_Value_ST_HighlightColor_black: nColor=0x000000; break;
- case NS_ooxml::LN_Value_ST_HighlightColor_blue: nColor=0x0000ff; break;
- case NS_ooxml::LN_Value_ST_HighlightColor_cyan: nColor=0x00ffff; break;
- case NS_ooxml::LN_Value_ST_HighlightColor_green: nColor=0x00ff00; break;
- case NS_ooxml::LN_Value_ST_HighlightColor_magenta: nColor=0xff00ff; break;
- case NS_ooxml::LN_Value_ST_HighlightColor_red: nColor=0xff0000; break;
- case NS_ooxml::LN_Value_ST_HighlightColor_yellow: nColor=0xffff00; break;
- case NS_ooxml::LN_Value_ST_HighlightColor_white: nColor=0xffffff; break;
- case NS_ooxml::LN_Value_ST_HighlightColor_darkBlue: nColor=0x000080; break;
- case NS_ooxml::LN_Value_ST_HighlightColor_darkCyan: nColor=0x008080; break;
- case NS_ooxml::LN_Value_ST_HighlightColor_darkGreen: nColor=0x008000; break;
- case NS_ooxml::LN_Value_ST_HighlightColor_darkMagenta: nColor=0x800080; break;
- case NS_ooxml::LN_Value_ST_HighlightColor_darkRed: nColor=0x800000; break;
- case NS_ooxml::LN_Value_ST_HighlightColor_darkYellow: nColor=0x808000; break;
- case NS_ooxml::LN_Value_ST_HighlightColor_darkGray: nColor=0x808080; break;
- case NS_ooxml::LN_Value_ST_HighlightColor_lightGray: nColor=0xC0C0C0; break;
- case NS_ooxml::LN_Value_ST_HighlightColor_none: nColor=0xFFFFFFFF; break; //COL_AUTO
- default:
- return false;
- }
- return true;
-}
-
-sal_Int16 DomainMapper::getEmphasisValue(const sal_Int32 nIntValue)
-{
- switch (nIntValue)
- {
- case NS_ooxml::LN_Value_ST_Em_dot:
- return text::FontEmphasis::DOT_ABOVE;
- case NS_ooxml::LN_Value_ST_Em_comma:
- return text::FontEmphasis::ACCENT_ABOVE;
- case NS_ooxml::LN_Value_ST_Em_circle:
- return text::FontEmphasis::CIRCLE_ABOVE;
- case NS_ooxml::LN_Value_ST_Em_underDot:
- return text::FontEmphasis::DOT_BELOW;
- default:
- return text::FontEmphasis::NONE;
- }
-}
-
-OUString DomainMapper::getBracketStringFromEnum(const sal_Int32 nIntValue, const bool bIsPrefix)
-{
- switch(nIntValue)
- {
- case NS_ooxml::LN_Value_ST_CombineBrackets_round:
- if (bIsPrefix)
- return "(";
- return ")";
-
- case NS_ooxml::LN_Value_ST_CombineBrackets_square:
- if (bIsPrefix)
- return "[";
- return "]";
-
- case NS_ooxml::LN_Value_ST_CombineBrackets_angle:
- if (bIsPrefix)
- return "<";
- return ">";
-
- case NS_ooxml::LN_Value_ST_CombineBrackets_curly:
- if (bIsPrefix)
- return "{";
- return "}";
-
- case NS_ooxml::LN_Value_ST_CombineBrackets_none:
- default:
- return OUString();
- }
-}
-
-style::TabAlign DomainMapper::getTabAlignFromValue(const sal_Int32 nIntValue)
-{
- switch (nIntValue)
- {
- case NS_ooxml::LN_Value_ST_TabJc_start:
- case NS_ooxml::LN_Value_ST_TabJc_left:
- case NS_ooxml::LN_Value_ST_TabJc_bar: // bar not supported
- case NS_ooxml::LN_Value_ST_TabJc_num: // num not supported
- return style::TabAlign_LEFT;
- case NS_ooxml::LN_Value_ST_TabJc_center:
- return style::TabAlign_CENTER;
- case NS_ooxml::LN_Value_ST_TabJc_end:
- case NS_ooxml::LN_Value_ST_TabJc_right:
- return style::TabAlign_RIGHT;
- case NS_ooxml::LN_Value_ST_TabJc_decimal:
- return style::TabAlign_DECIMAL;
- }
- return style::TabAlign_LEFT;
-}
-
-sal_Unicode DomainMapper::getFillCharFromValue(const sal_Int32 nIntValue)
-{
- switch (nIntValue)
- {
- case NS_ooxml::LN_Value_ST_TabTlc_dot:
- return u'.';
- case NS_ooxml::LN_Value_ST_TabTlc_hyphen:
- return u'-';
- case NS_ooxml::LN_Value_ST_TabTlc_underscore:
- case NS_ooxml::LN_Value_ST_TabTlc_heavy: // FIXME ???
- return u'_';
- case NS_ooxml::LN_Value_ST_TabTlc_middleDot: // middleDot
- return u'\x00b7';
- case NS_ooxml::LN_Value_ST_TabTlc_none:
- default:
- return u' '; // blank space
- }
-}
-
-bool DomainMapper::IsOOXMLImport() const
-{
- return m_pImpl->IsOOXMLImport();
-}
-
-bool DomainMapper::IsRTFImport() const
-{
- return m_pImpl->IsRTFImport();
-}
-
-uno::Reference < lang::XMultiServiceFactory > const & DomainMapper::GetTextFactory() const
-{
- return m_pImpl->GetTextFactory();
-}
-
-uno::Reference< text::XTextRange > DomainMapper::GetCurrentTextRange()
-{
- if (m_pImpl->HasTopText())
- return m_pImpl->GetTopTextAppend()->getEnd();
- return m_pImpl->m_xInsertTextRange;
-}
-
-OUString DomainMapper::getOrCreateCharStyle( PropertyValueVector_t& rCharProperties, bool bAlwaysCreate )
-{
- StyleSheetTablePtr pStyleSheets = m_pImpl->GetStyleSheetTable();
- return pStyleSheets->getOrCreateCharStyle( rCharProperties, bAlwaysCreate );
-}
-
-StyleSheetTablePtr const & DomainMapper::GetStyleSheetTable( )
-{
- return m_pImpl->GetStyleSheetTable( );
-}
-
-SettingsTablePtr const & DomainMapper::GetSettingsTable()
-{
- return m_pImpl->GetSettingsTable();
-}
-
-GraphicZOrderHelper* DomainMapper::graphicZOrderHelper()
-{
- if (zOrderHelper == nullptr)
- zOrderHelper.reset( new GraphicZOrderHelper );
- return zOrderHelper.get();
-}
-
-GraphicNamingHelper& DomainMapper::GetGraphicNamingHelper()
-{
- if (m_pGraphicNamingHelper == nullptr)
- m_pGraphicNamingHelper.reset(new GraphicNamingHelper());
- return *m_pGraphicNamingHelper;
-}
-
-uno::Reference<drawing::XShape> DomainMapper::PopPendingShape()
-{
- return m_pImpl->PopPendingShape();
-}
-
-bool DomainMapper::IsInHeaderFooter() const
-{
- return m_pImpl->IsInHeaderFooter();
-}
-
-bool DomainMapper::IsInShape() const { return m_pImpl->IsInShape(); }
-
-bool DomainMapper::IsInTable() const
-{
- return m_pImpl->hasTableManager() && m_pImpl->getTableManager().isInCell();
-}
-
-OUString DomainMapper::GetListStyleName(sal_Int32 nListId) const
-{
- return m_pImpl->GetListStyleName( nListId );
-}
-
-bool DomainMapper::IsStyleSheetImport() const
-{
- return m_pImpl->IsStyleSheetImport();
-}
-
-void DomainMapper::enableInteropGrabBag(const OUString& aName)
-{
- m_pImpl->m_aInteropGrabBagName = aName;
-}
-
-beans::PropertyValue DomainMapper::getInteropGrabBag()
-{
- beans::PropertyValue aRet;
- aRet.Name = m_pImpl->m_aInteropGrabBagName;
- aRet.Value <<= comphelper::containerToSequence(m_pImpl->m_aInteropGrabBag);
-
- m_pImpl->m_aInteropGrabBag.clear();
- m_pImpl->m_aInteropGrabBagName.clear();
- return aRet;
-}
-
-void DomainMapper::HandleRedline( Sprm& rSprm )
-{
- sal_uInt32 nSprmId = rSprm.getId();
-
- m_pImpl->AddNewRedline( nSprmId );
-
- if (nSprmId == NS_ooxml::LN_CT_PPr_pPrChange)
- {
- m_pImpl->SetCurrentRedlineToken(XML_ParagraphFormat);
- }
- else if (nSprmId == NS_ooxml::LN_CT_TrPr_ins)
- {
- m_pImpl->SetCurrentRedlineToken(XML_tableRowInsert);
- }
- else if (nSprmId == NS_ooxml::LN_CT_TrPr_del)
- {
- m_pImpl->SetCurrentRedlineToken(XML_tableRowDelete);
- }
- else if (nSprmId == NS_ooxml::LN_CT_TcPrBase_cellIns)
- {
- m_pImpl->SetCurrentRedlineToken(XML_tableCellInsert);
- }
- else if (nSprmId == NS_ooxml::LN_CT_TcPrBase_cellDel)
- {
- m_pImpl->SetCurrentRedlineToken(XML_tableCellDelete);
- }
-
- resolveSprmProps(*this, rSprm );
- // now the properties author, date and id should be available
- sal_Int32 nToken = m_pImpl->GetCurrentRedlineToken();
- switch( nToken & 0xffff )
- {
- case XML_mod:
- case XML_ins:
- case XML_del:
- case XML_moveTo:
- case XML_moveFrom:
- case XML_ParagraphFormat:
- case XML_tableRowInsert:
- case XML_tableRowDelete:
- case XML_tableCellInsert:
- case XML_tableCellDelete:
- break;
- default: OSL_FAIL( "redline token other than mod, ins, del, moveTo, moveFrom or table row" ); break;
- }
- m_pImpl->EndParaMarkerChange( );
- m_pImpl->SetCurrentRedlineIsRead();
-}
-
-void DomainMapper::finishParagraph(const bool bRemove, const bool bNoNumbering)
-{
- if (m_pImpl->m_pSdtHelper->validateDateFormat())
- m_pImpl->m_pSdtHelper->createDateContentControl();
- m_pImpl->finishParagraph(m_pImpl->GetTopContextOfType(CONTEXT_PARAGRAPH), bRemove, bNoNumbering);
-}
-
-} //namespace writerfilter
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/DomainMapper.hxx b/writerfilter/source/dmapper/DomainMapper.hxx
deleted file mode 100644
index d2e08a0041aa..000000000000
--- a/writerfilter/source/dmapper/DomainMapper.hxx
+++ /dev/null
@@ -1,182 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * 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 .
- */
-#pragma once
-
-#include <dmapper/DomainMapperFactory.hxx>
-#include "LoggedResources.hxx"
-#include "PropertyMap.hxx"
-#include "SettingsTable.hxx"
-#include <com/sun/star/lang/XComponent.hpp>
-#include <com/sun/star/style/TabAlign.hpp>
-
-#include <map>
-#include <vector>
-#include <memory>
-
-namespace com::sun::star{
- namespace beans{
- struct PropertyValue;
- }
- namespace io{
- class XInputStream;
- }
- namespace uno{
- class XComponentContext;
- }
- namespace lang{
- class XMultiServiceFactory;
- }
- namespace text{
- class XTextRange;
- }
-}
-
-namespace utl
-{
-class MediaDescriptor;
-}
-
-typedef std::vector<css::beans::PropertyValue> PropertyValueVector_t;
-
-namespace writerfilter::dmapper
-{
-
-class PropertyMap;
-class DomainMapper_Impl;
-class ListsManager;
-class StyleSheetTable;
-class GraphicZOrderHelper;
-class GraphicNamingHelper;
-
-typedef tools::SvRef<StyleSheetTable> StyleSheetTablePtr;
-
-class DomainMapper : public LoggedProperties, public LoggedTable,
- public BinaryObj, public LoggedStream
-{
- std::unique_ptr<DomainMapper_Impl> m_pImpl;
-
-public:
- DomainMapper(const css::uno::Reference<css::uno::XComponentContext>& xContext,
- css::uno::Reference<css::io::XInputStream> const& xInputStream,
- css::uno::Reference<css::lang::XComponent> const& xModel,
- bool bRepairStorage,
- SourceDocumentType eDocumentType,
- utl::MediaDescriptor const & rMediaDesc);
- virtual ~DomainMapper() override;
-
- // Stream
- virtual void markLastParagraphInSection() override;
- virtual void markLastSectionGroup() override;
-
- // BinaryObj
- virtual void data(const sal_uInt8* buf, size_t len) override;
-
- void sprmWithProps( Sprm& sprm, const PropertyMapPtr& pContext );
-
- void PushStyleSheetProperties( const PropertyMapPtr& pStyleProperties, bool bAffectTableMngr = false );
- void PopStyleSheetProperties( bool bAffectTableMngr = false );
-
- void PushListProperties( const ::tools::SvRef<PropertyMap>& pListProperties );
- void PopListProperties();
- OUString GetListStyleName(sal_Int32 nListId) const;
-
- bool IsOOXMLImport() const;
- bool IsRTFImport() const;
- css::uno::Reference<css::lang::XMultiServiceFactory> const & GetTextFactory() const;
- css::uno::Reference<css::text::XTextRange> GetCurrentTextRange();
-
- OUString getOrCreateCharStyle( PropertyValueVector_t& rCharProperties, bool bAlwaysCreate );
- StyleSheetTablePtr const & GetStyleSheetTable( );
- SettingsTablePtr const & GetSettingsTable();
- GraphicZOrderHelper* graphicZOrderHelper();
- GraphicNamingHelper& GetGraphicNamingHelper();
-
- /// Return the first from the pending (not inserted to the document) shapes, if there are any.
- css::uno::Reference<css::drawing::XShape> PopPendingShape();
-
- bool IsInHeaderFooter() const;
- bool IsInTable() const;
- bool IsStyleSheetImport() const;
- bool IsInShape() const;
-
- void hasControls( const bool bSet ) { mbHasControls = bSet; }
-
- /**
- @see DomainMapper_Impl::processDeferredCharacterProperties()
- */
- void processDeferredCharacterProperties(const std::map<sal_Int32, css::uno::Any>& rDeferredCharacterProperties);
-
- /// Enable storing of seen tokens in a named grab bag.
- void enableInteropGrabBag(const OUString& aName);
- /// Get the stored tokens and clear the internal storage.
- css::beans::PropertyValue getInteropGrabBag();
-
- void HandleRedline( Sprm& rSprm );
-
-private:
- // Stream
- virtual void lcl_startSectionGroup() override;
- virtual void lcl_endSectionGroup() override;
- virtual void lcl_startParagraphGroup() override;
- virtual void lcl_endParagraphGroup() override;
- virtual void lcl_startCharacterGroup() override;
- virtual void lcl_endCharacterGroup() override;
- virtual void lcl_startShape(css::uno::Reference<css::drawing::XShape> const& xShape) override;
- virtual void lcl_endShape( ) override;
-
- virtual void lcl_text(const sal_uInt8 * data, size_t len) override;
- virtual void lcl_utext(const sal_uInt8 * data, size_t len) override;
- virtual void lcl_positionOffset(const OUString& rText, bool bVertical) override;
- virtual css::awt::Point getPositionOffset() override;
- virtual void lcl_align(const OUString& rText, bool bVertical) override;
- virtual void lcl_positivePercentage(const OUString& rText) override;
- virtual void lcl_props(writerfilter::Reference<Properties>::Pointer_t ref) override;
- virtual void lcl_table(Id name,
- writerfilter::Reference<Table>::Pointer_t ref) override;
- virtual void lcl_substream(Id name,
- ::writerfilter::Reference<Stream>::Pointer_t ref) override;
- virtual void lcl_startGlossaryEntry() override;
- virtual void lcl_endGlossaryEntry() override;
-
- // Properties
- virtual void lcl_attribute(Id Name, Value & val) override;
- virtual void lcl_sprm(Sprm & sprm) override;
-
- // Table
- virtual void lcl_entry(writerfilter::Reference<Properties>::Pointer_t ref) override;
-
- void finishParagraph(const bool bRemove = false, const bool bNoNumbering = false);
-
- static void handleUnderlineType(const Id nId, const ::tools::SvRef<PropertyMap>& rContext);
- void handleParaJustification(const sal_Int32 nIntValue, const ::tools::SvRef<PropertyMap>& rContext, const bool bExchangeLeftRight);
- static bool getColorFromId(const Id, sal_Int32 &nColor);
- static sal_Int16 getEmphasisValue(const sal_Int32 nIntValue);
- static OUString getBracketStringFromEnum(const sal_Int32 nIntValue, const bool bIsPrefix = true);
- static css::style::TabAlign getTabAlignFromValue(const sal_Int32 nIntValue);
- static sal_Unicode getFillCharFromValue(const sal_Int32 nIntValue);
- bool mbIsSplitPara;
- bool mbHasControls;
- std::unique_ptr< GraphicZOrderHelper > zOrderHelper;
- std::unique_ptr<GraphicNamingHelper> m_pGraphicNamingHelper;
- OUString m_sGlossaryEntryName;
-};
-
-} // namespace writerfilter::dmapper
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/DomainMapperTableHandler.cxx b/writerfilter/source/dmapper/DomainMapperTableHandler.cxx
deleted file mode 100644
index fd21827211bb..000000000000
--- a/writerfilter/source/dmapper/DomainMapperTableHandler.cxx
+++ /dev/null
@@ -1,1697 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * 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 .
- */
-
-#include <sal/config.h>
-
-#include <string_view>
-
-#include "DomainMapperTableHandler.hxx"
-#include "DomainMapper_Impl.hxx"
-#include "StyleSheetTable.hxx"
-#include <com/sun/star/style/ParagraphAdjust.hpp>
-#include <com/sun/star/table/TableBorderDistances.hpp>
-#include <com/sun/star/table/TableBorder.hpp>
-#include <com/sun/star/table/BorderLine2.hpp>
-#include <com/sun/star/table/BorderLineStyle.hpp>
-#include <com/sun/star/table/XCellRange.hpp>
-#include <com/sun/star/text/HoriOrientation.hpp>
-#include <com/sun/star/text/SizeType.hpp>
-#include <com/sun/star/text/XTextField.hpp>
-#include <com/sun/star/text/XTextRangeCompare.hpp>
-#include <com/sun/star/beans/XPropertySet.hpp>
-#include <com/sun/star/beans/XPropertyState.hpp>
-#include <com/sun/star/container/XEnumeration.hpp>
-#include <com/sun/star/container/XEnumerationAccess.hpp>
-#include <com/sun/star/drawing/FillStyle.hpp>
-#include "TablePositionHandler.hxx"
-#include "TagLogger.hxx"
-#include "util.hxx"
-#include <osl/diagnose.h>
-#include <sal/log.hxx>
-#include <tools/diagnose_ex.h>
-#include <comphelper/sequence.hxx>
-#include <comphelper/propertyvalue.hxx>
-#include <com/sun/star/lang/IndexOutOfBoundsException.hpp>
-#include <boost/lexical_cast.hpp>
-
-#ifdef DBG_UTIL
-#include "PropertyMapHelper.hxx"
-#include <rtl/ustring.hxx>
-#endif
-
-namespace writerfilter::dmapper {
-
-using namespace ::com::sun::star;
-using namespace ::std;
-
-#define DEF_BORDER_DIST 190 //0,19cm
-#define CNF_FIRST_ROW 0x800
-#define CNF_LAST_ROW 0x400
-#define CNF_FIRST_COLUMN 0x200
-#define CNF_LAST_COLUMN 0x100
-#define CNF_ODD_VBAND 0x080
-#define CNF_EVEN_VBAND 0x040
-#define CNF_ODD_HBAND 0x020
-#define CNF_EVEN_HBAND 0x010
-#define CNF_FIRST_ROW_LAST_COLUMN 0x008
-#define CNF_FIRST_ROW_FIRST_COLUMN 0x004
-#define CNF_LAST_ROW_LAST_COLUMN 0x002
-#define CNF_LAST_ROW_FIRST_COLUMN 0x001
-#define CNF_ALL 0xFFF
-
-// total number of table columns
-#define MAXTABLECELLS 63
-
-DomainMapperTableHandler::DomainMapperTableHandler(
- css::uno::Reference<css::text::XTextAppendAndConvert> const& xText,
- DomainMapper_Impl& rDMapper_Impl)
- : m_xText(xText),
- m_rDMapper_Impl( rDMapper_Impl ),
- m_bHadFootOrEndnote(false)
-{
-}
-
-DomainMapperTableHandler::~DomainMapperTableHandler()
-{
-}
-
-void DomainMapperTableHandler::startTable(const TablePropertyMapPtr& pProps)
-{
- m_aTableProperties = pProps;
- m_aTableRanges.clear();
-
-#ifdef DBG_UTIL
- TagLogger::getInstance().startElement("tablehandler.table");
-
- if (pProps)
- pProps->dumpXml();
-#endif
-}
-
-static void lcl_mergeBorder( PropertyIds nId, const PropertyMapPtr& pOrig, const PropertyMapPtr& pDest )
-{
- std::optional<PropertyMap::Property> pOrigVal = pOrig->getProperty(nId);
-
- if ( pOrigVal )
- {
- pDest->Insert( nId, pOrigVal->second, false );
- }
-}
-
-static void lcl_computeCellBorders( const PropertyMapPtr& pTableBorders, const PropertyMapPtr& pCellProps,
- sal_uInt32 nCell, sal_uInt32 nFirstCell, sal_uInt32 nLastCell, sal_Int32 nRow, bool bIsEndRow, bool bMergedVertically )
-{
- const bool bIsStartCol = nCell == nFirstCell;
- const bool bIsEndCol = nCell == nLastCell;
- std::optional<PropertyMap::Property> pVerticalVal = pCellProps->getProperty(META_PROP_VERTICAL_BORDER);
- std::optional<PropertyMap::Property> pHorizontalVal = pCellProps->getProperty(META_PROP_HORIZONTAL_BORDER);
-
- // Handle the vertical and horizontal borders
- uno::Any aVertProp;
- if ( !pVerticalVal)
- {
- pVerticalVal = pTableBorders->getProperty(META_PROP_VERTICAL_BORDER);
- if ( pVerticalVal )
- aVertProp = pVerticalVal->second;
- }
- else
- {
- aVertProp = pVerticalVal->second;
- pCellProps->Erase( pVerticalVal->first );
- }
-
- uno::Any aHorizProp;
- if ( !pHorizontalVal )
- {
- pHorizontalVal = pTableBorders->getProperty(META_PROP_HORIZONTAL_BORDER);
- if ( pHorizontalVal )
- aHorizProp = pHorizontalVal->second;
- }
- else
- {
- aHorizProp = pHorizontalVal->second;
- pCellProps->Erase( pHorizontalVal->first );
- }
-
- if ( bIsStartCol )
- lcl_mergeBorder( PROP_LEFT_BORDER, pTableBorders, pCellProps );
-
- if ( bIsEndCol )
- lcl_mergeBorder( PROP_RIGHT_BORDER, pTableBorders, pCellProps );
-
- // <w:insideV> counts if there are multiple cells in this row.
- if ( pVerticalVal )
- {
- if ( !bIsEndCol && nCell >= nFirstCell )
- pCellProps->Insert( PROP_RIGHT_BORDER, aVertProp, false );
- if ( !bIsStartCol && nCell <= nLastCell )
- pCellProps->Insert( PROP_LEFT_BORDER, aVertProp, false );
- }
-
- if ( nRow == 0 )
- {
- lcl_mergeBorder( PROP_TOP_BORDER, pTableBorders, pCellProps );
- if ( pHorizontalVal && !bMergedVertically )
- pCellProps->Insert( PROP_BOTTOM_BORDER, aHorizProp, false );
- }
-
- if ( bMergedVertically )
- lcl_mergeBorder( PROP_BOTTOM_BORDER, pTableBorders, pCellProps );
-
- if ( bIsEndRow )
- {
- lcl_mergeBorder( PROP_BOTTOM_BORDER, pTableBorders, pCellProps );
- if ( pHorizontalVal )
- pCellProps->Insert( PROP_TOP_BORDER, aHorizProp, false );
- }
-
- if ( nRow > 0 && !bIsEndRow )
- {
- if ( pHorizontalVal )
- {
- pCellProps->Insert( PROP_TOP_BORDER, aHorizProp, false );
- pCellProps->Insert( PROP_BOTTOM_BORDER, aHorizProp, false );
- }
- }
-}
-
-#ifdef DBG_UTIL
-
-static void lcl_debug_BorderLine(table::BorderLine const & rLine)
-{
- TagLogger::getInstance().startElement("BorderLine");
- TagLogger::getInstance().attribute("Color", rLine.Color);
- TagLogger::getInstance().attribute("InnerLineWidth", rLine.InnerLineWidth);
- TagLogger::getInstance().attribute("OuterLineWidth", rLine.OuterLineWidth);
- TagLogger::getInstance().attribute("LineDistance", rLine.LineDistance);
- TagLogger::getInstance().endElement();
-}
-
-static void lcl_debug_TableBorder(table::TableBorder const & rBorder)
-{
- TagLogger::getInstance().startElement("TableBorder");
- lcl_debug_BorderLine(rBorder.TopLine);
- TagLogger::getInstance().attribute("IsTopLineValid", sal_uInt32(rBorder.IsTopLineValid));
- lcl_debug_BorderLine(rBorder.BottomLine);
- TagLogger::getInstance().attribute("IsBottomLineValid", sal_uInt32(rBorder.IsBottomLineValid));
- lcl_debug_BorderLine(rBorder.LeftLine);
- TagLogger::getInstance().attribute("IsLeftLineValid", sal_uInt32(rBorder.IsLeftLineValid));
- lcl_debug_BorderLine(rBorder.RightLine);
- TagLogger::getInstance().attribute("IsRightLineValid", sal_uInt32(rBorder.IsRightLineValid));
- lcl_debug_BorderLine(rBorder.VerticalLine);
- TagLogger::getInstance().attribute("IsVerticalLineValid", sal_uInt32(rBorder.IsVerticalLineValid));
- lcl_debug_BorderLine(rBorder.HorizontalLine);
- TagLogger::getInstance().attribute("IsHorizontalLineValid", sal_uInt32(rBorder.IsHorizontalLineValid));
- TagLogger::getInstance().attribute("Distance", rBorder.Distance);
- TagLogger::getInstance().attribute("IsDistanceValid", sal_uInt32(rBorder.IsDistanceValid));
- TagLogger::getInstance().endElement();
-}
-#endif
-
-struct TableInfo
-{
- sal_Int32 nLeftBorderDistance;
- sal_Int32 nRightBorderDistance;
- sal_Int32 nTopBorderDistance;
- sal_Int32 nBottomBorderDistance;
- sal_Int32 nTblLook;
- sal_Int32 nNestLevel;
- PropertyMapPtr pTableDefaults;
- PropertyMapPtr pTableBorders;
- TableStyleSheetEntry* pTableStyle;
- css::beans::PropertyValues aTableProperties;
- std::vector< PropertyIds > aTablePropertyIds;
-
- TableInfo()
- : nLeftBorderDistance(DEF_BORDER_DIST)
- , nRightBorderDistance(DEF_BORDER_DIST)
- , nTopBorderDistance(0)
- , nBottomBorderDistance(0)
- , nTblLook(0x4a0)
- , nNestLevel(0)
- , pTableDefaults(new PropertyMap)
- , pTableBorders(new PropertyMap)
- , pTableStyle(nullptr)
- {
- }
-
-};
-
-namespace
-{
-
-bool lcl_extractTableBorderProperty(const PropertyMapPtr& pTableProperties, const PropertyIds nId, TableInfo const & rInfo, table::BorderLine2& rLine)
-{
- if (!pTableProperties)
- return false;
-
- const std::optional<PropertyMap::Property> aTblBorder = pTableProperties->getProperty(nId);
- if( aTblBorder )
- {
- OSL_VERIFY(aTblBorder->second >>= rLine);
-
- rInfo.pTableBorders->Insert( nId, uno::makeAny( rLine ) );
- rInfo.pTableDefaults->Erase( nId );
-
- return true;
- }
-
- return false;
-}
-
-void lcl_extractHoriOrient(std::vector<beans::PropertyValue>& rFrameProperties, sal_Int32& nHoriOrient)
-{
- // Shifts the frame left by the given value.
- for (const beans::PropertyValue & rFrameProperty : rFrameProperties)
- {
- if (rFrameProperty.Name == "HoriOrient")
- {
- sal_Int32 nValue = rFrameProperty.Value.get<sal_Int32>();
- if (nValue != text::HoriOrientation::NONE)
- nHoriOrient = nValue;
- return;
- }
- }
-}
-
-void lcl_DecrementHoriOrientPosition(std::vector<beans::PropertyValue>& rFrameProperties, sal_Int32 nAmount)
-{
- // Shifts the frame left by the given value.
- for (beans::PropertyValue & rPropertyValue : rFrameProperties)
- {
- if (rPropertyValue.Name == "HoriOrientPosition")
- {
- sal_Int32 nValue = rPropertyValue.Value.get<sal_Int32>();
- nValue -= nAmount;
- rPropertyValue.Value <<= nValue;
- return;
- }
- }
-}
-
-void lcl_adjustBorderDistance(TableInfo& rInfo, const table::BorderLine2& rLeftBorder,
- const table::BorderLine2& rRightBorder)
-{
- // MS Word appears to do these things to adjust the cell horizontal area:
- //
- // bll = left borderline width
- // blr = right borderline width
- // cea = cell's edit area rectangle
- // cea_w = cea width
- // cml = cell's left margin (padding) defined in cell settings
- // cmr = cell's right margin (padding) defined in cell settings
- // cw = cell width (distance between middles of left borderline and right borderline)
- // pad_l = actual cea left padding = (its left pos relative to middle of bll)
- // pad_r = actual cea right padding = abs (its right pos relative to middle of blr)
- //
- // pad_l = max(bll/2, cml) -> cea does not overlap left borderline
- // cea_w = cw-max(pad_l+blr/2, cml+cmr) -> cea does not overlap right borderline
- // pad_r = max(pad_l+blr/2, cml+cmr) - pad_l
- //
- // It means that e.g. for border widths of 6 pt (~2.12 mm), left margin 0 mm, and right margin
- // 2 mm, actual left and right margins will (unexpectedly) coincide with inner edges of cell's
- // borderlines - the right margin won't create spacing between right of edit rectangle and the
- // inner edge of right borderline.
-
- const sal_Int32 nActualL
- = std::max<sal_Int32>(rLeftBorder.LineWidth / 2, rInfo.nLeftBorderDistance);
- const sal_Int32 nActualR
- = std::max<sal_Int32>(nActualL + rRightBorder.LineWidth / 2,
- rInfo.nLeftBorderDistance + rInfo.nRightBorderDistance)
- - nActualL;
- rInfo.nLeftBorderDistance = nActualL;
- rInfo.nRightBorderDistance = nActualR;
-}
-
-}
-
-TableStyleSheetEntry * DomainMapperTableHandler::endTableGetTableStyle(TableInfo & rInfo, std::vector<beans::PropertyValue>& rFrameProperties)
-{
- // will receive the table style if any
- TableStyleSheetEntry* pTableStyle = nullptr;
-
- if( m_aTableProperties )
- {
- //create properties from the table attributes
- //...pPropMap->Insert( PROP_LEFT_MARGIN, uno::makeAny( m_nLeftMargin - m_nGapHalf ));
- //pPropMap->Insert( PROP_HORI_ORIENT, uno::makeAny( text::HoriOrientation::RIGHT ));
- sal_Int32 nGapHalf = 0;
- sal_Int32 nLeftMargin = 0;
-
- comphelper::SequenceAsHashMap aGrabBag;
-
- if (nullptr != m_rDMapper_Impl.getTableManager().getCurrentTableRealPosition())
- {
- TablePositionHandler *pTablePositions = m_rDMapper_Impl.getTableManager().getCurrentTableRealPosition();
-
- uno::Sequence< beans::PropertyValue > aGrabBagTS( 10 );
-
- aGrabBagTS[0].Name = "bottomFromText";
- aGrabBagTS[0].Value <<= pTablePositions->getBottomFromText();
-
- aGrabBagTS[1].Name = "horzAnchor";
- aGrabBagTS[1].Value <<= pTablePositions->getHorzAnchor();
-
- aGrabBagTS[2].Name = "leftFromText";
- aGrabBagTS[2].Value <<= pTablePositions->getLeftFromText();
-
- aGrabBagTS[3].Name = "rightFromText";
- aGrabBagTS[3].Value <<= pTablePositions->getRightFromText();
-
- aGrabBagTS[4].Name = "tblpX";
- aGrabBagTS[4].Value <<= pTablePositions->getX();
-
- aGrabBagTS[5].Name = "tblpXSpec";
- aGrabBagTS[5].Value <<= pTablePositions->getXSpec();
-
- aGrabBagTS[6].Name = "tblpY";
- aGrabBagTS[6].Value <<= pTablePositions->getY();
-
- aGrabBagTS[7].Name = "tblpYSpec";
- aGrabBagTS[7].Value <<= pTablePositions->getYSpec();
-
- aGrabBagTS[8].Name = "topFromText";
- aGrabBagTS[8].Value <<= pTablePositions->getTopFromText();
-
- aGrabBagTS[9].Name = "vertAnchor";
- aGrabBagTS[9].Value <<= pTablePositions->getVertAnchor();
-
- aGrabBag["TablePosition"] <<= aGrabBagTS;
- }
-
- std::optional<PropertyMap::Property> aTableStyleVal = m_aTableProperties->getProperty(META_PROP_TABLE_STYLE_NAME);
- if(aTableStyleVal)
- {
- // Apply table style properties recursively
- OUString sTableStyleName;
- aTableStyleVal->second >>= sTableStyleName;
- StyleSheetTablePtr pStyleSheetTable = m_rDMapper_Impl.GetStyleSheetTable();
- const StyleSheetEntryPtr pStyleSheet = pStyleSheetTable->FindStyleSheetByISTD( sTableStyleName );
- pTableStyle = dynamic_cast<TableStyleSheetEntry*>( pStyleSheet.get( ) );
- m_aTableProperties->Erase( aTableStyleVal->first );
-
- aGrabBag["TableStyleName"] <<= sTableStyleName;
-
- if( pStyleSheet )
- {
- // First get the style properties, then the table ones
- PropertyMapPtr pTableProps( m_aTableProperties.get() );
- TablePropertyMapPtr pEmptyProps( new TablePropertyMap );
-
- m_aTableProperties = pEmptyProps;
-
- PropertyMapPtr pMergedProperties = pStyleSheet->GetMergedInheritedProperties(pStyleSheetTable);
-
- table::BorderLine2 aBorderLine;
- TableInfo rStyleInfo;
- if (lcl_extractTableBorderProperty(pMergedProperties, PROP_TOP_BORDER, rStyleInfo, aBorderLine))
- {
- aGrabBag["TableStyleTopBorder"] <<= aBorderLine;
- }
- if (lcl_extractTableBorderProperty(pMergedProperties, PROP_BOTTOM_BORDER, rStyleInfo, aBorderLine))
- {
- aGrabBag["TableStyleBottomBorder"] <<= aBorderLine;
- }
- if (lcl_extractTableBorderProperty(pMergedProperties, PROP_LEFT_BORDER, rStyleInfo, aBorderLine))
- {
- aGrabBag["TableStyleLeftBorder"] <<= aBorderLine;
- }
- if (lcl_extractTableBorderProperty(pMergedProperties, PROP_RIGHT_BORDER, rStyleInfo, aBorderLine))
- {
- aGrabBag["TableStyleRightBorder"] <<= aBorderLine;
- }
-
-#ifdef DBG_UTIL
- TagLogger::getInstance().startElement("mergedProps");
- if (pMergedProperties)
- pMergedProperties->dumpXml();
- TagLogger::getInstance().endElement();
-#endif
-
- m_aTableProperties->InsertProps(pMergedProperties);
- m_aTableProperties->InsertProps(pTableProps);
-
-#ifdef DBG_UTIL
- TagLogger::getInstance().startElement("TableProperties");
- m_aTableProperties->dumpXml();
- TagLogger::getInstance().endElement();
-#endif
- if (pTableStyle)
- {
- // apply tblHeader setting of the table style
- PropertyMapPtr pHeaderStyleProps = pTableStyle->GetProperties(CNF_FIRST_ROW);
- if ( pHeaderStyleProps->getProperty(PROP_HEADER_ROW_COUNT) )
- m_aTableProperties->Insert(PROP_HEADER_ROW_COUNT, uno::makeAny( sal_Int32(1)), false);
- }
- }
- }
-
- // This is the one preserving just all the table look attributes.
- std::optional<PropertyMap::Property> oTableLook = m_aTableProperties->getProperty(META_PROP_TABLE_LOOK);
- if (oTableLook)
- {
- aGrabBag["TableStyleLook"] = oTableLook->second;
- m_aTableProperties->Erase(oTableLook->first);
- }
-
- // This is just the "val" attribute's numeric value.
- const std::optional<PropertyMap::Property> aTblLook = m_aTableProperties->getProperty(PROP_TBL_LOOK);
- if(aTblLook)
- {
- aTblLook->second >>= rInfo.nTblLook;
- m_aTableProperties->Erase( aTblLook->first );
- }
-
- // apply cell margin settings of the table style
- const std::optional<PropertyMap::Property> oLeftMargin = m_aTableProperties->getProperty(META_PROP_CELL_MAR_LEFT);
- if (oLeftMargin)
- {
- oLeftMargin->second >>= rInfo.nLeftBorderDistance;
- m_aTableProperties->Erase(oLeftMargin->first);
- }
- const std::optional<PropertyMap::Property> oRightMargin = m_aTableProperties->getProperty(META_PROP_CELL_MAR_RIGHT);
- if (oRightMargin)
- {
- oRightMargin->second >>= rInfo.nRightBorderDistance;
- m_aTableProperties->Erase(oRightMargin->first);
- }
- const std::optional<PropertyMap::Property> oTopMargin = m_aTableProperties->getProperty(META_PROP_CELL_MAR_TOP);
- if (oTopMargin)
- {
- oTopMargin->second >>= rInfo.nTopBorderDistance;
- m_aTableProperties->Erase(oTopMargin->first);
- }
- const std::optional<PropertyMap::Property> oBottomMargin = m_aTableProperties->getProperty(META_PROP_CELL_MAR_BOTTOM);
- if (oBottomMargin)
- {
- oBottomMargin->second >>= rInfo.nBottomBorderDistance;
- m_aTableProperties->Erase(oBottomMargin->first);
- }
-
- // Set the table default attributes for the cells
- rInfo.pTableDefaults->InsertProps(m_aTableProperties.get());
-
-#ifdef DBG_UTIL
- TagLogger::getInstance().startElement("TableDefaults");
- rInfo.pTableDefaults->dumpXml();
- TagLogger::getInstance().endElement();
-#endif
-
- if (!aGrabBag.empty())
- {
- m_aTableProperties->Insert( PROP_TABLE_INTEROP_GRAB_BAG, uno::makeAny( aGrabBag.getAsConstPropertyValueList() ) );
- }
-
- m_aTableProperties->getValue( TablePropertyMap::GAP_HALF, nGapHalf );
-
- std::optional<PropertyMap::Property> oLeftMarginFromStyle = m_aTableProperties->getProperty(PROP_LEFT_MARGIN);
- if (oLeftMarginFromStyle)
- {
- oLeftMarginFromStyle->second >>= nLeftMargin;
- // don't need to erase, we will push back the adjusted value
- // of this (or the direct formatting, if that exists) later
- }
- m_aTableProperties->getValue( TablePropertyMap::LEFT_MARGIN, nLeftMargin );
-
- m_aTableProperties->getValue( TablePropertyMap::CELL_MAR_LEFT,
- rInfo.nLeftBorderDistance );
- m_aTableProperties->getValue( TablePropertyMap::CELL_MAR_RIGHT,
- rInfo.nRightBorderDistance );
- m_aTableProperties->getValue( TablePropertyMap::CELL_MAR_TOP,
- rInfo.nTopBorderDistance );
- m_aTableProperties->getValue( TablePropertyMap::CELL_MAR_BOTTOM,
- rInfo.nBottomBorderDistance );
-
- table::TableBorderDistances aDistances;
- aDistances.IsTopDistanceValid =
- aDistances.IsBottomDistanceValid =
- aDistances.IsLeftDistanceValid =
- aDistances.IsRightDistanceValid = true;
- aDistances.TopDistance = static_cast<sal_Int16>( rInfo.nTopBorderDistance );
- aDistances.BottomDistance = static_cast<sal_Int16>( rInfo.nBottomBorderDistance );
- aDistances.LeftDistance = static_cast<sal_Int16>( rInfo.nLeftBorderDistance );
- aDistances.RightDistance = static_cast<sal_Int16>( rInfo.nRightBorderDistance );
-
- m_aTableProperties->Insert( PROP_TABLE_BORDER_DISTANCES, uno::makeAny( aDistances ) );
-
- if (!rFrameProperties.empty())
- lcl_DecrementHoriOrientPosition(rFrameProperties, rInfo.nLeftBorderDistance);
-
- // Set table above/bottom spacing to 0.
- m_aTableProperties->Insert( PROP_TOP_MARGIN, uno::makeAny( sal_Int32( 0 ) ) );
- m_aTableProperties->Insert( PROP_BOTTOM_MARGIN, uno::makeAny( sal_Int32( 0 ) ) );
-
- //table border settings
- table::TableBorder aTableBorder;
- table::BorderLine2 aBorderLine, aLeftBorder, aRightBorder;
-
- if (lcl_extractTableBorderProperty(m_aTableProperties.get(), PROP_TOP_BORDER, rInfo, aBorderLine))
- {
- aTableBorder.TopLine = aBorderLine;
- aTableBorder.IsTopLineValid = true;
- }
- if (lcl_extractTableBorderProperty(m_aTableProperties.get(), PROP_BOTTOM_BORDER, rInfo, aBorderLine))
- {
- aTableBorder.BottomLine = aBorderLine;
- aTableBorder.IsBottomLineValid = true;
- }
- if (lcl_extractTableBorderProperty(m_aTableProperties.get(), PROP_LEFT_BORDER, rInfo, aLeftBorder))
- {
- aTableBorder.LeftLine = aLeftBorder;
- aTableBorder.IsLeftLineValid = true;
- }
- if (lcl_extractTableBorderProperty(m_aTableProperties.get(), PROP_RIGHT_BORDER, rInfo,
- aRightBorder))
- {
- aTableBorder.RightLine = aRightBorder;
- aTableBorder.IsRightLineValid = true;
- }
- if (lcl_extractTableBorderProperty(m_aTableProperties.get(), META_PROP_HORIZONTAL_BORDER, rInfo, aBorderLine))
- {
- aTableBorder.HorizontalLine = aBorderLine;
- aTableBorder.IsHorizontalLineValid = true;
- }
- if (lcl_extractTableBorderProperty(m_aTableProperties.get(), META_PROP_VERTICAL_BORDER, rInfo, aBorderLine))
- {
- aTableBorder.VerticalLine = aBorderLine;
- aTableBorder.IsVerticalLineValid = true;
- }
-
- aTableBorder.Distance = 0;
- aTableBorder.IsDistanceValid = false;
-
- m_aTableProperties->Insert( PROP_TABLE_BORDER, uno::makeAny( aTableBorder ) );
-
-#ifdef DBG_UTIL
- lcl_debug_TableBorder(aTableBorder);
-#endif
-
- // Table position in Office is computed in 2 different ways :
- // - top level tables: the goal is to have in-cell text starting at table indent pos (tblInd),
- // so table's position depends on table's cells margin
- // - nested tables: the goal is to have left-most border starting at table_indent pos
-
- // Only top level table position depends on border width of Column A.
- if ( !m_aCellProperties.empty() && !m_aCellProperties[0].empty() )
- {
- // aLeftBorder already contains tblBorder; overwrite if cell is different.
- std::optional<PropertyMap::Property> aCellBorder
- = m_aCellProperties[0][0]->getProperty(PROP_LEFT_BORDER);
- if ( aCellBorder )
- aCellBorder->second >>= aLeftBorder;
- aCellBorder = m_aCellProperties[0][0]->getProperty(PROP_RIGHT_BORDER);
- if (aCellBorder)
- aCellBorder->second >>= aRightBorder;
- }
- if (rInfo.nNestLevel == 1 && aLeftBorder.LineWidth && !rFrameProperties.empty())
- {
- lcl_DecrementHoriOrientPosition(rFrameProperties, aLeftBorder.LineWidth * 0.5);
- }
- lcl_adjustBorderDistance(rInfo, aLeftBorder, aRightBorder);
-
- // tdf#106742: since MS Word 2013 (compatibilityMode >= 15), top-level tables are handled the same as nested tables;
- // the default behavior when DOCX doesn't define "compatibilityMode" option is to add the cell spacing
-
- // Undefined should not be possible any more for DOCX, but it is for RTF.
- // In any case, continue to treat undefined as version 12 during import.
- sal_Int32 nMode = m_rDMapper_Impl.GetSettingsTable()->GetWordCompatibilityMode();
-
- if (((nMode < 0) || (0 < nMode && nMode <= 14)) && rInfo.nNestLevel == 1)
- {
- const sal_Int32 nAdjustedMargin = nLeftMargin - nGapHalf - rInfo.nLeftBorderDistance;
- m_aTableProperties->Insert( PROP_LEFT_MARGIN, uno::makeAny( nAdjustedMargin ) );
- }
- else
- {
- // Writer starts a table in the middle of the border.
- // Word starts a table at the left edge of the border,
- // so emulate that by adding the half the width. (also see docxattributeoutput)
- if ( rInfo.nNestLevel > 1 && nLeftMargin < 0 )
- nLeftMargin = 0;
- const sal_Int32 nAdjustedMargin = nLeftMargin - nGapHalf + (aLeftBorder.LineWidth / 2);
- m_aTableProperties->Insert( PROP_LEFT_MARGIN, uno::makeAny( nAdjustedMargin ) );
- }
-
- sal_Int32 nTableWidth = 0;
- sal_Int32 nTableWidthType = text::SizeType::FIX;
- m_aTableProperties->getValue( TablePropertyMap::TABLE_WIDTH, nTableWidth );
- m_aTableProperties->getValue( TablePropertyMap::TABLE_WIDTH_TYPE, nTableWidthType );
- if( nTableWidthType == text::SizeType::FIX )
- {
- if( nTableWidth > 0 )
- m_aTableProperties->Insert( PROP_WIDTH, uno::makeAny( nTableWidth ));
- else
- {
- // tdf#109524: If there is no width for the table, make it simply 100% by default.
- // TODO: use cell contents to evaluate width (according to ECMA-376-1:2016 17.18.87)
- nTableWidth = 100;
- nTableWidthType = text::SizeType::VARIABLE;
- }
- }
- if (nTableWidthType != text::SizeType::FIX)
- {
- m_aTableProperties->Insert( PROP_RELATIVE_WIDTH, uno::makeAny( sal_Int16( nTableWidth ) ) );
- m_aTableProperties->Insert( PROP_IS_WIDTH_RELATIVE, uno::makeAny( true ) );
- }
-
- sal_Int32 nHoriOrient = text::HoriOrientation::LEFT_AND_WIDTH;
- // Fetch Horizontal Orientation in rFrameProperties if not set in m_aTableProperties
- if ( !m_aTableProperties->getValue( TablePropertyMap::HORI_ORIENT, nHoriOrient ) )
- lcl_extractHoriOrient( rFrameProperties, nHoriOrient );
- m_aTableProperties->Insert( PROP_HORI_ORIENT, uno::makeAny( sal_Int16(nHoriOrient) ) );
- //fill default value - if not available
- m_aTableProperties->Insert( PROP_HEADER_ROW_COUNT, uno::makeAny( sal_Int32(0)), false);
-
- // if table is only a single row, and row is set as don't split, set the same value for the whole table.
- if( m_aRowProperties.size() == 1 && m_aRowProperties[0] )
- {
- std::optional<PropertyMap::Property> oSplitAllowed = m_aRowProperties[0]->getProperty(PROP_IS_SPLIT_ALLOWED);
- if( oSplitAllowed )
- {
- bool bRowCanSplit = true;
- oSplitAllowed->second >>= bRowCanSplit;
- if( !bRowCanSplit )
- m_aTableProperties->Insert( PROP_SPLIT, uno::makeAny(bRowCanSplit) );
- }
- }
-
- rInfo.aTableProperties = m_aTableProperties->GetPropertyValues();
- rInfo.aTablePropertyIds = m_aTableProperties->GetPropertyIds();
-
-#ifdef DBG_UTIL
- TagLogger::getInstance().startElement("debug.tableprops");
- m_aTableProperties->dumpXml();
- TagLogger::getInstance().endElement();
-#endif
-
- }
-
- return pTableStyle;
-}
-
-CellPropertyValuesSeq_t DomainMapperTableHandler::endTableGetCellProperties(TableInfo & rInfo, std::vector<HorizontallyMergedCell>& rMerges)
-{
-#ifdef DBG_UTIL
- TagLogger::getInstance().startElement("getCellProperties");
-#endif
-
- CellPropertyValuesSeq_t aCellProperties( m_aCellProperties.size() );
-
- if ( m_aCellProperties.empty() )
- {
- #ifdef DBG_UTIL
- TagLogger::getInstance().endElement();
- #endif
- return aCellProperties;
- }
- // std::vector< std::vector<PropertyMapPtr> > m_aCellProperties
- PropertyMapVector2::const_iterator aRowOfCellsIterator = m_aCellProperties.begin();
- PropertyMapVector2::const_iterator aRowOfCellsIteratorEnd = m_aCellProperties.end();
- PropertyMapVector2::const_iterator aLastRowIterator = m_aCellProperties.end() - 1;
- sal_Int32 nRow = 0;
-
- css::uno::Sequence<css::beans::PropertyValues>* pCellProperties = aCellProperties.getArray();
- PropertyMapVector1::const_iterator aRowIter = m_aRowProperties.begin();
- while( aRowOfCellsIterator != aRowOfCellsIteratorEnd )
- {
- //aRowOfCellsIterator points to a vector of PropertyMapPtr
- PropertyMapVector1::const_iterator aCellIterator = aRowOfCellsIterator->begin();
- PropertyMapVector1::const_iterator aCellIteratorEnd = aRowOfCellsIterator->end();
-
- sal_Int32 nRowStyleMask = 0;
-
- if (aRowOfCellsIterator==m_aCellProperties.begin())
- {
- if(rInfo.nTblLook&0x20)
- nRowStyleMask |= CNF_FIRST_ROW; // first row style used
- }
- else if (aRowOfCellsIterator==aLastRowIterator)
- {
- if(rInfo.nTblLook&0x40)
- nRowStyleMask |= CNF_LAST_ROW; // last row style used
- }
- else if (*aRowIter && (*aRowIter)->isSet(PROP_TBL_HEADER))
- nRowStyleMask |= CNF_FIRST_ROW; // table header implies first row
- if(!nRowStyleMask) // if no row style used yet
- {
- // banding used only if not first and or last row style used
- if(!(rInfo.nTblLook&0x200))
- { // hbanding used
- int n = nRow + 1;
- if(rInfo.nTblLook&0x20)
- n++;
- if(n & 1)
- nRowStyleMask = CNF_ODD_HBAND;
- else
- nRowStyleMask = CNF_EVEN_HBAND;
- }
- }
-
- // Note that this is intentionally called "cell" and not "column".
- // Don't make the mistake that all cell x's will be in the same column.
- // Merged cells (grid span) in a row will affect the actual column. (fake cells were added to handle gridBefore/After)
- sal_Int32 nCell = 0;
- pCellProperties[nRow].realloc( aRowOfCellsIterator->size() );
- beans::PropertyValues* pSingleCellProperties = pCellProperties[nRow].getArray();
-
- while( aCellIterator != aCellIteratorEnd )
- {
- PropertyMapPtr pAllCellProps( new PropertyMap );
-
- PropertyMapVector1::const_iterator aLastCellIterator = aRowOfCellsIterator->end() - 1;
- bool bIsEndCol = aCellIterator == aLastCellIterator;
- bool bIsEndRow = aRowOfCellsIterator == aLastRowIterator;
-
- //aCellIterator points to a PropertyMapPtr;
- if( *aCellIterator )
- {
- // remove directly applied insideV/H borders since they are meaningless without a context (tdf#82177)
- (*aCellIterator)->Erase(META_PROP_VERTICAL_BORDER);
- (*aCellIterator)->Erase(META_PROP_HORIZONTAL_BORDER);
-
- pAllCellProps->InsertProps(rInfo.pTableDefaults);
-
- sal_Int32 nCellStyleMask = 0;
- if (aCellIterator==aRowOfCellsIterator->begin())
- {
- if(rInfo.nTblLook&0x80)
- nCellStyleMask = CNF_FIRST_COLUMN; // first col style used
- }
- else if (bIsEndCol)
- {
- if(rInfo.nTblLook&0x100)
- nCellStyleMask = CNF_LAST_COLUMN; // last col style used
- }
- if(!nCellStyleMask) // if no cell style is used yet
- {
- if(!(rInfo.nTblLook&0x400))
- { // vbanding used
- int n = nCell + 1;
- if(rInfo.nTblLook&0x80)
- n++;
- if(n & 1)
- nCellStyleMask = CNF_ODD_VBAND;
- else
- nCellStyleMask = CNF_EVEN_VBAND;
- }
- }
- sal_Int32 nCnfStyleMask = nCellStyleMask + nRowStyleMask;
- if(nCnfStyleMask == CNF_FIRST_COLUMN + CNF_FIRST_ROW)
- nCnfStyleMask |= CNF_FIRST_ROW_FIRST_COLUMN;
- else if(nCnfStyleMask == CNF_FIRST_COLUMN + CNF_LAST_ROW)
- nCnfStyleMask |= CNF_LAST_ROW_FIRST_COLUMN;
- else if(nCnfStyleMask == CNF_LAST_COLUMN + CNF_FIRST_ROW)
- nCnfStyleMask |= CNF_FIRST_ROW_LAST_COLUMN;
- else if(nCnfStyleMask == CNF_LAST_COLUMN + CNF_LAST_ROW)
- nCnfStyleMask |= CNF_LAST_ROW_LAST_COLUMN;
-
- if ( rInfo.pTableStyle )
- {
- PropertyMapPtr pStyleProps = rInfo.pTableStyle->GetProperties( nCnfStyleMask );
-
- // Check if we need to clean up some empty border definitions to match what Word does.
- static const PropertyIds pBorders[] =
- {
- PROP_TOP_BORDER, PROP_LEFT_BORDER, PROP_BOTTOM_BORDER, PROP_RIGHT_BORDER
- };
- for (const PropertyIds& rBorder : pBorders)
- {
- std::optional<PropertyMap::Property> oStyleCellBorder = pStyleProps->getProperty(rBorder);
- std::optional<PropertyMap::Property> oDirectCellBorder = (*aCellIterator)->getProperty(rBorder);
- if (oStyleCellBorder && oDirectCellBorder)
- {
- // We have a cell border from the table style and as direct formatting as well.
- table::BorderLine2 aStyleCellBorder = oStyleCellBorder->second.get<table::BorderLine2>();
- table::BorderLine2 aDirectCellBorder = oDirectCellBorder->second.get<table::BorderLine2>();
- if (aStyleCellBorder.LineStyle != table::BorderLineStyle::NONE && aDirectCellBorder.LineStyle == table::BorderLineStyle::NONE)
- {
- // The style one would be visible, but then cleared away as direct formatting.
- // Delete both, so that table formatting can become visible.
- pStyleProps->Erase(rBorder);
- (*aCellIterator)->Erase(rBorder);
- }
- else
- {
- std::optional<PropertyMap::Property> oTableBorder = rInfo.pTableBorders->getProperty(rBorder);
- if (oTableBorder)
- {
- table::BorderLine2 aTableBorder = oTableBorder->second.get<table::BorderLine2>();
- // Both style and direct formatting says that the cell has no border.
- bool bNoCellBorder = aStyleCellBorder.LineStyle == table::BorderLineStyle::NONE && aDirectCellBorder.LineStyle == table::BorderLineStyle::NONE;
- if (aTableBorder.LineStyle != table::BorderLineStyle::NONE && bNoCellBorder)
- {
- // But at a table-level, there is a border, then again delete both cell properties.
- pStyleProps->Erase(rBorder);
- (*aCellIterator)->Erase(rBorder);
- }
- }
- }
- }
- }
-
- pAllCellProps->InsertProps( pStyleProps );
- }
-
- // Remove properties from style/row that aren't allowed in cells
- pAllCellProps->Erase( PROP_HEADER_ROW_COUNT );
- pAllCellProps->Erase( PROP_TBL_HEADER );
-
- // Then add the cell properties
- pAllCellProps->InsertProps(*aCellIterator);
- std::swap(*(*aCellIterator), *pAllCellProps );
-
-#ifdef DBG_UTIL
- TagLogger::getInstance().startElement("cell");
- TagLogger::getInstance().attribute("cell", nCell);
- TagLogger::getInstance().attribute("row", nRow);
-#endif
-
- // Do not apply horizontal and vertical borders to a one cell table.
- if (m_aCellProperties.size() <= 1 && aRowOfCellsIterator->size() <= 1)
- {
- rInfo.pTableBorders->Erase(META_PROP_HORIZONTAL_BORDER);
- rInfo.pTableBorders->Erase(META_PROP_VERTICAL_BORDER);
- }
- // Do not apply vertical borders to a one column table.
- else if (m_aCellProperties.size() > 1 && aRowOfCellsIterator->size() <= 1)
- {
- bool isOneCol = true;
- for (size_t i = nRow; i < m_aCellProperties.size(); i++)
- {
- if (m_aCellProperties[i].size() > 1)
- {
- isOneCol = false;
- break;
- }
- }
- if (isOneCol)
- rInfo.pTableBorders->Erase(META_PROP_VERTICAL_BORDER);
- }
- // Do not apply horizontal borders to a one row table.
- else if (m_aCellProperties.size() == 1 && aRowOfCellsIterator->size() > 1)
- {
- rInfo.pTableBorders->Erase(META_PROP_HORIZONTAL_BORDER);
- }
-
- // tdf#129452 Checking if current cell is vertically merged with all the other cells below to the bottom.
- // This must be done in order to apply the bottom border of the table to the first cell in a vertical merge.
- std::optional<PropertyMap::Property> oProp = m_aCellProperties[nRow][nCell]->getProperty(PROP_VERTICAL_MERGE);
- bool bMergedVertically = oProp && oProp->second.get<bool>(); // starting cell
- if ( bMergedVertically )
- {
- const sal_uInt32 nColumn = m_rDMapper_Impl.getTableManager().findColumn(nRow, nCell);
- sal_Int32 nLastMergedRow = 0;
- for (size_t i = nRow + 1; bMergedVertically && i < m_aCellProperties.size(); i++)
- {
- const sal_uInt32 nColumnCell = m_rDMapper_Impl.getTableManager().findColumnCell(i, nColumn);
- if ( m_aCellProperties[i].size() > sal::static_int_cast<std::size_t>(nColumnCell) )
- {
- oProp = m_aCellProperties[i][nColumnCell]->getProperty(PROP_VERTICAL_MERGE);
- bMergedVertically = oProp && !oProp->second.get<bool>(); //continuing cell
- if ( bMergedVertically )
- nLastMergedRow = i;
- }
- else
- bMergedVertically = false;
- }
-
- // Only consider the bottom border setting from the last merged cell.
- // Note: in MSO, left/right apply per-unmerged-row. Can't do that in LO, so just using the top cell's borders should be fine.
- if ( nRow < nLastMergedRow )
- {
- (*aCellIterator)->Erase(PROP_BOTTOM_BORDER);
- const sal_uInt32 nColumnCell = m_rDMapper_Impl.getTableManager().findColumnCell(nLastMergedRow, nColumn);
- lcl_mergeBorder( PROP_BOTTOM_BORDER, m_aCellProperties[nLastMergedRow][nColumnCell], *aCellIterator );
- }
- }
-
- const sal_uInt32 nFirstCell = m_rDMapper_Impl.getTableManager().getGridBefore(nRow);
- const sal_uInt32 nLastCell = m_aCellProperties[nRow].size() - m_rDMapper_Impl.getTableManager().getGridAfter(nRow) - 1;
- lcl_computeCellBorders( rInfo.pTableBorders, *aCellIterator, nCell, nFirstCell, nLastCell, nRow, bIsEndRow, bMergedVertically );
-
- //now set the default left+right border distance TODO: there's an sprm containing the default distance!
- aCellIterator->get()->Insert( PROP_LEFT_BORDER_DISTANCE,
- uno::makeAny(rInfo.nLeftBorderDistance ), false);
- aCellIterator->get()->Insert( PROP_RIGHT_BORDER_DISTANCE,
- uno::makeAny(rInfo.nRightBorderDistance ), false);
- aCellIterator->get()->Insert( PROP_TOP_BORDER_DISTANCE,
- uno::makeAny(rInfo.nTopBorderDistance ), false);
- aCellIterator->get()->Insert( PROP_BOTTOM_BORDER_DISTANCE,
- uno::makeAny(rInfo.nBottomBorderDistance ), false);
-
- // Horizontal merge is not a UNO property, extract that info here to rMerges, and then remove it from the map.
- const std::optional<PropertyMap::Property> aHorizontalMergeVal = (*aCellIterator)->getProperty(PROP_HORIZONTAL_MERGE);
- if (aHorizontalMergeVal)
- {
- if (aHorizontalMergeVal->second.get<bool>())
- {
- // first cell in a merge
- HorizontallyMergedCell aMerge(nRow, nCell);
- rMerges.push_back(aMerge);
- }
- else if (!rMerges.empty())
- {
- // resuming an earlier merge
- HorizontallyMergedCell& rMerge = rMerges.back();
- rMerge.m_nLastRow = nRow;
- rMerge.m_nLastCol = nCell;
- }
- (*aCellIterator)->Erase(PROP_HORIZONTAL_MERGE);
- }
- pSingleCellProperties[nCell] = (*aCellIterator)->GetPropertyValues();
-#ifdef DBG_UTIL
- TagLogger::getInstance().endElement();
-#endif
- }
- ++nCell;
- ++aCellIterator;
- }
- ++nRow;
- ++aRowOfCellsIterator;
- ++aRowIter;
- }
-
-#ifdef DBG_UTIL
- TagLogger::getInstance().endElement();
-#endif
-
- return aCellProperties;
-}
-
-/// Do all cells in this row have a CellHideMark property?
-static bool lcl_hideMarks(PropertyMapVector1& rCellProperties)
-{
- for (const PropertyMapPtr & p : rCellProperties)
- {
- // if anything is vertically merged, the row must not be set to fixed
- // as Writer's layout doesn't handle that well
- if (!p->isSet(PROP_CELL_HIDE_MARK) || p->isSet(PROP_VERTICAL_MERGE))
- return false;
- }
- return true;
-}
-
-/// Are all cells in this row empty?
-static bool lcl_emptyRow(std::vector<RowSequence_t>& rTableRanges, sal_Int32 nRow)
-{
- if (nRow >= static_cast<sal_Int32>(rTableRanges.size()))
- {
- SAL_WARN("writerfilter.dmapper", "m_aCellProperties not in sync with rTableRanges?");
- return false;
- }
-
- RowSequence_t rRowSeq = rTableRanges[nRow];
- if (!rRowSeq.hasElements())
- {
- SAL_WARN("writerfilter.dmapper", "m_aCellProperties not in sync with rTableRanges?");
- return false;
- }
-
- if (!rRowSeq[0][0].is())
- {
- // This can happen when we can't import the table, e.g. we're inside a
- // comment.
- SAL_WARN("writerfilter.dmapper", "rRowSeq[0][0] is an empty reference");
- return false;
- }
-
- uno::Reference<text::XTextRangeCompare> xTextRangeCompare(rRowSeq[0][0]->getText(), uno::UNO_QUERY);
- try
- {
- // See SwXText::Impl::ConvertCell(), we need to compare the start of
- // the start and the end of the end. However for our text ranges, only
- // the starts are set, so compareRegionStarts() does what we need.
- bool bRangesAreNotEqual = std::any_of(rRowSeq.begin(), rRowSeq.end(),
- [&xTextRangeCompare](const CellSequence_t& rCellSeq) {
- return xTextRangeCompare->compareRegionStarts(rCellSeq[0], rCellSeq[1]) != 0; });
- if (bRangesAreNotEqual)
- return false;
- }
- catch (const lang::IllegalArgumentException&)
- {
- TOOLS_WARN_EXCEPTION( "writerfilter.dmapper", "compareRegionStarts() failed");
- return false;
- }
- return true;
-}
-
-css::uno::Sequence<css::beans::PropertyValues> DomainMapperTableHandler::endTableGetRowProperties()
-{
-#ifdef DBG_UTIL
- TagLogger::getInstance().startElement("getRowProperties");
-#endif
-
- css::uno::Sequence<css::beans::PropertyValues> aRowProperties( m_aRowProperties.size() );
- sal_Int32 nRow = 0;
- for( const auto& rRow : m_aRowProperties )
- {
-#ifdef DBG_UTIL
- TagLogger::getInstance().startElement("rowProps.row");
-#endif
- if (rRow)
- {
- //set default to 'break across pages"
- rRow->Insert( PROP_IS_SPLIT_ALLOWED, uno::makeAny(true ), false );
- // tblHeader is only our property, remove before the property map hits UNO
- rRow->Erase(PROP_TBL_HEADER);
-
- if (lcl_hideMarks(m_aCellProperties[nRow]) && lcl_emptyRow(m_aTableRanges, nRow))
- {
- // We have CellHideMark on all cells, and also all cells are empty:
- // Force the row height to be exactly as specified, and not just as the minimum suggestion.
- rRow->Insert(PROP_SIZE_TYPE, uno::makeAny(text::SizeType::FIX));
- }
-
- aRowProperties[nRow] = rRow->GetPropertyValues();
-#ifdef DBG_UTIL
- rRow->dumpXml();
- lcl_DumpPropertyValues(aRowProperties[nRow]);
-#endif
- }
- ++nRow;
-#ifdef DBG_UTIL
- TagLogger::getInstance().endElement();
-#endif
- }
-
-#ifdef DBG_UTIL
- TagLogger::getInstance().endElement();
-#endif
-
- return aRowProperties;
-}
-
-// table style has got bigger precedence than docDefault style,
-// but lower precedence than the paragraph styles and direct paragraph formatting
-void DomainMapperTableHandler::ApplyParagraphPropertiesFromTableStyle(TableParagraph rParaProp, std::vector< PropertyIds > aAllTableParaProperties, css::beans::PropertyValues rCellProperties)
-{
- for( auto const& eId : aAllTableParaProperties )
- {
- // apply paragraph and character properties of the table style on table paragraphs
- // if there is no direct paragraph formatting
- bool bIsParaLevel = rParaProp.m_pPropertyMap->isSet(eId);
- if ( !bIsParaLevel || isCharacterProperty(eId) )
- {
- if ( (eId == PROP_PARA_LEFT_MARGIN || eId == PROP_PARA_FIRST_LINE_INDENT) &&
- rParaProp.m_pPropertyMap->isSet(PROP_NUMBERING_RULES) )
- {
- // indentation of direct numbering has bigger precedence, than table style
- continue;
- }
-
- OUString sPropertyName = getPropertyName(eId);
-
- if ( bIsParaLevel && ( rParaProp.m_aParaOverrideApplied.find(sPropertyName) != rParaProp.m_aParaOverrideApplied.end() ||
- sPropertyName.startsWith("CharFontName") ) )
- {
- // don't apply table style, if this character property was applied on paragraph level
- // (or in the case of paragraph level font name settings to avoid regressions)
- continue;
- }
-
- auto pCellProp = std::find_if(rCellProperties.begin(), rCellProperties.end(),
- [&](const beans::PropertyValue& rProp) { return rProp.Name == sPropertyName; });
- // this cell applies the table style property
- if (pCellProp != rCellProperties.end())
- {
- bool bDocDefault;
- // handle paragraph background color defined in CellColorHandler
- if (eId == PROP_FILL_COLOR)
- {
- // table style defines paragraph background color, use the correct property name
- auto pFillStyleProp = std::find_if(rCellProperties.begin(), rCellProperties.end(),
- [&](const beans::PropertyValue& rProp) { return rProp.Name == "FillStyle"; });
- if ( pFillStyleProp != rCellProperties.end() &&
- pFillStyleProp->Value == uno::makeAny(drawing::FillStyle_SOLID) )
- {
- sPropertyName = "ParaBackColor";
- }
- else
- {
- // FillStyle_NONE, skip table style usage for paragraph background color
- continue;
- }
- }
- OUString sParaStyleName;
- rParaProp.m_rPropertySet->getPropertyValue("ParaStyleName") >>= sParaStyleName;
- StyleSheetEntryPtr pEntry = m_rDMapper_Impl.GetStyleSheetTable()->FindStyleSheetByConvertedStyleName(sParaStyleName);
- uno::Any aParaStyle = m_rDMapper_Impl.GetPropertyFromStyleSheet(eId, pEntry, true, true, &bDocDefault);
- // A very strange compatibility rule says that the DEFAULT style's specified fontsize of 11 or 12
- // or a specified left justify will always be overridden by the table-style.
- // Normally this rule is applied, so always do this unless a compatSetting indicates otherwise.
- bool bCompatOverride = false;
- if ( (eId == PROP_CHAR_HEIGHT || eId == PROP_PARA_ADJUST) && sParaStyleName == m_rDMapper_Impl.GetDefaultParaStyleName() )
- {
- if ( eId == PROP_CHAR_HEIGHT )
- bCompatOverride = aParaStyle == uno::Any(double(11)) || aParaStyle == uno::Any(double(12));
- else if ( eId == PROP_PARA_ADJUST )
- {
- style::ParagraphAdjust eAdjust(style::ParagraphAdjust_CENTER);
- aParaStyle >>= eAdjust;
- bCompatOverride = eAdjust == style::ParagraphAdjust_LEFT;
- }
-
- // The wording is confusing here. Normally, the paragraph style DOES override the table-style.
- // But for these two special situations, do not override the table-style. So the default is false.
- // If false, then "CompatOverride" the normal behaviour, and apply the table-style's value.
- bCompatOverride &= !m_rDMapper_Impl.GetSettingsTable()->GetCompatSettingValue(u"overrideTableStyleFontSizeAndJustification");
- }
-
- // use table style when no paragraph style setting or a docDefault value is applied instead of it
- if ( aParaStyle == uno::Any() || bDocDefault || bCompatOverride ) try
- {
- // check property state of paragraph
- uno::Reference<text::XParagraphCursor> xParagraph(
- rParaProp.m_rEndParagraph->getText()->createTextCursorByRange(rParaProp.m_rEndParagraph), uno::UNO_QUERY_THROW );
- // select paragraph
- xParagraph->gotoStartOfParagraph( true );
- uno::Reference< beans::XPropertyState > xParaProperties( xParagraph, uno::UNO_QUERY_THROW );
- if ( xParaProperties->getPropertyState(sPropertyName) == css::beans::PropertyState_DEFAULT_VALUE )
- {
- if ( eId != PROP_FILL_COLOR )
- {
- // apply style setting when the paragraph doesn't modify it
- rParaProp.m_rPropertySet->setPropertyValue( sPropertyName, pCellProp->Value );
- }
- else
- {
- // we need this for complete import of table-style based paragraph background color
- rParaProp.m_rPropertySet->setPropertyValue( "FillColor", pCellProp->Value );
- rParaProp.m_rPropertySet->setPropertyValue( "FillStyle", uno::makeAny(drawing::FillStyle_SOLID) );
- }
- }
- else
- {
- // apply style setting only on text portions without direct modification of it
- uno::Reference<container::XEnumerationAccess> xParaEnumAccess(xParagraph, uno::UNO_QUERY);
- uno::Reference<container::XEnumeration> xParaEnum = xParaEnumAccess->createEnumeration();
- uno::Reference<container::XEnumerationAccess> xRunEnumAccess(xParaEnum->nextElement(), uno::UNO_QUERY);
- uno::Reference<container::XEnumeration> xRunEnum = xRunEnumAccess->createEnumeration();
- while ( xRunEnum->hasMoreElements() )
- {
- uno::Reference<text::XTextRange> xRun(xRunEnum->nextElement(), uno::UNO_QUERY);
- uno::Reference< beans::XPropertyState > xRunProperties( xRun, uno::UNO_QUERY_THROW );
- if ( xRunProperties->getPropertyState(sPropertyName) == css::beans::PropertyState_DEFAULT_VALUE )
- {
- uno::Reference< beans::XPropertySet > xRunPropertySet( xRun, uno::UNO_QUERY_THROW );
- xRunPropertySet->setPropertyValue( sPropertyName, pCellProp->Value );
- }
- }
- }
- }
- catch ( const uno::Exception & )
- {
- TOOLS_INFO_EXCEPTION("writerfilter.dmapper", "Exception during table style correction");
- }
- }
- }
- }
-}
-
-// convert formula range identifier ABOVE, BELOW, LEFT and RIGHT
-static void lcl_convertFormulaRanges(const uno::Reference<text::XTextTable> & xTable)
-{
- uno::Reference<table::XCellRange> xCellRange(xTable, uno::UNO_QUERY_THROW);
- uno::Reference<container::XIndexAccess> xTableRows(xTable->getRows(), uno::UNO_QUERY_THROW);
- sal_Int32 nRows = xTableRows->getCount();
- for (sal_Int32 nRow = 0; nRow < nRows; ++nRow)
- {
- for (sal_Int16 nCol = 0; nCol < MAXTABLECELLS; ++nCol)
- {
- try
- {
- uno::Reference<beans::XPropertySet> xCellProperties(xCellRange->getCellByPosition(nCol, nRow), uno::UNO_QUERY_THROW);
- uno::Sequence<beans::PropertyValue> aCellGrabBag;
- xCellProperties->getPropertyValue("CellInteropGrabBag") >>= aCellGrabBag;
- OUString sFormula;
- bool bReplace = false;
- for (const auto& rProp : std::as_const(aCellGrabBag))
- {
- if ( rProp.Name == "CellFormulaConverted" )
- {
- rProp.Value >>= sFormula;
- struct RangeDirection
- {
- OUString m_sName;
- sal_Int16 m_nCol;
- sal_Int16 m_nRow;
- };
- static const RangeDirection pDirections[] =
- {
- { OUString(" LEFT "), -1, 0},
- { OUString(" RIGHT "), 1, 0},
- { OUString(" ABOVE "), 0, -1},
- { OUString(" BELOW "), 0, 1 }
- };
- for (const RangeDirection& rRange : pDirections)
- {
- if ( sFormula.indexOf(rRange.m_sName) > -1 )
- {
- // range starts at the first cell above/below/left/right, but ends at the
- // table border or at the first non-value cell after a value cell
- bool bFoundFirst = false;
- OUString sNextCell;
- OUString sLastCell;
- OUString sLastValueCell;
- // walk through the cells of the range
- try
- {
- sal_Int32 nCell = 0;
- while (++nCell)
- {
- uno::Reference<beans::XPropertySet> xCell(
- xCellRange->getCellByPosition(nCol + nCell * rRange.m_nCol, nRow + nCell * rRange.m_nRow),
- uno::UNO_QUERY_THROW);
- // empty cell or cell with text content is end of the range
- uno::Reference<text::XText> xText(xCell, uno::UNO_QUERY_THROW);
- sLastCell = xCell->getPropertyValue("CellName").get<OUString>();
- if (sNextCell.isEmpty())
- sNextCell = sLastCell;
- try
- {
- // accept numbers with comma and percent
- OUString sCellText = xText->getString().replace(',', '.');
- if (sCellText.endsWith("%"))
- sCellText = sCellText.copy(0, sCellText.getLength()-1);
- boost::lexical_cast<double>(sCellText);
- }
- catch( boost::bad_lexical_cast const& )
- {
- if ( !bFoundFirst )
- {
- // still search value cells
- continue;
- }
- else
- {
- // end of range
- break;
- }
- }
- sLastValueCell = sLastCell;
- bFoundFirst = true;
- }
- }
- catch ( const lang::IndexOutOfBoundsException & )
- {
- }
-
- if ( !sNextCell.isEmpty() )
- {
- OUString sRange = "<" + sNextCell + ":" +
- ( sLastValueCell.isEmpty() ? sLastCell : sLastValueCell ) + ">";
- sFormula = sFormula.replaceAll(rRange.m_sName, sRange);
- bReplace = true;
- }
- }
- }
-
- // update formula field
- if (bReplace)
- {
- uno::Reference<text::XText> xCell(xCellRange->getCellByPosition(nCol, nRow), uno::UNO_QUERY);
- uno::Reference<container::XEnumerationAccess> xParaEnumAccess(xCell, uno::UNO_QUERY);
- uno::Reference<container::XEnumeration> xParaEnum = xParaEnumAccess->createEnumeration();
- uno::Reference<container::XEnumerationAccess> xRunEnumAccess(xParaEnum->nextElement(), uno::UNO_QUERY);
- uno::Reference<container::XEnumeration> xRunEnum = xRunEnumAccess->createEnumeration();
- while ( xRunEnum->hasMoreElements() )
- {
- uno::Reference<text::XTextRange> xRun(xRunEnum->nextElement(), uno::UNO_QUERY);
- uno::Reference< beans::XPropertySet > xRunProperties( xRun, uno::UNO_QUERY_THROW );
- if ( xRunProperties->getPropertyValue("TextPortionType") == uno::makeAny(OUString("TextField")) )
- {
- uno::Reference<text::XTextField> const xField(xRunProperties->getPropertyValue("TextField").get<uno::Reference<text::XTextField>>());
- uno::Reference< beans::XPropertySet > xFieldProperties( xField, uno::UNO_QUERY_THROW );
- // cell can contain multiple text fields, but only one is handled now (~formula cell)
- if ( rProp.Value != xFieldProperties->getPropertyValue("Content") )
- continue;
- xFieldProperties->setPropertyValue("Content", uno::makeAny(sFormula));
- // update grab bag
- auto aGrabBag = comphelper::sequenceToContainer< std::vector<beans::PropertyValue> >(aCellGrabBag);
- beans::PropertyValue aValue;
- aValue.Name = "CellFormulaConverted";
- aValue.Value <<= sFormula;
- aGrabBag.push_back(aValue);
- xCellProperties->setPropertyValue("CellInteropGrabBag", uno::makeAny(comphelper::containerToSequence(aGrabBag)));
- }
- }
- }
- }
- }
- }
- catch ( const lang::IndexOutOfBoundsException & )
- {
- // jump to next table row
- break;
- }
- }
- }
-}
-
-void DomainMapperTableHandler::endTable(unsigned int nestedTableLevel, bool bTableStartsAtCellStart)
-{
-#ifdef DBG_UTIL
- TagLogger::getInstance().startElement("tablehandler.endTable");
-#endif
-
- // If we want to make this table a floating one.
- std::vector<beans::PropertyValue> aFrameProperties = comphelper::sequenceToContainer<std::vector<beans::PropertyValue> >
- (m_rDMapper_Impl.getTableManager().getCurrentTablePosition());
- TableInfo aTableInfo;
- aTableInfo.nNestLevel = nestedTableLevel;
- aTableInfo.pTableStyle = endTableGetTableStyle(aTableInfo, aFrameProperties);
- // expands to uno::Sequence< Sequence< beans::PropertyValues > >
-
- std::vector<HorizontallyMergedCell> aMerges;
- CellPropertyValuesSeq_t aCellProperties = endTableGetCellProperties(aTableInfo, aMerges);
-
- css::uno::Sequence<css::beans::PropertyValues> aRowProperties = endTableGetRowProperties();
-
-#ifdef DBG_UTIL
- lcl_DumpPropertyValueSeq(aRowProperties);
-#endif
-
- if (!m_aTableRanges.empty())
- {
- uno::Reference<text::XTextRange> xStart;
- uno::Reference<text::XTextRange> xEnd;
-
- bool bFloating = !aFrameProperties.empty();
-
- // OOXML table style may contain paragraph properties, apply these on cell paragraphs
- if ( m_aTableRanges[0].hasElements() && m_aTableRanges[0][0].hasElements() )
- {
- // collect all paragraph properties used in table styles
- PropertyMapPtr pAllTableProps( new PropertyMap );
- pAllTableProps->InsertProps(aTableInfo.pTableDefaults);
- if ( aTableInfo.pTableStyle )
- pAllTableProps->InsertProps(aTableInfo.pTableStyle->GetProperties( CNF_ALL ));
- for (const auto& eId : pAllTableProps->GetPropertyIds())
- {
- if ( !isParagraphProperty(eId) && !isCharacterProperty(eId) )
- pAllTableProps->Erase(eId);
- }
- std::vector< PropertyIds > aAllTableParaProperties = pAllTableProps->GetPropertyIds();
-
- if ( !aAllTableParaProperties.empty() )
- {
- TableParagraphVectorPtr pTableParagraphs = m_rDMapper_Impl.getTableManager().getCurrentParagraphs();
- for (size_t nRow = 0; nRow < m_aTableRanges.size(); ++nRow)
- {
- // Note that this is "cell" since you must not treat it as "column".
- for (size_t nCell = 0; nCell < m_aTableRanges[nRow].size(); ++nCell)
- {
- auto rStartPara = m_aTableRanges[nRow][nCell][0];
- if (!rStartPara.is())
- continue;
- auto rEndPara = m_aTableRanges[nRow][nCell][1];
- uno::Reference<text::XTextRangeCompare> xTextRangeCompare(rStartPara->getText(), uno::UNO_QUERY);
- bool bApply = false;
- // search paragraphs of the cell
- std::vector<TableParagraph>::iterator aIt = pTableParagraphs->begin();
- while ( aIt != pTableParagraphs->end() ) try
- {
- if (!bApply && xTextRangeCompare->compareRegionStarts(rStartPara, aIt->m_rStartParagraph) == 0)
- bApply = true;
- if (bApply)
- {
- bool bEndOfApply = (xTextRangeCompare->compareRegionEnds(rEndPara, aIt->m_rEndParagraph) == 0);
- ApplyParagraphPropertiesFromTableStyle(*aIt, aAllTableParaProperties, aCellProperties[nRow][nCell]);
- // erase processed paragraph from list of pending paragraphs
- aIt = pTableParagraphs->erase(aIt);
- if (bEndOfApply)
- break;
- }
- else
- ++aIt;
- }
- catch( const lang::IllegalArgumentException & )
- {
- // skip compareRegion with nested tables
- ++aIt;
- }
- }
- }
- }
- }
-
- // Additional checks: if we can do this.
- if (bFloating && m_aTableRanges[0].hasElements() && m_aTableRanges[0][0].hasElements())
- {
- xStart = m_aTableRanges[0][0][0];
- uno::Sequence< uno::Sequence< uno::Reference<text::XTextRange> > >& rLastRow = m_aTableRanges[m_aTableRanges.size() - 1];
- if (rLastRow.hasElements())
- {
- uno::Sequence< uno::Reference<text::XTextRange> >& rLastCell = rLastRow[rLastRow.getLength() - 1];
- xEnd = rLastCell[1];
- }
- }
- uno::Reference<text::XTextTable> xTable;
- try
- {
- if (m_xText.is())
- {
- xTable = m_xText->convertToTable(comphelper::containerToSequence(m_aTableRanges), aCellProperties, aRowProperties, aTableInfo.aTableProperties);
-
- if (xTable.is())
- {
- if (!aMerges.empty())
- {
- static const std::vector<std::u16string_view> aBorderNames
- = { u"TopBorder", u"LeftBorder", u"BottomBorder", u"RightBorder" };
-
- // Perform horizontal merges in reverse order, so the fact that merging changes the position of cells won't cause a problem for us.
- for (std::vector<HorizontallyMergedCell>::reverse_iterator it = aMerges.rbegin(); it != aMerges.rend(); ++it)
- {
- uno::Reference<table::XCellRange> xCellRange(xTable, uno::UNO_QUERY_THROW);
- uno::Reference<beans::XPropertySet> xFirstCell(
- xCellRange->getCellByPosition(it->m_nFirstCol, it->m_nFirstRow),
- uno::UNO_QUERY_THROW);
- OUString aFirst
- = xFirstCell->getPropertyValue("CellName").get<OUString>();
- // tdf#105852: Only try to merge if m_nLastCol is set (i.e. there were some merge continuation cells)
- if (it->m_nLastCol != -1)
- {
- // Save border properties of the first cell
- // before merge.
- table::BorderLine2 aBorderValues[4];
- for (size_t i = 0; i < aBorderNames.size(); ++i)
- xFirstCell->getPropertyValue(OUString(aBorderNames[i]))
- >>= aBorderValues[i];
-
- uno::Reference<beans::XPropertySet> xLastCell(
- xCellRange->getCellByPosition(it->m_nLastCol, it->m_nLastRow),
- uno::UNO_QUERY_THROW);
- OUString aLast
- = xLastCell->getPropertyValue("CellName").get<OUString>();
-
- uno::Reference<text::XTextTableCursor> xCursor = xTable->createCursorByCellName(aFirst);
- xCursor->gotoCellByName(aLast, true);
-
- xCursor->mergeRange();
-
- // Handle conflicting properties: mergeRange()
- // takes the last cell, Word takes the first
- // cell.
- for (size_t i = 0; i < aBorderNames.size(); ++i)
- {
- if (aBorderValues[i].LineStyle != table::BorderLineStyle::NONE)
- xFirstCell->setPropertyValue(
- OUString(aBorderNames[i]), uno::makeAny(aBorderValues[i]));
- }
- }
- }
- }
-
- // convert special range IDs ABOVE, BELOW, LEFT and RIGHT
- lcl_convertFormulaRanges(xTable);
- }
- }
- }
- catch ( const lang::IllegalArgumentException & )
- {
- TOOLS_INFO_EXCEPTION("writerfilter.dmapper", "Conversion to table error");
-#ifdef DBG_UTIL
- TagLogger::getInstance().chars(std::string("failed to import table!"));
-#endif
- }
- catch ( const uno::Exception & )
- {
- TOOLS_INFO_EXCEPTION("writerfilter.dmapper", "Exception during table creation");
- }
-
- // If we have a table with a start and an end position, we should make it a floating one.
- // Unless the table had a foot or endnote, as Writer doesn't support those in TextFrames.
- if (xTable.is() && xStart.is() && xEnd.is() && !m_bHadFootOrEndnote)
- {
- uno::Reference<beans::XPropertySet> xTableProperties(xTable, uno::UNO_QUERY);
- bool bIsRelative = false;
- xTableProperties->getPropertyValue("IsWidthRelative") >>= bIsRelative;
- if (!bIsRelative)
- {
- beans::PropertyValue aValue;
- aValue.Name = "Width";
- aValue.Value = xTableProperties->getPropertyValue("Width");
- aFrameProperties.push_back(aValue);
- }
- else
- {
- beans::PropertyValue aValue;
- aValue.Name = "FrameWidthPercent";
- aValue.Value = xTableProperties->getPropertyValue("RelativeWidth");
- aFrameProperties.push_back(aValue);
-
- // Applying the relative width to the frame, needs to have the table width to be 100% of the frame width
- xTableProperties->setPropertyValue("RelativeWidth", uno::makeAny(sal_Int16(100)));
- }
-
- // A non-zero left margin would move the table out of the frame, move the frame itself instead.
- xTableProperties->setPropertyValue("LeftMargin", uno::makeAny(sal_Int32(0)));
-
- if (nestedTableLevel >= 2)
- {
- // Floating tables inside a table always stay inside the cell.
- aFrameProperties.push_back(
- comphelper::makePropertyValue("IsFollowingTextFlow", true));
- }
-
- // In case the document ends with a table, we're called after
- // SectionPropertyMap::CloseSectionGroup(), so we'll have no idea
- // about the text area width, nor can fix this by delaying the text
- // frame conversion: just do it here.
- // Also, when the anchor is within a table, then do it here as well,
- // as xStart/xEnd would not point to the start/end at conversion
- // time anyway.
- // Next exception: it's pointless to delay the conversion if the
- // table is not in the body text.
- sal_Int32 nTableWidth = 0;
- m_aTableProperties->getValue(TablePropertyMap::TABLE_WIDTH, nTableWidth);
- sal_Int32 nTableWidthType = text::SizeType::FIX;
- m_aTableProperties->getValue(TablePropertyMap::TABLE_WIDTH_TYPE, nTableWidthType);
- if (m_rDMapper_Impl.GetSectionContext() && nestedTableLevel <= 1 && !m_rDMapper_Impl.IsInHeaderFooter())
- m_rDMapper_Impl.m_aPendingFloatingTables.emplace_back(xStart, xEnd, comphelper::containerToSequence(aFrameProperties), nTableWidth, nTableWidthType);
- else
- {
- // m_xText points to the body text, get the current xText from m_rDMapper_Impl, in case e.g. we would be in a header.
- uno::Reference<text::XTextAppendAndConvert> xTextAppendAndConvert(m_rDMapper_Impl.GetTopTextAppend(), uno::UNO_QUERY);
- // Only execute the conversion if the table is not anchored at
- // the start of an outer table cell, that's not yet
- // implemented.
- if (xTextAppendAndConvert.is() && !bTableStartsAtCellStart)
- xTextAppendAndConvert->convertToTextFrame(xStart, xEnd, comphelper::containerToSequence(aFrameProperties));
- }
- }
-
- // We're right after a table conversion.
- m_rDMapper_Impl.m_bConvertedTable = true;
- }
-
- m_aTableProperties.clear();
- m_aCellProperties.clear();
- m_aRowProperties.clear();
- m_bHadFootOrEndnote = false;
-
-#ifdef DBG_UTIL
- TagLogger::getInstance().endElement();
- TagLogger::getInstance().endElement();
-#endif
-}
-
-void DomainMapperTableHandler::startRow(const TablePropertyMapPtr& pProps)
-{
- m_aRowProperties.push_back( pProps.get() );
- m_aCellProperties.emplace_back( );
-
-#ifdef DBG_UTIL
- TagLogger::getInstance().startElement("table.row");
- if (pProps != nullptr)
- pProps->dumpXml();
-#endif
-
- m_aRowRanges.clear();
-}
-
-void DomainMapperTableHandler::endRow()
-{
- m_aTableRanges.push_back(comphelper::containerToSequence(m_aRowRanges));
-#ifdef DBG_UTIL
- TagLogger::getInstance().endElement();
-#endif
-}
-
-void DomainMapperTableHandler::startCell(const css::uno::Reference< css::text::XTextRange > & start,
- const TablePropertyMapPtr& pProps )
-{
- sal_uInt32 nRow = m_aRowProperties.size();
- if ( pProps )
- m_aCellProperties[nRow - 1].push_back( pProps.get() );
- else
- {
- // Adding an empty cell properties map to be able to get
- // the table defaults properties
- TablePropertyMapPtr pEmptyProps( new TablePropertyMap( ) );
- m_aCellProperties[nRow - 1].push_back( pEmptyProps.get() );
- }
-
-#ifdef DBG_UTIL
- TagLogger::getInstance().startElement("table.cell");
- TagLogger::getInstance().startElement("table.cell.start");
- TagLogger::getInstance().chars(XTextRangeToString(start));
- TagLogger::getInstance().endElement();
- if (pProps)
- pProps->printProperties();
-#endif
-
- //add a new 'row' of properties
- m_aCellRange.clear();
- uno::Reference<text::XTextRange> xStart;
- if (start)
- xStart = start->getStart();
- m_aCellRange.push_back(xStart);
-}
-
-void DomainMapperTableHandler::endCell(const css::uno::Reference< css::text::XTextRange > & end)
-{
-#ifdef DBG_UTIL
- TagLogger::getInstance().startElement("table.cell.end");
- TagLogger::getInstance().chars(XTextRangeToString(end));
- TagLogger::getInstance().endElement();
- TagLogger::getInstance().endElement();
-#endif
-
- uno::Reference<text::XTextRange> xEnd;
- if (end)
- xEnd = end->getEnd();
- m_aCellRange.push_back(xEnd);
- m_aRowRanges.push_back(comphelper::containerToSequence(m_aCellRange));
-}
-
-void DomainMapperTableHandler::setHadFootOrEndnote(bool bHadFootOrEndnote)
-{
- m_bHadFootOrEndnote = bHadFootOrEndnote;
-}
-
-DomainMapper_Impl& DomainMapperTableHandler::getDomainMapperImpl()
-{
- return m_rDMapper_Impl;
-}
-
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/DomainMapperTableHandler.hxx b/writerfilter/source/dmapper/DomainMapperTableHandler.hxx
deleted file mode 100644
index 900ff747f4cc..000000000000
--- a/writerfilter/source/dmapper/DomainMapperTableHandler.hxx
+++ /dev/null
@@ -1,124 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * 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 .
- */
-#pragma once
-
-#include "PropertyMap.hxx"
-#include <vector>
-
-#include <com/sun/star/text/XTextAppendAndConvert.hpp>
-
-namespace writerfilter::dmapper {
-
-typedef css::uno::Sequence< css::uno::Reference< css::text::XTextRange > > CellSequence_t;
-typedef css::uno::Sequence<CellSequence_t> RowSequence_t;
-
-typedef css::uno::Sequence< css::uno::Sequence<css::beans::PropertyValues> > CellPropertyValuesSeq_t;
-
-typedef std::vector<PropertyMapPtr> PropertyMapVector1;
-typedef std::vector<PropertyMapVector1> PropertyMapVector2;
-
-class DomainMapper_Impl;
-class TableStyleSheetEntry;
-struct TableInfo;
-
-/// A horizontally merged cell is in fact a range of cells till its merge is performed.
-struct HorizontallyMergedCell
-{
- sal_Int32 m_nFirstRow;
- sal_Int32 m_nFirstCol;
- sal_Int32 m_nLastRow;
- sal_Int32 m_nLastCol;
- HorizontallyMergedCell(sal_Int32 nFirstRow, sal_Int32 nFirstCol)
- : m_nFirstRow(nFirstRow)
- , m_nFirstCol(nFirstCol)
- , m_nLastRow(nFirstRow)
- , m_nLastCol(-1)
- {
- }
-};
-
-/// Class to handle events generated by TableManager::resolveCurrentTable().
-class DomainMapperTableHandler final : public virtual SvRefBase
-{
- css::uno::Reference<css::text::XTextAppendAndConvert> m_xText;
- DomainMapper_Impl& m_rDMapper_Impl;
- std::vector< css::uno::Reference<css::text::XTextRange> > m_aCellRange;
- std::vector<CellSequence_t> m_aRowRanges;
- std::vector<RowSequence_t> m_aTableRanges;
-
- // properties
- PropertyMapVector2 m_aCellProperties;
- PropertyMapVector1 m_aRowProperties;
- TablePropertyMapPtr m_aTableProperties;
-
- /// Did we have a foot or endnote in this table?
- bool m_bHadFootOrEndnote;
-
- TableStyleSheetEntry * endTableGetTableStyle(TableInfo & rInfo, std::vector<css::beans::PropertyValue>& rFrameProperties);
- CellPropertyValuesSeq_t endTableGetCellProperties(TableInfo & rInfo, std::vector<HorizontallyMergedCell>& rMerges);
- css::uno::Sequence<css::beans::PropertyValues> endTableGetRowProperties();
-
-public:
- typedef tools::SvRef<DomainMapperTableHandler> Pointer_t;
-
- DomainMapperTableHandler(css::uno::Reference<css::text::XTextAppendAndConvert> const& xText,
- DomainMapper_Impl& rDMapper_Impl);
- ~DomainMapperTableHandler() override;
-
- /**
- Handle start of table.
-
- @param pProps properties of the table
- */
- void startTable(const TablePropertyMapPtr& pProps);
-
- void ApplyParagraphPropertiesFromTableStyle(TableParagraph rParaProp, std::vector< PropertyIds > aAllTableProperties, css::beans::PropertyValues rCellProperties);
-
- /// Handle end of table.
- void endTable(unsigned int nestedTableLevel, bool bTableStartsAtCellStart);
- /**
- Handle start of row.
-
- @param pProps properties of the row
- */
- void startRow(const TablePropertyMapPtr& pProps);
- /// Handle end of row.
- void endRow();
- /**
- Handle start of cell.
-
- @param rT start handle of the cell
- @param pProps properties of the cell
- */
- void startCell(const css::uno::Reference< css::text::XTextRange > & start, const TablePropertyMapPtr& pProps);
- /**
- Handle end of cell.
-
- @param rT end handle of cell
- */
- void endCell(const css::uno::Reference< css::text::XTextRange > & end);
-
- void setHadFootOrEndnote(bool bHadFootOrEndnote);
-
- DomainMapper_Impl& getDomainMapperImpl();
-};
-
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/DomainMapperTableManager.cxx b/writerfilter/source/dmapper/DomainMapperTableManager.cxx
deleted file mode 100644
index cefe801145c5..000000000000
--- a/writerfilter/source/dmapper/DomainMapperTableManager.cxx
+++ /dev/null
@@ -1,827 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * 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 .
- */
-#include <optional>
-#include "DomainMapperTableManager.hxx"
-#include "ConversionHelper.hxx"
-#include "MeasureHandler.hxx"
-#include "TagLogger.hxx"
-#include <com/sun/star/text/SizeType.hpp>
-#include <com/sun/star/text/TableColumnSeparator.hpp>
-#include <com/sun/star/text/WritingMode2.hpp>
-#include <o3tl/numeric.hxx>
-#include <o3tl/safeint.hxx>
-#include <ooxml/resourceids.hxx>
-#include <rtl/math.hxx>
-#include <sal/log.hxx>
-#include <numeric>
-
-namespace writerfilter::dmapper {
-
-using namespace ::com::sun::star;
-using namespace ::std;
-
-DomainMapperTableManager::DomainMapperTableManager() :
- m_nRow(0),
- m_nCell(),
- m_nGridSpan(1),
- m_nHeaderRepeat(0),
- m_nTableWidth(0),
- m_bIsInShape(false),
- m_aTmpPosition(),
- m_aTmpTableProperties(),
- m_bPushCurrentWidth(false),
- m_bTableSizeTypeInserted(false),
- m_nLayoutType(0),
- m_aParagraphsToEndTable(),
- m_pTablePropsHandler(new TablePropertiesHandler())
-{
- m_pTablePropsHandler->SetTableManager( this );
-}
-
-
-DomainMapperTableManager::~DomainMapperTableManager()
-{
-}
-
-bool DomainMapperTableManager::attribute(Id nName, Value const & rValue)
-{
- bool bRet = true;
-
- switch (nName)
- {
- case NS_ooxml::LN_CT_TblLook_val:
- {
- TablePropertyMapPtr pPropMap(new TablePropertyMap());
- pPropMap->Insert(PROP_TBL_LOOK, uno::makeAny<sal_Int32>(rValue.getInt()));
- insertTableProps(pPropMap);
- m_aTableLook["val"] <<= static_cast<sal_Int32>(rValue.getInt());
- }
- break;
- case NS_ooxml::LN_CT_TblLook_noVBand:
- m_aTableLook["noVBand"] <<= static_cast<sal_Int32>(rValue.getInt());
- break;
- case NS_ooxml::LN_CT_TblLook_noHBand:
- m_aTableLook["noHBand"] <<= static_cast<sal_Int32>(rValue.getInt());
- break;
- case NS_ooxml::LN_CT_TblLook_lastColumn:
- m_aTableLook["lastColumn"] <<= static_cast<sal_Int32>(rValue.getInt());
- break;
- case NS_ooxml::LN_CT_TblLook_lastRow:
- m_aTableLook["lastRow"] <<= static_cast<sal_Int32>(rValue.getInt());
- break;
- case NS_ooxml::LN_CT_TblLook_firstColumn:
- m_aTableLook["firstColumn"] <<= static_cast<sal_Int32>(rValue.getInt());
- break;
- case NS_ooxml::LN_CT_TblLook_firstRow:
- m_aTableLook["firstRow"] <<= static_cast<sal_Int32>(rValue.getInt());
- break;
- default:
- bRet = false;
- }
-
- return bRet;
-}
-
-void DomainMapperTableManager::finishTableLook()
-{
- TablePropertyMapPtr pPropMap(new TablePropertyMap());
- pPropMap->Insert(META_PROP_TABLE_LOOK, uno::makeAny(m_aTableLook.getAsConstPropertyValueList()));
- m_aTableLook.clear();
- insertTableProps(pPropMap);
-}
-
-bool DomainMapperTableManager::sprm(Sprm & rSprm)
-{
-#ifdef DBG_UTIL
- TagLogger::getInstance().startElement("tablemanager.sprm");
- string sSprm = rSprm.toString();
- TagLogger::getInstance().chars(sSprm);
- TagLogger::getInstance().endElement();
-#endif
- bool bRet = TableManager::sprm(rSprm);
- if( !bRet )
- {
- bRet = m_pTablePropsHandler->sprm( rSprm );
- }
-
- if ( !bRet )
- {
- bRet = true;
- sal_uInt32 nSprmId = rSprm.getId();
- Value::Pointer_t pValue = rSprm.getValue();
- sal_Int32 nIntValue = (pValue ? pValue->getInt() : 0);
- switch ( nSprmId )
- {
- case NS_ooxml::LN_CT_TblPrBase_tblW:
- case NS_ooxml::LN_CT_TblPrBase_tblInd:
- {
- //contains unit and value
- writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
- if( pProperties )
- {
- MeasureHandlerPtr pMeasureHandler( new MeasureHandler );
- pProperties->resolve(*pMeasureHandler);
- TablePropertyMapPtr pPropMap( new TablePropertyMap );
- if (nSprmId == sal_uInt32(NS_ooxml::LN_CT_TblPrBase_tblInd))
- {
- pPropMap->setValue( TablePropertyMap::LEFT_MARGIN, pMeasureHandler->getMeasureValue() );
- }
- else
- {
- m_nTableWidth = pMeasureHandler->getMeasureValue();
- if( m_nTableWidth )
- {
- pPropMap->setValue( TablePropertyMap::TABLE_WIDTH_TYPE, text::SizeType::FIX );
- pPropMap->setValue( TablePropertyMap::TABLE_WIDTH, m_nTableWidth );
- m_bTableSizeTypeInserted = true;
- }
- else if( sal::static_int_cast<Id>(pMeasureHandler->getUnit()) == NS_ooxml::LN_Value_ST_TblWidth_pct )
- {
- sal_Int32 nPercent = pMeasureHandler->getValue() / 50;
- if(nPercent > 100)
- nPercent = 100;
- pPropMap->setValue( TablePropertyMap::TABLE_WIDTH_TYPE, text::SizeType::VARIABLE );
- pPropMap->setValue( TablePropertyMap::TABLE_WIDTH, nPercent );
- m_bTableSizeTypeInserted = true;
- }
- else if( sal::static_int_cast<Id>(pMeasureHandler->getUnit()) == NS_ooxml::LN_Value_ST_TblWidth_auto )
- {
- /*
- This attribute specifies the width type of table. This is used as part of the table layout
- algorithm specified by the tblLayout element.(See 17.4.64 and 17.4.65 of the ISO/IEC 29500-1:2011.)
- If this value is 'auto', the table layout has to use the preferred widths on the table items to generate
- the final sizing of the table, but then must use the contents of each cell to determine final column widths.
- (See 17.18.87 of the ISO/IEC 29500-1:2011.)
- */
- IntVectorPtr pCellWidths = getCurrentCellWidths();
- // Check whether all cells have fixed widths in the given row of table.
- bool bFixed = std::find(pCellWidths->begin(), pCellWidths->end(), -1) == pCellWidths->end();
- if (!bFixed)
- {
- // Set the width type of table with 'Auto' and set the width value to 0 (as per grid values)
- pPropMap->setValue( TablePropertyMap::TABLE_WIDTH_TYPE, text::SizeType::VARIABLE );
- pPropMap->setValue( TablePropertyMap::TABLE_WIDTH, 0 );
- m_bTableSizeTypeInserted = true;
- }
- else if (getTableDepth() > 1)
- {
- // tdf#131819 limiting the fix for nested tables temporarily
- // TODO revert the fix for tdf#104876 and reopen it
- m_bTableSizeTypeInserted = true;
- }
- }
- }
-#ifdef DBG_UTIL
- pPropMap->dumpXml();
-#endif
- insertTableProps(pPropMap);
- }
- }
- break;
- case NS_ooxml::LN_CT_TrPrBase_tblHeader:
- // if nIntValue == 1 then the row is a repeated header line
- // to prevent later rows from increasing the repeating m_nHeaderRepeat is set to NULL when repeating stops
- if( nIntValue > 0 && m_nHeaderRepeat == static_cast<int>(m_nRow) )
- {
- TablePropertyMapPtr pPropMap( new TablePropertyMap );
-
- // FIXME: DOCX tables with more than 10 repeating header lines imported
- // without repeating header lines to mimic an MSO workaround for its usability bug.
- // Explanation: it's very hard to set and modify repeating header rows in Word,
- // often resulting tables with a special workaround: setting all table rows as
- // repeating header, because exceeding the pages by "unlimited" header rows turns off the
- // table headers automatically in MSO. 10-row limit is a reasonable temporary limit
- // to handle DOCX tables with "unlimited" repeating header, till the same "turn off
- // exceeding header" feature is ready (see tdf#88496).
-#define HEADER_ROW_LIMIT_FOR_MSO_WORKAROUND 10
- if ( m_nHeaderRepeat == HEADER_ROW_LIMIT_FOR_MSO_WORKAROUND )
- {
- m_nHeaderRepeat = -1;
- pPropMap->Insert( PROP_HEADER_ROW_COUNT, uno::makeAny(sal_Int32(0)));
- }
- else
- {
- ++m_nHeaderRepeat;
- pPropMap->Insert( PROP_HEADER_ROW_COUNT, uno::makeAny( m_nHeaderRepeat ));
- }
- insertTableProps(pPropMap);
- }
- else
- {
- if ( nIntValue == 0 && m_nRow == 0 )
- {
- // explicit tblHeader=0 in the first row must overwrite table style
- TablePropertyMapPtr pPropMap( new TablePropertyMap );
- pPropMap->Insert( PROP_HEADER_ROW_COUNT, uno::makeAny(sal_Int32(0)));
- insertTableProps(pPropMap);
- }
- m_nHeaderRepeat = -1;
- }
- if (nIntValue)
- {
- // Store the info that this is a header, we'll need that when we apply table styles.
- TablePropertyMapPtr pPropMap( new TablePropertyMap );
- pPropMap->Insert( PROP_TBL_HEADER, uno::makeAny(nIntValue));
- insertRowProps(pPropMap);
- }
- break;
- case NS_ooxml::LN_CT_TblPrBase_tblStyle: //table style name
- {
- TablePropertyMapPtr pPropMap( new TablePropertyMap );
- pPropMap->Insert( META_PROP_TABLE_STYLE_NAME, uno::makeAny( pValue->getString() ));
- insertTableProps(pPropMap);
- }
- break;
- case NS_ooxml::LN_CT_TblGridBase_gridCol:
- {
- if (nIntValue == -1)
- getCurrentGrid()->clear();
- else
- getCurrentGrid()->push_back( nIntValue );
- }
- break;
- case NS_ooxml::LN_CT_TcPrBase_vMerge : //vertical merge
- {
- // values can be: LN_Value_ST_Merge_restart, LN_Value_ST_Merge_continue, in reality the second one is a 0
- TablePropertyMapPtr pMergeProps( new TablePropertyMap );
- pMergeProps->Insert( PROP_VERTICAL_MERGE, uno::makeAny( sal::static_int_cast<Id>(nIntValue) == NS_ooxml::LN_Value_ST_Merge_restart ) );
- cellProps( pMergeProps);
- }
- break;
- case NS_ooxml::LN_CT_TcPrBase_hMerge:
- {
- // values can be: LN_Value_ST_Merge_restart, LN_Value_ST_Merge_continue, in reality the second one is a 0
- TablePropertyMapPtr pMergeProps(new TablePropertyMap());
- pMergeProps->Insert(PROP_HORIZONTAL_MERGE, uno::makeAny( sal::static_int_cast<Id>(nIntValue) == NS_ooxml::LN_Value_ST_Merge_restart ));
- cellProps(pMergeProps);
- }
- break;
- case NS_ooxml::LN_CT_TcPrBase_gridSpan: //number of grid positions spanned by this cell
- {
-#ifdef DBG_UTIL
- TagLogger::getInstance().startElement("tablemanager.GridSpan");
- TagLogger::getInstance().attribute("gridSpan", nIntValue);
- TagLogger::getInstance().endElement();
-#endif
- m_nGridSpan = nIntValue;
- }
- break;
- case NS_ooxml::LN_CT_TcPrBase_textDirection:
- {
- TablePropertyMapPtr pPropMap( new TablePropertyMap );
- bool bInsertCellProps = true;
- switch ( nIntValue )
- {
- case NS_ooxml::LN_Value_ST_TextDirection_tbRl:
- // Binary filter takes BiDirection into account ( but I have no idea about that here )
- // or even what it is. But... here's where to handle it if it becomes an issue
- pPropMap->Insert( PROP_FRM_DIRECTION, uno::makeAny( text::WritingMode2::TB_RL ));
- SAL_INFO( "writerfilter", "Have inserted textDirection " << nIntValue );
- break;
- case NS_ooxml::LN_Value_ST_TextDirection_btLr:
- pPropMap->Insert( PROP_FRM_DIRECTION, uno::makeAny( text::WritingMode2::BT_LR ));
- break;
- case NS_ooxml::LN_Value_ST_TextDirection_lrTbV:
- pPropMap->Insert( PROP_FRM_DIRECTION, uno::makeAny( text::WritingMode2::LR_TB ));
- break;
- case NS_ooxml::LN_Value_ST_TextDirection_tbRlV:
- pPropMap->Insert( PROP_FRM_DIRECTION, uno::makeAny( text::WritingMode2::TB_RL ));
- break;
- case NS_ooxml::LN_Value_ST_TextDirection_lrTb:
- case NS_ooxml::LN_Value_ST_TextDirection_tbLrV:
- default:
- // Ignore - we can't handle these
- bInsertCellProps = false;
- break;
- }
- if ( bInsertCellProps )
- cellProps( pPropMap );
- break;
- }
- case NS_ooxml::LN_CT_TcPrBase_tcW:
- {
- // Contains unit and value, but unit is not interesting for
- // us, later we'll just distribute these values in a
- // 0..10000 scale.
- writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
- if( pProperties )
- {
- MeasureHandlerPtr pMeasureHandler(new MeasureHandler());
- pProperties->resolve(*pMeasureHandler);
- if (sal::static_int_cast<Id>(pMeasureHandler->getUnit()) == NS_ooxml::LN_Value_ST_TblWidth_auto)
- getCurrentCellWidths()->push_back(sal_Int32(-1));
- else
- // store the original value to limit rounding mistakes, if it's there in a recognized measure (twip)
- getCurrentCellWidths()->push_back(pMeasureHandler->getMeasureValue() ? pMeasureHandler->getValue() : sal_Int32(0));
- if (getTableDepthDifference() > 0)
- m_bPushCurrentWidth = true;
- }
- }
- break;
- case NS_ooxml::LN_CT_TblPrBase_tblpPr:
- {
- writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
- // Ignore <w:tblpPr> in shape text, those tables should be always non-floating ones.
- if (!m_bIsInShape && pProperties)
- {
- TablePositionHandlerPtr pHandler = m_aTmpPosition.back();
- if ( !pHandler )
- {
- m_aTmpPosition.pop_back();
- pHandler = new TablePositionHandler;
- m_aTmpPosition.push_back( pHandler );
- }
- pProperties->resolve(*m_aTmpPosition.back());
- }
- }
- break;
- case NS_ooxml::LN_CT_TrPrBase_gridBefore:
- setCurrentGridBefore( nIntValue );
- break;
- case NS_ooxml::LN_CT_TrPrBase_gridAfter:
- setCurrentGridAfter( nIntValue );
- break;
- case NS_ooxml::LN_CT_TblPrBase_tblCaption:
- // To-Do: Not yet preserved
- break;
- case NS_ooxml::LN_CT_TblPrBase_tblDescription:
- // To-Do: Not yet preserved
- break;
- case NS_ooxml::LN_CT_TrPrBase_tblCellSpacing:
- // To-Do: Not yet preserved
- break;
- case NS_ooxml::LN_CT_TblPrBase_tblCellSpacing:
- // To-Do: Not yet preserved
- break;
- case NS_ooxml::LN_CT_TblPrBase_bidiVisual:
- {
- TablePropertyMapPtr pPropMap(new TablePropertyMap());
- pPropMap->Insert(PROP_WRITING_MODE, uno::makeAny(sal_Int16(nIntValue ? text::WritingMode2::RL_TB : text::WritingMode2::LR_TB)));
- insertTableProps(pPropMap);
- break;
- }
- default:
- bRet = false;
-
-#ifdef DBG_UTIL
- TagLogger::getInstance().element("unhandled");
-#endif
- }
- }
- return bRet;
-}
-
-DomainMapperTableManager::IntVectorPtr const & DomainMapperTableManager::getCurrentGrid( )
-{
- return m_aTableGrid.back( );
-}
-
-DomainMapperTableManager::IntVectorPtr const & DomainMapperTableManager::getCurrentCellWidths( )
-{
- return m_aCellWidths.back( );
-}
-
-uno::Sequence<beans::PropertyValue> DomainMapperTableManager::getCurrentTablePosition( )
-{
- if ( !m_aTablePositions.empty( ) && m_aTablePositions.back() )
- return m_aTablePositions.back( )->getTablePosition();
- else
- return uno::Sequence< beans::PropertyValue >();
-}
-
-TablePositionHandler* DomainMapperTableManager::getCurrentTableRealPosition()
-{
- if ( !m_aTablePositions.empty( ) && m_aTablePositions.back() )
- return m_aTablePositions.back().get();
- else
- return nullptr;
-}
-
-TableParagraphVectorPtr DomainMapperTableManager::getCurrentParagraphs( )
-{
- return m_aParagraphsToEndTable.top( );
-}
-
-void DomainMapperTableManager::setIsInShape(bool bIsInShape)
-{
- m_bIsInShape = bIsInShape;
-}
-
-void DomainMapperTableManager::startLevel( )
-{
- TableManager::startLevel( );
-
- // If requested, pop the value that was pushed too early.
- std::optional<sal_Int32> oCurrentWidth;
- if (m_bPushCurrentWidth && !m_aCellWidths.empty() && !m_aCellWidths.back()->empty())
- {
- oCurrentWidth = m_aCellWidths.back()->back();
- m_aCellWidths.back()->pop_back();
- }
- std::optional<TableParagraph> oParagraph;
- if (getTableDepthDifference() > 0 && !m_aParagraphsToEndTable.empty() && !m_aParagraphsToEndTable.top()->empty())
- {
- oParagraph = m_aParagraphsToEndTable.top()->back();
- m_aParagraphsToEndTable.top()->pop_back();
- }
-
- IntVectorPtr pNewGrid = std::make_shared<vector<sal_Int32>>();
- IntVectorPtr pNewCellWidths = std::make_shared<vector<sal_Int32>>();
- TablePositionHandlerPtr pNewPositionHandler;
- m_aTableGrid.push_back( pNewGrid );
- m_aCellWidths.push_back( pNewCellWidths );
- m_aTablePositions.push_back( pNewPositionHandler );
- // empty name will be replaced by the table style name, if it exists
- m_aTableStyleNames.push_back( OUString() );
-
- TablePositionHandlerPtr pTmpPosition;
- TablePropertyMapPtr pTmpProperties( new TablePropertyMap( ) );
- m_aTmpPosition.push_back( pTmpPosition );
- m_aTmpTableProperties.push_back( pTmpProperties );
- m_nCell.push_back( 0 );
- m_nTableWidth = 0;
- m_nLayoutType = 0;
- TableParagraphVectorPtr pNewParagraphs = std::make_shared<vector<TableParagraph>>();
- m_aParagraphsToEndTable.push( pNewParagraphs );
-
- // And push it back to the right level.
- if (oCurrentWidth)
- m_aCellWidths.back()->push_back(*oCurrentWidth);
- if (oParagraph)
- m_aParagraphsToEndTable.top()->push_back(*oParagraph);
-}
-
-void DomainMapperTableManager::endLevel( )
-{
- if (m_aTableGrid.empty())
- {
- SAL_WARN("writerfilter.dmapper", "Table stack is empty");
- return;
- }
-
- m_aTableGrid.pop_back( );
-
- // Do the same trick as in startLevel(): pop the value that was pushed too early.
- std::optional<sal_Int32> oCurrentWidth;
- if (m_bPushCurrentWidth && !m_aCellWidths.empty() && !m_aCellWidths.back()->empty())
- oCurrentWidth = m_aCellWidths.back()->back();
- m_aCellWidths.pop_back( );
- // And push it back to the right level.
- if (oCurrentWidth && !m_aCellWidths.empty() && !m_aCellWidths.back()->empty())
- m_aCellWidths.back()->push_back(*oCurrentWidth);
-
- m_nCell.pop_back( );
- m_nTableWidth = 0;
- m_nLayoutType = 0;
-
- m_aTmpPosition.pop_back( );
- m_aTmpTableProperties.pop_back( );
-
- TableManager::endLevel( );
-#ifdef DBG_UTIL
- TagLogger::getInstance().startElement("dmappertablemanager.endLevel");
- PropertyMapPtr pProps = getTableProps().get();
- if (pProps)
- getTableProps()->dumpXml();
-
- TagLogger::getInstance().endElement();
-#endif
-
- // Pop back the table position after endLevel as it's used
- // in the endTable method called in endLevel.
- m_aTablePositions.pop_back();
- m_aTableStyleNames.pop_back();
- m_aParagraphsToEndTable.pop();
-}
-
-void DomainMapperTableManager::endOfCellAction()
-{
-#ifdef DBG_UTIL
- TagLogger::getInstance().element("endOFCellAction");
-#endif
-
- if ( !isInTable() )
- throw std::out_of_range("cell without a table");
- if ( m_nGridSpan > 1 )
- setCurrentGridSpan( m_nGridSpan );
- m_nGridSpan = 1;
- ++m_nCell.back( );
-}
-
-bool DomainMapperTableManager::shouldInsertRow(IntVectorPtr pCellWidths, IntVectorPtr pTableGrid, size_t nGrids, bool& rIsIncompleteGrid)
-{
- if (pCellWidths->empty())
- return false;
- if (m_nLayoutType == NS_ooxml::LN_Value_doc_ST_TblLayout_fixed)
- return true;
- if (pCellWidths->size() == nGrids)
- return true;
- rIsIncompleteGrid = true;
- return nGrids > pTableGrid->size();
-}
-
-void DomainMapperTableManager::endOfRowAction()
-{
-#ifdef DBG_UTIL
- TagLogger::getInstance().startElement("endOfRowAction");
-#endif
-
- // Compare the table position and style with the previous ones. We may need to split
- // into two tables if those are different. We surely don't want to do anything
- // if we don't have any row yet.
- TablePositionHandlerPtr pTmpPosition = m_aTmpPosition.back();
- TablePropertyMapPtr pTablePropMap = m_aTmpTableProperties.back( );
- TablePositionHandlerPtr pCurrentPosition = m_aTablePositions.back();
- bool bSamePosition = ( pTmpPosition == pCurrentPosition ) ||
- ( pTmpPosition && pCurrentPosition && *pTmpPosition == *pCurrentPosition );
- bool bIsSetTableStyle = pTablePropMap->isSet(META_PROP_TABLE_STYLE_NAME);
- OUString sTableStyleName;
- bool bSameTableStyle = ( !bIsSetTableStyle && m_aTableStyleNames.back().isEmpty()) ||
- ( bIsSetTableStyle &&
- (pTablePropMap->getProperty(META_PROP_TABLE_STYLE_NAME)->second >>= sTableStyleName) &&
- sTableStyleName == m_aTableStyleNames.back() );
- if ( (!bSamePosition || !bSameTableStyle) && m_nRow > 0 )
- {
- // Save the grid infos to have them survive the end/start level
- IntVectorPtr pTmpTableGrid = m_aTableGrid.back();
- IntVectorPtr pTmpCellWidths = m_aCellWidths.back();
- sal_uInt32 nTmpCell = m_nCell.back();
- TableParagraphVectorPtr pTableParagraphs = getCurrentParagraphs();
-
- // endLevel and startLevel are taking care of the non finished row
- // to carry it over to the next table
- setKeepUnfinishedRow( true );
- endLevel();
- setKeepUnfinishedRow( false );
- startLevel();
-
- m_aTableGrid.pop_back();
- m_aCellWidths.pop_back();
- m_nCell.pop_back();
- m_aTableGrid.push_back(pTmpTableGrid);
- m_aCellWidths.push_back(pTmpCellWidths);
- m_nCell.push_back(nTmpCell);
- m_aParagraphsToEndTable.pop( );
- m_aParagraphsToEndTable.push( pTableParagraphs );
- }
- // save table style in the first row for comparison
- if ( m_nRow == 0 && pTablePropMap->isSet(META_PROP_TABLE_STYLE_NAME) )
- {
- pTablePropMap->getProperty(META_PROP_TABLE_STYLE_NAME)->second >>= sTableStyleName;
- m_aTableStyleNames.pop_back();
- m_aTableStyleNames.push_back( sTableStyleName );
- }
-
- // Push the tmp position now that we compared it
- m_aTablePositions.pop_back();
- m_aTablePositions.push_back( pTmpPosition );
- m_aTmpPosition.back().clear( );
-
-
- IntVectorPtr pTableGrid = getCurrentGrid( );
- IntVectorPtr pCellWidths = getCurrentCellWidths( );
- if(!m_nTableWidth && !pTableGrid->empty())
- {
-#ifdef DBG_UTIL
- TagLogger::getInstance().startElement("tableWidth");
-#endif
-
- for( const auto& rCell : *pTableGrid )
- {
-#ifdef DBG_UTIL
- TagLogger::getInstance().startElement("col");
- TagLogger::getInstance().attribute("width", rCell);
- TagLogger::getInstance().endElement();
-#endif
-
- m_nTableWidth = o3tl::saturating_add(m_nTableWidth, rCell);
- }
- if (m_nTableWidth)
- // convert sum of grid twip values to 1/100 mm with rounding up to avoid table width loss
- m_nTableWidth = static_cast<sal_Int32>(ceil(ConversionHelper::convertTwipToMM100Double(m_nTableWidth)));
-
- if (m_nTableWidth > 0 && !m_bTableSizeTypeInserted)
- {
- TablePropertyMapPtr pPropMap( new TablePropertyMap );
- pPropMap->setValue( TablePropertyMap::TABLE_WIDTH, m_nTableWidth );
- insertTableProps(pPropMap);
- }
-
-#ifdef DBG_UTIL
- TagLogger::getInstance().endElement();
-#endif
- }
-
- std::vector<sal_uInt32> rCurrentSpans = getCurrentGridSpans();
-
-#ifdef DBG_UTIL
- TagLogger::getInstance().startElement("gridSpans");
- {
- for (const auto& rGridSpan : rCurrentSpans)
- {
- TagLogger::getInstance().startElement("gridSpan");
- TagLogger::getInstance().attribute("span", rGridSpan);
- TagLogger::getInstance().endElement();
- }
- }
- TagLogger::getInstance().endElement();
-#endif
-
- //calculate number of used grids - it has to match the size of m_aTableGrid
- size_t nGrids = std::accumulate(rCurrentSpans.begin(), rCurrentSpans.end(), sal::static_int_cast<size_t>(0));
-
- // sj: the grid is having no units... it is containing only relative values.
- // a table with a grid of "1:2:1" looks identical as if the table is having
- // a grid of "20:40:20" and it doesn't have to do something with the tableWidth
- // -> so we have get the sum of each grid entry for the fullWidthRelative:
- int nFullWidthRelative = 0;
- for (int i : (*pTableGrid))
- nFullWidthRelative = o3tl::saturating_add(nFullWidthRelative, i);
-
- bool bIsIncompleteGrid = false;
- if( pTableGrid->size() == nGrids && m_nCell.back( ) > 0 )
- {
- /*
- * If table width property set earlier is smaller than the current table width,
- * then replace the TABLE_WIDTH property, set earlier.
- */
- sal_Int32 nTableWidth(0);
- sal_Int32 nTableWidthType(text::SizeType::VARIABLE);
- pTablePropMap->getValue(TablePropertyMap::TABLE_WIDTH, nTableWidth);
- pTablePropMap->getValue(TablePropertyMap::TABLE_WIDTH_TYPE, nTableWidthType);
- if ((nTableWidthType == text::SizeType::FIX) && (nTableWidth < m_nTableWidth))
- {
- pTablePropMap->setValue(TablePropertyMap::TABLE_WIDTH, m_nTableWidth);
- }
- if (nTableWidthType == text::SizeType::VARIABLE )
- {
- if(nTableWidth > 100 || nTableWidth <= 0)
- {
- if(getTableDepth() > 1 && !m_bTableSizeTypeInserted)
- {
- pTablePropMap->setValue(TablePropertyMap::TABLE_WIDTH, sal_Int32(100));
- pTablePropMap->setValue(TablePropertyMap::TABLE_WIDTH_TYPE, text::SizeType::VARIABLE);
- }
- else
- {
- pTablePropMap->setValue(TablePropertyMap::TABLE_WIDTH, m_nTableWidth);
- pTablePropMap->setValue(TablePropertyMap::TABLE_WIDTH_TYPE, text::SizeType::FIX);
- }
- }
- }
- uno::Sequence< text::TableColumnSeparator > aSeparators( getCurrentGridBefore() + m_nCell.back() - 1 );
- text::TableColumnSeparator* pSeparators = aSeparators.getArray();
- double nLastRelPos = 0.0;
- sal_uInt32 nBorderGridIndex = 0;
-
- size_t nWidthsBound = getCurrentGridBefore() + m_nCell.back() - 1;
- if (nWidthsBound)
- {
- if (nFullWidthRelative == 0)
- throw o3tl::divide_by_zero();
-
- ::std::vector< sal_uInt32 >::const_iterator aSpansIter = rCurrentSpans.begin();
- for( size_t nBorder = 0; nBorder < nWidthsBound; ++nBorder )
- {
- double fGridWidth = 0.;
- for ( sal_Int32 nGridCount = *aSpansIter; nGridCount > 0; --nGridCount )
- fGridWidth += (*pTableGrid)[nBorderGridIndex++];
-
- double nRelPos = (fGridWidth * 10000) / nFullWidthRelative;
-
- pSeparators[nBorder].Position = rtl::math::round(nRelPos + nLastRelPos);
- pSeparators[nBorder].IsVisible = true;
- nLastRelPos = nLastRelPos + nRelPos;
- ++aSpansIter;
- }
- }
- TablePropertyMapPtr pPropMap( new TablePropertyMap );
- pPropMap->Insert( PROP_TABLE_COLUMN_SEPARATORS, uno::makeAny( aSeparators ) );
-
-#ifdef DBG_UTIL
- TagLogger::getInstance().startElement("rowProperties");
- pPropMap->dumpXml();
- TagLogger::getInstance().endElement();
-#endif
- insertRowProps(pPropMap);
- }
- else if (shouldInsertRow(pCellWidths, pTableGrid, nGrids, bIsIncompleteGrid))
- {
- // If we're here, then the number of cells does not equal to the amount
- // defined by the grid, even after taking care of
- // gridSpan/gridBefore/gridAfter. Handle this by ignoring the grid and
- // providing the separators based on the provided cell widths, as long
- // as we have a fixed layout;
- // On the other hand even if the layout is not fixed, but the cell widths
- // provided equal the total number of cells, and there are no after/before cells
- // then use the cell widths to calculate the column separators.
- // Also handle autofit tables with incomplete grids, when rows can have
- // different widths and last cells can be wider, than their values.
- uno::Sequence< text::TableColumnSeparator > aSeparators(pCellWidths->size() - 1);
- text::TableColumnSeparator* pSeparators = aSeparators.getArray();
- sal_Int16 nSum = 0;
- sal_uInt32 nPos = 0;
-
- if (bIsIncompleteGrid)
- nFullWidthRelative = 0;
-
- // Avoid divide by zero (if there's no grid, position using cell widths).
- if( nFullWidthRelative == 0 )
- for (size_t i = 0; i < pCellWidths->size(); ++i)
- nFullWidthRelative += (*pCellWidths)[i];
-
- if (bIsIncompleteGrid)
- {
- /*
- * If table width property set earlier is smaller than the current table row width,
- * then replace the TABLE_WIDTH property, set earlier.
- */
- sal_Int32 nFullWidth = static_cast<sal_Int32>(ceil(ConversionHelper::convertTwipToMM100Double(nFullWidthRelative)));
- sal_Int32 nTableWidth(0);
- sal_Int32 nTableWidthType(text::SizeType::VARIABLE);
- pTablePropMap->getValue(TablePropertyMap::TABLE_WIDTH, nTableWidth);
- pTablePropMap->getValue(TablePropertyMap::TABLE_WIDTH_TYPE, nTableWidthType);
- if (nTableWidth < nFullWidth)
- {
- pTablePropMap->setValue(TablePropertyMap::TABLE_WIDTH, nFullWidth);
- }
- }
-
- size_t nWidthsBound = pCellWidths->size() - 1;
- if (nWidthsBound)
- {
- if (nFullWidthRelative == 0)
- throw o3tl::divide_by_zero();
-
- // At incomplete table grids, last cell width can be smaller, than its final width.
- // Correct it based on the last but one column width and their span values.
- if ( bIsIncompleteGrid && rCurrentSpans.size()-1 == nWidthsBound )
- {
- auto aSpansIter = std::next(rCurrentSpans.begin(), nWidthsBound - 1);
- sal_Int32 nFixLastCellWidth = (*pCellWidths)[nWidthsBound-1] / *aSpansIter * *std::next(aSpansIter);
- if (nFixLastCellWidth > (*pCellWidths)[nWidthsBound])
- nFullWidthRelative += nFixLastCellWidth - (*pCellWidths)[nWidthsBound];
- }
-
- for (size_t i = 0; i < nWidthsBound; ++i)
- {
- nSum += (*pCellWidths)[i];
- pSeparators[nPos].Position = (nSum * 10000) / nFullWidthRelative; // Relative position
- pSeparators[nPos].IsVisible = true;
- nPos++;
- }
- }
-
- TablePropertyMapPtr pPropMap( new TablePropertyMap );
- pPropMap->Insert( PROP_TABLE_COLUMN_SEPARATORS, uno::makeAny( aSeparators ) );
-#ifdef DBG_UTIL
- TagLogger::getInstance().startElement("rowProperties");
- pPropMap->dumpXml();
- TagLogger::getInstance().endElement();
-#endif
- insertRowProps(pPropMap);
- }
-
- // Now that potentially opened table is closed, save the table properties
- TableManager::insertTableProps(pTablePropMap);
-
- m_aTmpTableProperties.pop_back();
- TablePropertyMapPtr pEmptyTableProps( new TablePropertyMap() );
- m_aTmpTableProperties.push_back( pEmptyTableProps );
-
- ++m_nRow;
- m_nCell.back( ) = 0;
- getCurrentGrid()->clear();
- pCellWidths->clear();
-
- m_bTableSizeTypeInserted = false;
-
-#ifdef DBG_UTIL
- TagLogger::getInstance().endElement();
-#endif
-}
-
-void DomainMapperTableManager::clearData()
-{
- m_nRow = m_nHeaderRepeat = m_nTableWidth = m_nLayoutType = 0;
-}
-
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/DomainMapperTableManager.hxx b/writerfilter/source/dmapper/DomainMapperTableManager.hxx
deleted file mode 100644
index 1eb61b6df309..000000000000
--- a/writerfilter/source/dmapper/DomainMapperTableManager.hxx
+++ /dev/null
@@ -1,138 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * 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 .
- */
-#ifndef INCLUDED_WRITERFILTER_SOURCE_DMAPPER_DOMAINMAPPERTABLEMANAGER_HXX
-#define INCLUDED_WRITERFILTER_SOURCE_DMAPPER_DOMAINMAPPERTABLEMANAGER_HXX
-
-#include "TablePropertiesHandler.hxx"
-#include "TablePositionHandler.hxx"
-
-#include "TableManager.hxx"
-#include "PropertyMap.hxx"
-#include <vector>
-#include <memory>
-#include <comphelper/sequenceashashmap.hxx>
-
-namespace writerfilter::dmapper {
-
-class DomainMapper;
-
-class DomainMapperTableManager : public TableManager
-{
- typedef std::shared_ptr< std::vector<sal_Int32> > IntVectorPtr;
-
- sal_uInt32 m_nRow;
- ::std::vector< sal_uInt32 > m_nCell;
- sal_uInt32 m_nGridSpan;
- sal_Int32 m_nHeaderRepeat; //counter of repeated headers - if == -1 then the repeating stops
- sal_Int32 m_nTableWidth; //might be set directly or has to be calculated from the column positions
- /// Are we in a shape (text append stack is not empty) or in the body document?
- bool m_bIsInShape;
- std::vector< OUString > m_aTableStyleNames;
- /// Grab-bag of table look attributes for preserving.
- comphelper::SequenceAsHashMap m_aTableLook;
- std::vector< TablePositionHandlerPtr > m_aTablePositions;
- std::vector< TablePositionHandlerPtr > m_aTmpPosition; ///< Temporarily stores the position to compare it later
- std::vector< TablePropertyMapPtr > m_aTmpTableProperties; ///< Temporarily stores the table properties until end of row
-
- ::std::vector< IntVectorPtr > m_aTableGrid;
- /// If this is true, then we pushed a width before the next level started, and that should be carried over when starting the next level.
- bool m_bPushCurrentWidth;
- /// Individual table cell width values, used only in case the number of cells doesn't match the table grid.
- ::std::vector< IntVectorPtr > m_aCellWidths;
- /// Remember if table width was already set, when we lack a w:tblW, it should be set manually at the end.
- bool m_bTableSizeTypeInserted;
- /// Table layout algorithm, IOW if we should consider fixed column width or not.
- sal_uInt32 m_nLayoutType;
- /// Collected table paragraphs for table style handling
- std::stack< TableParagraphVectorPtr > m_aParagraphsToEndTable;
-
- std::unique_ptr<TablePropertiesHandler> m_pTablePropsHandler;
- PropertyMapPtr m_pStyleProps;
-
- bool shouldInsertRow(IntVectorPtr pCellWidths, IntVectorPtr pTableGrid, size_t nGrids, bool& rIsIncompleteGrid);
-
- virtual void clearData() override;
-
-public:
-
- DomainMapperTableManager();
- virtual ~DomainMapperTableManager() override;
-
- // use this method to avoid adding the properties for the table
- // but in the provided properties map.
- void SetStyleProperties( PropertyMapPtr pProperties ) { m_pStyleProps = pProperties; };
-
- virtual bool sprm(Sprm & rSprm) override;
- bool attribute(Id nName, Value const & val);
-
- virtual void startLevel( ) override;
- virtual void endLevel( ) override;
-
- virtual void endOfCellAction() override;
- virtual void endOfRowAction() override;
-
- IntVectorPtr const & getCurrentGrid( );
- IntVectorPtr const & getCurrentCellWidths( );
- TableParagraphVectorPtr getCurrentParagraphs( );
-
- /// Turn the attributes collected so far in m_aTableLook into a property and clear the container.
- void finishTableLook();
- css::uno::Sequence<css::beans::PropertyValue> getCurrentTablePosition();
- TablePositionHandler* getCurrentTableRealPosition();
-
- virtual void cellProps(const TablePropertyMapPtr& pProps) override
- {
- if ( m_pStyleProps )
- m_pStyleProps->InsertProps(pProps.get());
- else
- TableManager::cellProps( pProps );
- };
-
- virtual void insertRowProps(const TablePropertyMapPtr& pProps) override
- {
- if ( m_pStyleProps )
- m_pStyleProps->InsertProps(pProps.get());
- else
- TableManager::insertRowProps( pProps );
- };
-
- virtual void insertTableProps(const TablePropertyMapPtr& pProps) override
- {
- if ( m_pStyleProps )
- m_pStyleProps->InsertProps(pProps.get());
- else
- m_aTmpTableProperties.back()->InsertProps(pProps.get());
- };
-
- void SetLayoutType(sal_uInt32 nLayoutType)
- {
- m_nLayoutType = nLayoutType;
- }
-
- using TableManager::isInCell;
-
- void setIsInShape(bool bIsInShape);
-
-};
-
-}
-
-#endif // INCLUDED_WRITERFILTER_SOURCE_DMAPPER_DOMAINMAPPERTABLEMANAGER_HXX
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
deleted file mode 100644
index a7d488b47a89..000000000000
--- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx
+++ /dev/null
@@ -1,7519 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * 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 .
- */
-
-#include <com/sun/star/document/XDocumentPropertiesSupplier.hpp>
-#include <com/sun/star/beans/XPropertySet.hpp>
-#include <com/sun/star/document/XDocumentProperties.hpp>
-#include <ooxml/resourceids.hxx>
-#include "DomainMapper_Impl.hxx"
-#include "ConversionHelper.hxx"
-#include "SdtHelper.hxx"
-#include "DomainMapperTableHandler.hxx"
-#include "TagLogger.hxx"
-#include <com/sun/star/uno/XComponentContext.hpp>
-#include <com/sun/star/graphic/XGraphic.hpp>
-#include <com/sun/star/beans/XPropertyState.hpp>
-#include <com/sun/star/container/XNamed.hpp>
-#include <com/sun/star/document/PrinterIndependentLayout.hpp>
-#include <com/sun/star/document/IndexedPropertyValues.hpp>
-#include <com/sun/star/drawing/XDrawPageSupplier.hpp>
-#include <com/sun/star/embed/XEmbeddedObject.hpp>
-#include <com/sun/star/lang/XServiceInfo.hpp>
-#include <com/sun/star/style/XStyleFamiliesSupplier.hpp>
-#include <com/sun/star/style/LineNumberPosition.hpp>
-#include <com/sun/star/style/LineSpacing.hpp>
-#include <com/sun/star/style/LineSpacingMode.hpp>
-#include <com/sun/star/text/ChapterFormat.hpp>
-#include <com/sun/star/text/FilenameDisplayFormat.hpp>
-#include <com/sun/star/text/SetVariableType.hpp>
-#include <com/sun/star/text/XDocumentIndex.hpp>
-#include <com/sun/star/text/XDocumentIndexesSupplier.hpp>
-#include <com/sun/star/text/XFootnote.hpp>
-#include <com/sun/star/text/XLineNumberingProperties.hpp>
-#include <com/sun/star/style/XStyle.hpp>
-#include <com/sun/star/text/PageNumberType.hpp>
-#include <com/sun/star/text/HoriOrientation.hpp>
-#include <com/sun/star/text/VertOrientation.hpp>
-#include <com/sun/star/text/ReferenceFieldPart.hpp>
-#include <com/sun/star/text/RelOrientation.hpp>
-#include <com/sun/star/text/ReferenceFieldSource.hpp>
-#include <com/sun/star/text/SizeType.hpp>
-#include <com/sun/star/text/TextContentAnchorType.hpp>
-#include <com/sun/star/text/WrapTextMode.hpp>
-#include <com/sun/star/text/XDependentTextField.hpp>
-#include <com/sun/star/text/XParagraphCursor.hpp>
-#include <com/sun/star/text/XRedline.hpp>
-#include <com/sun/star/text/XTextFieldsSupplier.hpp>
-#include <com/sun/star/text/XTextFrame.hpp>
-#include <com/sun/star/text/RubyPosition.hpp>
-#include <com/sun/star/text/XTextRangeCompare.hpp>
-#include <com/sun/star/style/DropCapFormat.hpp>
-#include <com/sun/star/util/NumberFormatter.hpp>
-#include <com/sun/star/util/XNumberFormatsSupplier.hpp>
-#include <com/sun/star/util/XNumberFormatter.hpp>
-#include <com/sun/star/document/XViewDataSupplier.hpp>
-#include <com/sun/star/container/XIndexContainer.hpp>
-#include <com/sun/star/text/ControlCharacter.hpp>
-#include <com/sun/star/text/XTextColumns.hpp>
-#include <com/sun/star/awt/CharSet.hpp>
-#include <com/sun/star/lang/XMultiServiceFactory.hpp>
-#include <com/sun/star/embed/XHierarchicalStorageAccess.hpp>
-#include <com/sun/star/embed/ElementModes.hpp>
-#include <com/sun/star/document/XImporter.hpp>
-#include <com/sun/star/document/XFilter.hpp>
-#include <editeng/flditem.hxx>
-#include <editeng/unotext.hxx>
-#include <o3tl/safeint.hxx>
-#include <o3tl/temporary.hxx>
-#include <oox/mathml/import.hxx>
-#include <xmloff/odffields.hxx>
-#include <rtl/uri.hxx>
-#include <unotools/ucbstreamhelper.hxx>
-#include <unotools/streamwrap.hxx>
-
-#include <dmapper/GraphicZOrderHelper.hxx>
-
-#include <oox/token/tokens.hxx>
-
-#include <cmath>
-#include <optional>
-#include <map>
-#include <tuple>
-#include <unordered_map>
-#include <regex>
-#include <algorithm>
-
-#include <officecfg/Office/Common.hxx>
-#include <filter/msfilter/util.hxx>
-#include <filter/msfilter/ww8fields.hxx>
-#include <comphelper/sequence.hxx>
-#include <comphelper/propertyvalue.hxx>
-#include <comphelper/propertysequence.hxx>
-#include <unotools/configmgr.hxx>
-#include <unotools/mediadescriptor.hxx>
-#include <tools/diagnose_ex.h>
-#include <sal/log.hxx>
-#include <com/sun/star/drawing/FillStyle.hpp>
-
-#include <unicode/errorcode.h>
-#include <unicode/regex.h>
-
-using namespace ::com::sun::star;
-using namespace oox;
-namespace writerfilter::dmapper{
-
-//line numbering for header/footer
-static void lcl_linenumberingHeaderFooter( const uno::Reference<container::XNameContainer>& xStyles, const OUString& rname, DomainMapper_Impl* dmapper )
-{
- const StyleSheetEntryPtr pEntry = dmapper->GetStyleSheetTable()->FindStyleSheetByISTD( rname );
- if (!pEntry)
- return;
- const StyleSheetPropertyMap* pStyleSheetProperties = dynamic_cast<const StyleSheetPropertyMap*>( pEntry->pProperties.get() );
- if ( !pStyleSheetProperties )
- return;
- sal_Int32 nListId = pStyleSheetProperties->GetListId();
- if( xStyles.is() )
- {
- if( xStyles->hasByName( rname ) )
- {
- uno::Reference< style::XStyle > xStyle;
- xStyles->getByName( rname ) >>= xStyle;
- if( !xStyle.is() )
- return;
- uno::Reference<beans::XPropertySet> xPropertySet( xStyle, uno::UNO_QUERY );
- xPropertySet->setPropertyValue( getPropertyName( PROP_PARA_LINE_NUMBER_COUNT ), uno::makeAny( nListId >= 0 ) );
- }
- }
-}
-
-// Populate Dropdown Field properties from FFData structure
-static void lcl_handleDropdownField( const uno::Reference< beans::XPropertySet >& rxFieldProps, const FFDataHandler::Pointer_t& pFFDataHandler )
-{
- if ( !rxFieldProps.is() )
- return;
-
- if ( !pFFDataHandler->getName().isEmpty() )
- rxFieldProps->setPropertyValue( "Name", uno::makeAny( pFFDataHandler->getName() ) );
-
- const FFDataHandler::DropDownEntries_t& rEntries = pFFDataHandler->getDropDownEntries();
- uno::Sequence< OUString > sItems( rEntries.size() );
- ::std::copy( rEntries.begin(), rEntries.end(), sItems.begin());
- if ( sItems.hasElements() )
- rxFieldProps->setPropertyValue( "Items", uno::makeAny( sItems ) );
-
- sal_Int32 nResult = pFFDataHandler->getDropDownResult().toInt32();
- if (nResult > 0 && o3tl::make_unsigned(nResult) < sItems.size())
- rxFieldProps->setPropertyValue( "SelectedItem", uno::makeAny( sItems[ nResult ] ) );
- if ( !pFFDataHandler->getHelpText().isEmpty() )
- rxFieldProps->setPropertyValue( "Help", uno::makeAny( pFFDataHandler->getHelpText() ) );
-}
-
-static void lcl_handleTextField( const uno::Reference< beans::XPropertySet >& rxFieldProps, const FFDataHandler::Pointer_t& pFFDataHandler )
-{
- if ( rxFieldProps.is() && pFFDataHandler )
- {
- rxFieldProps->setPropertyValue
- (getPropertyName(PROP_HINT),
- uno::makeAny(pFFDataHandler->getStatusText()));
- rxFieldProps->setPropertyValue
- (getPropertyName(PROP_HELP),
- uno::makeAny(pFFDataHandler->getHelpText()));
- rxFieldProps->setPropertyValue
- (getPropertyName(PROP_CONTENT),
- uno::makeAny(pFFDataHandler->getTextDefault()));
- }
-}
-
-namespace {
-
-struct FieldConversion
-{
- const char* cFieldServiceName;
- FieldId eFieldId;
-};
-
-}
-
-typedef std::unordered_map<OUString, FieldConversion> FieldConversionMap_t;
-
-/// Gives access to the parent field context of the topmost one, if there is any.
-static FieldContextPtr GetParentFieldContext(const std::deque<FieldContextPtr>& rFieldStack)
-{
- if (rFieldStack.size() < 2)
- {
- return nullptr;
- }
-
- return rFieldStack[rFieldStack.size() - 2];
-}
-
-/// Decides if the pInner field inside pOuter is allowed in Writer core, depending on their type.
-static bool IsFieldNestingAllowed(const FieldContextPtr& pOuter, const FieldContextPtr& pInner)
-{
- std::optional<FieldId> oOuterFieldId = pOuter->GetFieldId();
- OUString aCommand = pOuter->GetCommand();
-
- // Ignore leading space before the field name, but don't accept IFF when we check for IF.
- if (!aCommand.isEmpty() && aCommand[0] == ' ')
- {
- aCommand = aCommand.subView(1);
- }
-
- if (!oOuterFieldId && aCommand.startsWith("IF "))
- {
- // This will be FIELD_IF once the command is closed.
- oOuterFieldId = FIELD_IF;
- }
-
- if (!oOuterFieldId)
- {
- return true;
- }
-
- if (!pInner->GetFieldId())
- {
- return true;
- }
-
- switch (*oOuterFieldId)
- {
- case FIELD_IF:
- {
- switch (*pInner->GetFieldId())
- {
- case FIELD_DOCVARIABLE:
- case FIELD_FORMULA:
- case FIELD_IF:
- case FIELD_MERGEFIELD:
- {
- return false;
- }
- default:
- break;
- }
- break;
- }
- default:
- break;
- }
-
- return true;
-}
-
-uno::Any FloatingTableInfo::getPropertyValue(std::u16string_view propertyName)
-{
- for( beans::PropertyValue const & propVal : std::as_const(m_aFrameProperties) )
- if( propVal.Name == propertyName )
- return propVal.Value ;
- return uno::Any() ;
-}
-
-DomainMapper_Impl::DomainMapper_Impl(
- DomainMapper& rDMapper,
- uno::Reference<uno::XComponentContext> const& xContext,
- uno::Reference<lang::XComponent> const& xModel,
- SourceDocumentType eDocumentType,
- utl::MediaDescriptor const & rMediaDesc) :
- m_eDocumentType( eDocumentType ),
- m_rDMapper( rDMapper ),
- m_xTextDocument( xModel, uno::UNO_QUERY ),
- m_xTextFactory( xModel, uno::UNO_QUERY ),
- m_xComponentContext( xContext ),
- m_bForceGenericFields(!utl::ConfigManager::IsFuzzing() && officecfg::Office::Common::Filter::Microsoft::Import::ForceImportWWFieldsAsGenericFields::get(m_xComponentContext)),
- m_bSetUserFieldContent( false ),
- m_bSetCitation( false ),
- m_bSetDateValue( false ),
- m_bIsFirstSection( true ),
- m_bIsColumnBreakDeferred( false ),
- m_bIsPageBreakDeferred( false ),
- m_bSdtEndDeferred(false),
- m_bParaSdtEndDeferred(false),
- m_bStartTOC(false),
- m_bStartTOCHeaderFooter(false),
- m_bStartedTOC(false),
- m_bStartIndex(false),
- m_bStartBibliography(false),
- m_nStartGenericField(0),
- m_bTextInserted(false),
- m_sCurrentPermId(0),
- m_bFrameDirectionSet(false),
- m_pLastSectionContext( ),
- m_pLastCharacterContext(),
- m_sCurrentParaStyleName(),
- m_sDefaultParaStyleName(),
- m_bInStyleSheetImport( false ),
- m_bInAnyTableImport( false ),
- m_eInHeaderFooterImport( HeaderFooterImportState::none ),
- m_bDiscardHeaderFooter( false ),
- m_bInFootOrEndnote(false),
- m_bHasFootnoteStyle(false),
- m_bCheckFootnoteStyle(false),
- m_eSkipFootnoteState(SkipFootnoteSeparator::OFF),
- m_bLineNumberingSet( false ),
- m_bIsInFootnoteProperties( false ),
- m_bIsParaMarkerChange( false ),
- m_bParaChanged( false ),
- m_bIsFirstParaInSection( true ),
- m_bIsFirstParaInSectionAfterRedline( true ),
- m_bDummyParaAddedForTableInSection( false ),
- m_bTextFrameInserted(false),
- m_bIsPreviousParagraphFramed( false ),
- m_bIsLastParaInSection( false ),
- m_bIsLastSectionGroup( false ),
- m_bIsInComments( false ),
- m_bParaSectpr( false ),
- m_bUsingEnhancedFields( false ),
- m_bSdt(false),
- m_bIsFirstRun(false),
- m_bIsOutsideAParagraph(true),
- m_xAnnotationField(),
- m_nAnnotationId( -1 ),
- m_aAnnotationPositions(),
- m_aSmartTagHandler(m_xComponentContext, m_xTextDocument),
- m_xInsertTextRange(rMediaDesc.getUnpackedValueOrDefault("TextInsertModeRange", uno::Reference<text::XTextRange>())),
- m_xAltChunkStartingRange(rMediaDesc.getUnpackedValueOrDefault("AltChunkStartingRange", uno::Reference<text::XTextRange>())),
- m_bIsNewDoc(!rMediaDesc.getUnpackedValueOrDefault("InsertMode", false)),
- m_bIsAltChunk(rMediaDesc.getUnpackedValueOrDefault("AltChunkMode", false)),
- m_bIsReadGlossaries(rMediaDesc.getUnpackedValueOrDefault("ReadGlossaries", false)),
- m_nTableDepth(0),
- m_nTableCellDepth(0),
- m_nLastTableCellParagraphDepth(0),
- m_bHasFtn(false),
- m_bHasFtnSep(false),
- m_bCheckFirstFootnoteTab(false),
- m_bIgnoreNextTab(false),
- m_bIsSplitPara(false),
- m_bIsActualParagraphFramed( false ),
- m_vTextFramesForChaining(),
- m_bParaHadField(false),
- m_bSaveParaHadField(false),
- m_bParaAutoBefore(false),
- m_bFirstParagraphInCell(true),
- m_bSaveFirstParagraphInCell(false),
- m_bParaWithInlineObject(false)
-
-{
- m_aBaseUrl = rMediaDesc.getUnpackedValueOrDefault(
- utl::MediaDescriptor::PROP_DOCUMENTBASEURL(), OUString());
- if (m_aBaseUrl.isEmpty()) {
- m_aBaseUrl = rMediaDesc.getUnpackedValueOrDefault(
- utl::MediaDescriptor::PROP_URL(), OUString());
- }
-
- appendTableManager( );
- GetBodyText();
- uno::Reference< text::XTextAppend > xBodyTextAppend( m_xBodyText, uno::UNO_QUERY );
- m_aTextAppendStack.push(TextAppendContext(xBodyTextAppend,
- m_bIsNewDoc ? uno::Reference<text::XTextCursor>() : m_xBodyText->createTextCursorByRange(m_xInsertTextRange)));
-
- //todo: does it makes sense to set the body text as static text interface?
- uno::Reference< text::XTextAppendAndConvert > xBodyTextAppendAndConvert( m_xBodyText, uno::UNO_QUERY );
- m_pTableHandler = new DomainMapperTableHandler(xBodyTextAppendAndConvert, *this);
- getTableManager( ).setHandler(m_pTableHandler);
-
- getTableManager( ).startLevel();
- m_bUsingEnhancedFields = !utl::ConfigManager::IsFuzzing() && officecfg::Office::Common::Filter::Microsoft::Import::ImportWWFieldsAsEnhancedFields::get(m_xComponentContext);
-
- m_pSdtHelper = new SdtHelper(*this);
-
- m_aRedlines.push(std::vector<RedlineParamsPtr>());
-
- if (m_bIsAltChunk)
- {
- m_bIsFirstSection = false;
- }
-}
-
-
-DomainMapper_Impl::~DomainMapper_Impl()
-{
- ChainTextFrames();
- // Don't remove last paragraph when pasting, sw expects that empty paragraph.
- if (m_bIsNewDoc)
- RemoveLastParagraph();
- if (hasTableManager())
- {
- getTableManager().endLevel();
- popTableManager();
- }
-}
-
-uno::Reference< container::XNameContainer > const & DomainMapper_Impl::GetPageStyles()
-{
- if(!m_xPageStyles1.is())
- {
- uno::Reference< style::XStyleFamiliesSupplier > xSupplier( m_xTextDocument, uno::UNO_QUERY );
- if (xSupplier.is())
- xSupplier->getStyleFamilies()->getByName("PageStyles") >>= m_xPageStyles1;
- }
- return m_xPageStyles1;
-}
-
-OUString DomainMapper_Impl::GetUnusedPageStyleName()
-{
- static const char DEFAULT_STYLE[] = "Converted";
- if (!m_xNextUnusedPageStyleNo)
- {
- const uno::Sequence< OUString > aPageStyleNames = GetPageStyles()->getElementNames();
- sal_Int32 nMaxIndex = 0;
- // find the highest number x in each style with the name "DEFAULT_STYLE+x" and
- // return an incremented name
-
- for ( const auto& rStyleName : aPageStyleNames )
- {
- if ( rStyleName.startsWith( DEFAULT_STYLE ) )
- {
- sal_Int32 nIndex = rStyleName.copy( strlen( DEFAULT_STYLE ) ).toInt32();
- if ( nIndex > nMaxIndex )
- nMaxIndex = nIndex;
- }
- }
- m_xNextUnusedPageStyleNo = nMaxIndex + 1;
- }
-
- OUString sPageStyleName = DEFAULT_STYLE + OUString::number( *m_xNextUnusedPageStyleNo );
- *m_xNextUnusedPageStyleNo = *m_xNextUnusedPageStyleNo + 1;
- return sPageStyleName;
-}
-
-uno::Reference< text::XText > const & DomainMapper_Impl::GetBodyText()
-{
- if(!m_xBodyText.is())
- {
- if (m_xInsertTextRange.is())
- m_xBodyText = m_xInsertTextRange->getText();
- else if (m_xTextDocument.is())
- m_xBodyText = m_xTextDocument->getText();
- }
- return m_xBodyText;
-}
-
-
-uno::Reference< beans::XPropertySet > const & DomainMapper_Impl::GetDocumentSettings()
-{
- if( !m_xDocumentSettings.is() && m_xTextFactory.is())
- {
- m_xDocumentSettings.set( m_xTextFactory->createInstance("com.sun.star.document.Settings"), uno::UNO_QUERY );
- }
- return m_xDocumentSettings;
-}
-
-
-void DomainMapper_Impl::SetDocumentSettingsProperty( const OUString& rPropName, const uno::Any& rValue )
-{
- uno::Reference< beans::XPropertySet > xSettings = GetDocumentSettings();
- if( xSettings.is() )
- {
- try
- {
- xSettings->setPropertyValue( rPropName, rValue );
- }
- catch( const uno::Exception& )
- {
- }
- }
-}
-void DomainMapper_Impl::RemoveDummyParaForTableInSection()
-{
- SetIsDummyParaAddedForTableInSection(false);
- PropertyMapPtr pContext = GetTopContextOfType(CONTEXT_SECTION);
- SectionPropertyMap* pSectionContext = dynamic_cast< SectionPropertyMap* >( pContext.get() );
- if (!pSectionContext)
- return;
-
- if (m_aTextAppendStack.empty())
- return;
- uno::Reference< text::XTextAppend > xTextAppend = m_aTextAppendStack.top().xTextAppend;
- if (!xTextAppend.is())
- return;
-
- uno::Reference< text::XTextCursor > xCursor = xTextAppend->createTextCursorByRange(pSectionContext->GetStartingRange());
-
- // Remove the extra NumPicBullets from the document,
- // which get attached to the first paragraph in the
- // document
- ListsManager::Pointer pListTable = GetListTable();
- pListTable->DisposeNumPicBullets();
-
- uno::Reference<container::XEnumerationAccess> xEnumerationAccess(xCursor, uno::UNO_QUERY);
- if (xEnumerationAccess.is() && m_aTextAppendStack.size() == 1 )
- {
- uno::Reference<container::XEnumeration> xEnumeration = xEnumerationAccess->createEnumeration();
- uno::Reference<lang::XComponent> xParagraph(xEnumeration->nextElement(), uno::UNO_QUERY);
- xParagraph->dispose();
- }
-}
-void DomainMapper_Impl::AddDummyParaForTableInSection()
-{
- // Shapes can't have sections.
- if (IsInShape())
- return;
-
- if (!m_aTextAppendStack.empty())
- {
- uno::Reference< text::XTextAppend > xTextAppend = m_aTextAppendStack.top().xTextAppend;
- if (xTextAppend.is())
- {
- xTextAppend->finishParagraph( uno::Sequence< beans::PropertyValue >() );
- SetIsDummyParaAddedForTableInSection(true);
- }
- }
-}
-
-void DomainMapper_Impl::RemoveLastParagraph( )
-{
- if (m_bDiscardHeaderFooter)
- return;
-
- if (m_aTextAppendStack.empty())
- return;
- uno::Reference< text::XTextAppend > xTextAppend = m_aTextAppendStack.top().xTextAppend;
- if (!xTextAppend.is())
- return;
- try
- {
- uno::Reference< text::XTextCursor > xCursor;
- if (m_bIsNewDoc)
- {
- xCursor = xTextAppend->createTextCursor();
- xCursor->gotoEnd(false);
- }
- else
- xCursor = m_aTextAppendStack.top().xCursor;
- uno::Reference<container::XEnumerationAccess> xEnumerationAccess(xCursor, uno::UNO_QUERY);
- // Keep the character properties of the last but one paragraph, even if
- // it's empty. This works for headers/footers, and maybe in other cases
- // as well, but surely not in textboxes.
- // fdo#58327: also do this at the end of the document: when pasting,
- // a table before the cursor position would be deleted
- // (but only for paste/insert, not load; otherwise it can happen that
- // flys anchored at the disposed paragraph are deleted (fdo47036.rtf))
- bool const bEndOfDocument(m_aTextAppendStack.size() == 1);
- if ((IsInHeaderFooter() || (bEndOfDocument && !m_bIsNewDoc))
- && xEnumerationAccess.is())
- {
- uno::Reference<container::XEnumeration> xEnumeration = xEnumerationAccess->createEnumeration();
- uno::Reference<lang::XComponent> xParagraph(xEnumeration->nextElement(), uno::UNO_QUERY);
- xParagraph->dispose();
- }
- else if (xCursor.is())
- {
- xCursor->goLeft( 1, true );
- // If this is a text on a shape, possibly the text has the trailing
- // newline removed already.
- if (xCursor->getString() == SAL_NEWLINE_STRING ||
- // tdf#105444 comments need an exception, if SAL_NEWLINE_STRING defined as "\r\n"
- (sizeof(SAL_NEWLINE_STRING)-1 == 2 && xCursor->getString() == "\n"))
- {
- uno::Reference<beans::XPropertySet> xDocProps(GetTextDocument(), uno::UNO_QUERY);
- const OUString aRecordChanges("RecordChanges");
- uno::Any aPreviousValue(xDocProps->getPropertyValue(aRecordChanges));
-
- // disable redlining for this operation, otherwise we might
- // end up with an unwanted recorded deletion
- xDocProps->setPropertyValue(aRecordChanges, uno::Any(false));
-
- // delete
- xCursor->setString(OUString());
-
- // restore again
- xDocProps->setPropertyValue(aRecordChanges, aPreviousValue);
- }
- }
- }
- catch( const uno::Exception& )
- {
- }
-}
-
-
-void DomainMapper_Impl::SetIsLastSectionGroup( bool bIsLast )
-{
- m_bIsLastSectionGroup = bIsLast;
-}
-
-void DomainMapper_Impl::SetIsLastParagraphInSection( bool bIsLast )
-{
- m_bIsLastParaInSection = bIsLast;
-}
-
-
-void DomainMapper_Impl::SetIsFirstParagraphInSection( bool bIsFirst )
-{
- m_bIsFirstParaInSection = bIsFirst;
-}
-
-void DomainMapper_Impl::SetIsFirstParagraphInSectionAfterRedline( bool bIsFirstAfterRedline )
-{
- m_bIsFirstParaInSectionAfterRedline = bIsFirstAfterRedline;
-}
-
-bool DomainMapper_Impl::GetIsFirstParagraphInSection( bool bAfterRedline ) const
-{
- // Anchored objects may include multiple paragraphs,
- // and none of them should be considered the first para in section.
- return ( bAfterRedline ? m_bIsFirstParaInSectionAfterRedline : m_bIsFirstParaInSection )
- && !IsInShape()
- && !m_bIsInComments
- && !IsInFootOrEndnote();
-}
-
-void DomainMapper_Impl::SetIsFirstParagraphInShape(bool bIsFirst)
-{
- m_bIsFirstParaInShape = bIsFirst;
-}
-
-void DomainMapper_Impl::SetIsDummyParaAddedForTableInSection( bool bIsAdded )
-{
- m_bDummyParaAddedForTableInSection = bIsAdded;
-}
-
-
-void DomainMapper_Impl::SetIsTextFrameInserted( bool bIsInserted )
-{
- m_bTextFrameInserted = bIsInserted;
-}
-
-
-void DomainMapper_Impl::SetParaSectpr(bool bParaSectpr)
-{
- m_bParaSectpr = bParaSectpr;
-}
-
-
-void DomainMapper_Impl::SetSdt(bool bSdt)
-{
- m_bSdt = bSdt;
-
- if (m_bSdt && !m_aTextAppendStack.empty())
- {
- m_xSdtEntryStart = GetTopTextAppend()->getEnd();
- }
- else
- {
- m_xSdtEntryStart.clear();
- }
-}
-
-
-void DomainMapper_Impl::PushProperties(ContextType eId)
-{
- PropertyMapPtr pInsert(eId == CONTEXT_SECTION ?
- (new SectionPropertyMap( m_bIsFirstSection )) :
- eId == CONTEXT_PARAGRAPH ? new ParagraphPropertyMap : new PropertyMap);
- if(eId == CONTEXT_SECTION)
- {
- if( m_bIsFirstSection )
- m_bIsFirstSection = false;
- // beginning with the second section group a section has to be inserted
- // into the document
- SectionPropertyMap* pSectionContext_ = dynamic_cast< SectionPropertyMap* >( pInsert.get() );
- if (!m_aTextAppendStack.empty())
- {
- uno::Reference< text::XTextAppend > xTextAppend = m_aTextAppendStack.top().xTextAppend;
- if (xTextAppend.is() && pSectionContext_)
- pSectionContext_->SetStart( xTextAppend->getEnd() );
- }
- }
- if(eId == CONTEXT_PARAGRAPH && m_bIsSplitPara)
- {
- m_aPropertyStacks[eId].push( GetTopContextOfType(eId));
- m_bIsSplitPara = false;
- }
- else
- {
- m_aPropertyStacks[eId].push( pInsert );
- }
- m_aContextStack.push(eId);
-
- m_pTopContext = m_aPropertyStacks[eId].top();
-}
-
-
-void DomainMapper_Impl::PushStyleProperties( const PropertyMapPtr& pStyleProperties )
-{
- m_aPropertyStacks[CONTEXT_STYLESHEET].push( pStyleProperties );
- m_aContextStack.push(CONTEXT_STYLESHEET);
-
- m_pTopContext = m_aPropertyStacks[CONTEXT_STYLESHEET].top();
-}
-
-
-void DomainMapper_Impl::PushListProperties(const PropertyMapPtr& pListProperties)
-{
- m_aPropertyStacks[CONTEXT_LIST].push( pListProperties );
- m_aContextStack.push(CONTEXT_LIST);
- m_pTopContext = m_aPropertyStacks[CONTEXT_LIST].top();
-}
-
-
-void DomainMapper_Impl::PopProperties(ContextType eId)
-{
- OSL_ENSURE(!m_aPropertyStacks[eId].empty(), "section stack already empty");
- if ( m_aPropertyStacks[eId].empty() )
- return;
-
- if ( eId == CONTEXT_SECTION )
- {
- if (m_aPropertyStacks[eId].size() == 1) // tdf#112202 only top level !!!
- {
- m_pLastSectionContext = m_aPropertyStacks[eId].top();
- }
- }
- else if (eId == CONTEXT_CHARACTER)
- {
- m_pLastCharacterContext = m_aPropertyStacks[eId].top();
- // Sadly an assert about deferredCharacterProperties being empty is not possible
- // here, because appendTextPortion() may not be called for every character section.
- deferredCharacterProperties.clear();
- }
-
- if (!IsInFootOrEndnote() && IsInCustomFootnote() && !m_aPropertyStacks[eId].empty())
- {
- PropertyMapPtr pRet = m_aPropertyStacks[eId].top();
- if (pRet->GetFootnote().is() && m_pFootnoteContext.is())
- EndCustomFootnote();
- }
-
- m_aPropertyStacks[eId].pop();
- m_aContextStack.pop();
- if(!m_aContextStack.empty() && !m_aPropertyStacks[m_aContextStack.top()].empty())
-
- m_pTopContext = m_aPropertyStacks[m_aContextStack.top()].top();
- else
- {
- // OSL_ENSURE(eId == CONTEXT_SECTION, "this should happen at a section context end");
- m_pTopContext.clear();
- }
-}
-
-
-PropertyMapPtr DomainMapper_Impl::GetTopContextOfType(ContextType eId)
-{
- PropertyMapPtr pRet;
- if(!m_aPropertyStacks[eId].empty())
- pRet = m_aPropertyStacks[eId].top();
- return pRet;
-}
-
-bool DomainMapper_Impl::HasTopText() const
-{
- return !m_aTextAppendStack.empty();
-}
-
-uno::Reference< text::XTextAppend > const & DomainMapper_Impl::GetTopTextAppend()
-{
- OSL_ENSURE(!m_aTextAppendStack.empty(), "text append stack is empty" );
- return m_aTextAppendStack.top().xTextAppend;
-}
-
-FieldContextPtr const & DomainMapper_Impl::GetTopFieldContext()
-{
- SAL_WARN_IF(m_aFieldStack.empty(), "writerfilter.dmapper", "Field stack is empty");
- return m_aFieldStack.back();
-}
-
-bool DomainMapper_Impl::HasTopAnchoredObjects() const
-{
- return !m_aTextAppendStack.empty() && !m_aTextAppendStack.top().m_aAnchoredObjects.empty();
-}
-
-void DomainMapper_Impl::InitTabStopFromStyle( const uno::Sequence< style::TabStop >& rInitTabStops )
-{
- OSL_ENSURE(m_aCurrentTabStops.empty(), "tab stops already initialized");
- for( const auto& rTabStop : rInitTabStops)
- {
- m_aCurrentTabStops.emplace_back(rTabStop);
- }
-}
-
-void DomainMapper_Impl::IncorporateTabStop( const DeletableTabStop & rTabStop )
-{
- sal_Int32 nConverted = rTabStop.Position;
- auto aIt = std::find_if(m_aCurrentTabStops.begin(), m_aCurrentTabStops.end(),
- [&nConverted](const DeletableTabStop& rCurrentTabStop) { return rCurrentTabStop.Position == nConverted; });
- if( aIt != m_aCurrentTabStops.end() )
- {
- if( rTabStop.bDeleted )
- m_aCurrentTabStops.erase( aIt );
- else
- *aIt = rTabStop;
- }
- else
- m_aCurrentTabStops.push_back( rTabStop );
-}
-
-
-uno::Sequence< style::TabStop > DomainMapper_Impl::GetCurrentTabStopAndClear()
-{
- std::vector<style::TabStop> aRet;
- for (const DeletableTabStop& rStop : m_aCurrentTabStops)
- {
- if (!rStop.bDeleted)
- aRet.push_back(rStop);
- }
- m_aCurrentTabStops.clear();
- return comphelper::containerToSequence(aRet);
-}
-
-OUString DomainMapper_Impl::GetCurrentParaStyleName()
-{
- OUString sName;
- // use saved currParaStyleName as a fallback, in case no particular para style name applied.
- // tdf#134784 except in the case of first paragraph of shapes to avoid bad fallback.
- // TODO fix this "highly inaccurate" m_sCurrentParaStyleName
- if ( !IsInShape() )
- sName = m_sCurrentParaStyleName;
-
- PropertyMapPtr pParaContext = GetTopContextOfType(CONTEXT_PARAGRAPH);
- if ( pParaContext && pParaContext->isSet(PROP_PARA_STYLE_NAME) )
- pParaContext->getProperty(PROP_PARA_STYLE_NAME)->second >>= sName;
-
- // In rare situations the name might still be blank, so use the default style,
- // despite documentation that states, "If this attribute is not specified for any style,
- // then no properties shall be applied to objects of the specified type."
- // Word, however, assigns "Normal" style even in these situations.
- if ( !m_bInStyleSheetImport && sName.isEmpty() )
- sName = GetDefaultParaStyleName();
-
- return sName;
-}
-
-OUString DomainMapper_Impl::GetDefaultParaStyleName()
-{
- // After import the default style won't change and is frequently requested: cache the LO style name.
- // TODO assert !InStyleSheetImport? This function really only makes sense once import is finished anyway.
- if ( m_sDefaultParaStyleName.isEmpty() )
- {
- const StyleSheetEntryPtr pEntry = GetStyleSheetTable()->FindDefaultParaStyle();
- if ( pEntry && !pEntry->sConvertedStyleName.isEmpty() )
- {
- if ( !m_bInStyleSheetImport )
- m_sDefaultParaStyleName = pEntry->sConvertedStyleName;
- return pEntry->sConvertedStyleName;
- }
- else
- return "Standard";
- }
- return m_sDefaultParaStyleName;
-}
-
-uno::Any DomainMapper_Impl::GetPropertyFromStyleSheet(PropertyIds eId, StyleSheetEntryPtr pEntry, const bool bDocDefaults, const bool bPara, bool* pIsDocDefault)
-{
- while(pEntry)
- {
- if(pEntry->pProperties)
- {
- std::optional<PropertyMap::Property> aProperty =
- pEntry->pProperties->getProperty(eId);
- if( aProperty )
- {
- if (pIsDocDefault)
- *pIsDocDefault = pEntry->pProperties->isDocDefault(eId);
-
- return aProperty->second;
- }
- }
- //search until the property is set or no parent is available
- StyleSheetEntryPtr pNewEntry;
- if ( !pEntry->sBaseStyleIdentifier.isEmpty() )
- pNewEntry = GetStyleSheetTable()->FindStyleSheetByISTD(pEntry->sBaseStyleIdentifier);
-
- SAL_WARN_IF( pEntry == pNewEntry, "writerfilter.dmapper", "circular loop in style hierarchy?");
-
- if (pEntry == pNewEntry) //fdo#49587
- break;
-
- pEntry = pNewEntry;
- }
- // not found in style, try the document's DocDefault properties
- if ( bDocDefaults && bPara )
- {
- const PropertyMapPtr& pDefaultParaProps = GetStyleSheetTable()->GetDefaultParaProps();
- if ( pDefaultParaProps )
- {
- std::optional<PropertyMap::Property> aProperty = pDefaultParaProps->getProperty(eId);
- if ( aProperty )
- {
- if (pIsDocDefault)
- *pIsDocDefault = true;
-
- return aProperty->second;
- }
- }
- }
- if ( bDocDefaults && isCharacterProperty(eId) )
- {
- const PropertyMapPtr& pDefaultCharProps = GetStyleSheetTable()->GetDefaultCharProps();
- if ( pDefaultCharProps )
- {
- std::optional<PropertyMap::Property> aProperty = pDefaultCharProps->getProperty(eId);
- if ( aProperty )
- {
- if (pIsDocDefault)
- *pIsDocDefault = true;
-
- return aProperty->second;
- }
- }
- }
-
- if (pIsDocDefault)
- *pIsDocDefault = false;
-
- return uno::Any();
-}
-
-uno::Any DomainMapper_Impl::GetPropertyFromParaStyleSheet(PropertyIds eId)
-{
- StyleSheetEntryPtr pEntry;
- if ( m_bInStyleSheetImport )
- pEntry = GetStyleSheetTable()->GetCurrentEntry();
- else
- pEntry = GetStyleSheetTable()->FindStyleSheetByConvertedStyleName(GetCurrentParaStyleName());
- return GetPropertyFromStyleSheet(eId, pEntry, /*bDocDefaults=*/true, /*bPara=*/true);
-}
-
-uno::Any DomainMapper_Impl::GetPropertyFromCharStyleSheet(PropertyIds eId, const PropertyMapPtr& rContext)
-{
- if ( m_bInStyleSheetImport || eId == PROP_CHAR_STYLE_NAME || !isCharacterProperty(eId) )
- return uno::Any();
-
- StyleSheetEntryPtr pEntry;
- OUString sCharStyleName;
- if ( GetAnyProperty(PROP_CHAR_STYLE_NAME, rContext) >>= sCharStyleName )
- pEntry = GetStyleSheetTable()->FindStyleSheetByConvertedStyleName(sCharStyleName);
- return GetPropertyFromStyleSheet(eId, pEntry, /*bDocDefaults=*/false, /*bPara=*/false);
-}
-
-uno::Any DomainMapper_Impl::GetAnyProperty(PropertyIds eId, const PropertyMapPtr& rContext)
-{
- // first look in directly applied attributes
- if ( rContext )
- {
- std::optional<PropertyMap::Property> aProperty = rContext->getProperty(eId);
- if ( aProperty )
- return aProperty->second;
- }
-
- // then look whether it was inherited from a directly applied character style
- if ( eId != PROP_CHAR_STYLE_NAME && isCharacterProperty(eId) )
- {
- uno::Any aRet = GetPropertyFromCharStyleSheet(eId, rContext);
- if ( aRet.hasValue() )
- return aRet;
- }
-
- // then look in current paragraph style, and docDefaults
- return GetPropertyFromParaStyleSheet(eId);
-}
-
-OUString DomainMapper_Impl::GetListStyleName(sal_Int32 nListId)
-{
- auto const pList(GetListTable()->GetList( nListId ));
- return pList ? pList->GetStyleName() : OUString();
-}
-
-ListsManager::Pointer const & DomainMapper_Impl::GetListTable()
-{
- if(!m_pListTable)
- m_pListTable =
- new ListsManager( m_rDMapper, m_xTextFactory );
- return m_pListTable;
-}
-
-
-void DomainMapper_Impl::deferBreak( BreakType deferredBreakType)
-{
- switch (deferredBreakType)
- {
- case COLUMN_BREAK:
- m_bIsColumnBreakDeferred = true;
- break;
- case PAGE_BREAK:
- // See SwWW8ImplReader::HandlePageBreakChar(), page break should be
- // ignored inside tables.
- if (m_nTableDepth > 0)
- return;
-
- m_bIsPageBreakDeferred = true;
- break;
- default:
- return;
- }
-}
-
-bool DomainMapper_Impl::isBreakDeferred( BreakType deferredBreakType )
-{
- switch (deferredBreakType)
- {
- case COLUMN_BREAK:
- return m_bIsColumnBreakDeferred;
- case PAGE_BREAK:
- return m_bIsPageBreakDeferred;
- default:
- return false;
- }
-}
-
-void DomainMapper_Impl::clearDeferredBreak(BreakType deferredBreakType)
-{
- switch (deferredBreakType)
- {
- case COLUMN_BREAK:
- m_bIsColumnBreakDeferred = false;
- break;
- case PAGE_BREAK:
- m_bIsPageBreakDeferred = false;
- break;
- default:
- break;
- }
-}
-
-void DomainMapper_Impl::clearDeferredBreaks()
-{
- m_bIsColumnBreakDeferred = false;
- m_bIsPageBreakDeferred = false;
-}
-
-void DomainMapper_Impl::setSdtEndDeferred(bool bSdtEndDeferred)
-{
- m_bSdtEndDeferred = bSdtEndDeferred;
-}
-
-bool DomainMapper_Impl::isSdtEndDeferred() const
-{
- return m_bSdtEndDeferred;
-}
-
-void DomainMapper_Impl::setParaSdtEndDeferred(bool bParaSdtEndDeferred)
-{
- m_bParaSdtEndDeferred = bParaSdtEndDeferred;
-}
-
-bool DomainMapper_Impl::isParaSdtEndDeferred() const
-{
- return m_bParaSdtEndDeferred;
-}
-
-static void lcl_MoveBorderPropertiesToFrame(std::vector<beans::PropertyValue>& rFrameProperties,
- uno::Reference<text::XTextRange> const& xStartTextRange,
- uno::Reference<text::XTextRange> const& xEndTextRange )
-{
- try
- {
- if (!xStartTextRange.is()) //rhbz#1077780
- return;
- uno::Reference<text::XTextCursor> xRangeCursor = xStartTextRange->getText()->createTextCursorByRange( xStartTextRange );
- xRangeCursor->gotoRange( xEndTextRange, true );
-
- uno::Reference<beans::XPropertySet> xTextRangeProperties(xRangeCursor, uno::UNO_QUERY);
- if(!xTextRangeProperties.is())
- return ;
-
- static PropertyIds const aBorderProperties[] =
- {
- PROP_LEFT_BORDER,
- PROP_RIGHT_BORDER,
- PROP_TOP_BORDER,
- PROP_BOTTOM_BORDER,
- PROP_LEFT_BORDER_DISTANCE,
- PROP_RIGHT_BORDER_DISTANCE,
- PROP_TOP_BORDER_DISTANCE,
- PROP_BOTTOM_BORDER_DISTANCE
- };
-
- for( size_t nProperty = 0; nProperty < SAL_N_ELEMENTS( aBorderProperties ); ++nProperty)
- {
- OUString sPropertyName = getPropertyName(aBorderProperties[nProperty]);
- beans::PropertyValue aValue;
- aValue.Name = sPropertyName;
- aValue.Value = xTextRangeProperties->getPropertyValue(sPropertyName);
- rFrameProperties.push_back(aValue);
- if( nProperty < 4 )
- xTextRangeProperties->setPropertyValue( sPropertyName, uno::makeAny(table::BorderLine2()));
- }
- }
- catch( const uno::Exception& )
- {
- }
-}
-
-
-static void lcl_AddRangeAndStyle(
- ParagraphPropertiesPtr const & pToBeSavedProperties,
- uno::Reference< text::XTextAppend > const& xTextAppend,
- const PropertyMapPtr& pPropertyMap,
- TextAppendContext const & rAppendContext)
-{
- uno::Reference<text::XParagraphCursor> xParaCursor(
- xTextAppend->createTextCursorByRange( rAppendContext.xInsertPosition.is() ? rAppendContext.xInsertPosition : xTextAppend->getEnd()), uno::UNO_QUERY_THROW );
- pToBeSavedProperties->SetEndingRange(xParaCursor->getStart());
- xParaCursor->gotoStartOfParagraph( false );
-
- pToBeSavedProperties->SetStartingRange(xParaCursor->getStart());
- if(pPropertyMap)
- {
- std::optional<PropertyMap::Property> aParaStyle = pPropertyMap->getProperty(PROP_PARA_STYLE_NAME);
- if( aParaStyle )
- {
- OUString sName;
- aParaStyle->second >>= sName;
- pToBeSavedProperties->SetParaStyleName(sName);
- }
- }
-}
-
-
-//define some default frame width - 0cm ATM: this allow the frame to be wrapped around the text
-constexpr sal_Int32 DEFAULT_FRAME_MIN_WIDTH = 0;
-constexpr sal_Int32 DEFAULT_FRAME_MIN_HEIGHT = 0;
-constexpr sal_Int32 DEFAULT_VALUE = 0;
-
-void DomainMapper_Impl::CheckUnregisteredFrameConversion( )
-{
- if (m_aTextAppendStack.empty())
- return;
- TextAppendContext& rAppendContext = m_aTextAppendStack.top();
- // n#779642: ignore fly frame inside table as it could lead to messy situations
- if (!rAppendContext.pLastParagraphProperties)
- return;
- if (!rAppendContext.pLastParagraphProperties->IsFrameMode())
- return;
- if (!hasTableManager())
- return;
- if (getTableManager().isInTable())
- return;
- try
- {
- StyleSheetEntryPtr pParaStyle =
- GetStyleSheetTable()->FindStyleSheetByConvertedStyleName(rAppendContext.pLastParagraphProperties->GetParaStyleName());
-
- std::vector<beans::PropertyValue> aFrameProperties;
-
- if ( pParaStyle )
- {
- const ParagraphProperties* pStyleProperties = dynamic_cast<const ParagraphProperties*>( pParaStyle->pProperties.get() );
- if (!pStyleProperties)
- return;
- sal_Int32 nWidth =
- rAppendContext.pLastParagraphProperties->Getw() > 0 ?
- rAppendContext.pLastParagraphProperties->Getw() :
- pStyleProperties->Getw();
- bool bAutoWidth = nWidth < 1;
- if( bAutoWidth )
- nWidth = DEFAULT_FRAME_MIN_WIDTH;
- aFrameProperties.push_back(comphelper::makePropertyValue(getPropertyName(PROP_WIDTH), nWidth));
-
- aFrameProperties.push_back(comphelper::makePropertyValue(getPropertyName(PROP_HEIGHT),
- rAppendContext.pLastParagraphProperties->Geth() > 0 ?
- rAppendContext.pLastParagraphProperties->Geth() :
- pStyleProperties->Geth() > 0 ? pStyleProperties->Geth() : DEFAULT_FRAME_MIN_HEIGHT));
-
- sal_Int16 nhRule = sal_Int16(
- rAppendContext.pLastParagraphProperties->GethRule() >= 0 ?
- rAppendContext.pLastParagraphProperties->GethRule() :
- pStyleProperties->GethRule());
- if ( nhRule < 0 )
- {
- if ( rAppendContext.pLastParagraphProperties->Geth() >= 0 ||
- pStyleProperties->GethRule() >= 0 )
- {
- // [MS-OE376] Word uses a default value of "atLeast" for
- // this attribute when the value of the h attribute is not 0.
- nhRule = text::SizeType::MIN;
- }
- else
- {
- nhRule = text::SizeType::VARIABLE;
- }
- }
- aFrameProperties.push_back(comphelper::makePropertyValue(getPropertyName(PROP_SIZE_TYPE), nhRule));
-
- aFrameProperties.push_back(comphelper::makePropertyValue(getPropertyName(PROP_WIDTH_TYPE), bAutoWidth ? text::SizeType::MIN : text::SizeType::FIX));
-
- if (const std::optional<sal_Int16> nDirection = PopFrameDirection())
- {
- aFrameProperties.push_back(comphelper::makePropertyValue(getPropertyName(PROP_FRM_DIRECTION), *nDirection));
- }
-
- sal_Int16 nHoriOrient = sal_Int16(
- rAppendContext.pLastParagraphProperties->GetxAlign() >= 0 ?
- rAppendContext.pLastParagraphProperties->GetxAlign() :
- pStyleProperties->GetxAlign() >= 0 ? pStyleProperties->GetxAlign() : text::HoriOrientation::NONE );
- aFrameProperties.push_back(comphelper::makePropertyValue(getPropertyName(PROP_HORI_ORIENT), nHoriOrient));
-
- //set a non negative default value
- aFrameProperties.push_back(comphelper::makePropertyValue(getPropertyName(PROP_HORI_ORIENT_POSITION),
- rAppendContext.pLastParagraphProperties->IsxValid() ?
- rAppendContext.pLastParagraphProperties->Getx() :
- pStyleProperties->IsxValid() ? pStyleProperties->Getx() : DEFAULT_VALUE));
-
- //Default the anchor in case FramePr_hAnchor is missing ECMA 17.3.1.11
- aFrameProperties.push_back(comphelper::makePropertyValue(getPropertyName(PROP_HORI_ORIENT_RELATION), sal_Int16(
- rAppendContext.pLastParagraphProperties->GethAnchor() >= 0 ?
- rAppendContext.pLastParagraphProperties->GethAnchor() :
- pStyleProperties->GethAnchor() >=0 ? pStyleProperties->GethAnchor() : text::RelOrientation::FRAME )));
-
- sal_Int16 nVertOrient = sal_Int16(
- rAppendContext.pLastParagraphProperties->GetyAlign() >= 0 ?
- rAppendContext.pLastParagraphProperties->GetyAlign() :
- pStyleProperties->GetyAlign() >= 0 ? pStyleProperties->GetyAlign() : text::VertOrientation::NONE );
- aFrameProperties.push_back(comphelper::makePropertyValue(getPropertyName(PROP_VERT_ORIENT), nVertOrient));
-
- //set a non negative default value
- aFrameProperties.push_back(comphelper::makePropertyValue(getPropertyName(PROP_VERT_ORIENT_POSITION),
- rAppendContext.pLastParagraphProperties->IsyValid() ?
- rAppendContext.pLastParagraphProperties->Gety() :
- pStyleProperties->IsyValid() ? pStyleProperties->Gety() : DEFAULT_VALUE));
-
- //Default the anchor in case FramePr_vAnchor is missing ECMA 17.3.1.11
- if (rAppendContext.pLastParagraphProperties->GetWrap() == text::WrapTextMode::WrapTextMode_MAKE_FIXED_SIZE &&
- pStyleProperties->GetWrap() == text::WrapTextMode::WrapTextMode_MAKE_FIXED_SIZE)
- {
- aFrameProperties.push_back(comphelper::makePropertyValue(getPropertyName(PROP_VERT_ORIENT_RELATION), sal_Int16(
- rAppendContext.pLastParagraphProperties->GetvAnchor() >= 0 ?
- rAppendContext.pLastParagraphProperties->GetvAnchor() :
- pStyleProperties->GetvAnchor() >= 0 ? pStyleProperties->GetvAnchor() : text::RelOrientation::FRAME)));
- }
- else
- {
- aFrameProperties.push_back(comphelper::makePropertyValue(getPropertyName(PROP_VERT_ORIENT_RELATION), sal_Int16(
- rAppendContext.pLastParagraphProperties->GetvAnchor() >= 0 ?
- rAppendContext.pLastParagraphProperties->GetvAnchor() :
- pStyleProperties->GetvAnchor() >= 0 ? pStyleProperties->GetvAnchor() : text::RelOrientation::PAGE_PRINT_AREA)));
- }
-
- aFrameProperties.push_back(comphelper::makePropertyValue(getPropertyName(PROP_SURROUND),
- rAppendContext.pLastParagraphProperties->GetWrap() != text::WrapTextMode::WrapTextMode_MAKE_FIXED_SIZE
- ? rAppendContext.pLastParagraphProperties->GetWrap()
- : pStyleProperties->GetWrap() != text::WrapTextMode::WrapTextMode_MAKE_FIXED_SIZE
- ? pStyleProperties->GetWrap()
- : text::WrapTextMode_NONE ));
-
- /** FDO#73546 : distL & distR should be unsigned integers <Ecma 20.4.3.6>
- Swapped the array elements 11,12 & 13,14 since 11 & 12 are
- LEFT & RIGHT margins and 13,14 are TOP and BOTTOM margins respectively.
- */
- sal_Int32 nRightDist;
- sal_Int32 nLeftDist = nRightDist =
- rAppendContext.pLastParagraphProperties->GethSpace() >= 0 ?
- rAppendContext.pLastParagraphProperties->GethSpace() :
- pStyleProperties->GethSpace() >= 0 ? pStyleProperties->GethSpace() : 0;
-
- aFrameProperties.push_back(comphelper::makePropertyValue(getPropertyName(PROP_LEFT_MARGIN), nHoriOrient == text::HoriOrientation::LEFT ? 0 : nLeftDist));
- aFrameProperties.push_back(comphelper::makePropertyValue(getPropertyName(PROP_RIGHT_MARGIN), nHoriOrient == text::HoriOrientation::RIGHT ? 0 : nRightDist));
-
- sal_Int32 nBottomDist;
- sal_Int32 nTopDist = nBottomDist =
- rAppendContext.pLastParagraphProperties->GetvSpace() >= 0 ?
- rAppendContext.pLastParagraphProperties->GetvSpace() :
- pStyleProperties->GetvSpace() >= 0 ? pStyleProperties->GetvSpace() : 0;
-
- aFrameProperties.push_back(comphelper::makePropertyValue(getPropertyName(PROP_TOP_MARGIN), nVertOrient == text::VertOrientation::TOP ? 0 : nTopDist));
- aFrameProperties.push_back(comphelper::makePropertyValue(getPropertyName(PROP_BOTTOM_MARGIN), nVertOrient == text::VertOrientation::BOTTOM ? 0 : nBottomDist));
- // If there is no fill, the Word default is 100% transparency.
- // Otherwise CellColorHandler has priority, and this setting
- // will be ignored.
- aFrameProperties.push_back(comphelper::makePropertyValue(getPropertyName(PROP_BACK_COLOR_TRANSPARENCY), sal_Int32(100)));
-
- uno::Sequence<beans::PropertyValue> aGrabBag( comphelper::InitPropertySequence({
- { "ParaFrameProperties", uno::Any(rAppendContext.pLastParagraphProperties->IsFrameMode()) }
- }));
- aFrameProperties.push_back(comphelper::makePropertyValue("FrameInteropGrabBag", aGrabBag));
-
- lcl_MoveBorderPropertiesToFrame(aFrameProperties,
- rAppendContext.pLastParagraphProperties->GetStartingRange(),
- rAppendContext.pLastParagraphProperties->GetEndingRange());
- }
- else
- {
- sal_Int32 nWidth = rAppendContext.pLastParagraphProperties->Getw();
- bool bAutoWidth = nWidth < 1;
- if( bAutoWidth )
- nWidth = DEFAULT_FRAME_MIN_WIDTH;
- aFrameProperties.push_back(comphelper::makePropertyValue(getPropertyName(PROP_WIDTH), nWidth));
-
- sal_Int16 nhRule = sal_Int16(rAppendContext.pLastParagraphProperties->GethRule());
- if ( nhRule < 0 )
- {
- if ( rAppendContext.pLastParagraphProperties->Geth() >= 0 )
- {
- // [MS-OE376] Word uses a default value of atLeast for
- // this attribute when the value of the h attribute is not 0.
- nhRule = text::SizeType::MIN;
- }
- else
- {
- nhRule = text::SizeType::VARIABLE;
- }
- }
- aFrameProperties.push_back(comphelper::makePropertyValue(getPropertyName(PROP_SIZE_TYPE), nhRule));
-
- aFrameProperties.push_back(comphelper::makePropertyValue(getPropertyName(PROP_WIDTH_TYPE), bAutoWidth ? text::SizeType::MIN : text::SizeType::FIX));
-
- sal_Int16 nHoriOrient = sal_Int16(
- rAppendContext.pLastParagraphProperties->GetxAlign() >= 0 ?
- rAppendContext.pLastParagraphProperties->GetxAlign() :
- text::HoriOrientation::NONE );
- aFrameProperties.push_back(comphelper::makePropertyValue(getPropertyName(PROP_HORI_ORIENT), nHoriOrient));
-
- sal_Int16 nVertOrient = sal_Int16(
- rAppendContext.pLastParagraphProperties->GetyAlign() >= 0 ?
- rAppendContext.pLastParagraphProperties->GetyAlign() :
- text::VertOrientation::NONE );
- aFrameProperties.push_back(comphelper::makePropertyValue(getPropertyName(PROP_VERT_ORIENT), nVertOrient));
-
- sal_Int32 nVertDist = rAppendContext.pLastParagraphProperties->GethSpace();
- if( nVertDist < 0 )
- nVertDist = 0;
- aFrameProperties.push_back(comphelper::makePropertyValue(getPropertyName(PROP_LEFT_MARGIN), nVertOrient == text::VertOrientation::TOP ? 0 : nVertDist));
- aFrameProperties.push_back(comphelper::makePropertyValue(getPropertyName(PROP_RIGHT_MARGIN), nVertOrient == text::VertOrientation::BOTTOM ? 0 : nVertDist));
-
- sal_Int32 nHoriDist = rAppendContext.pLastParagraphProperties->GetvSpace();
- if( nHoriDist < 0 )
- nHoriDist = 0;
- aFrameProperties.push_back(comphelper::makePropertyValue(getPropertyName(PROP_TOP_MARGIN), nHoriOrient == text::HoriOrientation::LEFT ? 0 : nHoriDist));
- aFrameProperties.push_back(comphelper::makePropertyValue(getPropertyName(PROP_BOTTOM_MARGIN), nHoriOrient == text::HoriOrientation::RIGHT ? 0 : nHoriDist));
-
- if( rAppendContext.pLastParagraphProperties->Geth() > 0 )
- aFrameProperties.push_back(comphelper::makePropertyValue(getPropertyName(PROP_HEIGHT), rAppendContext.pLastParagraphProperties->Geth()));
-
- if( rAppendContext.pLastParagraphProperties->IsxValid() )
- aFrameProperties.push_back(comphelper::makePropertyValue(getPropertyName(PROP_HORI_ORIENT_POSITION), rAppendContext.pLastParagraphProperties->Getx()));
-
- if( rAppendContext.pLastParagraphProperties->GethAnchor() >= 0 )
- aFrameProperties.push_back(comphelper::makePropertyValue("HoriOrientRelation", sal_Int16(rAppendContext.pLastParagraphProperties->GethAnchor())));
-
- if( rAppendContext.pLastParagraphProperties->IsyValid() )
- aFrameProperties.push_back(comphelper::makePropertyValue(getPropertyName(PROP_VERT_ORIENT_POSITION), rAppendContext.pLastParagraphProperties->Gety()));
-
- if( rAppendContext.pLastParagraphProperties->GetvAnchor() >= 0 )
- aFrameProperties.push_back(comphelper::makePropertyValue("VertOrientRelation", sal_Int16(rAppendContext.pLastParagraphProperties->GetvAnchor())));
-
- if( rAppendContext.pLastParagraphProperties->GetWrap() >= text::WrapTextMode_NONE )
- aFrameProperties.push_back(comphelper::makePropertyValue("Surround", rAppendContext.pLastParagraphProperties->GetWrap()));
-
- lcl_MoveBorderPropertiesToFrame(aFrameProperties,
- rAppendContext.pLastParagraphProperties->GetStartingRange(),
- rAppendContext.pLastParagraphProperties->GetEndingRange());
- }
-
- //frame conversion has to be executed after table conversion
- RegisterFrameConversion(
- rAppendContext.pLastParagraphProperties->GetStartingRange(),
- rAppendContext.pLastParagraphProperties->GetEndingRange(),
- aFrameProperties );
- }
- catch( const uno::Exception& )
- {
- }
-}
-
-/// Check if the style or its parent has a list id, recursively.
-static sal_Int32 lcl_getListId(const StyleSheetEntryPtr& rEntry, const StyleSheetTablePtr& rStyleTable, bool & rNumberingFromBaseStyle)
-{
- const StyleSheetPropertyMap* pEntryProperties = dynamic_cast<const StyleSheetPropertyMap*>(rEntry->pProperties.get());
- if (!pEntryProperties)
- return -1;
-
- sal_Int32 nListId = pEntryProperties->GetListId();
- // The style itself has a list id.
- if (nListId >= 0)
- return nListId;
-
- // The style has no parent.
- if (rEntry->sBaseStyleIdentifier.isEmpty())
- return -1;
-
- const StyleSheetEntryPtr pParent = rStyleTable->FindStyleSheetByISTD(rEntry->sBaseStyleIdentifier);
- // No such parent style or loop in the style hierarchy.
- if (!pParent || pParent == rEntry)
- return -1;
-
- rNumberingFromBaseStyle = true;
-
- return lcl_getListId(pParent, rStyleTable, rNumberingFromBaseStyle);
-}
-
-void DomainMapper_Impl::finishParagraph( const PropertyMapPtr& pPropertyMap, const bool bRemove, const bool bNoNumbering )
-{
- if (m_bDiscardHeaderFooter)
- return;
-
- if (!m_aFieldStack.empty())
- {
- FieldContextPtr pFieldContext = m_aFieldStack.back();
- if (pFieldContext && !pFieldContext->IsCommandCompleted())
- {
- std::vector<OUString> aCommandParts = pFieldContext->GetCommandParts();
- if (!aCommandParts.empty() && aCommandParts[0] == "IF")
- {
- // Conditional text field conditions don't support linebreaks in Writer.
- return;
- }
- }
-
- if (pFieldContext && pFieldContext->IsCommandCompleted())
- {
- if (pFieldContext->GetFieldId() == FIELD_IF)
- {
- // Conditional text fields can't contain newlines, finish the paragraph later.
- FieldParagraph aFinish{pPropertyMap, bRemove};
- pFieldContext->GetParagraphsToFinish().push_back(aFinish);
- return;
- }
- }
- }
-
-#ifdef DBG_UTIL
- TagLogger::getInstance().startElement("finishParagraph");
-#endif
-
- m_nLastTableCellParagraphDepth = m_nTableCellDepth;
- ParagraphPropertyMap* pParaContext = dynamic_cast< ParagraphPropertyMap* >( pPropertyMap.get() );
- if (m_aTextAppendStack.empty())
- return;
- TextAppendContext& rAppendContext = m_aTextAppendStack.top();
- uno::Reference< text::XTextAppend > xTextAppend(rAppendContext.xTextAppend);
-#ifdef DBG_UTIL
- TagLogger::getInstance().attribute("isTextAppend", sal_uInt32(xTextAppend.is()));
-#endif
-
- const StyleSheetEntryPtr pEntry = GetStyleSheetTable()->FindStyleSheetByConvertedStyleName( GetCurrentParaStyleName() );
- OSL_ENSURE( pEntry, "no style sheet found" );
- const StyleSheetPropertyMap* pStyleSheetProperties = dynamic_cast<const StyleSheetPropertyMap*>(pEntry ? pEntry->pProperties.get() : nullptr);
- bool isNumberingViaStyle(false);
- bool isNumberingViaRule = pParaContext && pParaContext->GetListId() > -1;
- sal_Int32 nListId = -1;
- if ( !bRemove && pStyleSheetProperties && pParaContext )
- {
- //apply numbering level/style to paragraph if it was set at the style, but only if the paragraph itself
- //does not specify the numbering
- const sal_Int16 nListLevel = pStyleSheetProperties->GetListLevel();
- if ( !bNoNumbering && !isNumberingViaRule && nListLevel >= 0 )
- pParaContext->Insert( PROP_NUMBERING_LEVEL, uno::makeAny(nListLevel), false );
-
- bool bNumberingFromBaseStyle = false;
- nListId = pEntry ? lcl_getListId(pEntry, GetStyleSheetTable(), bNumberingFromBaseStyle) : -1;
- auto const pList(GetListTable()->GetList(nListId));
- if (pList && nListId >= 0 && !pParaContext->isSet(PROP_NUMBERING_STYLE_NAME))
- {
- if ( bNoNumbering )
- pParaContext->Insert( PROP_NUMBERING_STYLE_NAME, uno::makeAny(OUString()) );
- else if ( !isNumberingViaRule )
- {
- isNumberingViaStyle = true;
- // Since LO7.0/tdf#131321 fixed the loss of numbering in styles, this OUGHT to be obsolete,
- // but now other new/critical LO7.0 code expects it, and perhaps some corner cases still need it as well.
- // So we skip it only for default outline styles, which are recognized by NumberingManager.
- if (!GetCurrentParaStyleName().startsWith("Heading ") || nListLevel >= pList->GetDefaultParentLevels())
- pParaContext->Insert( PROP_NUMBERING_STYLE_NAME, uno::makeAny(pList->GetStyleName()), true );
- }
- else if ( !pList->isOutlineNumbering(nListLevel) )
- {
- // After ignoring anything related to the special Outline levels,
- // we have direct numbering, as well as paragraph-style numbering.
- // Apply the style if it uses the same list as the direct numbering,
- // otherwise the directly-applied-to-paragraph status will be lost,
- // and the priority of the numbering-style-indents will be lowered. tdf#133000
- if ( nListId == pParaContext->GetListId() )
- pParaContext->Insert( PROP_NUMBERING_STYLE_NAME, uno::makeAny(pList->GetStyleName()), true );
- }
- }
-
- if ( isNumberingViaStyle )
- {
- // When numbering is defined by the paragraph style, then the para-style indents have priority.
- // But since import has just copied para-style's PROP_NUMBERING_STYLE_NAME directly onto the paragraph,
- // the numbering indents now have the priority.
- // So now import must also copy the para-style indents directly onto the paragraph to compensate.
- std::optional<PropertyMap::Property> oProperty;
- const StyleSheetEntryPtr pParent = (!pEntry->sBaseStyleIdentifier.isEmpty()) ? GetStyleSheetTable()->FindStyleSheetByISTD(pEntry->sBaseStyleIdentifier) : nullptr;
- const StyleSheetPropertyMap* pParentProperties = dynamic_cast<const StyleSheetPropertyMap*>(pParent ? pParent->pProperties.get() : nullptr);
- if (!pEntry->sBaseStyleIdentifier.isEmpty())
- {
- oProperty = pStyleSheetProperties->getProperty(PROP_PARA_FIRST_LINE_INDENT);
- if ( oProperty
- // If the numbering comes from a base style, indent of the base style has also priority.
- || (bNumberingFromBaseStyle && pParentProperties && (oProperty = pParentProperties->getProperty(PROP_PARA_FIRST_LINE_INDENT))) )
- pParaContext->Insert(PROP_PARA_FIRST_LINE_INDENT, oProperty->second, /*bOverwrite=*/false);
- }
- oProperty = pStyleSheetProperties->getProperty(PROP_PARA_LEFT_MARGIN);
- if ( oProperty
- || (bNumberingFromBaseStyle && pParentProperties && (oProperty = pParentProperties->getProperty(PROP_PARA_LEFT_MARGIN))) )
- pParaContext->Insert(PROP_PARA_LEFT_MARGIN, oProperty->second, /*bOverwrite=*/false);
-
- // We're inheriting properties from a numbering style. Make sure a possible right margin is inherited from the base style.
- sal_Int32 nParaRightMargin;
- if ( pParentProperties && (oProperty = pParentProperties->getProperty(PROP_PARA_RIGHT_MARGIN)) && (nParaRightMargin = oProperty->second.get<sal_Int32>()) != 0 )
- {
- // If we're setting the right margin, we should set the first / left margin as well from the numbering style.
- const sal_Int32 nFirstLineIndent = getNumberingProperty(nListId, nListLevel, "FirstLineIndent");
- const sal_Int32 nParaLeftMargin = getNumberingProperty(nListId, nListLevel, "IndentAt");
- if (nFirstLineIndent != 0)
- pParaContext->Insert(PROP_PARA_FIRST_LINE_INDENT, uno::makeAny(nFirstLineIndent), /*bOverwrite=*/false);
- if (nParaLeftMargin != 0)
- pParaContext->Insert(PROP_PARA_LEFT_MARGIN, uno::makeAny(nParaLeftMargin), /*bOverwrite=*/false);
-
- pParaContext->Insert(PROP_PARA_RIGHT_MARGIN, uno::makeAny(nParaRightMargin), /*bOverwrite=*/false);
- }
- }
- // Paragraph style based right paragraph indentation affects not paragraph style based lists in DOCX.
- // Apply it as direct formatting, also left and first line indentation of numbering to keep them.
- else if (isNumberingViaRule)
- {
- uno::Any aRightMargin = GetPropertyFromParaStyleSheet(PROP_PARA_RIGHT_MARGIN);
- if ( aRightMargin != uno::Any() )
- {
- pParaContext->Insert(PROP_PARA_RIGHT_MARGIN, aRightMargin, /*bOverwrite=*/false);
-
- sal_Int32 nListId2(static_cast<ParagraphPropertyMap*>(pPropertyMap.get())->GetListId());
-
- const sal_Int32 nFirstLineIndent = getNumberingProperty(nListId2, nListLevel, "FirstLineIndent");
- const sal_Int32 nParaLeftMargin = getNumberingProperty(nListId2, nListLevel, "IndentAt");
- if (nFirstLineIndent != 0)
- pParaContext->Insert(PROP_PARA_FIRST_LINE_INDENT, uno::makeAny(nFirstLineIndent), /*bOverwrite=*/false);
- if (nParaLeftMargin != 0)
- pParaContext->Insert(PROP_PARA_LEFT_MARGIN, uno::makeAny(nParaLeftMargin), /*bOverwrite=*/false);
- }
- }
- }
-
- // apply AutoSpacing: it has priority over all other margin settings
- // (note that numbering with autoSpacing is handled separately later on)
- const bool bAllowAdjustments = !GetSettingsTable()->GetDoNotUseHTMLParagraphAutoSpacing();
- sal_Int32 nBeforeAutospacing = -1;
- bool bIsAutoSet = pParaContext && pParaContext->isSet(PROP_PARA_TOP_MARGIN_BEFORE_AUTO_SPACING);
- // apply INHERITED autospacing only if top margin is not set
- if ( bIsAutoSet || (pParaContext && !pParaContext->isSet(PROP_PARA_TOP_MARGIN)) )
- GetAnyProperty(PROP_PARA_TOP_MARGIN_BEFORE_AUTO_SPACING, pPropertyMap) >>= nBeforeAutospacing;
- if ( nBeforeAutospacing > -1 && pParaContext )
- {
- if ( bAllowAdjustments )
- {
- if ( GetIsFirstParagraphInShape() ||
- (GetIsFirstParagraphInSection() && GetSectionContext() && GetSectionContext()->IsFirstSection()) ||
- (m_bFirstParagraphInCell && m_nTableDepth > 0 && m_nTableDepth == m_nTableCellDepth) )
- {
- nBeforeAutospacing = 0;
- // export requires grabbag to match top_margin, so keep them in sync
- if ( bIsAutoSet )
- pParaContext->Insert( PROP_PARA_TOP_MARGIN_BEFORE_AUTO_SPACING, uno::makeAny( sal_Int32(0) ),true, PARA_GRAB_BAG );
- }
- }
- pParaContext->Insert(PROP_PARA_TOP_MARGIN, uno::makeAny(nBeforeAutospacing));
- }
-
- sal_Int32 nAfterAutospacing = -1;
- bIsAutoSet = pParaContext && pParaContext->isSet(PROP_PARA_BOTTOM_MARGIN_AFTER_AUTO_SPACING);
- bool bApplyAutospacing = bIsAutoSet || (pParaContext && !pParaContext->isSet(PROP_PARA_BOTTOM_MARGIN));
- if ( bApplyAutospacing )
- GetAnyProperty(PROP_PARA_BOTTOM_MARGIN_AFTER_AUTO_SPACING, pPropertyMap) >>= nAfterAutospacing;
- if ( nAfterAutospacing > -1 && pParaContext )
- {
- pParaContext->Insert(PROP_PARA_BOTTOM_MARGIN, uno::makeAny(nAfterAutospacing));
- bApplyAutospacing = bAllowAdjustments;
- }
- else
- bApplyAutospacing = false;
-
- // tell TableManager to reset the bottom margin if it determines that this is the cell's last paragraph.
- if ( hasTableManager() && getTableManager().isInCell() )
- getTableManager().setCellLastParaAfterAutospacing( bApplyAutospacing );
-
- if (xTextAppend.is() && pParaContext && hasTableManager() && !getTableManager().isIgnore())
- {
- try
- {
- /*the following combinations of previous and current frame settings can occur:
- (1) - no old frame and no current frame -> no special action
- (2) - no old frame and current DropCap -> save DropCap for later use, don't call finishParagraph
- remove character properties of the DropCap?
- (3) - no old frame and current Frame -> save Frame for later use
- (4) - old DropCap and no current frame -> add DropCap to the properties of the finished paragraph, delete previous setting
- (5) - old DropCap and current frame -> add DropCap to the properties of the finished paragraph, save current frame settings
- (6) - old Frame and new DropCap -> add old Frame, save DropCap for later use
- (7) - old Frame and new same Frame -> continue
- (8) - old Frame and new different Frame -> add old Frame, save new Frame for later use
- (9) - old Frame and no current frame -> add old Frame, delete previous settings
-
- old _and_ new DropCap must not occur
- */
-
- bool bIsDropCap =
- pParaContext->IsFrameMode() &&
- sal::static_int_cast<Id>(pParaContext->GetDropCap()) != NS_ooxml::LN_Value_doc_ST_DropCap_none;
-
- style::DropCapFormat aDrop;
- ParagraphPropertiesPtr pToBeSavedProperties;
- bool bKeepLastParagraphProperties = false;
- if( bIsDropCap )
- {
- uno::Reference<text::XParagraphCursor> xParaCursor(
- xTextAppend->createTextCursorByRange(xTextAppend->getEnd()), uno::UNO_QUERY_THROW);
- //select paragraph
- xParaCursor->gotoStartOfParagraph( true );
- uno::Reference< beans::XPropertyState > xParaProperties( xParaCursor, uno::UNO_QUERY_THROW );
- xParaProperties->setPropertyToDefault(getPropertyName(PROP_CHAR_ESCAPEMENT));
- xParaProperties->setPropertyToDefault(getPropertyName(PROP_CHAR_HEIGHT));
- //handles (2) and part of (6)
- pToBeSavedProperties = new ParagraphProperties(*pParaContext);
- sal_Int32 nCount = xParaCursor->getString().getLength();
- pToBeSavedProperties->SetDropCapLength(nCount > 0 && nCount < 255 ? static_cast<sal_Int8>(nCount) : 1);
- }
- if( rAppendContext.pLastParagraphProperties )
- {
- if( sal::static_int_cast<Id>(rAppendContext.pLastParagraphProperties->GetDropCap()) != NS_ooxml::LN_Value_doc_ST_DropCap_none)
- {
- //handles (4) and part of (5)
- //create a DropCap property, add it to the property sequence of finishParagraph
- sal_Int32 nLines = rAppendContext.pLastParagraphProperties->GetLines();
- aDrop.Lines = nLines > 0 && nLines < SAL_MAX_INT8 ? static_cast<sal_Int8>(nLines) : 2;
- aDrop.Count = rAppendContext.pLastParagraphProperties->GetDropCapLength();
- sal_Int32 nHSpace = rAppendContext.pLastParagraphProperties->GethSpace();
- aDrop.Distance = nHSpace > 0 && nHSpace < SAL_MAX_INT16 ? static_cast<sal_Int16>(nHSpace) : 0;
- //completes (5)
- if( pParaContext->IsFrameMode() )
- pToBeSavedProperties = new ParagraphProperties(*pParaContext);
- }
- else if(*rAppendContext.pLastParagraphProperties == *pParaContext )
- {
- //handles (7)
- rAppendContext.pLastParagraphProperties->SetEndingRange(rAppendContext.xInsertPosition.is() ? rAppendContext.xInsertPosition : xTextAppend->getEnd());
- bKeepLastParagraphProperties = true;
- }
- else
- {
- //handles (8)(9) and completes (6)
- CheckUnregisteredFrameConversion( );
-
- // If different frame properties are set on this paragraph, keep them.
- if ( !bIsDropCap && pParaContext->IsFrameMode() )
- {
- pToBeSavedProperties = new ParagraphProperties(*pParaContext);
- lcl_AddRangeAndStyle(pToBeSavedProperties, xTextAppend, pPropertyMap, rAppendContext);
- }
- }
- }
- else
- {
- // (1) doesn't need handling
-
- if( !bIsDropCap && pParaContext->IsFrameMode() )
- {
- pToBeSavedProperties = new ParagraphProperties(*pParaContext);
- lcl_AddRangeAndStyle(pToBeSavedProperties, xTextAppend, pPropertyMap, rAppendContext);
- }
- }
- std::vector<beans::PropertyValue> aProperties;
- if (pPropertyMap)
- {
- aProperties = comphelper::sequenceToContainer< std::vector<beans::PropertyValue> >(pPropertyMap->GetPropertyValues());
- }
- // TODO: this *should* work for RTF but there are test failures, maybe rtftok doesn't distinguish between formatting for the paragraph marker and for the paragraph as a whole; needs investigation
- if (pPropertyMap && IsOOXMLImport())
- {
- // tdf#64222 filter out the "paragraph marker" formatting and
- // set it as a separate paragraph property, not a empty hint at
- // end of paragraph
- std::vector<beans::NamedValue> charProperties;
- for (auto it = aProperties.begin(); it != aProperties.end(); )
- {
- // this condition isn't ideal but as it happens all
- // RES_CHRATR_* have names that start with "Char"
- if (it->Name.startsWith("Char"))
- {
- charProperties.emplace_back(it->Name, it->Value);
- // as testN793262 demonstrates, font size in rPr must
- // affect the paragraph size => also insert empty hint!
-// it = aProperties.erase(it);
- }
- ++it;
- }
- if (!charProperties.empty())
- {
- aProperties.push_back(beans::PropertyValue("ListAutoFormat",
- 0, uno::makeAny(comphelper::containerToSequence(charProperties)), beans::PropertyState_DIRECT_VALUE));
- }
- }
- if( !bIsDropCap )
- {
- if( aDrop.Lines > 1 )
- {
- beans::PropertyValue aValue;
- aValue.Name = getPropertyName(PROP_DROP_CAP_FORMAT);
- aValue.Value <<= aDrop;
- aProperties.push_back(aValue);
- }
- uno::Reference< text::XTextRange > xTextRange;
- if (rAppendContext.xInsertPosition.is())
- {
- xTextRange = xTextAppend->finishParagraphInsert( comphelper::containerToSequence(aProperties), rAppendContext.xInsertPosition );
- rAppendContext.xCursor->gotoNextParagraph(false);
- if (rAppendContext.pLastParagraphProperties)
- rAppendContext.pLastParagraphProperties->SetEndingRange(xTextRange->getEnd());
- }
- else
- {
- uno::Reference<text::XTextCursor> xCursor;
- if (m_bParaHadField && !m_bIsInComments && !xTOCMarkerCursor.is())
- {
- // Workaround to make sure char props of the field are not lost.
- // Not relevant for editeng-based comments.
- // Not relevant for fields inside a TOC field.
- xCursor = xTextAppend->getText()->createTextCursor();
- if (xCursor.is())
- xCursor->gotoEnd(false);
- PropertyMapPtr pEmpty(new PropertyMap());
- appendTextPortion("X", pEmpty);
- }
-
- // Check if top / bottom margin has to be updated, now that we know the numbering status of both the previous and
- // the current text node.
- auto itNumberingRules = std::find_if(aProperties.begin(), aProperties.end(), [](const beans::PropertyValue& rValue)
- {
- return rValue.Name == "NumberingRules";
- });
-
- assert( isNumberingViaRule == (itNumberingRules != aProperties.end()) );
- isNumberingViaRule = (itNumberingRules != aProperties.end());
- if (m_xPreviousParagraph.is() && (isNumberingViaRule || isNumberingViaStyle))
- {
- // This textnode has numbering. Look up the numbering style name of the current and previous paragraph.
- OUString aCurrentNumberingName;
- OUString aPreviousNumberingName;
- if (isNumberingViaRule)
- {
- assert(itNumberingRules != aProperties.end() && "by definition itNumberingRules is valid if isNumberingViaRule is true");
- uno::Reference<container::XNamed> xCurrentNumberingRules(itNumberingRules->Value, uno::UNO_QUERY);
- if (xCurrentNumberingRules.is())
- aCurrentNumberingName = xCurrentNumberingRules->getName();
- if (m_xPreviousParagraph.is())
- {
- uno::Reference<container::XNamed> xPreviousNumberingRules(m_xPreviousParagraph->getPropertyValue("NumberingRules"), uno::UNO_QUERY);
- if (xPreviousNumberingRules.is())
- aPreviousNumberingName = xPreviousNumberingRules->getName();
- }
- }
- else if ( m_xPreviousParagraph->getPropertySetInfo()->hasPropertyByName("NumberingStyleName") &&
- // don't update before tables
- (m_nTableDepth == 0 || !m_bFirstParagraphInCell))
- {
- aCurrentNumberingName = GetListStyleName(nListId);
- m_xPreviousParagraph->getPropertyValue("NumberingStyleName") >>= aPreviousNumberingName;
- }
-
- if (!aPreviousNumberingName.isEmpty() && aCurrentNumberingName == aPreviousNumberingName)
- {
- uno::Sequence<beans::PropertyValue> aPrevPropertiesSeq;
- m_xPreviousParagraph->getPropertyValue("ParaInteropGrabBag") >>= aPrevPropertiesSeq;
- auto aPrevProperties = comphelper::sequenceToContainer< std::vector<beans::PropertyValue> >(aPrevPropertiesSeq);
- bool bParaAutoBefore = m_bParaAutoBefore || std::any_of(aPrevProperties.begin(), aPrevProperties.end(), [](const beans::PropertyValue& rValue)
- {
- return rValue.Name == "ParaTopMarginBeforeAutoSpacing";
- });
- // if style based spacing was set to auto in the previous paragraph, style of the actual paragraph must be the same
- if (bParaAutoBefore && !m_bParaAutoBefore && m_xPreviousParagraph->getPropertySetInfo()->hasPropertyByName("ParaStyleName"))
- {
- auto itParaStyle = std::find_if(aProperties.begin(), aProperties.end(), [](const beans::PropertyValue& rValue)
- {
- return rValue.Name == "ParaStyleName";
- });
- bParaAutoBefore = itParaStyle != aProperties.end() &&
- m_xPreviousParagraph->getPropertyValue("ParaStyleName") == itParaStyle->Value;
- }
- // There was a previous textnode and it had the same numbering.
- if (bParaAutoBefore)
- {
- // This before spacing is set to auto, set before space to 0.
- auto itParaTopMargin = std::find_if(aProperties.begin(), aProperties.end(), [](const beans::PropertyValue& rValue)
- {
- return rValue.Name == "ParaTopMargin";
- });
- if (itParaTopMargin != aProperties.end())
- itParaTopMargin->Value <<= static_cast<sal_Int32>(0);
- else
- aProperties.push_back(comphelper::makePropertyValue("ParaTopMargin", static_cast<sal_Int32>(0)));
- }
-
- bool bPrevParaAutoAfter = std::any_of(aPrevProperties.begin(), aPrevProperties.end(), [](const beans::PropertyValue& rValue)
- {
- return rValue.Name == "ParaBottomMarginAfterAutoSpacing";
- });
- if (bPrevParaAutoAfter)
- {
- // Previous after spacing is set to auto, set previous after space to 0.
- m_xPreviousParagraph->setPropertyValue("ParaBottomMargin", uno::makeAny(static_cast<sal_Int32>(0)));
- }
- }
- }
-
- xTextRange = xTextAppend->finishParagraph( comphelper::containerToSequence(aProperties) );
- m_xPreviousParagraph.set(xTextRange, uno::UNO_QUERY);
-
- if (m_xPreviousParagraph.is() && // null for SvxUnoTextBase
- (isNumberingViaStyle || isNumberingViaRule))
- {
- assert(dynamic_cast<ParagraphPropertyMap*>(pPropertyMap.get()));
- // Use lcl_getListId(), so we find the list ID in parent styles as well.
- bool bNumberingFromBaseStyle = false;
- sal_Int32 const nListId2( isNumberingViaStyle
- ? lcl_getListId(pEntry, GetStyleSheetTable(), bNumberingFromBaseStyle)
- : static_cast<ParagraphPropertyMap*>(pPropertyMap.get())->GetListId());
- if (ListDef::Pointer const& pList = m_pListTable->GetList(nListId2))
- { // styles could refer to non-existing lists...
- AbstractListDef::Pointer const& pAbsList =
- pList->GetAbstractDefinition();
- if (pAbsList &&
- // SvxUnoTextRange doesn't have ListId
- m_xPreviousParagraph->getPropertySetInfo()->hasPropertyByName("ListId"))
- {
- OUString paraId;
- m_xPreviousParagraph->getPropertyValue("ListId") >>= paraId;
- if (!paraId.isEmpty()) // must be on some list?
- {
- OUString const listId = pAbsList->MapListId(paraId);
- if (listId != paraId)
- {
- m_xPreviousParagraph->setPropertyValue("ListId", uno::makeAny(listId));
- }
- }
- }
- if (pList->GetCurrentLevel())
- {
- sal_Int16 nOverrideLevel = pList->GetCurrentLevel()->GetStartOverride();
- if (nOverrideLevel != -1 && m_aListOverrideApplied.find(nListId2) == m_aListOverrideApplied.end())
- {
- // Apply override: we have override instruction for this level
- // And this was not done for this list before: we can do this only once on first occurrence
- // of list with override
- // TODO: Not tested variant with different levels override in different lists.
- // Probably m_aListOverrideApplied as a set of overridden listids is not sufficient
- // and we need to register level overrides separately.
- m_xPreviousParagraph->setPropertyValue("ParaIsNumberingRestart", uno::makeAny(true));
- m_xPreviousParagraph->setPropertyValue("NumberingStartValue", uno::makeAny(nOverrideLevel));
- m_aListOverrideApplied.insert(nListId2);
- }
- }
- }
- }
-
- if (!rAppendContext.m_aAnchoredObjects.empty() && !IsInHeaderFooter())
- {
- // Remember what objects are anchored to this paragraph.
- // That list is only used for Word compat purposes, and
- // it is only relevant for body text.
- AnchoredObjectsInfo aInfo;
- aInfo.m_xParagraph = xTextRange;
- aInfo.m_aAnchoredObjects = rAppendContext.m_aAnchoredObjects;
- m_aAnchoredObjectAnchors.push_back(aInfo);
- rAppendContext.m_aAnchoredObjects.clear();
- }
-
- // We're no longer right after a table conversion.
- m_bConvertedTable = false;
-
- if (xCursor.is())
- {
- xCursor->goLeft(1, true);
- xCursor->setString(OUString());
- }
- }
- getTableManager( ).handle(xTextRange);
- m_aSmartTagHandler.handle(xTextRange);
-
- if (xTextRange.is())
- {
- // Get the end of paragraph character inserted
- uno::Reference< text::XTextCursor > xCur = xTextRange->getText( )->createTextCursor( );
- if (rAppendContext.xInsertPosition.is())
- xCur->gotoRange( rAppendContext.xInsertPosition, false );
- else
- xCur->gotoEnd( false );
-
- // tdf#77417 trim right white spaces in table cells in 2010 compatibility mode
- sal_Int32 nMode = GetSettingsTable()->GetWordCompatibilityMode();
- if ( m_nTableDepth > 0 && nMode > 0 && nMode <= 14 )
- {
- // skip new line
- xCur->goLeft(1, false);
- while ( xCur->goLeft(1, true) )
- {
- OUString sChar = xCur->getString();
- if ( sChar == " " || sChar == "\t" || sChar == OUStringChar(u'\x00A0') )
- xCur->setString("");
- else
- break;
- }
- xCur->goRight(2, false);
- }
-
- xCur->goLeft( 1 , true );
- // Extend the redline ranges for empty paragraphs
- if ( !m_bParaChanged && m_previousRedline )
- CreateRedline( xCur, m_previousRedline );
- CheckParaMarkerRedline( xCur );
- }
-
- css::uno::Reference<css::beans::XPropertySet> xParaProps(xTextRange, uno::UNO_QUERY);
-
- // table style precedence and not hidden shapes anchored to hidden empty table paragraphs
- if (xParaProps && (m_nTableDepth > 0 || !m_aAnchoredObjectAnchors.empty()) )
- {
- // table style has got bigger precedence than docDefault style
- // collect these pending paragraph properties to process in endTable()
- uno::Reference<text::XTextCursor> xCur = xTextRange->getText( )->createTextCursor( );
- xCur->gotoEnd(false);
- xCur->goLeft(1, false);
- uno::Reference<text::XTextCursor> xCur2 = xTextRange->getText()->createTextCursorByRange(xCur);
- uno::Reference<text::XParagraphCursor> xParaCursor(xCur2, uno::UNO_QUERY_THROW);
- xParaCursor->gotoStartOfParagraph(false);
- if (m_nTableDepth > 0)
- {
- TableParagraph aPending{xParaCursor, xCur, pParaContext, xParaProps, std::set<OUString>()};
- getTableManager().getCurrentParagraphs()->push_back(aPending);
- }
-
- // hidden empty paragraph with a not hidden shape, set as not hidden
- std::optional<PropertyMap::Property> pHidden;
- if ( !m_aAnchoredObjectAnchors.empty() && (pHidden = pParaContext->getProperty(PROP_CHAR_HIDDEN)) )
- {
- bool bIsHidden = {}; // -Werror=maybe-uninitialized
- pHidden->second >>= bIsHidden;
- if (bIsHidden)
- {
- bIsHidden = false;
- pHidden = GetTopContext()->getProperty(PROP_CHAR_HIDDEN);
- if (pHidden)
- pHidden->second >>= bIsHidden;
- if (!bIsHidden)
- {
- uno::Reference<text::XTextCursor> xCur3 = xTextRange->getText()->createTextCursorByRange(xParaCursor);
- xCur3->goRight(1, true);
- if (xCur3->getString() == SAL_NEWLINE_STRING)
- {
- uno::Reference< beans::XPropertySet > xProp( xCur3, uno::UNO_QUERY );
- xProp->setPropertyValue(getPropertyName(PROP_CHAR_HIDDEN), uno::makeAny(false));
- }
- }
- }
- }
- }
-
- // tdf#118521 set paragraph top or bottom margin based on the paragraph style
- // if we already set the other margin with direct formatting
- if (xParaProps)
- {
- const bool bTopSet = pParaContext->isSet(PROP_PARA_TOP_MARGIN);
- const bool bBottomSet = pParaContext->isSet(PROP_PARA_BOTTOM_MARGIN);
- const bool bContextSet = pParaContext->isSet(PROP_PARA_CONTEXT_MARGIN);
- if ( bTopSet != bBottomSet || bBottomSet != bContextSet )
- {
-
- if ( !bTopSet )
- {
- uno::Any aMargin = GetPropertyFromParaStyleSheet(PROP_PARA_TOP_MARGIN);
- if ( aMargin != uno::Any() )
- xParaProps->setPropertyValue("ParaTopMargin", aMargin);
- }
- if ( !bBottomSet )
- {
- uno::Any aMargin = GetPropertyFromParaStyleSheet(PROP_PARA_BOTTOM_MARGIN);
- if ( aMargin != uno::Any() )
- xParaProps->setPropertyValue("ParaBottomMargin", aMargin);
- }
- if ( !bContextSet )
- {
- uno::Any aMargin = GetPropertyFromParaStyleSheet(PROP_PARA_CONTEXT_MARGIN);
- if ( aMargin != uno::Any() )
- xParaProps->setPropertyValue("ParaContextMargin", aMargin);
- }
- }
- }
-
- // Left, Right, and Hanging settings are also grouped. Ensure that all or none are set.
- if (xParaProps)
- {
- const bool bLeftSet = pParaContext->isSet(PROP_PARA_LEFT_MARGIN);
- const bool bRightSet = pParaContext->isSet(PROP_PARA_RIGHT_MARGIN);
- const bool bFirstSet = pParaContext->isSet(PROP_PARA_FIRST_LINE_INDENT);
- if ( bLeftSet != bRightSet || bRightSet != bFirstSet )
- {
- if ( !bLeftSet )
- {
- uno::Any aMargin = GetPropertyFromParaStyleSheet(PROP_PARA_LEFT_MARGIN);
- if ( aMargin != uno::Any() )
- xParaProps->setPropertyValue("ParaLeftMargin", aMargin);
- else if (isNumberingViaStyle)
- {
- const sal_Int32 nParaLeftMargin = getNumberingProperty(nListId, pStyleSheetProperties->GetListLevel(), "IndentAt");
- if (nParaLeftMargin != 0)
- xParaProps->setPropertyValue("ParaLeftMargin", uno::makeAny(nParaLeftMargin));
- }
- }
- if ( !bRightSet )
- {
- uno::Any aMargin = GetPropertyFromParaStyleSheet(PROP_PARA_RIGHT_MARGIN);
- if ( aMargin != uno::Any() )
- xParaProps->setPropertyValue("ParaRightMargin", aMargin);
- }
- if ( !bFirstSet )
- {
- uno::Any aMargin = GetPropertyFromParaStyleSheet(PROP_PARA_FIRST_LINE_INDENT);
- if ( aMargin != uno::Any() )
- xParaProps->setPropertyValue("ParaFirstLineIndent", aMargin);
- else if (isNumberingViaStyle)
- {
- const sal_Int32 nFirstLineIndent = getNumberingProperty(nListId, pStyleSheetProperties->GetListLevel(), "FirstLineIndent");
- if (nFirstLineIndent != 0)
- xParaProps->setPropertyValue("ParaFirstLineIndent", uno::makeAny(nFirstLineIndent));
- }
- }
- }
- }
-
- // fix table paragraph properties
- if ( xTextRange.is() && xParaProps && m_nTableDepth > 0 )
- {
- uno::Sequence< beans::PropertyValue > aParaProps = pParaContext->GetPropertyValues(false);
- uno::Reference<text::XTextCursor> xCur = xTextRange->getText()->createTextCursorByRange(xTextRange);
- uno::Reference< beans::XPropertyState > xRunProperties( xCur, uno::UNO_QUERY_THROW );
- // tdf#90069 in tables, apply paragraph level character style also on
- // paragraph level to support its copy during insertion of new table rows
- for( const auto& rParaProp : std::as_const(aParaProps) )
- {
- if ( rParaProp.Name.startsWith("Char") && rParaProp.Name != "CharStyleName" && rParaProp.Name != "CharInteropGrabBag" &&
- // all text portions contain the same value, so next setPropertyValue() won't overwrite part of them
- xRunProperties->getPropertyState(rParaProp.Name) == css::beans::PropertyState_DIRECT_VALUE )
- {
- uno::Reference<beans::XPropertySet> xRunPropertySet(xCur, uno::UNO_QUERY);
- xParaProps->setPropertyValue( rParaProp.Name, xRunPropertySet->getPropertyValue(rParaProp.Name) );
- // remember this for table style handling
- getTableManager().getCurrentParagraphs()->back().m_aParaOverrideApplied.insert(rParaProp.Name);
- }
- }
-
- // tdf#128959 table paragraphs haven't got window and orphan controls
- uno::Any aAny = uno::makeAny(static_cast<sal_Int8>(0));
- xParaProps->setPropertyValue("ParaOrphans", aAny);
- xParaProps->setPropertyValue("ParaWidows", aAny);
- }
- }
- if( !bKeepLastParagraphProperties )
- rAppendContext.pLastParagraphProperties = pToBeSavedProperties;
- }
- catch(const lang::IllegalArgumentException&)
- {
- TOOLS_WARN_EXCEPTION( "writerfilter", "DomainMapper_Impl::finishParagraph" );
- }
- catch(const uno::Exception&)
- {
- TOOLS_WARN_EXCEPTION( "writerfilter.dmapper", "finishParagraph()" );
- }
-
- }
-
- bool bIgnoreFrameState = IsInHeaderFooter();
- if( (!bIgnoreFrameState && pParaContext && pParaContext->IsFrameMode()) || (bIgnoreFrameState && GetIsPreviousParagraphFramed()) )
- SetIsPreviousParagraphFramed(true);
- else
- SetIsPreviousParagraphFramed(false);
-
- m_bRemoveThisParagraph = false;
- if( !IsInHeaderFooter() && !IsInShape() && (!pParaContext || !pParaContext->IsFrameMode()) )
- { // If the paragraph is in a frame, shape or header/footer, it's not a paragraph of the section itself.
- SetIsFirstParagraphInSection(false);
- // don't count an empty deleted paragraph as first paragraph in section to avoid of
- // the deletion of the next empty paragraph later, resulting loss of the associated page break
- if (!m_previousRedline || m_bParaChanged)
- {
- SetIsFirstParagraphInSectionAfterRedline(false);
- SetIsLastParagraphInSection(false);
- }
- }
- m_previousRedline.clear();
- m_bParaChanged = false;
-
- if (m_bIsFirstParaInShape)
- m_bIsFirstParaInShape = false;
-
- if (pParaContext)
- {
- // Reset the frame properties for the next paragraph
- pParaContext->ResetFrameProperties();
- }
-
- SetIsOutsideAParagraph(true);
- m_bParaHadField = false;
-
- // don't overwrite m_bFirstParagraphInCell in table separator nodes
- // and in text boxes anchored to the first paragraph of table cells
- if (m_nTableDepth > 0 && m_nTableDepth == m_nTableCellDepth && !IsInShape())
- m_bFirstParagraphInCell = false;
-
- m_bParaAutoBefore = false;
- m_bParaWithInlineObject = false;
-
-#ifdef DBG_UTIL
- TagLogger::getInstance().endElement();
-#endif
-
-}
-
-void DomainMapper_Impl::appendTextPortion( const OUString& rString, const PropertyMapPtr& pPropertyMap )
-{
- if (m_bDiscardHeaderFooter)
- return;
-
- if (m_aTextAppendStack.empty())
- return;
- // Before placing call to processDeferredCharacterProperties(), TopContextType should be CONTEXT_CHARACTER
- // processDeferredCharacterProperties() invokes only if character inserted
- if( pPropertyMap == m_pTopContext && !deferredCharacterProperties.empty() && (GetTopContextType() == CONTEXT_CHARACTER) )
- processDeferredCharacterProperties();
- uno::Reference< text::XTextAppend > xTextAppend = m_aTextAppendStack.top().xTextAppend;
- if (!xTextAppend.is() || !hasTableManager() || getTableManager().isIgnore())
- return;
-
- try
- {
- // If we are in comments, then disable CharGrabBag, comment text doesn't support that.
- uno::Sequence< beans::PropertyValue > aValues = pPropertyMap->GetPropertyValues(/*bCharGrabBag=*/!m_bIsInComments);
-
- if (m_bStartTOC || m_bStartIndex || m_bStartBibliography)
- for( auto& rValue : aValues )
- {
- if (rValue.Name == "CharHidden")
- rValue.Value <<= false;
- }
-
- uno::Reference< text::XTextRange > xTextRange;
- if (m_aTextAppendStack.top().xInsertPosition.is())
- {
- xTextRange = xTextAppend->insertTextPortion(rString, aValues, m_aTextAppendStack.top().xInsertPosition);
- m_aTextAppendStack.top().xCursor->gotoRange(xTextRange->getEnd(), true);
- }
- else
- {
- if (m_bStartTOC || m_bStartIndex || m_bStartBibliography || m_nStartGenericField != 0)
- {
- if (IsInHeaderFooter() && !m_bStartTOCHeaderFooter)
- {
- xTextRange = xTextAppend->appendTextPortion(rString, aValues);
- }
- else
- {
- m_bStartedTOC = true;
- uno::Reference< text::XTextCursor > xTOCTextCursor = xTextAppend->getEnd()->getText( )->createTextCursor( );
- assert(xTOCTextCursor.is());
- xTOCTextCursor->gotoEnd(false);
- if (m_nStartGenericField != 0)
- {
- xTOCTextCursor->goLeft(1, false);
- }
- xTextRange = xTextAppend->insertTextPortion(rString, aValues, xTOCTextCursor);
- SAL_WARN_IF(!xTextRange.is(), "writerfilter.dmapper", "insertTextPortion failed");
- if (!xTextRange.is())
- throw uno::Exception("insertTextPortion failed", nullptr);
- m_bTextInserted = true;
- xTOCTextCursor->gotoRange(xTextRange->getEnd(), true);
- if (m_nStartGenericField == 0)
- {
- m_aTextAppendStack.push(TextAppendContext(xTextAppend, xTOCTextCursor));
- }
- }
- }
- else
- {
-#if !defined(MACOSX) // TODO: check layout differences and support all platforms, if needed
- sal_Int32 nPos = 0;
- OUString sFontName;
- OUString sDoubleSpace(" ");
- PropertyMapPtr pContext = GetTopContextOfType(CONTEXT_CHARACTER);
- // tdf#123703 workaround for longer space sequences of the old or compatible RTF documents
- if (GetSettingsTable()->GetLongerSpaceSequence() && !IsOpenFieldCommand() && (nPos = rString.indexOf(sDoubleSpace)) != -1 &&
- // monospaced fonts have no longer space sequences, regardless of \fprq2 (not monospaced) font setting
- // fix for the base monospaced font Courier
- (!pContext || !pContext->isSet(PROP_CHAR_FONT_NAME) ||
- ((pContext->getProperty(PROP_CHAR_FONT_NAME)->second >>= sFontName) && sFontName.indexOf("Courier") == -1)))
- {
- // an RTF space character is longer by an extra six-em-space in an old-style RTF space sequence,
- // insert them to keep RTF document layout formatted by consecutive spaces
- const sal_Unicode aExtraSpace[5] = { 0x2006, 0x20, 0x2006, 0x20, 0 };
- const sal_Unicode aExtraSpace2[4] = { 0x20, 0x2006, 0x20, 0 };
- xTextRange = xTextAppend->appendTextPortion(rString.replaceAll(sDoubleSpace, aExtraSpace, nPos)
- .replaceAll(sDoubleSpace, aExtraSpace2, nPos), aValues);
- }
- else
-#endif
- xTextRange = xTextAppend->appendTextPortion(rString, aValues);
- }
- }
-
- // reset moveFrom data of non-terminating runs of the paragraph
- if ( m_pParaMarkerRedlineMoveFrom )
- {
- m_pParaMarkerRedlineMoveFrom.clear();
- }
- CheckRedline( xTextRange );
- m_bParaChanged = true;
-
- //getTableManager( ).handle(xTextRange);
- }
- catch(const lang::IllegalArgumentException&)
- {
- TOOLS_WARN_EXCEPTION( "writerfilter", "DomainMapper_Impl::appendTextPortion" );
- }
- catch(const uno::Exception&)
- {
- TOOLS_WARN_EXCEPTION( "writerfilter", "DomainMapper_Impl::appendTextPortion" );
- }
-}
-
-void DomainMapper_Impl::appendTextContent(
- const uno::Reference< text::XTextContent >& xContent,
- const uno::Sequence< beans::PropertyValue >& xPropertyValues
- )
-{
- SAL_WARN_IF(m_aTextAppendStack.empty(), "writerfilter.dmapper", "no text append stack");
- if (m_aTextAppendStack.empty())
- return;
- uno::Reference< text::XTextAppendAndConvert > xTextAppendAndConvert( m_aTextAppendStack.top().xTextAppend, uno::UNO_QUERY );
- OSL_ENSURE( xTextAppendAndConvert.is(), "trying to append a text content without XTextAppendAndConvert" );
- if (!xTextAppendAndConvert.is() || !hasTableManager() || getTableManager().isIgnore())
- return;
-
- try
- {
- if (m_aTextAppendStack.top().xInsertPosition.is())
- xTextAppendAndConvert->insertTextContentWithProperties( xContent, xPropertyValues, m_aTextAppendStack.top().xInsertPosition );
- else
- xTextAppendAndConvert->appendTextContent( xContent, xPropertyValues );
- }
- catch(const lang::IllegalArgumentException&)
- {
- }
- catch(const uno::Exception&)
- {
- }
-}
-
-void DomainMapper_Impl::appendOLE( const OUString& rStreamName, const std::shared_ptr<OLEHandler>& pOLEHandler )
-{
- try
- {
- uno::Reference< text::XTextContent > xOLE( m_xTextFactory->createInstance("com.sun.star.text.TextEmbeddedObject"), uno::UNO_QUERY_THROW );
- uno::Reference< beans::XPropertySet > xOLEProperties(xOLE, uno::UNO_QUERY_THROW);
-
- OUString aCLSID = pOLEHandler->getCLSID(m_xComponentContext);
- if (aCLSID.isEmpty())
- xOLEProperties->setPropertyValue(getPropertyName( PROP_STREAM_NAME ),
- uno::makeAny( rStreamName ));
- else
- xOLEProperties->setPropertyValue("CLSID", uno::makeAny(aCLSID));
-
- OUString aDrawAspect = pOLEHandler->GetDrawAspect();
- if(!aDrawAspect.isEmpty())
- xOLEProperties->setPropertyValue("DrawAspect", uno::makeAny(aDrawAspect));
-
- awt::Size aSize = pOLEHandler->getSize();
- if( !aSize.Width )
- aSize.Width = 1000;
- if( !aSize.Height )
- aSize.Height = 1000;
- xOLEProperties->setPropertyValue(getPropertyName( PROP_WIDTH ),
- uno::makeAny(aSize.Width));
- xOLEProperties->setPropertyValue(getPropertyName( PROP_HEIGHT ),
- uno::makeAny(aSize.Height));
-
- OUString aVisAreaWidth = pOLEHandler->GetVisAreaWidth();
- if(!aVisAreaWidth.isEmpty())
- xOLEProperties->setPropertyValue("VisibleAreaWidth", uno::makeAny(aVisAreaWidth));
-
- OUString aVisAreaHeight = pOLEHandler->GetVisAreaHeight();
- if(!aVisAreaHeight.isEmpty())
- xOLEProperties->setPropertyValue("VisibleAreaHeight", uno::makeAny(aVisAreaHeight));
-
- uno::Reference< graphic::XGraphic > xGraphic = pOLEHandler->getReplacement();
- xOLEProperties->setPropertyValue(getPropertyName( PROP_GRAPHIC ),
- uno::makeAny(xGraphic));
- uno::Reference<beans::XPropertySet> xReplacementProperties(pOLEHandler->getShape(), uno::UNO_QUERY);
- if (xReplacementProperties.is())
- {
- table::BorderLine2 aBorderProps;
- xReplacementProperties->getPropertyValue("LineColor") >>= aBorderProps.Color;
- xReplacementProperties->getPropertyValue("LineWidth") >>= aBorderProps.LineWidth;
- xReplacementProperties->getPropertyValue("LineStyle") >>= aBorderProps.LineStyle;
-
- xOLEProperties->setPropertyValue("RightBorder", uno::Any(aBorderProps));
- xOLEProperties->setPropertyValue("TopBorder", uno::Any(aBorderProps));
- xOLEProperties->setPropertyValue("LeftBorder", uno::Any(aBorderProps));
- xOLEProperties->setPropertyValue("BottomBorder", uno::Any(aBorderProps));
-
- OUString pProperties[] = {
- "AnchorType",
- "Surround",
- "SurroundContour",
- "HoriOrient",
- "HoriOrientPosition",
- "VertOrient",
- "VertOrientPosition",
- "VertOrientRelation",
- "HoriOrientRelation",
- "LeftMargin",
- "RightMargin",
- "TopMargin",
- "BottomMargin",
- "FillStyle",
- "FillColor",
- "FillColor2",
- "LineStyle",
- };
- for (const OUString& s : pProperties)
- {
- const uno::Any aVal = xReplacementProperties->getPropertyValue(s);
- xOLEProperties->setPropertyValue(s, aVal);
- }
- }
- else
- // mimic the treatment of graphics here... it seems anchoring as character
- // gives a better ( visually ) result
- xOLEProperties->setPropertyValue(getPropertyName( PROP_ANCHOR_TYPE ), uno::makeAny( text::TextContentAnchorType_AS_CHARACTER ) );
- // remove ( if valid ) associated shape ( used for graphic replacement )
- SAL_WARN_IF(m_aAnchoredStack.empty(), "writerfilter.dmapper", "no anchor stack");
- if (!m_aAnchoredStack.empty())
- m_aAnchoredStack.top( ).bToRemove = true;
- RemoveLastParagraph();
- SAL_WARN_IF(m_aTextAppendStack.empty(), "writerfilter.dmapper", "no text stack");
- if (!m_aTextAppendStack.empty())
- m_aTextAppendStack.pop();
-
- appendTextContent( xOLE, uno::Sequence< beans::PropertyValue >() );
-
- if (!aCLSID.isEmpty())
- pOLEHandler->importStream(m_xComponentContext, GetTextDocument(), xOLE);
-
- }
- catch( const uno::Exception& )
- {
- TOOLS_WARN_EXCEPTION( "writerfilter", "in creation of OLE object" );
- }
-
-}
-
-void DomainMapper_Impl::appendStarMath( const Value& val )
-{
- uno::Reference< embed::XEmbeddedObject > formula;
- val.getAny() >>= formula;
- if( !formula.is() )
- return;
-
- try
- {
- uno::Reference< text::XTextContent > xStarMath( m_xTextFactory->createInstance("com.sun.star.text.TextEmbeddedObject"), uno::UNO_QUERY_THROW );
- uno::Reference< beans::XPropertySet > xStarMathProperties(xStarMath, uno::UNO_QUERY_THROW);
-
- xStarMathProperties->setPropertyValue(getPropertyName( PROP_EMBEDDED_OBJECT ),
- val.getAny());
- // tdf#66405: set zero margins for embedded object
- xStarMathProperties->setPropertyValue(getPropertyName( PROP_LEFT_MARGIN ),
- uno::makeAny(sal_Int32(0)));
- xStarMathProperties->setPropertyValue(getPropertyName( PROP_RIGHT_MARGIN ),
- uno::makeAny(sal_Int32(0)));
- xStarMathProperties->setPropertyValue(getPropertyName( PROP_TOP_MARGIN ),
- uno::makeAny(sal_Int32(0)));
- xStarMathProperties->setPropertyValue(getPropertyName( PROP_BOTTOM_MARGIN ),
- uno::makeAny(sal_Int32(0)));
-
- uno::Reference< uno::XInterface > xInterface( formula->getComponent(), uno::UNO_QUERY );
- // set zero margins for object's component
- uno::Reference< beans::XPropertySet > xComponentProperties( xInterface, uno::UNO_QUERY_THROW );
- xComponentProperties->setPropertyValue(getPropertyName( PROP_LEFT_MARGIN ),
- uno::makeAny(sal_Int32(0)));
- xComponentProperties->setPropertyValue(getPropertyName( PROP_RIGHT_MARGIN ),
- uno::makeAny(sal_Int32(0)));
- xComponentProperties->setPropertyValue(getPropertyName( PROP_TOP_MARGIN ),
- uno::makeAny(sal_Int32(0)));
- xComponentProperties->setPropertyValue(getPropertyName( PROP_BOTTOM_MARGIN ),
- uno::makeAny(sal_Int32(0)));
- Size size( 1000, 1000 );
- if( oox::FormulaImportBase* formulaimport = dynamic_cast< oox::FormulaImportBase* >( xInterface.get()))
- size = formulaimport->getFormulaSize();
- xStarMathProperties->setPropertyValue(getPropertyName( PROP_WIDTH ),
- uno::makeAny( sal_Int32(size.Width())));
- xStarMathProperties->setPropertyValue(getPropertyName( PROP_HEIGHT ),
- uno::makeAny( sal_Int32(size.Height())));
- xStarMathProperties->setPropertyValue(getPropertyName(PROP_ANCHOR_TYPE),
- uno::makeAny(text::TextContentAnchorType_AS_CHARACTER));
- // mimic the treatment of graphics here... it seems anchoring as character
- // gives a better ( visually ) result
- appendTextContent(xStarMath, uno::Sequence<beans::PropertyValue>());
- }
- catch( const uno::Exception& )
- {
- TOOLS_WARN_EXCEPTION( "writerfilter", "in creation of StarMath object" );
- }
-}
-
-void DomainMapper_Impl::adjustLastPara(sal_Int8 nAlign)
-{
- PropertyMapPtr pLastPara = GetTopContextOfType(dmapper::CONTEXT_PARAGRAPH);
- pLastPara->Insert(PROP_PARA_ADJUST, uno::makeAny(nAlign), true);
-}
-
-uno::Reference< beans::XPropertySet > DomainMapper_Impl::appendTextSectionAfter(
- uno::Reference< text::XTextRange > const & xBefore )
-{
- uno::Reference< beans::XPropertySet > xRet;
- if (m_aTextAppendStack.empty())
- return xRet;
- uno::Reference< text::XTextAppend > xTextAppend = m_aTextAppendStack.top().xTextAppend;
- if(xTextAppend.is())
- {
- try
- {
- uno::Reference< text::XParagraphCursor > xCursor(
- xTextAppend->createTextCursorByRange( xBefore ), uno::UNO_QUERY_THROW);
- //the cursor has been moved to the end of the paragraph because of the appendTextPortion() calls
- xCursor->gotoStartOfParagraph( false );
- if (m_aTextAppendStack.top().xInsertPosition.is())
- xCursor->gotoRange( m_aTextAppendStack.top().xInsertPosition, true );
- else
- xCursor->gotoEnd( true );
- //the paragraph after this new section is already inserted
- xCursor->goLeft(1, true);
- css::uno::Reference<css::text::XTextRange> xTextRange(xCursor, css::uno::UNO_QUERY_THROW);
-
- if (css::uno::Reference<css::text::XDocumentIndexesSupplier> xIndexSupplier{
- GetTextDocument(), css::uno::UNO_QUERY })
- {
- css::uno::Reference<css::text::XTextRangeCompare> xCompare(
- xTextAppend, css::uno::UNO_QUERY);
- const auto xIndexAccess = xIndexSupplier->getDocumentIndexes();
- for (sal_Int32 i = xIndexAccess->getCount(); i > 0; --i)
- {
- if (css::uno::Reference<css::text::XDocumentIndex> xIndex{
- xIndexAccess->getByIndex(i - 1), css::uno::UNO_QUERY })
- {
- const auto xIndexTextRange = xIndex->getAnchor();
- if (xCompare->compareRegionStarts(xTextRange, xIndexTextRange) == 0
- && xCompare->compareRegionEnds(xTextRange, xIndexTextRange) == 0)
- {
- // The boundaries coincide with an index: trying to attach a section
- // to the range will insert the section inside the index. goRight will
- // extend the range outside of the index, so that created section will
- // be around it. Alternatively we could return index section itself
- // instead : xRet.set(xIndex, uno::UNO_QUERY) - to set its properties,
- // like columns/fill.
- xCursor->goRight(1, true);
- break;
- }
- }
- }
- }
-
- uno::Reference< text::XTextContent > xSection( m_xTextFactory->createInstance("com.sun.star.text.TextSection"), uno::UNO_QUERY_THROW );
- xSection->attach( xTextRange );
- xRet.set(xSection, uno::UNO_QUERY );
- }
- catch(const uno::Exception&)
- {
- }
-
- }
-
- return xRet;
-}
-
-void DomainMapper_Impl::appendGlossaryEntry()
-{
- appendTextSectionAfter(m_xGlossaryEntryStart);
-}
-
-void DomainMapper_Impl::PushPageHeaderFooter(bool bHeader, SectionPropertyMap::PageType eType)
-{
- m_bSaveParaHadField = m_bParaHadField;
- m_aHeaderFooterStack.push(HeaderFooterContext(m_bTextInserted, m_nTableDepth));
- m_bTextInserted = false;
- m_nTableDepth = 0;
-
- const PropertyIds ePropIsOn = bHeader? PROP_HEADER_IS_ON: PROP_FOOTER_IS_ON;
- const PropertyIds ePropShared = bHeader? PROP_HEADER_IS_SHARED: PROP_FOOTER_IS_SHARED;
- const PropertyIds ePropTextLeft = bHeader? PROP_HEADER_TEXT_LEFT: PROP_FOOTER_TEXT_LEFT;
- const PropertyIds ePropText = bHeader? PROP_HEADER_TEXT: PROP_FOOTER_TEXT;
-
- m_bDiscardHeaderFooter = true;
- m_eInHeaderFooterImport
- = bHeader ? HeaderFooterImportState::header : HeaderFooterImportState::footer;
-
- //get the section context
- PropertyMapPtr pContext = DomainMapper_Impl::GetTopContextOfType(CONTEXT_SECTION);
- //ask for the header/footer name of the given type
- SectionPropertyMap* pSectionContext = dynamic_cast< SectionPropertyMap* >( pContext.get() );
- if(!pSectionContext)
- return;
-
- // clear the "Link To Previous" flag so that the header/footer
- // content is not copied from the previous section
- pSectionContext->ClearHeaderFooterLinkToPrevious(bHeader, eType);
-
- if (!m_bIsNewDoc)
- {
- return; // TODO sw cannot Undo insert header/footer without crashing
- }
-
- uno::Reference< beans::XPropertySet > xPageStyle =
- pSectionContext->GetPageStyle(
- *this,
- eType == SectionPropertyMap::PAGE_FIRST );
- if (!xPageStyle.is())
- return;
- try
- {
- bool bLeft = eType == SectionPropertyMap::PAGE_LEFT;
- bool bFirst = eType == SectionPropertyMap::PAGE_FIRST;
- if ((!bLeft && !GetSettingsTable()->GetEvenAndOddHeaders()) || (GetSettingsTable()->GetEvenAndOddHeaders()))
- {
- //switch on header/footer use
- xPageStyle->setPropertyValue(
- getPropertyName(ePropIsOn),
- uno::makeAny(true));
-
- // If the 'Different Even & Odd Pages' flag is turned on - do not ignore it
- // Even if the 'Even' header/footer is blank - the flag should be imported (so it would look in LO like in Word)
- if (!bFirst && GetSettingsTable()->GetEvenAndOddHeaders())
- xPageStyle->setPropertyValue(getPropertyName(ePropShared), uno::makeAny(false));
-
- //set the interface
- uno::Reference< text::XText > xText;
- xPageStyle->getPropertyValue(getPropertyName(bLeft? ePropTextLeft: ePropText)) >>= xText;
-
- m_aTextAppendStack.push(TextAppendContext(uno::Reference< text::XTextAppend >(xText, uno::UNO_QUERY_THROW),
- m_bIsNewDoc
- ? uno::Reference<text::XTextCursor>()
- : xText->createTextCursorByRange(xText->getStart())));
- m_bDiscardHeaderFooter = false; // set only on success!
- }
- }
- catch( const uno::Exception& )
- {
- DBG_UNHANDLED_EXCEPTION("writerfilter.dmapper");
- }
-}
-
-void DomainMapper_Impl::PushPageHeader(SectionPropertyMap::PageType eType)
-{
- PushPageHeaderFooter(/* bHeader = */ true, eType);
-}
-
-void DomainMapper_Impl::PushPageFooter(SectionPropertyMap::PageType eType)
-{
- PushPageHeaderFooter(/* bHeader = */ false, eType);
-}
-
-void DomainMapper_Impl::PopPageHeaderFooter()
-{
- //header and footer always have an empty paragraph at the end
- //this has to be removed
- RemoveLastParagraph( );
-
- if (!m_aTextAppendStack.empty())
- {
- if (!m_bDiscardHeaderFooter)
- {
- m_aTextAppendStack.pop();
- }
- m_bDiscardHeaderFooter = false;
- }
- m_eInHeaderFooterImport = HeaderFooterImportState::none;
-
- if (!m_aHeaderFooterStack.empty())
- {
- m_bTextInserted = m_aHeaderFooterStack.top().getTextInserted();
- m_nTableDepth = m_aHeaderFooterStack.top().getTableDepth();
- m_aHeaderFooterStack.pop();
- }
-
- m_bParaHadField = m_bSaveParaHadField;
-}
-
-void DomainMapper_Impl::PushFootOrEndnote( bool bIsFootnote )
-{
- SAL_WARN_IF(m_bInFootOrEndnote, "writerfilter.dmapper", "PushFootOrEndnote() is called from another foot or endnote");
- m_bInFootOrEndnote = true;
- m_bCheckFirstFootnoteTab = true;
- m_bSaveFirstParagraphInCell = m_bFirstParagraphInCell;
- try
- {
- // Redlines outside the footnote should not affect footnote content
- m_aRedlines.push(std::vector< RedlineParamsPtr >());
-
- // IMHO character styles from footnote labels should be ignored in the edit view of Writer.
- // This adds a hack on top of the following hack to save the style name in the context.
- PropertyMapPtr pTopContext = GetTopContext();
- OUString sFootnoteCharStyleName;
- std::optional< PropertyMap::Property > aProp = pTopContext->getProperty(PROP_CHAR_STYLE_NAME);
- if (aProp)
- aProp->second >>= sFootnoteCharStyleName;
-
- // Remove style reference, if any. This reference did appear here as a side effect of tdf#43017
- // Seems it is not required by LO, but causes side effects during editing. So remove it
- // for footnotes/endnotes to restore original LO behavior here.
- pTopContext->Erase(PROP_CHAR_STYLE_NAME);
-
- uno::Reference< text::XText > xFootnoteText;
- if (GetTextFactory().is())
- xFootnoteText.set( GetTextFactory()->createInstance(
- bIsFootnote ?
- OUString( "com.sun.star.text.Footnote" ) : OUString( "com.sun.star.text.Endnote" )),
- uno::UNO_QUERY_THROW );
- uno::Reference< text::XFootnote > xFootnote( xFootnoteText, uno::UNO_QUERY_THROW );
- pTopContext->SetFootnote(xFootnote, sFootnoteCharStyleName);
- uno::Sequence< beans::PropertyValue > aFontProperties = pTopContext->GetPropertyValues();
- appendTextContent( uno::Reference< text::XTextContent >( xFootnoteText, uno::UNO_QUERY_THROW ), aFontProperties );
- m_aTextAppendStack.push(TextAppendContext(uno::Reference< text::XTextAppend >( xFootnoteText, uno::UNO_QUERY_THROW ),
- xFootnoteText->createTextCursorByRange(xFootnoteText->getStart())));
-
- // Redlines for the footnote anchor in the main text content
- std::vector< RedlineParamsPtr > aFootnoteRedline = std::move(m_aRedlines.top());
- m_aRedlines.pop();
- CheckRedline( xFootnote->getAnchor( ) );
- m_aRedlines.push( aFootnoteRedline );
-
- // Try scanning for custom footnote labels
- if (!sFootnoteCharStyleName.isEmpty())
- StartCustomFootnote(pTopContext);
- else
- EndCustomFootnote();
- }
- catch( const uno::Exception& )
- {
- TOOLS_WARN_EXCEPTION("writerfilter.dmapper", "PushFootOrEndnote");
- }
-}
-
-void DomainMapper_Impl::CreateRedline(uno::Reference<text::XTextRange> const& xRange,
- const RedlineParamsPtr& pRedline)
-{
- if ( !pRedline )
- return;
-
- try
- {
- OUString sType;
- switch ( pRedline->m_nToken & 0xffff )
- {
- case XML_mod:
- sType = getPropertyName( PROP_FORMAT );
- break;
- case XML_moveTo:
- case XML_ins:
- sType = getPropertyName( PROP_INSERT );
- break;
- case XML_moveFrom:
- m_pParaMarkerRedlineMoveFrom = pRedline.get();
- [[fallthrough]];
- case XML_del:
- sType = getPropertyName( PROP_DELETE );
- break;
- case XML_ParagraphFormat:
- sType = getPropertyName( PROP_PARAGRAPH_FORMAT );
- break;
- default:
- throw lang::IllegalArgumentException("illegal redline token type", nullptr, 0);
- }
- beans::PropertyValues aRedlineProperties( 3 );
- beans::PropertyValue * pRedlineProperties = aRedlineProperties.getArray( );
- pRedlineProperties[0].Name = getPropertyName( PROP_REDLINE_AUTHOR );
- pRedlineProperties[0].Value <<= pRedline->m_sAuthor;
- pRedlineProperties[1].Name = getPropertyName( PROP_REDLINE_DATE_TIME );
- pRedlineProperties[1].Value <<= ConversionHelper::ConvertDateStringToDateTime( pRedline->m_sDate );
- pRedlineProperties[2].Name = getPropertyName( PROP_REDLINE_REVERT_PROPERTIES );
- pRedlineProperties[2].Value <<= pRedline->m_aRevertProperties;
- if (!m_bIsActualParagraphFramed)
- {
- uno::Reference < text::XRedline > xRedline( xRange, uno::UNO_QUERY_THROW );
- xRedline->makeRedline( sType, aRedlineProperties );
- }
- // store frame and (possible floating) table redline data for restoring them after frame conversion
- if (m_bIsActualParagraphFramed || (hasTableManager() && getTableManager().isInTable()))
- {
- aFramedRedlines.push_back( uno::makeAny(xRange) );
- aFramedRedlines.push_back( uno::makeAny(sType) );
- aFramedRedlines.push_back( uno::makeAny(aRedlineProperties) );
- }
- }
- catch( const uno::Exception & )
- {
- TOOLS_WARN_EXCEPTION( "writerfilter", "in makeRedline" );
- }
-}
-
-void DomainMapper_Impl::CheckParaMarkerRedline( uno::Reference< text::XTextRange > const& xRange )
-{
- if ( m_pParaMarkerRedline )
- {
- CreateRedline( xRange, m_pParaMarkerRedline );
- if ( m_pParaMarkerRedline )
- {
- m_pParaMarkerRedline.clear();
- m_currentRedline.clear();
- }
- }
- else if ( m_pParaMarkerRedlineMoveFrom )
- {
- // terminating moveFrom redline removes also the paragraph mark
- m_pParaMarkerRedlineMoveFrom->m_nToken = XML_del;
- CreateRedline( xRange, m_pParaMarkerRedlineMoveFrom );
- }
- if ( m_pParaMarkerRedlineMoveFrom )
- {
- m_pParaMarkerRedlineMoveFrom.clear();
- }
-}
-
-void DomainMapper_Impl::CheckRedline( uno::Reference< text::XTextRange > const& xRange )
-{
- // Writer core "officially" does not like overlapping redlines, and its UNO interface is stupid enough
- // to not prevent that. However, in practice in fact everything appears to work fine (except for the debug warnings
- // about redline table corruption, which may possibly be harmless in reality). So leave this as it is, since this
- // is a better representation of how the changes happened. If this will ever become a problem, overlapping redlines
- // will need to be merged into one, just like doing the changes in the UI does, which will lose some information
- // (and so if that happens, it may be better to fix Writer).
- // Create the redlines here from lowest (formats) to highest (inserts/removals) priority, since the last one is
- // what Writer presents graphically, so this will show deletes as deleted text and not as just formatted text being there.
- bool bUsedRange = m_aRedlines.top().size() > 0 || (GetTopContextOfType(CONTEXT_CHARACTER) &&
- GetTopContextOfType(CONTEXT_CHARACTER)->Redlines().size() > 0);
-
- // only export ParagraphFormat, when there is no other redline in the same text portion to avoid missing redline compression,
- // but always export the first ParagraphFormat redline in a paragraph to keep the paragraph style change data for rejection
- if( (!bUsedRange || !m_bParaChanged) && GetTopContextOfType(CONTEXT_PARAGRAPH) )
- {
- std::vector<RedlineParamsPtr>& avRedLines = GetTopContextOfType(CONTEXT_PARAGRAPH)->Redlines();
- for( const auto& rRedline : avRedLines )
- CreateRedline( xRange, rRedline );
- }
- if( GetTopContextOfType(CONTEXT_CHARACTER) )
- {
- std::vector<RedlineParamsPtr>& avRedLines = GetTopContextOfType(CONTEXT_CHARACTER)->Redlines();
- for( const auto& rRedline : avRedLines )
- CreateRedline( xRange, rRedline );
- }
- for (const auto& rRedline : m_aRedlines.top() )
- CreateRedline( xRange, rRedline );
-}
-
-void DomainMapper_Impl::StartParaMarkerChange( )
-{
- m_bIsParaMarkerChange = true;
-}
-
-void DomainMapper_Impl::EndParaMarkerChange( )
-{
- m_bIsParaMarkerChange = false;
- m_previousRedline = m_currentRedline;
- m_currentRedline.clear();
-}
-
-void DomainMapper_Impl::StartCustomFootnote(const PropertyMapPtr pContext)
-{
- if (pContext == m_pFootnoteContext)
- return;
-
- assert(pContext->GetFootnote().is());
- m_bHasFootnoteStyle = true;
- m_bCheckFootnoteStyle = !pContext->GetFootnoteStyle().isEmpty();
- m_pFootnoteContext = pContext;
-}
-
-void DomainMapper_Impl::EndCustomFootnote()
-{
- m_bHasFootnoteStyle = false;
- m_bCheckFootnoteStyle = false;
-}
-
-void DomainMapper_Impl::PushAnnotation()
-{
- try
- {
- m_bIsInComments = true;
- if (!GetTextFactory().is())
- return;
- m_xAnnotationField.set( GetTextFactory()->createInstance( "com.sun.star.text.TextField.Annotation" ),
- uno::UNO_QUERY_THROW );
- uno::Reference< text::XText > xAnnotationText;
- m_xAnnotationField->getPropertyValue("TextRange") >>= xAnnotationText;
- m_aTextAppendStack.push(TextAppendContext(uno::Reference< text::XTextAppend >( xAnnotationText, uno::UNO_QUERY_THROW ),
- m_bIsNewDoc ? uno::Reference<text::XTextCursor>() : xAnnotationText->createTextCursorByRange(xAnnotationText->getStart())));
- }
- catch( const uno::Exception&)
- {
- DBG_UNHANDLED_EXCEPTION("writerfilter.dmapper");
- }
-}
-
-
-void DomainMapper_Impl::PopFootOrEndnote()
-{
- if (!IsRTFImport())
- RemoveLastParagraph();
-
- // In case the foot or endnote did not contain a tab.
- m_bIgnoreNextTab = false;
-
- if (!m_aTextAppendStack.empty())
- m_aTextAppendStack.pop();
-
- if (m_aRedlines.size() == 1)
- {
- SAL_WARN("writerfilter.dmapper", "PopFootOrEndnote() is called without PushFootOrEndnote()?");
- return;
- }
- m_aRedlines.pop();
- m_eSkipFootnoteState = SkipFootnoteSeparator::OFF;
- m_bInFootOrEndnote = false;
- m_pFootnoteContext = nullptr;
- m_bFirstParagraphInCell = m_bSaveFirstParagraphInCell;
-}
-
-void DomainMapper_Impl::PopAnnotation()
-{
- RemoveLastParagraph();
-
- m_bIsInComments = false;
- m_aTextAppendStack.pop();
-
- try
- {
- // See if the annotation will be a single position or a range.
- if (m_nAnnotationId == -1 || !m_aAnnotationPositions[m_nAnnotationId].m_xStart.is() || !m_aAnnotationPositions[m_nAnnotationId].m_xEnd.is())
- {
- uno::Sequence< beans::PropertyValue > aEmptyProperties;
- uno::Reference< text::XTextContent > xContent( m_xAnnotationField, uno::UNO_QUERY_THROW );
- appendTextContent( xContent, aEmptyProperties );
- CheckRedline( xContent->getAnchor( ) );
- }
- else
- {
- AnnotationPosition& aAnnotationPosition = m_aAnnotationPositions[m_nAnnotationId];
- // Create a range that points to the annotation start/end.
- uno::Reference<text::XText> const xText = aAnnotationPosition.m_xStart->getText();
- uno::Reference<text::XTextCursor> const xCursor = xText->createTextCursorByRange(aAnnotationPosition.m_xStart);
-
- bool bMarker = false;
- uno::Reference<text::XTextRangeCompare> xTextRangeCompare(xText, uno::UNO_QUERY);
- if (xTextRangeCompare->compareRegionStarts(aAnnotationPosition.m_xStart, aAnnotationPosition.m_xEnd) == 0)
- {
- // Insert a marker so that comment around an anchored image is not collapsed during
- // insertion.
- xText->insertString(xCursor, "x", false);
- bMarker = true;
- }
-
- xCursor->gotoRange(aAnnotationPosition.m_xEnd, true);
- uno::Reference<text::XTextRange> const xTextRange(xCursor, uno::UNO_QUERY_THROW);
-
- // Attach the annotation to the range.
- uno::Reference<text::XTextAppend> const xTextAppend = m_aTextAppendStack.top().xTextAppend;
- xTextAppend->insertTextContent(xTextRange, uno::Reference<text::XTextContent>(m_xAnnotationField, uno::UNO_QUERY_THROW), !xCursor->isCollapsed());
-
- if (bMarker)
- {
- // Remove the marker.
- xCursor->goLeft(1, true);
- xCursor->setString(OUString());
- }
- }
- m_aAnnotationPositions.erase( m_nAnnotationId );
- }
- catch (uno::Exception const&)
- {
- TOOLS_WARN_EXCEPTION("writerfilter.dmapper", "Cannot insert annotation field");
- }
-
- m_xAnnotationField.clear();
- m_nAnnotationId = -1;
-}
-
-void DomainMapper_Impl::PushPendingShape( const uno::Reference< drawing::XShape > & xShape )
-{
- m_aPendingShapes.push_back(xShape);
-}
-
-uno::Reference<drawing::XShape> DomainMapper_Impl::PopPendingShape()
-{
- uno::Reference<drawing::XShape> xRet;
- if (!m_aPendingShapes.empty())
- {
- xRet = m_aPendingShapes.front();
- m_aPendingShapes.pop_front();
- }
- return xRet;
-}
-
-void DomainMapper_Impl::PushShapeContext( const uno::Reference< drawing::XShape > & xShape )
-{
- // Append these early, so the context and the table manager stack will be
- // in sync, even if the text append stack is empty.
- appendTableManager();
- appendTableHandler();
- getTableManager().startLevel();
-
- if (m_aTextAppendStack.empty())
- return;
- uno::Reference<text::XTextAppend> xTextAppend = m_aTextAppendStack.top().xTextAppend;
-
- try
- {
- uno::Reference< lang::XServiceInfo > xSInfo( xShape, uno::UNO_QUERY_THROW );
- if (xSInfo->supportsService("com.sun.star.drawing.GroupShape"))
- {
- // Textboxes in shapes do not support styles, so check saved style information and apply properties directly to the child shapes.
- const uno::Reference<drawing::XShapes> xShapes(xShape, uno::UNO_QUERY);
- const sal_uInt32 nShapeCount = xShapes.is() ? xShapes->getCount() : 0;
- for ( sal_uInt32 i = 0; i < nShapeCount; ++i )
- {
- try
- {
- uno::Reference<beans::XPropertySet> xSyncedPropertySet(xShapes->getByIndex(i), uno::UNO_QUERY_THROW);
- comphelper::SequenceAsHashMap aGrabBag( xSyncedPropertySet->getPropertyValue("CharInteropGrabBag") );
-
- // only VML import has checked for style. Don't apply default parastyle properties to other imported shapes
- // - except for fontsize - to maintain compatibility with previous versions of LibreOffice.
- const bool bOnlyApplyCharHeight = !aGrabBag["mso-pStyle"].hasValue();
-
- OUString sStyleName;
- aGrabBag["mso-pStyle"] >>= sStyleName;
- StyleSheetEntryPtr pEntry = GetStyleSheetTable()->FindStyleSheetByISTD( sStyleName );
- if ( !pEntry )
- {
- // Use default style even in ambiguous cases (where multiple styles were defined) since MOST styles inherit
- // MOST of their properties from the default style. In the ambiguous case, we have to accept some kind of compromise
- // and the default paragraph style ought to be the safest one... (compared to DocDefaults or program defaults)
- pEntry = GetStyleSheetTable()->FindStyleSheetByConvertedStyleName( GetDefaultParaStyleName() );
- }
- if ( pEntry )
- {
- // The Ids here come from oox/source/vml/vmltextbox.cxx.
- // It probably could safely expand to all Ids that shapes support.
- const PropertyIds eIds[] = {
- PROP_CHAR_HEIGHT,
- PROP_CHAR_FONT_NAME,
- PROP_CHAR_WEIGHT,
- PROP_CHAR_CHAR_KERNING,
- PROP_CHAR_COLOR,
- PROP_PARA_ADJUST
- };
- const uno::Reference<beans::XPropertyState> xSyncedPropertyState(xSyncedPropertySet, uno::UNO_QUERY_THROW);
- for ( const auto& eId : eIds )
- {
- try
- {
- if ( bOnlyApplyCharHeight && eId != PROP_CHAR_HEIGHT )
- continue;
-
- const OUString sPropName = getPropertyName(eId);
- if ( beans::PropertyState_DEFAULT_VALUE == xSyncedPropertyState->getPropertyState(sPropName) )
- {
- const uno::Any aProp = GetPropertyFromStyleSheet(eId, pEntry, /*bDocDefaults=*/true, /*bPara=*/true);
- if ( aProp.hasValue() )
- xSyncedPropertySet->setPropertyValue( sPropName, aProp );
- }
- }
- catch (const uno::Exception&)
- {
- TOOLS_WARN_EXCEPTION( "writerfilter.dmapper", "PushShapeContext() text stylesheet property exception" );
- }
- }
- }
- }
- catch (const uno::Exception&)
- {
- TOOLS_WARN_EXCEPTION( "writerfilter.dmapper", "PushShapeContext()" );
- }
- }
-
- // A GroupShape doesn't implement text::XTextRange, but appending
- // an empty reference to the stacks still makes sense, because this
- // way bToRemove can be set, and we won't end up with duplicated
- // shapes for OLE objects.
- m_aTextAppendStack.push(TextAppendContext(uno::Reference<text::XTextAppend>(xShape, uno::UNO_QUERY), uno::Reference<text::XTextCursor>()));
- uno::Reference<text::XTextContent> xTxtContent(xShape, uno::UNO_QUERY);
- m_aAnchoredStack.push(AnchoredContext(xTxtContent));
- }
- else if (xSInfo->supportsService("com.sun.star.drawing.OLE2Shape"))
- {
- // OLE2Shape from oox should be converted to a TextEmbeddedObject for sw.
- m_aTextAppendStack.push(TextAppendContext(uno::Reference<text::XTextAppend>(xShape, uno::UNO_QUERY), uno::Reference<text::XTextCursor>()));
- uno::Reference<text::XTextContent> xTextContent(xShape, uno::UNO_QUERY);
- m_aAnchoredStack.push(AnchoredContext(xTextContent));
- uno::Reference<beans::XPropertySet> xShapePropertySet(xShape, uno::UNO_QUERY);
-
- m_xEmbedded.set(m_xTextFactory->createInstance("com.sun.star.text.TextEmbeddedObject"), uno::UNO_QUERY_THROW);
- uno::Reference<beans::XPropertySet> xEmbeddedProperties(m_xEmbedded, uno::UNO_QUERY_THROW);
- xEmbeddedProperties->setPropertyValue(getPropertyName(PROP_EMBEDDED_OBJECT), xShapePropertySet->getPropertyValue(getPropertyName(PROP_EMBEDDED_OBJECT)));
- xEmbeddedProperties->setPropertyValue(getPropertyName(PROP_ANCHOR_TYPE), uno::makeAny(text::TextContentAnchorType_AS_CHARACTER));
- // So that the original bitmap-only shape will be replaced by the embedded object.
- m_aAnchoredStack.top().bToRemove = true;
- m_aTextAppendStack.pop();
- appendTextContent(m_xEmbedded, uno::Sequence<beans::PropertyValue>());
- }
- else
- {
- uno::Reference< text::XTextRange > xShapeText( xShape, uno::UNO_QUERY_THROW);
- // Add the shape to the text append stack
- m_aTextAppendStack.push( TextAppendContext(uno::Reference< text::XTextAppend >( xShape, uno::UNO_QUERY_THROW ),
- m_bIsNewDoc ? uno::Reference<text::XTextCursor>() : m_xBodyText->createTextCursorByRange(xShapeText->getStart() )));
-
- // Add the shape to the anchored objects stack
- uno::Reference< text::XTextContent > xTxtContent( xShape, uno::UNO_QUERY_THROW );
- m_aAnchoredStack.push( AnchoredContext(xTxtContent) );
-
- uno::Reference< beans::XPropertySet > xProps( xShape, uno::UNO_QUERY_THROW );
-#ifdef DBG_UTIL
- TagLogger::getInstance().unoPropertySet(xProps);
-#endif
- text::TextContentAnchorType nAnchorType(text::TextContentAnchorType_AT_PARAGRAPH);
- xProps->getPropertyValue(getPropertyName( PROP_ANCHOR_TYPE )) >>= nAnchorType;
- bool checkZOrderStatus = false;
- if (xSInfo->supportsService("com.sun.star.text.TextFrame"))
- {
- SetIsTextFrameInserted(true);
- // Extract the special "btLr text frame" mode, requested by oox, if needed.
- // Extract vml ZOrder from FrameInteropGrabBag
- uno::Reference<beans::XPropertySet> xShapePropertySet(xShape, uno::UNO_QUERY);
- uno::Sequence<beans::PropertyValue> aGrabBag;
- xShapePropertySet->getPropertyValue("FrameInteropGrabBag") >>= aGrabBag;
-
- for (const auto& rProp : std::as_const(aGrabBag))
- {
- if (rProp.Name == "VML-Z-ORDER")
- {
- GraphicZOrderHelper* pZOrderHelper = m_rDMapper.graphicZOrderHelper();
- sal_Int32 zOrder(0);
- rProp.Value >>= zOrder;
- xShapePropertySet->setPropertyValue( "ZOrder", uno::makeAny(pZOrderHelper->findZOrder(zOrder)));
- pZOrderHelper->addItem(xShapePropertySet, zOrder);
- xShapePropertySet->setPropertyValue(getPropertyName( PROP_OPAQUE ), uno::makeAny( zOrder >= 0 ) );
- checkZOrderStatus = true;
- }
- else if ( rProp.Name == "TxbxHasLink" )
- {
- //Chaining of textboxes will happen in ~DomainMapper_Impl
- //i.e when all the textboxes are read and all its attributes
- //have been set ( basically the Name/LinkedDisplayName )
- //which is set in Graphic Import.
- m_vTextFramesForChaining.push_back(xShape);
- }
- }
-
- uno::Reference<text::XTextContent> xTextContent(xShape, uno::UNO_QUERY_THROW);
- uno::Reference<text::XTextRange> xTextRange(xTextAppend->createTextCursorByRange(xTextAppend->getEnd()), uno::UNO_QUERY_THROW);
- xTextAppend->insertTextContent(xTextRange, xTextContent, false);
-
- uno::Reference<beans::XPropertySet> xPropertySet(xTextContent, uno::UNO_QUERY);
- // we need to re-set this value to xTextContent, then only values are preserved.
- xPropertySet->setPropertyValue("FrameInteropGrabBag",uno::makeAny(aGrabBag));
- }
- else if (nAnchorType == text::TextContentAnchorType_AS_CHARACTER)
- {
- // Fix spacing for as-character objects. If the paragraph has CT_Spacing_after set,
- // it needs to be set on the object too, as that's what object placement code uses.
- PropertyMapPtr paragraphContext = GetTopContextOfType( CONTEXT_PARAGRAPH );
- std::optional<PropertyMap::Property> aPropMargin = paragraphContext->getProperty(PROP_PARA_BOTTOM_MARGIN);
- if(aPropMargin)
- xProps->setPropertyValue( getPropertyName( PROP_BOTTOM_MARGIN ), aPropMargin->second );
- }
- else
- {
- uno::Reference<beans::XPropertySet> xShapePropertySet(xShape, uno::UNO_QUERY);
- uno::Sequence<beans::PropertyValue> aGrabBag;
- xShapePropertySet->getPropertyValue("InteropGrabBag") >>= aGrabBag;
- for (const auto& rProp : std::as_const(aGrabBag))
- {
- if (rProp.Name == "VML-Z-ORDER")
- {
- GraphicZOrderHelper* pZOrderHelper = m_rDMapper.graphicZOrderHelper();
- sal_Int32 zOrder(0);
- rProp.Value >>= zOrder;
- xShapePropertySet->setPropertyValue( "ZOrder", uno::makeAny(pZOrderHelper->findZOrder(zOrder)));
- pZOrderHelper->addItem(xShapePropertySet, zOrder);
- xShapePropertySet->setPropertyValue(getPropertyName( PROP_OPAQUE ), uno::makeAny( zOrder >= 0 ) );
- checkZOrderStatus = true;
- }
- else if ( rProp.Name == "TxbxHasLink" )
- {
- //Chaining of textboxes will happen in ~DomainMapper_Impl
- //i.e when all the textboxes are read and all its attributes
- //have been set ( basically the Name/LinkedDisplayName )
- //which is set in Graphic Import.
- m_vTextFramesForChaining.push_back(xShape);
- }
- }
-
- if(IsSdtEndBefore())
- {
- uno::Reference< beans::XPropertySetInfo > xPropSetInfo;
- if(xShapePropertySet.is())
- {
- xPropSetInfo = xShapePropertySet->getPropertySetInfo();
- if (xPropSetInfo.is() && xPropSetInfo->hasPropertyByName("InteropGrabBag"))
- {
- uno::Sequence<beans::PropertyValue> aShapeGrabBag( comphelper::InitPropertySequence({
- { "SdtEndBefore", uno::Any(true) }
- }));
- xShapePropertySet->setPropertyValue("InteropGrabBag",uno::makeAny(aShapeGrabBag));
- }
- }
- }
- }
- if (!IsInHeaderFooter() && !checkZOrderStatus)
- xProps->setPropertyValue(
- getPropertyName( PROP_OPAQUE ),
- uno::makeAny( true ) );
- }
- m_bParaChanged = true;
- getTableManager().setIsInShape(true);
- }
- catch ( const uno::Exception& )
- {
- TOOLS_WARN_EXCEPTION("writerfilter.dmapper", "Exception when adding shape");
- }
-}
-/*
- * Updating chart height and width after reading the actual values from wp:extent
-*/
-void DomainMapper_Impl::UpdateEmbeddedShapeProps(const uno::Reference< drawing::XShape > & xShape)
-{
- if (!xShape.is())
- return;
-
- uno::Reference<beans::XPropertySet> xEmbeddedProperties(m_xEmbedded, uno::UNO_QUERY_THROW);
- awt::Size aSize = xShape->getSize( );
- xEmbeddedProperties->setPropertyValue(getPropertyName(PROP_WIDTH), uno::makeAny(sal_Int32(aSize.Width)));
- xEmbeddedProperties->setPropertyValue(getPropertyName(PROP_HEIGHT), uno::makeAny(sal_Int32(aSize.Height)));
-}
-
-
-void DomainMapper_Impl::PopShapeContext()
-{
- if (hasTableManager())
- {
- getTableManager().endLevel();
- popTableManager();
- }
- if ( m_aAnchoredStack.empty() )
- return;
-
- // For OLE object replacement shape, the text append context was already removed
- // or the OLE object couldn't be inserted.
- if ( !m_aAnchoredStack.top().bToRemove )
- {
- RemoveLastParagraph();
- if (!m_aTextAppendStack.empty())
- m_aTextAppendStack.pop();
- }
-
- uno::Reference< text::XTextContent > xObj = m_aAnchoredStack.top( ).xTextContent;
- try
- {
- appendTextContent( xObj, uno::Sequence< beans::PropertyValue >() );
- }
- catch ( const uno::RuntimeException& )
- {
- // this is normal: the shape is already attached
- }
-
- const uno::Reference<drawing::XShape> xShape( xObj, uno::UNO_QUERY_THROW );
- // Remove the shape if required (most likely replacement shape for OLE object)
- // or anchored to a discarded header or footer
- if ( m_aAnchoredStack.top().bToRemove || m_bDiscardHeaderFooter )
- {
- try
- {
- uno::Reference<drawing::XDrawPageSupplier> xDrawPageSupplier(m_xTextDocument, uno::UNO_QUERY_THROW);
- uno::Reference<drawing::XDrawPage> xDrawPage = xDrawPageSupplier->getDrawPage();
- if ( xDrawPage.is() )
- xDrawPage->remove( xShape );
- }
- catch( const uno::Exception& )
- {
- }
- }
-
- // Relative width calculations deferred until section's margins are defined.
- // Being cautious: only deferring undefined/minimum-width shapes in order to avoid causing potential regressions
- css::awt::Size aShapeSize;
- try
- {
- aShapeSize = xShape->getSize();
- }
- catch (const css::uno::RuntimeException& e)
- {
- // May happen e.g. when text frame has no frame format
- // See sw/qa/extras/ooxmlimport/data/n779627.docx
- SAL_WARN("writerfilter.dmapper", "getSize failed. " << e.Message);
- }
- if( aShapeSize.Width <= 2 )
- {
- const uno::Reference<beans::XPropertySet> xShapePropertySet( xShape, uno::UNO_QUERY );
- SectionPropertyMap* pSectionContext = GetSectionContext();
- if ( pSectionContext && (!hasTableManager() || !getTableManager().isInTable()) &&
- xShapePropertySet->getPropertySetInfo()->hasPropertyByName(getPropertyName(PROP_RELATIVE_WIDTH)) )
- {
- pSectionContext->addRelativeWidthShape(xShape);
- }
- }
-
- m_aAnchoredStack.pop();
-}
-
-bool DomainMapper_Impl::IsSdtEndBefore()
-{
- bool bIsSdtEndBefore = false;
- PropertyMapPtr pContext = GetTopContextOfType(CONTEXT_CHARACTER);
- if(pContext)
- {
- const uno::Sequence< beans::PropertyValue > currentCharProps = pContext->GetPropertyValues();
- for (const auto& rCurrentCharProp : currentCharProps)
- {
- if (rCurrentCharProp.Name == "CharInteropGrabBag")
- {
- uno::Sequence<beans::PropertyValue> aCharGrabBag;
- rCurrentCharProp.Value >>= aCharGrabBag;
- for (const auto& rProp : std::as_const(aCharGrabBag))
- {
- if(rProp.Name == "SdtEndBefore")
- {
- rProp.Value >>= bIsSdtEndBefore;
- }
- }
- }
- }
- }
- return bIsSdtEndBefore;
-}
-
-bool DomainMapper_Impl::IsDiscardHeaderFooter() const
-{
- return m_bDiscardHeaderFooter;
-}
-
-// called from TableManager::closeCell()
-void DomainMapper_Impl::ClearPreviousParagraph()
-{
- // in table cells, set bottom auto margin of last paragraph to 0, except in paragraphs with numbering
- if ((m_nTableDepth == (m_nTableCellDepth + 1))
- && m_xPreviousParagraph.is()
- && hasTableManager() && getTableManager().isCellLastParaAfterAutospacing())
- {
- uno::Reference<container::XNamed> xPreviousNumberingRules(m_xPreviousParagraph->getPropertyValue("NumberingRules"), uno::UNO_QUERY);
- if ( !xPreviousNumberingRules.is() || xPreviousNumberingRules->getName().isEmpty() )
- m_xPreviousParagraph->setPropertyValue("ParaBottomMargin", uno::makeAny(static_cast<sal_Int32>(0)));
- }
-
- m_xPreviousParagraph.clear();
-
- // next table paragraph will be first paragraph in a cell
- m_bFirstParagraphInCell = true;
-}
-
-void DomainMapper_Impl::HandleAltChunk(const OUString& rStreamName)
-{
- try
- {
- // Create the import filter.
- uno::Reference<lang::XMultiServiceFactory> xMultiServiceFactory(
- comphelper::getProcessServiceFactory());
- uno::Reference<uno::XInterface> xDocxFilter
- = xMultiServiceFactory->createInstance("com.sun.star.comp.Writer.WriterFilter");
-
- // Set the target document.
- uno::Reference<document::XImporter> xImporter(xDocxFilter, uno::UNO_QUERY);
- xImporter->setTargetDocument(m_xTextDocument);
-
- // Set the import parameters.
- uno::Reference<embed::XHierarchicalStorageAccess> xStorageAccess(m_xDocumentStorage,
- uno::UNO_QUERY);
- if (!xStorageAccess.is())
- {
- return;
- }
- // Turn the ZIP stream into a seekable one, as the importer only works with such streams.
- uno::Reference<io::XStream> xStream = xStorageAccess->openStreamElementByHierarchicalName(
- rStreamName, embed::ElementModes::READ);
- std::unique_ptr<SvStream> pStream = utl::UcbStreamHelper::CreateStream(xStream, true);
- SvMemoryStream aMemory;
- aMemory.WriteStream(*pStream);
- uno::Reference<io::XStream> xInputStream = new utl::OStreamWrapper(aMemory);
- // Not handling AltChunk during paste for now.
- uno::Reference<text::XTextRange> xInsertTextRange = GetCurrentXText()->getEnd();
- uno::Reference<text::XTextRange> xSectionStartingRange;
- SectionPropertyMap* pSectionContext = GetSectionContext();
- if (pSectionContext)
- {
- xSectionStartingRange = pSectionContext->GetStartingRange();
- }
- uno::Sequence<beans::PropertyValue> aDescriptor(comphelper::InitPropertySequence({
- { "InputStream", uno::Any(xInputStream) },
- { "InsertMode", uno::Any(true) },
- { "TextInsertModeRange", uno::Any(xInsertTextRange) },
- { "AltChunkMode", uno::Any(true) },
- { "AltChunkStartingRange", uno::Any(xSectionStartingRange) },
- }));
-
- // Do the actual import.
- uno::Reference<document::XFilter> xFilter(xDocxFilter, uno::UNO_QUERY);
- xFilter->filter(aDescriptor);
- }
- catch (const uno::Exception& rException)
- {
- SAL_WARN("writerfilter", "DomainMapper_Impl::HandleAltChunk: failed to handle alt chunk: "
- << rException.Message);
- }
-}
-
-static sal_Int16 lcl_ParseNumberingType( const OUString& rCommand )
-{
- sal_Int16 nRet = style::NumberingType::PAGE_DESCRIPTOR;
-
- // The command looks like: " PAGE \* Arabic "
- // tdf#132185: but may as well be "PAGE \* Arabic"
- OUString sNumber;
- constexpr OUStringLiteral rSeparator(u"\\* ");
- if (sal_Int32 nStartIndex = rCommand.indexOf(rSeparator); nStartIndex >= 0)
- {
- nStartIndex += rSeparator.getLength();
- sNumber = rCommand.getToken(0, ' ', nStartIndex);
- }
-
- if( !sNumber.isEmpty() )
- {
- //todo: might make sense to hash this list, too
- struct NumberingPairs
- {
- const char* cWordName;
- sal_Int16 nType;
- };
- static const NumberingPairs aNumberingPairs[] =
- {
- {"Arabic", style::NumberingType::ARABIC}
- ,{"ROMAN", style::NumberingType::ROMAN_UPPER}
- ,{"roman", style::NumberingType::ROMAN_LOWER}
- ,{"ALPHABETIC", style::NumberingType::CHARS_UPPER_LETTER}
- ,{"alphabetic", style::NumberingType::CHARS_LOWER_LETTER}
- ,{"CircleNum", style::NumberingType::CIRCLE_NUMBER}
- ,{"ThaiArabic", style::NumberingType::CHARS_THAI}
- ,{"ThaiCardText", style::NumberingType::CHARS_THAI}
- ,{"ThaiLetter", style::NumberingType::CHARS_THAI}
-// ,{"SBCHAR", style::NumberingType::}
-// ,{"DBCHAR", style::NumberingType::}
-// ,{"DBNUM1", style::NumberingType::}
-// ,{"DBNUM2", style::NumberingType::}
-// ,{"DBNUM3", style::NumberingType::}
-// ,{"DBNUM4", style::NumberingType::}
- ,{"Aiueo", style::NumberingType::AIU_FULLWIDTH_JA}
- ,{"Iroha", style::NumberingType::IROHA_FULLWIDTH_JA}
-// ,{"ZODIAC1", style::NumberingType::}
-// ,{"ZODIAC2", style::NumberingType::}
-// ,{"ZODIAC3", style::NumberingType::}
-// ,{"CHINESENUM1", style::NumberingType::}
-// ,{"CHINESENUM2", style::NumberingType::}
-// ,{"CHINESENUM3", style::NumberingType::}
- ,{"ArabicAlpha", style::NumberingType::CHARS_ARABIC}
- ,{"ArabicAbjad", style::NumberingType::FULLWIDTH_ARABIC}
-/* possible values:
-style::NumberingType::
-
- CHARS_UPPER_LETTER_N
- CHARS_LOWER_LETTER_N
- TRANSLITERATION
- NATIVE_NUMBERING
- CIRCLE_NUMBER
- NUMBER_LOWER_ZH
- NUMBER_UPPER_ZH
- NUMBER_UPPER_ZH_TW
- TIAN_GAN_ZH
- DI_ZI_ZH
- NUMBER_TRADITIONAL_JA
- AIU_HALFWIDTH_JA
- IROHA_HALFWIDTH_JA
- NUMBER_UPPER_KO
- NUMBER_HANGUL_KO
- HANGUL_JAMO_KO
- HANGUL_SYLLABLE_KO
- HANGUL_CIRCLED_JAMO_KO
- HANGUL_CIRCLED_SYLLABLE_KO
- CHARS_HEBREW
- CHARS_NEPALI
- CHARS_KHMER
- CHARS_LAO
- CHARS_TIBETAN
- CHARS_CYRILLIC_UPPER_LETTER_BG
- CHARS_CYRILLIC_LOWER_LETTER_BG
- CHARS_CYRILLIC_UPPER_LETTER_N_BG
- CHARS_CYRILLIC_LOWER_LETTER_N_BG
- CHARS_CYRILLIC_UPPER_LETTER_RU
- CHARS_CYRILLIC_LOWER_LETTER_RU
- CHARS_CYRILLIC_UPPER_LETTER_N_RU
- CHARS_CYRILLIC_LOWER_LETTER_N_RU
- CHARS_CYRILLIC_UPPER_LETTER_SR
- CHARS_CYRILLIC_LOWER_LETTER_SR
- CHARS_CYRILLIC_UPPER_LETTER_N_SR
- CHARS_CYRILLIC_LOWER_LETTER_N_SR*/
-
- };
- for(const NumberingPairs& rNumberingPair : aNumberingPairs)
- {
- if( /*sCommand*/sNumber.equalsAscii(rNumberingPair.cWordName ))
- {
- nRet = rNumberingPair.nType;
- break;
- }
- }
-
- }
- return nRet;
-}
-
-
-static OUString lcl_ParseFormat( const OUString& rCommand )
-{
- // The command looks like: " DATE \@"dd MMMM yyyy" or "09/02/2014"
- // Remove whitespace permitted by standard between \@ and "
- OUString command;
- sal_Int32 delimPos = rCommand.indexOf("\\@");
- if (delimPos != -1)
- {
- sal_Int32 wsChars = rCommand.indexOf('\"') - delimPos - 2;
- command = rCommand.replaceAt(delimPos+2, wsChars, "");
- }
- else
- command = rCommand;
-
- return msfilter::util::findQuotedText(command, "\\@\"", '\"');
-}
-/*-------------------------------------------------------------------------
-extract a parameter (with or without quotes) between the command and the following backslash
- -----------------------------------------------------------------------*/
-static OUString lcl_ExtractToken(OUString const& rCommand,
- sal_Int32 & rIndex, bool & rHaveToken, bool & rIsSwitch)
-{
- rHaveToken = false;
- rIsSwitch = false;
-
- OUStringBuffer token;
- bool bQuoted(false);
- for (; rIndex < rCommand.getLength(); ++rIndex)
- {
- sal_Unicode const currentChar(rCommand[rIndex]);
- switch (currentChar)
- {
- case '\\':
- {
- if (rIndex == rCommand.getLength() - 1)
- {
- SAL_INFO("writerfilter.dmapper", "field: trailing escape");
- ++rIndex;
- return OUString();
- }
- sal_Unicode const nextChar(rCommand[rIndex+1]);
- if (bQuoted || '\\' == nextChar)
- {
- ++rIndex; // read 2 chars
- token.append(nextChar);
- }
- else // field switch (case insensitive)
- {
- rHaveToken = true;
- if (token.isEmpty())
- {
- rIsSwitch = true;
- rIndex += 2; // read 2 chars
- return rCommand.copy(rIndex - 2, 2).toAsciiUpperCase();
- }
- else
- { // leave rIndex, read it again next time
- return token.makeStringAndClear();
- }
- }
- }
- break;
- case '\"':
- if (bQuoted || !token.isEmpty())
- {
- rHaveToken = true;
- if (bQuoted)
- {
- ++rIndex;
- }
- return token.makeStringAndClear();
- }
- else
- {
- bQuoted = true;
- }
- break;
- case ' ':
- if (bQuoted)
- {
- token.append(' ');
- }
- else
- {
- if (!token.isEmpty())
- {
- rHaveToken = true;
- ++rIndex;
- return token.makeStringAndClear();
- }
- }
- break;
- case '=':
- if (token.isEmpty())
- {
- rHaveToken = true;
- ++rIndex;
- return "FORMULA";
- }
- else
- token.append('=');
- break;
- default:
- token.append(currentChar);
- break;
- }
- }
- assert(rIndex == rCommand.getLength());
- if (bQuoted)
- {
- // MS Word allows this, so just emit a debug message
- SAL_INFO("writerfilter.dmapper",
- "field argument with unterminated quote");
- }
- rHaveToken = !token.isEmpty();
- return token.makeStringAndClear();
-}
-
-std::tuple<OUString, std::vector<OUString>, std::vector<OUString> > splitFieldCommand(const OUString& rCommand)
-{
- OUString sType;
- std::vector<OUString> arguments;
- std::vector<OUString> switches;
- sal_Int32 nStartIndex(0);
- // tdf#54584: Field may be prepended by a backslash
- // This is not an escapement, but already escaped literal "\"
- // MS Word allows this, so just skip it
- if ((rCommand.getLength() >= nStartIndex + 2) &&
- (rCommand[nStartIndex] == L'\\') &&
- (rCommand[nStartIndex + 1] != L'\\') &&
- (rCommand[nStartIndex + 1] != L' '))
- {
- ++nStartIndex;
- }
-
- do
- {
- bool bHaveToken;
- bool bIsSwitch;
- OUString const token =
- lcl_ExtractToken(rCommand, nStartIndex, bHaveToken, bIsSwitch);
- assert(nStartIndex <= rCommand.getLength());
- if (bHaveToken)
- {
- if (sType.isEmpty())
- {
- sType = token.toAsciiUpperCase();
- }
- else if (bIsSwitch || !switches.empty())
- {
- switches.push_back(token);
- }
- else
- {
- arguments.push_back(token);
- }
- }
- } while (nStartIndex < rCommand.getLength());
-
- return std::make_tuple(sType, arguments, switches);
-}
-
-static OUString lcl_ExtractVariableAndHint( const OUString& rCommand, OUString& rHint )
-{
- // the first word after "ASK " is the variable
- // the text after the variable and before a '\' is the hint
- // if no hint is set the variable is used as hint
- // the quotes of the hint have to be removed
- sal_Int32 nIndex = rCommand.indexOf( ' ', 2); //find last space after 'ASK'
- if (nIndex == -1)
- return OUString();
- while(rCommand[nIndex] == ' ')
- ++nIndex;
- OUString sShortCommand( rCommand.copy( nIndex ) ); //cut off the " ASK "
-
- sShortCommand = sShortCommand.getToken(0, '\\');
- nIndex = 0;
- OUString sRet = sShortCommand.getToken( 0, ' ', nIndex);
- if( nIndex > 0)
- rHint = sShortCommand.copy( nIndex );
- if( rHint.isEmpty() )
- rHint = sRet;
- return sRet;
-}
-
-
-static bool lcl_FindInCommand(
- const OUString& rCommand,
- sal_Unicode cSwitch,
- OUString& rValue )
-{
- bool bRet = false;
- OUString sSearch = "\\" + OUStringChar( cSwitch );
- sal_Int32 nIndex = rCommand.indexOf( sSearch );
- if( nIndex >= 0 )
- {
- bRet = true;
- //find next '\' or end of string
- sal_Int32 nEndIndex = rCommand.indexOf( '\\', nIndex + 1);
- if( nEndIndex < 0 )
- nEndIndex = rCommand.getLength() ;
- if( nEndIndex - nIndex > 3 )
- rValue = rCommand.copy( nIndex + 3, nEndIndex - nIndex - 3);
- }
- return bRet;
-}
-
-
-void DomainMapper_Impl::GetCurrentLocale(lang::Locale& rLocale)
-{
- PropertyMapPtr pTopContext = GetTopContext();
- std::optional<PropertyMap::Property> pLocale = pTopContext->getProperty(PROP_CHAR_LOCALE);
- if( pLocale )
- pLocale->second >>= rLocale;
- else
- {
- PropertyMapPtr pParaContext = GetTopContextOfType(CONTEXT_PARAGRAPH);
- pLocale = pParaContext->getProperty(PROP_CHAR_LOCALE);
- if( pLocale )
- {
- pLocale->second >>= rLocale;
- }
- }
-}
-
-/*-------------------------------------------------------------------------
- extract the number format from the command and apply the resulting number
- format to the XPropertySet
- -----------------------------------------------------------------------*/
-void DomainMapper_Impl::SetNumberFormat( const OUString& rCommand,
- uno::Reference< beans::XPropertySet > const& xPropertySet,
- bool const bDetectFormat)
-{
- OUString sFormatString = lcl_ParseFormat( rCommand );
- // find \h - hijri/luna calendar todo: what about saka/era calendar?
- bool bHijri = 0 < rCommand.indexOf("\\h ");
- lang::Locale aUSLocale;
- aUSLocale.Language = "en";
- aUSLocale.Country = "US";
-
- //determine current locale - todo: is it necessary to initialize this locale?
- lang::Locale aCurrentLocale = aUSLocale;
- GetCurrentLocale( aCurrentLocale );
- OUString sFormat = ConversionHelper::ConvertMSFormatStringToSO( sFormatString, aCurrentLocale, bHijri);
- //get the number formatter and convert the string to a format value
- try
- {
- sal_Int32 nKey = 0;
- uno::Reference< util::XNumberFormatsSupplier > xNumberSupplier( m_xTextDocument, uno::UNO_QUERY_THROW );
- if( bDetectFormat )
- {
- uno::Reference< util::XNumberFormatter> xFormatter(util::NumberFormatter::create(m_xComponentContext), uno::UNO_QUERY_THROW);
- xFormatter->attachNumberFormatsSupplier( xNumberSupplier );
- nKey = xFormatter->detectNumberFormat( 0, rCommand );
- }
- else
- {
- nKey = xNumberSupplier->getNumberFormats()->addNewConverted( sFormat, aUSLocale, aCurrentLocale );
- }
- xPropertySet->setPropertyValue(
- getPropertyName(PROP_NUMBER_FORMAT),
- uno::makeAny( nKey ));
- }
- catch(const uno::Exception&)
- {
- }
-}
-
-static uno::Any lcl_getGrabBagValue( const uno::Sequence<beans::PropertyValue>& grabBag, OUString const & name )
-{
- auto pProp = std::find_if(grabBag.begin(), grabBag.end(),
- [&name](const beans::PropertyValue& rProp) { return rProp.Name == name; });
- if (pProp != grabBag.end())
- return pProp->Value;
- return uno::Any();
-}
-
-//Link the text frames.
-void DomainMapper_Impl::ChainTextFrames()
-{
- //can't link textboxes if there are not even two of them...
- if( 2 > m_vTextFramesForChaining.size() )
- return ;
-
- struct TextFramesForChaining {
- css::uno::Reference< css::drawing::XShape > xShape;
- sal_Int32 nId;
- sal_Int32 nSeq;
- OUString s_mso_next_textbox;
- bool bShapeNameSet;
- TextFramesForChaining(): nId(0), nSeq(0), bShapeNameSet(false) {}
- } ;
- typedef std::map <OUString, TextFramesForChaining> ChainMap;
-
- try
- {
- ChainMap aTextFramesForChainingHelper;
- OUString sChainNextName("ChainNextName");
-
- //learn about ALL of the textboxes and their chaining values first - because frames are processed in no specific order.
- for( const auto& rTextFrame : m_vTextFramesForChaining )
- {
- uno::Reference<text::XTextContent> xTextContent(rTextFrame, uno::UNO_QUERY_THROW);
- uno::Reference<beans::XPropertySet> xPropertySet(xTextContent, uno::UNO_QUERY);
- uno::Reference<beans::XPropertySetInfo> xPropertySetInfo;
- if( xPropertySet.is() )
- xPropertySetInfo = xPropertySet->getPropertySetInfo();
- uno::Sequence<beans::PropertyValue> aGrabBag;
- uno::Reference<lang::XServiceInfo> xServiceInfo(xPropertySet, uno::UNO_QUERY);
-
- TextFramesForChaining aChainStruct;
- OUString sShapeName;
- OUString sLinkChainName;
-
- //The chaining name and the shape name CAN be different in .docx.
- //MUST use LinkDisplayName/ChainName as the shape name for establishing links.
- if ( xServiceInfo->supportsService("com.sun.star.text.TextFrame") )
- {
- xPropertySet->getPropertyValue("FrameInteropGrabBag") >>= aGrabBag;
- xPropertySet->getPropertyValue("LinkDisplayName") >>= sShapeName;
- }
- else
- {
- xPropertySet->getPropertyValue("InteropGrabBag") >>= aGrabBag;
- xPropertySet->getPropertyValue("ChainName") >>= sShapeName;
- }
-
- lcl_getGrabBagValue( aGrabBag, "Txbx-Id") >>= aChainStruct.nId;
- lcl_getGrabBagValue( aGrabBag, "Txbx-Seq") >>= aChainStruct.nSeq;
- lcl_getGrabBagValue( aGrabBag, "LinkChainName") >>= sLinkChainName;
- lcl_getGrabBagValue( aGrabBag, "mso-next-textbox") >>= aChainStruct.s_mso_next_textbox;
-
- //Sometimes the shape names have not been imported. If not, we may have a fallback name.
- //Set name later, only if required for linking.
- if( sShapeName.isEmpty() )
- aChainStruct.bShapeNameSet = false;
- else
- {
- aChainStruct.bShapeNameSet = true;
- sLinkChainName = sShapeName;
- }
-
- if( !sLinkChainName.isEmpty() )
- {
- aChainStruct.xShape = rTextFrame;
- aTextFramesForChainingHelper[sLinkChainName] = aChainStruct;
- }
- }
-
- //if mso-next-textbox tags are provided, create those vml-style links first. Afterwards we will make dml-style id/seq links.
- for (auto& msoItem : aTextFramesForChainingHelper)
- {
- //if no mso-next-textbox, we are done.
- //if it points to itself, we are done.
- if( !msoItem.second.s_mso_next_textbox.isEmpty()
- && msoItem.second.s_mso_next_textbox != msoItem.first )
- {
- ChainMap::iterator nextFinder=aTextFramesForChainingHelper.find(msoItem.second.s_mso_next_textbox);
- if( nextFinder != aTextFramesForChainingHelper.end() )
- {
- //if the frames have no name yet, then set them. LinkDisplayName / ChainName are read-only.
- if( !msoItem.second.bShapeNameSet )
- {
- uno::Reference< container::XNamed > xNamed( msoItem.second.xShape, uno::UNO_QUERY );
- if ( xNamed.is() )
- {
- xNamed->setName( msoItem.first );
- msoItem.second.bShapeNameSet = true;
- }
- }
- if( !nextFinder->second.bShapeNameSet )
- {
- uno::Reference< container::XNamed > xNamed( nextFinder->second.xShape, uno::UNO_QUERY );
- if ( xNamed.is() )
- {
- xNamed->setName( nextFinder->first );
- nextFinder->second.bShapeNameSet = true;
- }
- }
-
- uno::Reference<text::XTextContent> xTextContent(msoItem.second.xShape, uno::UNO_QUERY_THROW);
- uno::Reference<beans::XPropertySet> xPropertySet(xTextContent, uno::UNO_QUERY);
-
- //The reverse chaining happens automatically, so only one direction needs to be set
- xPropertySet->setPropertyValue(sChainNextName, uno::makeAny(nextFinder->first));
-
- //the last item in an mso-next-textbox chain is indistinguishable from id/seq items. Now that it is handled, remove it.
- if( nextFinder->second.s_mso_next_textbox.isEmpty() )
- aTextFramesForChainingHelper.erase(nextFinder->first);
- }
- }
- }
-
- //TODO: Perhaps allow reverse sequences when mso-layout-flow-alt = "bottom-to-top"
- const sal_Int32 nDirection = 1;
-
- //Finally - go through and attach the chains based on matching ID and incremented sequence number (dml-style).
- for (const auto& rOuter : aTextFramesForChainingHelper)
- {
- if( rOuter.second.s_mso_next_textbox.isEmpty() ) //non-empty ones already handled earlier - so skipping them now.
- {
- for (const auto& rInner : aTextFramesForChainingHelper)
- {
- if ( rInner.second.nId == rOuter.second.nId )
- {
- if ( rInner.second.nSeq == ( rOuter.second.nSeq + nDirection ) )
- {
- uno::Reference<text::XTextContent> xTextContent(rOuter.second.xShape, uno::UNO_QUERY_THROW);
- uno::Reference<beans::XPropertySet> xPropertySet(xTextContent, uno::UNO_QUERY);
-
- //The reverse chaining happens automatically, so only one direction needs to be set
- xPropertySet->setPropertyValue(sChainNextName, uno::makeAny(rInner.first));
- break ; //there cannot be more than one next frame
- }
- }
- }
- }
- }
- m_vTextFramesForChaining.clear(); //clear the vector
- }
- catch (const uno::Exception&)
- {
- DBG_UNHANDLED_EXCEPTION("writerfilter.dmapper");
- }
-}
-
-uno::Reference<beans::XPropertySet> DomainMapper_Impl::FindOrCreateFieldMaster(const char* pFieldMasterService, const OUString& rFieldMasterName)
-{
- // query master, create if not available
- uno::Reference< text::XTextFieldsSupplier > xFieldsSupplier( GetTextDocument(), uno::UNO_QUERY_THROW );
- uno::Reference< container::XNameAccess > xFieldMasterAccess = xFieldsSupplier->getTextFieldMasters();
- uno::Reference< beans::XPropertySet > xMaster;
- OUString sFieldMasterService( OUString::createFromAscii(pFieldMasterService) );
- OUStringBuffer aFieldMasterName;
- OUString sDatabaseDataSourceName = GetSettingsTable()->GetCurrentDatabaseDataSource();
- bool bIsMergeField = sFieldMasterService.endsWith("Database");
- aFieldMasterName.appendAscii( pFieldMasterService );
- aFieldMasterName.append('.');
- if ( bIsMergeField && !sDatabaseDataSourceName.isEmpty() )
- {
- aFieldMasterName.append(sDatabaseDataSourceName);
- aFieldMasterName.append('.');
- }
- aFieldMasterName.append(rFieldMasterName);
- OUString sFieldMasterName = aFieldMasterName.makeStringAndClear();
- if(xFieldMasterAccess->hasByName(sFieldMasterName))
- {
- //get the master
- xMaster.set(xFieldMasterAccess->getByName(sFieldMasterName), uno::UNO_QUERY_THROW);
- }
- else if( m_xTextFactory.is() )
- {
- //create the master
- xMaster.set( m_xTextFactory->createInstance(sFieldMasterService), uno::UNO_QUERY_THROW);
- if ( !bIsMergeField || sDatabaseDataSourceName.isEmpty() )
- {
- //set the master's name
- xMaster->setPropertyValue(
- getPropertyName(PROP_NAME),
- uno::makeAny(rFieldMasterName));
- } else {
- // set database data, based on the "databasename.tablename" of sDatabaseDataSourceName
- xMaster->setPropertyValue(
- getPropertyName(PROP_DATABASE_NAME),
- uno::makeAny(sDatabaseDataSourceName.copy(0, sDatabaseDataSourceName.indexOf('.'))));
- xMaster->setPropertyValue(
- getPropertyName(PROP_COMMAND_TYPE),
- uno::makeAny(sal_Int32(0)));
- xMaster->setPropertyValue(
- getPropertyName(PROP_DATATABLE_NAME),
- uno::makeAny(sDatabaseDataSourceName.copy(sDatabaseDataSourceName.indexOf('.') + 1)));
- xMaster->setPropertyValue(
- getPropertyName(PROP_DATACOLUMN_NAME),
- uno::makeAny(rFieldMasterName));
- }
- }
- return xMaster;
-}
-
-void DomainMapper_Impl::PushFieldContext()
-{
- m_bParaHadField = true;
- if(m_bDiscardHeaderFooter)
- return;
-#ifdef DBG_UTIL
- TagLogger::getInstance().element("pushFieldContext");
-#endif
-
- uno::Reference<text::XTextCursor> xCrsr;
- if (!m_aTextAppendStack.empty())
- {
- uno::Reference<text::XTextAppend> xTextAppend = m_aTextAppendStack.top().xTextAppend;
- if (xTextAppend.is())
- xCrsr = xTextAppend->createTextCursorByRange(
- m_aTextAppendStack.top().xInsertPosition.is()
- ? m_aTextAppendStack.top().xInsertPosition
- : xTextAppend->getEnd());
- }
-
- uno::Reference< text::XTextRange > xStart;
- if (xCrsr.is())
- xStart = xCrsr->getStart();
- m_aFieldStack.push_back(new FieldContext(xStart));
-}
-/*-------------------------------------------------------------------------
-//the current field context waits for the completion of the command
- -----------------------------------------------------------------------*/
-bool DomainMapper_Impl::IsOpenFieldCommand() const
-{
- return !m_aFieldStack.empty() && !m_aFieldStack.back()->IsCommandCompleted();
-}
-/*-------------------------------------------------------------------------
-//the current field context waits for the completion of the command
- -----------------------------------------------------------------------*/
-bool DomainMapper_Impl::IsOpenField() const
-{
- return !m_aFieldStack.empty();
-}
-
-// Mark top field context as containing a fixed field
-void DomainMapper_Impl::SetFieldLocked()
-{
- if (IsOpenField())
- m_aFieldStack.back()->SetFieldLocked();
-}
-
-HeaderFooterContext::HeaderFooterContext(bool bTextInserted, sal_Int32 nTableDepth)
- : m_bTextInserted(bTextInserted)
- , m_nTableDepth(nTableDepth)
-{
-}
-
-bool HeaderFooterContext::getTextInserted() const
-{
- return m_bTextInserted;
-}
-
-sal_Int32 HeaderFooterContext::getTableDepth() const { return m_nTableDepth; }
-
-FieldContext::FieldContext(uno::Reference< text::XTextRange > const& xStart)
- : m_bFieldCommandCompleted(false)
- , m_xStartRange( xStart )
- , m_bFieldLocked( false )
-{
- m_pProperties = new PropertyMap();
-}
-
-
-FieldContext::~FieldContext()
-{
-}
-
-void FieldContext::SetTextField(uno::Reference<text::XTextField> const& xTextField)
-{
-#ifndef NDEBUG
- if (xTextField.is())
- {
- uno::Reference<lang::XServiceInfo> const xServiceInfo(xTextField, uno::UNO_QUERY);
- assert(xServiceInfo.is());
- // those must be set by SetFormField()
- assert(!xServiceInfo->supportsService("com.sun.star.text.Fieldmark")
- && !xServiceInfo->supportsService("com.sun.star.text.FormFieldmark"));
- }
-#endif
- m_xTextField = xTextField;
-}
-
-void FieldContext::AppendCommand(std::u16string_view rPart)
-{
- m_sCommand += rPart;
-}
-
-::std::vector<OUString> FieldContext::GetCommandParts() const
-{
- ::std::vector<OUString> aResult;
- sal_Int32 nIndex = 0;
- bool bInString = false;
- OUString sPart;
- while (nIndex != -1)
- {
- OUString sToken = GetCommand().getToken(0, ' ', nIndex);
- bool bInStringNext = bInString;
-
- if (sToken.isEmpty())
- continue;
-
- if (sToken[0] == '"')
- {
- bInStringNext = true;
- sToken = sToken.copy(1);
- }
- if (sToken.endsWith("\""))
- {
- bInStringNext = false;
- sToken = sToken.copy(0, sToken.getLength() - 1);
- }
-
- if (bInString)
- {
- sPart += " " + sToken;
- if (!bInStringNext)
- {
- aResult.push_back(sPart);
- }
- }
- else
- {
- if (bInStringNext)
- {
- sPart = sToken;
- }
- else
- {
- aResult.push_back(sToken);
- }
- }
-
- bInString = bInStringNext;
- }
-
- return aResult;
-}
-
-/*-------------------------------------------------------------------------
-//collect the pieces of the command
- -----------------------------------------------------------------------*/
-void DomainMapper_Impl::AppendFieldCommand(OUString const & rPartOfCommand)
-{
-#ifdef DBG_UTIL
- TagLogger::getInstance().startElement("appendFieldCommand");
- TagLogger::getInstance().chars(rPartOfCommand);
- TagLogger::getInstance().endElement();
-#endif
-
- FieldContextPtr pContext = m_aFieldStack.back();
- OSL_ENSURE( pContext, "no field context available");
- if( pContext )
- {
- pContext->AppendCommand( rPartOfCommand );
- }
-}
-
-
-typedef std::multimap < sal_Int32, OUString > TOCStyleMap;
-
-
-static ww::eField GetWW8FieldId(OUString const& rType)
-{
- std::unordered_map<OUString, ww::eField> mapID
- {
- {"ADDRESSBLOCK", ww::eADDRESSBLOCK},
- {"ADVANCE", ww::eADVANCE},
- {"ASK", ww::eASK},
- {"AUTONUM", ww::eAUTONUM},
- {"AUTONUMLGL", ww::eAUTONUMLGL},
- {"AUTONUMOUT", ww::eAUTONUMOUT},
- {"AUTOTEXT", ww::eAUTOTEXT},
- {"AUTOTEXTLIST", ww::eAUTOTEXTLIST},
- {"AUTHOR", ww::eAUTHOR},
- {"BARCODE", ww::eBARCODE},
- {"BIDIOUTLINE", ww::eBIDIOUTLINE},
- {"DATE", ww::eDATE},
- {"COMMENTS", ww::eCOMMENTS},
- {"COMPARE", ww::eCOMPARE},
- {"CONTROL", ww::eCONTROL},
- {"CREATEDATE", ww::eCREATEDATE},
- {"DATABASE", ww::eDATABASE},
- {"DDEAUTOREF", ww::eDDEAUTOREF},
- {"DDEREF", ww::eDDEREF},
- {"DOCPROPERTY", ww::eDOCPROPERTY},
- {"DOCVARIABLE", ww::eDOCVARIABLE},
- {"EDITTIME", ww::eEDITTIME},
- {"EMBED", ww::eEMBED},
- {"EQ", ww::eEQ},
- {"FILLIN", ww::eFILLIN},
- {"FILENAME", ww::eFILENAME},
- {"FILESIZE", ww::eFILESIZE},
- {"FOOTREF", ww::eFOOTREF},
-// {"FORMULA", ww::},
- {"FORMCHECKBOX", ww::eFORMCHECKBOX},
- {"FORMDROPDOWN", ww::eFORMDROPDOWN},
- {"FORMTEXT", ww::eFORMTEXT},
- {"GLOSSREF", ww::eGLOSSREF},
- {"GOTOBUTTON", ww::eGOTOBUTTON},
- {"GREETINGLINE", ww::eGREETINGLINE},
- {"HTMLCONTROL", ww::eHTMLCONTROL},
- {"HYPERLINK", ww::eHYPERLINK},
- {"IF", ww::eIF},
- {"INFO", ww::eINFO},
- {"INCLUDEPICTURE", ww::eINCLUDEPICTURE},
- {"INCLUDETEXT", ww::eINCLUDETEXT},
- {"INCLUDETIFF", ww::eINCLUDETIFF},
- {"KEYWORDS", ww::eKEYWORDS},
- {"LASTSAVEDBY", ww::eLASTSAVEDBY},
- {"LINK", ww::eLINK},
- {"LISTNUM", ww::eLISTNUM},
- {"MACRO", ww::eMACRO},
- {"MACROBUTTON", ww::eMACROBUTTON},
- {"MERGEDATA", ww::eMERGEDATA},
- {"MERGEFIELD", ww::eMERGEFIELD},
- {"MERGEINC", ww::eMERGEINC},
- {"MERGEREC", ww::eMERGEREC},
- {"MERGESEQ", ww::eMERGESEQ},
- {"NEXT", ww::eNEXT},
- {"NEXTIF", ww::eNEXTIF},
- {"NOTEREF", ww::eNOTEREF},
- {"PAGE", ww::ePAGE},
- {"PAGEREF", ww::ePAGEREF},
- {"PLUGIN", ww::ePLUGIN},
- {"PRINT", ww::ePRINT},
- {"PRINTDATE", ww::ePRINTDATE},
- {"PRIVATE", ww::ePRIVATE},
- {"QUOTE", ww::eQUOTE},
- {"RD", ww::eRD},
- {"REF", ww::eREF},
- {"REVNUM", ww::eREVNUM},
- {"SAVEDATE", ww::eSAVEDATE},
- {"SECTION", ww::eSECTION},
- {"SECTIONPAGES", ww::eSECTIONPAGES},
- {"SEQ", ww::eSEQ},
- {"SET", ww::eSET},
- {"SKIPIF", ww::eSKIPIF},
- {"STYLEREF", ww::eSTYLEREF},
- {"SUBSCRIBER", ww::eSUBSCRIBER},
- {"SUBJECT", ww::eSUBJECT},
- {"SYMBOL", ww::eSYMBOL},
- {"TA", ww::eTA},
- {"TEMPLATE", ww::eTEMPLATE},
- {"TIME", ww::eTIME},
- {"TITLE", ww::eTITLE},
- {"TOA", ww::eTOA},
- {"USERINITIALS", ww::eUSERINITIALS},
- {"USERADDRESS", ww::eUSERADDRESS},
- {"USERNAME", ww::eUSERNAME},
-
- {"TOC", ww::eTOC},
- {"TC", ww::eTC},
- {"NUMCHARS", ww::eNUMCHARS},
- {"NUMWORDS", ww::eNUMWORDS},
- {"NUMPAGES", ww::eNUMPAGES},
- {"INDEX", ww::eINDEX},
- {"XE", ww::eXE},
- {"BIBLIOGRAPHY", ww::eBIBLIOGRAPHY},
- {"CITATION", ww::eCITATION},
- };
- auto const it = mapID.find(rType);
- return (it == mapID.end()) ? ww::eNONE : it->second;
-}
-
-static const FieldConversionMap_t & lcl_GetFieldConversion()
-{
- static const FieldConversionMap_t aFieldConversionMap
- {
-// {"ADDRESSBLOCK", {"", FIELD_ADDRESSBLOCK }},
-// {"ADVANCE", {"", FIELD_ADVANCE }},
- {"ASK", {"SetExpression", FIELD_ASK }},
- {"AUTONUM", {"SetExpression", FIELD_AUTONUM }},
- {"AUTONUMLGL", {"SetExpression", FIELD_AUTONUMLGL }},
- {"AUTONUMOUT", {"SetExpression", FIELD_AUTONUMOUT }},
- {"AUTHOR", {"DocInfo.CreateAuthor", FIELD_AUTHOR }},
- {"DATE", {"DateTime", FIELD_DATE }},
- {"COMMENTS", {"DocInfo.Description", FIELD_COMMENTS }},
- {"CREATEDATE", {"DocInfo.CreateDateTime", FIELD_CREATEDATE }},
- {"DOCPROPERTY", {"", FIELD_DOCPROPERTY }},
- {"DOCVARIABLE", {"User", FIELD_DOCVARIABLE }},
- {"EDITTIME", {"DocInfo.EditTime", FIELD_EDITTIME }},
- {"EQ", {"", FIELD_EQ }},
- {"FILLIN", {"Input", FIELD_FILLIN }},
- {"FILENAME", {"FileName", FIELD_FILENAME }},
-// {"FILESIZE", {"", FIELD_FILESIZE }},
- {"FORMULA", {"TableFormula", FIELD_FORMULA }},
- {"FORMCHECKBOX", {"", FIELD_FORMCHECKBOX }},
- {"FORMDROPDOWN", {"DropDown", FIELD_FORMDROPDOWN }},
- {"FORMTEXT", {"Input", FIELD_FORMTEXT }},
- {"GOTOBUTTON", {"", FIELD_GOTOBUTTON }},
- {"HYPERLINK", {"", FIELD_HYPERLINK }},
- {"IF", {"ConditionalText", FIELD_IF }},
-// {"INFO", {"", FIELD_INFO }},
- {"INCLUDEPICTURE", {"", FIELD_INCLUDEPICTURE}},
- {"KEYWORDS", {"DocInfo.KeyWords", FIELD_KEYWORDS }},
- {"LASTSAVEDBY", {"DocInfo.ChangeAuthor", FIELD_LASTSAVEDBY }},
- {"MACROBUTTON", {"Macro", FIELD_MACROBUTTON }},
- {"MERGEFIELD", {"Database", FIELD_MERGEFIELD }},
- {"MERGEREC", {"DatabaseNumberOfSet", FIELD_MERGEREC }},
-// {"MERGESEQ", {"", FIELD_MERGESEQ }},
- {"NEXT", {"DatabaseNextSet", FIELD_NEXT }},
- {"NEXTIF", {"DatabaseNextSet", FIELD_NEXTIF }},
- {"PAGE", {"PageNumber", FIELD_PAGE }},
- {"PAGEREF", {"GetReference", FIELD_PAGEREF }},
- {"REF", {"GetReference", FIELD_REF }},
- {"REVNUM", {"DocInfo.Revision", FIELD_REVNUM }},
- {"SAVEDATE", {"DocInfo.Change", FIELD_SAVEDATE }},
-// {"SECTION", {"", FIELD_SECTION }},
-// {"SECTIONPAGES", {"", FIELD_SECTIONPAGES }},
- {"SEQ", {"SetExpression", FIELD_SEQ }},
- {"SET", {"SetExpression", FIELD_SET }},
-// {"SKIPIF", {"", FIELD_SKIPIF }},
-// {"STYLEREF", {"", FIELD_STYLEREF }},
- {"SUBJECT", {"DocInfo.Subject", FIELD_SUBJECT }},
- {"SYMBOL", {"", FIELD_SYMBOL }},
- {"TEMPLATE", {"TemplateName", FIELD_TEMPLATE }},
- {"TIME", {"DateTime", FIELD_TIME }},
- {"TITLE", {"DocInfo.Title", FIELD_TITLE }},
- {"USERINITIALS", {"Author", FIELD_USERINITIALS }},
-// {"USERADDRESS", {"", FIELD_USERADDRESS }},
- {"USERNAME", {"Author", FIELD_USERNAME }},
-
-
- {"TOC", {"com.sun.star.text.ContentIndex", FIELD_TOC }},
- {"TC", {"com.sun.star.text.ContentIndexMark", FIELD_TC }},
- {"NUMCHARS", {"CharacterCount", FIELD_NUMCHARS }},
- {"NUMWORDS", {"WordCount", FIELD_NUMWORDS }},
- {"NUMPAGES", {"PageCount", FIELD_NUMPAGES }},
- {"INDEX", {"com.sun.star.text.DocumentIndex", FIELD_INDEX }},
- {"XE", {"com.sun.star.text.DocumentIndexMark", FIELD_XE }},
- {"BIBLIOGRAPHY",{"com.sun.star.text.Bibliography", FIELD_BIBLIOGRAPHY }},
- {"CITATION", {"com.sun.star.text.TextField.Bibliography",FIELD_CITATION }},
- };
-
- return aFieldConversionMap;
-}
-
-static const FieldConversionMap_t & lcl_GetEnhancedFieldConversion()
-{
- static const FieldConversionMap_t aEnhancedFieldConversionMap =
- {
- {"FORMCHECKBOX", {"FormFieldmark", FIELD_FORMCHECKBOX}},
- {"FORMDROPDOWN", {"FormFieldmark", FIELD_FORMDROPDOWN}},
- {"FORMTEXT", {"Fieldmark", FIELD_FORMTEXT}},
- };
-
- return aEnhancedFieldConversionMap;
-}
-
-void DomainMapper_Impl::handleFieldSet
- (const FieldContextPtr& pContext,
- uno::Reference< uno::XInterface > const & xFieldInterface,
- uno::Reference< beans::XPropertySet > const& xFieldProperties)
-{
- OUString sVariable, sHint;
-
- sVariable = lcl_ExtractVariableAndHint(pContext->GetCommand(), sHint);
-
- // remove surrounding "" if exists
- if(sHint.getLength() >= 2)
- {
- OUString sTmp = sHint.trim();
- if (sTmp.startsWith("\"") && sTmp.endsWith("\""))
- {
- sHint = sTmp.copy(1, sTmp.getLength() - 2);
- }
- }
-
- // determine field master name
- uno::Reference< beans::XPropertySet > xMaster =
- FindOrCreateFieldMaster
- ("com.sun.star.text.FieldMaster.SetExpression", sVariable );
-
- // a set field is a string
- xMaster->setPropertyValue(getPropertyName(PROP_SUB_TYPE), uno::makeAny(text::SetVariableType::STRING));
-
- // attach the master to the field
- uno::Reference< text::XDependentTextField > xDependentField
- ( xFieldInterface, uno::UNO_QUERY_THROW );
- xDependentField->attachTextFieldMaster( xMaster );
-
- xFieldProperties->setPropertyValue(getPropertyName(PROP_HINT), uno::makeAny( sHint ));
- xFieldProperties->setPropertyValue(getPropertyName(PROP_CONTENT), uno::makeAny( sHint ));
- xFieldProperties->setPropertyValue(getPropertyName(PROP_SUB_TYPE), uno::makeAny(text::SetVariableType::STRING));
-
- // Mimic MS Word behavior (hide the SET)
- xFieldProperties->setPropertyValue(getPropertyName(PROP_IS_VISIBLE), uno::makeAny(false));
-}
-
-void DomainMapper_Impl::handleFieldAsk
- (const FieldContextPtr& pContext,
- uno::Reference< uno::XInterface > & xFieldInterface,
- uno::Reference< beans::XPropertySet > const& xFieldProperties)
-{
- //doesn the command contain a variable name?
- OUString sVariable, sHint;
-
- sVariable = lcl_ExtractVariableAndHint( pContext->GetCommand(),
- sHint );
- if(!sVariable.isEmpty())
- {
- // determine field master name
- uno::Reference< beans::XPropertySet > xMaster =
- FindOrCreateFieldMaster
- ("com.sun.star.text.FieldMaster.SetExpression", sVariable );
- // An ASK field is always a string of characters
- xMaster->setPropertyValue(getPropertyName(PROP_SUB_TYPE), uno::makeAny(text::SetVariableType::STRING));
-
- // attach the master to the field
- uno::Reference< text::XDependentTextField > xDependentField
- ( xFieldInterface, uno::UNO_QUERY_THROW );
- xDependentField->attachTextFieldMaster( xMaster );
-
- // set input flag at the field
- xFieldProperties->setPropertyValue(
- getPropertyName(PROP_IS_INPUT), uno::makeAny( true ));
- // set the prompt
- xFieldProperties->setPropertyValue(
- getPropertyName(PROP_HINT),
- uno::makeAny( sHint ));
- xFieldProperties->setPropertyValue(getPropertyName(PROP_SUB_TYPE), uno::makeAny(text::SetVariableType::STRING));
- // The ASK has no field value to display
- xFieldProperties->setPropertyValue(getPropertyName(PROP_IS_VISIBLE), uno::makeAny(false));
- }
- else
- {
- //don't insert the field
- //todo: maybe import a 'normal' input field here?
- xFieldInterface = nullptr;
- }
-}
-
-/**
- * Converts a Microsoft Word field formula into LibreOffice syntax
- * @param input The Microsoft Word field formula, with no leading '=' sign
- * @return An equivalent LibreOffice field formula
- */
-OUString DomainMapper_Impl::convertFieldFormula(const OUString& input) {
-
- OUString listSeparator = m_pSettingsTable->GetListSeparator();
-
- /* Replace logical condition functions with LO equivalent operators */
- OUString changed = input.replaceAll(" <> ", " NEQ ");
- changed = changed.replaceAll(" <= ", " LEQ ");
- changed = changed.replaceAll(" >= ", " GEQ ");
- changed = changed.replaceAll(" = " , " EQ ");
- changed = changed.replaceAll(" < " , " L ");
- changed = changed.replaceAll(" > " , " G ");
-
- changed = changed.replaceAll("<>", " NEQ ");
- changed = changed.replaceAll("<=", " LEQ ");
- changed = changed.replaceAll(">=", " GEQ ");
- changed = changed.replaceAll("=" , " EQ ");
- changed = changed.replaceAll("<" , " L ");
- changed = changed.replaceAll(">" , " G ");
-
- /* Replace function calls with infix keywords for AND(), OR(), and ROUND(). Nothing needs to be
- * done for NOT(). This simple regex will work properly with most common cases. However, it may
- * not work correctly when the arguments are nested subcalls to other functions, like
- * ROUND(MIN(1,2),MAX(3,4)). See TDF#134765. */
- icu::ErrorCode status;
- icu::UnicodeString usInput(changed.getStr());
- const uint32_t rMatcherFlags = UREGEX_CASE_INSENSITIVE;
- OUString regex = "\\b(AND|OR|ROUND)\\s*\\(\\s*([^" + listSeparator + "]+)\\s*" + listSeparator + "\\s*([^)]+)\\s*\\)";
- icu::UnicodeString usRegex(regex.getStr());
- icu::RegexMatcher rmatch1(usRegex, usInput, rMatcherFlags, status);
- usInput = rmatch1.replaceAll(icu::UnicodeString("(($2) $1 ($3))"), status);
-
- /* Assumes any remaining list separators separate arguments to functions that accept lists
- * (SUM, MIN, MAX, MEAN, etc.) */
- usInput.findAndReplace(icu::UnicodeString(listSeparator.getStr()), "|");
-
- /* Surround single cell references with angle brackets.
- * If there is ever added a function name that ends with a digit, this regex will need to be revisited. */
- icu::RegexMatcher rmatch2("\\b([A-Z]{1,3}[0-9]+)\\b(?![(])", usInput, rMatcherFlags, status);
- usInput = rmatch2.replaceAll(icu::UnicodeString("<$1>"), status);
-
- /* Cell references must be upper case
- * TODO: convert reference to other tables, e.g. SUM(Table1 A1:B2), where "Table1" is a bookmark of the table,
- * TODO: also column range A:A */
- icu::RegexMatcher rmatch3("(<[a-z]{1,3}[0-9]+>|\\b(above|below|left|right)\\b)", usInput, rMatcherFlags, status);
- icu::UnicodeString replacedCellRefs;
- while (rmatch3.find(status) && status.isSuccess()) {
- rmatch3.appendReplacement(replacedCellRefs, rmatch3.group(status).toUpper(), status);
- }
- rmatch3.appendTail(replacedCellRefs);
-
- /* Fix up cell ranges */
- icu::RegexMatcher rmatch4("<([A-Z]{1,3}[0-9]+)>:<([A-Z]{1,3}[0-9]+)>", replacedCellRefs, rMatcherFlags, status);
- usInput = rmatch4.replaceAll(icu::UnicodeString("<$1:$2>"), status);
-
- /* Fix up user defined names */
- icu::RegexMatcher rmatch5("\\bDEFINED\\s*\\(<([A-Z]+[0-9]+)>\\)", usInput, rMatcherFlags, status);
- usInput = rmatch5.replaceAll(icu::UnicodeString("DEFINED($1)"), status);
-
- /* Prepare replace of ABOVE/BELOW/LEFT/RIGHT by adding spaces around them */
- icu::RegexMatcher rmatch6("\\b(ABOVE|BELOW|LEFT|RIGHT)\\b", usInput, rMatcherFlags, status);
- usInput = rmatch6.replaceAll(icu::UnicodeString(" $1 "), status);
-
- return OUString(usInput.getTerminatedBuffer());
-}
-
-void DomainMapper_Impl::handleFieldFormula
- (const FieldContextPtr& pContext,
- uno::Reference< beans::XPropertySet > const& xFieldProperties)
-{
- OUString command = pContext->GetCommand().trim();
-
- // Remove number formatting from \# to end of command
- // TODO: handle custom number formatting
- sal_Int32 delimPos = command.indexOf("\\#");
- if (delimPos != -1)
- {
- command = command.replaceAt(delimPos, command.getLength() - delimPos, "").trim();
- }
-
- // command must contains = and at least another char
- if (command.getLength() < 2)
- return;
-
- // we don't copy the = symbol from the command
- OUString formula = convertFieldFormula(command.copy(1));
-
- xFieldProperties->setPropertyValue(getPropertyName(PROP_CONTENT), uno::makeAny(formula));
- xFieldProperties->setPropertyValue(getPropertyName(PROP_NUMBER_FORMAT), uno::makeAny(sal_Int32(0)));
- xFieldProperties->setPropertyValue("IsShowFormula", uno::makeAny(false));
-
- // grab-bag the original and converted formula
- if (hasTableManager())
- {
- TablePropertyMapPtr pPropMap(new TablePropertyMap());
- pPropMap->Insert(PROP_CELL_FORMULA, uno::makeAny(command.copy(1)), true, CELL_GRAB_BAG);
- pPropMap->Insert(PROP_CELL_FORMULA_CONVERTED, uno::makeAny(formula), true, CELL_GRAB_BAG);
- getTableManager().cellProps(pPropMap);
- }
-}
-
-void DomainMapper_Impl::handleRubyEQField( const FieldContextPtr& pContext)
-{
- const OUString & rCommand(pContext->GetCommand());
- sal_Int32 nIndex = 0, nEnd = 0;
- RubyInfo aInfo ;
- nIndex = rCommand.indexOf("\\* jc" );
- if (nIndex != -1)
- {
- nIndex += 5;
- sal_uInt32 nJc = rCommand.getToken(0, ' ',nIndex).toInt32();
- const sal_Int32 aRubyAlignValues[] =
- {
- NS_ooxml::LN_Value_ST_RubyAlign_center,
- NS_ooxml::LN_Value_ST_RubyAlign_distributeLetter,
- NS_ooxml::LN_Value_ST_RubyAlign_distributeSpace,
- NS_ooxml::LN_Value_ST_RubyAlign_left,
- NS_ooxml::LN_Value_ST_RubyAlign_right,
- NS_ooxml::LN_Value_ST_RubyAlign_rightVertical,
- };
- aInfo.nRubyAlign = aRubyAlignValues[(nJc<SAL_N_ELEMENTS(aRubyAlignValues))?nJc:0];
- }
-
- // we don't parse or use the font field in rCommand
-
- nIndex = rCommand.indexOf("\\* hps" );
- if (nIndex != -1)
- {
- nIndex += 6;
- aInfo.nHps = rCommand.getToken(0, ' ',nIndex).toInt32();
- }
-
- nIndex = rCommand.indexOf("\\o");
- if (nIndex == -1)
- return;
- nIndex = rCommand.indexOf('(', nIndex);
- if (nIndex == -1)
- return;
- nEnd = rCommand.lastIndexOf(')');
- if (nEnd == -1)
- return;
- if (nEnd <= nIndex)
- return;
-
- OUString sRubyParts = rCommand.copy(nIndex+1,nEnd-nIndex-1);
- nIndex = 0;
- OUString sPart1 = sRubyParts.getToken(0, ',', nIndex);
- OUString sPart2 = sRubyParts.getToken(0, ',', nIndex);
- if ((nIndex = sPart1.indexOf('(')) != -1 && (nEnd = sPart1.lastIndexOf(')'))!=-1 && nEnd > nIndex)
- {
- aInfo.sRubyText = sPart1.copy(nIndex+1,nEnd-nIndex-1);
- }
-
- PropertyMapPtr pRubyContext(new PropertyMap());
- pRubyContext->InsertProps(GetTopContext());
- if (aInfo.nHps > 0)
- {
- double fVal = double(aInfo.nHps) / 2.;
- uno::Any aVal = uno::makeAny( fVal );
-
- pRubyContext->Insert(PROP_CHAR_HEIGHT, aVal);
- pRubyContext->Insert(PROP_CHAR_HEIGHT_ASIAN, aVal);
- }
- PropertyValueVector_t aProps = comphelper::sequenceToContainer< PropertyValueVector_t >(pRubyContext->GetPropertyValues());
- aInfo.sRubyStyle = m_rDMapper.getOrCreateCharStyle(aProps, /*bAlwaysCreate=*/false);
- PropertyMapPtr pCharContext(new PropertyMap());
- if (m_pLastCharacterContext)
- pCharContext->InsertProps(m_pLastCharacterContext);
- pCharContext->InsertProps(pContext->getProperties());
- pCharContext->Insert(PROP_RUBY_TEXT, uno::makeAny( aInfo.sRubyText ) );
- pCharContext->Insert(PROP_RUBY_ADJUST, uno::makeAny(static_cast<sal_Int16>(ConversionHelper::convertRubyAlign(aInfo.nRubyAlign))));
- if ( aInfo.nRubyAlign == NS_ooxml::LN_Value_ST_RubyAlign_rightVertical )
- pCharContext->Insert(PROP_RUBY_POSITION, uno::makeAny(css::text::RubyPosition::INTER_CHARACTER));
- pCharContext->Insert(PROP_RUBY_STYLE, uno::makeAny(aInfo.sRubyStyle));
- appendTextPortion(sPart2, pCharContext);
-
-}
-
-void DomainMapper_Impl::handleAutoNum
- (const FieldContextPtr& pContext,
- uno::Reference< uno::XInterface > const & xFieldInterface,
- uno::Reference< beans::XPropertySet > const& xFieldProperties)
-{
- //create a sequence field master "AutoNr"
- uno::Reference< beans::XPropertySet > xMaster =
- FindOrCreateFieldMaster
- ("com.sun.star.text.FieldMaster.SetExpression",
- "AutoNr");
-
- xMaster->setPropertyValue( getPropertyName(PROP_SUB_TYPE),
- uno::makeAny(text::SetVariableType::SEQUENCE));
-
- //apply the numbering type
- xFieldProperties->setPropertyValue(
- getPropertyName(PROP_NUMBERING_TYPE),
- uno::makeAny( lcl_ParseNumberingType(pContext->GetCommand()) ));
- // attach the master to the field
- uno::Reference< text::XDependentTextField > xDependentField
- ( xFieldInterface, uno::UNO_QUERY_THROW );
- xDependentField->attachTextFieldMaster( xMaster );
-}
-
-void DomainMapper_Impl::handleAuthor
- (std::u16string_view rFirstParam,
- uno::Reference< beans::XPropertySet > const& xFieldProperties,
- FieldId eFieldId )
-{
- if ( eFieldId != FIELD_USERINITIALS )
- xFieldProperties->setPropertyValue
- ( getPropertyName(PROP_FULL_NAME), uno::makeAny( true ));
-
- if (!rFirstParam.empty())
- {
- xFieldProperties->setPropertyValue(
- getPropertyName( PROP_IS_FIXED ),
- uno::makeAny( true ));
- //PROP_CURRENT_PRESENTATION is set later anyway
- }
-}
-
- void DomainMapper_Impl::handleDocProperty
- (const FieldContextPtr& pContext,
- OUString const& rFirstParam,
- uno::Reference< uno::XInterface > & xFieldInterface)
-{
- //some docproperties should be imported as document statistic fields, some as DocInfo fields
- //others should be user fields
- if (rFirstParam.isEmpty())
- return;
-
- constexpr sal_uInt8 SET_ARABIC = 0x01;
- constexpr sal_uInt8 SET_DATE = 0x04;
- struct DocPropertyMap
- {
- const char* pDocPropertyName;
- const char* pServiceName;
- sal_uInt8 nFlags;
- };
- static const DocPropertyMap aDocProperties[] =
- {
- {"CreateTime", "DocInfo.CreateDateTime", SET_DATE},
- {"Characters", "CharacterCount", SET_ARABIC},
- {"Comments", "DocInfo.Description", 0},
- {"Keywords", "DocInfo.KeyWords", 0},
- {"LastPrinted", "DocInfo.PrintDateTime", 0},
- {"LastSavedBy", "DocInfo.ChangeAuthor", 0},
- {"LastSavedTime", "DocInfo.ChangeDateTime", SET_DATE},
- {"Paragraphs", "ParagraphCount", SET_ARABIC},
- {"RevisionNumber", "DocInfo.Revision", 0},
- {"Subject", "DocInfo.Subject", 0},
- {"Template", "TemplateName", 0},
- {"Title", "DocInfo.Title", 0},
- {"TotalEditingTime", "DocInfo.EditTime", 0},
- {"Words", "WordCount", SET_ARABIC}
-
- //other available DocProperties:
- //Bytes, Category, CharactersWithSpaces, Company
- //HyperlinkBase,
- //Lines, Manager, NameofApplication, ODMADocId, Pages,
- //Security,
- };
- uno::Reference<document::XDocumentPropertiesSupplier> xDocumentPropertiesSupplier(m_xTextDocument, uno::UNO_QUERY);
- uno::Reference<document::XDocumentProperties> xDocumentProperties = xDocumentPropertiesSupplier->getDocumentProperties();
- uno::Reference<beans::XPropertySet> xUserDefinedProps(xDocumentProperties->getUserDefinedProperties(), uno::UNO_QUERY_THROW);
- uno::Reference<beans::XPropertySetInfo> xPropertySetInfo = xUserDefinedProps->getPropertySetInfo();
- //search for a field mapping
- OUString sFieldServiceName;
- size_t nMap = 0;
- for( ; nMap < SAL_N_ELEMENTS(aDocProperties); ++nMap )
- {
- if ((rFirstParam.equalsAscii(aDocProperties[nMap].pDocPropertyName)) && (!xPropertySetInfo->hasPropertyByName(rFirstParam)))
- {
- sFieldServiceName =
- OUString::createFromAscii
- (aDocProperties[nMap].pServiceName);
- break;
- }
- }
- OUString sServiceName("com.sun.star.text.TextField.");
- bool bIsCustomField = false;
- if(sFieldServiceName.isEmpty())
- {
- //create a custom property field
- sServiceName += "DocInfo.Custom";
- bIsCustomField = true;
- }
- else
- {
- sServiceName += sFieldServiceName;
- }
- if (m_xTextFactory.is())
- xFieldInterface = m_xTextFactory->createInstance(sServiceName);
- uno::Reference<beans::XPropertySet> xFieldProperties( xFieldInterface, uno::UNO_QUERY_THROW);
- if( bIsCustomField )
- {
- xFieldProperties->setPropertyValue(
- getPropertyName(PROP_NAME), uno::makeAny(rFirstParam));
- pContext->SetCustomField( xFieldProperties );
- }
- else
- {
- if(0 != (aDocProperties[nMap].nFlags & SET_ARABIC))
- xFieldProperties->setPropertyValue(
- getPropertyName(PROP_NUMBERING_TYPE),
- uno::makeAny( style::NumberingType::ARABIC ));
- else if(0 != (aDocProperties[nMap].nFlags & SET_DATE))
- {
- xFieldProperties->setPropertyValue(
- getPropertyName(PROP_IS_DATE),
- uno::makeAny( true ));
- SetNumberFormat( pContext->GetCommand(), xFieldProperties );
- }
- }
-}
-
-static uno::Sequence< beans::PropertyValues > lcl_createTOXLevelHyperlinks( bool bHyperlinks, const OUString& sChapterNoSeparator,
- const uno::Sequence< beans::PropertyValues >& aLevel )
-{
- //create a copy of the level and add two new entries - hyperlink start and end
- bool bChapterNoSeparator = !sChapterNoSeparator.isEmpty();
- sal_Int32 nAdd = (bHyperlinks && bChapterNoSeparator) ? 4 : 2;
- uno::Sequence< beans::PropertyValues > aNewLevel( aLevel.getLength() + nAdd);
- beans::PropertyValues* pNewLevel = aNewLevel.getArray();
- if( bHyperlinks )
- {
- beans::PropertyValues aHyperlink(1);
- aHyperlink[0].Name = getPropertyName( PROP_TOKEN_TYPE );
- aHyperlink[0].Value <<= getPropertyName( PROP_TOKEN_HYPERLINK_START );
- pNewLevel[0] = aHyperlink;
- aHyperlink[0].Value <<= getPropertyName( PROP_TOKEN_HYPERLINK_END );
- pNewLevel[aNewLevel.getLength() -1] = aHyperlink;
- }
- if( bChapterNoSeparator )
- {
- beans::PropertyValues aChapterNo(2);
- aChapterNo[0].Name = getPropertyName( PROP_TOKEN_TYPE );
- aChapterNo[0].Value <<= getPropertyName( PROP_TOKEN_CHAPTER_INFO );
- aChapterNo[1].Name = getPropertyName( PROP_CHAPTER_FORMAT );
- //todo: is ChapterFormat::Number correct?
- aChapterNo[1].Value <<= sal_Int16(text::ChapterFormat::NUMBER);
- pNewLevel[aNewLevel.getLength() - (bHyperlinks ? 4 : 2) ] = aChapterNo;
-
- beans::PropertyValues aChapterSeparator(2);
- aChapterSeparator[0].Name = getPropertyName( PROP_TOKEN_TYPE );
- aChapterSeparator[0].Value <<= getPropertyName( PROP_TOKEN_TEXT );
- aChapterSeparator[1].Name = getPropertyName( PROP_TEXT );
- aChapterSeparator[1].Value <<= sChapterNoSeparator;
- pNewLevel[aNewLevel.getLength() - (bHyperlinks ? 3 : 1)] = aChapterSeparator;
- }
- //copy the 'old' entries except the last (page no)
- std::copy(aLevel.begin(), std::prev(aLevel.end()), std::next(aNewLevel.begin()));
- //copy page no entry (last or last but one depending on bHyperlinks
- sal_Int32 nPageNo = aNewLevel.getLength() - (bHyperlinks ? 2 : 3);
- pNewLevel[nPageNo] = aLevel[aLevel.getLength() - 1];
-
- return aNewLevel;
-}
-
-/// Returns title of the TOC placed in paragraph(s) before TOC field inside STD-frame
-OUString DomainMapper_Impl::extractTocTitle()
-{
- if (!m_xSdtEntryStart.is())
- return OUString();
-
- uno::Reference< text::XTextAppend > xTextAppend = m_aTextAppendStack.top().xTextAppend;
- if(!xTextAppend.is())
- return OUString();
-
- // try-catch was added in the same way as inside appendTextSectionAfter()
- try
- {
- uno::Reference<text::XParagraphCursor> xCursor(xTextAppend->createTextCursorByRange(m_xSdtEntryStart), uno::UNO_QUERY_THROW);
- if (!xCursor.is())
- return OUString();
-
- //the cursor has been moved to the end of the paragraph because of the appendTextPortion() calls
- xCursor->gotoStartOfParagraph( false );
- if (m_aTextAppendStack.top().xInsertPosition.is())
- xCursor->gotoRange( m_aTextAppendStack.top().xInsertPosition, true );
- else
- xCursor->gotoEnd( true );
-
- // the paragraph after this new section might have been already inserted
- OUString sResult = xCursor->getString();
- if (sResult.endsWith(SAL_NEWLINE_STRING))
- sResult = sResult.copy(0, sResult.getLength() - SAL_N_ELEMENTS(SAL_NEWLINE_STRING) + 1);
-
- return sResult;
- }
- catch(const uno::Exception&)
- {
- }
-
- return OUString();
-}
-
-css::uno::Reference<css::beans::XPropertySet>
-DomainMapper_Impl::StartIndexSectionChecked(const OUString& sServiceName)
-{
- if (m_bParaChanged)
- {
- finishParagraph(GetTopContextOfType(CONTEXT_PARAGRAPH), false); // resets m_bParaChanged
- PopProperties(CONTEXT_PARAGRAPH);
- PushProperties(CONTEXT_PARAGRAPH);
- SetIsFirstRun(true);
- // The first paragraph of the index that is continuation of just finished one needs to be
- // removed when finished (unless more content will arrive, which will set m_bParaChanged)
- m_bRemoveThisParagraph = true;
- }
- const auto& xTextAppend = GetTopTextAppend();
- const auto xTextRange = xTextAppend->getEnd();
- const auto xRet = createSectionForRange(xTextRange, xTextRange, sServiceName, false);
- if (!m_aTextAppendStack.top().xInsertPosition)
- {
- try
- {
- m_bStartedTOC = true;
- uno::Reference<text::XTextCursor> xTOCTextCursor
- = xTextRange->getText()->createTextCursor();
- assert(xTOCTextCursor.is());
- xTOCTextCursor->gotoEnd(false);
- m_aTextAppendStack.push(TextAppendContext(xTextAppend, xTOCTextCursor));
- }
- catch (const uno::Exception&)
- {
- TOOLS_WARN_EXCEPTION("writerfilter.dmapper",
- "DomainMapper_Impl::StartIndexSectionChecked:");
- }
- }
- return xRet;
-}
-
-void DomainMapper_Impl::handleToc
- (const FieldContextPtr& pContext,
- const OUString & sTOCServiceName)
-{
- OUString sValue;
- if (IsInHeaderFooter())
- m_bStartTOCHeaderFooter = true;
- bool bTableOfFigures = false;
- bool bHyperlinks = false;
- bool bFromOutline = false;
- bool bFromEntries = false;
- bool bHideTabLeaderPageNumbers = false ;
- bool bIsTabEntry = false ;
- bool bNewLine = false ;
- bool bParagraphOutlineLevel = false;
-
- sal_Int16 nMaxLevel = 10;
- OUString sTemplate;
- OUString sChapterNoSeparator;
- OUString sFigureSequence;
- uno::Reference< beans::XPropertySet > xTOC;
- OUString aBookmarkName;
-
-// \a Builds a table of figures but does not include the captions's label and number
- if( lcl_FindInCommand( pContext->GetCommand(), 'a', sValue ))
- { //make it a table of figures
- bTableOfFigures = true;
- }
-// \b Uses a bookmark to specify area of document from which to build table of contents
- if( lcl_FindInCommand( pContext->GetCommand(), 'b', sValue ))
- {
- aBookmarkName = sValue.trim().replaceAll("\"","");
- }
- if( lcl_FindInCommand( pContext->GetCommand(), 'c', sValue ))
-// \c Builds a table of figures of the given label
- {
- //todo: sValue contains the label's name
- bTableOfFigures = true;
- sFigureSequence = sValue.trim();
- sFigureSequence = sFigureSequence.replaceAll("\"", "").replaceAll("'","");
- }
-// \d Defines the separator between sequence and page numbers
- if( lcl_FindInCommand( pContext->GetCommand(), 'd', sValue ))
- {
- //todo: insert the chapter number into each level and insert the separator additionally
- sChapterNoSeparator = sValue;
- }
-// \f Builds a table of contents using TC entries instead of outline levels
- if( lcl_FindInCommand( pContext->GetCommand(), 'f', sValue ))
- {
- //todo: sValue can contain a TOC entry identifier - use unclear
- bFromEntries = true;
- }
-// \h Hyperlinks the entries and page numbers within the table of contents
- if( lcl_FindInCommand( pContext->GetCommand(), 'h', sValue ))
- {
- //todo: make all entries to hyperlinks
- bHyperlinks = true;
- }
-// \l Defines the TC entries field level used to build a table of contents
-// if( lcl_FindInCommand( pContext->GetCommand(), 'l', sValue ))
-// {
- //todo: entries can only be included completely
-// }
-// \n Builds a table of contents or a range of entries, such as 1-9 in a table of contents without page numbers
-// if( lcl_FindInCommand( pContext->GetCommand(), 'n', sValue ))
-// {
- //todo: what does the description mean?
-// }
-// \o Builds a table of contents by using outline levels instead of TC entries
- if( lcl_FindInCommand( pContext->GetCommand(), 'o', sValue ))
- {
- bFromOutline = true;
- if (sValue.isEmpty())
- nMaxLevel = WW_OUTLINE_MAX;
- else
- {
- sal_Int32 nIndex = 0;
- sValue.getToken( 0, '-', nIndex );
- nMaxLevel = static_cast<sal_Int16>(nIndex != -1 ? sValue.copy(nIndex).toInt32() : 0);
- }
- }
-// \p Defines the separator between the table entry and its page number
-// \s Builds a table of contents by using a sequence type
-// \t Builds a table of contents by using style names other than the standard outline styles
- if( lcl_FindInCommand( pContext->GetCommand(), 't', sValue ))
- {
- OUString sToken = sValue.getToken(1, '"');
- sTemplate = sToken.isEmpty() ? sValue : sToken;
- }
-// \u Builds a table of contents by using the applied paragraph outline level
- if( lcl_FindInCommand( pContext->GetCommand(), 'u', sValue ))
- {
- bFromOutline = true;
- bParagraphOutlineLevel = true;
- //todo: what doesn 'the applied paragraph outline level' refer to?
- }
-// \w Preserve tab characters within table entries
- if( lcl_FindInCommand( pContext->GetCommand(), 'w', sValue ))
- {
- bIsTabEntry = true ;
- }
-// \x Preserve newline characters within table entries
- if( lcl_FindInCommand( pContext->GetCommand(), 'x', sValue ))
- {
- bNewLine = true ;
- }
-// \z Hides page numbers within the table of contents when shown in Web Layout View
- if( lcl_FindInCommand( pContext->GetCommand(), 'z', sValue ))
- {
- bHideTabLeaderPageNumbers = true ;
- }
-
- //if there's no option then it should be created from outline
- if( !bFromOutline && !bFromEntries && sTemplate.isEmpty() )
- bFromOutline = true;
-
- const OUString aTocTitle = extractTocTitle();
-
- if (m_xTextFactory.is() && ! m_aTextAppendStack.empty())
- {
- const auto& xTextAppend = GetTopTextAppend();
- if (aTocTitle.isEmpty() || bTableOfFigures)
- {
- // reset marker of the TOC title
- m_xSdtEntryStart.clear();
-
- // Create section before setting m_bStartTOC: finishing paragraph
- // inside StartIndexSectionChecked could do the wrong thing otherwise
- xTOC = StartIndexSectionChecked(bTableOfFigures ? "com.sun.star.text.IllustrationsIndex"
- : sTOCServiceName);
-
- const auto xTextCursor = xTextAppend->getText()->createTextCursor();
- if (xTextCursor)
- xTextCursor->gotoEnd(false);
- xTOCMarkerCursor = xTextCursor;
- }
- else
- {
- // create TOC section
- css::uno::Reference<css::text::XTextRange> xTextRangeEndOfTocHeader = GetTopTextAppend()->getEnd();
- xTOC = createSectionForRange(m_xSdtEntryStart, xTextRangeEndOfTocHeader, sTOCServiceName, false);
-
- // init [xTOCMarkerCursor]
- uno::Reference< text::XText > xText = xTextAppend->getText();
- uno::Reference< text::XTextCursor > xCrsr = xText->createTextCursor();
- xTOCMarkerCursor = xCrsr;
-
- // create header of the TOC with the TOC title inside
- createSectionForRange(m_xSdtEntryStart, xTextRangeEndOfTocHeader, "com.sun.star.text.IndexHeaderSection", true);
- }
- }
-
- m_bStartTOC = true;
-
- if (xTOC.is())
- xTOC->setPropertyValue(getPropertyName( PROP_TITLE ), uno::makeAny(aTocTitle));
-
- if (!aBookmarkName.isEmpty())
- xTOC->setPropertyValue(getPropertyName(PROP_TOC_BOOKMARK), uno::makeAny(aBookmarkName));
- if( !bTableOfFigures && xTOC.is() )
- {
- xTOC->setPropertyValue( getPropertyName( PROP_LEVEL ), uno::makeAny( nMaxLevel ) );
- xTOC->setPropertyValue( getPropertyName( PROP_CREATE_FROM_OUTLINE ), uno::makeAny( bFromOutline ));
- xTOC->setPropertyValue( getPropertyName( PROP_CREATE_FROM_MARKS ), uno::makeAny( bFromEntries ));
- xTOC->setPropertyValue( getPropertyName( PROP_HIDE_TAB_LEADER_AND_PAGE_NUMBERS ), uno::makeAny( bHideTabLeaderPageNumbers ));
- xTOC->setPropertyValue( getPropertyName( PROP_TAB_IN_TOC ), uno::makeAny( bIsTabEntry ));
- xTOC->setPropertyValue( getPropertyName( PROP_TOC_NEW_LINE ), uno::makeAny( bNewLine ));
- xTOC->setPropertyValue( getPropertyName( PROP_TOC_PARAGRAPH_OUTLINE_LEVEL ), uno::makeAny( bParagraphOutlineLevel ));
- if( !sTemplate.isEmpty() )
- {
- //the string contains comma separated the names and related levels
- //like: "Heading 1,1,Heading 2,2"
- TOCStyleMap aMap;
- sal_Int32 nLevel;
- sal_Int32 nPosition = 0;
- while( nPosition >= 0)
- {
- OUString sStyleName = sTemplate.getToken( 0, ',', nPosition );
- //empty tokens should be skipped
- while( sStyleName.isEmpty() && nPosition > 0 )
- sStyleName = sTemplate.getToken( 0, ',', nPosition );
- nLevel = sTemplate.getToken( 0, ',', nPosition ).toInt32();
- if( !nLevel )
- nLevel = 1;
- if( !sStyleName.isEmpty() )
- aMap.emplace(nLevel, sStyleName);
- }
- uno::Reference< container::XIndexReplace> xParaStyles;
- xTOC->getPropertyValue(getPropertyName(PROP_LEVEL_PARAGRAPH_STYLES)) >>= xParaStyles;
- for( nLevel = 1; nLevel < 10; ++nLevel)
- {
- sal_Int32 nLevelCount = aMap.count( nLevel );
- if( nLevelCount )
- {
- TOCStyleMap::iterator aTOCStyleIter = aMap.find( nLevel );
-
- uno::Sequence< OUString> aStyles( nLevelCount );
- for ( sal_Int32 nStyle = 0; nStyle < nLevelCount; ++nStyle, ++aTOCStyleIter )
- {
- aStyles[nStyle] = aTOCStyleIter->second;
- }
- xParaStyles->replaceByIndex(nLevel - 1, uno::makeAny(aStyles));
- }
- }
- xTOC->setPropertyValue(getPropertyName(PROP_CREATE_FROM_LEVEL_PARAGRAPH_STYLES), uno::makeAny( true ));
-
- }
- if(bHyperlinks || !sChapterNoSeparator.isEmpty())
- {
- uno::Reference< container::XIndexReplace> xLevelFormats;
- xTOC->getPropertyValue(getPropertyName(PROP_LEVEL_FORMAT)) >>= xLevelFormats;
- sal_Int32 nLevelCount = xLevelFormats->getCount();
- //start with level 1, 0 is the header level
- for( sal_Int32 nLevel = 1; nLevel < nLevelCount; ++nLevel)
- {
- uno::Sequence< beans::PropertyValues > aLevel;
- xLevelFormats->getByIndex( nLevel ) >>= aLevel;
-
- uno::Sequence< beans::PropertyValues > aNewLevel = lcl_createTOXLevelHyperlinks(
- bHyperlinks, sChapterNoSeparator,
- aLevel );
- xLevelFormats->replaceByIndex( nLevel, uno::makeAny( aNewLevel ) );
- }
- }
- }
- else if (bTableOfFigures && xTOC.is())
- {
- if (!sFigureSequence.isEmpty())
- xTOC->setPropertyValue(getPropertyName(PROP_LABEL_CATEGORY),
- uno::makeAny(sFigureSequence));
-
- if ( bHyperlinks )
- {
- uno::Reference< container::XIndexReplace> xLevelFormats;
- xTOC->getPropertyValue(getPropertyName(PROP_LEVEL_FORMAT)) >>= xLevelFormats;
- uno::Sequence< beans::PropertyValues > aLevel;
- xLevelFormats->getByIndex( 1 ) >>= aLevel;
-
- uno::Sequence< beans::PropertyValues > aNewLevel = lcl_createTOXLevelHyperlinks(
- bHyperlinks, sChapterNoSeparator,
- aLevel );
- xLevelFormats->replaceByIndex( 1, uno::makeAny( aNewLevel ) );
- }
- }
- pContext->SetTOC( xTOC );
- m_bParaHadField = false;
-}
-
-uno::Reference<beans::XPropertySet> DomainMapper_Impl::createSectionForRange(
- uno::Reference< css::text::XTextRange > xStart,
- uno::Reference< css::text::XTextRange > xEnd,
- const OUString & sObjectType,
- bool stepLeft)
-{
- if (!xStart.is())
- return uno::Reference<beans::XPropertySet>();
- if (!xEnd.is())
- return uno::Reference<beans::XPropertySet>();
-
- uno::Reference< beans::XPropertySet > xRet;
- if (m_aTextAppendStack.empty())
- return xRet;
- uno::Reference< text::XTextAppend > xTextAppend = m_aTextAppendStack.top().xTextAppend;
- if(xTextAppend.is())
- {
- try
- {
- uno::Reference< text::XParagraphCursor > xCursor(
- xTextAppend->createTextCursorByRange( xStart ), uno::UNO_QUERY_THROW);
- //the cursor has been moved to the end of the paragraph because of the appendTextPortion() calls
- xCursor->gotoStartOfParagraph( false );
- xCursor->gotoRange( xEnd, true );
- //the paragraph after this new section is already inserted
- if (stepLeft)
- xCursor->goLeft(1, true);
- uno::Reference< text::XTextContent > xSection( m_xTextFactory->createInstance(sObjectType), uno::UNO_QUERY_THROW );
- xSection->attach( uno::Reference< text::XTextRange >( xCursor, uno::UNO_QUERY_THROW) );
- xRet.set(xSection, uno::UNO_QUERY );
- }
- catch(const uno::Exception&)
- {
- }
- }
-
- return xRet;
-}
-
-void DomainMapper_Impl::handleBibliography
- (const FieldContextPtr& pContext,
- const OUString & sTOCServiceName)
-{
- if (m_aTextAppendStack.empty())
- {
- // tdf#130214: a workaround to avoid crash on import errors
- SAL_WARN("writerfilter.dmapper", "no text append stack");
- return;
- }
- // Create section before setting m_bStartTOC and m_bStartBibliography: finishing paragraph
- // inside StartIndexSectionChecked could do the wrong thing otherwise
- const auto xTOC = StartIndexSectionChecked(sTOCServiceName);
- m_bStartTOC = true;
- m_bStartBibliography = true;
-
- if (xTOC.is())
- xTOC->setPropertyValue(getPropertyName( PROP_TITLE ), uno::makeAny(OUString()));
-
- pContext->SetTOC( xTOC );
- m_bParaHadField = false;
-
- uno::Reference< text::XTextContent > xToInsert( xTOC, uno::UNO_QUERY );
- appendTextContent(xToInsert, uno::Sequence< beans::PropertyValue >() );
-}
-
-void DomainMapper_Impl::handleIndex
- (const FieldContextPtr& pContext,
- const OUString & sTOCServiceName)
-{
- // Create section before setting m_bStartTOC and m_bStartIndex: finishing paragraph
- // inside StartIndexSectionChecked could do the wrong thing otherwise
- const auto xTOC = StartIndexSectionChecked(sTOCServiceName);
-
- m_bStartTOC = true;
- m_bStartIndex = true;
- OUString sValue;
- OUString sIndexEntryType = "I"; // Default value for field flag '\f' is 'I'.
-
- if (xTOC.is())
- {
- xTOC->setPropertyValue(getPropertyName( PROP_TITLE ), uno::makeAny(OUString()));
-
- if( lcl_FindInCommand( pContext->GetCommand(), 'r', sValue ))
- {
- xTOC->setPropertyValue("IsCommaSeparated", uno::makeAny(true));
- }
- if( lcl_FindInCommand( pContext->GetCommand(), 'h', sValue ))
- {
- xTOC->setPropertyValue("UseAlphabeticalSeparators", uno::makeAny(true));
- }
- if( lcl_FindInCommand( pContext->GetCommand(), 'f', sValue ))
- {
- if(!sValue.isEmpty())
- sIndexEntryType = sValue ;
- xTOC->setPropertyValue(getPropertyName( PROP_INDEX_ENTRY_TYPE ), uno::makeAny(sIndexEntryType));
- }
- }
- pContext->SetTOC( xTOC );
- m_bParaHadField = false;
-
- uno::Reference< text::XTextContent > xToInsert( xTOC, uno::UNO_QUERY );
- appendTextContent(xToInsert, uno::Sequence< beans::PropertyValue >() );
-
- if( lcl_FindInCommand( pContext->GetCommand(), 'c', sValue ))
- {
- sValue = sValue.replaceAll("\"", "");
- uno::Reference<text::XTextColumns> xTextColumns;
- xTOC->getPropertyValue(getPropertyName( PROP_TEXT_COLUMNS )) >>= xTextColumns;
- if (xTextColumns.is())
- {
- xTextColumns->setColumnCount( sValue.toInt32() );
- xTOC->setPropertyValue( getPropertyName( PROP_TEXT_COLUMNS ), uno::makeAny( xTextColumns ) );
- }
- }
-}
-
-static auto InsertFieldmark(std::stack<TextAppendContext> & rTextAppendStack,
- uno::Reference<text::XFormField> const& xFormField,
- uno::Reference<text::XTextRange> const& xStartRange,
- std::optional<FieldId> const oFieldId) -> void
-{
- uno::Reference<text::XTextContent> const xTextContent(xFormField, uno::UNO_QUERY_THROW);
- uno::Reference<text::XTextAppend> const& xTextAppend(rTextAppendStack.top().xTextAppend);
- uno::Reference<text::XTextCursor> const xCursor =
- xTextAppend->createTextCursorByRange(xStartRange);
- if (rTextAppendStack.top().xInsertPosition.is())
- {
- uno::Reference<text::XTextRangeCompare> const xCompare(
- rTextAppendStack.top().xTextAppend,
- uno::UNO_QUERY);
- if (xCompare->compareRegionStarts(xStartRange, rTextAppendStack.top().xInsertPosition) < 0)
- {
- SAL_WARN("writerfilter.dmapper", "invalid field mark positions");
- assert(false);
- }
- xCursor->gotoRange(rTextAppendStack.top().xInsertPosition, true);
- }
- else
- {
- xCursor->gotoEnd(true);
- }
- xTextAppend->insertTextContent(xCursor, xTextContent, true);
- if (oFieldId
- && (oFieldId == FIELD_FORMCHECKBOX || oFieldId == FIELD_FORMDROPDOWN))
- {
- return; // only a single CH_TXT_ATR_FORMELEMENT!
- }
- // problem: the fieldmark must be inserted in CloseFieldCommand(), because
- // attach() takes 2 positions, not 3!
- // FAIL: AppendTextNode() ignores the content index!
- // plan B: insert a spurious paragraph break now and join
- // it in PopFieldContext()!
- xCursor->gotoRange(xTextContent->getAnchor()->getEnd(), false);
- xCursor->goLeft(1, false); // skip CH_TXT_ATR_FIELDEND
- xTextAppend->insertControlCharacter(xCursor, text::ControlCharacter::PARAGRAPH_BREAK, false);
- xCursor->goLeft(1, false); // back to previous paragraph
- rTextAppendStack.push(TextAppendContext(xTextAppend, xCursor));
-}
-
-static auto PopFieldmark(std::stack<TextAppendContext> & rTextAppendStack,
- uno::Reference<text::XTextCursor> const& xCursor,
- std::optional<FieldId> const oFieldId) -> void
-{
- if (oFieldId
- && (oFieldId == FIELD_FORMCHECKBOX || oFieldId == FIELD_FORMDROPDOWN))
- {
- return; // only a single CH_TXT_ATR_FORMELEMENT!
- }
- xCursor->gotoRange(rTextAppendStack.top().xInsertPosition, false);
- xCursor->goRight(1, true);
- xCursor->setString(OUString()); // undo SplitNode from CloseFieldCommand()
- // note: paragraph properties will be overwritten
- // by finishParagraph() anyway so ignore here
- rTextAppendStack.pop();
-}
-
-void DomainMapper_Impl::CloseFieldCommand()
-{
- if(m_bDiscardHeaderFooter)
- return;
-#ifdef DBG_UTIL
- TagLogger::getInstance().element("closeFieldCommand");
-#endif
-
- FieldContextPtr pContext;
- if(!m_aFieldStack.empty())
- pContext = m_aFieldStack.back();
- OSL_ENSURE( pContext, "no field context available");
- if( !pContext )
- return;
-
- m_bSetUserFieldContent = false;
- m_bSetCitation = false;
- m_bSetDateValue = false;
- const FieldConversionMap_t& aFieldConversionMap = lcl_GetFieldConversion();
-
- try
- {
- uno::Reference< uno::XInterface > xFieldInterface;
-
- const auto& [sType, vArguments, vSwitches]{ splitFieldCommand(pContext->GetCommand()) };
- (void)vSwitches;
- OUString const sFirstParam(vArguments.empty() ? OUString() : vArguments.front());
-
- // apply font size to the form control
- if (!m_aTextAppendStack.empty() && m_pLastCharacterContext && ( m_pLastCharacterContext->isSet(PROP_CHAR_HEIGHT) || m_pLastCharacterContext->isSet(PROP_CHAR_FONT_NAME )))
- {
- uno::Reference< text::XTextAppend > xTextAppend = m_aTextAppendStack.top().xTextAppend;
- if (xTextAppend.is())
- {
- uno::Reference< text::XTextCursor > xCrsr = xTextAppend->getText()->createTextCursor();
- if (xCrsr.is())
- {
- xCrsr->gotoEnd(false);
- uno::Reference< beans::XPropertySet > xProp( xCrsr, uno::UNO_QUERY );
- if (m_pLastCharacterContext->isSet(PROP_CHAR_HEIGHT))
- {
- xProp->setPropertyValue(getPropertyName(PROP_CHAR_HEIGHT), m_pLastCharacterContext->getProperty(PROP_CHAR_HEIGHT)->second);
- if (m_pLastCharacterContext->isSet(PROP_CHAR_HEIGHT_COMPLEX))
- xProp->setPropertyValue(getPropertyName(PROP_CHAR_HEIGHT_COMPLEX), m_pLastCharacterContext->getProperty(PROP_CHAR_HEIGHT_COMPLEX)->second);
- }
- if (m_pLastCharacterContext->isSet(PROP_CHAR_FONT_NAME))
- xProp->setPropertyValue(getPropertyName(PROP_CHAR_FONT_NAME), m_pLastCharacterContext->getProperty(PROP_CHAR_FONT_NAME)->second);
- }
- }
- }
-
- FieldConversionMap_t::const_iterator const aIt = aFieldConversionMap.find(sType);
- if (aIt != aFieldConversionMap.end()
- && (!m_bForceGenericFields
- // these need to convert ffData to properties...
- || (aIt->second.eFieldId == FIELD_FORMCHECKBOX)
- || (aIt->second.eFieldId == FIELD_FORMDROPDOWN)
- || (aIt->second.eFieldId == FIELD_FORMTEXT)))
- {
- pContext->SetFieldId(aIt->second.eFieldId);
- bool bCreateEnhancedField = false;
- uno::Reference< beans::XPropertySet > xFieldProperties;
- bool bCreateField = true;
- switch (aIt->second.eFieldId)
- {
- case FIELD_HYPERLINK:
- case FIELD_DOCPROPERTY:
- case FIELD_TOC:
- case FIELD_INDEX:
- case FIELD_XE:
- case FIELD_BIBLIOGRAPHY:
- case FIELD_CITATION:
- case FIELD_TC:
- case FIELD_EQ:
- case FIELD_INCLUDEPICTURE:
- case FIELD_SYMBOL:
- case FIELD_GOTOBUTTON:
- bCreateField = false;
- break;
- case FIELD_FORMCHECKBOX :
- case FIELD_FORMTEXT :
- case FIELD_FORMDROPDOWN :
- {
- // If we use 'enhanced' fields then FIELD_FORMCHECKBOX,
- // FIELD_FORMTEXT & FIELD_FORMDROPDOWN are treated specially
- if ( m_bUsingEnhancedFields )
- {
- bCreateField = false;
- bCreateEnhancedField = true;
- }
- // for non enhanced fields checkboxes are displayed
- // as an awt control not a field
- else if ( aIt->second.eFieldId == FIELD_FORMCHECKBOX )
- bCreateField = false;
- break;
- }
- default:
- {
- FieldContextPtr pOuter = GetParentFieldContext(m_aFieldStack);
- if (pOuter)
- {
- if (!IsFieldNestingAllowed(pOuter, m_aFieldStack.back()))
- {
- // Parent field can't host this child field: don't create a child field
- // in this case.
- bCreateField = false;
- }
- }
- break;
- }
- }
- if (m_bStartTOC && (aIt->second.eFieldId == FIELD_PAGEREF) )
- {
- bCreateField = false;
- }
-
- if( bCreateField || bCreateEnhancedField )
- {
- //add the service prefix
- OUString sServiceName("com.sun.star.text.");
- if ( bCreateEnhancedField )
- {
- const FieldConversionMap_t& aEnhancedFieldConversionMap = lcl_GetEnhancedFieldConversion();
- FieldConversionMap_t::const_iterator aEnhancedIt =
- aEnhancedFieldConversionMap.find(sType);
- if ( aEnhancedIt != aEnhancedFieldConversionMap.end())
- sServiceName += OUString::createFromAscii(aEnhancedIt->second.cFieldServiceName );
- }
- else
- {
- sServiceName += "TextField." + OUString::createFromAscii(aIt->second.cFieldServiceName );
- }
-
-#ifdef DBG_UTIL
- TagLogger::getInstance().startElement("fieldService");
- TagLogger::getInstance().chars(sServiceName);
- TagLogger::getInstance().endElement();
-#endif
-
- if (m_xTextFactory.is())
- {
- xFieldInterface = m_xTextFactory->createInstance(sServiceName);
- xFieldProperties.set( xFieldInterface, uno::UNO_QUERY_THROW);
- }
- }
- switch( aIt->second.eFieldId )
- {
- case FIELD_ADDRESSBLOCK: break;
- case FIELD_ADVANCE : break;
- case FIELD_ASK :
- handleFieldAsk(pContext, xFieldInterface, xFieldProperties);
- break;
- case FIELD_AUTONUM :
- case FIELD_AUTONUMLGL :
- case FIELD_AUTONUMOUT :
- handleAutoNum(pContext, xFieldInterface, xFieldProperties);
- break;
- case FIELD_AUTHOR :
- case FIELD_USERNAME :
- case FIELD_USERINITIALS :
- handleAuthor(sFirstParam,
- xFieldProperties,
- aIt->second.eFieldId);
- break;
- case FIELD_DATE:
- if (xFieldProperties.is())
- {
- // Get field fixed property from the context handler
- if (pContext->IsFieldLocked())
- {
- xFieldProperties->setPropertyValue(
- getPropertyName(PROP_IS_FIXED),
- uno::makeAny( true ));
- m_bSetDateValue = true;
- }
- else
- xFieldProperties->setPropertyValue(
- getPropertyName(PROP_IS_FIXED),
- uno::makeAny( false ));
-
- xFieldProperties->setPropertyValue(
- getPropertyName(PROP_IS_DATE),
- uno::makeAny( true ));
- SetNumberFormat( pContext->GetCommand(), xFieldProperties );
- }
- break;
- case FIELD_COMMENTS :
- {
- // OUString sParam = lcl_ExtractParameter(pContext->GetCommand(), sizeof(" COMMENTS") );
- // A parameter with COMMENTS shouldn't set fixed
- // ( or at least the binary filter doesn't )
- // If we set fixed then we won't export a field cmd.
- // Additionally the para in COMMENTS is more like an
- // instruction to set the document property comments
- // with the param ( e.g. each COMMENT with a param will
- // overwrite the Comments document property
- // #TODO implement the above too
- xFieldProperties->setPropertyValue(
- getPropertyName( PROP_IS_FIXED ), uno::makeAny( false ));
- //PROP_CURRENT_PRESENTATION is set later anyway
- }
- break;
- case FIELD_CREATEDATE :
- {
- xFieldProperties->setPropertyValue(
- getPropertyName( PROP_IS_DATE ), uno::makeAny( true ));
- SetNumberFormat( pContext->GetCommand(), xFieldProperties );
- }
- break;
- case FIELD_DOCPROPERTY :
- handleDocProperty(pContext, sFirstParam,
- xFieldInterface);
- break;
- case FIELD_DOCVARIABLE :
- {
- if (bCreateField)
- {
- //create a user field and type
- uno::Reference<beans::XPropertySet> xMaster = FindOrCreateFieldMaster(
- "com.sun.star.text.FieldMaster.User", sFirstParam);
- uno::Reference<text::XDependentTextField> xDependentField(
- xFieldInterface, uno::UNO_QUERY_THROW);
- xDependentField->attachTextFieldMaster(xMaster);
- m_bSetUserFieldContent = true;
- }
- }
- break;
- case FIELD_EDITTIME :
- //it's a numbering type, no number format! SetNumberFormat( pContext->GetCommand(), xFieldProperties );
- break;
- case FIELD_EQ:
- {
- OUString aCommand = pContext->GetCommand().trim();
-
- msfilter::util::EquationResult aResult(msfilter::util::ParseCombinedChars(aCommand));
- if (!aResult.sType.isEmpty() && m_xTextFactory.is())
- {
- xFieldInterface = m_xTextFactory->createInstance("com.sun.star.text.TextField." + aResult.sType);
- xFieldProperties =
- uno::Reference< beans::XPropertySet >( xFieldInterface,
- uno::UNO_QUERY_THROW);
- xFieldProperties->setPropertyValue(getPropertyName(PROP_CONTENT), uno::makeAny(aResult.sResult));
- }
- else
- {
- //merge Read_SubF_Ruby into filter/.../util.cxx and reuse that ?
- sal_Int32 nSpaceIndex = aCommand.indexOf(' ');
- if(nSpaceIndex > 0)
- aCommand = aCommand.copy(nSpaceIndex).trim();
- if (aCommand.startsWith("\\s"))
- {
- aCommand = aCommand.copy(2);
- if (aCommand.startsWith("\\do"))
- {
- aCommand = aCommand.copy(3);
- sal_Int32 nStartIndex = aCommand.indexOf('(');
- sal_Int32 nEndIndex = aCommand.indexOf(')');
- if (nStartIndex > 0 && nEndIndex > 0)
- {
- // nDown is the requested "lower by" value in points.
- sal_Int32 nDown = aCommand.copy(0, nStartIndex).toInt32();
- OUString aContent = aCommand.copy(nStartIndex + 1, nEndIndex - nStartIndex - 1);
- PropertyMapPtr pCharContext = GetTopContext();
- // dHeight is the font size of the current style.
- double dHeight = 0;
- if ((GetPropertyFromParaStyleSheet(PROP_CHAR_HEIGHT) >>= dHeight) && dHeight != 0)
- // Character escapement should be given in negative percents for subscripts.
- pCharContext->Insert(PROP_CHAR_ESCAPEMENT, uno::makeAny( sal_Int16(- 100 * nDown / dHeight) ) );
- appendTextPortion(aContent, pCharContext);
- }
- }
- }
- else if (aCommand.startsWith("\\* jc"))
- {
- handleRubyEQField(pContext);
- }
- }
- }
- break;
- case FIELD_FILLIN :
- if (xFieldProperties.is())
- xFieldProperties->setPropertyValue(
- getPropertyName(PROP_HINT), uno::makeAny( pContext->GetCommand().getToken(1, '\"')));
- break;
- case FIELD_FILENAME:
- {
- sal_Int32 nNumberingTypeIndex = pContext->GetCommand().indexOf("\\p");
- if (xFieldProperties.is())
- xFieldProperties->setPropertyValue(
- getPropertyName(PROP_FILE_FORMAT),
- uno::makeAny( nNumberingTypeIndex > 0 ? text::FilenameDisplayFormat::FULL : text::FilenameDisplayFormat::NAME_AND_EXT ));
- }
- break;
- case FIELD_FILESIZE : break;
- case FIELD_FORMULA :
- if (bCreateField)
- {
- handleFieldFormula(pContext, xFieldProperties);
- }
- break;
- case FIELD_FORMCHECKBOX :
- case FIELD_FORMDROPDOWN :
- case FIELD_FORMTEXT :
- {
- if (bCreateEnhancedField)
- {
- FFDataHandler::Pointer_t
- pFFDataHandler(pContext->getFFDataHandler());
- FormControlHelper::Pointer_t
- pFormControlHelper(new FormControlHelper
- (m_bUsingEnhancedFields ? aIt->second.eFieldId : FIELD_FORMCHECKBOX,
-
- m_xTextDocument, pFFDataHandler));
- pContext->setFormControlHelper(pFormControlHelper);
- uno::Reference< text::XFormField > xFormField( xFieldInterface, uno::UNO_QUERY );
- uno::Reference< container::XNamed > xNamed( xFormField, uno::UNO_QUERY );
- if ( xNamed.is() )
- {
- if ( pFFDataHandler && !pFFDataHandler->getName().isEmpty() )
- xNamed->setName( pFFDataHandler->getName() );
- pContext->SetFormField( xFormField );
- }
- InsertFieldmark(m_aTextAppendStack,
- xFormField, pContext->GetStartRange(),
- pContext->GetFieldId());
- }
- else
- {
- if ( aIt->second.eFieldId == FIELD_FORMDROPDOWN )
- lcl_handleDropdownField( xFieldProperties, pContext->getFFDataHandler() );
- else
- lcl_handleTextField( xFieldProperties, pContext->getFFDataHandler() );
- }
- }
- break;
- case FIELD_GOTOBUTTON : break;
- case FIELD_HYPERLINK:
- {
- ::std::vector<OUString> aParts = pContext->GetCommandParts();
-
- // Syntax is either:
- // HYPERLINK "" \l "link"
- // or
- // HYPERLINK \l "link"
- // Make sure "HYPERLINK" doesn't end up as part of link in the second case.
- if (!aParts.empty() && aParts[0] == "HYPERLINK")
- aParts.erase(aParts.begin());
-
- ::std::vector<OUString>::const_iterator aItEnd = aParts.end();
- ::std::vector<OUString>::const_iterator aPartIt = aParts.begin();
-
- OUString sURL;
- OUString sTarget;
-
- while (aPartIt != aItEnd)
- {
- if ( *aPartIt == "\\l" )
- {
- ++aPartIt;
-
- if (aPartIt == aItEnd)
- break;
-
- sURL += "#" + *aPartIt;
- }
- else if (*aPartIt == "\\m" || *aPartIt == "\\n" || *aPartIt == "\\h")
- {
- }
- else if ( *aPartIt == "\\o" || *aPartIt == "\\t" )
- {
- ++aPartIt;
-
- if (aPartIt == aItEnd)
- break;
-
- sTarget = *aPartIt;
- }
- else
- {
- sURL = *aPartIt;
- }
-
- ++aPartIt;
- }
-
- if (!sURL.isEmpty())
- {
- if (sURL.startsWith("file:///"))
- {
- // file:///absolute\\path\\to\\file => invalid file URI (Writer cannot open)
- // convert all double backslashes to slashes:
- sURL = sURL.replaceAll("\\\\", "/");
-
- // file:///absolute\path\to\file => invalid file URI (Writer cannot open)
- // convert all backslashes to slashes:
- sURL = sURL.replace('\\', '/');
- }
- // Try to make absolute any relative URLs, except
- // for relative same-document URLs that only contain
- // a fragment part:
- else if (!sURL.startsWith("#")) {
- try {
- sURL = rtl::Uri::convertRelToAbs(
- m_aBaseUrl, sURL);
- } catch (rtl::MalformedUriException & e) {
- SAL_WARN(
- "writerfilter.dmapper",
- "MalformedUriException "
- << e.getMessage());
- }
- }
- pContext->SetHyperlinkURL(sURL);
- }
-
- if (!sTarget.isEmpty())
- pContext->SetHyperlinkTarget(sTarget);
- }
- break;
- case FIELD_IF : break;
- case FIELD_INFO : break;
- case FIELD_INCLUDEPICTURE: break;
- case FIELD_KEYWORDS :
- {
- if (!sFirstParam.isEmpty())
- {
- xFieldProperties->setPropertyValue(
- getPropertyName( PROP_IS_FIXED ), uno::makeAny( true ));
- //PROP_CURRENT_PRESENTATION is set later anyway
- }
- }
- break;
- case FIELD_LASTSAVEDBY : break;
- case FIELD_MACROBUTTON:
- {
- //extract macro name
- sal_Int32 nIndex = sizeof(" MACROBUTTON ");
- OUString sMacro = pContext->GetCommand().getToken( 0, ' ', nIndex);
- if (xFieldProperties.is())
- xFieldProperties->setPropertyValue(
- getPropertyName(PROP_MACRO_NAME), uno::makeAny( sMacro ));
-
- //extract quick help text
- if(xFieldProperties.is() && pContext->GetCommand().getLength() > nIndex + 1)
- {
- xFieldProperties->setPropertyValue(
- getPropertyName(PROP_HINT),
- uno::makeAny( pContext->GetCommand().copy( nIndex )));
- }
- }
- break;
- case FIELD_MERGEFIELD :
- {
- //todo: create a database field and fieldmaster pointing to a column, only
- //create a user field and type
- uno::Reference< beans::XPropertySet > xMaster =
- FindOrCreateFieldMaster("com.sun.star.text.FieldMaster.Database", sFirstParam);
-
-// xFieldProperties->setPropertyValue(
-// "FieldCode",
-// uno::makeAny( pContext->GetCommand().copy( nIndex + 1 )));
- uno::Reference< text::XDependentTextField > xDependentField( xFieldInterface, uno::UNO_QUERY_THROW );
- xDependentField->attachTextFieldMaster( xMaster );
- }
- break;
- case FIELD_MERGEREC : break;
- case FIELD_MERGESEQ : break;
- case FIELD_NEXT : break;
- case FIELD_NEXTIF : break;
- case FIELD_PAGE :
- if (xFieldProperties.is())
- {
- xFieldProperties->setPropertyValue(
- getPropertyName(PROP_NUMBERING_TYPE),
- uno::makeAny( lcl_ParseNumberingType(pContext->GetCommand()) ));
- xFieldProperties->setPropertyValue(
- getPropertyName(PROP_SUB_TYPE),
- uno::makeAny( text::PageNumberType_CURRENT ));
- }
-
- break;
- case FIELD_PAGEREF:
- case FIELD_REF:
- if (xFieldProperties.is() && !m_bStartTOC)
- {
- bool bPageRef = aIt->second.eFieldId == FIELD_PAGEREF;
-
- // Do we need a GetReference (default) or a GetExpression field?
- uno::Reference< text::XTextFieldsSupplier > xFieldsSupplier( GetTextDocument(), uno::UNO_QUERY );
- uno::Reference< container::XNameAccess > xFieldMasterAccess = xFieldsSupplier->getTextFieldMasters();
-
- if (!xFieldMasterAccess->hasByName(
- "com.sun.star.text.FieldMaster.SetExpression."
- + sFirstParam))
- {
- xFieldProperties->setPropertyValue(
- getPropertyName(PROP_REFERENCE_FIELD_SOURCE),
- uno::makeAny( sal_Int16(text::ReferenceFieldSource::BOOKMARK)) );
- xFieldProperties->setPropertyValue(
- getPropertyName(PROP_SOURCE_NAME),
- uno::makeAny(sFirstParam) );
- sal_Int16 nFieldPart = (bPageRef ? text::ReferenceFieldPart::PAGE : text::ReferenceFieldPart::TEXT);
- OUString sValue;
- if( lcl_FindInCommand( pContext->GetCommand(), 'p', sValue ))
- {
- //above-below
- nFieldPart = text::ReferenceFieldPart::UP_DOWN;
- }
- else if( lcl_FindInCommand( pContext->GetCommand(), 'r', sValue ))
- {
- //number
- nFieldPart = text::ReferenceFieldPart::NUMBER;
- }
- else if( lcl_FindInCommand( pContext->GetCommand(), 'n', sValue ))
- {
- //number-no-context
- nFieldPart = text::ReferenceFieldPart::NUMBER_NO_CONTEXT;
- }
- else if( lcl_FindInCommand( pContext->GetCommand(), 'w', sValue ))
- {
- //number-full-context
- nFieldPart = text::ReferenceFieldPart::NUMBER_FULL_CONTEXT;
- }
- xFieldProperties->setPropertyValue(
- getPropertyName( PROP_REFERENCE_FIELD_PART ), uno::makeAny( nFieldPart ));
- }
- else if( m_xTextFactory.is() )
- {
- xFieldInterface = m_xTextFactory->createInstance("com.sun.star.text.TextField.GetExpression");
- xFieldProperties.set(xFieldInterface, uno::UNO_QUERY);
- xFieldProperties->setPropertyValue(
- getPropertyName(PROP_CONTENT),
- uno::makeAny(sFirstParam));
- xFieldProperties->setPropertyValue(getPropertyName(PROP_SUB_TYPE), uno::makeAny(text::SetVariableType::STRING));
- }
- }
- break;
- case FIELD_REVNUM : break;
- case FIELD_SAVEDATE :
- SetNumberFormat( pContext->GetCommand(), xFieldProperties );
- break;
- case FIELD_SECTION : break;
- case FIELD_SECTIONPAGES : break;
- case FIELD_SEQ :
- {
- // command looks like: " SEQ Table \* ARABIC "
- OUString sCmd(pContext->GetCommand());
- // find the sequence name, e.g. "SEQ"
- OUString sSeqName = msfilter::util::findQuotedText(sCmd, "SEQ ", '\\');
- sSeqName = sSeqName.trim();
-
- // create a sequence field master using the sequence name
- uno::Reference< beans::XPropertySet > xMaster = FindOrCreateFieldMaster(
- "com.sun.star.text.FieldMaster.SetExpression",
- sSeqName);
-
- xMaster->setPropertyValue(
- getPropertyName(PROP_SUB_TYPE),
- uno::makeAny(text::SetVariableType::SEQUENCE));
-
- // apply the numbering type
- xFieldProperties->setPropertyValue(
- getPropertyName(PROP_NUMBERING_TYPE),
- uno::makeAny( lcl_ParseNumberingType(pContext->GetCommand()) ));
-
- // attach the master to the field
- uno::Reference< text::XDependentTextField > xDependentField( xFieldInterface, uno::UNO_QUERY_THROW );
- xDependentField->attachTextFieldMaster( xMaster );
-
- OUString sFormula = sSeqName + "+1";
- OUString sValue;
- if( lcl_FindInCommand( pContext->GetCommand(), 'c', sValue ))
- {
- sFormula = sSeqName;
- }
- else if( lcl_FindInCommand( pContext->GetCommand(), 'r', sValue ))
- {
- sFormula = sValue;
- }
- // TODO \s isn't handled, but the spec isn't easy to understand without
- // an example for this one.
- xFieldProperties->setPropertyValue(
- getPropertyName(PROP_CONTENT),
- uno::makeAny(sFormula));
-
- // Take care of the numeric formatting definition, default is Arabic
- sal_Int16 nNumberingType = lcl_ParseNumberingType(pContext->GetCommand());
- if (nNumberingType == style::NumberingType::PAGE_DESCRIPTOR)
- nNumberingType = style::NumberingType::ARABIC;
- xFieldProperties->setPropertyValue(
- getPropertyName(PROP_NUMBERING_TYPE),
- uno::makeAny(nNumberingType));
- }
- break;
- case FIELD_SET :
- handleFieldSet(pContext, xFieldInterface, xFieldProperties);
- break;
- case FIELD_SKIPIF : break;
- case FIELD_STYLEREF : break;
- case FIELD_SUBJECT :
- {
- if (!sFirstParam.isEmpty())
- {
- xFieldProperties->setPropertyValue(
- getPropertyName( PROP_IS_FIXED ), uno::makeAny( true ));
- //PROP_CURRENT_PRESENTATION is set later anyway
- }
- }
- break;
- case FIELD_SYMBOL:
- {
- uno::Reference< text::XTextAppend > xTextAppend = m_aTextAppendStack.top().xTextAppend;
- OUString sSymbol( sal_Unicode( sFirstParam.startsWithIgnoreAsciiCase("0x") ? sFirstParam.copy(2).toUInt32(16) : sFirstParam.toUInt32() ) );
- OUString sFont;
- bool bHasFont = lcl_FindInCommand( pContext->GetCommand(), 'f', sFont);
- if ( bHasFont )
- {
- sFont = sFont.trim();
- if (sFont.startsWith("\""))
- sFont = sFont.copy(1);
- if (sFont.endsWith("\""))
- sFont = sFont.copy(0,sFont.getLength()-1);
- }
-
-
-
- if (xTextAppend.is())
- {
- uno::Reference< text::XText > xText = xTextAppend->getText();
- uno::Reference< text::XTextCursor > xCrsr = xText->createTextCursor();
- if (xCrsr.is())
- {
- xCrsr->gotoEnd(false);
- xText->insertString(xCrsr, sSymbol, true);
- uno::Reference< beans::XPropertySet > xProp( xCrsr, uno::UNO_QUERY );
- xProp->setPropertyValue(getPropertyName(PROP_CHAR_FONT_CHAR_SET), uno::makeAny(awt::CharSet::SYMBOL));
- if(bHasFont)
- {
- uno::Any aVal = uno::makeAny( sFont );
- xProp->setPropertyValue(getPropertyName(PROP_CHAR_FONT_NAME), aVal);
- xProp->setPropertyValue(getPropertyName(PROP_CHAR_FONT_NAME_ASIAN), aVal);
- xProp->setPropertyValue(getPropertyName(PROP_CHAR_FONT_NAME_COMPLEX), aVal);
-
- }
- }
- }
- }
- break;
- case FIELD_TEMPLATE: break;
- case FIELD_TIME :
- {
- if (pContext->IsFieldLocked())
- {
- xFieldProperties->setPropertyValue(
- getPropertyName(PROP_IS_FIXED),
- uno::makeAny( true ));
- m_bSetDateValue = true;
- }
- SetNumberFormat( pContext->GetCommand(), xFieldProperties );
- }
- break;
- case FIELD_TITLE :
- {
- if (!sFirstParam.isEmpty())
- {
- xFieldProperties->setPropertyValue(
- getPropertyName( PROP_IS_FIXED ), uno::makeAny( true ));
- //PROP_CURRENT_PRESENTATION is set later anyway
- }
- }
- break;
- case FIELD_USERADDRESS : //todo: user address collects street, city ...
- break;
- case FIELD_INDEX:
- handleIndex(pContext,
- OUString::createFromAscii(aIt->second.cFieldServiceName));
- break;
- case FIELD_BIBLIOGRAPHY:
- handleBibliography(pContext,
- OUString::createFromAscii(aIt->second.cFieldServiceName));
- break;
- case FIELD_TOC:
- handleToc(pContext,
- OUString::createFromAscii(aIt->second.cFieldServiceName));
- break;
- case FIELD_XE:
- {
- if( !m_xTextFactory.is() )
- break;
-
- uno::Reference< beans::XPropertySet > xTC(
- m_xTextFactory->createInstance(
- OUString::createFromAscii(aIt->second.cFieldServiceName)),
- uno::UNO_QUERY_THROW);
- if (!sFirstParam.isEmpty())
- {
- xTC->setPropertyValue("PrimaryKey",
- uno::makeAny(sFirstParam));
- }
- uno::Reference< text::XTextContent > xToInsert( xTC, uno::UNO_QUERY );
- uno::Reference< text::XTextAppend > xTextAppend = m_aTextAppendStack.top().xTextAppend;
- if (xTextAppend.is())
- {
- uno::Reference< text::XText > xText = xTextAppend->getText();
- uno::Reference< text::XTextCursor > xCrsr = xText->createTextCursor();
- if (xCrsr.is())
- {
- xCrsr->gotoEnd(false);
- xText->insertTextContent(uno::Reference< text::XTextRange >( xCrsr, uno::UNO_QUERY_THROW ), xToInsert, false);
- }
- }
- }
- break;
- case FIELD_CITATION:
- {
- if( !m_xTextFactory.is() )
- break;
-
- xFieldInterface = m_xTextFactory->createInstance(
- OUString::createFromAscii(aIt->second.cFieldServiceName));
- uno::Reference< beans::XPropertySet > xTC(xFieldInterface,
- uno::UNO_QUERY_THROW);
- OUString sCmd(pContext->GetCommand());//sCmd is the entire instrText including the index e.g. CITATION Kra06 \l 1033
- if( !sCmd.isEmpty()){
- uno::Sequence<beans::PropertyValue> aValues( comphelper::InitPropertySequence({
- { "Identifier", uno::Any(sCmd) }
- }));
- xTC->setPropertyValue("Fields", uno::makeAny(aValues));
- }
- uno::Reference< text::XTextContent > xToInsert( xTC, uno::UNO_QUERY );
-
- uno::Sequence<beans::PropertyValue> aValues
- = m_aFieldStack.back()->getProperties()->GetPropertyValues();
- appendTextContent(xToInsert, aValues);
- m_bSetCitation = true;
- }
- break;
-
- case FIELD_TC :
- {
- if( !m_xTextFactory.is() )
- break;
-
- uno::Reference< beans::XPropertySet > xTC(
- m_xTextFactory->createInstance(
- OUString::createFromAscii(aIt->second.cFieldServiceName)),
- uno::UNO_QUERY_THROW);
- if (!sFirstParam.isEmpty())
- {
- xTC->setPropertyValue(getPropertyName(PROP_ALTERNATIVE_TEXT),
- uno::makeAny(sFirstParam));
- }
- OUString sValue;
- // \f TC entry in doc with multiple tables
-// if( lcl_FindInCommand( pContext->GetCommand(), 'f', sValue ))
-// {
- // todo: unsupported
-// }
- if( lcl_FindInCommand( pContext->GetCommand(), 'l', sValue ))
- // \l Outline Level
- {
- sal_Int32 nLevel = sValue.toInt32();
- if( !sValue.isEmpty() && nLevel >= 0 && nLevel <= 10 )
- xTC->setPropertyValue(getPropertyName(PROP_LEVEL), uno::makeAny( static_cast<sal_Int16>(nLevel) ));
- }
-// if( lcl_FindInCommand( pContext->GetCommand(), 'n', sValue ))
-// \n Suppress page numbers
-// {
- //todo: unsupported feature
-// }
- pContext->SetTC( xTC );
- }
- break;
- case FIELD_NUMCHARS:
- case FIELD_NUMWORDS:
- case FIELD_NUMPAGES:
- if (xFieldProperties.is())
- xFieldProperties->setPropertyValue(
- getPropertyName(PROP_NUMBERING_TYPE),
- uno::makeAny( lcl_ParseNumberingType(pContext->GetCommand()) ));
- break;
- }
-
- if (!bCreateEnhancedField)
- {
- pContext->SetTextField( uno::Reference<text::XTextField>(xFieldInterface, uno::UNO_QUERY) );
- }
- }
- else
- {
- /* Unsupported fields will be handled here for docx file.
- * To handle unsupported fields used fieldmark API.
- */
- OUString aCode( pContext->GetCommand().trim() );
- // Don't waste resources on wrapping shapes inside a fieldmark.
- if (sType != "SHAPE" && m_xTextFactory.is() && !m_aTextAppendStack.empty())
- {
- xFieldInterface = m_xTextFactory->createInstance("com.sun.star.text.Fieldmark");
-
- uno::Reference<text::XFormField> const xFormField(xFieldInterface, uno::UNO_QUERY);
- InsertFieldmark(m_aTextAppendStack, xFormField, pContext->GetStartRange(),
- pContext->GetFieldId());
- xFormField->setFieldType(ODF_UNHANDLED);
- ++m_nStartGenericField;
- pContext->SetFormField( xFormField );
- uno::Reference<container::XNameContainer> const xNameCont(xFormField->getParameters());
- // note: setting the code to empty string is *required* in
- // m_bForceGenericFields mode, or the export will write
- // the ODF_UNHANDLED string!
- assert(!m_bForceGenericFields || aCode.isEmpty());
- xNameCont->insertByName(ODF_CODE_PARAM, uno::makeAny(aCode));
- ww::eField const id(GetWW8FieldId(sType));
- if (id != ww::eNONE)
- { // tdf#129247 tdf#134264 set WW8 id for WW8 export
- xNameCont->insertByName(ODF_ID_PARAM, uno::makeAny(OUString::number(id)));
- }
- }
- else
- m_bParaHadField = false;
- }
- }
- catch( const uno::Exception& )
- {
- TOOLS_WARN_EXCEPTION( "writerfilter.dmapper", "Exception in CloseFieldCommand()" );
- }
- pContext->SetCommandCompleted();
-}
-/*-------------------------------------------------------------------------
-//the _current_ fields require a string type result while TOCs accept richt results
- -----------------------------------------------------------------------*/
-bool DomainMapper_Impl::IsFieldResultAsString()
-{
- bool bRet = false;
- OSL_ENSURE( !m_aFieldStack.empty(), "field stack empty?");
- FieldContextPtr pContext = m_aFieldStack.back();
- OSL_ENSURE( pContext, "no field context available");
- if( pContext )
- {
- bRet = pContext->GetTextField().is()
- || pContext->GetFieldId() == FIELD_FORMDROPDOWN
- || pContext->GetFieldId() == FIELD_FILLIN;
- }
-
- if (!bRet)
- {
- FieldContextPtr pOuter = GetParentFieldContext(m_aFieldStack);
- if (pOuter)
- {
- if (!IsFieldNestingAllowed(pOuter, m_aFieldStack.back()))
- {
- // If nesting is not allowed, then the result can only be a string.
- bRet = true;
- }
- }
- }
- return bRet;
-}
-
-void DomainMapper_Impl::AppendFieldResult(std::u16string_view rString)
-{
- assert(!m_aFieldStack.empty());
- FieldContextPtr pContext = m_aFieldStack.back();
- SAL_WARN_IF(!pContext, "writerfilter.dmapper", "no field context");
- if (!pContext)
- return;
-
- FieldContextPtr pOuter = GetParentFieldContext(m_aFieldStack);
- if (pOuter)
- {
- if (!IsFieldNestingAllowed(pOuter, pContext))
- {
- if (pOuter->IsCommandCompleted())
- {
- // Child can't host the field result, forward to parent's result.
- pOuter->AppendResult(rString);
- }
- return;
- }
- }
-
- pContext->AppendResult(rString);
-}
-
-// Calculates css::DateTime based on ddddd.sssss since 1900-1-0
-static util::DateTime lcl_dateTimeFromSerial(const double& dSerial)
-{
- const sal_uInt32 secondsPerDay = 86400;
- const sal_uInt16 secondsPerHour = 3600;
-
- DateTime d(Date(30, 12, 1899));
- d.AddDays( static_cast<sal_Int32>(dSerial) );
-
- double frac = std::modf(dSerial, &o3tl::temporary(double()));
- sal_uInt32 seconds = frac * secondsPerDay;
-
- util::DateTime date;
- date.Year = d.GetYear();
- date.Month = d.GetMonth();
- date.Day = d.GetDay();
- date.Hours = seconds / secondsPerHour;
- date.Minutes = (seconds % secondsPerHour) / 60;
- date.Seconds = seconds % 60;
-
- return date;
-}
-
-void DomainMapper_Impl::SetFieldResult(OUString const& rResult)
-{
-#ifdef DBG_UTIL
- TagLogger::getInstance().startElement("setFieldResult");
- TagLogger::getInstance().chars(rResult);
-#endif
-
- FieldContextPtr pContext = m_aFieldStack.back();
- OSL_ENSURE( pContext, "no field context available");
-
- if (m_aFieldStack.size() > 1)
- {
- // This is a nested field. See if the parent supports nesting on the Writer side.
- FieldContextPtr pParentContext = m_aFieldStack[m_aFieldStack.size() - 2];
- if (pParentContext)
- {
- std::vector<OUString> aParentParts = pParentContext->GetCommandParts();
- // Conditional text fields don't support nesting in Writer.
- if (!aParentParts.empty() && aParentParts[0] == "IF")
- {
- return;
- }
- }
- }
-
- if( !pContext )
- return;
-
- uno::Reference<text::XTextField> xTextField = pContext->GetTextField();
- try
- {
- OSL_ENSURE( xTextField.is()
- //||m_xTOC.is() ||m_xTC.is()
- //||m_sHyperlinkURL.getLength()
- , "DomainMapper_Impl::SetFieldResult: field not created" );
- if(xTextField.is())
- {
- try
- {
- if( m_bSetUserFieldContent )
- {
- // user field content has to be set at the field master
- uno::Reference< text::XDependentTextField > xDependentField( xTextField, uno::UNO_QUERY_THROW );
- xDependentField->getTextFieldMaster()->setPropertyValue(
- getPropertyName(PROP_CONTENT),
- uno::makeAny( rResult ));
- }
- else if ( m_bSetCitation )
- {
-
- uno::Reference< beans::XPropertySet > xFieldProperties( xTextField, uno::UNO_QUERY_THROW);
- // In case of SetExpression, the field result contains the content of the variable.
- uno::Reference<lang::XServiceInfo> xServiceInfo(xTextField, uno::UNO_QUERY);
-
- bool bIsSetbiblio = xServiceInfo->supportsService("com.sun.star.text.TextField.Bibliography");
- if( bIsSetbiblio )
- {
- uno::Any aProperty = xFieldProperties->getPropertyValue("Fields");
- uno::Sequence<beans::PropertyValue> aValues ;
- aProperty >>= aValues;
- beans::PropertyValue propertyVal;
- sal_Int32 nTitleFoundIndex = -1;
- for (sal_Int32 i = 0; i < aValues.getLength(); ++i)
- {
- propertyVal = aValues[i];
- if (propertyVal.Name == "Title")
- {
- nTitleFoundIndex = i;
- break;
- }
- }
- if (nTitleFoundIndex != -1)
- {
- OUString titleStr;
- uno::Any aValue(propertyVal.Value);
- aValue >>= titleStr;
- titleStr += rResult;
- propertyVal.Value <<= titleStr;
- aValues[nTitleFoundIndex] = propertyVal;
- }
- else
- {
- aValues.realloc(aValues.getLength() + 1);
- propertyVal.Name = "Title";
- propertyVal.Value <<= rResult;
- aValues[aValues.getLength() - 1] = propertyVal;
- }
- xFieldProperties->setPropertyValue("Fields",
- uno::makeAny(aValues));
- }
- }
- else if ( m_bSetDateValue )
- {
- uno::Reference< util::XNumberFormatsSupplier > xNumberSupplier( m_xTextDocument, uno::UNO_QUERY_THROW );
-
- uno::Reference<util::XNumberFormatter> xFormatter(util::NumberFormatter::create(m_xComponentContext), uno::UNO_QUERY_THROW);
- xFormatter->attachNumberFormatsSupplier( xNumberSupplier );
- sal_Int32 nKey = 0;
-
- uno::Reference< beans::XPropertySet > xFieldProperties( xTextField, uno::UNO_QUERY_THROW);
-
- xFieldProperties->getPropertyValue( "NumberFormat" ) >>= nKey;
- xFieldProperties->setPropertyValue(
- "DateTimeValue",
- uno::makeAny( lcl_dateTimeFromSerial( xFormatter->convertStringToNumber( nKey, rResult ) ) ) );
- }
- else
- {
- uno::Reference< beans::XPropertySet > xFieldProperties( xTextField, uno::UNO_QUERY_THROW);
- // In case of SetExpression, and Input fields the field result contains the content of the variable.
- uno::Reference<lang::XServiceInfo> xServiceInfo(xTextField, uno::UNO_QUERY);
- // there are fields with a content property, which aren't working correctly with
- // a generalized try catch of the content, property, so just restrict content
- // handling to these explicit services.
- const bool bHasContent = xServiceInfo->supportsService("com.sun.star.text.TextField.SetExpression") ||
- xServiceInfo->supportsService("com.sun.star.text.TextField.Input");
- // If we already have content set, then use the current presentation
- OUString sValue;
- if (bHasContent)
- {
- // this will throw for field types without Content
- uno::Any aValue(xFieldProperties->getPropertyValue(
- getPropertyName(PROP_CONTENT)));
- aValue >>= sValue;
- }
- xFieldProperties->setPropertyValue(
- getPropertyName(bHasContent && sValue.isEmpty()? PROP_CONTENT : PROP_CURRENT_PRESENTATION),
- uno::makeAny( rResult ));
- }
- }
- catch( const beans::UnknownPropertyException& )
- {
- //some fields don't have a CurrentPresentation (DateTime)
- }
- }
- }
- catch (const uno::Exception&)
- {
- TOOLS_WARN_EXCEPTION("writerfilter.dmapper", "DomainMapper_Impl::SetFieldResult");
- }
-}
-
-void DomainMapper_Impl::SetFieldFFData(const FFDataHandler::Pointer_t& pFFDataHandler)
-{
-#ifdef DBG_UTIL
- TagLogger::getInstance().startElement("setFieldFFData");
-#endif
-
- if (!m_aFieldStack.empty())
- {
- FieldContextPtr pContext = m_aFieldStack.back();
- if (pContext)
- {
- pContext->setFFDataHandler(pFFDataHandler);
- }
- }
-
-#ifdef DBG_UTIL
- TagLogger::getInstance().endElement();
-#endif
-}
-
-void DomainMapper_Impl::PopFieldContext()
-{
- if(m_bDiscardHeaderFooter)
- return;
-#ifdef DBG_UTIL
- TagLogger::getInstance().element("popFieldContext");
-#endif
-
- if (m_aFieldStack.empty())
- return;
-
- FieldContextPtr pContext = m_aFieldStack.back();
- OSL_ENSURE( pContext, "no field context available");
- if( pContext )
- {
- if( !pContext->IsCommandCompleted() )
- CloseFieldCommand();
-
- if (!pContext->GetResult().isEmpty())
- {
- uno::Reference< beans::XPropertySet > xFieldProperties = pContext->GetCustomField();
- if(xFieldProperties.is())
- SetNumberFormat( pContext->GetResult(), xFieldProperties, true );
- SetFieldResult( pContext->GetResult() );
- }
-
- //insert the field, TC or TOC
- uno::Reference< text::XTextAppend > xTextAppend;
- if (!m_aTextAppendStack.empty())
- xTextAppend = m_aTextAppendStack.top().xTextAppend;
- if(xTextAppend.is())
- {
- try
- {
- uno::Reference< text::XTextCursor > xCrsr = xTextAppend->createTextCursorByRange(pContext->GetStartRange());
- uno::Reference< text::XTextContent > xToInsert( pContext->GetTOC(), uno::UNO_QUERY );
- if( xToInsert.is() )
- {
- if (m_bStartedTOC || m_bStartIndex || m_bStartBibliography)
- {
- // inside SDT, last empty paragraph is also part of index
- if (!m_bParaChanged && !m_xSdtEntryStart)
- {
- // End of index is the first item on a new paragraph - this paragraph
- // should not be part of index
- auto xCursor
- = xTextAppend->createTextCursorByRange(xTextAppend->getEnd());
- xCursor->gotoEnd(false);
- xCursor->goLeft(1, true);
- // delete
- xCursor->setString(OUString());
- // But a new paragraph should be started after the index instead
- xTextAppend->finishParagraph(css::beans::PropertyValues());
- }
- m_bStartedTOC = false;
- m_aTextAppendStack.pop();
- m_bTextInserted = false;
- m_bParaChanged = true; // the paragraph must stay anyway
- }
- m_bStartTOC = false;
- m_bStartIndex = false;
- m_bStartBibliography = false;
- if (IsInHeaderFooter() && m_bStartTOCHeaderFooter)
- m_bStartTOCHeaderFooter = false;
- }
- else
- {
- xToInsert.set(pContext->GetTC(), uno::UNO_QUERY);
- if( !xToInsert.is() && !m_bStartTOC && !m_bStartIndex && !m_bStartBibliography )
- xToInsert = pContext->GetTextField();
- if( xToInsert.is() && !m_bStartTOC && !m_bStartIndex && !m_bStartBibliography)
- {
- PropertyMap aMap;
- // Character properties of the field show up here the
- // last (always empty) run. Inherit character
- // properties from there.
- // Also merge in the properties from the field context,
- // e.g. SdtEndBefore.
- if (m_pLastCharacterContext)
- aMap.InsertProps(m_pLastCharacterContext);
- aMap.InsertProps(m_aFieldStack.back()->getProperties());
- appendTextContent(xToInsert, aMap.GetPropertyValues());
- CheckRedline( xToInsert->getAnchor( ) );
- }
- else
- {
- FormControlHelper::Pointer_t pFormControlHelper(pContext->getFormControlHelper());
- if (pFormControlHelper)
- {
- uno::Reference< text::XFormField > xFormField( pContext->GetFormField() );
- assert(xCrsr.is());
- if (pFormControlHelper->hasFFDataHandler())
- {
- xToInsert.set(xFormField, uno::UNO_QUERY);
- if (xFormField.is() && xToInsert.is())
- {
- PopFieldmark(m_aTextAppendStack, xCrsr,
- pContext->GetFieldId());
- pFormControlHelper->processField( xFormField );
- }
- else
- {
- pFormControlHelper->insertControl(xCrsr);
- }
- }
- else
- {
- PopFieldmark(m_aTextAppendStack, xCrsr,
- pContext->GetFieldId());
- uno::Reference<lang::XComponent>(xFormField, uno::UNO_QUERY_THROW)->dispose(); // presumably invalid?
- }
- }
- else if (!pContext->GetHyperlinkURL().isEmpty() && xCrsr.is())
- {
- xCrsr->gotoEnd( true );
-
- // Draw components (like comments) need hyperlinks set differently
- SvxUnoTextRangeBase* pDrawText = dynamic_cast<SvxUnoTextRangeBase*>(xCrsr.get());
- if ( pDrawText )
- pDrawText->attachField( std::make_unique<SvxURLField>(pContext->GetHyperlinkURL(), xCrsr->getString(), SvxURLFormat::AppDefault) );
- else
- {
- uno::Reference< beans::XPropertySet > xCrsrProperties( xCrsr, uno::UNO_QUERY_THROW );
- xCrsrProperties->setPropertyValue(getPropertyName(PROP_HYPER_LINK_U_R_L), uno::
- makeAny(pContext->GetHyperlinkURL()));
-
- if (!pContext->GetHyperlinkTarget().isEmpty())
- xCrsrProperties->setPropertyValue("HyperLinkTarget", uno::makeAny(pContext->GetHyperlinkTarget()));
-
- if (m_bStartTOC) {
- OUString sDisplayName("Index Link");
- xCrsrProperties->setPropertyValue("VisitedCharStyleName",uno::makeAny(sDisplayName));
- xCrsrProperties->setPropertyValue("UnvisitedCharStyleName",uno::makeAny(sDisplayName));
- }
- else
- {
- uno::Any aAny = xCrsrProperties->getPropertyValue("CharStyleName");
- OUString charStyle;
- if (css::uno::fromAny(aAny, &charStyle))
- {
- if (charStyle.isEmpty())
- {
- xCrsrProperties->setPropertyValue("VisitedCharStyleName", uno::makeAny(OUString("Default Style")));
- xCrsrProperties->setPropertyValue("UnvisitedCharStyleName", uno::makeAny(OUString("Default Style")));
- }
- else if (charStyle.equalsIgnoreAsciiCase("Internet Link"))
- {
- xCrsrProperties->setPropertyValue("CharStyleName", uno::makeAny(OUString("Default Style")));
- }
- else
- {
- xCrsrProperties->setPropertyValue("VisitedCharStyleName", aAny);
- xCrsrProperties->setPropertyValue("UnvisitedCharStyleName", aAny);
- }
- }
- }
- }
- }
- else if (m_nStartGenericField != 0)
- {
- --m_nStartGenericField;
- PopFieldmark(m_aTextAppendStack, xCrsr, pContext->GetFieldId());
- if(m_bTextInserted)
- {
- m_bTextInserted = false;
- }
- }
- }
- }
- }
- catch(const lang::IllegalArgumentException&)
- {
- TOOLS_WARN_EXCEPTION( "writerfilter", "PopFieldContext()" );
- }
- catch(const uno::Exception&)
- {
- TOOLS_WARN_EXCEPTION( "writerfilter", "PopFieldContext()" );
- }
- }
-
- //TOCs have to include all the imported content
- }
-
- std::vector<FieldParagraph> aParagraphsToFinish;
- if (pContext)
- {
- aParagraphsToFinish = pContext->GetParagraphsToFinish();
- }
-
- //remove the field context
- m_aFieldStack.pop_back();
-
- // Finish the paragraph(s) now that the field is closed.
- for (const auto& rFinish : aParagraphsToFinish)
- {
- finishParagraph(rFinish.m_pPropertyMap, rFinish.m_bRemove);
- }
-}
-
-
-void DomainMapper_Impl::SetBookmarkName( const OUString& rBookmarkName )
-{
- BookmarkMap_t::iterator aBookmarkIter = m_aBookmarkMap.find( m_sCurrentBkmkId );
- if( aBookmarkIter != m_aBookmarkMap.end() )
- {
- // fields are internal bookmarks: consume redundant "normal" bookmark
- if ( IsOpenField() )
- {
- FFDataHandler::Pointer_t pFFDataHandler(GetTopFieldContext()->getFFDataHandler());
- if (pFFDataHandler && pFFDataHandler->getName() == rBookmarkName)
- {
- // HACK: At the END marker, StartOrEndBookmark will START
- // a bookmark which will eventually be abandoned, not created.
- m_aBookmarkMap.erase(aBookmarkIter);
- return;
- }
- }
-
- aBookmarkIter->second.m_sBookmarkName = rBookmarkName;
- }
- else
- m_sCurrentBkmkName = rBookmarkName;
-}
-
-// This method was used as-is for DomainMapper_Impl::startOrEndPermissionRange() implementation.
-void DomainMapper_Impl::StartOrEndBookmark( const OUString& rId )
-{
- /*
- * Add the dummy paragraph to handle section properties
- * iff the first element in the section is a table. If the dummy para is not added yet, then add it;
- * So bookmark is not attached to the wrong paragraph.
- */
- if(hasTableManager() && getTableManager().isInCell() && m_nTableDepth == 0 && GetIsFirstParagraphInSection()
- && !GetIsDummyParaAddedForTableInSection() &&!GetIsTextFrameInserted())
- {
- AddDummyParaForTableInSection();
- }
-
- bool bIsAfterDummyPara = GetIsDummyParaAddedForTableInSection() && GetIsFirstParagraphInSection();
- if (m_aTextAppendStack.empty())
- return;
- uno::Reference< text::XTextAppend > xTextAppend = m_aTextAppendStack.top().xTextAppend;
- BookmarkMap_t::iterator aBookmarkIter = m_aBookmarkMap.find( rId );
- //is the bookmark name already registered?
- try
- {
- if( aBookmarkIter != m_aBookmarkMap.end() )
- {
- if (m_xTextFactory.is())
- {
- uno::Reference< text::XTextContent > xBookmark( m_xTextFactory->createInstance( "com.sun.star.text.Bookmark" ), uno::UNO_QUERY_THROW );
- uno::Reference< text::XTextCursor > xCursor;
- uno::Reference< text::XText > xText = aBookmarkIter->second.m_xTextRange->getText();
- if( aBookmarkIter->second.m_bIsStartOfText && !bIsAfterDummyPara)
- {
- xCursor = xText->createTextCursorByRange( xText->getStart() );
- }
- else
- {
- xCursor = xText->createTextCursorByRange( aBookmarkIter->second.m_xTextRange );
- xCursor->goRight( 1, false );
- }
-
- xCursor->gotoRange( xTextAppend->getEnd(), true );
- // A Paragraph was recently finished, and a new Paragraph has not been started as yet
- // then move the bookmark-End to the earlier paragraph
- if (IsOutsideAParagraph())
- {
- xCursor->goLeft( 1, false );
- }
- uno::Reference< container::XNamed > xBkmNamed( xBookmark, uno::UNO_QUERY_THROW );
- assert(!aBookmarkIter->second.m_sBookmarkName.isEmpty());
- //todo: make sure the name is not used already!
- xBkmNamed->setName( aBookmarkIter->second.m_sBookmarkName );
- xTextAppend->insertTextContent( uno::Reference< text::XTextRange >( xCursor, uno::UNO_QUERY_THROW), xBookmark, !xCursor->isCollapsed() );
- }
- m_aBookmarkMap.erase( aBookmarkIter );
- m_sCurrentBkmkId.clear();
- }
- else
- {
- //otherwise insert a text range as marker
- bool bIsStart = true;
- uno::Reference< text::XTextRange > xCurrent;
- if (xTextAppend.is())
- {
- uno::Reference<text::XTextCursor> const xCursor =
- xTextAppend->createTextCursorByRange(
- m_aTextAppendStack.top().xInsertPosition.is()
- ? m_aTextAppendStack.top().xInsertPosition
- : xTextAppend->getEnd() );
-
- if (!xCursor)
- return;
-
- if (!bIsAfterDummyPara)
- bIsStart = !xCursor->goLeft(1, false);
- xCurrent = xCursor->getStart();
- }
- m_sCurrentBkmkId = rId;
- m_aBookmarkMap.emplace( rId, BookmarkInsertPosition( bIsStart, m_sCurrentBkmkName, xCurrent ) );
- m_sCurrentBkmkName.clear();
- }
- }
- catch( const uno::Exception& )
- {
- //TODO: What happens to bookmarks where start and end are at different XText objects?
- }
-}
-
-void DomainMapper_Impl::setPermissionRangeEd(const OUString& user)
-{
- PermMap_t::iterator aPremIter = m_aPermMap.find(m_sCurrentPermId);
- if (aPremIter != m_aPermMap.end())
- aPremIter->second.m_Ed = user;
- else
- m_sCurrentPermEd = user;
-}
-
-void DomainMapper_Impl::setPermissionRangeEdGrp(const OUString& group)
-{
- PermMap_t::iterator aPremIter = m_aPermMap.find(m_sCurrentPermId);
- if (aPremIter != m_aPermMap.end())
- aPremIter->second.m_EdGrp = group;
- else
- m_sCurrentPermEdGrp = group;
-}
-
-// This method is based on implementation from DomainMapper_Impl::StartOrEndBookmark()
-void DomainMapper_Impl::startOrEndPermissionRange(sal_Int32 permissinId)
-{
- /*
- * Add the dummy paragraph to handle section properties
- * if the first element in the section is a table. If the dummy para is not added yet, then add it;
- * So permission is not attached to the wrong paragraph.
- */
- if (getTableManager().isInCell() && m_nTableDepth == 0 && GetIsFirstParagraphInSection()
- && !GetIsDummyParaAddedForTableInSection() && !GetIsTextFrameInserted())
- {
- AddDummyParaForTableInSection();
- }
-
- if (m_aTextAppendStack.empty())
- return;
-
- const bool bIsAfterDummyPara = GetIsDummyParaAddedForTableInSection() && GetIsFirstParagraphInSection();
-
- uno::Reference< text::XTextAppend > xTextAppend = m_aTextAppendStack.top().xTextAppend;
- PermMap_t::iterator aPermIter = m_aPermMap.find(permissinId);
-
- //is the bookmark name already registered?
- try
- {
- if (aPermIter == m_aPermMap.end())
- {
- //otherwise insert a text range as marker
- bool bIsStart = true;
- uno::Reference< text::XTextRange > xCurrent;
- if (xTextAppend.is())
- {
- uno::Reference< text::XTextCursor > xCursor = xTextAppend->createTextCursorByRange(xTextAppend->getEnd());
-
- if (!bIsAfterDummyPara)
- bIsStart = !xCursor->goLeft(1, false);
- xCurrent = xCursor->getStart();
- }
-
- // register the start of the new permission
- m_sCurrentPermId = permissinId;
- m_aPermMap.emplace(permissinId, PermInsertPosition(bIsStart, permissinId, m_sCurrentPermEd, m_sCurrentPermEdGrp, xCurrent));
-
- // clean up
- m_sCurrentPermEd.clear();
- m_sCurrentPermEdGrp.clear();
- }
- else
- {
- if (m_xTextFactory.is())
- {
- uno::Reference< text::XTextCursor > xCursor;
- uno::Reference< text::XText > xText = aPermIter->second.m_xTextRange->getText();
- if (aPermIter->second.m_bIsStartOfText && !bIsAfterDummyPara)
- {
- xCursor = xText->createTextCursorByRange(xText->getStart());
- }
- else
- {
- xCursor = xText->createTextCursorByRange(aPermIter->second.m_xTextRange);
- xCursor->goRight(1, false);
- }
-
- xCursor->gotoRange(xTextAppend->getEnd(), true);
- // A Paragraph was recently finished, and a new Paragraph has not been started as yet
- // then move the bookmark-End to the earlier paragraph
- if (IsOutsideAParagraph())
- {
- xCursor->goLeft(1, false);
- }
-
- // create a new bookmark using specific bookmark name pattern for permissions
- uno::Reference< text::XTextContent > xPerm(m_xTextFactory->createInstance("com.sun.star.text.Bookmark"), uno::UNO_QUERY_THROW);
- uno::Reference< container::XNamed > xPermNamed(xPerm, uno::UNO_QUERY_THROW);
- xPermNamed->setName(aPermIter->second.createBookmarkName());
-
- // add new bookmark
- const bool bAbsorb = !xCursor->isCollapsed();
- uno::Reference< text::XTextRange > xCurrent(xCursor, uno::UNO_QUERY_THROW);
- xTextAppend->insertTextContent(xCurrent, xPerm, bAbsorb);
- }
-
- // remove processed permission
- m_aPermMap.erase(aPermIter);
-
- // clean up
- m_sCurrentPermId = 0;
- m_sCurrentPermEd.clear();
- m_sCurrentPermEdGrp.clear();
- }
- }
- catch (const uno::Exception&)
- {
- //TODO: What happens to bookmarks where start and end are at different XText objects?
- }
-}
-
-void DomainMapper_Impl::AddAnnotationPosition(
- const bool bStart,
- const sal_Int32 nAnnotationId)
-{
- if (m_aTextAppendStack.empty())
- return;
-
- // Create a cursor, pointing to the current position.
- uno::Reference<text::XTextAppend> xTextAppend = m_aTextAppendStack.top().xTextAppend;
- uno::Reference<text::XTextRange> xCurrent;
- if (xTextAppend.is())
- {
- uno::Reference<text::XTextCursor> xCursor;
- if (m_bIsNewDoc)
- xCursor = xTextAppend->createTextCursorByRange(xTextAppend->getEnd());
- else
- xCursor = m_aTextAppendStack.top().xCursor;
- if (xCursor.is())
- xCurrent = xCursor->getStart();
- }
-
- // And save it, to be used by PopAnnotation() later.
- AnnotationPosition& aAnnotationPosition = m_aAnnotationPositions[ nAnnotationId ];
- if (bStart)
- {
- aAnnotationPosition.m_xStart = xCurrent;
- }
- else
- {
- aAnnotationPosition.m_xEnd = xCurrent;
- }
- m_aAnnotationPositions[ nAnnotationId ] = aAnnotationPosition;
-}
-
-GraphicImportPtr const & DomainMapper_Impl::GetGraphicImport(GraphicImportType eGraphicImportType)
-{
- if(!m_pGraphicImport)
- m_pGraphicImport = new GraphicImport( m_xComponentContext, m_xTextFactory, m_rDMapper, eGraphicImportType, m_aPositionOffsets, m_aAligns, m_aPositivePercentages );
- return m_pGraphicImport;
-}
-/*-------------------------------------------------------------------------
- reset graphic import if the last import resulted in a shape, not a graphic
- -----------------------------------------------------------------------*/
-void DomainMapper_Impl::ResetGraphicImport()
-{
- m_pGraphicImport.clear();
-}
-
-
-void DomainMapper_Impl::ImportGraphic(const writerfilter::Reference< Properties >::Pointer_t& ref, GraphicImportType eGraphicImportType)
-{
- GetGraphicImport(eGraphicImportType);
- if( eGraphicImportType != IMPORT_AS_DETECTED_INLINE && eGraphicImportType != IMPORT_AS_DETECTED_ANCHOR )
- {
- //create the graphic
- ref->resolve( *m_pGraphicImport );
- }
-
- //insert it into the document at the current cursor position
-
- uno::Reference<text::XTextContent> xTextContent
- (m_pGraphicImport->GetGraphicObject());
-
- // In case the SDT starts with the text portion of the graphic, then set the SDT properties here.
- bool bHasGrabBag = false;
- uno::Reference<beans::XPropertySet> xPropertySet(xTextContent, uno::UNO_QUERY);
- if (xPropertySet.is())
- {
- uno::Reference<beans::XPropertySetInfo> xPropertySetInfo = xPropertySet->getPropertySetInfo();
- bHasGrabBag = xPropertySetInfo->hasPropertyByName("FrameInteropGrabBag");
- // In case we're outside a paragraph, then the SDT properties are stored in the paragraph grab-bag, not the frame one.
- if (!m_pSdtHelper->isInteropGrabBagEmpty() && bHasGrabBag && !m_pSdtHelper->isOutsideAParagraph())
- {
- comphelper::SequenceAsHashMap aFrameGrabBag(xPropertySet->getPropertyValue("FrameInteropGrabBag"));
- aFrameGrabBag["SdtPr"] <<= m_pSdtHelper->getInteropGrabBagAndClear();
- xPropertySet->setPropertyValue("FrameInteropGrabBag", uno::makeAny(aFrameGrabBag.getAsConstPropertyValueList()));
- }
- }
-
- /* Set "SdtEndBefore" property on Drawing.
- * It is required in a case when Drawing appears immediately after first run i.e.
- * there is no text/space/tab in between two runs.
- * In this case "SdtEndBefore" property needs to be set on Drawing.
- */
- if(IsSdtEndBefore())
- {
- if(xPropertySet.is() && bHasGrabBag)
- {
- uno::Sequence<beans::PropertyValue> aFrameGrabBag( comphelper::InitPropertySequence({
- { "SdtEndBefore", uno::Any(true) }
- }));
- xPropertySet->setPropertyValue("FrameInteropGrabBag",uno::makeAny(aFrameGrabBag));
- }
- }
-
-
- // Update the shape properties if it is embedded object.
- if(m_xEmbedded.is()){
- if (m_pGraphicImport->GetXShapeObject())
- m_pGraphicImport->GetXShapeObject()->setPosition(
- m_pGraphicImport->GetGraphicObjectPosition());
-
- uno::Reference<drawing::XShape> xShape = m_pGraphicImport->GetXShapeObject();
- UpdateEmbeddedShapeProps(xShape);
- if (eGraphicImportType == IMPORT_AS_DETECTED_ANCHOR)
- {
- uno::Reference<beans::XPropertySet> xEmbeddedProps(m_xEmbedded, uno::UNO_QUERY);
- xEmbeddedProps->setPropertyValue("AnchorType", uno::makeAny(text::TextContentAnchorType_AT_CHARACTER));
- uno::Reference<beans::XPropertySet> xShapeProps(xShape, uno::UNO_QUERY);
- xEmbeddedProps->setPropertyValue("HoriOrient", xShapeProps->getPropertyValue("HoriOrient"));
- xEmbeddedProps->setPropertyValue("HoriOrientPosition", xShapeProps->getPropertyValue("HoriOrientPosition"));
- xEmbeddedProps->setPropertyValue("HoriOrientRelation", xShapeProps->getPropertyValue("HoriOrientRelation"));
- xEmbeddedProps->setPropertyValue("VertOrient", xShapeProps->getPropertyValue("VertOrient"));
- xEmbeddedProps->setPropertyValue("VertOrientPosition", xShapeProps->getPropertyValue("VertOrientPosition"));
- xEmbeddedProps->setPropertyValue("VertOrientRelation", xShapeProps->getPropertyValue("VertOrientRelation"));
- //tdf123873 fix missing textwrap import
- xEmbeddedProps->setPropertyValue("TextWrap", xShapeProps->getPropertyValue("TextWrap"));
- }
- }
- //insert it into the document at the current cursor position
- OSL_ENSURE( xTextContent.is(), "DomainMapper_Impl::ImportGraphic");
- if( xTextContent.is())
- {
- appendTextContent( xTextContent, uno::Sequence< beans::PropertyValue >() );
-
- if (eGraphicImportType == IMPORT_AS_DETECTED_ANCHOR && !m_aTextAppendStack.empty())
- {
- // Remember this object is anchored to the current paragraph.
- AnchoredObjectInfo aInfo;
- aInfo.m_xAnchoredObject = xTextContent;
- if (m_pGraphicImport)
- {
- // We still have the graphic import around, remember the original margin, so later
- // SectionPropertyMap::HandleIncreasedAnchoredObjectSpacing() can use it.
- aInfo.m_nLeftMargin = m_pGraphicImport->GetLeftMarginOrig();
- }
- m_aTextAppendStack.top().m_aAnchoredObjects.push_back(aInfo);
- }
- else if (eGraphicImportType == IMPORT_AS_DETECTED_INLINE)
- m_bParaWithInlineObject = true;
- }
-
- // Clear the reference, so in case the embedded object is inside a
- // TextFrame, we won't try to resize it (to match the size of the
- // TextFrame) here.
- m_xEmbedded.clear();
- m_pGraphicImport.clear();
-}
-
-
-void DomainMapper_Impl::SetLineNumbering( sal_Int32 nLnnMod, sal_uInt32 nLnc, sal_Int32 ndxaLnn )
-{
- if( !m_bLineNumberingSet )
- {
- try
- {
- uno::Reference< text::XLineNumberingProperties > xLineProperties( m_xTextDocument, uno::UNO_QUERY_THROW );
- uno::Reference< beans::XPropertySet > xProperties = xLineProperties->getLineNumberingProperties();
- uno::Any aTrue( uno::makeAny( true ));
- xProperties->setPropertyValue( getPropertyName( PROP_IS_ON ), aTrue);
- xProperties->setPropertyValue( getPropertyName( PROP_COUNT_EMPTY_LINES ), aTrue );
- xProperties->setPropertyValue( getPropertyName( PROP_COUNT_LINES_IN_FRAMES ), uno::makeAny( false ) );
- xProperties->setPropertyValue( getPropertyName( PROP_INTERVAL ), uno::makeAny( static_cast< sal_Int16 >( nLnnMod )));
- xProperties->setPropertyValue( getPropertyName( PROP_DISTANCE ), uno::makeAny( ConversionHelper::convertTwipToMM100(ndxaLnn) ));
- xProperties->setPropertyValue( getPropertyName( PROP_NUMBER_POSITION ), uno::makeAny( style::LineNumberPosition::LEFT));
- xProperties->setPropertyValue( getPropertyName( PROP_NUMBERING_TYPE ), uno::makeAny( style::NumberingType::ARABIC));
- xProperties->setPropertyValue( getPropertyName( PROP_RESTART_AT_EACH_PAGE ), uno::makeAny( nLnc == NS_ooxml::LN_Value_ST_LineNumberRestart_newPage ));
- }
- catch( const uno::Exception& )
- {}
- }
- m_bLineNumberingSet = true;
- uno::Reference< style::XStyleFamiliesSupplier > xStylesSupplier( GetTextDocument(), uno::UNO_QUERY_THROW );
- uno::Reference< container::XNameAccess > xStyleFamilies = xStylesSupplier->getStyleFamilies();
- uno::Reference<container::XNameContainer> xStyles;
- xStyleFamilies->getByName(getPropertyName( PROP_PARAGRAPH_STYLES )) >>= xStyles;
- lcl_linenumberingHeaderFooter( xStyles, "Header", this );
- lcl_linenumberingHeaderFooter( xStyles, "Footer", this );
-}
-
-
-void DomainMapper_Impl::SetPageMarginTwip( PageMarElement eElement, sal_Int32 nValue )
-{
- nValue = ConversionHelper::convertTwipToMM100(nValue);
- switch(eElement)
- {
- case PAGE_MAR_TOP : m_aPageMargins.top = nValue; break;
- case PAGE_MAR_RIGHT : m_aPageMargins.right = nValue; break;
- case PAGE_MAR_BOTTOM : m_aPageMargins.bottom = nValue; break;
- case PAGE_MAR_LEFT : m_aPageMargins.left = nValue; break;
- case PAGE_MAR_HEADER : m_aPageMargins.header = nValue; break;
- case PAGE_MAR_FOOTER : m_aPageMargins.footer = nValue; break;
- case PAGE_MAR_GUTTER : break;
- }
-}
-
-
-PageMar::PageMar()
- : top(ConversionHelper::convertTwipToMM100( sal_Int32(1440)))
- // This is strange, the RTF spec says it's 1800, but it's clearly 1440 in Word
- // OOXML seems not to specify a default value
- , right(ConversionHelper::convertTwipToMM100( sal_Int32(1440)))
- , bottom(top)
- , left(right)
- , header(ConversionHelper::convertTwipToMM100(sal_Int32(720)))
- , footer(header)
-{
-}
-
-
-void DomainMapper_Impl::RegisterFrameConversion(
- uno::Reference< text::XTextRange > const& xFrameStartRange,
- uno::Reference< text::XTextRange > const& xFrameEndRange,
- const std::vector<beans::PropertyValue>& rFrameProperties
- )
-{
- OSL_ENSURE(
- m_aFrameProperties.empty() && !m_xFrameStartRange.is() && !m_xFrameEndRange.is(),
- "frame properties not removed");
- m_aFrameProperties = rFrameProperties;
- m_xFrameStartRange = xFrameStartRange;
- m_xFrameEndRange = xFrameEndRange;
-}
-
-
-void DomainMapper_Impl::ExecuteFrameConversion()
-{
- if( m_xFrameStartRange.is() && m_xFrameEndRange.is() && !m_bDiscardHeaderFooter )
- {
- std::vector<sal_Int32> redPos, redLen;
- try
- {
- uno::Reference< text::XTextAppendAndConvert > xTextAppendAndConvert( GetTopTextAppend(), uno::UNO_QUERY_THROW );
- // convert redline ranges to cursor movement and character length
-
- for( size_t i = 0; i < aFramedRedlines.size(); i+=3)
- {
- uno::Reference< text::XTextRange > xRange;
- aFramedRedlines[i] >>= xRange;
- uno::Reference<text::XTextCursor> xRangeCursor = GetTopTextAppend()->createTextCursorByRange( xRange );
- if (xRangeCursor.is())
- {
- sal_Int32 nLen = xRange->getString().getLength();
- redLen.push_back(nLen);
- xRangeCursor->gotoRange(m_xFrameStartRange, true);
- redPos.push_back(xRangeCursor->getString().getLength() - nLen);
- }
- else
- {
- // failed createTextCursorByRange(), for example, table inside the frame
- redLen.push_back(-1);
- redPos.push_back(-1);
- }
- }
-
- const uno::Reference< text::XTextContent >& xTextContent = xTextAppendAndConvert->convertToTextFrame(
- m_xFrameStartRange,
- m_xFrameEndRange,
- comphelper::containerToSequence(m_aFrameProperties) );
-
- // create redlines in the previous frame
- for( size_t i = 0; i < aFramedRedlines.size(); i+=3)
- {
- OUString sType;
- beans::PropertyValues aRedlineProperties( 3 );
- // skip failed createTextCursorByRange()
- if (redPos[i/3] == -1)
- continue;
- aFramedRedlines[i+1] >>= sType;
- aFramedRedlines[i+2] >>= aRedlineProperties;
- uno::Reference< text::XTextFrame > xFrame( xTextContent, uno::UNO_QUERY_THROW );
- uno::Reference< text::XTextCursor > xCrsr = xFrame->getText()->createTextCursor();
- xCrsr->goRight(redPos[i/3], false);
- xCrsr->goRight(redLen[i/3], true);
- uno::Reference < text::XRedline > xRedline( xCrsr, uno::UNO_QUERY_THROW );
- xRedline->makeRedline( sType, aRedlineProperties );
- }
- }
- catch( const uno::Exception&)
- {
- DBG_UNHANDLED_EXCEPTION( "writerfilter.dmapper", "Exception caught when converting to frame");
- }
-
- m_bIsActualParagraphFramed = false;
-
- if (redPos.size() == aFramedRedlines.size()/3)
- {
- for( sal_Int32 i = aFramedRedlines.size() - 1; i >= 0; --i)
- {
- // keep redlines of floating tables to process them in CloseSectionGroup()
- if ( redPos[i/3] != -1 )
- {
- aFramedRedlines.erase(aFramedRedlines.begin() + i);
- }
- }
- }
- else
- aFramedRedlines.clear();
- }
- m_xFrameStartRange = nullptr;
- m_xFrameEndRange = nullptr;
- m_aFrameProperties.clear();
-}
-
-void DomainMapper_Impl::AddNewRedline( sal_uInt32 sprmId )
-{
- RedlineParamsPtr pNew( new RedlineParams );
- pNew->m_nToken = XML_mod;
- if ( !m_bIsParaMarkerChange )
- {
- // <w:rPrChange> applies to the whole <w:r>, <w:pPrChange> applies to the whole <w:p>,
- // so keep those two in CONTEXT_CHARACTERS and CONTEXT_PARAGRAPH, which will take
- // care of their scope (i.e. when they should be used and discarded).
- // Let's keep the rest the same way they used to be handled (explicitly dropped
- // from a global stack by endtrackchange), but quite possibly they should not be handled
- // that way either (I don't know).
- if( sprmId == NS_ooxml::LN_EG_RPrContent_rPrChange )
- GetTopContextOfType( CONTEXT_CHARACTER )->Redlines().push_back( pNew );
- else if( sprmId == NS_ooxml::LN_CT_PPr_pPrChange )
- GetTopContextOfType( CONTEXT_PARAGRAPH )->Redlines().push_back( pNew );
- else if( sprmId != NS_ooxml::LN_CT_ParaRPr_rPrChange )
- m_aRedlines.top().push_back( pNew );
- }
- else
- {
- m_pParaMarkerRedline = pNew;
- }
- // Newly read data will go into this redline.
- m_currentRedline = pNew;
-}
-
-void DomainMapper_Impl::SetCurrentRedlineIsRead()
-{
- m_currentRedline.clear();
-}
-
-sal_Int32 DomainMapper_Impl::GetCurrentRedlineToken( ) const
-{
- assert(m_currentRedline);
- return m_currentRedline->m_nToken;
-}
-
-void DomainMapper_Impl::SetCurrentRedlineAuthor( const OUString& sAuthor )
-{
- if (!m_xAnnotationField.is())
- {
- if (m_currentRedline)
- m_currentRedline->m_sAuthor = sAuthor;
- else
- SAL_INFO("writerfilter.dmapper", "numberingChange not implemented");
- }
- else
- m_xAnnotationField->setPropertyValue("Author", uno::makeAny(sAuthor));
-}
-
-void DomainMapper_Impl::SetCurrentRedlineInitials( const OUString& sInitials )
-{
- if (m_xAnnotationField.is())
- m_xAnnotationField->setPropertyValue("Initials", uno::makeAny(sInitials));
-}
-
-void DomainMapper_Impl::SetCurrentRedlineDate( const OUString& sDate )
-{
- if (!m_xAnnotationField.is())
- {
- if (m_currentRedline)
- m_currentRedline->m_sDate = sDate;
- else
- SAL_INFO("writerfilter.dmapper", "numberingChange not implemented");
- }
- else
- m_xAnnotationField->setPropertyValue("DateTimeValue", uno::makeAny(ConversionHelper::ConvertDateStringToDateTime(sDate)));
-}
-
-void DomainMapper_Impl::SetCurrentRedlineId( sal_Int32 sId )
-{
- if (m_xAnnotationField.is())
- {
- m_nAnnotationId = sId;
- }
- else
- {
- // This should be an assert, but somebody had the smart idea to reuse this function also for comments and whatnot,
- // and in some cases the id is actually not handled, which may be in fact a bug.
- if( !m_currentRedline)
- SAL_INFO("writerfilter.dmapper", "no current redline");
- }
-}
-
-void DomainMapper_Impl::SetCurrentRedlineToken( sal_Int32 nToken )
-{
- assert(m_currentRedline);
- m_currentRedline->m_nToken = nToken;
-}
-
-void DomainMapper_Impl::SetCurrentRedlineRevertProperties( const uno::Sequence<beans::PropertyValue>& aProperties )
-{
- assert(m_currentRedline);
- m_currentRedline->m_aRevertProperties = aProperties;
-}
-
-
-// This removes only the last redline stored here, those stored in contexts are automatically removed when
-// the context is destroyed.
-void DomainMapper_Impl::RemoveTopRedline( )
-{
- if (m_aRedlines.top().empty())
- {
- SAL_WARN("writerfilter.dmapper", "RemoveTopRedline called with empty stack");
- throw uno::Exception("RemoveTopRedline failed", nullptr);
- }
- m_aRedlines.top().pop_back( );
- m_currentRedline.clear();
-}
-
-void DomainMapper_Impl::ApplySettingsTable()
-{
- if (!(m_pSettingsTable && m_xTextFactory.is()))
- return;
-
- try
- {
- uno::Reference< beans::XPropertySet > xTextDefaults(m_xTextFactory->createInstance("com.sun.star.text.Defaults"), uno::UNO_QUERY_THROW );
- sal_Int32 nDefTab = m_pSettingsTable->GetDefaultTabStop();
- xTextDefaults->setPropertyValue( getPropertyName( PROP_TAB_STOP_DISTANCE ), uno::makeAny(nDefTab) );
- if (m_pSettingsTable->GetLinkStyles())
- {
- // If linked styles are enabled, set paragraph defaults from Word's default template
- xTextDefaults->setPropertyValue(getPropertyName(PROP_PARA_BOTTOM_MARGIN), uno::makeAny(ConversionHelper::convertTwipToMM100(200)));
- style::LineSpacing aSpacing;
- aSpacing.Mode = style::LineSpacingMode::PROP;
- aSpacing.Height = sal_Int16(115);
- xTextDefaults->setPropertyValue(getPropertyName(PROP_PARA_LINE_SPACING), uno::makeAny(aSpacing));
- }
-
- if (m_pSettingsTable->GetZoomFactor() || m_pSettingsTable->GetView())
- {
- std::vector<beans::PropertyValue> aViewProps;
- if (m_pSettingsTable->GetZoomFactor())
- {
- aViewProps.emplace_back("ZoomFactor", -1, uno::makeAny(m_pSettingsTable->GetZoomFactor()), beans::PropertyState_DIRECT_VALUE);
- aViewProps.emplace_back("VisibleBottom", -1, uno::makeAny(sal_Int32(0)), beans::PropertyState_DIRECT_VALUE);
- aViewProps.emplace_back("ZoomType", -1,
- uno::makeAny(m_pSettingsTable->GetZoomType()),
- beans::PropertyState_DIRECT_VALUE);
- }
- uno::Reference<container::XIndexContainer> xBox = document::IndexedPropertyValues::create(m_xComponentContext);
- xBox->insertByIndex(sal_Int32(0), uno::makeAny(comphelper::containerToSequence(aViewProps)));
- uno::Reference<document::XViewDataSupplier> xViewDataSupplier(m_xTextDocument, uno::UNO_QUERY);
- xViewDataSupplier->setViewData(xBox);
- }
-
- uno::Reference< beans::XPropertySet > xSettings(m_xTextFactory->createInstance("com.sun.star.document.Settings"), uno::UNO_QUERY);
-
- if (m_pSettingsTable->GetDoNotExpandShiftReturn())
- xSettings->setPropertyValue( "DoNotJustifyLinesWithManualBreak", uno::makeAny(true) );
- if (m_pSettingsTable->GetUsePrinterMetrics())
- xSettings->setPropertyValue("PrinterIndependentLayout", uno::makeAny(document::PrinterIndependentLayout::DISABLED));
- if( m_pSettingsTable->GetEmbedTrueTypeFonts())
- xSettings->setPropertyValue( getPropertyName( PROP_EMBED_FONTS ), uno::makeAny(true) );
- if( m_pSettingsTable->GetEmbedSystemFonts())
- xSettings->setPropertyValue( getPropertyName( PROP_EMBED_SYSTEM_FONTS ), uno::makeAny(true) );
- xSettings->setPropertyValue("AddParaTableSpacing", uno::makeAny(m_pSettingsTable->GetDoNotUseHTMLParagraphAutoSpacing()));
- if (m_pSettingsTable->GetNoLeading())
- {
- xSettings->setPropertyValue("AddExternalLeading", uno::makeAny(!m_pSettingsTable->GetNoLeading()));
- }
- if( m_pSettingsTable->GetProtectForm() )
- xSettings->setPropertyValue("ProtectForm", uno::makeAny( true ));
- if( m_pSettingsTable->GetReadOnly() )
- xSettings->setPropertyValue("LoadReadonly", uno::makeAny( true ));
- }
- catch(const uno::Exception&)
- {
- }
-}
-
-uno::Reference<container::XIndexAccess> DomainMapper_Impl::GetCurrentNumberingRules(sal_Int32* pListLevel)
-{
- uno::Reference<container::XIndexAccess> xRet;
- try
- {
- OUString aStyle = GetCurrentParaStyleName();
- if (aStyle.isEmpty())
- return xRet;
- const StyleSheetEntryPtr pEntry = GetStyleSheetTable()->FindStyleSheetByConvertedStyleName(aStyle);
- if (!pEntry)
- return xRet;
- const StyleSheetPropertyMap* pStyleSheetProperties = dynamic_cast<const StyleSheetPropertyMap*>(pEntry->pProperties.get());
- if (!pStyleSheetProperties)
- return xRet;
- sal_Int32 nListId = pStyleSheetProperties->GetListId();
- if (nListId < 0)
- return xRet;
- if (pListLevel)
- *pListLevel = pStyleSheetProperties->GetListLevel();
-
- // So we are in a paragraph style and it has numbering. Look up the relevant numbering rules.
- auto const pList(GetListTable()->GetList(nListId));
- OUString aListName;
- if (pList)
- {
- aListName = pList->GetStyleName();
- }
- uno::Reference< style::XStyleFamiliesSupplier > xStylesSupplier(GetTextDocument(), uno::UNO_QUERY_THROW);
- uno::Reference< container::XNameAccess > xStyleFamilies = xStylesSupplier->getStyleFamilies();
- uno::Reference<container::XNameAccess> xNumberingStyles;
- xStyleFamilies->getByName("NumberingStyles") >>= xNumberingStyles;
- uno::Reference<beans::XPropertySet> xStyle(xNumberingStyles->getByName(aListName), uno::UNO_QUERY);
- xRet.set(xStyle->getPropertyValue("NumberingRules"), uno::UNO_QUERY);
- }
- catch (const uno::Exception&)
- {
- TOOLS_WARN_EXCEPTION("writerfilter.dmapper", "GetCurrentNumberingRules: exception caught");
- }
- return xRet;
-}
-
-uno::Reference<beans::XPropertySet> DomainMapper_Impl::GetCurrentNumberingCharStyle()
-{
- uno::Reference<beans::XPropertySet> xRet;
- try
- {
- sal_Int32 nListLevel = -1;
- uno::Reference<container::XIndexAccess> xLevels;
- if ( GetTopContextType() == CONTEXT_PARAGRAPH )
- xLevels = GetCurrentNumberingRules(&nListLevel);
- if (!xLevels.is())
- {
- if (IsOOXMLImport())
- return xRet;
-
- PropertyMapPtr pContext = m_pTopContext;
- if (IsRTFImport() && !IsOpenField())
- {
- // Looking up the paragraph context explicitly (and not just taking
- // the top context) is necessary for RTF, where formatting of a run
- // and of the paragraph mark is not separated.
- // We know that the formatting inside a field won't affect the
- // paragraph marker formatting, though.
- pContext = GetTopContextOfType(CONTEXT_PARAGRAPH);
- if (!pContext)
- return xRet;
- }
-
- // In case numbering rules is not found via a style, try the direct formatting instead.
- std::optional<PropertyMap::Property> oProp = pContext->getProperty(PROP_NUMBERING_RULES);
- if (oProp)
- {
- xLevels.set(oProp->second, uno::UNO_QUERY);
- // Found the rules, then also try to look up our numbering level.
- oProp = pContext->getProperty(PROP_NUMBERING_LEVEL);
- if (oProp)
- oProp->second >>= nListLevel;
- else
- nListLevel = 0;
- }
-
- if (!xLevels.is())
- return xRet;
- }
- uno::Sequence<beans::PropertyValue> aProps;
- xLevels->getByIndex(nListLevel) >>= aProps;
- auto pProp = std::find_if(aProps.begin(), aProps.end(),
- [](const beans::PropertyValue& rProp) { return rProp.Name == "CharStyleName"; });
- if (pProp != aProps.end())
- {
- OUString aCharStyle;
- pProp->Value >>= aCharStyle;
- uno::Reference<container::XNameAccess> xCharacterStyles;
- uno::Reference< style::XStyleFamiliesSupplier > xStylesSupplier(GetTextDocument(), uno::UNO_QUERY);
- uno::Reference< container::XNameAccess > xStyleFamilies = xStylesSupplier->getStyleFamilies();
- xStyleFamilies->getByName("CharacterStyles") >>= xCharacterStyles;
- xRet.set(xCharacterStyles->getByName(aCharStyle), uno::UNO_QUERY_THROW);
- }
- }
- catch( const uno::Exception& )
- {
- }
- return xRet;
-}
-
-SectionPropertyMap * DomainMapper_Impl::GetSectionContext()
-{
- SectionPropertyMap* pSectionContext = nullptr;
- //the section context is not available before the first call of startSectionGroup()
- if( !IsAnyTableImport() )
- {
- PropertyMapPtr pContext = GetTopContextOfType(CONTEXT_SECTION);
- pSectionContext = dynamic_cast< SectionPropertyMap* >( pContext.get() );
- }
-
- return pSectionContext;
-}
-
-void DomainMapper_Impl::deferCharacterProperty(sal_Int32 id, const css::uno::Any& value)
-{
- deferredCharacterProperties[ id ] = value;
-}
-
-void DomainMapper_Impl::processDeferredCharacterProperties()
-{
- // Actually process in DomainMapper, so that it's the same source file like normal processing.
- if( !deferredCharacterProperties.empty())
- {
- m_rDMapper.processDeferredCharacterProperties( deferredCharacterProperties );
- deferredCharacterProperties.clear();
- }
-}
-
-sal_Int32 DomainMapper_Impl::getNumberingProperty(const sal_Int32 nListId, sal_Int32 nNumberingLevel, const OUString& aProp)
-{
- sal_Int32 nRet = 0;
- if ( nListId < 0 )
- return nRet;
-
- try
- {
- if (nNumberingLevel < 0) // It seems it's valid to omit numbering level, and in that case it means zero.
- nNumberingLevel = 0;
-
- auto const pList(GetListTable()->GetList(nListId));
- assert(pList);
- const OUString aListName = pList->GetStyleName();
- const uno::Reference< style::XStyleFamiliesSupplier > xStylesSupplier(GetTextDocument(), uno::UNO_QUERY_THROW);
- const uno::Reference< container::XNameAccess > xStyleFamilies = xStylesSupplier->getStyleFamilies();
- uno::Reference<container::XNameAccess> xNumberingStyles;
- xStyleFamilies->getByName("NumberingStyles") >>= xNumberingStyles;
- const uno::Reference<beans::XPropertySet> xStyle(xNumberingStyles->getByName(aListName), uno::UNO_QUERY);
- const uno::Reference<container::XIndexAccess> xNumberingRules(xStyle->getPropertyValue("NumberingRules"), uno::UNO_QUERY);
- if (xNumberingRules.is())
- {
- uno::Sequence<beans::PropertyValue> aProps;
- xNumberingRules->getByIndex(nNumberingLevel) >>= aProps;
- auto pProp = std::find_if(aProps.begin(), aProps.end(),
- [&aProp](const beans::PropertyValue& rProp) { return rProp.Name == aProp; });
- if (pProp != aProps.end())
- pProp->Value >>= nRet;
- }
- }
- catch( const uno::Exception& )
- {
- // This can happen when the doc contains some hand-crafted invalid list level.
- }
-
- return nRet;
-}
-
-sal_Int32 DomainMapper_Impl::getCurrentNumberingProperty(const OUString& aProp)
-{
- sal_Int32 nRet = 0;
-
- std::optional<PropertyMap::Property> pProp = m_pTopContext->getProperty(PROP_NUMBERING_RULES);
- uno::Reference<container::XIndexAccess> xNumberingRules;
- if (pProp)
- xNumberingRules.set(pProp->second, uno::UNO_QUERY);
- pProp = m_pTopContext->getProperty(PROP_NUMBERING_LEVEL);
- // Default numbering level is the first one.
- sal_Int32 nNumberingLevel = 0;
- if (pProp)
- pProp->second >>= nNumberingLevel;
- if (xNumberingRules.is())
- {
- uno::Sequence<beans::PropertyValue> aProps;
- xNumberingRules->getByIndex(nNumberingLevel) >>= aProps;
- auto pPropVal = std::find_if(aProps.begin(), aProps.end(),
- [&aProp](const beans::PropertyValue& rProp) { return rProp.Name == aProp; });
- if (pPropVal != aProps.end())
- pPropVal->Value >>= nRet;
- }
-
- return nRet;
-}
-
-
-void DomainMapper_Impl::enableInteropGrabBag(const OUString& aName)
-{
- m_aInteropGrabBagName = aName;
-}
-
-void DomainMapper_Impl::disableInteropGrabBag()
-{
- m_aInteropGrabBagName.clear();
- m_aInteropGrabBag.clear();
- m_aSubInteropGrabBag.clear();
-}
-
-bool DomainMapper_Impl::isInteropGrabBagEnabled() const
-{
- return !(m_aInteropGrabBagName.isEmpty());
-}
-
-void DomainMapper_Impl::appendGrabBag(std::vector<beans::PropertyValue>& rInteropGrabBag, const OUString& aKey, const OUString& aValue)
-{
- if (m_aInteropGrabBagName.isEmpty())
- return;
- beans::PropertyValue aProperty;
- aProperty.Name = aKey;
- aProperty.Value <<= aValue;
- rInteropGrabBag.push_back(aProperty);
-}
-
-void DomainMapper_Impl::appendGrabBag(std::vector<beans::PropertyValue>& rInteropGrabBag, const OUString& aKey, std::vector<beans::PropertyValue>& rValue)
-{
- if (m_aInteropGrabBagName.isEmpty())
- return;
- beans::PropertyValue aProperty;
- aProperty.Name = aKey;
- aProperty.Value <<= comphelper::containerToSequence(rValue);
- rValue.clear();
- rInteropGrabBag.push_back(aProperty);
-}
-
-void DomainMapper_Impl::substream(Id rName,
- ::writerfilter::Reference<Stream>::Pointer_t const& ref)
-{
-#ifndef NDEBUG
- size_t contextSize(m_aContextStack.size());
- size_t propSize[NUMBER_OF_CONTEXTS];
- for (int i = 0; i < NUMBER_OF_CONTEXTS; ++i) {
- propSize[i] = m_aPropertyStacks[i].size();
- }
-#endif
-
- // Save "has footnote" state, which is specific to a section in the body
- // text, so state from substreams is not relevant.
- bool bHasFtn = m_bHasFtn;
-
- //finalize any waiting frames before starting alternate streams
- CheckUnregisteredFrameConversion();
- ExecuteFrameConversion();
-
- appendTableManager();
- // Appending a TableManager resets its TableHandler, so we need to append
- // that as well, or tables won't be imported properly in headers/footers.
- appendTableHandler();
- getTableManager().startLevel();
-
- //import of page header/footer
- //Ensure that only one header/footer per section is pushed
-
- switch( rName )
- {
- case NS_ooxml::LN_headerl:
- PushPageHeader(SectionPropertyMap::PAGE_LEFT);
- break;
- case NS_ooxml::LN_headerr:
- PushPageHeader(SectionPropertyMap::PAGE_RIGHT);
- break;
- case NS_ooxml::LN_headerf:
- PushPageHeader(SectionPropertyMap::PAGE_FIRST);
- break;
- case NS_ooxml::LN_footerl:
- PushPageFooter(SectionPropertyMap::PAGE_LEFT);
- break;
- case NS_ooxml::LN_footerr:
- PushPageFooter(SectionPropertyMap::PAGE_RIGHT);
- break;
- case NS_ooxml::LN_footerf:
- PushPageFooter(SectionPropertyMap::PAGE_FIRST);
- break;
- case NS_ooxml::LN_footnote:
- case NS_ooxml::LN_endnote:
- PushFootOrEndnote( NS_ooxml::LN_footnote == rName );
- break;
- case NS_ooxml::LN_annotation :
- PushAnnotation();
- break;
- }
- ref->resolve(m_rDMapper);
-
- switch( rName )
- {
- case NS_ooxml::LN_headerl:
- case NS_ooxml::LN_headerr:
- case NS_ooxml::LN_headerf:
- case NS_ooxml::LN_footerl:
- case NS_ooxml::LN_footerr:
- case NS_ooxml::LN_footerf:
- PopPageHeaderFooter();
- break;
- case NS_ooxml::LN_footnote:
- case NS_ooxml::LN_endnote:
- PopFootOrEndnote();
- break;
- case NS_ooxml::LN_annotation :
- PopAnnotation();
- break;
- }
-
- getTableManager().endLevel();
- popTableManager();
- m_bHasFtn = bHasFtn;
-
- switch(rName)
- {
- case NS_ooxml::LN_footnote:
- case NS_ooxml::LN_endnote:
- m_pTableHandler->setHadFootOrEndnote(true);
- m_bHasFtn = true;
- break;
- }
-
- // check that stacks are the same as before substream
- assert(m_aContextStack.size() == contextSize);
- for (int i = 0; i < NUMBER_OF_CONTEXTS; ++i) {
- assert(m_aPropertyStacks[i].size() == propSize[i]);
- }
-}
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.hxx b/writerfilter/source/dmapper/DomainMapper_Impl.hxx
deleted file mode 100644
index b4b111e787ec..000000000000
--- a/writerfilter/source/dmapper/DomainMapper_Impl.hxx
+++ /dev/null
@@ -1,1121 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * 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 .
- */
-#pragma once
-
-#include <com/sun/star/text/XParagraphCursor.hpp>
-#include <com/sun/star/text/XTextDocument.hpp>
-#include <com/sun/star/text/XTextCursor.hpp>
-#include <com/sun/star/text/XTextAppend.hpp>
-#include <com/sun/star/style/TabStop.hpp>
-#include <com/sun/star/container/XNameContainer.hpp>
-#include <com/sun/star/embed/XStorage.hpp>
-#include <queue>
-#include <stack>
-#include <string_view>
-#include <o3tl/sorted_vector.hxx>
-#include <unordered_map>
-#include <vector>
-#include <optional>
-
-#include "DomainMapper.hxx"
-#include "DomainMapperTableManager.hxx"
-#include "DomainMapperTableHandler.hxx"
-#include "PropertyMap.hxx"
-#include "FontTable.hxx"
-#include "NumberingManager.hxx"
-#include "StyleSheetTable.hxx"
-#include "SettingsTable.hxx"
-#include "ThemeTable.hxx"
-#include "GraphicImport.hxx"
-#include "OLEHandler.hxx"
-#include "FFDataHandler.hxx"
-#include "SmartTagHandler.hxx"
-#include "FormControlHelper.hxx"
-#include <map>
-
-namespace com::sun::star{
- namespace awt{
- struct Size;
- }
- namespace lang{
- class XMultiServiceFactory;
- struct Locale;
- }
- namespace text
- {
- class XTextField;
- class XFormField;
- }
- namespace beans{ class XPropertySet;}
-}
-
-namespace writerfilter::dmapper {
-
-class SdtHelper;
-
-struct PageMar
-{
- sal_Int32 top;
- sal_Int32 right;
- sal_Int32 bottom;
- sal_Int32 left;
- sal_Int32 header;
- sal_Int32 footer;
- public:
- PageMar();
-};
-enum PageMarElement
-{
- PAGE_MAR_TOP,
- PAGE_MAR_RIGHT,
- PAGE_MAR_BOTTOM,
- PAGE_MAR_LEFT,
- PAGE_MAR_HEADER,
- PAGE_MAR_FOOTER,
- PAGE_MAR_GUTTER
-};
-
-/// property stack element
-enum ContextType
-{
- CONTEXT_SECTION,
- CONTEXT_PARAGRAPH,
- CONTEXT_CHARACTER,
- CONTEXT_STYLESHEET,
- CONTEXT_LIST
-};
-enum { NUMBER_OF_CONTEXTS = CONTEXT_LIST + 1 };
-
-enum BreakType
-{
- PAGE_BREAK,
- COLUMN_BREAK
-};
-
-/**
- * Two special footnotes are a separator line, and a continuation line.
- * In MSOffice, these can contain text as well, but LO doesn't implement this
- * rarely used feature, so the separator text needs to be skipped. (tdf#123262)
- * Three-way logic is needed because there is no guaranteed on-off event.
- * OFF == not in footnote separator
- * ON == in footnote separator
- * SKIPPING == ON status has been recognized.
- */
-enum class SkipFootnoteSeparator
-{
- OFF,
- ON,
- SKIPPING
-};
-
-/**
- * Storage for state that is relevant outside a header/footer, but not inside it.
- *
- * In case some state of DomainMapper_Impl should be reset before handling the
- * header/footer and should be restored once handling of header/footer is done,
- * then you can use this class to do so.
- */
-class HeaderFooterContext
-{
- bool m_bTextInserted;
- sal_Int32 m_nTableDepth;
-
-public:
- explicit HeaderFooterContext(bool bTextInserted, sal_Int32 nTableDepth);
- bool getTextInserted() const;
- sal_Int32 getTableDepth() const;
-};
-
-/// Information about a paragraph to be finished after a field end.
-struct FieldParagraph
-{
- PropertyMapPtr m_pPropertyMap;
- bool m_bRemove = false;
-};
-
-/// field stack element
-class FieldContext : public virtual SvRefBase
-{
- bool m_bFieldCommandCompleted;
- css::uno::Reference<css::text::XTextRange> m_xStartRange;
-
- OUString m_sCommand;
- OUString m_sResult;
- std::optional<FieldId> m_eFieldId;
- bool m_bFieldLocked;
-
- css::uno::Reference<css::text::XTextField> m_xTextField;
- css::uno::Reference<css::text::XFormField> m_xFormField;
- css::uno::Reference<css::beans::XPropertySet> m_xTOC;
- css::uno::Reference<css::beans::XPropertySet> m_xTC; // TOX entry
- css::uno::Reference<css::beans::XPropertySet> m_xCustomField;
-
- OUString m_sHyperlinkURL;
- /// A frame for the hyperlink when one exists.
- OUString m_sHyperlinkTarget;
-
- FFDataHandler::Pointer_t m_pFFDataHandler;
- FormControlHelper::Pointer_t m_pFormControlHelper;
- /// (Character) properties of the field itself.
- PropertyMapPtr m_pProperties;
-
- std::vector<FieldParagraph> m_aParagraphsToFinish;
-
-public:
- explicit FieldContext(css::uno::Reference<css::text::XTextRange> const& xStart);
- ~FieldContext() override;
-
- const css::uno::Reference<css::text::XTextRange>& GetStartRange() const { return m_xStartRange; }
-
- void AppendCommand(std::u16string_view rPart);
- const OUString& GetCommand() const {return m_sCommand; }
-
- void SetFieldId(FieldId eFieldId ) { m_eFieldId = eFieldId; }
- std::optional<FieldId> const & GetFieldId() const { return m_eFieldId; }
-
- void AppendResult(std::u16string_view rResult) { m_sResult += rResult; }
- const OUString& GetResult() const { return m_sResult; }
-
- void SetCommandCompleted() { m_bFieldCommandCompleted = true; }
- bool IsCommandCompleted() const { return m_bFieldCommandCompleted; }
-
- void SetFieldLocked() { m_bFieldLocked = true; }
- bool IsFieldLocked() const { return m_bFieldLocked; }
-
- const css::uno::Reference<css::beans::XPropertySet>& GetCustomField() const { return m_xCustomField; }
- void SetCustomField(css::uno::Reference<css::beans::XPropertySet> const& xCustomField) { m_xCustomField = xCustomField; }
- const css::uno::Reference<css::text::XTextField>& GetTextField() const { return m_xTextField;}
- void SetTextField(css::uno::Reference<css::text::XTextField> const& xTextField);
- const css::uno::Reference<css::text::XFormField>& GetFormField() const { return m_xFormField;}
- void SetFormField(css::uno::Reference<css::text::XFormField> const& xFormField) { m_xFormField = xFormField;}
-
- void SetTOC(css::uno::Reference<css::beans::XPropertySet> const& xTOC) { m_xTOC = xTOC; }
- const css::uno::Reference<css::beans::XPropertySet>& GetTOC() const { return m_xTOC; }
-
- void SetTC(css::uno::Reference<css::beans::XPropertySet> const& xTC) { m_xTC = xTC; }
- const css::uno::Reference<css::beans::XPropertySet>& GetTC() const { return m_xTC; }
-
- void SetHyperlinkURL( const OUString& rURL ) { m_sHyperlinkURL = rURL; }
- const OUString& GetHyperlinkURL() const { return m_sHyperlinkURL; }
- void SetHyperlinkTarget(const OUString& rTarget) { m_sHyperlinkTarget = rTarget; }
- const OUString& GetHyperlinkTarget() const { return m_sHyperlinkTarget; }
-
- void setFFDataHandler(FFDataHandler::Pointer_t pFFDataHandler) { m_pFFDataHandler = pFFDataHandler; }
- const FFDataHandler::Pointer_t& getFFDataHandler() const { return m_pFFDataHandler; }
-
- void setFormControlHelper(FormControlHelper::Pointer_t pFormControlHelper) { m_pFormControlHelper = pFormControlHelper; }
- const FormControlHelper::Pointer_t& getFormControlHelper() const { return m_pFormControlHelper; }
- const PropertyMapPtr& getProperties() const { return m_pProperties; }
-
- ::std::vector<OUString> GetCommandParts() const;
-
- std::vector<FieldParagraph>& GetParagraphsToFinish() { return m_aParagraphsToFinish; }
-};
-
-struct TextAppendContext
-{
- css::uno::Reference<css::text::XTextAppend> xTextAppend;
- css::uno::Reference<css::text::XTextRange> xInsertPosition;
- css::uno::Reference<css::text::XParagraphCursor> xCursor;
- ParagraphPropertiesPtr pLastParagraphProperties;
-
- /**
- * Objects anchored to the current paragraph, may affect the paragraph
- * spacing.
- */
- std::vector<AnchoredObjectInfo> m_aAnchoredObjects;
-
- TextAppendContext(const css::uno::Reference<css::text::XTextAppend>& xAppend, const css::uno::Reference<css::text::XTextCursor>& xCur)
- : xTextAppend(xAppend)
- {
- xCursor.set(xCur, css::uno::UNO_QUERY);
- xInsertPosition = xCursor;
- }
-};
-
-struct AnchoredContext
-{
- css::uno::Reference<css::text::XTextContent> xTextContent;
- bool bToRemove;
-
- explicit AnchoredContext(const css::uno::Reference<css::text::XTextContent>& xContent)
- : xTextContent(xContent), bToRemove(false)
- {
- }
-};
-
-typedef tools::SvRef<FieldContext> FieldContextPtr;
-
-/*-------------------------------------------------------------------------
- extended tab stop struct
- -----------------------------------------------------------------------*/
-struct DeletableTabStop : public css::style::TabStop
-{
- bool bDeleted;
- explicit DeletableTabStop()
- : bDeleted(false)
- {
- // same defaults as SvxXMLTabStopContext_Impl
- FillChar = ' ';
- DecimalChar = ',';
- }
- DeletableTabStop(const css::style::TabStop& rTabStop)
- : TabStop(rTabStop),
- bDeleted(false)
- {
- }
-};
-/// helper to remember bookmark start position
-struct BookmarkInsertPosition
-{
- bool m_bIsStartOfText;
- OUString m_sBookmarkName;
- css::uno::Reference<css::text::XTextRange> m_xTextRange;
- BookmarkInsertPosition(bool bIsStartOfText, const OUString& rName, css::uno::Reference<css::text::XTextRange> const& xTextRange):
- m_bIsStartOfText( bIsStartOfText ),
- m_sBookmarkName( rName ),
- m_xTextRange( xTextRange )
- {}
-};
-
-struct PermInsertPosition
-{
- bool m_bIsStartOfText;
- sal_Int32 m_Id;
- OUString m_Ed;
- OUString m_EdGrp;
-
- css::uno::Reference<css::text::XTextRange> m_xTextRange;
-
- PermInsertPosition(bool bIsStartOfText, sal_Int32 id, const OUString& ed, const OUString& edGrp, css::uno::Reference<css::text::XTextRange> const& xTextRange)
- : m_bIsStartOfText(bIsStartOfText)
- , m_Id(id)
- , m_Ed(ed)
- , m_EdGrp(edGrp)
- , m_xTextRange(xTextRange)
- {}
-
- OUString createBookmarkName() const
- {
- OUString bookmarkName;
-
- assert((!m_Ed.isEmpty()) || (!m_EdGrp.isEmpty()));
-
- if (m_Ed.isEmpty())
- {
- bookmarkName += "permission-for-group:" +
- OUString::number(m_Id) +
- ":" +
- m_EdGrp;
- }
- else
- {
- bookmarkName += "permission-for-user:" +
- OUString::number(m_Id) +
- ":" +
- m_Ed;
- }
-
- //todo: make sure the name is not used already!
- return bookmarkName;
- }
-};
-
-/// Stores the start/end positions of an annotation before its insertion.
-struct AnnotationPosition
-{
- css::uno::Reference<css::text::XTextRange> m_xStart;
- css::uno::Reference<css::text::XTextRange> m_xEnd;
-};
-
-struct RubyInfo
-{
- OUString sRubyText;
- OUString sRubyStyle;
- sal_uInt32 nSprmId;
- sal_uInt32 nRubyAlign;
- sal_uInt32 nHps;
- sal_uInt32 nHpsBaseText;
-
- RubyInfo():
- nSprmId(0),
- nRubyAlign(0),
- nHps(0),
- nHpsBaseText(0)
- {
- }
-};
-
-struct LineNumberSettings
-{
- sal_Int32 nDistance;
- sal_Int32 nInterval;
- bool bRestartAtEachPage;
- LineNumberSettings() :
- nDistance(-1)
- ,nInterval(0)
- ,bRestartAtEachPage(true)
- {}
-
-};
-
-/// Contains information about a table that will be potentially converted to a floating one at the section end.
-struct FloatingTableInfo
-{
- css::uno::Reference<css::text::XTextRange> m_xStart;
- css::uno::Reference<css::text::XTextRange> m_xEnd;
- css::uno::Sequence<css::beans::PropertyValue> m_aFrameProperties;
- sal_Int32 m_nTableWidth;
- sal_Int32 m_nTableWidthType;
- /// Break type of the section that contains this table.
- sal_Int32 m_nBreakType = -1;
-
- FloatingTableInfo(css::uno::Reference<css::text::XTextRange> const& xStart,
- css::uno::Reference<css::text::XTextRange> const& xEnd,
- const css::uno::Sequence<css::beans::PropertyValue>& aFrameProperties,
- sal_Int32 nTableWidth, sal_Int32 nTableWidthType)
- : m_xStart(xStart),
- m_xEnd(xEnd),
- m_aFrameProperties(aFrameProperties),
- m_nTableWidth(nTableWidth),
- m_nTableWidthType(nTableWidthType)
- {
- }
- css::uno::Any getPropertyValue(std::u16string_view propertyName);
-};
-
-/// Stores original/in-file-format info about a single anchored object.
-struct AnchoredObjectInfo
-{
- css::uno::Reference<css::text::XTextContent> m_xAnchoredObject;
- sal_Int32 m_nLeftMargin = 0;
-};
-
-/// Stores info about objects anchored to a given paragraph.
-struct AnchoredObjectsInfo
-{
- css::uno::Reference<css::text::XTextRange> m_xParagraph;
- std::vector<AnchoredObjectInfo> m_aAnchoredObjects;
-};
-
-struct SymbolData
-{
- sal_Unicode cSymbol;
- OUString sFont;
- SymbolData():
- cSymbol(),
- sFont()
- { }
-};
-
-class DomainMapper;
-class DomainMapper_Impl final
-{
-public:
- typedef std::map < OUString, BookmarkInsertPosition > BookmarkMap_t;
- typedef std::map < sal_Int32, PermInsertPosition > PermMap_t;
-
-private:
- SourceDocumentType m_eDocumentType;
- DomainMapper& m_rDMapper;
- OUString m_aBaseUrl;
- css::uno::Reference<css::text::XTextDocument> m_xTextDocument;
- css::uno::Reference<css::beans::XPropertySet> m_xDocumentSettings;
- css::uno::Reference<css::lang::XMultiServiceFactory> m_xTextFactory;
- css::uno::Reference<css::uno::XComponentContext> m_xComponentContext;
- css::uno::Reference<css::container::XNameContainer> m_xPageStyles1;
- // cache next available number, expensive to repeatedly compute
- std::optional<int> m_xNextUnusedPageStyleNo;
- css::uno::Reference<css::text::XText> m_xBodyText;
- css::uno::Reference<css::text::XTextContent> m_xEmbedded;
-
- std::stack<TextAppendContext> m_aTextAppendStack;
- std::stack<AnchoredContext> m_aAnchoredStack;
- std::stack<HeaderFooterContext> m_aHeaderFooterStack;
- std::deque<FieldContextPtr> m_aFieldStack;
- bool m_bForceGenericFields;
- bool m_bSetUserFieldContent;
- bool m_bSetCitation;
- bool m_bSetDateValue;
- bool m_bIsFirstSection;
- bool m_bIsColumnBreakDeferred;
- bool m_bIsPageBreakDeferred;
- /// If we want to set "sdt end" on the next character context.
- bool m_bSdtEndDeferred;
- /// If we want to set "paragraph sdt end" on the next paragraph context.
- bool m_bParaSdtEndDeferred;
- bool m_bStartTOC;
- bool m_bStartTOCHeaderFooter;
- /// If we got any text that is the pre-rendered result of the TOC field.
- bool m_bStartedTOC;
- bool m_bStartIndex;
- bool m_bStartBibliography;
- unsigned int m_nStartGenericField;
- bool m_bTextInserted;
- LineNumberSettings m_aLineNumberSettings;
-
- BookmarkMap_t m_aBookmarkMap;
- OUString m_sCurrentBkmkId;
- OUString m_sCurrentBkmkName;
-
- PermMap_t m_aPermMap;
- sal_Int32 m_sCurrentPermId;
- OUString m_sCurrentPermEd;
- OUString m_sCurrentPermEdGrp;
-
- PageMar m_aPageMargins;
- SymbolData m_aSymbolData;
-
- // TableManagers are stacked: one for each stream to avoid any confusion
- std::stack< tools::SvRef< DomainMapperTableManager > > m_aTableManagers;
- tools::SvRef<DomainMapperTableHandler> m_pTableHandler;
- // List of document lists overrides. They are applied only once on first occurrence in document
- o3tl::sorted_vector<sal_Int32> m_aListOverrideApplied;
-
- //each context needs a stack of currently used attributes
- std::stack<PropertyMapPtr> m_aPropertyStacks[NUMBER_OF_CONTEXTS];
- std::stack<ContextType> m_aContextStack;
- std::queue<std::optional<sal_Int16>> m_aFrameDirectionQueue;
- bool m_bFrameDirectionSet;
- FontTablePtr m_pFontTable;
- ListsManager::Pointer m_pListTable;
- std::deque< css::uno::Reference<css::drawing::XShape> > m_aPendingShapes;
- StyleSheetTablePtr m_pStyleSheetTable;
- ThemeTablePtr m_pThemeTable;
- SettingsTablePtr m_pSettingsTable;
- GraphicImportPtr m_pGraphicImport;
-
-
- PropertyMapPtr m_pTopContext;
- PropertyMapPtr m_pLastSectionContext;
- PropertyMapPtr m_pLastCharacterContext;
-
- ::std::vector<DeletableTabStop> m_aCurrentTabStops;
- OUString m_sCurrentParaStyleName; //highly inaccurate. Overwritten by "overlapping" paragraphs like comments, flys.
- OUString m_sDefaultParaStyleName; //caches the ConvertedStyleName of the default paragraph style
- bool m_bInStyleSheetImport; //in import of fonts, styles, lists or lfos
- bool m_bInAnyTableImport; //in import of fonts, styles, lists or lfos
- enum class HeaderFooterImportState
- {
- none,
- header,
- footer,
- } m_eInHeaderFooterImport;
- bool m_bDiscardHeaderFooter;
- bool m_bInFootOrEndnote;
- PropertyMapPtr m_pFootnoteContext;
- bool m_bHasFootnoteStyle;
- bool m_bCheckFootnoteStyle;
- /// Skip paragraphs from the <w:separator/> footnote
- SkipFootnoteSeparator m_eSkipFootnoteState;
-
- bool m_bLineNumberingSet;
- bool m_bIsInFootnoteProperties;
-
- RubyInfo m_aRubyInfo;
- //registered frame properties
- std::vector<css::beans::PropertyValue> m_aFrameProperties;
- css::uno::Reference<css::text::XTextRange> m_xFrameStartRange;
- css::uno::Reference<css::text::XTextRange> m_xFrameEndRange;
-
- // Redline stack
- std::stack< std::vector< RedlineParamsPtr > > m_aRedlines;
- // The redline currently read, may be also stored by a context instead of m_aRedlines.
- RedlineParamsPtr m_currentRedline;
- RedlineParamsPtr m_previousRedline;
- RedlineParamsPtr m_pParaMarkerRedline;
- bool m_bIsParaMarkerChange;
- // redline data of the terminating run, if it's a moveFrom deletion
- RedlineParamsPtr m_pParaMarkerRedlineMoveFrom;
-
- /// If the current paragraph has any runs.
- bool m_bParaChanged;
- bool m_bIsFirstParaInSection;
- bool m_bIsFirstParaInSectionAfterRedline;
- bool m_bIsFirstParaInShape = false;
- bool m_bDummyParaAddedForTableInSection;
- bool m_bTextFrameInserted;
- bool m_bIsPreviousParagraphFramed;
- bool m_bIsLastParaInSection;
- bool m_bIsLastSectionGroup;
- bool m_bIsInComments;
- /// If the current paragraph contains section property definitions.
- bool m_bParaSectpr;
- bool m_bUsingEnhancedFields;
- /// If the current paragraph is inside a structured document element.
- bool m_bSdt;
- bool m_bIsFirstRun;
- bool m_bIsOutsideAParagraph;
- /// This is a continuation of already finished paragraph - e.g., first in an index section
- bool m_bRemoveThisParagraph = false;
-
- css::uno::Reference< css::text::XTextCursor > xTOCMarkerCursor;
-
- //annotation import
- css::uno::Reference< css::beans::XPropertySet > m_xAnnotationField;
- sal_Int32 m_nAnnotationId;
- std::unordered_map< sal_Int32, AnnotationPosition > m_aAnnotationPositions;
-
- void GetCurrentLocale(css::lang::Locale& rLocale);
- void SetNumberFormat(const OUString& rCommand, css::uno::Reference<css::beans::XPropertySet> const& xPropertySet, bool bDetectFormat = false);
- /// @throws css::uno::Exception
- css::uno::Reference<css::beans::XPropertySet> FindOrCreateFieldMaster(const char* pFieldMasterService, const OUString& rFieldMasterName);
- css::uno::Reference<css::beans::XPropertySet> const & GetDocumentSettings();
-
- std::map<sal_Int32, css::uno::Any> deferredCharacterProperties;
- SmartTagHandler m_aSmartTagHandler;
-
- css::uno::Reference<css::text::XTextRange> m_xGlossaryEntryStart;
- css::uno::Reference<css::text::XTextRange> m_xSdtEntryStart;
-
-public:
- css::uno::Reference<css::text::XTextRange> m_xInsertTextRange;
- css::uno::Reference<css::text::XTextRange> m_xAltChunkStartingRange;
-private:
- bool m_bIsNewDoc;
- bool m_bIsAltChunk = false;
- bool m_bIsReadGlossaries;
-public:
- DomainMapper_Impl(
- DomainMapper& rDMapper,
- css::uno::Reference < css::uno::XComponentContext > const& xContext,
- css::uno::Reference< css::lang::XComponent > const& xModel,
- SourceDocumentType eDocumentType,
- utl::MediaDescriptor const & rMediaDesc);
- ~DomainMapper_Impl();
-
- SectionPropertyMap* GetLastSectionContext( )
- {
- return dynamic_cast< SectionPropertyMap* >( m_pLastSectionContext.get( ) );
- }
-
- css::uno::Reference<css::container::XNameContainer> const & GetPageStyles();
- OUString GetUnusedPageStyleName();
- css::uno::Reference<css::text::XText> const & GetBodyText();
- const css::uno::Reference<css::lang::XMultiServiceFactory>& GetTextFactory() const
- {
- return m_xTextFactory;
- }
- const css::uno::Reference<css::text::XTextDocument>& GetTextDocument() const
- {
- return m_xTextDocument;
- }
- void SetDocumentSettingsProperty( const OUString& rPropName, const css::uno::Any& rValue );
-
- void CreateRedline(css::uno::Reference<css::text::XTextRange> const& xRange, const RedlineParamsPtr& pRedline);
-
- void CheckParaMarkerRedline(css::uno::Reference<css::text::XTextRange> const& xRange);
-
- void CheckRedline(css::uno::Reference<css::text::XTextRange> const& xRange);
-
- void StartParaMarkerChange( );
- void EndParaMarkerChange( );
- void ChainTextFrames();
-
- void RemoveDummyParaForTableInSection();
- void AddDummyParaForTableInSection();
- void RemoveLastParagraph( );
- void SetIsLastParagraphInSection( bool bIsLast );
- bool GetIsLastParagraphInSection() const { return m_bIsLastParaInSection;}
- void SetRubySprmId( sal_uInt32 nSprmId) { m_aRubyInfo.nSprmId = nSprmId ; }
- void SetRubyText( OUString const &sText, OUString const &sStyle) {
- m_aRubyInfo.sRubyText = sText;
- m_aRubyInfo.sRubyStyle = sStyle;
- }
- const RubyInfo & GetRubyInfo() const { return m_aRubyInfo;}
- void SetRubyInfo(const RubyInfo & rInfo) { m_aRubyInfo = rInfo;}
-
- void SetIsLastSectionGroup( bool bIsLast );
- bool GetIsLastSectionGroup() const { return m_bIsLastSectionGroup;}
- void SetIsFirstParagraphInSection( bool bIsFirst );
- void SetIsFirstParagraphInSectionAfterRedline( bool bIsFirstAfterRedline );
- bool GetIsFirstParagraphInSection( bool bAfterRedline = false ) const;
- void SetIsFirstParagraphInShape(bool bIsFirst);
- bool GetIsFirstParagraphInShape() const { return m_bIsFirstParaInShape; }
- void SetIsDummyParaAddedForTableInSection( bool bIsAdded );
- bool GetIsDummyParaAddedForTableInSection() const { return m_bDummyParaAddedForTableInSection;}
-
- /// Track if a textframe has been inserted into this section
- void SetIsTextFrameInserted( bool bIsInserted );
- bool GetIsTextFrameInserted() const { return m_bTextFrameInserted;}
-
- void SetIsPreviousParagraphFramed( bool bIsFramed ) { m_bIsPreviousParagraphFramed = bIsFramed; }
- bool GetIsPreviousParagraphFramed() const { return m_bIsPreviousParagraphFramed; }
- void SetParaSectpr(bool bParaSectpr);
- bool GetParaSectpr() const { return m_bParaSectpr;}
-
- void SetSymbolChar( sal_Int32 nSymbol) { m_aSymbolData.cSymbol = sal_Unicode(nSymbol); }
- void SetSymbolFont( OUString const &rName ) { m_aSymbolData.sFont = rName; }
- const SymbolData & GetSymbolData() const { return m_aSymbolData;}
-
- /// Setter method for m_bSdt.
- void SetSdt(bool bSdt);
- /// Getter method for m_bSdt.
- bool GetSdt() const { return m_bSdt;}
- bool GetParaChanged() const { return m_bParaChanged;}
- bool GetParaHadField() const { return m_bParaHadField; }
- bool GetRemoveThisPara() const { return m_bRemoveThisParagraph; }
-
- void deferBreak( BreakType deferredBreakType );
- bool isBreakDeferred( BreakType deferredBreakType );
- void clearDeferredBreaks();
- void clearDeferredBreak(BreakType deferredBreakType);
-
- void setSdtEndDeferred(bool bSdtEndDeferred);
- bool isSdtEndDeferred() const;
- void setParaSdtEndDeferred(bool bParaSdtEndDeferred);
- bool isParaSdtEndDeferred() const;
-
- void finishParagraph( const PropertyMapPtr& pPropertyMap, const bool bRemove = false, const bool bNoNumbering = false);
- void appendTextPortion( const OUString& rString, const PropertyMapPtr& pPropertyMap );
- void appendTextContent(const css::uno::Reference<css::text::XTextContent>&, const css::uno::Sequence<css::beans::PropertyValue>&);
- void appendOLE( const OUString& rStreamName, const std::shared_ptr<OLEHandler>& pOleHandler );
- void appendStarMath( const Value& v);
- void adjustLastPara(sal_Int8 nAlign);
- css::uno::Reference<css::beans::XPropertySet> appendTextSectionAfter(css::uno::Reference<css::text::XTextRange> const & xBefore);
-
- /// AutoText import: each entry is placed in the separate section
- void appendGlossaryEntry();
- /// Remember where entry was started
- void setGlossaryEntryStart( css::uno::Reference<css::text::XTextRange> const & xStart )
- {
- m_xGlossaryEntryStart = xStart;
- }
-
- // push the new properties onto the stack and make it the 'current' property map
- void PushProperties(ContextType eId);
- void PushStyleProperties(const PropertyMapPtr& pStyleProperties);
- void PushListProperties(const PropertyMapPtr& pListProperties);
- void PopProperties(ContextType eId);
-
- ContextType GetTopContextType() const { return m_aContextStack.top(); }
- const PropertyMapPtr& GetTopContext() const
- {
- return m_pTopContext;
- }
- PropertyMapPtr GetTopContextOfType(ContextType eId);
-
- bool HasTopText() const;
- css::uno::Reference<css::text::XTextAppend> const & GetTopTextAppend();
- FieldContextPtr const & GetTopFieldContext();
-
- bool HasTopAnchoredObjects() const;
-
- FontTablePtr const & GetFontTable()
- {
- if(!m_pFontTable)
- m_pFontTable = new FontTable();
- return m_pFontTable;
- }
- StyleSheetTablePtr const & GetStyleSheetTable()
- {
- if(!m_pStyleSheetTable)
- m_pStyleSheetTable = new StyleSheetTable( m_rDMapper, m_xTextDocument, m_bIsNewDoc );
- return m_pStyleSheetTable;
- }
- OUString GetListStyleName(sal_Int32 nListId);
- ListsManager::Pointer const & GetListTable();
- ThemeTablePtr const & GetThemeTable()
- {
- if(!m_pThemeTable)
- m_pThemeTable = new ThemeTable;
- return m_pThemeTable;
- }
-
- SettingsTablePtr const & GetSettingsTable()
- {
- if( !m_pSettingsTable )
- m_pSettingsTable = new SettingsTable(m_rDMapper);
- return m_pSettingsTable;
- }
-
- GraphicImportPtr const & GetGraphicImport( GraphicImportType eGraphicImportType );
- void ResetGraphicImport();
- // this method deletes the current m_pGraphicImport after import
- void ImportGraphic(const writerfilter::Reference< Properties>::Pointer_t&, GraphicImportType eGraphicImportType );
-
- void InitTabStopFromStyle(const css::uno::Sequence<css::style::TabStop>& rInitTabStops);
- void IncorporateTabStop( const DeletableTabStop &aTabStop );
- css::uno::Sequence<css::style::TabStop> GetCurrentTabStopAndClear();
-
- void SetCurrentParaStyleName(const OUString& sStringValue) {m_sCurrentParaStyleName = sStringValue;}
- OUString GetCurrentParaStyleName();
- OUString GetDefaultParaStyleName();
-
- // specified style - including inherited properties. Indicate whether paragraph defaults should be checked.
- css::uno::Any GetPropertyFromStyleSheet(PropertyIds eId, StyleSheetEntryPtr pEntry, const bool bDocDefaults, const bool bPara, bool* bIsDocDefault = nullptr);
- // current paragraph style - including inherited properties
- css::uno::Any GetPropertyFromParaStyleSheet(PropertyIds eId);
- // context's character style - including inherited properties
- css::uno::Any GetPropertyFromCharStyleSheet(PropertyIds eId, const PropertyMapPtr& rContext);
- // get property first from the given context, or secondly via inheritance from styles/docDefaults
- css::uno::Any GetAnyProperty(PropertyIds eId, const PropertyMapPtr& rContext);
- void SetStyleSheetImport( bool bSet ) { m_bInStyleSheetImport = bSet;}
- bool IsStyleSheetImport()const { return m_bInStyleSheetImport;}
- void SetAnyTableImport( bool bSet ) { m_bInAnyTableImport = bSet;}
- bool IsAnyTableImport()const { return m_bInAnyTableImport;}
- bool IsInShape()const { return m_aAnchoredStack.size() > 0;}
-
- void PushShapeContext(const css::uno::Reference<css::drawing::XShape>& xShape);
- void PopShapeContext();
- void UpdateEmbeddedShapeProps(const css::uno::Reference<css::drawing::XShape>& xShape);
- /// Add a pending shape: it's currently inserted into the document, but it should be removed before the import finishes.
- void PushPendingShape(const css::uno::Reference<css::drawing::XShape>& xShape);
- /// Get the first pending shape, if there are any.
- css::uno::Reference<css::drawing::XShape> PopPendingShape();
-
- void PushPageHeader(SectionPropertyMap::PageType eType);
- void PushPageFooter(SectionPropertyMap::PageType eType);
-
- void PopPageHeaderFooter();
- bool IsInHeaderFooter() const { return m_eInHeaderFooterImport != HeaderFooterImportState::none; }
-
- bool IsInTOC() const { return m_bStartTOC; }
-
- void PushFootOrEndnote( bool bIsFootnote );
- void PopFootOrEndnote();
- bool IsInFootOrEndnote() const { return m_bInFootOrEndnote; }
-
- void StartCustomFootnote(const PropertyMapPtr pContext);
- void EndCustomFootnote();
- bool IsInCustomFootnote() const { return m_bHasFootnoteStyle; }
- bool CheckFootnoteStyle() const { return m_bCheckFootnoteStyle; }
- void SetHasFootnoteStyle(bool bVal) { m_bHasFootnoteStyle = bVal; }
- void SetCheckFootnoteStyle(bool bVal) { m_bCheckFootnoteStyle = bVal; }
-
- const PropertyMapPtr& GetFootnoteContext() const { return m_pFootnoteContext; }
-
- SkipFootnoteSeparator GetSkipFootnoteState() const { return m_eSkipFootnoteState; }
- void SetSkipFootnoteState(SkipFootnoteSeparator eId) { m_eSkipFootnoteState = eId; }
-
- void PushAnnotation();
- void PopAnnotation();
-
- /// A field context starts with a cFieldStart.
- void PushFieldContext();
- //the current field context waits for the completion of the command
- bool IsOpenFieldCommand() const;
- bool IsOpenField() const;
- //mark field in current context as locked (fixed)
- void SetFieldLocked();
- //collect the pieces of the command
- void AppendFieldCommand(OUString const & rPartOfCommand);
- void handleRubyEQField( const FieldContextPtr& pContext);
- void handleFieldSet
- (const FieldContextPtr& pContext,
- css::uno::Reference< css::uno::XInterface > const & xFieldInterface,
- css::uno::Reference< css::beans::XPropertySet > const& xFieldProperties);
- void handleFieldAsk
- (const FieldContextPtr& pContext,
- css::uno::Reference< css::uno::XInterface > & xFieldInterface,
- css::uno::Reference< css::beans::XPropertySet > const& xFieldProperties);
- OUString convertFieldFormula(const OUString& input);
- void handleFieldFormula
- (const FieldContextPtr& pContext,
- css::uno::Reference< css::beans::XPropertySet > const& xFieldProperties);
- void handleAutoNum
- (const FieldContextPtr& pContext,
- css::uno::Reference< css::uno::XInterface > const & xFieldInterface,
- css::uno::Reference< css::beans::XPropertySet > const& xFieldProperties);
- static void handleAuthor
- (std::u16string_view rFirstParam,
- css::uno::Reference< css::beans::XPropertySet > const& xFieldProperties,
- FieldId eFieldId);
- void handleDocProperty
- (const FieldContextPtr& pContext,
- OUString const& rFirstParam,
- css::uno::Reference< css::uno::XInterface > & xFieldInterface);
- void handleToc
- (const FieldContextPtr& pContext,
- const OUString & sTOCServiceName);
- void handleIndex
- (const FieldContextPtr& pContext,
- const OUString & sTOCServiceName);
-
- void handleBibliography
- (const FieldContextPtr& pContext,
- const OUString & sTOCServiceName);
- /// The field command has to be closed (cFieldSep appeared).
- void CloseFieldCommand();
- //the _current_ fields require a string type result while TOCs accept richt results
- bool IsFieldResultAsString();
- void AppendFieldResult(std::u16string_view rResult);
- //apply the result text to the related field
- void SetFieldResult(OUString const& rResult);
- // set FFData of top field context
- void SetFieldFFData( const FFDataHandler::Pointer_t& pFFDataHandler );
- /// The end of field is reached (cFieldEnd appeared) - the command might still be open.
- void PopFieldContext();
-
- /// Returns title of the TOC placed in paragraph(s) before TOC field inside STD-frame
- OUString extractTocTitle();
- css::uno::Reference<css::beans::XPropertySet> createSectionForRange(css::uno::Reference< css::text::XTextRange > xStart, css::uno::Reference< css::text::XTextRange > xEnd, const OUString & sObjectType, bool stepLeft);
-
- void SetBookmarkName( const OUString& rBookmarkName );
- void StartOrEndBookmark( const OUString& rId );
-
- void setPermissionRangeEd(const OUString& user);
- void setPermissionRangeEdGrp(const OUString& group);
- void startOrEndPermissionRange(sal_Int32 permissinId);
-
- void AddAnnotationPosition(
- const bool bStart,
- const sal_Int32 nAnnotationId );
-
- bool hasTableManager() const
- {
- return !m_aTableManagers.empty();
- }
-
- DomainMapperTableManager& getTableManager()
- {
- return *m_aTableManagers.top();
- }
-
- void appendTableManager( )
- {
- tools::SvRef<DomainMapperTableManager> pMngr(new DomainMapperTableManager());
- m_aTableManagers.push( pMngr );
- }
-
- void appendTableHandler( )
- {
- if (m_pTableHandler)
- m_aTableManagers.top()->setHandler(m_pTableHandler);
- }
-
- void popTableManager( )
- {
- if (hasTableManager())
- m_aTableManagers.pop();
- }
-
- void SetLineNumbering( sal_Int32 nLnnMod, sal_uInt32 nLnc, sal_Int32 ndxaLnn );
- bool IsLineNumberingSet() const {return m_bLineNumberingSet;}
-
- DeletableTabStop m_aCurrentTabStop;
-
- /// If we're right after the end of a table.
- bool m_bConvertedTable = false;
-
- bool IsOOXMLImport() const { return m_eDocumentType == SourceDocumentType::OOXML; }
-
- bool IsRTFImport() const { return m_eDocumentType == SourceDocumentType::RTF; }
-
- void InitPageMargins() { m_aPageMargins = PageMar(); }
- void SetPageMarginTwip( PageMarElement eElement, sal_Int32 nValue );
- const PageMar& GetPageMargins() const {return m_aPageMargins;}
-
- const LineNumberSettings& GetLineNumberSettings() const { return m_aLineNumberSettings;}
- void SetLineNumberSettings(const LineNumberSettings& rSet) { m_aLineNumberSettings = rSet;}
-
- void SetInFootnoteProperties(bool bSet) { m_bIsInFootnoteProperties = bSet;}
- bool IsInFootnoteProperties() const { return m_bIsInFootnoteProperties;}
-
- bool IsInComments() const { return m_bIsInComments; };
-
- void CheckUnregisteredFrameConversion( );
-
- void RegisterFrameConversion(css::uno::Reference<css::text::XTextRange> const& xFrameStartRange,
- css::uno::Reference<css::text::XTextRange> const& xFrameEndRange,
- const std::vector<css::beans::PropertyValue>& aFrameProperties);
- void ExecuteFrameConversion();
-
- void AddNewRedline( sal_uInt32 sprmId );
-
- sal_Int32 GetCurrentRedlineToken( ) const;
- void SetCurrentRedlineAuthor( const OUString& sAuthor );
- void SetCurrentRedlineDate( const OUString& sDate );
- void SetCurrentRedlineId( sal_Int32 nId );
- void SetCurrentRedlineToken( sal_Int32 nToken );
- void SetCurrentRedlineRevertProperties( const css::uno::Sequence<css::beans::PropertyValue>& aProperties );
- void SetCurrentRedlineIsRead();
- void RemoveTopRedline( );
- void SetCurrentRedlineInitials( const OUString& sInitials );
- bool IsFirstRun() const { return m_bIsFirstRun;}
- void SetIsFirstRun(bool bval) { m_bIsFirstRun = bval;}
- bool IsOutsideAParagraph() const { return m_bIsOutsideAParagraph;}
- void SetIsOutsideAParagraph(bool bval) { m_bIsOutsideAParagraph = bval;}
-
- void ApplySettingsTable();
-
- css::uno::Reference<css::text::XTextAppend> GetCurrentXText() {
- return m_aTextAppendStack.empty() ? nullptr : m_aTextAppendStack.top().xTextAppend;
- }
-
- void NewFrameDirection() {
- m_aFrameDirectionQueue.push(std::nullopt);
- m_bFrameDirectionSet = false;
- }
- void SetFrameDirection(sal_Int16 nDirection) {
- if (!m_bFrameDirectionSet) {
- assert(!m_aFrameDirectionQueue.empty());
- m_aFrameDirectionQueue.back() = nDirection;
- m_bFrameDirectionSet = true;
- }
- }
- std::optional<sal_Int16> PopFrameDirection() {
- if (m_aFrameDirectionQueue.empty())
- return {};
- const std::optional<sal_Int16> nDirection = m_aFrameDirectionQueue.front();
- m_aFrameDirectionQueue.pop();
- return nDirection;
- }
-
- SectionPropertyMap * GetSectionContext();
- /// If the current paragraph has a numbering style associated, this method returns its character style (part of the numbering rules)
- css::uno::Reference<css::beans::XPropertySet> GetCurrentNumberingCharStyle();
- /// If the current paragraph has a numbering style associated, this method returns its numbering rules
- css::uno::Reference<css::container::XIndexAccess> GetCurrentNumberingRules(sal_Int32* pListLevel);
-
- /**
- Used for attributes/sprms which cannot be evaluated immediately (e.g. they depend
- on another one that comes in the same CONTEXT_CHARACTER). The property will be processed
- again in DomainMapper::processDeferredCharacterProperties().
- */
- void deferCharacterProperty(sal_Int32 id, const css::uno::Any& value);
- /**
- Processes properties deferred using deferCharacterProperty(). To be called whenever the top
- CONTEXT_CHARACTER is going to be used (e.g. by appendText()).
- */
- void processDeferredCharacterProperties();
-
- sal_Int32 getNumberingProperty(const sal_Int32 nListId, sal_Int32 nListLevel, const OUString& aProp);
- /// Get a property of the current numbering style's current level.
- sal_Int32 getCurrentNumberingProperty(const OUString& aProp);
-
- /// If we're importing into a new document, or just pasting to an existing one.
- bool IsNewDoc() const { return m_bIsNewDoc;}
-
- bool IsAltChunk() const { return m_bIsAltChunk;}
-
- /// If we're importing autotext.
- bool IsReadGlossaries() const { return m_bIsReadGlossaries;}
-
- tools::SvRef<SdtHelper> m_pSdtHelper;
-
- /// Document background color, applied to every page style.
- std::optional<sal_Int32> m_oBackgroundColor;
-
- /**
- * This contains the raw table depth. m_nTableDepth > 0 is the same as
- * getTableManager().isInTable(), unless we're in the first paragraph of a
- * table, or first paragraph after a table, as the table manager is only
- * updated once we ended the paragraph (and know if the para has the
- * inTbl SPRM or not).
- */
- sal_Int32 m_nTableDepth;
- /// Raw table cell depth.
- sal_Int32 m_nTableCellDepth;
- /// Table cell depth of the last finished paragraph.
- sal_Int32 m_nLastTableCellParagraphDepth;
-
- /// If the current section has footnotes.
- bool m_bHasFtn;
- /// If the current section has a footnote separator.
- bool m_bHasFtnSep;
-
- /// If the next tab should be ignored, used for footnotes.
- bool m_bCheckFirstFootnoteTab;
- bool m_bIgnoreNextTab;
- /// Pending floating tables: they may be converted to text frames at the section end.
- std::vector<FloatingTableInfo> m_aPendingFloatingTables;
-
- /// Paragraphs with anchored objects in the current section.
- std::vector<AnchoredObjectsInfo> m_aAnchoredObjectAnchors;
-
- /// Append a property to a sub-grabbag if necessary (e.g. 'lineRule', 'auto')
- void appendGrabBag(std::vector<css::beans::PropertyValue>& rInteropGrabBag, const OUString& aKey, const OUString& aValue);
- void appendGrabBag(std::vector<css::beans::PropertyValue>& rInteropGrabBag, const OUString& aKey, std::vector<css::beans::PropertyValue>& rValue);
-
- /// Enable, disable and check status of grabbags
- void enableInteropGrabBag(const OUString& aName);
- void disableInteropGrabBag();
- bool isInteropGrabBagEnabled() const;
-
- /// Name of m_aInteropGrabBag.
- OUString m_aInteropGrabBagName;
-
- /// A toplevel dmapper grabbag, like 'pPr'.
- std::vector<css::beans::PropertyValue> m_aInteropGrabBag;
-
- /// A sub-grabbag of m_aInteropGrabBag, like 'spacing'.
- std::vector<css::beans::PropertyValue> m_aSubInteropGrabBag;
-
- /// ST_PositionOffset values we received
- std::pair<OUString, OUString> m_aPositionOffsets;
- /// ST_AlignH/V values we received
- std::pair<OUString, OUString> m_aAligns;
- /// ST_PositivePercentage values we received
- std::queue<OUString> m_aPositivePercentages;
- bool isInIndexContext() const { return m_bStartIndex;}
- bool isInBibliographyContext() const { return m_bStartBibliography;}
- SmartTagHandler& getSmartTagHandler() { return m_aSmartTagHandler; }
-
- void substream(Id rName, ::writerfilter::Reference<Stream>::Pointer_t const& ref);
-
- /// If the document needs to split paragraph.
- bool m_bIsSplitPara;
-
- /// Check if "SdtEndBefore" property is set
- bool IsSdtEndBefore();
-
- bool IsDiscardHeaderFooter() const;
-
- bool IsForceGenericFields() const { return m_bForceGenericFields; }
-
- void SetParaAutoBefore(bool bParaAutoBefore) { m_bParaAutoBefore = bParaAutoBefore; }
-
- /// Forget about the previous paragraph, as it's not inside the same
- /// start/end node.
- void ClearPreviousParagraph();
-
- /// Handle redline text portions in frames:
- /// store their data, and create them after frame creation
- bool m_bIsActualParagraphFramed;
- std::vector<css::uno::Any> aFramedRedlines;
-
- bool IsParaWithInlineObject() const { return m_bParaWithInlineObject; }
-
- css::uno::Reference< css::embed::XStorage > m_xDocumentStorage;
-
- /// Handles <w:altChunk>.
- void HandleAltChunk(const OUString& rStreamName);
-
-private:
- void PushPageHeaderFooter(bool bHeader, SectionPropertyMap::PageType eType);
- // Start a new index section; if needed, finish current paragraph
- css::uno::Reference<css::beans::XPropertySet> StartIndexSectionChecked(const OUString& sServiceName);
- std::vector<css::uno::Reference< css::drawing::XShape > > m_vTextFramesForChaining ;
- /// Current paragraph had at least one field in it.
- bool m_bParaHadField;
- bool m_bSaveParaHadField;
- css::uno::Reference<css::beans::XPropertySet> m_xPreviousParagraph;
- /// Current paragraph has automatic before spacing.
- bool m_bParaAutoBefore;
- /// Current paragraph in a table is first paragraph of a cell
- bool m_bFirstParagraphInCell;
- bool m_bSaveFirstParagraphInCell;
- /// Current paragraph had at least one inline object in it.
- bool m_bParaWithInlineObject;
-};
-
-} //namespace writerfilter::dmapper
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/FFDataHandler.cxx b/writerfilter/source/dmapper/FFDataHandler.cxx
deleted file mode 100644
index 507327cf8333..000000000000
--- a/writerfilter/source/dmapper/FFDataHandler.cxx
+++ /dev/null
@@ -1,190 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * 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 .
- */
-#include "FFDataHandler.hxx"
-#include "TagLogger.hxx"
-
-#include <ooxml/resourceids.hxx>
-
-namespace writerfilter::dmapper {
-
-/************************
- * class: FFDataHandler *
- ************************/
-
-FFDataHandler::FFDataHandler() :
-LoggedProperties("FFDataHandler"),
-m_nCheckboxHeight(0),
-m_bCheckboxAutoHeight(false),
-m_nCheckboxChecked(-1),
-m_nCheckboxDefault(-1),
-m_nTextMaxLength(0)
-{
-}
-
-
-FFDataHandler::~FFDataHandler()
-{
-}
-
-
-bool FFDataHandler::getCheckboxChecked() const
-{
- if (m_nCheckboxChecked != -1)
- return m_nCheckboxChecked;
- else if (m_nCheckboxDefault != -1)
- return m_nCheckboxDefault;
- else
- return false;
-}
-
-
-void FFDataHandler::lcl_sprm(Sprm & r_Sprm)
-{
- switch(r_Sprm.getId())
- {
- case NS_ooxml::LN_CT_FFData_name:
- {
- m_sName = r_Sprm.getValue()->getString();
- }
- break;
- case NS_ooxml::LN_CT_FFData_helpText:
- {
- resolveSprm(r_Sprm);
- }
- break;
- case NS_ooxml::LN_CT_FFData_statusText:
- {
- resolveSprm(r_Sprm);
- }
- break;
- case NS_ooxml::LN_CT_FFData_entryMacro:
- {
- m_sEntryMacro = r_Sprm.getValue()->getString();
- }
- break;
- case NS_ooxml::LN_CT_FFData_exitMacro:
- {
- m_sExitMacro = r_Sprm.getValue()->getString();
- }
- break;
- case NS_ooxml::LN_CT_FFCheckBox_size:
- {
- m_nCheckboxHeight = r_Sprm.getValue()->getInt();
- }
- break;
- case NS_ooxml::LN_CT_FFCheckBox_sizeAuto:
- {
- m_bCheckboxAutoHeight = r_Sprm.getValue()->getInt();
- }
- break;
- case NS_ooxml::LN_CT_FFCheckBox_checked:
- {
- m_nCheckboxChecked = r_Sprm.getValue()->getInt();
- }
- break;
- case NS_ooxml::LN_CT_FFCheckBox_default:
- {
- m_nCheckboxDefault = r_Sprm.getValue()->getInt();
- }
- break;
- case NS_ooxml::LN_CT_FFData_checkBox:
- {
- resolveSprm(r_Sprm);
- }
- break;
- case NS_ooxml::LN_CT_FFDDList_result:
- {
- m_sDropDownResult = r_Sprm.getValue()->getString();
- }
- break;
- case NS_ooxml::LN_CT_FFDDList_listEntry:
- {
- m_DropDownEntries.push_back(r_Sprm.getValue()->getString());
- }
- break;
- case NS_ooxml::LN_CT_FFData_ddList:
- {
- resolveSprm(r_Sprm);
- }
- break;
- case NS_ooxml::LN_CT_FFTextInput_type:
- {
- m_sTextType = r_Sprm.getValue()->getString();
- }
- break;
- case NS_ooxml::LN_CT_FFTextInput_default:
- {
- m_sTextDefault = r_Sprm.getValue()->getString();
- }
- break;
- case NS_ooxml::LN_CT_FFTextInput_maxLength:
- {
- m_nTextMaxLength = r_Sprm.getValue()->getInt();
- }
- break;
- case NS_ooxml::LN_CT_FFTextInput_format:
- {
- m_sTextFormat = r_Sprm.getValue()->getString();
- }
- break;
- case NS_ooxml::LN_CT_FFData_textInput:
- {
- resolveSprm(r_Sprm);
- }
- break;
- default:
-#ifdef DBG_UTIL
- TagLogger::getInstance().element("unhandled");
-#endif
- break;
- }
-}
-
-void FFDataHandler::resolveSprm(Sprm & r_Sprm)
-{
- writerfilter::Reference<Properties>::Pointer_t pProperties = r_Sprm.getProps();
- if( pProperties)
- pProperties->resolve(*this);
-}
-
-void FFDataHandler::lcl_attribute(Id name, Value & val)
-{
- switch (name)
- {
- case NS_ooxml::LN_CT_FFHelpText_val:
- {
- m_sHelpText = val.getString();
- }
- break;
- case NS_ooxml::LN_CT_FFStatusText_val:
- {
- m_sStatusText = val.getString();
- }
- break;
- default:
-#ifdef DBG_UTIL
- TagLogger::getInstance().element("unhandled");
-#endif
- break;
- }
-}
-
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/FFDataHandler.hxx b/writerfilter/source/dmapper/FFDataHandler.hxx
deleted file mode 100644
index 1603d39b0ad0..000000000000
--- a/writerfilter/source/dmapper/FFDataHandler.hxx
+++ /dev/null
@@ -1,101 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * 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 .
- */
-#ifndef INCLUDED_WRITERFILTER_SOURCE_DMAPPER_FFDATAHANDLER_HXX
-#define INCLUDED_WRITERFILTER_SOURCE_DMAPPER_FFDATAHANDLER_HXX
-#include "LoggedResources.hxx"
-#include <rtl/ustring.hxx>
-#include <vector>
-namespace writerfilter::dmapper
-{
-class FFDataHandler : public LoggedProperties
-{
-public:
- // typedefs
- typedef ::tools::SvRef<FFDataHandler> Pointer_t;
- typedef ::std::vector<OUString> DropDownEntries_t;
-
- // constructor
- FFDataHandler();
- // destructor
- virtual ~FFDataHandler() override;
-
- // member: name
- const OUString& getName() const { return m_sName; }
-
- // member: helpText
- const OUString& getHelpText() const { return m_sHelpText; }
-
- // member: statusText
- const OUString& getStatusText() const { return m_sStatusText; }
-
- const OUString& getEntryMacro() const { return m_sEntryMacro; }
- const OUString& getExitMacro() const { return m_sExitMacro; }
-
- // member: checkboxHeight
- sal_uInt32 getCheckboxHeight() const { return m_nCheckboxHeight; }
-
- // member: checkboxAutoHeight
- bool getCheckboxAutoHeight() const { return m_bCheckboxAutoHeight; }
-
- // member: checkboxChecked or checkboxDefault (if the previous is not set)
- bool getCheckboxChecked() const;
-
- // member: dropDownResult
- const OUString& getDropDownResult() const { return m_sDropDownResult; }
-
- // member: dropDownEntries
- const DropDownEntries_t& getDropDownEntries() const { return m_DropDownEntries; }
-
- // member: textDefault
- const OUString& getTextDefault() const { return m_sTextDefault; }
-
- const OUString& getTextType() const { return m_sTextType; }
- const OUString& getTextFormat() const { return m_sTextFormat; }
- sal_uInt16 getTextMaxLength() const { return m_nTextMaxLength; }
-
- // sprm
- void resolveSprm(Sprm& r_sprm);
-
-private:
- OUString m_sName;
- OUString m_sHelpText;
- OUString m_sStatusText;
- OUString m_sEntryMacro;
- OUString m_sExitMacro;
- sal_uInt32 m_nCheckboxHeight;
- bool m_bCheckboxAutoHeight;
- int m_nCheckboxChecked;
- int m_nCheckboxDefault;
- OUString m_sDropDownResult;
- DropDownEntries_t m_DropDownEntries;
- OUString m_sTextDefault;
- OUString m_sTextType;
- OUString m_sTextFormat;
- sal_uInt16 m_nTextMaxLength;
-
- // sprm
- void lcl_sprm(Sprm& r_sprm) override;
-
- // attribute
- void lcl_attribute(Id name, Value& val) override;
-};
-}
-#endif // INCLUDED_WRITERFILTER_SOURCE_DMAPPER_FFDATAHANDLER_HXX
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/FieldTypes.hxx b/writerfilter/source/dmapper/FieldTypes.hxx
deleted file mode 100644
index 7755c3feb7ca..000000000000
--- a/writerfilter/source/dmapper/FieldTypes.hxx
+++ /dev/null
@@ -1,306 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * 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 .
- */
-#ifndef INCLUDED_WRITERFILTER_SOURCE_DMAPPER_FIELDTYPES_HXX
-#define INCLUDED_WRITERFILTER_SOURCE_DMAPPER_FIELDTYPES_HXX
-
-namespace writerfilter::dmapper {
-
-enum FieldId
-{
- /* ADDRESSBLOCK \d \* MERGEFORMAT -> Addressblock completely unsupported*/
- FIELD_ADDRESSBLOCK
- /* ADVANCE \d downvalue \l leftvalue \r rightvalue \u upvalue \x xvalue \y yvalue -> unsupported*/
- ,FIELD_ADVANCE
- /* ASK bookmarkname "hint" \d defaultanswer \o \* MERGEFORMAT ->
- the hint is not always quoted, inputfield with default answer, prompt before merge (\o)
- */
- ,FIELD_ASK
- /* AUTONUM \* Numberingswitch ->
- mapped to sequence field "AutoNr"
- */
- ,FIELD_AUTONUM
- /* AUTONUMLGL \* Numberingswitch ->
- mapped to sequence field "AutoNr"
- */
- ,FIELD_AUTONUMLGL
- /* AUTONUMOUT \* Numberingswitch ->
- mapped to sequence field "AutoNr"
- */
- ,FIELD_AUTONUMOUT
- /* AUTHOR NewAuthor \* defaultswitch \* MERGEFORMAT ->
- mapped to sequence field "AutoNr"
- */
- ,FIELD_AUTHOR
- /* COMMENTS "comment" \* MERGEFORMAT ->
- Docinfo-Comments
- */
- ,FIELD_COMMENTS
- /* CREATEDATE \h \* MERGEFORMAT ->
- docinfo-created-date
- */
- ,FIELD_CREATEDATE
- /* DATE \@ "number format" \s \* MERGEFORMAT ->
- ww8filterimprovement: multiple languages now supported
- */
- ,FIELD_DATE
- /* DOCPROPERTY propertyname \* MERGEFORMAT ->
- ww8filterimprovement: some fields imported as functionally equivalent fields if possible,
- the others imported as UserField
- */
- ,FIELD_DOCPROPERTY
- /* DOCVARIABLE Name \* MERGEFORMAT ->
- ww8filterimprovement: now imported as user fields
- */
- ,FIELD_DOCVARIABLE
- /* EDITTIME \# "displayformat" \* Numberingswitch \* MERGEFORMAT ->
- DocInfo-Modified-Date
- ww8filterimprovement: multiple languages now supported
- */
- ,FIELD_EDITTIME
- ,FIELD_EQ
- /* FILLIN "text to fill in" \d defaultanswer \o \* MERGEFORMAT ->
- Function-InputField
- */
- ,FIELD_FILLIN
- /* FILENAME \p \* * MERGEFORMAT ->
- file name (\p with path)
- */
- ,FIELD_FILENAME
- /* FILESIZE \* NumberingType \* MERGEFORMAT ->
- not imported in old ww8 filter, see lcl_ParseNumberingType
- todo find alternative field
- */
- ,FIELD_FILESIZE
- /* =formula \# "number format"
- todo find alternative field
- */
- ,FIELD_FORMULA
- /* FORMCHECKBOX */
- ,FIELD_FORMCHECKBOX
- /* FORMDROPDOWN */
- ,FIELD_FORMDROPDOWN
- /* FORMTEXT */
- ,FIELD_FORMTEXT
- /* GOTOBUTTON text \* MERGEFORMAT ->
- not imported in old ww8 filter
- todo find alternative field
- */
- ,FIELD_GOTOBUTTON
- /* HYPERLINK "link" \* MERGEFORMAT ->
- not imported in old ww8 filter
- ww8filterimprovement: now imported as hyperlink
- */
- ,FIELD_HYPERLINK
- /* IF condition "then text" "else text" ->
- not imported in old ww8 filter
- ww8filterimprovement: now imported
- todo: condition, if text, else text still missing
- */
- ,FIELD_IF
- /* INFO NameOfInfo \* MERGEFORMAT -> old
- todo: filter imports wrong?
- */
- ,FIELD_INFO
- /* INCLUDEPICTURE path \* MERGEFORMAT->
- old filter imports an embedded picture
- */
- ,FIELD_INCLUDEPICTURE
- /* KEYWORDS keyword \* defaultswitch \* Numberingswitch \* MERGEFORMAT ->
- DocInfo Keywords
- */
- ,FIELD_KEYWORDS
- /* LASTSAVEDBY \* MERGEFORMAT ->
- DocInfo-Modified-Author
- */
- ,FIELD_LASTSAVEDBY
- /* MACROBUTTON MacroName quick help text ->
- Macro field
- */
- ,FIELD_MACROBUTTON
- /* MERGEFIELD ColumName \b prefix \f suffix \* MERGEFORMAT ->
- ww8filterimprovement: column-only API now supported
- */
- ,FIELD_MERGEFIELD
- /* MERGEREC \* MERGEFORMAT ->
- RecordNumber field, maybe without db name
- todo: currently unchecked
- */
- ,FIELD_MERGEREC
- /* MERGESEQ \* MERGEFORMAT ->
- not imported in old ww8 filter
- ww8filterimprovement: now imported
- todo: currently unchecked
- */
- ,FIELD_MERGESEQ
- /* NEXT text ->
- Next record
- todo: currently unchecked
- */
- ,FIELD_NEXT
- /* NEXTIF condition
- todo: condition not imported
- */
- ,FIELD_NEXTIF
- /* PAGE \* Numberingswitch \* MERGEFORMAT ->
- see lcl_ParseNumberingType
- */
- ,FIELD_PAGE
- ,FIELD_PAGEREF
- /* REF targetbkm \f \* MERGEFORMAT ->
- imports a ShowVariable (bookmarkname)?
- \h hyperlink to paragraph
- \p relative to para above/below
- \f reference number
- \d separator number separator
- \n paragraph number
- \r paragraph number in relative context
- \t suppress non delimiters
- \w paragraph number in full context
- \* Upper/Lower...
- */
- ,FIELD_REF
- /* REVNUM \* Numberingswitch \* MERGEFORMAT ->
- DocInfo-revision number
- */
- ,FIELD_REVNUM
- /* SAVEDATE \@ "NumberFormat"\* MERGEFORMAT ->
- DocInfo-modified-date
- */
- ,FIELD_SAVEDATE
- /* SECTION \* NumberFormat \* MERGEFORMAT ->
- not imported in old ww8 filter see lcl_ParseNumberingType
- todo: find alternative
- */
- ,FIELD_SECTION
- /* SECTIONPAGES \* NumberFormat \* MERGEFORMAT ->
- not imported in old ww8 filter see lcl_ParseNumberingType
- todo: find alternative
- */
- ,FIELD_SECTIONPAGES
- /* SEQ sequencename \h \c \n \r \s \* MERGEFORMAT ->
- number range name:sequencename value:sequencename+1
- todo: only partially implemented, switches unsupported
- */
- ,FIELD_SEQ
- /* SET bookmarkname newtext \* MERGEFORMAT ->
- SetVariable bookmarkname = newtext
- todo: not implemented yet
- */
- ,FIELD_SET
- /* SKIPIF condition \* MERGEFORMAT ->
- ??
- todo: not implemented yet
- */
- ,FIELD_SKIPIF
- /* STYLEREF stylename \* MERGEFORMAT ->
- not imported in old ww8 filter
- todo: add an equivalent field type
- */
- ,FIELD_STYLEREF
- /* SUBJECT subject \* Defaultswitch \* MERGEFORMAT ->
- DocInfo - subject
- */
- ,FIELD_SUBJECT
- /* SYMBOL symbolnumber \* MERGEFORMAT ->
- inserts a special char (symbolnumber)
- todo: find alternative
- */
- ,FIELD_SYMBOL
- /* TEMPLATE \* Defaultswitch \* MERGEFORMAT
- TemplateName field
- */
- ,FIELD_TEMPLATE
- /* TIME \@ "number format" \* MERGEFORMAT
- ww8filterimprovement: multiple languages now supported
- */
- ,FIELD_TIME
- /* TITLE \* Defaultswitch \* MERGEFORMAT ->
- DocInfo-title
- */
- ,FIELD_TITLE
- /* USERINITIALS newinitials \* MERGEFORMAT ->
- ExtendedUser field (SHORTCUT)
- */
- ,FIELD_USERINITIALS
- /* USERADDRESS \* MERGEFORMAT ->
- not imported in old ww8 filter
- todo: find alternative
- */
- ,FIELD_USERADDRESS
- /* USERNAME newusername \* MERGEFORMAT ->
- not imported in old ww8 filter
- todo: import as extended user field(s)
- */
- ,FIELD_USERNAME
- /*
- TOC options:
- \a Builds a table of figures but does not include the captions's label and number
- \b Uses a bookmark to specify area of document from which to build table of contents
- \c Builds a table of figures of the given label
- \d Defines the separator between sequence and page numbers
- \f Builds a table of contents using TC entries instead of outline levels
- \h Hyperlinks the entries and page numbers within the table of contents
- \l Defines the TC entries field level used to build a table of contents
- \n Builds a table of contents or a range of entries, such as 1-9, in a table of contents without page numbers
- \o Builds a table of contents by using outline levels instead of TC entries
- \p Defines the separator between the table entry and its page number
- \s Builds a table of contents by using a sequence type
- \t Builds a table of contents by using style names other than the standard outline styles
- \u Builds a table of contents by using the applied paragraph outline level
- \w Preserve tab characters within table entries
- \x Preserve newline characters within table entries
- \z Hides page numbers within the table of contents when shown in Web Layout View
- */
- ,FIELD_TOC
- /*
- TOC entry: text
- \f TC entry in doc with multiple tables
- \l Outline Level
- \n Suppress page numbers
- example: TOC "EntryText \f \l 2 \n
- */
- ,FIELD_TC
- /* document statistic - number of characters
- */
- ,FIELD_NUMCHARS
- /* document statistic - number of words
- */
- ,FIELD_NUMWORDS
- /* document statistic - number of pages
- */
- ,FIELD_NUMPAGES
- /* Document alphabetical index
- */
- ,FIELD_INDEX
- /* Document alphabetical index marks
- */
- ,FIELD_XE
- /**
- * Bibliography
- */
- ,FIELD_BIBLIOGRAPHY
- /* Citation
- */
- ,FIELD_CITATION
-};
-
-}
-#endif // INCLUDED_WRITERFILTER_SOURCE_DMAPPER_FIELDTYPES_HXX
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/FontTable.cxx b/writerfilter/source/dmapper/FontTable.cxx
deleted file mode 100644
index 7973a42938ec..000000000000
--- a/writerfilter/source/dmapper/FontTable.cxx
+++ /dev/null
@@ -1,299 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * 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 .
- */
-
-#include "FontTable.hxx"
-#include <o3tl/deleter.hxx>
-#include <ooxml/resourceids.hxx>
-#include <vector>
-#include <sal/log.hxx>
-#include <rtl/tencinfo.h>
-#include <vcl/embeddedfontshelper.hxx>
-#include <unotools/fontdefs.hxx>
-
-using namespace com::sun::star;
-
-namespace writerfilter::dmapper
-{
-
-struct FontTable_Impl
-{
- std::unique_ptr<EmbeddedFontsHelper, o3tl::default_delete<EmbeddedFontsHelper>> xEmbeddedFontHelper;
- std::vector< FontEntry::Pointer_t > aFontEntries;
- FontEntry::Pointer_t pCurrentEntry;
- FontTable_Impl() {}
-};
-
-FontTable::FontTable()
-: LoggedProperties("FontTable")
-, LoggedTable("FontTable")
-, LoggedStream("FontTable")
-, m_pImpl( new FontTable_Impl )
-{
-}
-
-FontTable::~FontTable()
-{
-}
-
-void FontTable::lcl_attribute(Id Name, Value & val)
-{
- SAL_WARN_IF( !m_pImpl->pCurrentEntry, "writerfilter.dmapper", "current entry has to be set here" );
- if(!m_pImpl->pCurrentEntry)
- return ;
- int nIntValue = val.getInt();
- OUString sValue = val.getString();
- switch(Name)
- {
- case NS_ooxml::LN_CT_Pitch_val:
- if (static_cast<Id>(nIntValue) == NS_ooxml::LN_Value_ST_Pitch_fixed)
- ;
- else if (static_cast<Id>(nIntValue) == NS_ooxml::LN_Value_ST_Pitch_variable)
- ;
- else if (static_cast<Id>(nIntValue) == NS_ooxml::LN_Value_ST_Pitch_default)
- ;
- else
- SAL_WARN("writerfilter.dmapper", "FontTable::lcl_attribute: unhandled NS_ooxml::CT_Pitch_val: " << nIntValue);
- break;
- case NS_ooxml::LN_CT_Font_name:
- m_pImpl->pCurrentEntry->sFontName = sValue;
- break;
- case NS_ooxml::LN_CT_Charset_val:
- // w:characterSet has higher priority, set only if that one is not set
- if( m_pImpl->pCurrentEntry->nTextEncoding == RTL_TEXTENCODING_DONTKNOW )
- {
- m_pImpl->pCurrentEntry->nTextEncoding = rtl_getTextEncodingFromWindowsCharset( nIntValue );
- if( IsStarSymbol( m_pImpl->pCurrentEntry->sFontName ))
- m_pImpl->pCurrentEntry->nTextEncoding = RTL_TEXTENCODING_SYMBOL;
- }
- break;
- case NS_ooxml::LN_CT_Charset_characterSet:
- {
- OString tmp;
- sValue.convertToString( &tmp, RTL_TEXTENCODING_ASCII_US, OUSTRING_TO_OSTRING_CVTFLAGS );
- m_pImpl->pCurrentEntry->nTextEncoding = rtl_getTextEncodingFromMimeCharset( tmp.getStr() );
- // Older LO versions used to write incorrect character set for OpenSymbol, fix.
- if( IsStarSymbol( m_pImpl->pCurrentEntry->sFontName ))
- m_pImpl->pCurrentEntry->nTextEncoding = RTL_TEXTENCODING_SYMBOL;
- break;
- }
- default: ;
- }
-}
-
-void FontTable::lcl_sprm(Sprm& rSprm)
-{
- SAL_WARN_IF( !m_pImpl->pCurrentEntry, "writerfilter.dmapper", "current entry has to be set here" );
- if(!m_pImpl->pCurrentEntry)
- return ;
- sal_uInt32 nSprmId = rSprm.getId();
-
- switch(nSprmId)
- {
- case NS_ooxml::LN_CT_Font_charset:
- case NS_ooxml::LN_CT_Font_pitch:
- resolveSprm( rSprm );
- break;
- case NS_ooxml::LN_CT_Font_embedRegular:
- case NS_ooxml::LN_CT_Font_embedBold:
- case NS_ooxml::LN_CT_Font_embedItalic:
- case NS_ooxml::LN_CT_Font_embedBoldItalic:
- {
- writerfilter::Reference< Properties >::Pointer_t pProperties = rSprm.getProps();
- if( pProperties )
- {
- EmbeddedFontHandler handler(*this, m_pImpl->pCurrentEntry->sFontName,
- nSprmId == NS_ooxml::LN_CT_Font_embedRegular ? ""
- : nSprmId == NS_ooxml::LN_CT_Font_embedBold ? "b"
- : nSprmId == NS_ooxml::LN_CT_Font_embedItalic ? "i"
- : /*NS_ooxml::LN_CT_Font_embedBoldItalic*/ "bi" );
- pProperties->resolve( handler );
- }
- break;
- }
- case NS_ooxml::LN_CT_Font_altName:
- break;
- case NS_ooxml::LN_CT_Font_panose1:
- break;
- case NS_ooxml::LN_CT_Font_family:
- break;
- case NS_ooxml::LN_CT_Font_sig:
- break;
- case NS_ooxml::LN_CT_Font_notTrueType:
- break;
- default:
- SAL_WARN("writerfilter.dmapper", "FontTable::lcl_sprm: unhandled token: " << nSprmId);
- break;
- }
-}
-
-void FontTable::resolveSprm(Sprm & r_Sprm)
-{
- writerfilter::Reference<Properties>::Pointer_t pProperties = r_Sprm.getProps();
- if( pProperties )
- pProperties->resolve(*this);
-}
-
-void FontTable::lcl_entry(writerfilter::Reference<Properties>::Pointer_t ref)
-{
- //create a new font entry
- SAL_WARN_IF( m_pImpl->pCurrentEntry, "writerfilter.dmapper", "current entry has to be NULL here" );
- m_pImpl->pCurrentEntry = new FontEntry;
- ref->resolve(*this);
- //append it to the table
- m_pImpl->aFontEntries.push_back( m_pImpl->pCurrentEntry );
- m_pImpl->pCurrentEntry.clear();
-}
-
-void FontTable::lcl_startSectionGroup()
-{
-}
-
-void FontTable::lcl_endSectionGroup()
-{
-}
-
-void FontTable::lcl_startParagraphGroup()
-{
-}
-
-void FontTable::lcl_endParagraphGroup()
-{
-}
-
-void FontTable::lcl_startCharacterGroup()
-{
-}
-
-void FontTable::lcl_endCharacterGroup()
-{
-}
-
-void FontTable::lcl_text(const sal_uInt8*, size_t )
-{
-}
-
-void FontTable::lcl_utext(const sal_uInt8* , size_t)
-{
-}
-
-void FontTable::lcl_props(writerfilter::Reference<Properties>::Pointer_t)
-{
-}
-
-void FontTable::lcl_table(Id, writerfilter::Reference<Table>::Pointer_t)
-{
-}
-
-void FontTable::lcl_substream(Id, ::writerfilter::Reference<Stream>::Pointer_t)
-{
-}
-
-void FontTable::lcl_startShape(uno::Reference<drawing::XShape> const&)
-{
-}
-
-void FontTable::lcl_endShape( )
-{
-}
-
-FontEntry::Pointer_t FontTable::getFontEntry(sal_uInt32 nIndex)
-{
- return (m_pImpl->aFontEntries.size() > nIndex)
- ? m_pImpl->aFontEntries[nIndex]
- : FontEntry::Pointer_t();
-}
-
-sal_uInt32 FontTable::size()
-{
- return m_pImpl->aFontEntries.size();
-}
-
-bool FontTable::addEmbeddedFont(const css::uno::Reference<css::io::XInputStream>& stream,
- const OUString& fontName, const char* extra,
- std::vector<unsigned char> const & key)
-{
- if (!m_pImpl->xEmbeddedFontHelper)
- m_pImpl->xEmbeddedFontHelper.reset(new EmbeddedFontsHelper);
- return m_pImpl->xEmbeddedFontHelper->addEmbeddedFont(stream, fontName, extra, key);
-}
-
-EmbeddedFontHandler::EmbeddedFontHandler(FontTable& rFontTable, const OUString& _fontName, const char* _style )
-: LoggedProperties("EmbeddedFontHandler")
-, fontTable( rFontTable )
-, fontName( _fontName )
-, style( _style )
-{
-}
-
-EmbeddedFontHandler::~EmbeddedFontHandler()
-{
- if( !inputStream.is())
- return;
- std::vector< unsigned char > key( 32 );
- if( !fontKey.isEmpty())
- { // key for unobfuscating
- // 1 3 5 7 10 2 5 7 20 2 5 7 9 1 3 5
- // {62E79491-959F-41E9-B76B-6B32631DEA5C}
- static const int pos[ 16 ] = { 35, 33, 31, 29, 27, 25, 22, 20, 17, 15, 12, 10, 7, 5, 3, 1 };
- for( int i = 0;
- i < 16;
- ++i )
- {
- int v1 = fontKey[ pos[ i ]];
- int v2 = fontKey[ pos[ i ] + 1 ];
- assert(( v1 >= '0' && v1 <= '9' ) || ( v1 >= 'A' && v1 <= 'F' ));
- assert(( v2 >= '0' && v2 <= '9' ) || ( v2 >= 'A' && v2 <= 'F' ));
- int val = ( v1 - ( v1 <= '9' ? '0' : 'A' - 10 )) * 16 + v2 - ( v2 <= '9' ? '0' : 'A' - 10 );
- key[ i ] = val;
- key[ i + 16 ] = val;
- }
- }
- fontTable.addEmbeddedFont( inputStream, fontName, style, key );
- inputStream->closeInput();
-}
-
-void EmbeddedFontHandler::lcl_attribute( Id name, Value& val )
-{
- OUString sValue = val.getString();
- switch( name )
- {
- case NS_ooxml::LN_CT_FontRel_fontKey:
- fontKey = sValue;
- break;
- case NS_ooxml::LN_CT_Rel_id:
- break;
- case NS_ooxml::LN_CT_FontRel_subsetted:
- break; // TODO? Let's just ignore this for now and hope
- // it doesn't break anything.
- case NS_ooxml::LN_inputstream: // the actual font data as stream
- val.getAny() >>= inputStream;
- break;
- default:
- break;
- }
-}
-
-void EmbeddedFontHandler::lcl_sprm( Sprm& )
-{
-}
-
-
-}//namespace writerfilter::dmapper
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/FontTable.hxx b/writerfilter/source/dmapper/FontTable.hxx
deleted file mode 100644
index 1276eaa8d705..000000000000
--- a/writerfilter/source/dmapper/FontTable.hxx
+++ /dev/null
@@ -1,107 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * 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 .
- */
-
-#ifndef INCLUDED_WRITERFILTER_SOURCE_DMAPPER_FONTTABLE_HXX
-#define INCLUDED_WRITERFILTER_SOURCE_DMAPPER_FONTTABLE_HXX
-
-#include <memory>
-#include <vector>
-#include "LoggedResources.hxx"
-#include <com/sun/star/io/XInputStream.hpp>
-
-namespace writerfilter::dmapper
-{
-
-struct FontTable_Impl;
-struct FontEntry : public virtual SvRefBase
-{
- typedef tools::SvRef<FontEntry> Pointer_t;
-
- OUString sFontName;
- sal_Int32 nTextEncoding;
- FontEntry() :
- nTextEncoding( RTL_TEXTENCODING_DONTKNOW )
- {}
-};
-
-class FontTable : public LoggedProperties, public LoggedTable
- /*,public BinaryObj*/, public LoggedStream
-{
- std::unique_ptr<FontTable_Impl> m_pImpl;
-
- public:
- FontTable();
- virtual ~FontTable() override;
-
- sal_uInt32 size();
- FontEntry::Pointer_t getFontEntry(sal_uInt32 nIndex);
-
- bool addEmbeddedFont(const css::uno::Reference<css::io::XInputStream>& stream,
- const OUString& fontName, const char* extra,
- std::vector<unsigned char> const & key);
-
- private:
- // Properties
- virtual void lcl_attribute(Id Name, Value & val) override;
- virtual void lcl_sprm(Sprm & sprm) override;
- void resolveSprm(Sprm & r_sprm);
-
- // Table
- virtual void lcl_entry(writerfilter::Reference<Properties>::Pointer_t ref) override;
-
- // Stream
- virtual void lcl_startSectionGroup() override;
- virtual void lcl_endSectionGroup() override;
- virtual void lcl_startParagraphGroup() override;
- virtual void lcl_endParagraphGroup() override;
- virtual void lcl_startCharacterGroup() override;
- virtual void lcl_endCharacterGroup() override;
- virtual void lcl_text(const sal_uInt8 * data, size_t len) override;
- virtual void lcl_utext(const sal_uInt8 * data, size_t len) override;
- virtual void lcl_props(writerfilter::Reference<Properties>::Pointer_t ref) override;
- virtual void lcl_table(Id name,
- writerfilter::Reference<Table>::Pointer_t ref) override;
- virtual void lcl_substream(Id name,
- ::writerfilter::Reference<Stream>::Pointer_t ref) override;
- virtual void lcl_startShape(css::uno::Reference<css::drawing::XShape> const& xShape) override;
- virtual void lcl_endShape( ) override;
-};
-typedef tools::SvRef< FontTable > FontTablePtr;
-
-class EmbeddedFontHandler : public LoggedProperties
-{
-public:
- EmbeddedFontHandler(FontTable& rFontTable, const OUString& fontName, const char* style);
- virtual ~EmbeddedFontHandler() override;
-private:
- virtual void lcl_attribute( Id name, Value& val ) override;
- virtual void lcl_sprm( Sprm& rSprm ) override;
- FontTable& fontTable;
- OUString fontName;
- const char* const style;
- OUString fontKey;
- css::uno::Reference<css::io::XInputStream> inputStream;
-};
-
-
-}
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/FormControlHelper.cxx b/writerfilter/source/dmapper/FormControlHelper.cxx
deleted file mode 100644
index f2313bdef0a6..000000000000
--- a/writerfilter/source/dmapper/FormControlHelper.cxx
+++ /dev/null
@@ -1,375 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * 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 .
- */
-
-#include <math.h>
-
-#include <com/sun/star/awt/XControlModel.hpp>
-#include <com/sun/star/beans/XPropertySet.hpp>
-#include <com/sun/star/container/XIndexContainer.hpp>
-#include <com/sun/star/container/XNamed.hpp>
-#include <com/sun/star/drawing/XControlShape.hpp>
-#include <com/sun/star/drawing/XDrawPage.hpp>
-#include <com/sun/star/drawing/XDrawPageSupplier.hpp>
-#include <com/sun/star/form/XForm.hpp>
-#include <com/sun/star/form/XFormComponent.hpp>
-#include <com/sun/star/form/XFormsSupplier.hpp>
-#include <com/sun/star/lang/XMultiServiceFactory.hpp>
-#include <com/sun/star/text/TextContentAnchorType.hpp>
-#include <com/sun/star/text/VertOrientation.hpp>
-#include <com/sun/star/uno/Any.hxx>
-
-#include "FormControlHelper.hxx"
-#include <xmloff/odffields.hxx>
-#include <comphelper/sequence.hxx>
-#include <tools/diagnose_ex.h>
-
-namespace writerfilter::dmapper {
-
-using namespace ::com::sun::star;
-
-struct FormControlHelper::FormControlHelper_Impl : public virtual SvRefBase
-{
- FieldId m_eFieldId;
- awt::Size aSize;
- uno::Reference<drawing::XDrawPage> rDrawPage;
- uno::Reference<form::XForm> rForm;
- uno::Reference<form::XFormComponent> rFormComponent;
- uno::Reference<lang::XMultiServiceFactory> rServiceFactory;
- uno::Reference<text::XTextDocument> rTextDocument;
-
- uno::Reference<drawing::XDrawPage> const & getDrawPage();
- uno::Reference<lang::XMultiServiceFactory> const & getServiceFactory();
- uno::Reference<form::XForm> const & getForm();
- uno::Reference<container::XIndexContainer> getFormComps();
-};
-
-uno::Reference<drawing::XDrawPage> const & FormControlHelper::FormControlHelper_Impl::getDrawPage()
-{
- if (! rDrawPage.is())
- {
- uno::Reference<drawing::XDrawPageSupplier>
- xDrawPageSupplier(rTextDocument, uno::UNO_QUERY);
- if (xDrawPageSupplier.is())
- rDrawPage = xDrawPageSupplier->getDrawPage();
- }
-
- return rDrawPage;
-}
-
-uno::Reference<lang::XMultiServiceFactory> const & FormControlHelper::FormControlHelper_Impl::getServiceFactory()
-{
- if (! rServiceFactory.is())
- rServiceFactory.set(rTextDocument, uno::UNO_QUERY);
-
- return rServiceFactory;
-}
-
-uno::Reference<form::XForm> const & FormControlHelper::FormControlHelper_Impl::getForm()
-{
- if (! rForm.is())
- {
- uno::Reference<form::XFormsSupplier> xFormsSupplier(getDrawPage(), uno::UNO_QUERY);
-
- if (xFormsSupplier.is())
- {
- uno::Reference<container::XNameContainer> xFormsNamedContainer(xFormsSupplier->getForms());
- static constexpr OUStringLiteral sDOCXForm = u"DOCX-Standard";
-
- OUString sFormName(sDOCXForm);
- sal_uInt16 nUnique = 0;
-
- while (xFormsNamedContainer->hasByName(sFormName))
- {
- ++nUnique;
- sFormName = sDOCXForm + OUString::number(nUnique);
- }
-
- uno::Reference<uno::XInterface> xForm(getServiceFactory()->createInstance("com.sun.star.form.component.Form"));
- if (xForm.is())
- {
- uno::Reference<beans::XPropertySet>
- xFormProperties(xForm, uno::UNO_QUERY);
- uno::Any aAny(sFormName);
- xFormProperties->setPropertyValue("Name", aAny);
- }
-
- rForm.set(xForm, uno::UNO_QUERY);
-
- uno::Reference<container::XIndexContainer> xForms(xFormsNamedContainer, uno::UNO_QUERY);
- uno::Any aAny(xForm);
- xForms->insertByIndex(xForms->getCount(), aAny);
- }
- }
-
- return rForm;
-}
-
-uno::Reference<container::XIndexContainer> FormControlHelper::FormControlHelper_Impl::getFormComps()
-{
- uno::Reference<container::XIndexContainer> xIndexContainer(getForm(), uno::UNO_QUERY);
-
- return xIndexContainer;
-}
-
-FormControlHelper::FormControlHelper(FieldId eFieldId,
- uno::Reference<text::XTextDocument> const& xTextDocument,
- FFDataHandler::Pointer_t const & pFFData)
- : m_pFFData(pFFData), m_pImpl(new FormControlHelper_Impl)
-{
- m_pImpl->m_eFieldId = eFieldId;
- m_pImpl->rTextDocument = xTextDocument;
-}
-
-FormControlHelper::~FormControlHelper()
-{
-}
-
-bool FormControlHelper::createCheckbox(uno::Reference<text::XTextRange> const& xTextRange,
- const OUString & rControlName)
-{
- if ( !m_pFFData )
- return false;
- uno::Reference<lang::XMultiServiceFactory>
- xServiceFactory(m_pImpl->getServiceFactory());
-
- if (! xServiceFactory.is())
- return false;
-
- uno::Reference<uno::XInterface> xInterface = xServiceFactory->createInstance("com.sun.star.form.component.CheckBox");
-
- if (!xInterface.is())
- return false;
-
- m_pImpl->rFormComponent.set(xInterface, uno::UNO_QUERY);
- if (!m_pImpl->rFormComponent.is())
- return false;
-
- uno::Reference<beans::XPropertySet> xPropSet(xInterface, uno::UNO_QUERY);
-
- sal_uInt32 nCheckBoxHeight = 16 * m_pFFData->getCheckboxHeight();
-
- if (m_pFFData->getCheckboxAutoHeight())
- {
- uno::Reference<beans::XPropertySet> xTextRangeProps(xTextRange, uno::UNO_QUERY);
-
- try
- {
- float fCheckBoxHeight = 0.0;
- xTextRangeProps->getPropertyValue("CharHeight") >>= fCheckBoxHeight;
- nCheckBoxHeight = static_cast<sal_uInt32>(floor(fCheckBoxHeight * 35.3));
- }
- catch (beans::UnknownPropertyException &)
- {
- }
- }
-
- m_pImpl->aSize.Width = nCheckBoxHeight;
- m_pImpl->aSize.Height = m_pImpl->aSize.Width;
-
- if (!m_pFFData->getStatusText().isEmpty())
- {
- xPropSet->setPropertyValue("HelpText", uno::Any(m_pFFData->getStatusText()));
- }
-
- xPropSet->setPropertyValue("DefaultState", uno::Any(m_pFFData->getCheckboxChecked()));
-
- if (!m_pFFData->getHelpText().isEmpty())
- {
- xPropSet->setPropertyValue("HelpF1Text", uno::Any(m_pFFData->getHelpText()));
- }
-
- xPropSet->setPropertyValue("Name", uno::Any(rControlName));
-
- return true;
-}
-
-void FormControlHelper::processField(uno::Reference<text::XFormField> const& xFormField)
-{
- // Set field type first before adding parameters.
- if (m_pImpl->m_eFieldId == FIELD_FORMTEXT )
- {
- xFormField->setFieldType(ODF_FORMTEXT);
- }
- else if (m_pImpl->m_eFieldId == FIELD_FORMCHECKBOX )
- {
- xFormField->setFieldType(ODF_FORMCHECKBOX);
- }
- else if (m_pImpl->m_eFieldId == FIELD_FORMDROPDOWN )
- {
- xFormField->setFieldType(ODF_FORMDROPDOWN);
- }
-
- uno::Reference<container::XNameContainer> xNameCont = xFormField->getParameters();
- uno::Reference<container::XNamed> xNamed( xFormField, uno::UNO_QUERY );
- if ( !(m_pFFData && xNamed.is() && xNameCont.is()) )
- return;
-
- OUString sTmp = m_pFFData->getEntryMacro();
- if ( !sTmp.isEmpty() )
- xNameCont->insertByName( "EntryMacro", uno::makeAny(sTmp) );
- sTmp = m_pFFData->getExitMacro();
- if ( !sTmp.isEmpty() )
- xNameCont->insertByName( "ExitMacro", uno::makeAny(sTmp) );
-
- sTmp = m_pFFData->getHelpText();
- if ( !sTmp.isEmpty() )
- xNameCont->insertByName( "Help", uno::makeAny(sTmp) );
-
- sTmp = m_pFFData->getStatusText();
- if ( !sTmp.isEmpty() )
- xNameCont->insertByName( "Hint", uno::makeAny(sTmp) );
-
- if (m_pImpl->m_eFieldId == FIELD_FORMTEXT )
- {
- sTmp = m_pFFData->getName();
- try
- {
- if ( !sTmp.isEmpty() )
- xNamed->setName( sTmp );
- }
- catch ( uno::Exception& )
- {
- TOOLS_INFO_EXCEPTION("writerfilter", "Set Formfield name failed");
- }
-
- sTmp = m_pFFData->getTextType();
- if ( !sTmp.isEmpty() )
- xNameCont->insertByName( "Type", uno::makeAny(sTmp) );
-
- const sal_uInt16 nMaxLength = m_pFFData->getTextMaxLength();
- if ( nMaxLength )
- {
- xNameCont->insertByName( "MaxLength", uno::makeAny(nMaxLength) );
- }
-
- sTmp = m_pFFData->getTextDefault();
- if ( !sTmp.isEmpty() )
- xNameCont->insertByName( "Content", uno::makeAny(sTmp) );
-
- sTmp = m_pFFData->getTextFormat();
- if ( !sTmp.isEmpty() )
- xNameCont->insertByName( "Format", uno::makeAny(sTmp) );
- }
- else if (m_pImpl->m_eFieldId == FIELD_FORMCHECKBOX )
- {
- uno::Reference<beans::XPropertySet> xPropSet(xFormField, uno::UNO_QUERY);
- uno::Any aAny;
- aAny <<= m_pFFData->getCheckboxChecked();
- if ( xPropSet.is() )
- xPropSet->setPropertyValue("Checked", aAny);
- }
- else if (m_pImpl->m_eFieldId == FIELD_FORMDROPDOWN )
- {
- const FFDataHandler::DropDownEntries_t& rEntries = m_pFFData->getDropDownEntries();
- if (!rEntries.empty())
- {
- if ( xNameCont->hasByName(ODF_FORMDROPDOWN_LISTENTRY) )
- xNameCont->replaceByName(ODF_FORMDROPDOWN_LISTENTRY, uno::makeAny(comphelper::containerToSequence(rEntries)));
- else
- xNameCont->insertByName(ODF_FORMDROPDOWN_LISTENTRY, uno::makeAny(comphelper::containerToSequence(rEntries)));
-
- sal_Int32 nResult = m_pFFData->getDropDownResult().toInt32();
- if ( nResult )
- {
- if ( xNameCont->hasByName(ODF_FORMDROPDOWN_RESULT) )
- xNameCont->replaceByName(ODF_FORMDROPDOWN_RESULT, uno::makeAny( nResult ) );
- else
- xNameCont->insertByName(ODF_FORMDROPDOWN_RESULT, uno::makeAny( nResult ) );
- }
- }
- }
-}
-
-void FormControlHelper::insertControl(uno::Reference<text::XTextRange> const& xTextRange)
-{
- bool bCreated = false;
- if ( !m_pFFData )
- return;
- uno::Reference<container::XNameContainer> xFormCompsByName(m_pImpl->getForm(), uno::UNO_QUERY);
- uno::Reference<container::XIndexContainer> xFormComps(m_pImpl->getFormComps());
- if (! xFormComps.is())
- return;
-
- sal_Int32 nControl = 0;
- bool bDone = false;
- OUString sControlName;
-
- do
- {
- OUString sTmp = "Control" + OUString::number(nControl);
-
- nControl++;
- if (! xFormCompsByName->hasByName(sTmp))
- {
- sControlName = sTmp;
- bDone = true;
- }
- }
- while (! bDone);
-
- switch (m_pImpl->m_eFieldId)
- {
- case FIELD_FORMCHECKBOX:
- bCreated = createCheckbox(xTextRange, sControlName);
- break;
- default:
- break;
- }
-
- if (!bCreated)
- return;
-
- uno::Any aAny(m_pImpl->rFormComponent);
- xFormComps->insertByIndex(xFormComps->getCount(), aAny);
-
- if (! m_pImpl->getServiceFactory().is())
- return;
-
- uno::Reference<uno::XInterface> xInterface = m_pImpl->getServiceFactory()->createInstance("com.sun.star.drawing.ControlShape");
-
- if (! xInterface.is())
- return;
-
- uno::Reference<drawing::XShape> xShape(xInterface, uno::UNO_QUERY);
-
- if (! xShape.is())
- return;
-
- xShape->setSize(m_pImpl->aSize);
-
- uno::Reference<beans::XPropertySet> xShapeProps(xShape, uno::UNO_QUERY);
-
- sal_uInt16 nTmp = sal_uInt16(text::TextContentAnchorType_AS_CHARACTER);
- xShapeProps->setPropertyValue("AnchorType", uno::makeAny<sal_uInt16>(nTmp));
-
- nTmp = text::VertOrientation::CENTER;
- xShapeProps->setPropertyValue("VertOrient", uno::makeAny<sal_uInt16>(nTmp));
-
- xShapeProps->setPropertyValue("TextRange", uno::Any(xTextRange));
-
- uno::Reference<drawing::XControlShape> xControlShape(xShape, uno::UNO_QUERY);
- uno::Reference<awt::XControlModel> xControlModel(m_pImpl->rFormComponent, uno::UNO_QUERY);
- xControlShape->setControl(xControlModel);
-
- m_pImpl->getDrawPage()->add(xShape);
-}
-
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/FormControlHelper.hxx b/writerfilter/source/dmapper/FormControlHelper.hxx
deleted file mode 100644
index f3cb74549226..000000000000
--- a/writerfilter/source/dmapper/FormControlHelper.hxx
+++ /dev/null
@@ -1,55 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * 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 .
- */
-#ifndef INCLUDED_WRITERFILTER_SOURCE_DMAPPER_FORMCONTROLHELPER_HXX
-#define INCLUDED_WRITERFILTER_SOURCE_DMAPPER_FORMCONTROLHELPER_HXX
-
-#include "FFDataHandler.hxx"
-#include <com/sun/star/text/XTextDocument.hpp>
-#include <com/sun/star/text/XFormField.hpp>
-#include <com/sun/star/uno/Reference.hxx>
-#include "FieldTypes.hxx"
-
-namespace writerfilter::dmapper
-{
-class FormControlHelper : public virtual SvRefBase
-{
-public:
- typedef tools::SvRef<FormControlHelper> Pointer_t;
- FormControlHelper(FieldId eFieldId,
- css::uno::Reference<css::text::XTextDocument> const& rTextDocument,
- FFDataHandler::Pointer_t const& pFFData);
- ~FormControlHelper() override;
-
- void insertControl(css::uno::Reference<css::text::XTextRange> const& xTextRange);
- void processField(css::uno::Reference<css::text::XFormField> const& xFormField);
- bool hasFFDataHandler() const { return (m_pFFData != nullptr); }
-
-private:
- FFDataHandler::Pointer_t m_pFFData;
- struct FormControlHelper_Impl;
- tools::SvRef<FormControlHelper_Impl> m_pImpl;
-
- bool createCheckbox(css::uno::Reference<css::text::XTextRange> const& xTextRange,
- const OUString& rControlName);
-};
-}
-
-#endif // INCLUDED_WRITERFILTER_SOURCE_DMAPPER_FORMCONTROLHELPER_HXX
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/GraphicHelpers.cxx b/writerfilter/source/dmapper/GraphicHelpers.cxx
deleted file mode 100644
index d4fc4b9a8c09..000000000000
--- a/writerfilter/source/dmapper/GraphicHelpers.cxx
+++ /dev/null
@@ -1,348 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * 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 .
- */
-
-#include "GraphicHelpers.hxx"
-#include "TagLogger.hxx"
-#include <dmapper/GraphicZOrderHelper.hxx>
-#include "PropertyIds.hxx"
-
-#include <ooxml/resourceids.hxx>
-
-#include <com/sun/star/text/HoriOrientation.hpp>
-#include <com/sun/star/text/VertOrientation.hpp>
-#include <com/sun/star/text/RelOrientation.hpp>
-
-#include <oox/drawingml/drawingmltypes.hxx>
-#include <sal/log.hxx>
-#include <svx/dialmgr.hxx>
-#include <svx/strings.hrc>
-#include <tools/diagnose_ex.h>
-
-#include <iostream>
-
-namespace writerfilter::dmapper {
-
-using namespace com::sun::star;
-
-PositionHandler::PositionHandler( std::pair<OUString, OUString>& rPositionOffsets, std::pair<OUString, OUString>& rAligns ) :
-LoggedProperties("PositionHandler"),
-m_nOrient(text::VertOrientation::NONE),
-m_nRelation(text::RelOrientation::FRAME),
-m_nPosition(0),
-m_rPositionOffsets(rPositionOffsets),
-m_rAligns(rAligns)
-{
-}
-
-PositionHandler::~PositionHandler( )
-{
-}
-
-void PositionHandler::lcl_attribute( Id aName, Value& rVal )
-{
- sal_Int32 nIntValue = rVal.getInt( );
- switch ( aName )
- {
- case NS_ooxml::LN_CT_PosV_relativeFrom:
- {
- switch ( nIntValue )
- {
- case NS_ooxml::LN_Value_wordprocessingDrawing_ST_RelFromV_margin:
- m_nRelation = text::RelOrientation::PAGE_PRINT_AREA;
- break;
-
- case NS_ooxml::LN_Value_wordprocessingDrawing_ST_RelFromV_page:
- m_nRelation = text::RelOrientation::PAGE_FRAME;
- break;
-
- case NS_ooxml::LN_Value_wordprocessingDrawing_ST_RelFromV_topMargin:
- m_nRelation = text::RelOrientation::PAGE_PRINT_AREA_TOP;
- break;
-
- case NS_ooxml::LN_Value_wordprocessingDrawing_ST_RelFromV_bottomMargin:
- m_nRelation = text::RelOrientation::PAGE_PRINT_AREA_BOTTOM;
- break;
-
- case NS_ooxml::LN_Value_wordprocessingDrawing_ST_RelFromV_paragraph:
- m_nRelation = text::RelOrientation::FRAME;
- break;
-
- case NS_ooxml::LN_Value_wordprocessingDrawing_ST_RelFromV_line:
- m_nRelation = text::RelOrientation::TEXT_LINE;
- break;
-
- // TODO There are some other unhandled values
- default:
- SAL_WARN("writerfilter", "unhandled case (" << nIntValue << ") in NS_ooxml::LN_CT_PosV_relativeFrom");
- }
- }
- break;
-
- case NS_ooxml::LN_CT_PosH_relativeFrom:
- {
- switch ( nIntValue )
- {
- case NS_ooxml::LN_Value_wordprocessingDrawing_ST_RelFromH_margin:
- m_nRelation = text::RelOrientation::PAGE_PRINT_AREA;
- break;
-
- case NS_ooxml::LN_Value_wordprocessingDrawing_ST_RelFromH_page:
- m_nRelation = text::RelOrientation::PAGE_FRAME;
- break;
-
- case NS_ooxml::LN_Value_wordprocessingDrawing_ST_RelFromH_insideMargin:
- m_nRelation = text::RelOrientation::PAGE_FRAME;
- m_bPageToggle = true;
- break;
-
- case NS_ooxml::LN_Value_wordprocessingDrawing_ST_RelFromH_column:
- m_nRelation = text::RelOrientation::FRAME;
- break;
-
- case NS_ooxml::LN_Value_wordprocessingDrawing_ST_RelFromH_character:
- m_nRelation = text::RelOrientation::CHAR;
- break;
-
- case NS_ooxml::LN_Value_wordprocessingDrawing_ST_RelFromH_leftMargin:
- m_nRelation = text::RelOrientation::PAGE_LEFT;
- break;
-
- case NS_ooxml::LN_Value_wordprocessingDrawing_ST_RelFromH_rightMargin:
- m_nRelation = text::RelOrientation::PAGE_RIGHT;
- break;
-
- // TODO There are some other unhandled values
- default:
- SAL_WARN("writerfilter", "unhandled case (" << nIntValue << ") in NS_ooxml::LN_CT_PosH_relativeFrom");
- }
- }
- break;
- default:
-#ifdef DBG_UTIL
- TagLogger::getInstance().element("unhandled");
-#endif
- break;
- }
-}
-
-void PositionHandler::lcl_sprm(Sprm& rSprm)
-{
- sal_uInt32 nSprmId = rSprm.getId();
-
- switch (nSprmId)
- {
- case NS_ooxml::LN_CT_PosH_posOffset:
- m_nPosition = oox::drawingml::convertEmuToHmm(m_rPositionOffsets.first.toInt32());
- m_rPositionOffsets.first.clear();
- break;
- case NS_ooxml::LN_CT_PosV_posOffset:
- m_nPosition = oox::drawingml::convertEmuToHmm(m_rPositionOffsets.second.toInt32());
- m_rPositionOffsets.second.clear();
- break;
- case NS_ooxml::LN_CT_PosH_align:
- {
- OUString& rAlign = m_rAligns.first;
- if (rAlign == "left")
- m_nOrient = text::HoriOrientation::LEFT;
- else if (rAlign == "right")
- m_nOrient = text::HoriOrientation::RIGHT;
- else if (rAlign == "center")
- m_nOrient = text::HoriOrientation::CENTER;
- else if (rAlign == "inside")
- m_nOrient = text::HoriOrientation::INSIDE;
- else if (rAlign == "outside")
- m_nOrient = text::HoriOrientation::OUTSIDE;
- rAlign.clear();
- break;
- }
- case NS_ooxml::LN_CT_PosV_align:
- {
- OUString& rAlign = m_rAligns.second;
- if (rAlign == "top")
- m_nOrient = text::VertOrientation::TOP;
- else if (rAlign == "bottom")
- m_nOrient = text::VertOrientation::BOTTOM;
- else if (rAlign == "center")
- m_nOrient = text::VertOrientation::CENTER;
- else if (rAlign == "inside" && m_nRelation == text::RelOrientation::PAGE_PRINT_AREA_BOTTOM)
- m_nOrient = text::VertOrientation::TOP;
- else if (rAlign == "outside" && m_nRelation == text::RelOrientation::PAGE_PRINT_AREA_BOTTOM)
- m_nOrient = text::VertOrientation::BOTTOM;
- rAlign.clear();
- break;
- }
- }
-}
-
-sal_Int16 PositionHandler::orientation() const
-{
- if( m_nRelation == text::RelOrientation::TEXT_LINE )
- { // It appears that to 'line of text' alignment is backwards to other alignments,
- // 'top' meaning putting on top of the line instead of having top at the line.
- if( m_nOrient == text::VertOrientation::TOP )
- return text::VertOrientation::BOTTOM;
- else if( m_nOrient == text::VertOrientation::BOTTOM )
- return text::VertOrientation::TOP;
- }
- return m_nOrient;
-}
-
-WrapHandler::WrapHandler( ) :
-LoggedProperties("WrapHandler"),
- m_nType( 0 ),
- m_nSide( 0 )
-{
-}
-
-WrapHandler::~WrapHandler( )
-{
-}
-
-void WrapHandler::lcl_attribute( Id aName, Value& rVal )
-{
- switch ( aName )
- {
- case NS_ooxml::LN_CT_Wrap_type:
- m_nType = sal_Int32( rVal.getInt( ) );
- break;
- case NS_ooxml::LN_CT_Wrap_side:
- m_nSide = sal_Int32( rVal.getInt( ) );
- break;
- default:;
- }
-}
-
-void WrapHandler::lcl_sprm( Sprm& )
-{
-}
-
-text::WrapTextMode WrapHandler::getWrapMode( ) const
-{
- // The wrap values do not map directly to our wrap mode,
- // e.g. none in .docx actually means through in LO.
- text::WrapTextMode nMode = text::WrapTextMode_THROUGH;
-
- switch ( m_nType )
- {
- case NS_ooxml::LN_Value_vml_wordprocessingDrawing_ST_WrapType_square:
- // through and tight are somewhat complicated, approximate
- case NS_ooxml::LN_Value_vml_wordprocessingDrawing_ST_WrapType_tight:
- case NS_ooxml::LN_Value_vml_wordprocessingDrawing_ST_WrapType_through:
- {
- switch ( m_nSide )
- {
- case NS_ooxml::LN_Value_vml_wordprocessingDrawing_ST_WrapSide_left:
- nMode = text::WrapTextMode_LEFT;
- break;
- case NS_ooxml::LN_Value_vml_wordprocessingDrawing_ST_WrapSide_right:
- nMode = text::WrapTextMode_RIGHT;
- break;
- default:
- nMode = text::WrapTextMode_PARALLEL;
- }
- }
- break;
- case NS_ooxml::LN_Value_vml_wordprocessingDrawing_ST_WrapType_topAndBottom:
- nMode = text::WrapTextMode_NONE;
- break;
- case NS_ooxml::LN_Value_vml_wordprocessingDrawing_ST_WrapType_none:
- default:
- nMode = text::WrapTextMode_THROUGH;
- }
-
- return nMode;
-}
-
-
-void GraphicZOrderHelper::addItem(uno::Reference<beans::XPropertySet> const& props, sal_Int32 const relativeHeight)
-{
- items[ relativeHeight ] = props;
-}
-
-// The relativeHeight value in .docx is an arbitrary number, where only the relative ordering matters.
-// But in Writer, the z-order is index in 0..(numitems-1) range, so whenever a new item needs to be
-// added in the proper z-order, it is necessary to find the proper index.
-sal_Int32 GraphicZOrderHelper::findZOrder( sal_Int32 relativeHeight, bool bOldStyle )
-{
- // std::map is iterated sorted by key
- auto it = std::find_if(items.cbegin(), items.cend(),
- [relativeHeight, bOldStyle](const Items::value_type& rItem) {
- // Old-style ordering differs in what should happen when there is already an item with the same z-order:
- // we belong under it in case of new-style, but we belong above it in case of old-style.
- return bOldStyle ? (rItem.first > relativeHeight) : (rItem.first >= relativeHeight);
- }
- );
- sal_Int32 itemZOrderOffset(0); // before the item
- if( it == items.end()) // we're topmost
- {
- if( items.empty())
- return 0;
- --it;
- itemZOrderOffset = 1; // after the topmost
-
- // Check if this shape has a textbox. If so, the textbox will have its own ZOrder, so
- // suggest a larger offset.
- bool bTextBox = false;
- uno::Reference<beans::XPropertySet> xShape = it->second;
- uno::Reference<beans::XPropertySetInfo> xInfo = xShape->getPropertySetInfo();
- if (xInfo->hasPropertyByName("TextBox"))
- {
- xShape->getPropertyValue("TextBox") >>= bTextBox;
- }
- if (bTextBox)
- {
- ++itemZOrderOffset;
- }
- }
- // SwXFrame::getPropertyValue throws uno::RuntimeException
- // when its GetFrameFormat() returns nullptr
- try {
- sal_Int32 itemZOrder(0);
- if( it->second->getPropertyValue(getPropertyName( PROP_Z_ORDER )) >>= itemZOrder )
- return itemZOrder + itemZOrderOffset;
- }
- catch (const uno::RuntimeException&) {
- TOOLS_WARN_EXCEPTION("writerfilter", "Exception when getting item z-order");
- }
- SAL_WARN( "writerfilter", "findZOrder() didn't find item z-order" );
- return 0; // this should not(?) happen
-}
-
-GraphicNamingHelper::GraphicNamingHelper()
- : m_nCounter(0)
-{
-}
-
-OUString GraphicNamingHelper::NameGraphic(const OUString& rTemplate)
-{
- OUString aRet = rTemplate;
-
- if (aRet.isEmpty())
- {
- // Empty template: then auto-generate a unique name.
- OUString aPrefix(SvxResId(STR_ObjNameSingulGRAF));
- aRet += aPrefix + OUString::number(++m_nCounter);
- }
-
- return aRet;
-}
-
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/GraphicHelpers.hxx b/writerfilter/source/dmapper/GraphicHelpers.hxx
deleted file mode 100644
index 66fd06c06281..000000000000
--- a/writerfilter/source/dmapper/GraphicHelpers.hxx
+++ /dev/null
@@ -1,82 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * 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 .
- */
-
-#ifndef INCLUDED_WRITERFILTER_SOURCE_DMAPPER_GRAPHICHELPERS_HXX
-#define INCLUDED_WRITERFILTER_SOURCE_DMAPPER_GRAPHICHELPERS_HXX
-
-#include "LoggedResources.hxx"
-#include <com/sun/star/text/WrapTextMode.hpp>
-
-#include <utility>
-
-namespace writerfilter::dmapper
-{
-class PositionHandler : public LoggedProperties
-{
-public:
- PositionHandler(std::pair<OUString, OUString>& rPositionOffsets,
- std::pair<OUString, OUString>& rAligns);
- virtual ~PositionHandler() override;
- sal_Int16 orientation() const;
- sal_Int16 relation() const { return m_nRelation; }
- sal_Int32 position() const { return m_nPosition; }
- bool GetPageToggle() const { return m_bPageToggle; }
-
-private:
- virtual void lcl_attribute(Id aName, Value& rVal) override;
- virtual void lcl_sprm(Sprm& rSprm) override;
- sal_Int16 m_nOrient;
- sal_Int16 m_nRelation;
- sal_Int32 m_nPosition;
- std::pair<OUString, OUString>& m_rPositionOffsets;
- std::pair<OUString, OUString>& m_rAligns;
- bool m_bPageToggle = false;
-};
-
-class WrapHandler : public LoggedProperties
-{
-public:
- WrapHandler();
- virtual ~WrapHandler() override;
-
- css::text::WrapTextMode getWrapMode() const;
-
-private:
- virtual void lcl_attribute(Id aName, Value& rVal) override;
- virtual void lcl_sprm(Sprm& rSprm) override;
-
- sal_Int32 m_nType;
- sal_Int32 m_nSide;
-};
-
-/// Keeps track of the next available unique automatic name.
-class GraphicNamingHelper
-{
- int m_nCounter;
-
-public:
- GraphicNamingHelper();
- /// Name a graphic based on rTemplate.
- OUString NameGraphic(const OUString& rTemplate);
-};
-}
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/GraphicImport.cxx b/writerfilter/source/dmapper/GraphicImport.cxx
deleted file mode 100644
index cc81850bfc86..000000000000
--- a/writerfilter/source/dmapper/GraphicImport.cxx
+++ /dev/null
@@ -1,1632 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * 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 .
- */
-
-#include <string.h>
-
-#include <com/sun/star/awt/Size.hpp>
-#include <com/sun/star/container/XNamed.hpp>
-#include <com/sun/star/drawing/ColorMode.hpp>
-#include <com/sun/star/drawing/PointSequenceSequence.hpp>
-#include <com/sun/star/drawing/XShape.hpp>
-#include <com/sun/star/drawing/LineStyle.hpp>
-#include <com/sun/star/graphic/XGraphic.hpp>
-#include <com/sun/star/graphic/GraphicProvider.hpp>
-#include <com/sun/star/graphic/XGraphicProvider.hpp>
-#include <com/sun/star/io/BufferSizeExceededException.hpp>
-#include <com/sun/star/io/XInputStream.hpp>
-#include <com/sun/star/lang/XMultiServiceFactory.hpp>
-#include <com/sun/star/lang/XServiceInfo.hpp>
-#include <com/sun/star/table/BorderLine2.hpp>
-#include <com/sun/star/text/GraphicCrop.hpp>
-#include <com/sun/star/text/HoriOrientation.hpp>
-#include <com/sun/star/text/RelOrientation.hpp>
-#include <com/sun/star/text/TextContentAnchorType.hpp>
-#include <com/sun/star/text/VertOrientation.hpp>
-#include <com/sun/star/text/WrapTextMode.hpp>
-#include <com/sun/star/text/XTextContent.hpp>
-#include <com/sun/star/uno/XComponentContext.hpp>
-#include <com/sun/star/table/ShadowFormat.hpp>
-
-#include <svx/svdobj.hxx>
-#include <svx/unoapi.hxx>
-#include <cppuhelper/implbase.hxx>
-#include <rtl/ustrbuf.hxx>
-#include <sal/log.hxx>
-#include <rtl/math.hxx>
-#include <tools/diagnose_ex.h>
-#include <comphelper/string.hxx>
-#include <comphelper/sequenceashashmap.hxx>
-#include <comphelper/sequence.hxx>
-
-#include <oox/drawingml/drawingmltypes.hxx>
-
-#include "DomainMapper.hxx"
-#include <dmapper/GraphicZOrderHelper.hxx>
-#include <ooxml/resourceids.hxx>
-
-#include "ConversionHelper.hxx"
-#include "GraphicHelpers.hxx"
-#include "GraphicImport.hxx"
-#include "PropertyMap.hxx"
-#include "TagLogger.hxx"
-#include "WrapPolygonHandler.hxx"
-#include "util.hxx"
-
-#include <comphelper/propertysequence.hxx>
-
-using namespace css;
-
-namespace
-{
-bool isTopGroupObj(const uno::Reference<drawing::XShape>& xShape)
-{
- SdrObject* pObject = GetSdrObjectFromXShape(xShape);
- if (!pObject)
- return false;
-
- if (pObject->getParentSdrObjectFromSdrObject())
- return false;
-
- return pObject->IsGroupObject();
-}
-}
-
-namespace writerfilter::dmapper
-{
-
-namespace {
-
-class XInputStreamHelper : public cppu::WeakImplHelper<io::XInputStream>
-{
- const sal_uInt8* m_pBuffer;
- const sal_Int32 m_nLength;
- sal_Int32 m_nPosition;
-public:
- XInputStreamHelper(const sal_uInt8* buf, size_t len);
-
- virtual ::sal_Int32 SAL_CALL readBytes( uno::Sequence< ::sal_Int8 >& aData, ::sal_Int32 nBytesToRead ) override;
- virtual ::sal_Int32 SAL_CALL readSomeBytes( uno::Sequence< ::sal_Int8 >& aData, ::sal_Int32 nMaxBytesToRead ) override;
- virtual void SAL_CALL skipBytes( ::sal_Int32 nBytesToSkip ) override;
- virtual ::sal_Int32 SAL_CALL available( ) override;
- virtual void SAL_CALL closeInput( ) override;
-};
-
-}
-
-XInputStreamHelper::XInputStreamHelper(const sal_uInt8* buf, size_t len) :
- m_pBuffer( buf ),
- m_nLength( len ),
- m_nPosition( 0 )
-{
-}
-
-sal_Int32 XInputStreamHelper::readBytes( uno::Sequence<sal_Int8>& aData, sal_Int32 nBytesToRead )
-{
- return readSomeBytes( aData, nBytesToRead );
-}
-
-sal_Int32 XInputStreamHelper::readSomeBytes( uno::Sequence<sal_Int8>& aData, sal_Int32 nMaxBytesToRead )
-{
- sal_Int32 nRet = 0;
- if( nMaxBytesToRead > 0 )
- {
- if( nMaxBytesToRead > m_nLength - m_nPosition )
- nRet = m_nLength - m_nPosition;
- else
- nRet = nMaxBytesToRead;
- aData.realloc( nRet );
- sal_Int8* pData = aData.getArray();
- if( nRet )
- {
- memcpy( pData, m_pBuffer + m_nPosition, nRet );
- m_nPosition += nRet;
- }
- }
- return nRet;
-}
-
-
-void XInputStreamHelper::skipBytes( sal_Int32 nBytesToSkip )
-{
- if( nBytesToSkip < 0 || m_nPosition + nBytesToSkip > m_nLength)
- throw io::BufferSizeExceededException();
- m_nPosition += nBytesToSkip;
-}
-
-
-sal_Int32 XInputStreamHelper::available( )
-{
- return m_nLength - m_nPosition;
-}
-
-
-void XInputStreamHelper::closeInput( )
-{
-}
-
-namespace {
-
-struct GraphicBorderLine
-{
- sal_Int32 nLineWidth;
- bool bHasShadow;
-
- GraphicBorderLine() :
- nLineWidth(0)
- ,bHasShadow(false)
- {}
-
- bool isEmpty() const
- {
- return nLineWidth == 0 && !bHasShadow;
- }
-
-};
-
-}
-
-class GraphicImport_Impl
-{
-private:
- sal_Int32 nXSize;
- bool bXSizeValid;
- sal_Int32 nYSize;
- bool bYSizeValid;
-
-public:
- GraphicImportType eGraphicImportType;
- DomainMapper& rDomainMapper;
-
- sal_Int32 nLeftPosition;
- sal_Int32 nTopPosition;
-
- bool bUseSimplePos;
- sal_Int32 zOrder;
-
- sal_Int16 nHoriOrient;
- sal_Int16 nHoriRelation;
- bool bPageToggle = false;
- sal_Int16 nVertOrient;
- sal_Int16 nVertRelation;
- text::WrapTextMode nWrap;
- bool bLayoutInCell;
- bool bCompatForcedLayoutInCell;
- bool bAllowOverlap = true;
- bool bOpaque;
- bool bBehindDoc;
- bool bContour;
- bool bContourOutside;
- WrapPolygon::Pointer_t mpWrapPolygon;
-
- sal_Int32 nLeftMargin;
- sal_Int32 nLeftMarginOrig = 0;
- sal_Int32 nRightMargin;
- sal_Int32 nTopMargin;
- sal_Int32 nBottomMargin;
-
- bool bShadow;
- sal_Int32 nShadowXDistance;
- sal_Int32 nShadowYDistance;
- sal_Int32 nShadowColor;
- sal_Int32 nShadowTransparence;
-
- sal_Int32 nContrast;
- sal_Int32 nBrightness;
-
- static constexpr sal_Int32 nFillColor = 0xffffffff;
-
- drawing::ColorMode eColorMode;
-
- GraphicBorderLine aBorders[4];
-
- bool bIsGraphic;
-
- bool bSizeProtected;
- bool bPositionProtected;
- bool bHidden;
-
- sal_Int32 nShapeOptionType;
-
- OUString sName;
- OUString sAlternativeText;
- OUString title;
- OUString sHyperlinkURL;
- std::pair<OUString, OUString>& m_rPositionOffsets;
- std::pair<OUString, OUString>& m_rAligns;
- std::queue<OUString>& m_rPositivePercentages;
- OUString sAnchorId;
- comphelper::SequenceAsHashMap m_aInteropGrabBag;
- std::optional<sal_Int32> m_oEffectExtentLeft;
- std::optional<sal_Int32> m_oEffectExtentTop;
- std::optional<sal_Int32> m_oEffectExtentRight;
- std::optional<sal_Int32> m_oEffectExtentBottom;
-
- GraphicImport_Impl(GraphicImportType eImportType, DomainMapper& rDMapper, std::pair<OUString, OUString>& rPositionOffsets, std::pair<OUString, OUString>& rAligns, std::queue<OUString>& rPositivePercentages) :
- nXSize(0)
- ,bXSizeValid(false)
- ,nYSize(0)
- ,bYSizeValid(false)
- ,eGraphicImportType( eImportType )
- ,rDomainMapper( rDMapper )
- ,nLeftPosition(0)
- ,nTopPosition(0)
- ,bUseSimplePos(false)
- ,zOrder(-1)
- ,nHoriOrient( text::HoriOrientation::NONE )
- ,nHoriRelation( text::RelOrientation::FRAME )
- ,nVertOrient( text::VertOrientation::NONE )
- ,nVertRelation( text::RelOrientation::FRAME )
- ,nWrap(text::WrapTextMode_NONE)
- ,bLayoutInCell(true)
- ,bCompatForcedLayoutInCell(false)
- ,bOpaque( !rDMapper.IsInHeaderFooter() )
- ,bBehindDoc(false)
- ,bContour(false)
- ,bContourOutside(true)
- ,nLeftMargin(319)
- ,nRightMargin(319)
- ,nTopMargin(0)
- ,nBottomMargin(0)
- ,bShadow(false)
- ,nShadowXDistance(0)
- ,nShadowYDistance(0)
- ,nShadowColor(0)
- ,nShadowTransparence(0)
- ,nContrast(0)
- ,nBrightness(0)
- ,eColorMode( drawing::ColorMode_STANDARD )
- ,bIsGraphic(false)
- ,bSizeProtected(false)
- ,bPositionProtected(false)
- ,bHidden(false)
- ,nShapeOptionType(0)
- ,m_rPositionOffsets(rPositionOffsets)
- ,m_rAligns(rAligns)
- ,m_rPositivePercentages(rPositivePercentages)
- {
- if (eGraphicImportType == GraphicImportType::IMPORT_AS_DETECTED_INLINE
- && !rDMapper.IsInShape())
- {
- zOrder = 0;
- }
- }
-
- void setXSize(sal_Int32 _nXSize)
- {
- nXSize = _nXSize;
- bXSizeValid = true;
- }
-
- sal_uInt32 getXSize() const
- {
- return nXSize;
- }
-
- bool isXSizeValid() const
- {
- return bXSizeValid;
- }
-
- void setYSize(sal_Int32 _nYSize)
- {
- nYSize = _nYSize;
- bYSizeValid = true;
- }
-
- sal_uInt32 getYSize() const
- {
- return nYSize;
- }
-
- bool isYSizeValis () const
- {
- return bYSizeValid;
- }
-
- void applyMargins(const uno::Reference< beans::XPropertySet >& xGraphicObjectProperties) const
- {
- xGraphicObjectProperties->setPropertyValue(getPropertyName( PROP_LEFT_MARGIN ), uno::makeAny(nLeftMargin));
- xGraphicObjectProperties->setPropertyValue(getPropertyName( PROP_RIGHT_MARGIN ), uno::makeAny(nRightMargin));
- xGraphicObjectProperties->setPropertyValue(getPropertyName( PROP_TOP_MARGIN ), uno::makeAny(nTopMargin));
- xGraphicObjectProperties->setPropertyValue(getPropertyName( PROP_BOTTOM_MARGIN ), uno::makeAny(nBottomMargin));
- }
-
- void applyPosition(const uno::Reference< beans::XPropertySet >& xGraphicObjectProperties) const
- {
- xGraphicObjectProperties->setPropertyValue(getPropertyName( PROP_HORI_ORIENT ),
- uno::makeAny(nHoriOrient));
- xGraphicObjectProperties->setPropertyValue(getPropertyName( PROP_VERT_ORIENT ),
- uno::makeAny(nVertOrient));
- }
-
- void applyRelativePosition(const uno::Reference< beans::XPropertySet >& xGraphicObjectProperties, bool bRelativeOnly = false) const
- {
- if (!bRelativeOnly)
- xGraphicObjectProperties->setPropertyValue(getPropertyName( PROP_HORI_ORIENT_POSITION),
- uno::makeAny(nLeftPosition));
- xGraphicObjectProperties->setPropertyValue(getPropertyName( PROP_HORI_ORIENT_RELATION ),
- uno::makeAny(nHoriRelation));
- xGraphicObjectProperties->setPropertyValue(getPropertyName(PROP_PAGE_TOGGLE),
- uno::makeAny(bPageToggle));
- if (!bRelativeOnly)
- xGraphicObjectProperties->setPropertyValue(getPropertyName( PROP_VERT_ORIENT_POSITION),
- uno::makeAny(nTopPosition));
- xGraphicObjectProperties->setPropertyValue(getPropertyName( PROP_VERT_ORIENT_RELATION ),
- uno::makeAny(nVertRelation));
- }
-
- void applyZOrder(uno::Reference<beans::XPropertySet> const & xGraphicObjectProperties) const
- {
- if (zOrder >= 0)
- {
- // tdf#120760 Send objects with behinddoc=true to the back.
- sal_Int32 nZOrder = zOrder;
- if (bBehindDoc && rDomainMapper.IsInHeaderFooter())
- nZOrder -= SAL_MAX_INT32;
- GraphicZOrderHelper* pZOrderHelper = rDomainMapper.graphicZOrderHelper();
- bool bOldStyle = eGraphicImportType == GraphicImportType::IMPORT_AS_DETECTED_INLINE;
- xGraphicObjectProperties->setPropertyValue(getPropertyName(PROP_Z_ORDER),
- uno::makeAny(pZOrderHelper->findZOrder(nZOrder, bOldStyle)));
- pZOrderHelper->addItem(xGraphicObjectProperties, nZOrder);
- }
- }
-
- void applyName(uno::Reference<beans::XPropertySet> const & xGraphicObjectProperties) const
- {
- try
- {
- // Ask the graphic naming helper to find out the name for this
- // object: It's around till the end of the import, so it remembers
- // what's the first free name.
- uno::Reference< container::XNamed > xNamed( xGraphicObjectProperties, uno::UNO_QUERY_THROW );
- xNamed->setName(rDomainMapper.GetGraphicNamingHelper().NameGraphic(sName));
-
- if ( sHyperlinkURL.getLength() > 0 )
- xGraphicObjectProperties->setPropertyValue(getPropertyName( PROP_HYPER_LINK_U_R_L ),
- uno::makeAny ( sHyperlinkURL ));
- xGraphicObjectProperties->setPropertyValue(getPropertyName( PROP_DESCRIPTION ),
- uno::makeAny( sAlternativeText ));
- xGraphicObjectProperties->setPropertyValue(getPropertyName( PROP_TITLE ),
- uno::makeAny( title ));
- }
- catch( const uno::Exception& )
- {
- TOOLS_WARN_EXCEPTION("writerfilter", "failed");
- }
- }
-
- /// Getter for m_aInteropGrabBag, but also merges in the values from other members if they are set.
- comphelper::SequenceAsHashMap const & getInteropGrabBag()
- {
- comphelper::SequenceAsHashMap aEffectExtent;
- if (m_oEffectExtentLeft)
- aEffectExtent["l"] <<= *m_oEffectExtentLeft;
- if (m_oEffectExtentTop)
- aEffectExtent["t"] <<= *m_oEffectExtentTop;
- if (m_oEffectExtentRight)
- aEffectExtent["r"] <<= *m_oEffectExtentRight;
- if (m_oEffectExtentBottom)
- aEffectExtent["b"] <<= *m_oEffectExtentBottom;
- if (!aEffectExtent.empty())
- m_aInteropGrabBag["CT_EffectExtent"] <<= aEffectExtent.getAsConstPropertyValueList();
- return m_aInteropGrabBag;
- }
-};
-
-GraphicImport::GraphicImport(uno::Reference<uno::XComponentContext> const& xComponentContext,
- uno::Reference<lang::XMultiServiceFactory> const& xTextFactory,
- DomainMapper& rDMapper,
- GraphicImportType eImportType,
- std::pair<OUString, OUString>& rPositionOffsets,
- std::pair<OUString, OUString>& rAligns,
- std::queue<OUString>& rPositivePercentages)
-: LoggedProperties("GraphicImport")
-, LoggedTable("GraphicImport")
-, LoggedStream("GraphicImport")
-, m_pImpl(new GraphicImport_Impl(eImportType, rDMapper, rPositionOffsets, rAligns, rPositivePercentages))
-, m_xComponentContext(xComponentContext)
-, m_xTextFactory(xTextFactory)
-{
-}
-
-GraphicImport::~GraphicImport()
-{
-}
-
-com::sun::star::awt::Point GraphicImport::GetGraphicObjectPosition() const
-{
- return (com::sun::star::awt::Point(m_pImpl->nLeftPosition, m_pImpl->nTopPosition));
-}
-
-void GraphicImport::handleWrapTextValue(sal_uInt32 nVal)
-{
- switch (nVal)
- {
- case NS_ooxml::LN_Value_wordprocessingDrawing_ST_WrapText_bothSides: // 90920;
- m_pImpl->nWrap = text::WrapTextMode_PARALLEL;
- break;
- case NS_ooxml::LN_Value_wordprocessingDrawing_ST_WrapText_left: // 90921;
- m_pImpl->nWrap = text::WrapTextMode_LEFT;
- break;
- case NS_ooxml::LN_Value_wordprocessingDrawing_ST_WrapText_right: // 90922;
- m_pImpl->nWrap = text::WrapTextMode_RIGHT;
- break;
- case NS_ooxml::LN_Value_wordprocessingDrawing_ST_WrapText_largest: // 90923;
- m_pImpl->nWrap = text::WrapTextMode_DYNAMIC;
- break;
- default:;
- }
-}
-
-void GraphicImport::putPropertyToFrameGrabBag( const OUString& sPropertyName, const uno::Any& aPropertyValue )
-{
- beans::PropertyValue aProperty;
- aProperty.Name = sPropertyName;
- aProperty.Value = aPropertyValue;
-
- if (!m_xShape.is())
- return;
-
- uno::Reference< beans::XPropertySet > xSet(m_xShape, uno::UNO_QUERY_THROW);
-
- uno::Reference< beans::XPropertySetInfo > xSetInfo(xSet->getPropertySetInfo());
- if (!xSetInfo.is())
- return;
-
- OUString aGrabBagPropName;
- uno::Reference<lang::XServiceInfo> xServiceInfo(m_xShape, uno::UNO_QUERY_THROW);
- if (xServiceInfo->supportsService("com.sun.star.text.TextFrame"))
- aGrabBagPropName = "FrameInteropGrabBag";
- else
- aGrabBagPropName = "InteropGrabBag";
-
- if (xSetInfo->hasPropertyByName(aGrabBagPropName))
- {
- //Add pProperty to the end of the Sequence for aGrabBagPropName
- uno::Sequence<beans::PropertyValue> aTmp;
- xSet->getPropertyValue(aGrabBagPropName) >>= aTmp;
- std::vector<beans::PropertyValue> aGrabBag(comphelper::sequenceToContainer<std::vector<beans::PropertyValue> >(aTmp));
- aGrabBag.push_back(aProperty);
-
- xSet->setPropertyValue(aGrabBagPropName, uno::makeAny(comphelper::containerToSequence(aGrabBag)));
- }
-}
-
-void GraphicImport::lcl_attribute(Id nName, Value& rValue)
-{
- sal_Int32 nIntValue = rValue.getInt();
- switch( nName )
- {
- case NS_ooxml::LN_CT_Hyperlink_URL://90682;
- m_pImpl->sHyperlinkURL = rValue.getString();
- break;
- case NS_ooxml::LN_blip: //the binary graphic data in a shape
- {
- writerfilter::Reference<Properties>::Pointer_t pProperties = rValue.getProperties();
- if( pProperties )
- {
- pProperties->resolve(*this);
- }
- }
- break;
- case NS_ooxml::LN_payload :
- {
- writerfilter::Reference<BinaryObj>::Pointer_t pPictureData = rValue.getBinary();
- if( pPictureData )
- pPictureData->resolve(*this);
- }
- break;
-
- //border properties
- case NS_ooxml::LN_CT_Border_sz:
- m_pImpl->aBorders[BORDER_TOP].nLineWidth = nIntValue;
- break;
- case NS_ooxml::LN_CT_Border_val:
- //graphic borders don't support different line types
- break;
- case NS_ooxml::LN_CT_Border_space:
- break;
- case NS_ooxml::LN_CT_Border_shadow:
- m_pImpl->aBorders[BORDER_TOP].bHasShadow = nIntValue != 0;
- break;
- case NS_ooxml::LN_CT_Border_frame:
- break;
- case NS_ooxml::LN_CT_PositiveSize2D_cx:
- case NS_ooxml::LN_CT_PositiveSize2D_cy:
- {
- sal_Int32 nDim = oox::drawingml::convertEmuToHmm(nIntValue);
- // drawingML equivalent of oox::vml::ShapeType::getAbsRectangle():
- // make sure a shape isn't hidden implicitly just because it has
- // zero height or width.
- if (nDim == 0)
- nDim = 1;
-
- if( nName == NS_ooxml::LN_CT_PositiveSize2D_cx )
- m_pImpl->setXSize(nDim);
- else
- m_pImpl->setYSize(nDim);
- }
- break;
- case NS_ooxml::LN_CT_EffectExtent_l:
- m_pImpl->m_oEffectExtentLeft = nIntValue;
- break;
- case NS_ooxml::LN_CT_EffectExtent_t:
- m_pImpl->m_oEffectExtentTop = nIntValue;
- break;
- case NS_ooxml::LN_CT_EffectExtent_r:
- m_pImpl->m_oEffectExtentRight = nIntValue;
- break;
- case NS_ooxml::LN_CT_EffectExtent_b:
- m_pImpl->m_oEffectExtentBottom = nIntValue;
- break;
- case NS_ooxml::LN_CT_NonVisualDrawingProps_id:// 90650;
- //id of the object - ignored
- break;
- case NS_ooxml::LN_CT_NonVisualDrawingProps_name:// 90651;
- //name of the object
- m_pImpl->sName = rValue.getString();
- break;
- case NS_ooxml::LN_CT_NonVisualDrawingProps_descr:// 90652;
- //alternative text
- m_pImpl->sAlternativeText = rValue.getString();
- break;
- case NS_ooxml::LN_CT_NonVisualDrawingProps_title:
- //alternative text
- m_pImpl->title = rValue.getString();
- break;
- case NS_ooxml::LN_CT_NonVisualDrawingProps_hidden:
- m_pImpl->bHidden = (nIntValue == 1);
- break;
- case NS_ooxml::LN_CT_GraphicalObjectFrameLocking_noChangeAspect://90644;
- //disallow aspect ratio change - ignored
- break;
- case NS_ooxml::LN_CT_GraphicalObjectFrameLocking_noMove:// 90645;
- m_pImpl->bPositionProtected = true;
- break;
- case NS_ooxml::LN_CT_GraphicalObjectFrameLocking_noResize: // 90646;
- m_pImpl->bSizeProtected = true;
- break;
- case NS_ooxml::LN_CT_Anchor_distT: // 90983;
- case NS_ooxml::LN_CT_Anchor_distB: // 90984;
- case NS_ooxml::LN_CT_Anchor_distL: // 90985;
- case NS_ooxml::LN_CT_Anchor_distR: // 90986;
- {
- m_pImpl->nShapeOptionType = nName;
- ProcessShapeOptions(rValue);
- }
- break;
- case NS_ooxml::LN_CT_Anchor_simplePos_attr: // 90987;
- m_pImpl->bUseSimplePos = nIntValue > 0;
- break;
- case NS_ooxml::LN_CT_Anchor_relativeHeight: // 90988;
- m_pImpl->zOrder = nIntValue;
- break;
- case NS_ooxml::LN_CT_Anchor_behindDoc: // 90989; - in background
- if (nIntValue > 0)
- {
- m_pImpl->bOpaque = false;
- m_pImpl->bBehindDoc = true;
- }
- break;
- case NS_ooxml::LN_CT_Anchor_locked: // 90990; - ignored
- break;
- case NS_ooxml::LN_CT_Anchor_layoutInCell: // 90991; - ignored
- // Starting in MSO 2013, anchors are ALWAYS considered to be laid out in table cell.
- m_pImpl->bCompatForcedLayoutInCell = !nIntValue
- && m_pImpl->rDomainMapper.GetSettingsTable()->GetWordCompatibilityMode() > 14
- && m_pImpl->rDomainMapper.IsInTable();
- m_pImpl->bLayoutInCell = m_pImpl->bCompatForcedLayoutInCell || nIntValue;
- break;
- case NS_ooxml::LN_CT_Anchor_hidden: // 90992; - ignored
- break;
- case NS_ooxml::LN_CT_Anchor_allowOverlap:
- m_pImpl->bAllowOverlap = nIntValue != 0;
- break;
- case NS_ooxml::LN_CT_Anchor_wp14_anchorId:
- case NS_ooxml::LN_CT_Inline_wp14_anchorId:
- {
- OUStringBuffer aBuffer = OUString::number(nIntValue, 16);
- OUStringBuffer aString;
- comphelper::string::padToLength(aString, 8 - aBuffer.getLength(), '0');
- aString.append(aBuffer.getStr());
- m_pImpl->sAnchorId = aString.makeStringAndClear().toAsciiUpperCase();
- }
- break;
- case NS_ooxml::LN_CT_Point2D_x: // 90405;
- m_pImpl->nLeftPosition = ConversionHelper::convertTwipToMM100(nIntValue);
- m_pImpl->nHoriRelation = text::RelOrientation::PAGE_FRAME;
- m_pImpl->nHoriOrient = text::HoriOrientation::NONE;
- break;
- case NS_ooxml::LN_CT_Point2D_y: // 90406;
- m_pImpl->nTopPosition = ConversionHelper::convertTwipToMM100(nIntValue);
- m_pImpl->nVertRelation = text::RelOrientation::PAGE_FRAME;
- m_pImpl->nVertOrient = text::VertOrientation::NONE;
- break;
- case NS_ooxml::LN_CT_WrapTight_wrapText: // 90934;
- m_pImpl->bContour = true;
- m_pImpl->bContourOutside = true;
-
- handleWrapTextValue(rValue.getInt());
-
- break;
- case NS_ooxml::LN_CT_WrapThrough_wrapText:
- m_pImpl->bContour = true;
- m_pImpl->bContourOutside = false;
-
- handleWrapTextValue(rValue.getInt());
-
- break;
- case NS_ooxml::LN_CT_WrapSquare_wrapText: //90928;
- handleWrapTextValue(rValue.getInt());
- break;
- case NS_ooxml::LN_shape:
- {
- uno::Reference< drawing::XShape> xShape;
- rValue.getAny( ) >>= xShape;
- if ( xShape.is( ) )
- {
- // Is it a graphic image
- bool bUseShape = true;
- try
- {
- uno::Reference< beans::XPropertySet > xShapeProps
- ( xShape, uno::UNO_QUERY_THROW );
-
- uno::Reference<graphic::XGraphic> xGraphic;
- xShapeProps->getPropertyValue("Graphic") >>= xGraphic;
-
- sal_Int32 nRotation = 0;
- xShapeProps->getPropertyValue("RotateAngle") >>= nRotation;
-
- css::beans::PropertyValues aGrabBag;
- xShapeProps->getPropertyValue("InteropGrabBag") >>= aGrabBag;
- // if the shape contains effects in the grab bag, we should not transform it
- // in a XTextContent so those effects can be preserved
- bool bContainsEffects = std::any_of(aGrabBag.begin(), aGrabBag.end(), [](const auto& rProp) {
- return rProp.Name == "EffectProperties"
- || rProp.Name == "3DEffectProperties"
- || rProp.Name == "ArtisticEffectProperties";
- });
-
- xShapeProps->getPropertyValue("Shadow") >>= m_pImpl->bShadow;
- if (m_pImpl->bShadow)
- {
- xShapeProps->getPropertyValue("ShadowXDistance") >>= m_pImpl->nShadowXDistance;
- xShapeProps->getPropertyValue("ShadowYDistance") >>= m_pImpl->nShadowYDistance;
- xShapeProps->getPropertyValue("ShadowColor") >>= m_pImpl->nShadowColor;
- xShapeProps->getPropertyValue("ShadowTransparence") >>= m_pImpl->nShadowTransparence;
- }
-
- xShapeProps->getPropertyValue("GraphicColorMode") >>= m_pImpl->eColorMode;
- xShapeProps->getPropertyValue("AdjustLuminance") >>= m_pImpl->nBrightness;
- xShapeProps->getPropertyValue("AdjustContrast") >>= m_pImpl->nContrast;
-
- // fdo#70457: transform XShape into a SwXTextGraphicObject only if there's no rotation
- if ( nRotation == 0 && !bContainsEffects )
- m_xGraphicObject = createGraphicObject( xGraphic, xShapeProps );
-
- bUseShape = !m_xGraphicObject.is( );
-
- if ( !bUseShape )
- {
- // Define the object size
- uno::Reference< beans::XPropertySet > xGraphProps( m_xGraphicObject,
- uno::UNO_QUERY );
- awt::Size aSize = xShape->getSize( );
- xGraphProps->setPropertyValue("Height",
- uno::makeAny( aSize.Height ) );
- xGraphProps->setPropertyValue("Width",
- uno::makeAny( aSize.Width ) );
-
- text::GraphicCrop aGraphicCrop( 0, 0, 0, 0 );
- uno::Reference< beans::XPropertySet > xSourceGraphProps( xShape, uno::UNO_QUERY );
- uno::Any aAny = xSourceGraphProps->getPropertyValue("GraphicCrop");
- if(aAny >>= aGraphicCrop) {
- xGraphProps->setPropertyValue("GraphicCrop",
- uno::makeAny( aGraphicCrop ) );
- }
-
- // We need to drop the shape here somehow
- uno::Reference< lang::XComponent > xShapeComponent( xShape, uno::UNO_QUERY );
- xShapeComponent->dispose( );
- }
- }
- catch( const beans::UnknownPropertyException & )
- {
- // It isn't a graphic image
- }
-
- if ( bUseShape )
- m_xShape = xShape;
-
- if ( m_xShape.is( ) )
- {
- uno::Reference< beans::XPropertySet > xShapeProps
- (m_xShape, uno::UNO_QUERY_THROW);
-
-
- xShapeProps->setPropertyValue
- (getPropertyName(PROP_ANCHOR_TYPE),
- uno::makeAny
- (text::TextContentAnchorType_AS_CHARACTER));
-
- // In Word, if a shape is anchored inline, that
- // excludes being in the background.
- xShapeProps->setPropertyValue("Opaque", uno::makeAny(true));
-
- uno::Reference<lang::XServiceInfo> xServiceInfo(m_xShape, uno::UNO_QUERY_THROW);
-
- // TextFrames can't be rotated. But for anything else,
- // make sure that setting size doesn't affect rotation,
- // that would not match Word's definition of rotation.
- bool bKeepRotation = false;
- if (!xServiceInfo->supportsService("com.sun.star.text.TextFrame"))
- {
- bKeepRotation = true;
- xShapeProps->setPropertyValue
- (getPropertyName(PROP_TEXT_RANGE),
- uno::makeAny
- (m_pImpl->rDomainMapper.GetCurrentTextRange()));
- }
-
- awt::Size aSize(m_xShape->getSize());
-
- if (m_pImpl->isXSizeValid())
- aSize.Width = m_pImpl->getXSize();
- if (m_pImpl->isYSizeValis())
- aSize.Height = m_pImpl->getYSize();
-
- Degree100 nRotation;
- if (bKeepRotation)
- {
- // Use internal API, getPropertyValue(RotateAngle)
- // would use GetObjectRotation(), which is not what
- // we want.
- if (SdrObject* pShape = GetSdrObjectFromXShape(m_xShape))
- nRotation = pShape->GetRotateAngle();
- }
- m_xShape->setSize(aSize);
- if (bKeepRotation)
- {
- xShapeProps->setPropertyValue("RotateAngle", uno::makeAny(nRotation.get()));
- if (nRotation == 0_deg100)
- {
- // Include effect extent in the margin to bring Writer layout closer
- // to Word. But do this for non-rotated shapes only, where effect
- // extents map to increased margins as-is.
- if (m_pImpl->m_oEffectExtentLeft)
- {
- m_pImpl->nLeftMargin += oox::drawingml::convertEmuToHmm(
- *m_pImpl->m_oEffectExtentLeft);
- }
- if (m_pImpl->m_oEffectExtentTop)
- {
- m_pImpl->nTopMargin += oox::drawingml::convertEmuToHmm(
- *m_pImpl->m_oEffectExtentTop);
- }
- if (m_pImpl->m_oEffectExtentRight)
- {
- m_pImpl->nRightMargin += oox::drawingml::convertEmuToHmm(
- *m_pImpl->m_oEffectExtentRight);
- }
- if (m_pImpl->m_oEffectExtentBottom)
- {
- m_pImpl->nBottomMargin += oox::drawingml::convertEmuToHmm(
- *m_pImpl->m_oEffectExtentBottom);
- }
- }
- }
-
- m_pImpl->bIsGraphic = true;
-
- if (!m_pImpl->sAnchorId.isEmpty())
- {
- putPropertyToFrameGrabBag("AnchorId", uno::makeAny(m_pImpl->sAnchorId));
- }
- }
-
- if (bUseShape && m_pImpl->eGraphicImportType == IMPORT_AS_DETECTED_ANCHOR)
- {
- // If we are here, this is a drawingML shape. For those, only dmapper (and not oox) knows the anchoring infos (just like for Writer pictures).
- // But they aren't Writer pictures, either (which are already handled above).
- uno::Reference< beans::XPropertySet > xShapeProps(m_xShape, uno::UNO_QUERY_THROW);
-
- // This needs to be AT_PARAGRAPH by default and not AT_CHARACTER, otherwise shape will move when the user inserts a new paragraph.
- text::TextContentAnchorType eAnchorType = text::TextContentAnchorType_AT_PARAGRAPH;
-
- if (m_pImpl->bHidden)
- {
- xShapeProps->setPropertyValue("Visible", uno::makeAny(false));
- xShapeProps->setPropertyValue("Printable", uno::makeAny(false));
- }
-
- // Avoid setting AnchorType for TextBoxes till SwTextBoxHelper::syncProperty() doesn't handle transition.
- bool bTextBox = false;
- xShapeProps->getPropertyValue("TextBox") >>= bTextBox;
-
- // The positioning change caused by LayoutInCell doesn't sync well
- // in the text / frame duo. So the compatibility fix only correctly
- // positions the frame and not the text currently.
- // tdf#135943: Instead of half-fixing and making a complete mess,
- // just avoid until layout's repositioning is sync'd to the text frame.
- if (m_pImpl->bLayoutInCell && bTextBox)
- m_pImpl->bLayoutInCell = !m_pImpl->bCompatForcedLayoutInCell;
-
- if (m_pImpl->nVertRelation == text::RelOrientation::TEXT_LINE && !bTextBox)
- eAnchorType = text::TextContentAnchorType_AT_CHARACTER;
-
- xShapeProps->setPropertyValue("AnchorType", uno::makeAny(eAnchorType));
-
- if (m_pImpl->nVertRelation == text::RelOrientation::TEXT_LINE && bTextBox)
- {
- // TEXT_LINE to specific to to-char anchoring, we have to-para, so reset
- // to default.
- m_pImpl->nVertRelation = text::RelOrientation::FRAME;
- }
-
- if (m_pImpl->bLayoutInCell && bTextBox && m_pImpl->rDomainMapper.IsInTable()
- && m_pImpl->nHoriRelation == text::RelOrientation::PAGE_FRAME)
- m_pImpl->nHoriRelation = text::RelOrientation::FRAME;
- if(m_pImpl->rDomainMapper.IsInTable())
- xShapeProps->setPropertyValue(getPropertyName(PROP_FOLLOW_TEXT_FLOW),
- uno::makeAny(m_pImpl->bLayoutInCell));
- //only the position orientation is handled in applyPosition()
- m_pImpl->applyPosition(xShapeProps);
-
- uno::Reference<lang::XServiceInfo> xServiceInfo(m_xShape, uno::UNO_QUERY_THROW);
- if (xServiceInfo->supportsService("com.sun.star.drawing.GroupShape") ||
- xServiceInfo->supportsService("com.sun.star.drawing.GraphicObjectShape"))
- {
- // You would expect that position and rotation are
- // independent, but they are not. Till we are not
- // there yet to handle all scaling, translation and
- // rotation with a single transformation matrix,
- // make sure there is no graphic rotation set when we set
- // the position.
- sal_Int32 nRotation = 0;
- if (xServiceInfo->supportsService("com.sun.star.drawing.GraphicObjectShape"))
- {
- xShapeProps->getPropertyValue("RotateAngle") >>= nRotation;
- }
- if (nRotation)
- xShapeProps->setPropertyValue("RotateAngle", uno::makeAny(sal_Int32(0)));
-
- // Position of the groupshape should be set after children have been added.
- // Long-term we should get rid of positioning group
- // shapes, though. Do it for top-level ones with
- // absolute page position as a start.
- // fdo#80555: also set position for graphic shapes here
- if (!isTopGroupObj(m_xShape)
- || m_pImpl->nHoriRelation != text::RelOrientation::PAGE_FRAME
- || m_pImpl->nVertRelation != text::RelOrientation::PAGE_FRAME)
- m_xShape->setPosition(
- awt::Point(m_pImpl->nLeftPosition, m_pImpl->nTopPosition));
-
- if (nRotation)
- xShapeProps->setPropertyValue("RotateAngle", uno::makeAny(nRotation));
- }
-
-
- m_pImpl->applyRelativePosition(xShapeProps, /*bRelativeOnly=*/true);
-
- xShapeProps->setPropertyValue("SurroundContour", uno::makeAny(m_pImpl->bContour));
- m_pImpl->applyMargins(xShapeProps);
- xShapeProps->setPropertyValue("Opaque", uno::makeAny(m_pImpl->bOpaque));
- xShapeProps->setPropertyValue("Surround", uno::makeAny(static_cast<sal_Int32>(m_pImpl->nWrap)));
- m_pImpl->applyZOrder(xShapeProps);
- m_pImpl->applyName(xShapeProps);
- xShapeProps->setPropertyValue("AllowOverlap",
- uno::makeAny(m_pImpl->bAllowOverlap));
-
- // Get the grab-bag set by oox, merge with our one and then put it back.
- comphelper::SequenceAsHashMap aInteropGrabBag(xShapeProps->getPropertyValue("InteropGrabBag"));
- aInteropGrabBag.update(m_pImpl->getInteropGrabBag());
- xShapeProps->setPropertyValue("InteropGrabBag", uno::makeAny(aInteropGrabBag.getAsConstPropertyValueList()));
- }
- else if (bUseShape && m_pImpl->eGraphicImportType == IMPORT_AS_DETECTED_INLINE)
- {
- uno::Reference< beans::XPropertySet > xShapeProps(m_xShape, uno::UNO_QUERY_THROW);
- m_pImpl->applyMargins(xShapeProps);
- m_pImpl->applyZOrder(xShapeProps);
- comphelper::SequenceAsHashMap aInteropGrabBag(xShapeProps->getPropertyValue("InteropGrabBag"));
- aInteropGrabBag.update(m_pImpl->getInteropGrabBag());
- xShapeProps->setPropertyValue("InteropGrabBag", uno::makeAny(aInteropGrabBag.getAsConstPropertyValueList()));
- }
- }
- }
- break;
- case NS_ooxml::LN_CT_Inline_distT:
- m_pImpl->nTopMargin = 0;
- break;
- case NS_ooxml::LN_CT_Inline_distB:
- m_pImpl->nBottomMargin = 0;
- break;
- case NS_ooxml::LN_CT_Inline_distL:
- m_pImpl->nLeftMargin = 0;
- break;
- case NS_ooxml::LN_CT_Inline_distR:
- m_pImpl->nRightMargin = 0;
- break;
- case NS_ooxml::LN_CT_GraphicalObjectData_uri:
- rValue.getString();
- //TODO: does it need to be handled?
- break;
- case NS_ooxml::LN_CT_SizeRelH_relativeFrom:
- {
- switch (nIntValue)
- {
- case NS_ooxml::LN_ST_SizeRelFromH_margin:
- if (m_xShape.is())
- {
- uno::Reference<beans::XPropertySet> xPropertySet(m_xShape, uno::UNO_QUERY);
- xPropertySet->setPropertyValue("RelativeWidthRelation", uno::makeAny(text::RelOrientation::FRAME));
- }
- break;
- case NS_ooxml::LN_ST_SizeRelFromH_leftMargin:
- case NS_ooxml::LN_ST_SizeRelFromH_outsideMargin:
- if (m_xShape.is())
- {
- // Here we handle the relative size of the width of some shape.
- // The size of the shape's width is going to be relative to the size of the left margin.
- // E.g.: (left margin = 8 && relative size = 150%) -> width of some shape = 12.
- uno::Reference<beans::XPropertySet> xPropertySet(m_xShape, uno::UNO_QUERY);
- xPropertySet->setPropertyValue("RelativeWidthRelation", uno::makeAny(text::RelOrientation::PAGE_LEFT));
- }
- break;
- case NS_ooxml::LN_ST_SizeRelFromH_rightMargin:
- case NS_ooxml::LN_ST_SizeRelFromH_insideMargin:
- if (m_xShape.is())
- {
- // Same as the left margin above.
- uno::Reference<beans::XPropertySet> xPropertySet(m_xShape, uno::UNO_QUERY);
- xPropertySet->setPropertyValue("RelativeWidthRelation", uno::makeAny(text::RelOrientation::PAGE_RIGHT));
- }
- break;
- case NS_ooxml::LN_ST_SizeRelFromH_page:
- if (m_xShape.is())
- {
- uno::Reference<beans::XPropertySet> xPropertySet(m_xShape, uno::UNO_QUERY);
- xPropertySet->setPropertyValue("RelativeWidthRelation", uno::makeAny(text::RelOrientation::PAGE_FRAME));
- }
- break;
- default:
- SAL_WARN("writerfilter", "GraphicImport::lcl_attribute: unhandled NS_ooxml::LN_CT_SizeRelH_relativeFrom value: " << nIntValue);
- break;
- }
- }
- break;
- case NS_ooxml::LN_CT_SizeRelV_relativeFrom:
- {
- switch (nIntValue)
- {
- case NS_ooxml::LN_ST_SizeRelFromV_margin:
- if (m_xShape.is())
- {
- uno::Reference<beans::XPropertySet> xPropertySet(m_xShape, uno::UNO_QUERY);
- xPropertySet->setPropertyValue("RelativeHeightRelation", uno::makeAny(text::RelOrientation::FRAME));
- }
- break;
- case NS_ooxml::LN_ST_SizeRelFromV_page:
- if (m_xShape.is())
- {
- uno::Reference<beans::XPropertySet> xPropertySet(m_xShape, uno::UNO_QUERY);
- xPropertySet->setPropertyValue("RelativeHeightRelation", uno::makeAny(text::RelOrientation::PAGE_FRAME));
- }
- break;
- case NS_ooxml::LN_ST_SizeRelFromV_topMargin:
- if (m_xShape.is())
- {
- uno::Reference<beans::XPropertySet> xPropertySet(m_xShape, uno::UNO_QUERY);
- xPropertySet->setPropertyValue("RelativeHeightRelation", uno::makeAny(text::RelOrientation::PAGE_PRINT_AREA));
- }
- break;
- case NS_ooxml::LN_ST_SizeRelFromV_bottomMargin:
- if (m_xShape.is())
- {
- uno::Reference<beans::XPropertySet> xPropertySet(m_xShape, uno::UNO_QUERY);
- xPropertySet->setPropertyValue("RelativeHeightRelation", uno::makeAny(text::RelOrientation::PAGE_PRINT_AREA_BOTTOM));
- }
- break;
- default:
- SAL_WARN("writerfilter", "GraphicImport::lcl_attribute: unhandled NS_ooxml::LN_CT_SizeRelV_relativeFrom value: " << nIntValue);
- break;
- }
- }
- break;
- default:
-#ifdef DBG_UTIL
- TagLogger::getInstance().element("unhandled");
-#endif
- break;
- }
-}
-
-uno::Reference<text::XTextContent> GraphicImport::GetGraphicObject()
-{
- uno::Reference<text::XTextContent> xResult;
-
- if (m_xGraphicObject.is())
- xResult = m_xGraphicObject;
- else if (m_xShape.is())
- {
- xResult.set(m_xShape, uno::UNO_QUERY_THROW);
- }
-
- return xResult;
-}
-
-
-void GraphicImport::ProcessShapeOptions(Value const & rValue)
-{
- sal_Int32 nIntValue = rValue.getInt();
- switch( m_pImpl->nShapeOptionType )
- {
- case NS_ooxml::LN_CT_Anchor_distL:
- m_pImpl->nLeftMargin = nIntValue / 360;
- m_pImpl->nLeftMarginOrig = m_pImpl->nLeftMargin;
- break;
- case NS_ooxml::LN_CT_Anchor_distT:
- //todo: changes have to be applied depending on the orientation, see SwWW8ImplReader::AdjustULWrapForWordMargins()
- m_pImpl->nTopMargin = nIntValue / 360;
- break;
- case NS_ooxml::LN_CT_Anchor_distR:
- //todo: changes have to be applied depending on the orientation, see SwWW8ImplReader::AdjustLRWrapForWordMargins()
- m_pImpl->nRightMargin = nIntValue / 360;
- break;
- case NS_ooxml::LN_CT_Anchor_distB:
- //todo: changes have to be applied depending on the orientation, see SwWW8ImplReader::AdjustULWrapForWordMargins()
- m_pImpl->nBottomMargin = nIntValue / 360;
- break;
- default:
- OSL_FAIL( "shape option unsupported?");
- }
-}
-
-
-void GraphicImport::lcl_sprm(Sprm& rSprm)
-{
- sal_uInt32 nSprmId = rSprm.getId();
-
- switch(nSprmId)
- {
- case NS_ooxml::LN_CT_Inline_extent: // 90911;
- case NS_ooxml::LN_CT_Inline_effectExtent: // 90912;
- case NS_ooxml::LN_CT_Inline_docPr: // 90913;
- case NS_ooxml::LN_CT_Inline_cNvGraphicFramePr: // 90914;
- case NS_ooxml::LN_CT_NonVisualGraphicFrameProperties_graphicFrameLocks:// 90657
- case NS_ooxml::LN_CT_Inline_a_graphic:// 90915
- case NS_ooxml::LN_CT_Anchor_simplePos_elem: // 90975;
- case NS_ooxml::LN_CT_Anchor_extent: // 90978;
- case NS_ooxml::LN_CT_Anchor_effectExtent: // 90979;
- case NS_ooxml::LN_EG_WrapType_wrapSquare: // 90945;
- case NS_ooxml::LN_EG_WrapType_wrapTight: // 90946;
- case NS_ooxml::LN_EG_WrapType_wrapThrough:
- case NS_ooxml::LN_CT_Anchor_docPr: // 90980;
- case NS_ooxml::LN_CT_Anchor_cNvGraphicFramePr: // 90981;
- case NS_ooxml::LN_CT_Anchor_a_graphic: // 90982;
- case NS_ooxml::LN_CT_WrapPath_start: // 90924;
- case NS_ooxml::LN_CT_WrapPath_lineTo: // 90925;
- case NS_ooxml::LN_graphic_graphic:
- case NS_ooxml::LN_pic_pic:
- case NS_ooxml::LN_dgm_relIds:
- case NS_ooxml::LN_lc_lockedCanvas:
- case NS_ooxml::LN_c_chart:
- case NS_ooxml::LN_wps_wsp:
- case NS_ooxml::LN_wpg_wgp:
- case NS_ooxml::LN_sizeRelH_sizeRelH:
- case NS_ooxml::LN_sizeRelV_sizeRelV:
- case NS_ooxml::LN_hlinkClick_hlinkClick:
- {
- writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
- if( pProperties )
- {
- pProperties->resolve(*this);
- }
-
- // We'll map these to PARALLEL, save the original wrap type.
- if (nSprmId == NS_ooxml::LN_EG_WrapType_wrapTight)
- m_pImpl->m_aInteropGrabBag["EG_WrapType"] <<= OUString("wrapTight");
- else if (nSprmId == NS_ooxml::LN_EG_WrapType_wrapThrough)
- m_pImpl->m_aInteropGrabBag["EG_WrapType"] <<= OUString("wrapThrough");
-
- switch (nSprmId)
- {
- case NS_ooxml::LN_EG_WrapType_wrapSquare:
- case NS_ooxml::LN_EG_WrapType_wrapThrough:
- case NS_ooxml::LN_EG_WrapType_wrapTight:
- {
- // tdf#137850: Word >= 2013 seems to ignore bBehindDoc except for wrapNone, but older versions honour it.
- if (m_pImpl->bBehindDoc && m_pImpl->rDomainMapper.GetSettingsTable()->GetWordCompatibilityMode() > 14)
- m_pImpl->bOpaque = true;
- }
- break;
- }
-
- }
- break;
- case NS_ooxml::LN_CT_WrapTight_wrapPolygon:
- case NS_ooxml::LN_CT_WrapThrough_wrapPolygon:
- {
- WrapPolygonHandler aHandler;
-
- resolveSprmProps(aHandler, rSprm);
-
- m_pImpl->mpWrapPolygon = aHandler.getPolygon();
-
- // Save the wrap path in case we can't handle it natively: drawinglayer shapes, TextFrames.
- m_pImpl->m_aInteropGrabBag["CT_WrapPath"] <<= m_pImpl->mpWrapPolygon->getPointSequenceSequence();
- }
- break;
- case NS_ooxml::LN_CT_Anchor_positionH: // 90976;
- {
- // Use a special handler for the positioning
- auto pHandler = std::make_shared<PositionHandler>( m_pImpl->m_rPositionOffsets, m_pImpl->m_rAligns );
- writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
- if( pProperties )
- {
- pProperties->resolve( *pHandler );
- if( !m_pImpl->bUseSimplePos )
- {
- m_pImpl->nHoriRelation = pHandler->relation();
- m_pImpl->bPageToggle = pHandler->GetPageToggle();
- m_pImpl->nHoriOrient = pHandler->orientation();
- m_pImpl->nLeftPosition = pHandler->position();
-
- // Left adjustments: if horizontally aligned to left of margin, then remove the
- // left wrapping.
- if (m_pImpl->nHoriOrient == text::HoriOrientation::LEFT)
- {
- if (m_pImpl->nHoriRelation == text::RelOrientation::PAGE_PRINT_AREA)
- {
- m_pImpl->nLeftMargin = 0;
- }
- }
- }
- }
- }
- break;
- case NS_ooxml::LN_CT_Anchor_positionV: // 90977;
- {
- // Use a special handler for the positioning
- auto pHandler = std::make_shared<PositionHandler>( m_pImpl->m_rPositionOffsets, m_pImpl->m_rAligns);
- writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
- if( pProperties )
- {
- pProperties->resolve( *pHandler );
- if( !m_pImpl->bUseSimplePos )
- {
- m_pImpl->nVertRelation = pHandler->relation();
- m_pImpl->nVertOrient = pHandler->orientation();
- m_pImpl->nTopPosition = pHandler->position();
- }
- }
- }
- break;
- case NS_ooxml::LN_CT_SizeRelH_pctWidth:
- case NS_ooxml::LN_CT_SizeRelV_pctHeight:
- if (m_pImpl->m_rPositivePercentages.empty())
- break;
-
- if (m_xShape.is())
- {
- sal_Int16 nPositivePercentage = rtl::math::round(m_pImpl->m_rPositivePercentages.front().toDouble() / oox::drawingml::PER_PERCENT);
-
- if (nPositivePercentage)
- {
- uno::Reference<beans::XPropertySet> xPropertySet(m_xShape, uno::UNO_QUERY);
- OUString aProperty = nSprmId == NS_ooxml::LN_CT_SizeRelH_pctWidth ? OUString("RelativeWidth") : OUString("RelativeHeight");
-
- sal_Int32 nTextPreRotateAngle = 0;
- uno::Any aAny;
- if (xPropertySet->getPropertySetInfo()->hasPropertyByName(
- "CustomShapeGeometry"))
- {
- aAny = xPropertySet->getPropertyValue("CustomShapeGeometry");
- }
- comphelper::SequenceAsHashMap aCustomShapeGeometry(aAny);
- auto it = aCustomShapeGeometry.find("TextPreRotateAngle");
- if (it != aCustomShapeGeometry.end())
- {
- nTextPreRotateAngle = it->second.get<sal_Int32>();
- }
- if (nTextPreRotateAngle == 0)
- {
- xPropertySet->setPropertyValue(aProperty,
- uno::makeAny(nPositivePercentage));
- }
- }
- }
-
- // Make sure the token is consumed even if xShape is an empty
- // reference.
- m_pImpl->m_rPositivePercentages.pop();
- break;
- case NS_ooxml::LN_EG_WrapType_wrapNone: // 90944; - doesn't contain attributes
- //depending on the behindDoc attribute text wraps through behind or in front of the object
- m_pImpl->nWrap = text::WrapTextMode_THROUGH;
-
- // Wrap though means the margins defined earlier should not be
- // respected.
- m_pImpl->nLeftMargin = 0;
- m_pImpl->nTopMargin = 0;
- m_pImpl->nRightMargin = 0;
- m_pImpl->nBottomMargin = 0;
- break;
- case NS_ooxml::LN_EG_WrapType_wrapTopAndBottom: // 90948;
- // tdf#137850: Word >= 2013 seems to ignore bBehindDoc except for wrapNone, but older versions honour it.
- if (m_pImpl->bBehindDoc && m_pImpl->rDomainMapper.GetSettingsTable()->GetWordCompatibilityMode() > 14)
- m_pImpl->bOpaque = true;
- m_pImpl->nWrap = text::WrapTextMode_NONE;
- break;
- case NS_ooxml::LN_CT_GraphicalObject_graphicData:// 90660;
- {
- m_pImpl->bIsGraphic = true;
-
- writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
- if( pProperties )
- pProperties->resolve(*this);
- }
- break;
- case NS_ooxml::LN_CT_NonVisualDrawingProps_a_hlinkClick: // 90689;
- {
- writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
- if( pProperties )
- pProperties->resolve( *this );
- }
- break;
- default:
- SAL_WARN("writerfilter", "GraphicImport::lcl_sprm: unhandled token: " << nSprmId);
- break;
- }
-}
-
-void GraphicImport::lcl_entry(writerfilter::Reference<Properties>::Pointer_t /*ref*/)
-{
-}
-
-uno::Reference<text::XTextContent> GraphicImport::createGraphicObject(uno::Reference<graphic::XGraphic> const & rxGraphic,
- uno::Reference<beans::XPropertySet> const & xShapeProps)
-{
- uno::Reference<text::XTextContent> xGraphicObject;
- try
- {
- if (rxGraphic.is())
- {
- uno::Reference< beans::XPropertySet > xGraphicObjectProperties(
- m_xTextFactory->createInstance("com.sun.star.text.TextGraphicObject"),
- uno::UNO_QUERY_THROW);
- xGraphicObjectProperties->setPropertyValue(getPropertyName(PROP_GRAPHIC), uno::makeAny(rxGraphic));
- xGraphicObjectProperties->setPropertyValue(getPropertyName(PROP_ANCHOR_TYPE),
- uno::makeAny( m_pImpl->eGraphicImportType == IMPORT_AS_DETECTED_ANCHOR ?
- text::TextContentAnchorType_AT_CHARACTER :
- text::TextContentAnchorType_AS_CHARACTER ));
- xGraphicObject.set( xGraphicObjectProperties, uno::UNO_QUERY_THROW );
-
- //shapes have only one border
- table::BorderLine2 aBorderLine;
- GraphicBorderLine& rBorderLine = m_pImpl->aBorders[0];
- if (rBorderLine.isEmpty() && xShapeProps.is() && xShapeProps->getPropertyValue("LineStyle").get<drawing::LineStyle>() != drawing::LineStyle_NONE)
- {
- // In case we got no border tokens and we have the
- // original shape, then use its line properties as the
- // border.
- aBorderLine.Color = xShapeProps->getPropertyValue("LineColor").get<sal_Int32>();
- aBorderLine.LineWidth = xShapeProps->getPropertyValue("LineWidth").get<sal_Int32>();
- }
- else
- {
- aBorderLine.Color = 0;
- aBorderLine.InnerLineWidth = 0;
- aBorderLine.OuterLineWidth = static_cast<sal_Int16>(rBorderLine.nLineWidth);
- aBorderLine.LineDistance = 0;
- }
- PropertyIds const aBorderProps[] =
- {
- PROP_LEFT_BORDER,
- PROP_RIGHT_BORDER,
- PROP_TOP_BORDER,
- PROP_BOTTOM_BORDER
- };
-
- for(PropertyIds const & rBorderProp : aBorderProps)
- xGraphicObjectProperties->setPropertyValue(getPropertyName(rBorderProp), uno::makeAny(aBorderLine));
-
- // setting graphic object shadow properties
- if (m_pImpl->bShadow)
- {
- // Shadow width is approximated by average of X and Y
- table::ShadowFormat aShadow;
- sal_uInt32 nShadowColor = m_pImpl->nShadowColor & 0x00FFFFFF; // The shadow color we get is RGB only.
- sal_Int32 nShadowWidth = (abs(m_pImpl->nShadowXDistance)
- + abs(m_pImpl->nShadowYDistance)) / 2;
-
- aShadow.ShadowWidth = nShadowWidth;
- sal_uInt8 nShadowTransparence = float(m_pImpl->nShadowTransparence) * 2.55;
- nShadowColor |= (nShadowTransparence << 24); // Add transparence to the color.
- aShadow.Color = nShadowColor;
- // Distances -ve for top and right, +ve for bottom and left
- if (m_pImpl->nShadowXDistance > 0)
- {
- if (m_pImpl->nShadowYDistance > 0)
- aShadow.Location = table::ShadowLocation_BOTTOM_RIGHT;
- else
- aShadow.Location = table::ShadowLocation_TOP_RIGHT;
- }
- else
- {
- if (m_pImpl->nShadowYDistance > 0)
- aShadow.Location = table::ShadowLocation_BOTTOM_LEFT;
- else
- aShadow.Location = table::ShadowLocation_TOP_LEFT;
- }
-
- xGraphicObjectProperties->setPropertyValue(getPropertyName(PROP_SHADOW_FORMAT), uno::makeAny(aShadow));
- }
-
- // setting properties for all types
- if( m_pImpl->bPositionProtected )
- xGraphicObjectProperties->setPropertyValue(getPropertyName( PROP_POSITION_PROTECTED ),
- uno::makeAny(true));
- if( m_pImpl->bSizeProtected )
- xGraphicObjectProperties->setPropertyValue(getPropertyName( PROP_SIZE_PROTECTED ),
- uno::makeAny(true));
-
- sal_Int32 nWidth = - m_pImpl->nLeftPosition;
- if (m_pImpl->eGraphicImportType == IMPORT_AS_DETECTED_ANCHOR)
- {
- //adjust margins
- if( (m_pImpl->nHoriOrient == text::HoriOrientation::LEFT &&
- (m_pImpl->nHoriRelation == text::RelOrientation::PAGE_PRINT_AREA ||
- m_pImpl->nHoriRelation == text::RelOrientation::FRAME) ) ||
- (m_pImpl->nHoriOrient == text::HoriOrientation::INSIDE &&
- m_pImpl->nHoriRelation == text::RelOrientation::PAGE_PRINT_AREA ))
- m_pImpl->nLeftMargin = 0;
- if((m_pImpl->nHoriOrient == text::HoriOrientation::RIGHT &&
- (m_pImpl->nHoriRelation == text::RelOrientation::PAGE_PRINT_AREA ||
- m_pImpl->nHoriRelation == text::RelOrientation::FRAME) ) ||
- (m_pImpl->nHoriOrient == text::HoriOrientation::INSIDE &&
- m_pImpl->nHoriRelation == text::RelOrientation::PAGE_PRINT_AREA ))
- m_pImpl->nRightMargin = 0;
- // adjust top/bottom margins
- if( m_pImpl->nVertOrient == text::VertOrientation::TOP &&
- ( m_pImpl->nVertRelation == text::RelOrientation::PAGE_PRINT_AREA ||
- m_pImpl->nVertRelation == text::RelOrientation::PAGE_FRAME))
- m_pImpl->nTopMargin = 0;
- if( m_pImpl->nVertOrient == text::VertOrientation::BOTTOM &&
- ( m_pImpl->nVertRelation == text::RelOrientation::PAGE_PRINT_AREA ||
- m_pImpl->nVertRelation == text::RelOrientation::PAGE_FRAME))
- m_pImpl->nBottomMargin = 0;
- if( m_pImpl->nVertOrient == text::VertOrientation::BOTTOM &&
- m_pImpl->nVertRelation == text::RelOrientation::PAGE_PRINT_AREA )
- m_pImpl->nBottomMargin = 0;
- //adjust alignment
- if( m_pImpl->nHoriOrient == text::HoriOrientation::INSIDE &&
- m_pImpl->nHoriRelation == text::RelOrientation::PAGE_FRAME )
- {
- // convert 'left to page' to 'from left -<width> to page text area'
- m_pImpl->nHoriOrient = text::HoriOrientation::NONE;
- m_pImpl->nHoriRelation = text::RelOrientation::PAGE_PRINT_AREA;
- m_pImpl->nLeftPosition = - nWidth;
- }
- else if( m_pImpl->nHoriOrient == text::HoriOrientation::OUTSIDE &&
- m_pImpl->nHoriRelation == text::RelOrientation::PAGE_FRAME )
- {
- // convert 'right to page' to 'from left 0 to right page border'
- m_pImpl->nHoriOrient = text::HoriOrientation::NONE;
- m_pImpl->nHoriRelation = text::RelOrientation::PAGE_RIGHT;
- m_pImpl->nLeftPosition = 0;
- }
-
- m_pImpl->applyPosition(xGraphicObjectProperties);
- m_pImpl->applyRelativePosition(xGraphicObjectProperties);
- if( !m_pImpl->bOpaque )
- {
- xGraphicObjectProperties->setPropertyValue(getPropertyName( PROP_OPAQUE ), uno::makeAny(m_pImpl->bOpaque));
- }
- xGraphicObjectProperties->setPropertyValue(getPropertyName( PROP_SURROUND ),
- uno::makeAny(static_cast<sal_Int32>(m_pImpl->nWrap)));
- if( m_pImpl->rDomainMapper.IsInTable())
- xGraphicObjectProperties->setPropertyValue(getPropertyName( PROP_FOLLOW_TEXT_FLOW ),
- uno::makeAny(m_pImpl->bLayoutInCell));
-
- xGraphicObjectProperties->setPropertyValue(getPropertyName( PROP_SURROUND_CONTOUR ),
- uno::makeAny(m_pImpl->bContour));
- xGraphicObjectProperties->setPropertyValue(getPropertyName( PROP_CONTOUR_OUTSIDE ),
- uno::makeAny(m_pImpl->bContourOutside));
- m_pImpl->applyMargins(xGraphicObjectProperties);
- }
-
- xGraphicObjectProperties->setPropertyValue(getPropertyName( PROP_ADJUST_CONTRAST ),
- uno::makeAny(static_cast<sal_Int16>(m_pImpl->nContrast)));
- xGraphicObjectProperties->setPropertyValue(getPropertyName( PROP_ADJUST_LUMINANCE ),
- uno::makeAny(static_cast<sal_Int16>(m_pImpl->nBrightness)));
- if(m_pImpl->eColorMode != drawing::ColorMode_STANDARD)
- {
- xGraphicObjectProperties->setPropertyValue(getPropertyName( PROP_GRAPHIC_COLOR_MODE ),
- uno::makeAny(m_pImpl->eColorMode));
- }
-
- xGraphicObjectProperties->setPropertyValue(getPropertyName( PROP_BACK_COLOR ),
- uno::makeAny( GraphicImport_Impl::nFillColor ));
- m_pImpl->applyZOrder(xGraphicObjectProperties);
-
- //there seems to be no way to detect the original size via _real_ API
- uno::Reference< beans::XPropertySet > xGraphicProperties(rxGraphic, uno::UNO_QUERY_THROW);
-
- if (m_pImpl->mpWrapPolygon)
- {
- uno::Any aContourPolyPolygon;
- awt::Size aGraphicSize;
- WrapPolygon::Pointer_t pCorrected;
- xGraphicProperties->getPropertyValue(getPropertyName(PROP_SIZE100th_M_M)) >>= aGraphicSize;
- if (aGraphicSize.Width && aGraphicSize.Height)
- {
- pCorrected = m_pImpl->mpWrapPolygon->correctWordWrapPolygon(aGraphicSize);
- }
- else
- {
- xGraphicProperties->getPropertyValue(getPropertyName(PROP_SIZE_PIXEL)) >>= aGraphicSize;
- if (aGraphicSize.Width && aGraphicSize.Height)
- {
- pCorrected = m_pImpl->mpWrapPolygon->correctWordWrapPolygonPixel(aGraphicSize);
- }
- }
-
- text::GraphicCrop aGraphicCrop;
- xShapeProps->getPropertyValue("GraphicCrop") >>= aGraphicCrop;
- if (aGraphicCrop.Top != 0 || aGraphicCrop.Bottom != 0 || aGraphicCrop.Left != 0
- || aGraphicCrop.Right != 0)
- {
- // Word's wrap polygon deals with a canvas which has the size of the already
- // cropped graphic, correct our polygon to have the same render result.
- pCorrected = pCorrected->correctCrop(aGraphicSize, aGraphicCrop);
- }
-
- if (pCorrected)
- {
- aContourPolyPolygon <<= pCorrected->getPointSequenceSequence();
- xGraphicObjectProperties->setPropertyValue(getPropertyName(PROP_CONTOUR_POLY_POLYGON),
- aContourPolyPolygon);
- // We should bring it to front, even if wp:anchor's behindDoc="1",
- // because otherwise paragraph background (if set) overlaps the graphic
- // TODO: if paragraph's background becomes bottommost, then remove this hack
- xGraphicObjectProperties->setPropertyValue("Opaque", uno::makeAny(true));
- }
- }
-
-
- if(m_pImpl->eGraphicImportType == IMPORT_AS_DETECTED_INLINE || m_pImpl->eGraphicImportType == IMPORT_AS_DETECTED_ANCHOR)
- {
- if( m_pImpl->getXSize() && m_pImpl->getYSize() )
- xGraphicObjectProperties->setPropertyValue(getPropertyName(PROP_SIZE),
- uno::makeAny( awt::Size( m_pImpl->getXSize(), m_pImpl->getYSize() )));
- m_pImpl->applyMargins(xGraphicObjectProperties);
- m_pImpl->applyName(xGraphicObjectProperties);
- }
-
- // Handle horizontal flip.
- bool bMirrored = false;
- xShapeProps->getPropertyValue("IsMirrored") >>= bMirrored;
- if (bMirrored)
- {
- xGraphicObjectProperties->setPropertyValue("HoriMirroredOnEvenPages",
- uno::makeAny(true));
- xGraphicObjectProperties->setPropertyValue("HoriMirroredOnOddPages",
- uno::makeAny(true));
- }
- }
- }
- catch( const uno::Exception& )
- {
- TOOLS_WARN_EXCEPTION("writerfilter", "");
- }
- return xGraphicObject;
-}
-
-
-void GraphicImport::data(const sal_uInt8* buf, size_t len)
-{
- beans::PropertyValues aMediaProperties( 1 );
- aMediaProperties[0].Name = getPropertyName(PROP_INPUT_STREAM);
-
- uno::Reference< io::XInputStream > xIStream = new XInputStreamHelper( buf, len );
- aMediaProperties[0].Value <<= xIStream;
-
- uno::Reference<beans::XPropertySet> xPropertySet;
- uno::Reference<graphic::XGraphicProvider> xGraphicProvider(graphic::GraphicProvider::create(m_xComponentContext));
- uno::Reference<graphic::XGraphic> xGraphic = xGraphicProvider->queryGraphic(aMediaProperties);
- m_xGraphicObject = createGraphicObject(xGraphic, xPropertySet);
-}
-
-
-void GraphicImport::lcl_startSectionGroup()
-{
-}
-
-
-void GraphicImport::lcl_endSectionGroup()
-{
-}
-
-
-void GraphicImport::lcl_startParagraphGroup()
-{
-}
-
-
-void GraphicImport::lcl_endParagraphGroup()
-{
-}
-
-
-void GraphicImport::lcl_startCharacterGroup()
-{
-}
-
-
-void GraphicImport::lcl_endCharacterGroup()
-{
-}
-
-
-void GraphicImport::lcl_text(const sal_uInt8 * /*_data*/, size_t /*len*/)
-{
-}
-
-
-void GraphicImport::lcl_utext(const sal_uInt8 * /*_data*/, size_t /*len*/)
-{
-}
-
-
-void GraphicImport::lcl_props(writerfilter::Reference<Properties>::Pointer_t /*ref*/)
-{
-}
-
-
-void GraphicImport::lcl_table(Id /*name*/, writerfilter::Reference<Table>::Pointer_t /*ref*/)
-{
-}
-
-
-void GraphicImport::lcl_substream(Id /*name*/, ::writerfilter::Reference<Stream>::Pointer_t /*ref*/)
-{
-}
-
-void GraphicImport::lcl_startShape(uno::Reference<drawing::XShape> const&)
-{
-}
-
-void GraphicImport::lcl_endShape( )
-{
-}
-
-bool GraphicImport::IsGraphic() const
-{
- return m_pImpl->bIsGraphic;
-}
-
-sal_Int32 GraphicImport::GetLeftMarginOrig() const
-{
- return m_pImpl->nLeftMarginOrig;
-}
-
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/GraphicImport.hxx b/writerfilter/source/dmapper/GraphicImport.hxx
deleted file mode 100644
index 9ea3984db23b..000000000000
--- a/writerfilter/source/dmapper/GraphicImport.hxx
+++ /dev/null
@@ -1,136 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * 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 .
- */
-#ifndef INCLUDED_WRITERFILTER_SOURCE_DMAPPER_GRAPHICIMPORT_HXX
-#define INCLUDED_WRITERFILTER_SOURCE_DMAPPER_GRAPHICIMPORT_HXX
-
-#include <queue>
-#include <memory>
-
-#include "LoggedResources.hxx"
-
-#include <com/sun/star/beans/XPropertySet.hpp>
-#include <com/sun/star/graphic/XGraphic.hpp>
-
-namespace com::sun::star {
- namespace uno
- {
- class XComponentContext;
- }
- namespace lang
- {
- class XMultiServiceFactory;
- }
- namespace text
- {
- class XTextContent;
- }
- namespace drawing
- {
- class XShape;
- }
- namespace beans
- {
- struct PropertyValue;
- }
-}
-
-namespace writerfilter::dmapper
-{
-class GraphicImport_Impl;
-class DomainMapper;
-
-enum GraphicImportType
-{
- IMPORT_AS_DETECTED_INLINE,
- IMPORT_AS_DETECTED_ANCHOR
-};
-
-class GraphicImport : public LoggedProperties, public LoggedTable
- ,public BinaryObj, public LoggedStream
-{
- std::unique_ptr<GraphicImport_Impl> m_pImpl;
-
- css::uno::Reference<css::uno::XComponentContext> m_xComponentContext;
- css::uno::Reference<css::lang::XMultiServiceFactory> m_xTextFactory;
-
- css::uno::Reference<css::text::XTextContent> m_xGraphicObject;
-
- css::uno::Reference<css::drawing::XShape> m_xShape;
- void ProcessShapeOptions(Value const & val);
-
- css::uno::Reference<css::text::XTextContent>
- createGraphicObject(css::uno::Reference<css::graphic::XGraphic> const & rxGraphic,
- css::uno::Reference<css::beans::XPropertySet> const & xShapeProps);
-
- void putPropertyToFrameGrabBag( const OUString& sPropertyName, const css::uno::Any& aPropertyValue );
-
-public:
- explicit GraphicImport( css::uno::Reference<css::uno::XComponentContext> const& xComponentContext,
- css::uno::Reference<css::lang::XMultiServiceFactory> const& xTextFactory,
- DomainMapper& rDomainMapper,
- GraphicImportType eGraphicImportType,
- std::pair<OUString, OUString>& rPositionOffsets,
- std::pair<OUString, OUString>& rAligns,
- std::queue<OUString>& rPositivePercentages);
- virtual ~GraphicImport() override;
-
- // BinaryObj
- virtual void data(const sal_uInt8* buffer, size_t len) override;
-
- css::uno::Reference<css::text::XTextContent> GetGraphicObject();
- const css::uno::Reference<css::drawing::XShape>& GetXShapeObject() const { return m_xShape;}
- bool IsGraphic() const;
- sal_Int32 GetLeftMarginOrig() const;
-
- com::sun::star::awt::Point GetGraphicObjectPosition() const;
-
- private:
- // Properties
- virtual void lcl_attribute(Id Name, Value & val) override;
- virtual void lcl_sprm(Sprm & sprm) override;
-
- // Table
- virtual void lcl_entry(writerfilter::Reference<Properties>::Pointer_t ref) override;
-
- // Stream
- virtual void lcl_startSectionGroup() override;
- virtual void lcl_endSectionGroup() override;
- virtual void lcl_startParagraphGroup() override;
- virtual void lcl_endParagraphGroup() override;
- virtual void lcl_startCharacterGroup() override;
- virtual void lcl_endCharacterGroup() override;
- virtual void lcl_text(const sal_uInt8 * data, size_t len) override;
- virtual void lcl_utext(const sal_uInt8 * data, size_t len) override;
- virtual void lcl_props(writerfilter::Reference<Properties>::Pointer_t ref) override;
- virtual void lcl_table(Id name,
- writerfilter::Reference<Table>::Pointer_t ref) override;
- virtual void lcl_substream(Id name, writerfilter::Reference<Stream>::Pointer_t ref) override;
- virtual void lcl_startShape(css::uno::Reference<css::drawing::XShape> const& xShape) override;
- virtual void lcl_endShape() override;
-
- void handleWrapTextValue(sal_uInt32 nVal);
-};
-
-typedef tools::SvRef<GraphicImport> GraphicImportPtr;
-
-}
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/LatentStyleHandler.cxx b/writerfilter/source/dmapper/LatentStyleHandler.cxx
deleted file mode 100644
index bc381d21fe3e..000000000000
--- a/writerfilter/source/dmapper/LatentStyleHandler.cxx
+++ /dev/null
@@ -1,71 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-#include "LatentStyleHandler.hxx"
-#include "TagLogger.hxx"
-#include <ooxml/resourceids.hxx>
-
-namespace writerfilter::dmapper
-{
-using namespace ::com::sun::star;
-
-LatentStyleHandler::LatentStyleHandler()
- : LoggedProperties("LatentStyleHandler")
-{
-}
-
-LatentStyleHandler::~LatentStyleHandler() = default;
-
-void LatentStyleHandler::lcl_attribute(Id nId, Value& rVal)
-{
- beans::PropertyValue aValue;
- bool bFound = true;
- switch (nId)
- {
- case NS_ooxml::LN_CT_LsdException_name:
- aValue.Name = "name";
- break;
- case NS_ooxml::LN_CT_LsdException_locked:
- aValue.Name = "locked";
- break;
- case NS_ooxml::LN_CT_LsdException_uiPriority:
- aValue.Name = "uiPriority";
- break;
- case NS_ooxml::LN_CT_LsdException_semiHidden:
- aValue.Name = "semiHidden";
- break;
- case NS_ooxml::LN_CT_LsdException_unhideWhenUsed:
- aValue.Name = "unhideWhenUsed";
- break;
- case NS_ooxml::LN_CT_LsdException_qFormat:
- aValue.Name = "qFormat";
- break;
- default:
- bFound = false;
-#ifdef DBG_UTIL
- TagLogger::getInstance().element("unhandled");
-#endif
- break;
- }
- if (bFound)
- {
- aValue.Value <<= rVal.getString();
- m_aAttributes.push_back(aValue);
- }
-}
-
-void LatentStyleHandler::lcl_sprm(Sprm& /*rSprm*/) {}
-
-const std::vector<beans::PropertyValue>& LatentStyleHandler::getAttributes() const
-{
- return m_aAttributes;
-}
-
-} // namespace writerfilter::dmapper
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/LatentStyleHandler.hxx b/writerfilter/source/dmapper/LatentStyleHandler.hxx
deleted file mode 100644
index db46e974f9f7..000000000000
--- a/writerfilter/source/dmapper/LatentStyleHandler.hxx
+++ /dev/null
@@ -1,38 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-#ifndef INCLUDED_WRITERFILTER_SOURCE_DMAPPER_LATENTSTYLEHANDLER_HXX
-#define INCLUDED_WRITERFILTER_SOURCE_DMAPPER_LATENTSTYLEHANDLER_HXX
-
-#include "LoggedResources.hxx"
-#include <vector>
-#include <com/sun/star/beans/PropertyValue.hpp>
-
-namespace writerfilter::dmapper
-{
-/// Handler for a latent style (w:lsdException element)
-class LatentStyleHandler : public LoggedProperties
-{
- std::vector<css::beans::PropertyValue> m_aAttributes;
-
- // Properties
- void lcl_attribute(Id nId, Value& rVal) override;
- void lcl_sprm(Sprm& sprm) override;
-
-public:
- LatentStyleHandler();
- ~LatentStyleHandler() override;
-
- const std::vector<css::beans::PropertyValue>& getAttributes() const;
-};
-
-} // namespace writerfilter::dmapper
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/LoggedResources.cxx b/writerfilter/source/dmapper/LoggedResources.cxx
deleted file mode 100644
index 4a0886e44812..000000000000
--- a/writerfilter/source/dmapper/LoggedResources.cxx
+++ /dev/null
@@ -1,382 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * 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 .
- */
-
-#include "LoggedResources.hxx"
-#include "TagLogger.hxx"
-#include <ooxml/QNameToString.hxx>
-
-using namespace ::com::sun::star;
-
-namespace writerfilter
-{
-#ifdef DBG_UTIL
-
-LoggedResourcesHelper::LoggedResourcesHelper(const std::string& sPrefix)
- : msPrefix(sPrefix)
-{
-}
-
-LoggedResourcesHelper::~LoggedResourcesHelper() {}
-
-void LoggedResourcesHelper::startElement(const std::string& sElement)
-{
- TagLogger::getInstance().startElement(msPrefix + "." + sElement);
-}
-
-void LoggedResourcesHelper::endElement() { TagLogger::getInstance().endElement(); }
-
-void LoggedResourcesHelper::chars(std::u16string_view rChars)
-{
- TagLogger::getInstance().chars(rChars);
-}
-
-void LoggedResourcesHelper::chars(const std::string& rChars)
-{
- TagLogger::getInstance().chars(rChars);
-}
-
-void LoggedResourcesHelper::attribute(const std::string& rName, const std::string& rValue)
-{
- TagLogger::getInstance().attribute(rName, rValue);
-}
-
-void LoggedResourcesHelper::attribute(const std::string& rName, sal_uInt32 nValue)
-{
- TagLogger::getInstance().attribute(rName, nValue);
-}
-
-#endif
-
-LoggedStream::LoggedStream(
-#ifdef DBG_UTIL
- const std::string& sPrefix)
- : mHelper(sPrefix)
-#else
- const std::string&)
-#endif
-{
-}
-
-LoggedStream::~LoggedStream() {}
-
-void LoggedStream::startSectionGroup()
-{
-#ifdef DBG_UTIL
- mHelper.startElement("section");
-#endif
-
- lcl_startSectionGroup();
-}
-
-void LoggedStream::endSectionGroup()
-{
- lcl_endSectionGroup();
-
-#ifdef DBG_UTIL
- LoggedResourcesHelper::endElement();
-#endif
-}
-
-void LoggedStream::startParagraphGroup()
-{
-#ifdef DBG_UTIL
- mHelper.startElement("paragraph");
-#endif
-
- lcl_startParagraphGroup();
-}
-
-void LoggedStream::endParagraphGroup()
-{
- lcl_endParagraphGroup();
-
-#ifdef DBG_UTIL
- LoggedResourcesHelper::endElement();
-#endif
-}
-
-void LoggedStream::startCharacterGroup()
-{
-#ifdef DBG_UTIL
- mHelper.startElement("charactergroup");
-#endif
-
- lcl_startCharacterGroup();
-}
-
-void LoggedStream::endCharacterGroup()
-{
- lcl_endCharacterGroup();
-
-#ifdef DBG_UTIL
- LoggedResourcesHelper::endElement();
-#endif
-}
-
-void LoggedStream::startShape(uno::Reference<drawing::XShape> const& xShape)
-{
-#ifdef DBG_UTIL
- mHelper.startElement("shape");
-#endif
-
- lcl_startShape(xShape);
-}
-
-void LoggedStream::endShape()
-{
- lcl_endShape();
-
-#ifdef DBG_UTIL
- LoggedResourcesHelper::endElement();
-#endif
-}
-
-void LoggedStream::text(const sal_uInt8* data, size_t len)
-{
-#ifdef DBG_UTIL
- mHelper.startElement("text");
-
- OUString sText(reinterpret_cast<const char*>(data), len, RTL_TEXTENCODING_MS_1252);
-
- mHelper.startElement("data");
- LoggedResourcesHelper::chars(sText);
- LoggedResourcesHelper::endElement();
-#endif
-
- lcl_text(data, len);
-
-#ifdef DBG_UTIL
- LoggedResourcesHelper::endElement();
-#endif
-}
-
-void LoggedStream::utext(const sal_uInt8* data, size_t len)
-{
-#ifdef DBG_UTIL
- mHelper.startElement("utext");
- mHelper.startElement("data");
-
- OUString sText(reinterpret_cast<const sal_Unicode*>(data), len);
-
- LoggedResourcesHelper::chars(sText);
-
- LoggedResourcesHelper::endElement();
-#endif
-
- lcl_utext(data, len);
-
-#ifdef DBG_UTIL
- LoggedResourcesHelper::endElement();
-#endif
-}
-
-void LoggedStream::positionOffset(const OUString& rText, bool bVertical)
-{
-#ifdef DBG_UTIL
- mHelper.startElement("positionOffset");
- LoggedResourcesHelper::attribute("vertical", static_cast<int>(bVertical));
- LoggedResourcesHelper::chars(rText);
-#endif
-
- lcl_positionOffset(rText, bVertical);
-
-#ifdef DBG_UTIL
- LoggedResourcesHelper::endElement();
-#endif
-}
-
-void LoggedStream::align(const OUString& rText, bool bVertical)
-{
-#ifdef DBG_UTIL
- mHelper.startElement("align");
- LoggedResourcesHelper::attribute("vertical", static_cast<int>(bVertical));
- LoggedResourcesHelper::chars(rText);
-#endif
-
- lcl_align(rText, bVertical);
-
-#ifdef DBG_UTIL
- LoggedResourcesHelper::endElement();
-#endif
-}
-
-void LoggedStream::positivePercentage(const OUString& rText)
-{
-#ifdef DBG_UTIL
- mHelper.startElement("positivePercentage");
- LoggedResourcesHelper::chars(rText);
-#endif
-
- lcl_positivePercentage(rText);
-
-#ifdef DBG_UTIL
- LoggedResourcesHelper::endElement();
-#endif
-}
-
-void LoggedStream::props(writerfilter::Reference<Properties>::Pointer_t ref)
-{
-#ifdef DBG_UTIL
- mHelper.startElement("props");
-#endif
-
- lcl_props(ref);
-
-#ifdef DBG_UTIL
- LoggedResourcesHelper::endElement();
-#endif
-}
-
-void LoggedStream::table(Id name, writerfilter::Reference<Table>::Pointer_t ref)
-{
-#ifdef DBG_UTIL
- mHelper.startElement("table");
- LoggedResourcesHelper::attribute("name", QNameToString(name));
-#endif
-
- lcl_table(name, ref);
-
-#ifdef DBG_UTIL
- LoggedResourcesHelper::endElement();
-#endif
-}
-
-void LoggedStream::substream(Id name, writerfilter::Reference<Stream>::Pointer_t ref)
-{
-#ifdef DBG_UTIL
- mHelper.startElement("substream");
- LoggedResourcesHelper::attribute("name", QNameToString(name));
-#endif
-
- lcl_substream(name, ref);
-
-#ifdef DBG_UTIL
- LoggedResourcesHelper::endElement();
-#endif
-}
-
-void LoggedStream::info(const std::string& _info)
-{
-#ifdef DBG_UTIL
- mHelper.startElement("info");
- LoggedResourcesHelper::attribute("text", _info);
-#else
- (void)_info;
-#endif
-
-#ifdef DBG_UTIL
- LoggedResourcesHelper::endElement();
-#endif
-}
-
-void LoggedStream::startGlossaryEntry()
-{
-#ifdef DBG_UTIL
- mHelper.startElement("startGlossaryEntry");
-#endif
-
- lcl_startGlossaryEntry();
-
-#ifdef DBG_UTIL
- LoggedResourcesHelper::endElement();
-#endif
-}
-
-void LoggedStream::endGlossaryEntry()
-{
-#ifdef DBG_UTIL
- mHelper.startElement("endGlossaryEntry");
-#endif
-
- lcl_endGlossaryEntry();
-
-#ifdef DBG_UTIL
- LoggedResourcesHelper::endElement();
-#endif
-}
-
-LoggedProperties::LoggedProperties(
-#ifdef DBG_UTIL
- const std::string& sPrefix)
- : mHelper(sPrefix)
-#else
- const std::string&)
-#endif
-{
-}
-
-LoggedProperties::~LoggedProperties() {}
-
-void LoggedProperties::attribute(Id name, Value& val)
-{
-#ifdef DBG_UTIL
- mHelper.startElement("attribute");
- LoggedResourcesHelper::attribute("name", QNameToString(name));
- LoggedResourcesHelper::attribute("value", val.toString());
- LoggedResourcesHelper::endElement();
-#endif
-
- lcl_attribute(name, val);
-}
-
-void LoggedProperties::sprm(Sprm& rSprm)
-{
-#ifdef DBG_UTIL
- mHelper.startElement("sprm");
- LoggedResourcesHelper::attribute("name", QNameToString(rSprm.getId()));
- LoggedResourcesHelper::chars(rSprm.toString());
-#endif
-
- lcl_sprm(rSprm);
-
-#ifdef DBG_UTIL
- LoggedResourcesHelper::endElement();
-#endif
-}
-
-LoggedTable::LoggedTable(
-#ifdef DBG_UTIL
- const std::string& sPrefix)
- : mHelper(sPrefix)
-#else
- const std::string&)
-#endif
-{
-}
-
-LoggedTable::~LoggedTable() {}
-
-void LoggedTable::entry(int pos, writerfilter::Reference<Properties>::Pointer_t ref)
-{
-#ifdef DBG_UTIL
- mHelper.startElement("entry");
- LoggedResourcesHelper::attribute("pos", pos);
-#else
- (void)pos;
-#endif
-
- lcl_entry(ref);
-
-#ifdef DBG_UTIL
- LoggedResourcesHelper::endElement();
-#endif
-}
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/LoggedResources.hxx b/writerfilter/source/dmapper/LoggedResources.hxx
deleted file mode 100644
index 52ef6a43e9d2..000000000000
--- a/writerfilter/source/dmapper/LoggedResources.hxx
+++ /dev/null
@@ -1,138 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * 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 .
- */
-
-#ifndef INCLUDED_WRITERFILTER_SOURCE_DMAPPER_LOGGEDRESOURCES_HXX
-#define INCLUDED_WRITERFILTER_SOURCE_DMAPPER_LOGGEDRESOURCES_HXX
-
-#include <sal/config.h>
-
-#include <string_view>
-
-#include <dmapper/resourcemodel.hxx>
-
-namespace writerfilter
-{
-#ifdef DBG_UTIL
-class LoggedResourcesHelper final
-{
-public:
- explicit LoggedResourcesHelper(const std::string& sPrefix);
- ~LoggedResourcesHelper();
-
- void startElement(const std::string& sElement);
- static void endElement();
- static void chars(std::u16string_view rChars);
- static void chars(const std::string& rChars);
- static void attribute(const std::string& rName, const std::string& rValue);
- static void attribute(const std::string& rName, sal_uInt32 nValue);
-
-private:
- std::string msPrefix;
-};
-#endif
-
-class LoggedStream : public Stream
-{
-public:
- explicit LoggedStream(const std::string& sPrefix);
- virtual ~LoggedStream() override;
-
- void startSectionGroup() override;
- void endSectionGroup() override;
- void startParagraphGroup() override;
- void endParagraphGroup() override;
- void startCharacterGroup() override;
- void endCharacterGroup() override;
- void startShape(css::uno::Reference<css::drawing::XShape> const& xShape) override;
- void endShape() override;
- void text(const sal_uInt8* data, size_t len) override;
- void utext(const sal_uInt8* data, size_t len) override;
- void positionOffset(const OUString& rText, bool bVertical) override;
- void align(const OUString& rText, bool bVertical) override;
- void positivePercentage(const OUString& rText) override;
- void props(writerfilter::Reference<Properties>::Pointer_t ref) override;
- void table(Id name, writerfilter::Reference<Table>::Pointer_t ref) override;
- void substream(Id name, writerfilter::Reference<Stream>::Pointer_t ref) override;
- void info(const std::string& info) override;
- void startGlossaryEntry() override;
- void endGlossaryEntry() override;
-
-protected:
- virtual void lcl_startSectionGroup() = 0;
- virtual void lcl_endSectionGroup() = 0;
- virtual void lcl_startParagraphGroup() = 0;
- virtual void lcl_endParagraphGroup() = 0;
- virtual void lcl_startCharacterGroup() = 0;
- virtual void lcl_endCharacterGroup() = 0;
- virtual void lcl_startShape(css::uno::Reference<css::drawing::XShape> const& xShape) = 0;
- virtual void lcl_endShape() = 0;
- virtual void lcl_text(const sal_uInt8* data, size_t len) = 0;
- virtual void lcl_utext(const sal_uInt8* data, size_t len) = 0;
- virtual void lcl_positionOffset(const OUString& /*rText*/, bool /*bVertical*/) {}
- virtual css::awt::Point getPositionOffset() override { return css::awt::Point(); }
- virtual void lcl_align(const OUString& /*rText*/, bool /*bVertical*/) {}
- virtual void lcl_positivePercentage(const OUString& /*rText*/) {}
- virtual void lcl_props(writerfilter::Reference<Properties>::Pointer_t ref) = 0;
- virtual void lcl_table(Id name, writerfilter::Reference<Table>::Pointer_t ref) = 0;
- virtual void lcl_substream(Id name, writerfilter::Reference<Stream>::Pointer_t ref) = 0;
- virtual void lcl_startGlossaryEntry() {}
- virtual void lcl_endGlossaryEntry() {}
-
-#ifdef DBG_UTIL
- LoggedResourcesHelper mHelper;
-#endif
-};
-
-class LoggedProperties : public Properties
-{
-public:
- explicit LoggedProperties(const std::string& sPrefix);
- virtual ~LoggedProperties() override;
-
- void attribute(Id name, Value& val) override;
- void sprm(Sprm& sprm) override;
-
-protected:
- virtual void lcl_attribute(Id name, Value& val) = 0;
- virtual void lcl_sprm(Sprm& sprm) = 0;
-
-#ifdef DBG_UTIL
- LoggedResourcesHelper mHelper;
-#endif
-};
-
-class LoggedTable : public Table
-{
-public:
- explicit LoggedTable(const std::string& sPrefix);
- virtual ~LoggedTable() override;
-
- void entry(int pos, writerfilter::Reference<Properties>::Pointer_t ref) override;
-
-protected:
- virtual void lcl_entry(writerfilter::Reference<Properties>::Pointer_t ref) = 0;
-
-#ifdef DBG_UTIL
- LoggedResourcesHelper mHelper;
-#endif
-};
-}
-#endif // INCLUDED_WRITERFILTER_SOURCE_DMAPPER_LOGGEDRESOURCES_HXX
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/MeasureHandler.cxx b/writerfilter/source/dmapper/MeasureHandler.cxx
deleted file mode 100644
index 5eea9a5c613b..000000000000
--- a/writerfilter/source/dmapper/MeasureHandler.cxx
+++ /dev/null
@@ -1,136 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * 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 .
- */
-#include "MeasureHandler.hxx"
-#include "ConversionHelper.hxx"
-#include <ooxml/resourceids.hxx>
-#include <osl/diagnose.h>
-#include <com/sun/star/text/SizeType.hpp>
-#include <comphelper/sequence.hxx>
-
-namespace writerfilter::dmapper {
-
-using namespace ::com::sun::star;
-
-
-MeasureHandler::MeasureHandler() :
-LoggedProperties("MeasureHandler"),
-m_nMeasureValue( 0 ),
-m_nUnit( -1 ),
-m_nRowHeightSizeType( text::SizeType::MIN )
-{
-}
-
-
-MeasureHandler::~MeasureHandler()
-{
-}
-
-
-void MeasureHandler::lcl_attribute(Id rName, Value & rVal)
-{
- sal_Int32 nIntValue = rVal.getInt();
- switch( rName )
- {
- case NS_ooxml::LN_CT_TblWidth_type:
- {
- //can be: NS_ooxml::LN_Value_ST_TblWidth_nil, NS_ooxml::LN_Value_ST_TblWidth_pct,
- // NS_ooxml::LN_Value_ST_TblWidth_dxa, NS_ooxml::LN_Value_ST_TblWidth_auto;
- m_nUnit = nIntValue;
-
- if (!m_aInteropGrabBagName.isEmpty())
- {
- beans::PropertyValue aValue;
- aValue.Name = "type";
- switch (nIntValue)
- {
- case NS_ooxml::LN_Value_ST_TblWidth_nil: aValue.Value <<= OUString("nil"); break;
- case NS_ooxml::LN_Value_ST_TblWidth_pct: aValue.Value <<= OUString("pct"); break;
- case NS_ooxml::LN_Value_ST_TblWidth_dxa: aValue.Value <<= OUString("dxa"); break;
- case NS_ooxml::LN_Value_ST_TblWidth_auto: aValue.Value <<= OUString("auto"); break;
- }
- m_aInteropGrabBag.push_back(aValue);
- }
- }
- break;
- case NS_ooxml::LN_CT_Height_hRule:
- {
- OUString sHeightType = rVal.getString();
- if ( sHeightType == "exact" )
- m_nRowHeightSizeType = text::SizeType::FIX;
- }
- break;
- case NS_ooxml::LN_CT_TblWidth_w:
- m_nMeasureValue = nIntValue;
- if (!m_aInteropGrabBagName.isEmpty())
- {
- beans::PropertyValue aValue;
- aValue.Name = "w";
- aValue.Value <<= nIntValue;
- m_aInteropGrabBag.push_back(aValue);
- }
- break;
- case NS_ooxml::LN_CT_Height_val: // a string value
- {
- m_nUnit = NS_ooxml::LN_Value_ST_TblWidth_dxa;
- OUString sHeight = rVal.getString();
- m_nMeasureValue = sHeight.toInt32();
- }
- break;
- default:
- OSL_FAIL( "unknown attribute");
- }
-}
-
-
-void MeasureHandler::lcl_sprm(Sprm &) {}
-
-
-sal_Int32 MeasureHandler::getMeasureValue() const
-{
- sal_Int32 nRet = 0;
- if( m_nMeasureValue != 0 && m_nUnit >= 0 )
- {
- // TODO m_nUnit 3 - twip, other values unknown :-(
- if( m_nUnit == 3 || sal::static_int_cast<Id>(m_nUnit) == NS_ooxml::LN_Value_ST_TblWidth_dxa)
- {
- nRet = ConversionHelper::convertTwipToMM100( m_nMeasureValue );
- }
- //todo: handle additional width types:
- //NS_ooxml::LN_Value_ST_TblWidth_nil, NS_ooxml::LN_Value_ST_TblWidth_pct,
- //NS_ooxml::LN_Value_ST_TblWidth_dxa, NS_ooxml::LN_Value_ST_TblWidth_auto;
- }
- return nRet;
-}
-
-void MeasureHandler::enableInteropGrabBag(const OUString& aName)
-{
- m_aInteropGrabBagName = aName;
-}
-
-beans::PropertyValue MeasureHandler::getInteropGrabBag()
-{
- beans::PropertyValue aRet;
- aRet.Name = m_aInteropGrabBagName;
- aRet.Value <<= comphelper::containerToSequence(m_aInteropGrabBag);
- return aRet;
-}
-
-} //namespace writerfilter::dmapper
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/MeasureHandler.hxx b/writerfilter/source/dmapper/MeasureHandler.hxx
deleted file mode 100644
index 3b70987d5345..000000000000
--- a/writerfilter/source/dmapper/MeasureHandler.hxx
+++ /dev/null
@@ -1,63 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * 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 .
- */
-#ifndef INCLUDED_WRITERFILTER_SOURCE_DMAPPER_MEASUREHANDLER_HXX
-#define INCLUDED_WRITERFILTER_SOURCE_DMAPPER_MEASUREHANDLER_HXX
-
-#include "LoggedResources.hxx"
-#include <vector>
-#include <com/sun/star/beans/PropertyValue.hpp>
-
-namespace writerfilter::dmapper
-{
-/** Handler for sprms that contain a measure and a unit
- - Left indent of tables
- - Preferred width of tables
- */
-class MeasureHandler : public LoggedProperties
-{
- sal_Int32 m_nMeasureValue;
- sal_Int32 m_nUnit;
- sal_Int16 m_nRowHeightSizeType; //table row height type
-
- OUString m_aInteropGrabBagName;
- std::vector<css::beans::PropertyValue> m_aInteropGrabBag;
-
- // Properties
- virtual void lcl_attribute(Id Name, Value& val) override;
- virtual void lcl_sprm(Sprm& sprm) override;
-
-public:
- MeasureHandler();
- virtual ~MeasureHandler() override;
-
- sal_Int32 getMeasureValue() const;
-
- sal_Int32 getValue() const { return m_nMeasureValue; }
- sal_Int32 getUnit() const { return m_nUnit; }
-
- sal_Int16 GetRowHeightSizeType() const { return m_nRowHeightSizeType; }
- void enableInteropGrabBag(const OUString& aName);
- css::beans::PropertyValue getInteropGrabBag();
-};
-typedef tools::SvRef<MeasureHandler> MeasureHandlerPtr;
-}
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/ModelEventListener.cxx b/writerfilter/source/dmapper/ModelEventListener.cxx
deleted file mode 100644
index 8e20f7ad90e5..000000000000
--- a/writerfilter/source/dmapper/ModelEventListener.cxx
+++ /dev/null
@@ -1,117 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * 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 .
- */
-#include "ModelEventListener.hxx"
-#include "PropertyIds.hxx"
-#include <rtl/ustring.hxx>
-#include <com/sun/star/document/XEventBroadcaster.hpp>
-#include <com/sun/star/text/XTextFieldsSupplier.hpp>
-#include <com/sun/star/util/XRefreshable.hpp>
-#include <com/sun/star/beans/XPropertySet.hpp>
-#include <com/sun/star/text/ReferenceFieldPart.hpp>
-#include <com/sun/star/text/ReferenceFieldSource.hpp>
-#include <com/sun/star/frame/XModel.hpp>
-#include <com/sun/star/view/XFormLayerAccess.hpp>
-#include <tools/diagnose_ex.h>
-
-namespace writerfilter::dmapper {
-
-using namespace ::com::sun::star;
-
-
-ModelEventListener::ModelEventListener(bool bIndexes, bool bControls)
- : m_bIndexes(bIndexes),
- m_bControls(bControls)
-{
-}
-
-
-ModelEventListener::~ModelEventListener()
-{
-}
-
-
-void ModelEventListener::notifyEvent( const document::EventObject& rEvent )
-{
- if ( rEvent.EventName == "OnFocus" && m_bIndexes)
- {
- try
- {
- //remove listener
- uno::Reference<document::XEventBroadcaster>(rEvent.Source, uno::UNO_QUERY_THROW )->removeEventListener(
- uno::Reference<document::XEventListener>(this));
-
- // If we have PAGEREF fields, update fields as well.
- uno::Reference<text::XTextFieldsSupplier> xTextFieldsSupplier(rEvent.Source, uno::UNO_QUERY);
- uno::Reference<container::XEnumeration> xEnumeration = xTextFieldsSupplier->getTextFields()->createEnumeration();
- sal_Int32 nIndex = 0;
- while(xEnumeration->hasMoreElements())
- {
- try
- {
- uno::Reference<beans::XPropertySet> xPropertySet(xEnumeration->nextElement(), uno::UNO_QUERY);
- sal_Int16 nSource = 0;
- xPropertySet->getPropertyValue(getPropertyName(PROP_REFERENCE_FIELD_SOURCE)) >>= nSource;
- sal_Int16 nPart = 0;
- xPropertySet->getPropertyValue(getPropertyName(PROP_REFERENCE_FIELD_PART)) >>= nPart;
- if (nSource == text::ReferenceFieldSource::BOOKMARK && nPart == text::ReferenceFieldPart::PAGE)
- ++nIndex;
- }
- catch( const beans::UnknownPropertyException& )
- {
- // doesn't even have such a property? ignore
- }
- }
- if (nIndex)
- {
- uno::Reference<util::XRefreshable> xRefreshable(xTextFieldsSupplier->getTextFields(), uno::UNO_QUERY);
- xRefreshable->refresh();
- }
- }
- catch( const uno::Exception& )
- {
- DBG_UNHANDLED_EXCEPTION("writerfilter", "exception while updating indexes");
- }
- }
-
- if ( rEvent.EventName == "OnFocus" && m_bControls)
- {
-
- // Form design mode is enabled by default in Writer, not in Word.
- uno::Reference<frame::XModel> xModel(rEvent.Source, uno::UNO_QUERY);
- uno::Reference<view::XFormLayerAccess> xFormLayerAccess(xModel->getCurrentController(), uno::UNO_QUERY);
- xFormLayerAccess->setFormDesignMode(false);
- }
-}
-
-
-void ModelEventListener::disposing( const lang::EventObject& rEvent )
-{
- try
- {
- uno::Reference<document::XEventBroadcaster>(rEvent.Source, uno::UNO_QUERY_THROW )->removeEventListener(
- uno::Reference<document::XEventListener>(this));
- }
- catch( const uno::Exception& )
- {
- }
-}
-
-} //namespace writerfilter::dmapper
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/ModelEventListener.hxx b/writerfilter/source/dmapper/ModelEventListener.hxx
deleted file mode 100644
index 7080674ff27c..000000000000
--- a/writerfilter/source/dmapper/ModelEventListener.hxx
+++ /dev/null
@@ -1,42 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * 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 .
- */
-#ifndef INCLUDED_WRITERFILTER_SOURCE_DMAPPER_MODELEVENTLISTENER_HXX
-#define INCLUDED_WRITERFILTER_SOURCE_DMAPPER_MODELEVENTLISTENER_HXX
-
-#include <com/sun/star/document/XEventListener.hpp>
-#include <cppuhelper/implbase.hxx>
-
-namespace writerfilter::dmapper
-{
-class ModelEventListener : public cppu::WeakImplHelper<css::document::XEventListener>
-{
- bool m_bIndexes;
- bool m_bControls;
-
-public:
- ModelEventListener(bool bIndexes, bool bControls);
- virtual ~ModelEventListener() override;
-
- virtual void SAL_CALL notifyEvent(const css::document::EventObject& Event) override;
- virtual void SAL_CALL disposing(const css::lang::EventObject& Source) override;
-};
-} //namespace writerfilter::dmapper
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/NumberingManager.cxx b/writerfilter/source/dmapper/NumberingManager.cxx
deleted file mode 100644
index ec86b041e216..000000000000
--- a/writerfilter/source/dmapper/NumberingManager.cxx
+++ /dev/null
@@ -1,1174 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * 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 .
- */
-
-#include <sal/config.h>
-
-#include "ConversionHelper.hxx"
-#include "NumberingManager.hxx"
-#include "StyleSheetTable.hxx"
-#include "PropertyIds.hxx"
-
-#include <ooxml/resourceids.hxx>
-
-#include <com/sun/star/lang/XMultiServiceFactory.hpp>
-#include <com/sun/star/container/XNameContainer.hpp>
-#include <com/sun/star/style/XStyleFamiliesSupplier.hpp>
-#include <com/sun/star/style/NumberingType.hpp>
-#include <com/sun/star/text/HoriOrientation.hpp>
-#include <com/sun/star/text/PositionAndSpaceMode.hpp>
-#include <com/sun/star/text/XChapterNumberingSupplier.hpp>
-#include <com/sun/star/graphic/XGraphic.hpp>
-#include <com/sun/star/awt/XBitmap.hpp>
-
-#include <osl/diagnose.h>
-#include <rtl/ustring.hxx>
-#include <sal/log.hxx>
-#include <tools/diagnose_ex.h>
-#include <tools/UnitConversion.hxx>
-#include <comphelper/sequence.hxx>
-#include <comphelper/propertyvalue.hxx>
-#include <comphelper/string.hxx>
-
-using namespace com::sun::star;
-
-namespace writerfilter::dmapper {
-
-//--------------------------------------------------- Utility functions
-template <typename T>
-static beans::PropertyValue lcl_makePropVal(PropertyIds nNameID, T const & aValue)
-{
- return {getPropertyName(nNameID), 0, uno::makeAny(aValue), beans::PropertyState_DIRECT_VALUE};
-}
-
-static sal_Int32 lcl_findProperty( const uno::Sequence< beans::PropertyValue >& aProps, std::u16string_view sName )
-{
- sal_Int32 i = 0;
- sal_Int32 nLen = aProps.getLength( );
- sal_Int32 nPos = -1;
-
- while ( nPos == -1 && i < nLen )
- {
- if ( aProps[i].Name == sName )
- nPos = i;
- else
- i++;
- }
-
- return nPos;
-}
-
-static void lcl_mergeProperties( const uno::Sequence< beans::PropertyValue >& aSrc,
- uno::Sequence< beans::PropertyValue >& aDst )
-{
- for ( const auto& rProp : aSrc )
- {
- // Look for the same property in aDst
- sal_Int32 nPos = lcl_findProperty( aDst, rProp.Name );
- if ( nPos >= 0 )
- {
- // Replace the property value by the one in aSrc
- aDst[nPos] = rProp;
- }
- else
- {
- // Simply add the new value
- aDst.realloc( aDst.getLength( ) + 1 );
- aDst[ aDst.getLength( ) - 1 ] = rProp;
- }
- }
-}
-
-//-------------------------------------------- ListLevel implementation
-void ListLevel::SetValue( Id nId, sal_Int32 nValue )
-{
- switch( nId )
- {
- case NS_ooxml::LN_CT_Lvl_start:
- m_nIStartAt = nValue;
- break;
- case NS_ooxml::LN_CT_NumLvl_startOverride:
- m_nStartOverride = nValue;
- break;
- case NS_ooxml::LN_CT_NumFmt_val:
- m_nNFC = nValue;
- break;
- case NS_ooxml::LN_CT_Lvl_isLgl:
- break;
- case NS_ooxml::LN_CT_Lvl_legacy:
- break;
- case NS_ooxml::LN_CT_Lvl_suff:
- m_nXChFollow = nValue;
- break;
- case NS_ooxml::LN_CT_TabStop_pos:
- if (nValue < 0)
- {
- SAL_INFO("writerfilter",
- "unsupported list tab stop position " << nValue);
- }
- else
- m_nTabstop = nValue;
- break;
- default:
- OSL_FAIL( "this line should never be reached");
- }
- m_bHasValues = true;
-}
-
-void ListLevel::SetCustomNumberFormat(const OUString& rValue) { m_aCustomNumberFormat = rValue; }
-
-bool ListLevel::HasValues() const
-{
- return m_bHasValues;
-}
-
-void ListLevel::SetParaStyle( const tools::SvRef< StyleSheetEntry >& pStyle )
-{
- if (!pStyle)
- return;
- m_pParaStyle = pStyle;
- // AFAICT .docx spec does not identify which numberings or paragraph
- // styles are actually the ones to be used for outlines (chapter numbering),
- // it only kind of says somewhere that they should be named Heading1 to Heading9.
- const OUString styleId= pStyle->sConvertedStyleName;
- m_outline = ( styleId.getLength() == RTL_CONSTASCII_LENGTH( "Heading 1" )
- && styleId.match( "Heading ", 0 )
- && styleId[ RTL_CONSTASCII_LENGTH( "Heading " ) ] >= '1'
- && styleId[ RTL_CONSTASCII_LENGTH( "Heading " ) ] <= '9' );
-}
-
-uno::Sequence<beans::PropertyValue> ListLevel::GetProperties(bool bDefaults)
-{
- uno::Sequence<beans::PropertyValue> aLevelProps = GetLevelProperties(bDefaults);
- if (m_pParaStyle)
- AddParaProperties( &aLevelProps );
- return aLevelProps;
-}
-
-static bool IgnoreForCharStyle(std::u16string_view aStr, const bool bIsSymbol)
-{
- //Names found in PropertyIds.cxx, Lines 56-396
- return (aStr==u"Adjust" || aStr==u"IndentAt" || aStr==u"FirstLineIndent"
- || aStr==u"FirstLineOffset" || aStr==u"LeftMargin"
- || aStr==u"CharInteropGrabBag" || aStr==u"ParaInteropGrabBag" ||
- // We need font names when they are different for the bullet and for the text.
- // But leave symbols alone, we only want to keep the font style for letters and numbers.
- (bIsSymbol && aStr==u"CharFontName")
- );
-}
-uno::Sequence< beans::PropertyValue > ListLevel::GetCharStyleProperties( )
-{
- PropertyValueVector_t rProperties;
-
- uno::Sequence< beans::PropertyValue > vPropVals = PropertyMap::GetPropertyValues();
- beans::PropertyValue* aValIter = vPropVals.begin();
- beans::PropertyValue* aEndIter = vPropVals.end();
- const bool bIsSymbol(m_sBulletChar.getLength() <= 1);
- for( ; aValIter != aEndIter; ++aValIter )
- if (! IgnoreForCharStyle(aValIter->Name, bIsSymbol))
- rProperties.emplace_back(aValIter->Name, 0, aValIter->Value, beans::PropertyState_DIRECT_VALUE);
-
- return comphelper::containerToSequence(rProperties);
-}
-
-uno::Sequence<beans::PropertyValue> ListLevel::GetLevelProperties(bool bDefaults)
-{
- std::vector<beans::PropertyValue> aNumberingProperties;
-
- if (m_nIStartAt >= 0)
- aNumberingProperties.push_back(lcl_makePropVal<sal_Int16>(PROP_START_WITH, m_nIStartAt) );
- else if (bDefaults)
- aNumberingProperties.push_back(lcl_makePropVal<sal_Int16>(PROP_START_WITH, 0));
-
- sal_Int16 nNumberFormat = -1;
- if (m_nNFC == NS_ooxml::LN_Value_ST_NumberFormat_custom)
- {
- nNumberFormat = ConversionHelper::ConvertCustomNumberFormat(m_aCustomNumberFormat);
- }
- else
- {
- nNumberFormat = ConversionHelper::ConvertNumberingType(m_nNFC);
- }
- if( m_nNFC >= 0)
- {
- if (m_xGraphicBitmap.is())
- nNumberFormat = style::NumberingType::BITMAP;
- aNumberingProperties.push_back(lcl_makePropVal(PROP_NUMBERING_TYPE, nNumberFormat));
- }
-
- // todo: this is not the bullet char
- if( nNumberFormat == style::NumberingType::CHAR_SPECIAL )
- {
- if (!m_sBulletChar.isEmpty())
- {
- aNumberingProperties.push_back(lcl_makePropVal(PROP_BULLET_CHAR, m_sBulletChar.copy(0, 1)));
- }
- else
- {
- // If w:lvlText's value is null - set bullet char to zero.
- aNumberingProperties.push_back(lcl_makePropVal<sal_Unicode>(PROP_BULLET_CHAR, 0));
- }
- }
- if (m_xGraphicBitmap.is())
- {
- aNumberingProperties.push_back(lcl_makePropVal(PROP_GRAPHIC_BITMAP, m_xGraphicBitmap));
- aNumberingProperties.push_back(lcl_makePropVal(PROP_GRAPHIC_SIZE, m_aGraphicSize));
- }
-
- if (m_nTabstop.has_value())
- aNumberingProperties.push_back(lcl_makePropVal(PROP_LISTTAB_STOP_POSITION, *m_nTabstop));
- else if (bDefaults)
- aNumberingProperties.push_back(lcl_makePropVal<sal_Int16>(PROP_LISTTAB_STOP_POSITION, 0));
-
- //TODO: handling of nFLegal?
- //TODO: nFNoRestart lower levels do not restart when higher levels are incremented, like:
- //1.
- //1.1
- //2.2
- //2.3
- //3.4
-
-// TODO: sRGBXchNums; array of inherited numbers
-
-// nXChFollow; following character 0 - tab, 1 - space, 2 - nothing
- if (bDefaults || m_nXChFollow != SvxNumberFormat::LISTTAB)
- aNumberingProperties.push_back(lcl_makePropVal(PROP_LEVEL_FOLLOW, m_nXChFollow));
-
- PropertyIds const aReadIds[] =
- {
- PROP_ADJUST, PROP_INDENT_AT, PROP_FIRST_LINE_INDENT,
- PROP_FIRST_LINE_OFFSET, PROP_LEFT_MARGIN
- };
- for(PropertyIds const & rReadId : aReadIds) {
- std::optional<PropertyMap::Property> aProp = getProperty(rReadId);
- if (aProp)
- aNumberingProperties.emplace_back( getPropertyName(aProp->first), 0, aProp->second, beans::PropertyState_DIRECT_VALUE );
- else if (rReadId == PROP_FIRST_LINE_INDENT && bDefaults)
- // Writer default is -360 twips, Word default seems to be 0.
- aNumberingProperties.emplace_back("FirstLineIndent", 0, uno::makeAny(static_cast<sal_Int32>(0)), beans::PropertyState_DIRECT_VALUE);
- else if (rReadId == PROP_INDENT_AT && bDefaults)
- // Writer default is 720 twips, Word default seems to be 0.
- aNumberingProperties.emplace_back("IndentAt", 0,
- uno::makeAny(static_cast<sal_Int32>(0)),
- beans::PropertyState_DIRECT_VALUE);
- }
-
- std::optional<PropertyMap::Property> aPropFont = getProperty(PROP_CHAR_FONT_NAME);
- if(aPropFont && !isOutlineNumbering())
- aNumberingProperties.emplace_back( getPropertyName(PROP_BULLET_FONT_NAME), 0, aPropFont->second, beans::PropertyState_DIRECT_VALUE );
-
- return comphelper::containerToSequence(aNumberingProperties);
-}
-
-// Add the properties only if they do not already exist in the sequence.
-void ListLevel::AddParaProperties( uno::Sequence< beans::PropertyValue >* props )
-{
- uno::Sequence< beans::PropertyValue >& aProps = *props;
-
- OUString sFirstLineIndent = getPropertyName(
- PROP_FIRST_LINE_INDENT );
- OUString sIndentAt = getPropertyName(
- PROP_INDENT_AT );
-
- bool hasFirstLineIndent = lcl_findProperty( aProps, sFirstLineIndent );
- bool hasIndentAt = lcl_findProperty( aProps, sIndentAt );
-
- if( hasFirstLineIndent && hasIndentAt )
- return; // has them all, nothing to add
-
- const uno::Sequence< beans::PropertyValue > aParaProps = m_pParaStyle->pProperties->GetPropertyValues( );
-
- // ParaFirstLineIndent -> FirstLineIndent
- // ParaLeftMargin -> IndentAt
-
- OUString sParaIndent = getPropertyName(
- PROP_PARA_FIRST_LINE_INDENT );
- OUString sParaLeftMargin = getPropertyName(
- PROP_PARA_LEFT_MARGIN );
-
- for ( const auto& rParaProp : aParaProps )
- {
- if ( !hasFirstLineIndent && rParaProp.Name == sParaIndent )
- {
- aProps.realloc( aProps.getLength() + 1 );
- aProps[aProps.getLength( ) - 1] = rParaProp;
- aProps[aProps.getLength( ) - 1].Name = sFirstLineIndent;
- }
- else if ( !hasIndentAt && rParaProp.Name == sParaLeftMargin )
- {
- aProps.realloc( aProps.getLength() + 1 );
- aProps[aProps.getLength( ) - 1] = rParaProp;
- aProps[aProps.getLength( ) - 1].Name = sIndentAt;
- }
-
- }
-}
-
-NumPicBullet::NumPicBullet()
- : m_nId(0)
-{
-}
-
-NumPicBullet::~NumPicBullet()
-{
-}
-
-void NumPicBullet::SetId(sal_Int32 nId)
-{
- m_nId = nId;
-}
-
-void NumPicBullet::SetShape(uno::Reference<drawing::XShape> const& xShape)
-{
- m_xShape = xShape;
-}
-
-
-//--------------------------------------- AbstractListDef implementation
-
-AbstractListDef::AbstractListDef( ) :
- m_nId( -1 )
-{
-}
-
-AbstractListDef::~AbstractListDef( )
-{
-}
-
-void AbstractListDef::SetValue( sal_uInt32 nSprmId )
-{
- switch( nSprmId )
- {
- case NS_ooxml::LN_CT_AbstractNum_tmpl:
- break;
- default:
- OSL_FAIL( "this line should never be reached");
- }
-}
-
-ListLevel::Pointer AbstractListDef::GetLevel( sal_uInt16 nLvl )
-{
- ListLevel::Pointer pLevel;
- if ( m_aLevels.size( ) > nLvl )
- pLevel = m_aLevels[ nLvl ];
- return pLevel;
-}
-
-void AbstractListDef::AddLevel( sal_uInt16 nLvl )
-{
- if ( nLvl >= m_aLevels.size() )
- m_aLevels.resize( nLvl+1 );
-
- ListLevel::Pointer pLevel( new ListLevel );
- m_pCurrentLevel = pLevel;
- m_aLevels[nLvl] = pLevel;
-}
-
-uno::Sequence<uno::Sequence<beans::PropertyValue>> AbstractListDef::GetPropertyValues(bool bDefaults)
-{
- uno::Sequence< uno::Sequence< beans::PropertyValue > > result( sal_Int32( m_aLevels.size( ) ) );
- uno::Sequence< beans::PropertyValue >* aResult = result.getArray( );
-
- int nLevels = m_aLevels.size( );
- for ( int i = 0; i < nLevels; i++ )
- {
- if (m_aLevels[i])
- aResult[i] = m_aLevels[i]->GetProperties(bDefaults);
- }
-
- return result;
-}
-
-const OUString& AbstractListDef::MapListId(OUString const& rId)
-{
- if (!m_oListId)
- {
- m_oListId = rId;
- }
- return *m_oListId;
-}
-
-//---------------------------------------------- ListDef implementation
-
-ListDef::ListDef( ) : AbstractListDef( )
-{
- m_nDefaultParentLevels = WW_OUTLINE_MAX + 1;
-}
-
-ListDef::~ListDef( )
-{
-}
-
-OUString ListDef::GetStyleName(sal_Int32 const nId,
- uno::Reference<container::XNameContainer> const& xStyles)
-{
- if (xStyles.is())
- {
- OUString sStyleName = "WWNum" + OUString::number( nId );
-
- while (xStyles->hasByName(sStyleName)) // unique
- {
- sStyleName += "a";
- }
-
- m_StyleName = sStyleName;
- }
- else
- {
-// fails in rtftok test assert(!m_StyleName.isEmpty()); // must be inited first
- }
-
- return m_StyleName;
-}
-
-uno::Sequence<uno::Sequence<beans::PropertyValue>> ListDef::GetMergedPropertyValues()
-{
- if (!m_pAbstractDef)
- return uno::Sequence< uno::Sequence< beans::PropertyValue > >();
-
- // [1] Call the same method on the abstract list
- uno::Sequence<uno::Sequence<beans::PropertyValue>> aAbstract
- = m_pAbstractDef->GetPropertyValues(/*bDefaults=*/true);
-
- // [2] Call the upper class method
- uno::Sequence<uno::Sequence<beans::PropertyValue>> aThis
- = AbstractListDef::GetPropertyValues(/*bDefaults=*/false);
-
- // Merge the results of [2] in [1]
- sal_Int32 nThisCount = aThis.getLength( );
- sal_Int32 nAbstractCount = aAbstract.getLength( );
- for ( sal_Int32 i = 0; i < nThisCount && i < nAbstractCount; i++ )
- {
- uno::Sequence< beans::PropertyValue > level = aThis[i];
- if (level.hasElements() && GetLevel(i)->HasValues())
- {
- // If the element contains something, merge it, but ignore stub overrides.
- lcl_mergeProperties( level, aAbstract[i] );
- }
- }
-
- return aAbstract;
-}
-
-static uno::Reference< container::XNameContainer > lcl_getUnoNumberingStyles(
- uno::Reference<lang::XMultiServiceFactory> const& xFactory)
-{
- uno::Reference< container::XNameContainer > xStyles;
-
- try
- {
- uno::Reference< style::XStyleFamiliesSupplier > xFamilies( xFactory, uno::UNO_QUERY_THROW );
- uno::Any oFamily = xFamilies->getStyleFamilies( )->getByName("NumberingStyles");
-
- oFamily >>= xStyles;
- }
- catch ( const uno::Exception & )
- {
- }
-
- return xStyles;
-}
-
-void ListDef::CreateNumberingRules( DomainMapper& rDMapper,
- uno::Reference<lang::XMultiServiceFactory> const& xFactory)
-{
- // Get the UNO Numbering styles
- uno::Reference< container::XNameContainer > xStyles = lcl_getUnoNumberingStyles( xFactory );
-
- // Do the whole thing
- if( !(!m_xNumRules.is() && xFactory.is() && xStyles.is( )) )
- return;
-
- try
- {
- // Create the numbering style
- uno::Reference< beans::XPropertySet > xStyle (
- xFactory->createInstance("com.sun.star.style.NumberingStyle"),
- uno::UNO_QUERY_THROW );
-
- OUString sStyleName = GetStyleName(GetId(), xStyles);
-
- xStyles->insertByName( sStyleName, makeAny( xStyle ) );
-
- uno::Any oStyle = xStyles->getByName( sStyleName );
- xStyle.set( oStyle, uno::UNO_QUERY_THROW );
-
- // Get the default OOo Numbering style rules
- uno::Any aRules = xStyle->getPropertyValue( getPropertyName( PROP_NUMBERING_RULES ) );
- aRules >>= m_xNumRules;
-
- uno::Sequence<uno::Sequence<beans::PropertyValue>> aProps = GetMergedPropertyValues();
-
- sal_Int32 nAbstLevels = m_pAbstractDef ? m_pAbstractDef->Size() : 0;
- sal_Int32 nLevel = 0;
- while ( nLevel < nAbstLevels )
- {
- ListLevel::Pointer pAbsLevel = m_pAbstractDef->GetLevel( nLevel );
- ListLevel::Pointer pLevel = GetLevel( nLevel );
-
- // Get the merged level properties
- auto aLvlProps = comphelper::sequenceToContainer< std::vector<beans::PropertyValue> >(aProps[nLevel]);
-
- // Get the char style
- auto aAbsCharStyleProps = pAbsLevel
- ? pAbsLevel->GetCharStyleProperties()
- : uno::Sequence<beans::PropertyValue>();
- if ( pLevel )
- {
- uno::Sequence< beans::PropertyValue >& rAbsCharStyleProps = aAbsCharStyleProps;
- uno::Sequence< beans::PropertyValue > aCharStyleProps =
- pLevel->GetCharStyleProperties( );
- uno::Sequence< beans::PropertyValue >& rCharStyleProps = aCharStyleProps;
- lcl_mergeProperties( rAbsCharStyleProps, rCharStyleProps );
- }
-
- if( aAbsCharStyleProps.hasElements() )
- {
- // Change the sequence into a vector
- auto aStyleProps = comphelper::sequenceToContainer<PropertyValueVector_t>(aAbsCharStyleProps);
-
- //create (or find) a character style containing the character
- // attributes of the symbol and apply it to the numbering level
- OUString sStyle = rDMapper.getOrCreateCharStyle( aStyleProps, /*bAlwaysCreate=*/true );
- aLvlProps.push_back(comphelper::makePropertyValue(getPropertyName(PROP_CHAR_STYLE_NAME), sStyle));
- }
-
- // Get the prefix / suffix / Parent numbering
- // and add them to the level properties
- OUString sText = pAbsLevel
- ? pAbsLevel->GetBulletChar()
- : OUString();
- // Inherit <w:lvlText> from the abstract level in case the override would be empty.
- if (pLevel && !pLevel->GetBulletChar().isEmpty())
- sText = pLevel->GetBulletChar( );
-
- aLvlProps.push_back(comphelper::makePropertyValue(getPropertyName(PROP_PREFIX), OUString("")));
- aLvlProps.push_back(comphelper::makePropertyValue(getPropertyName(PROP_SUFFIX), OUString("")));
- aLvlProps.push_back(comphelper::makePropertyValue(getPropertyName(PROP_LIST_FORMAT), sText));
-
- // Total count of replacement holders is determining amount of required parent numbering to include
- // TODO: not sure how "%" symbol is escaped. This is not supported yet
- sal_Int16 nParentNum = comphelper::string::getTokenCount(sText, '%');
- aLvlProps.push_back(comphelper::makePropertyValue(getPropertyName(PROP_PARENT_NUMBERING), nParentNum));
-
- aLvlProps.push_back(comphelper::makePropertyValue(getPropertyName(PROP_POSITION_AND_SPACE_MODE), sal_Int16(text::PositionAndSpaceMode::LABEL_ALIGNMENT)));
-
- // Replace the numbering rules for the level
- m_xNumRules->replaceByIndex(nLevel, uno::makeAny(comphelper::containerToSequence(aLvlProps)));
-
- // Handle the outline level here
- if (pAbsLevel && pAbsLevel->isOutlineNumbering())
- {
- uno::Reference< text::XChapterNumberingSupplier > xOutlines (
- xFactory, uno::UNO_QUERY_THROW );
- uno::Reference< container::XIndexReplace > xOutlineRules =
- xOutlines->getChapterNumberingRules( );
-
- StyleSheetEntryPtr pParaStyle = pAbsLevel->GetParaStyle( );
- aLvlProps.push_back(comphelper::makePropertyValue(getPropertyName(PROP_HEADING_STYLE_NAME), pParaStyle->sConvertedStyleName));
-
- xOutlineRules->replaceByIndex(nLevel, uno::makeAny(comphelper::containerToSequence(aLvlProps)));
- }
-
- if (pAbsLevel)
- {
- // first level without default outline paragraph style
- const tools::SvRef< StyleSheetEntry >& aParaStyle = pAbsLevel->GetParaStyle();
- if ( WW_OUTLINE_MAX + 1 == m_nDefaultParentLevels && ( !aParaStyle ||
- aParaStyle->sConvertedStyleName.getLength() != RTL_CONSTASCII_LENGTH( "Heading 1" ) ||
- !aParaStyle->sConvertedStyleName.startsWith("Heading ") ||
- aParaStyle->sConvertedStyleName[ RTL_CONSTASCII_LENGTH( "Heading " ) ] - u'1' != nLevel ) )
- {
- m_nDefaultParentLevels = nLevel;
- }
- }
-
- nLevel++;
- }
-
- // Create the numbering style for these rules
- OUString sNumRulesName = getPropertyName( PROP_NUMBERING_RULES );
- xStyle->setPropertyValue( sNumRulesName, uno::makeAny( m_xNumRules ) );
- }
- catch( const lang::IllegalArgumentException& )
- {
- TOOLS_WARN_EXCEPTION( "writerfilter", "" );
- assert( !"Incorrect argument to UNO call" );
- }
- catch( const uno::RuntimeException& )
- {
- TOOLS_WARN_EXCEPTION( "writerfilter", "" );
- assert( !"Incorrect argument to UNO call" );
- }
- catch( const uno::Exception& )
- {
- TOOLS_WARN_EXCEPTION( "writerfilter", "" );
- }
-
-}
-
-//------------------------------------- NumberingManager implementation
-
-
-ListsManager::ListsManager(DomainMapper& rDMapper,
- const uno::Reference<lang::XMultiServiceFactory> & xFactory)
- : LoggedProperties("ListsManager")
- , LoggedTable("ListsManager")
- , m_rDMapper(rDMapper)
- , m_xFactory(xFactory)
-{
-}
-
-ListsManager::~ListsManager( )
-{
- DisposeNumPicBullets();
-}
-
-void ListsManager::DisposeNumPicBullets( )
-{
- uno::Reference<drawing::XShape> xShape;
- for (const auto& rNumPicBullet : m_aNumPicBullets)
- {
- xShape = rNumPicBullet->GetShape();
- if (xShape.is())
- {
- uno::Reference<lang::XComponent> xShapeComponent(xShape, uno::UNO_QUERY);
- xShapeComponent->dispose();
- }
- }
-}
-
-void ListsManager::lcl_attribute( Id nName, Value& rVal )
-{
- ListLevel::Pointer pCurrentLvl;
-
- if (nName != NS_ooxml::LN_CT_NumPicBullet_numPicBulletId)
- {
- OSL_ENSURE( m_pCurrentDefinition, "current entry has to be set here");
- if(!m_pCurrentDefinition)
- return ;
- pCurrentLvl = m_pCurrentDefinition->GetCurrentLevel( );
- }
- else
- {
- SAL_WARN_IF(!m_pCurrentNumPicBullet, "writerfilter", "current entry has to be set here");
- if (!m_pCurrentNumPicBullet)
- return;
- }
- int nIntValue = rVal.getInt();
-
-
- switch(nName)
- {
- case NS_ooxml::LN_CT_LevelText_val:
- {
- //this strings contains the definition of the level
- //the level number is marked as %n
- //these numbers can be mixed randomly together with separators pre- and suffixes
- //the Writer supports only a number of upper levels to show, separators is always a dot
- //and each level can have a prefix and a suffix
- if(pCurrentLvl)
- {
- //if the BulletChar is a soft-hyphen (0xad)
- //replace it with a hard-hyphen (0x2d)
- //-> this fixes missing hyphen export in PDF etc.
- // see tdf#101626
- pCurrentLvl->SetBulletChar( rVal.getString().replace( 0xad, 0x2d ) );
- }
- }
- break;
- case NS_ooxml::LN_CT_Lvl_start:
- case NS_ooxml::LN_CT_Lvl_numFmt:
- case NS_ooxml::LN_CT_NumFmt_format:
- case NS_ooxml::LN_CT_NumFmt_val:
- case NS_ooxml::LN_CT_Lvl_isLgl:
- case NS_ooxml::LN_CT_Lvl_legacy:
- if ( pCurrentLvl )
- {
- if (nName == NS_ooxml::LN_CT_NumFmt_format)
- {
- pCurrentLvl->SetCustomNumberFormat(rVal.getString());
- }
- else
- {
- pCurrentLvl->SetValue(nName, sal_Int32(nIntValue));
- }
- }
- break;
- case NS_ooxml::LN_CT_Num_numId:
- m_pCurrentDefinition->SetId( rVal.getString().toInt32( ) );
- break;
- case NS_ooxml::LN_CT_AbstractNum_nsid:
- m_pCurrentDefinition->SetId( nIntValue );
- break;
- case NS_ooxml::LN_CT_AbstractNum_tmpl:
- AbstractListDef::SetValue( nName );
- break;
- case NS_ooxml::LN_CT_NumLvl_ilvl:
- //add a new level to the level vector and make it the current one
- m_pCurrentDefinition->AddLevel(rVal.getString().toUInt32());
- break;
- case NS_ooxml::LN_CT_Lvl_ilvl:
- m_pCurrentDefinition->AddLevel(rVal.getString().toUInt32());
- break;
- case NS_ooxml::LN_CT_AbstractNum_abstractNumId:
- {
- // This one corresponds to the AbstractNum Id definition
- // The reference to the abstract num is in the sprm method
- sal_Int32 nVal = rVal.getString().toInt32();
- m_pCurrentDefinition->SetId( nVal );
- }
- break;
- case NS_ooxml::LN_CT_Ind_start:
- case NS_ooxml::LN_CT_Ind_left:
- if ( pCurrentLvl )
- pCurrentLvl->Insert(
- PROP_INDENT_AT, uno::makeAny( ConversionHelper::convertTwipToMM100( nIntValue ) ));
- break;
- case NS_ooxml::LN_CT_Ind_hanging:
- if ( pCurrentLvl )
- pCurrentLvl->Insert(
- PROP_FIRST_LINE_INDENT, uno::makeAny( - ConversionHelper::convertTwipToMM100( nIntValue ) ));
- break;
- case NS_ooxml::LN_CT_Ind_firstLine:
- if ( pCurrentLvl )
- pCurrentLvl->Insert(
- PROP_FIRST_LINE_INDENT, uno::makeAny( ConversionHelper::convertTwipToMM100( nIntValue ) ));
- break;
- case NS_ooxml::LN_CT_Lvl_tplc: //template code - unsupported
- case NS_ooxml::LN_CT_Lvl_tentative: //marks level as unused in the document - unsupported
- break;
- case NS_ooxml::LN_CT_TabStop_pos:
- {
- //no paragraph attributes in ListTable char style sheets
- if ( pCurrentLvl )
- pCurrentLvl->SetValue( nName,
- ConversionHelper::convertTwipToMM100( nIntValue ) );
- }
- break;
- case NS_ooxml::LN_CT_TabStop_val:
- {
- // TODO Do something of that
- }
- break;
- case NS_ooxml::LN_CT_NumPicBullet_numPicBulletId:
- m_pCurrentNumPicBullet->SetId(rVal.getString().toInt32());
- break;
- default:
- SAL_WARN("writerfilter", "ListsManager::lcl_attribute: unhandled token: " << nName);
- }
-}
-
-void ListsManager::lcl_sprm( Sprm& rSprm )
-{
- //fill the attributes of the style sheet
- sal_uInt32 nSprmId = rSprm.getId();
- if( !(m_pCurrentDefinition ||
- nSprmId == NS_ooxml::LN_CT_Numbering_abstractNum ||
- nSprmId == NS_ooxml::LN_CT_Numbering_num ||
- (nSprmId == NS_ooxml::LN_CT_NumPicBullet_pict && m_pCurrentNumPicBullet) ||
- nSprmId == NS_ooxml::LN_CT_Numbering_numPicBullet))
- return;
-
- static bool bIsStartVisited = false;
- sal_Int32 nIntValue = rSprm.getValue()->getInt();
- switch( nSprmId )
- {
- case NS_ooxml::LN_CT_Numbering_abstractNum:
- {
- writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
- if(pProperties)
- {
- //create a new Abstract list entry
- OSL_ENSURE( !m_pCurrentDefinition, "current entry has to be NULL here");
- m_pCurrentDefinition = new AbstractListDef;
- pProperties->resolve( *this );
- //append it to the table
- m_aAbstractLists.push_back( m_pCurrentDefinition );
- m_pCurrentDefinition = AbstractListDef::Pointer();
- }
- }
- break;
- case NS_ooxml::LN_CT_Numbering_num:
- {
- writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
- if(pProperties)
- {
- // Create a new list entry
- OSL_ENSURE( !m_pCurrentDefinition, "current entry has to be NULL here");
- ListDef::Pointer listDef( new ListDef );
- m_pCurrentDefinition = listDef.get();
- pProperties->resolve( *this );
- //append it to the table
- m_aLists.push_back( listDef );
-
- m_pCurrentDefinition = AbstractListDef::Pointer();
- }
- }
- break;
- case NS_ooxml::LN_CT_Numbering_numPicBullet:
- {
- writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
- if (pProperties)
- {
- NumPicBullet::Pointer numPicBullet(new NumPicBullet());
- m_pCurrentNumPicBullet = numPicBullet;
- pProperties->resolve(*this);
- m_aNumPicBullets.push_back(numPicBullet);
- m_pCurrentNumPicBullet = NumPicBullet::Pointer();
- }
- }
- break;
- case NS_ooxml::LN_CT_NumPicBullet_pict:
- {
- uno::Reference<drawing::XShape> xShape = m_rDMapper.PopPendingShape();
-
- m_pCurrentNumPicBullet->SetShape(xShape);
- }
- break;
- case NS_ooxml::LN_CT_Lvl_lvlPicBulletId:
- if (ListLevel::Pointer pCurrentLevel = m_pCurrentDefinition->GetCurrentLevel())
- {
- uno::Reference<drawing::XShape> xShape;
- for (const auto& rNumPicBullet : m_aNumPicBullets)
- {
- if (rNumPicBullet->GetId() == nIntValue)
- {
- xShape = rNumPicBullet->GetShape();
- break;
- }
- }
- if (xShape.is())
- {
- uno::Reference<beans::XPropertySet> xPropertySet(xShape, uno::UNO_QUERY);
- try
- {
- uno::Any aAny = xPropertySet->getPropertyValue("Graphic");
- if (aAny.has<uno::Reference<graphic::XGraphic>>() && pCurrentLevel)
- {
- auto xGraphic = aAny.get<uno::Reference<graphic::XGraphic>>();
- if (xGraphic.is())
- {
- uno::Reference<awt::XBitmap> xBitmap(xGraphic, uno::UNO_QUERY);
- pCurrentLevel->SetGraphicBitmap(xBitmap);
- }
- }
- }
- catch (const beans::UnknownPropertyException&)
- {}
-
- // Respect only the aspect ratio of the picture, not its size.
- awt::Size aPrefSize = xShape->getSize();
- if ( aPrefSize.Height * aPrefSize.Width != 0 )
- {
- // See SwDefBulletConfig::InitFont(), default height is 14.
- const int nFontHeight = 14;
- // Point -> mm100.
- const int nHeight = nFontHeight * 35;
- int nWidth = (nHeight * aPrefSize.Width) / aPrefSize.Height;
-
- awt::Size aSize( convertMm100ToTwip(nWidth), convertMm100ToTwip(nHeight) );
- pCurrentLevel->SetGraphicSize( aSize );
- }
- else
- {
- awt::Size aSize( convertMm100ToTwip(aPrefSize.Width), convertMm100ToTwip(aPrefSize.Height) );
- pCurrentLevel->SetGraphicSize( aSize );
- }
- }
- }
- break;
- case NS_ooxml::LN_CT_Num_abstractNumId:
- {
- sal_Int32 nAbstractNumId = rSprm.getValue()->getInt();
- ListDef* pListDef = dynamic_cast< ListDef* >( m_pCurrentDefinition.get( ) );
- if ( pListDef != nullptr )
- {
- // The current def should be a ListDef
- pListDef->SetAbstractDefinition(
- GetAbstractList( nAbstractNumId ) );
- }
- }
- break;
- case NS_ooxml::LN_CT_AbstractNum_multiLevelType:
- break;
- case NS_ooxml::LN_CT_AbstractNum_tmpl:
- AbstractListDef::SetValue( nSprmId );
- break;
- case NS_ooxml::LN_CT_AbstractNum_lvl:
- {
- writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
- if(pProperties)
- pProperties->resolve(*this);
- }
- break;
- case NS_ooxml::LN_CT_Lvl_start:
- if (ListLevel::Pointer pCurrentLevel = m_pCurrentDefinition->GetCurrentLevel())
- pCurrentLevel->SetValue( nSprmId, nIntValue );
- bIsStartVisited = true;
- break;
- case NS_ooxml::LN_CT_Lvl_numFmt:
- {
- writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
- if (pProperties)
- {
- pProperties->resolve(*this);
- }
- if (ListLevel::Pointer pCurrentLevel = m_pCurrentDefinition->GetCurrentLevel())
- {
- if( !bIsStartVisited )
- {
- pCurrentLevel->SetValue( NS_ooxml::LN_CT_Lvl_start, 0 );
- bIsStartVisited = true;
- }
- }
- }
- break;
- case NS_ooxml::LN_CT_Lvl_isLgl:
- case NS_ooxml::LN_CT_Lvl_legacy:
- if (ListLevel::Pointer pCurrentLevel = m_pCurrentDefinition->GetCurrentLevel())
- {
- pCurrentLevel->SetValue(nSprmId, nIntValue);
- }
- break;
- case NS_ooxml::LN_CT_Lvl_suff:
- {
- if (ListLevel::Pointer pCurrentLevel = m_pCurrentDefinition->GetCurrentLevel())
- {
- SvxNumberFormat::LabelFollowedBy value = SvxNumberFormat::LISTTAB;
- if( rSprm.getValue()->getString() == "tab" )
- value = SvxNumberFormat::LISTTAB;
- else if( rSprm.getValue()->getString() == "space" )
- value = SvxNumberFormat::SPACE;
- else if( rSprm.getValue()->getString() == "nothing" )
- value = SvxNumberFormat::NOTHING;
- else
- SAL_WARN( "writerfilter", "Unknown ST_LevelSuffix value "
- << rSprm.getValue()->getString());
- pCurrentLevel->SetValue( nSprmId, value );
- }
- }
- break;
- case NS_ooxml::LN_CT_Lvl_lvlText:
- case NS_ooxml::LN_CT_Lvl_rPr : //contains LN_EG_RPrBase_rFonts
- {
- writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
- if(pProperties)
- pProperties->resolve(*this);
- }
- break;
- case NS_ooxml::LN_CT_NumLvl_lvl:
- {
- // overwrite level
- writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
- if(pProperties)
- pProperties->resolve(*this);
- }
- break;
- case NS_ooxml::LN_CT_Lvl_lvlJc:
- {
- sal_Int16 nValue = text::HoriOrientation::NONE;
- switch (nIntValue)
- {
- case NS_ooxml::LN_Value_ST_Jc_left:
- case NS_ooxml::LN_Value_ST_Jc_start:
- nValue = text::HoriOrientation::LEFT;
- break;
- case NS_ooxml::LN_Value_ST_Jc_center:
- nValue = text::HoriOrientation::CENTER;
- break;
- case NS_ooxml::LN_Value_ST_Jc_right:
- case NS_ooxml::LN_Value_ST_Jc_end:
- nValue = text::HoriOrientation::RIGHT;
- break;
- }
-
- if (nValue != text::HoriOrientation::NONE)
- {
- if (ListLevel::Pointer pLevel = m_pCurrentDefinition->GetCurrentLevel())
- {
- pLevel->Insert(
- PROP_ADJUST, uno::makeAny( nValue ) );
- }
- }
- }
- break;
- case NS_ooxml::LN_CT_Lvl_pPr:
- case NS_ooxml::LN_CT_PPrBase_ind:
- {
- //todo: how to handle paragraph properties within numbering levels (except LeftIndent and FirstLineIndent)?
- writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
- if(pProperties)
- pProperties->resolve(*this);
- }
- break;
- case NS_ooxml::LN_CT_PPrBase_tabs:
- case NS_ooxml::LN_CT_Tabs_tab:
- {
- writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
- if(pProperties)
- pProperties->resolve(*this);
- }
- break;
- case NS_ooxml::LN_CT_Lvl_pStyle:
- {
- OUString sStyleName = rSprm.getValue( )->getString( );
- if (ListLevel::Pointer pLevel = m_pCurrentDefinition->GetCurrentLevel())
- {
- StyleSheetTablePtr pStylesTable = m_rDMapper.GetStyleSheetTable( );
- const StyleSheetEntryPtr pStyle = pStylesTable->FindStyleSheetByISTD( sStyleName );
- pLevel->SetParaStyle( pStyle );
- }
- }
- break;
- case NS_ooxml::LN_CT_Num_lvlOverride:
- {
- writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
- if (pProperties)
- pProperties->resolve(*this);
- }
- break;
- case NS_ooxml::LN_CT_NumLvl_startOverride:
- {
- if(m_pCurrentDefinition)
- {
- if (ListLevel::Pointer pCurrentLevel = m_pCurrentDefinition->GetCurrentLevel())
- {
- pCurrentLevel->SetValue(NS_ooxml::LN_CT_NumLvl_startOverride, nIntValue);
- }
- }
- }
- break;
- case NS_ooxml::LN_CT_AbstractNum_numStyleLink:
- {
- OUString sStyleName = rSprm.getValue( )->getString( );
- m_pCurrentDefinition->SetNumStyleLink(sStyleName);
- }
- break;
- case NS_ooxml::LN_CT_AbstractNum_styleLink:
- {
- OUString sStyleName = rSprm.getValue()->getString();
- m_pCurrentDefinition->SetStyleLink(sStyleName);
- }
- break;
- case NS_ooxml::LN_EG_RPrBase_rFonts: //contains font properties
- case NS_ooxml::LN_EG_RPrBase_color:
- case NS_ooxml::LN_EG_RPrBase_u:
- case NS_ooxml::LN_EG_RPrBase_sz:
- case NS_ooxml::LN_EG_RPrBase_lang:
- case NS_ooxml::LN_EG_RPrBase_eastAsianLayout:
- //no break!
- default:
- if (ListLevel::Pointer pCurrentLevel = m_pCurrentDefinition->GetCurrentLevel())
- {
- m_rDMapper.PushListProperties(pCurrentLevel.get());
- m_rDMapper.sprm( rSprm );
- m_rDMapper.PopListProperties();
- }
- }
-}
-
-void ListsManager::lcl_entry(writerfilter::Reference<Properties>::Pointer_t ref )
-{
- if( m_rDMapper.IsOOXMLImport() || m_rDMapper.IsRTFImport() )
- {
- ref->resolve(*this);
- }
- else
- {
- // Create AbstractListDef's
- OSL_ENSURE( !m_pCurrentDefinition, "current entry has to be NULL here");
- m_pCurrentDefinition = new AbstractListDef( );
- ref->resolve(*this);
- //append it to the table
- m_aAbstractLists.push_back( m_pCurrentDefinition );
- m_pCurrentDefinition = AbstractListDef::Pointer();
- }
-}
-
-AbstractListDef::Pointer ListsManager::GetAbstractList( sal_Int32 nId )
-{
- for (const auto& listDef : m_aAbstractLists)
- {
- if (listDef->GetId( ) == nId)
- {
- if (listDef->GetNumStyleLink().getLength() > 0)
- {
- // If the abstract num has a style linked, check the linked style's number id.
- StyleSheetTablePtr pStylesTable = m_rDMapper.GetStyleSheetTable( );
-
- const StyleSheetEntryPtr pStyleSheetEntry =
- pStylesTable->FindStyleSheetByISTD(listDef->GetNumStyleLink() );
-
- const StyleSheetPropertyMap* pStyleSheetProperties =
- dynamic_cast<const StyleSheetPropertyMap*>(pStyleSheetEntry ? pStyleSheetEntry->pProperties.get() : nullptr);
-
- if( pStyleSheetProperties && pStyleSheetProperties->GetListId() >= 0 )
- {
- ListDef::Pointer pList = GetList( pStyleSheetProperties->GetListId() );
- if ( pList!=nullptr )
- return pList->GetAbstractDefinition();
- }
-
- // In stylesheet we did not found anything useful. Try to find base abstractnum having this stylelink
- for (const auto & baseListDef : m_aAbstractLists)
- {
- if (baseListDef->GetStyleLink() == listDef->GetNumStyleLink())
- {
- return baseListDef;
- }
- }
- }
-
- // Standalone abstract list
- return listDef;
- }
- }
-
- return nullptr;
-}
-
-ListDef::Pointer ListsManager::GetList( sal_Int32 nId )
-{
- ListDef::Pointer pList;
-
- int nLen = m_aLists.size( );
- int i = 0;
- while ( !pList && i < nLen )
- {
- if ( m_aLists[i]->GetId( ) == nId )
- pList = m_aLists[i];
- i++;
- }
-
- return pList;
-}
-
-void ListsManager::CreateNumberingRules( )
-{
- // Loop over the definitions
- for ( const auto& rList : m_aLists )
- {
- rList->CreateNumberingRules( m_rDMapper, m_xFactory );
- }
- m_rDMapper.GetStyleSheetTable()->ApplyNumberingStyleNameToParaStyles();
-}
-
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/NumberingManager.hxx b/writerfilter/source/dmapper/NumberingManager.hxx
deleted file mode 100644
index 86c8cfbfd9e1..000000000000
--- a/writerfilter/source/dmapper/NumberingManager.hxx
+++ /dev/null
@@ -1,259 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * 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 .
- */
-
-#ifndef INCLUDED_WRITERFILTER_SOURCE_DMAPPER_NUMBERINGMANAGER_HXX
-#define INCLUDED_WRITERFILTER_SOURCE_DMAPPER_NUMBERINGMANAGER_HXX
-
-#include "PropertyMap.hxx"
-
-#include "DomainMapper.hxx"
-#include "LoggedResources.hxx"
-#include "StyleSheetTable.hxx"
-
-#include <editeng/numitem.hxx>
-
-#include <com/sun/star/container/XIndexReplace.hpp>
-#include <com/sun/star/awt/XBitmap.hpp>
-
-namespace writerfilter::dmapper {
-
-class DomainMapper;
-class StyleSheetEntry;
-
-
-/** Class representing the numbering level properties.
- */
-class ListLevel : public PropertyMap
-{
- sal_Int32 m_nIStartAt; //LN_CT_Lvl_start
- sal_Int32 m_nStartOverride;
- sal_Int32 m_nNFC; //LN_CT_Lvl_numFmt
- /// LN_CT_NumFmt_format, in case m_nNFC is custom.
- OUString m_aCustomNumberFormat;
- sal_Int16 m_nXChFollow; //LN_IXCHFOLLOW
- OUString m_sBulletChar;
- css::awt::Size m_aGraphicSize;
- css::uno::Reference<css::awt::XBitmap> m_xGraphicBitmap;
- std::optional<sal_Int32> m_nTabstop;
- tools::SvRef< StyleSheetEntry > m_pParaStyle;
- bool m_outline;
- bool m_bHasValues = false;
-
-public:
-
- typedef tools::SvRef< ListLevel > Pointer;
-
- ListLevel() :
- m_nIStartAt(-1)
- ,m_nStartOverride(-1)
- ,m_nNFC(-1)
- ,m_nXChFollow(SvxNumberFormat::LISTTAB)
- ,m_outline(false)
- {}
-
- // Setters for the import
- void SetValue( Id nId, sal_Int32 nValue );
- void SetCustomNumberFormat(const OUString& rValue);
- void SetBulletChar( const OUString& sValue ) { m_sBulletChar = sValue; };
- void SetGraphicSize( const css::awt::Size& aValue ) { m_aGraphicSize = aValue; };
-
- void SetGraphicBitmap(css::uno::Reference<css::awt::XBitmap> const& xGraphicBitmap)
- { m_xGraphicBitmap = xGraphicBitmap; }
- void SetParaStyle( const tools::SvRef< StyleSheetEntry >& pStyle );
-
- // Getters
- const OUString& GetBulletChar( ) const { return m_sBulletChar; };
- const tools::SvRef< StyleSheetEntry >& GetParaStyle( ) const { return m_pParaStyle; };
- bool isOutlineNumbering() const { return m_outline; }
- sal_Int32 GetStartOverride() const { return m_nStartOverride; };
- /// Determines if SetValue() was called at least once.
- bool HasValues() const;
-
- // UNO mapping functions
- css::uno::Sequence<css::beans::PropertyValue> GetProperties(bool bDefaults);
-
- css::uno::Sequence<css::beans::PropertyValue> GetCharStyleProperties();
-private:
-
- css::uno::Sequence<css::beans::PropertyValue> GetLevelProperties(bool bDefaults);
-
- void AddParaProperties(css::uno::Sequence<css::beans::PropertyValue>* pProps);
-};
-
-/// Represents a numbering picture bullet: an id and a graphic.
-class NumPicBullet final : public virtual SvRefBase
-{
-public:
- typedef tools::SvRef<NumPicBullet> Pointer;
- NumPicBullet();
- ~NumPicBullet() override;
-
- void SetId(sal_Int32 nId);
- sal_Int32 GetId() const { return m_nId;}
- void SetShape(css::uno::Reference<css::drawing::XShape> const& xShape);
- const css::uno::Reference<css::drawing::XShape>& GetShape() const { return m_xShape; }
-private:
- sal_Int32 m_nId;
- css::uno::Reference<css::drawing::XShape> m_xShape;
-};
-
-class AbstractListDef : public virtual SvRefBase
-{
-private:
- // The ID member reflects either the abstractNumId or the numId
- // depending on the use of the class
- sal_Int32 m_nId;
-
- // Properties of each level. This can also reflect the overridden
- // levels of a numbering.
- ::std::vector< ListLevel::Pointer > m_aLevels;
-
- // Only used during the numbering import
- ListLevel::Pointer m_pCurrentLevel;
-
- // The style name linked to.
- OUString m_sNumStyleLink;
-
- // This abstract numbering is a base definition for this style
- OUString m_sStyleLink;
-
- /// list id to use for all derived numbering definitions
- std::optional<OUString> m_oListId;
-
-public:
- typedef tools::SvRef< AbstractListDef > Pointer;
-
- AbstractListDef( );
- virtual ~AbstractListDef( ) override;
-
- // Setters using during the import
- void SetId( sal_Int32 nId ) { m_nId = nId; };
- static void SetValue( sal_uInt32 nSprmId );
-
- // Accessors
- sal_Int32 GetId( ) const { return m_nId; };
-
- sal_Int16 Size( ) { return sal_Int16( m_aLevels.size( ) ); };
- ListLevel::Pointer GetLevel( sal_uInt16 nLvl );
- void AddLevel( sal_uInt16 nLvl );
-
- const ListLevel::Pointer& GetCurrentLevel( ) const { return m_pCurrentLevel; };
-
- css::uno::Sequence< css::uno::Sequence<css::beans::PropertyValue> > GetPropertyValues(bool bDefaults);
-
- void SetNumStyleLink(const OUString& sValue) { m_sNumStyleLink = sValue; };
- const OUString& GetNumStyleLink() const { return m_sNumStyleLink; };
-
- void SetStyleLink(const OUString& sValue) { m_sStyleLink = sValue; };
- const OUString& GetStyleLink() const { return m_sStyleLink; };
-
- const OUString& MapListId(OUString const& rId);
- bool isOutlineNumbering( sal_uInt16 nLvl ) { return GetLevel(nLvl) && GetLevel(nLvl)->isOutlineNumbering(); }
-};
-
-class ListDef : public AbstractListDef
-{
-private:
- // Pointer to the abstract numbering
- AbstractListDef::Pointer m_pAbstractDef;
-
- // Cache for the UNO numbering rules
- css::uno::Reference< css::container::XIndexReplace > m_xNumRules;
-
- /// mapped list style name
- OUString m_StyleName;
-
- /// not custom outline parent levels
- sal_Int16 m_nDefaultParentLevels;
-
-public:
- typedef tools::SvRef< ListDef > Pointer;
-
- ListDef( );
- virtual ~ListDef( ) override;
-
- // Accessors
- void SetAbstractDefinition( AbstractListDef::Pointer pAbstract ) { m_pAbstractDef = pAbstract; };
- const AbstractListDef::Pointer& GetAbstractDefinition( ) const { return m_pAbstractDef; };
-
- // Mapping functions
- OUString GetStyleName() const { return m_StyleName; };
- OUString GetStyleName(sal_Int32 nId, css::uno::Reference<css::container::XNameContainer> const& xStyles);
-
- sal_Int16 GetDefaultParentLevels() const { return m_nDefaultParentLevels; };
-
- css::uno::Sequence< css::uno::Sequence<css::beans::PropertyValue> > GetMergedPropertyValues();
-
- void CreateNumberingRules(DomainMapper& rDMapper, css::uno::Reference<css::lang::XMultiServiceFactory> const& xFactory);
-
- const css::uno::Reference<css::container::XIndexReplace>& GetNumberingRules() const { return m_xNumRules; }
-
-};
-
-/** This class provides access to the defined numbering styles.
- */
-class ListsManager :
- public LoggedProperties,
- public LoggedTable
-{
-private:
-
- DomainMapper& m_rDMapper;
- css::uno::Reference<css::lang::XMultiServiceFactory> m_xFactory;
-
- // The numbering entries
- std::vector< NumPicBullet::Pointer > m_aNumPicBullets;
- std::vector< AbstractListDef::Pointer > m_aAbstractLists;
- std::vector< ListDef::Pointer > m_aLists;
-
-
- // These members are used for import only
- AbstractListDef::Pointer m_pCurrentDefinition;
- NumPicBullet::Pointer m_pCurrentNumPicBullet;
-
- AbstractListDef::Pointer GetAbstractList( sal_Int32 nId );
-
- // Properties
- virtual void lcl_attribute( Id nName, Value & rVal ) override;
- virtual void lcl_sprm(Sprm & sprm) override;
-
- // Table
- virtual void lcl_entry(writerfilter::Reference<Properties>::Pointer_t ref) override;
-
-public:
-
- ListsManager(DomainMapper& rDMapper, const css::uno::Reference<css::lang::XMultiServiceFactory>& xFactory);
- virtual ~ListsManager() override;
-
- typedef tools::SvRef< ListsManager > Pointer;
-
- ListDef::Pointer GetList( sal_Int32 nId );
-
- // Mapping methods
- void CreateNumberingRules( );
-
- // Dispose the NumPicBullets
- void DisposeNumPicBullets( );
-};
-
-}
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/OLEHandler.cxx b/writerfilter/source/dmapper/OLEHandler.cxx
deleted file mode 100644
index f7cc322d808a..000000000000
--- a/writerfilter/source/dmapper/OLEHandler.cxx
+++ /dev/null
@@ -1,331 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * 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 .
- */
-#include "OLEHandler.hxx"
-#include "DomainMapper.hxx"
-#include "GraphicHelpers.hxx"
-
-#include <oox/ole/oleobjecthelper.hxx>
-#include <ooxml/resourceids.hxx>
-#include <rtl/ustring.hxx>
-#include <sal/log.hxx>
-#include <osl/diagnose.h>
-#include <tools/diagnose_ex.h>
-#include <unotools/mediadescriptor.hxx>
-#include <officecfg/Office/Common.hxx>
-#include <com/sun/star/container/XNameAccess.hpp>
-#include <com/sun/star/document/XEmbeddedObjectResolver.hpp>
-#include <com/sun/star/document/XEmbeddedObjectSupplier.hpp>
-#include <com/sun/star/document/XFilter.hpp>
-#include <com/sun/star/document/XImporter.hpp>
-#include <com/sun/star/drawing/XShape.hpp>
-#include <com/sun/star/graphic/XGraphic.hpp>
-#include <com/sun/star/io/XOutputStream.hpp>
-#include <com/sun/star/lang/XComponent.hpp>
-#include <com/sun/star/lang/XMultiServiceFactory.hpp>
-#include <com/sun/star/lang/XServiceInfo.hpp>
-#include <com/sun/star/text/XTextDocument.hpp>
-#include <com/sun/star/text/WrapTextMode.hpp>
-#include <com/sun/star/uno/XComponentContext.hpp>
-
-namespace writerfilter::dmapper {
-
-using namespace ::com::sun::star;
-
-
-OLEHandler::OLEHandler(DomainMapper& rDomainMapper) :
-LoggedProperties("OLEHandler"),
- m_nWrapMode(text::WrapTextMode_THROUGHT),
- m_rDomainMapper(rDomainMapper)
-{
-}
-
-
-OLEHandler::~OLEHandler()
-{
-}
-
-
-void OLEHandler::lcl_attribute(Id rName, Value & rVal)
-{
- OUString sStringValue = rVal.getString();
- switch( rName )
- {
- case NS_ooxml::LN_CT_OLEObject_Type:
- break;
- case NS_ooxml::LN_CT_OLEObject_ProgID:
- m_sProgId = sStringValue;
- break;
- case NS_ooxml::LN_CT_OLEObject_ShapeID:
- break;
- case NS_ooxml::LN_CT_OLEObject_DrawAspect:
- m_sDrawAspect = sStringValue;
- break;
- case NS_ooxml::LN_CT_OLEObject_ObjectID:
- break;
- case NS_ooxml::LN_CT_OLEObject_r_id:
- break;
- case NS_ooxml::LN_inputstream:
- rVal.getAny() >>= m_xInputStream;
- break;
- case NS_ooxml::LN_CT_Object_dxaOrig:
- m_sVisAreaWidth = sStringValue;
- break;
- case NS_ooxml::LN_CT_Object_dyaOrig:
- m_sVisAreaHeight = sStringValue;
- break;
- case NS_ooxml::LN_shape:
- {
- uno::Reference< drawing::XShape > xTempShape;
- rVal.getAny() >>= xTempShape;
-
- // Control shape is handled on a different code path
- uno::Reference< lang::XServiceInfo > xSInfo( xTempShape, uno::UNO_QUERY_THROW );
- if(xSInfo->supportsService("com.sun.star.drawing.ControlShape"))
- {
- m_rDomainMapper.hasControls(true);
- break;
- }
-
- if( xTempShape.is() )
- {
- m_xShape.set( xTempShape );
-
- // No need to set the wrapping here as it's either set in oox or will be set later
-
- // Shapes in the header or footer should be in the background, since the default is WrapTextMode_THROUGH.
- if (m_rDomainMapper.IsInHeaderFooter())
- {
- try
- {
- uno::Reference<beans::XPropertySet> xShapeProps(m_xShape, uno::UNO_QUERY);
- xShapeProps->setPropertyValue("Opaque", uno::makeAny(false));
- }
- catch( const uno::Exception& )
- {
- TOOLS_WARN_EXCEPTION("writerfilter", "Exception in OLE Handler");
- }
- }
- }
- }
- break;
- default:
- OSL_FAIL( "unknown attribute");
- }
-}
-
-css::awt::Size OLEHandler::getSize() const
-{
- if (!m_xShape)
- return css::awt::Size();
- return m_xShape->getSize();
-}
-
-css::uno::Reference<css::graphic::XGraphic> OLEHandler::getReplacement() const
-{
- if (!m_xShape)
- return nullptr;
- uno::Reference<beans::XPropertySet> xShapeProps(m_xShape, uno::UNO_QUERY);
- css::uno::Reference<css::graphic::XGraphic> xReplacement;
- xShapeProps->getPropertyValue(getPropertyName(PROP_BITMAP)) >>= xReplacement;
- return xReplacement;
-}
-
-void OLEHandler::lcl_sprm(Sprm & rSprm)
-{
- sal_uInt32 nSprmId = rSprm.getId();
- switch( nSprmId )
- {
- case NS_ooxml::LN_OLEObject_OLEObject:
- {
- writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
- if( pProperties )
- {
- pProperties->resolve(*this);
- }
- }
- break;
- case NS_ooxml::LN_wrap_wrap:
- {
- writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
- if ( pProperties )
- {
- tools::SvRef<WrapHandler> pHandler( new WrapHandler );
- pProperties->resolve( *pHandler );
-
- m_nWrapMode = pHandler->getWrapMode( );
-
- try
- {
- uno::Reference< beans::XPropertySet > xShapeProps( m_xShape, uno::UNO_QUERY_THROW );
-
- xShapeProps->setPropertyValue(
- getPropertyName( PROP_SURROUND ),
- uno::makeAny( static_cast<sal_Int32>(m_nWrapMode) ) );
-
- // Through shapes in the header or footer(that spill into the body) should be in the background.
- // It is just assumed that all shapes will spill into the body.
- if( m_rDomainMapper.IsInHeaderFooter() )
- xShapeProps->setPropertyValue("Opaque", uno::makeAny(m_nWrapMode != text::WrapTextMode_THROUGH));
- }
- catch( const uno::Exception& )
- {
- TOOLS_WARN_EXCEPTION("writerfilter", "Exception in OLE Handler");
- }
- }
- }
- break;
- default:
- {
- OSL_FAIL( "unknown attribute");
- }
- }
-}
-
-void OLEHandler::importStream(const uno::Reference<uno::XComponentContext>& xComponentContext, const uno::Reference<text::XTextDocument>& xTextDocument, const uno::Reference<text::XTextContent>& xOLE)
-{
- OUString aFilterService;
- if (m_sProgId == "Word.Document.12")
- aFilterService = "com.sun.star.comp.Writer.WriterFilter";
- else if (m_sProgId == "Excel.Sheet.12")
- aFilterService = "com.sun.star.comp.oox.xls.ExcelFilter";
- else if (m_sProgId == "Equation.3")
- aFilterService = "com.sun.star.comp.Math.MathTypeFilter";
- else
- SAL_WARN("writerfilter", "OLEHandler::importStream: unhandled m_sProgId: " << m_sProgId);
-
- if (!m_xInputStream.is() || aFilterService.isEmpty())
- return;
-
- // Create the filter service.
- uno::Reference<uno::XInterface> xInterface = xComponentContext->getServiceManager()->createInstanceWithContext(aFilterService, xComponentContext);
-
- // Set target document.
- uno::Reference<document::XImporter> xImporter(xInterface, uno::UNO_QUERY);
- uno::Reference<document::XEmbeddedObjectSupplier> xSupplier(xOLE, uno::UNO_QUERY);
- uno::Reference<lang::XComponent> xEmbeddedObject = xSupplier->getEmbeddedObject();
- if (!xEmbeddedObject.is())
- return;
- xImporter->setTargetDocument( xEmbeddedObject );
-
- // Import the input stream.
- utl::MediaDescriptor aMediaDescriptor;
- aMediaDescriptor["InputStream"] <<= m_xInputStream;
- uno::Reference<document::XFilter> xFilter(xInterface, uno::UNO_QUERY);
- xFilter->filter(aMediaDescriptor.getAsConstPropertyValueList());
-
- // Now that the data is imported, update the (typically) changed stream name.
- uno::Reference<beans::XPropertySet> xPropertySet(xOLE, uno::UNO_QUERY);
- ::oox::ole::SaveInteropProperties(xTextDocument,
- xPropertySet->getPropertyValue("StreamName").get<OUString>(), &m_aURL,
- m_sProgId);
-}
-
-OUString OLEHandler::getCLSID(const uno::Reference<uno::XComponentContext>& xComponentContext) const
-{
- OUString aRet;
-
- // See officecfg/registry/data/org/openoffice/Office/Embedding.xcu.
- if (m_sProgId == "Word.Document.12")
- {
- if (officecfg::Office::Common::Filter::Microsoft::Import::WinWordToWriter::get(xComponentContext))
- aRet = "8BC6B165-B1B2-4EDD-aa47-dae2ee689dd6";
- }
- else if (m_sProgId == "Excel.Sheet.12")
- {
- if (officecfg::Office::Common::Filter::Microsoft::Import::ExcelToCalc::get(xComponentContext))
- aRet = "47BBB4CB-CE4C-4E80-A591-42D9AE74950F";
- }
- else if (m_sProgId == "Equation.3")
- {
- if (officecfg::Office::Common::Filter::Microsoft::Import::MathTypeToMath::get(xComponentContext))
- aRet = "078B7ABA-54FC-457F-8551-6147E776A997";
- }
- else
- SAL_WARN("writerfilter", "OLEHandler::getCLSID: unhandled m_sProgId: " << m_sProgId);
-
- return aRet;
-}
-
-OUString const & OLEHandler::GetDrawAspect() const
-{
- return m_sDrawAspect;
-}
-
-OUString const & OLEHandler::GetVisAreaWidth() const
-{
- return m_sVisAreaWidth;
-}
-
-OUString const & OLEHandler::GetVisAreaHeight() const
-{
- return m_sVisAreaHeight;
-}
-
-OUString OLEHandler::copyOLEOStream(
- uno::Reference<text::XTextDocument> const& xTextDocument)
-{
- OUString sRet;
- if( !m_xInputStream.is( ) )
- return sRet;
- try
- {
- uno::Reference < lang::XMultiServiceFactory > xFactory(xTextDocument, uno::UNO_QUERY_THROW);
- uno::Reference< document::XEmbeddedObjectResolver > xEmbeddedResolver(
- xFactory->createInstance("com.sun.star.document.ImportEmbeddedObjectResolver"), uno::UNO_QUERY_THROW );
- //hack to work with the ImportEmbeddedObjectResolver
- static sal_Int32 nObjectCount = 100;
- uno::Reference< container::XNameAccess > xNA( xEmbeddedResolver, uno::UNO_QUERY_THROW );
- OUString aURL = "Obj" + OUString::number( nObjectCount++ );
- uno::Reference < io::XOutputStream > xOLEStream;
- if( (xNA->getByName( aURL ) >>= xOLEStream) && xOLEStream.is() )
- {
- const sal_Int32 nReadRequest = 0x1000;
- uno::Sequence< sal_Int8 > aData;
-
- while( true )
- {
- sal_Int32 nRead = m_xInputStream->readBytes( aData, nReadRequest );
- xOLEStream->writeBytes( aData );
- if( nRead < nReadRequest )
- {
- xOLEStream->closeOutput();
- break;
- }
- }
-
- ::oox::ole::SaveInteropProperties(xTextDocument, aURL, nullptr, m_sProgId);
-
- OUString aPersistName( xEmbeddedResolver->resolveEmbeddedObjectURL( aURL ) );
- sRet = aPersistName.copy( strlen("vnd.sun.star.EmbeddedObject:") );
-
- }
- uno::Reference< lang::XComponent > xComp( xEmbeddedResolver, uno::UNO_QUERY_THROW );
- xComp->dispose();
- m_aURL = aURL;
- }
- catch( const uno::Exception& )
- {
- TOOLS_WARN_EXCEPTION( "writerfilter", "OLEHandler::createOLEObject");
- }
- return sRet;
-}
-
-} //namespace writerfilter::dmapper
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/OLEHandler.hxx b/writerfilter/source/dmapper/OLEHandler.hxx
deleted file mode 100644
index eb04d4782c90..000000000000
--- a/writerfilter/source/dmapper/OLEHandler.hxx
+++ /dev/null
@@ -1,97 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * 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 .
- */
-#ifndef INCLUDED_WRITERFILTER_SOURCE_DMAPPER_OLEHANDLER_HXX
-#define INCLUDED_WRITERFILTER_SOURCE_DMAPPER_OLEHANDLER_HXX
-
-#include "LoggedResources.hxx"
-#include <com/sun/star/awt/Size.hpp>
-#include <com/sun/star/drawing/XShape.hpp>
-#include <com/sun/star/text/WrapTextMode.hpp>
-
-namespace com::sun::star{
- namespace graphic{
- class XGraphic;
- }
- namespace io{
- class XInputStream;
- }
- namespace text{
- class XTextContent;
- class XTextDocument;
- }
- namespace uno {
- class XComponentContext;
- }
-}
-namespace writerfilter::dmapper
-{
-class DomainMapper;
-/** Handler for OLE objects
- */
-class OLEHandler : public LoggedProperties
-{
- OUString m_sProgId;
- OUString m_sDrawAspect;
- OUString m_sVisAreaWidth;
- OUString m_sVisAreaHeight;
- /// The stream URL right after the import of the raw data.
- OUString m_aURL;
-
- css::text::WrapTextMode m_nWrapMode;
-
- css::uno::Reference<css::drawing::XShape> m_xShape;
-
- css::uno::Reference<css::io::XInputStream> m_xInputStream;
- DomainMapper& m_rDomainMapper;
-
- // Properties
- virtual void lcl_attribute(Id Name, Value & val) override;
- virtual void lcl_sprm(Sprm & sprm) override;
-
-public:
- explicit OLEHandler(DomainMapper& rDomainMapper);
- virtual ~OLEHandler() override;
-
- const css::uno::Reference<css::drawing::XShape>& getShape() const { return m_xShape; };
-
- bool isOLEObject() const { return m_xInputStream.is(); }
-
- /// In case of a valid CLSID, import the native data to the previously created empty OLE object.
- void importStream(const css::uno::Reference<css::uno::XComponentContext>& xComponentContext,
- const css::uno::Reference<css::text::XTextDocument>& xTextDocument,
- const css::uno::Reference<css::text::XTextContent>& xOLE);
-
- /// Get the CLSID of the OLE object, in case we can find one based on m_sProgId.
- OUString getCLSID(const css::uno::Reference<css::uno::XComponentContext>& xComponentContext) const;
-
- OUString const & GetDrawAspect() const;
- OUString const & GetVisAreaWidth() const;
- OUString const & GetVisAreaHeight() const;
-
- OUString copyOLEOStream(css::uno::Reference<css::text::XTextDocument> const& xTextDocument);
-
- css::awt::Size getSize() const;
- css::uno::Reference<css::graphic::XGraphic> getReplacement() const;
-
-};
-}
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/PageBordersHandler.cxx b/writerfilter/source/dmapper/PageBordersHandler.cxx
deleted file mode 100644
index d6a0fdd1f502..000000000000
--- a/writerfilter/source/dmapper/PageBordersHandler.cxx
+++ /dev/null
@@ -1,142 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * 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 .
- */
-
-#include "BorderHandler.hxx"
-#include "PageBordersHandler.hxx"
-
-#include <ooxml/resourceids.hxx>
-
-namespace writerfilter::dmapper {
-
-PgBorder::PgBorder( ) :
- m_nDistance( 0 ),
- m_ePos( BORDER_RIGHT ),
- m_bShadow(false)
-{
-}
-
-PageBordersHandler::PageBordersHandler( ) :
-LoggedProperties("PageBordersHandler"),
-m_eBorderApply(SectionPropertyMap::BorderApply::ToAllInSection),
-m_eOffsetFrom(SectionPropertyMap::BorderOffsetFrom::Text)
-{
-}
-
-PageBordersHandler::~PageBordersHandler( )
-{
-}
-
-void PageBordersHandler::lcl_attribute( Id eName, Value& rVal )
-{
- int nIntValue = rVal.getInt( );
- switch ( eName )
- {
- case NS_ooxml::LN_CT_PageBorders_display:
- {
- switch ( nIntValue )
- {
- default:
- case NS_ooxml::LN_Value_doc_ST_PageBorderDisplay_allPages:
- m_eBorderApply = SectionPropertyMap::BorderApply::ToAllInSection;
- break;
- case NS_ooxml::LN_Value_doc_ST_PageBorderDisplay_firstPage:
- m_eBorderApply = SectionPropertyMap::BorderApply::ToFirstPageInSection;
- break;
- case NS_ooxml::LN_Value_doc_ST_PageBorderDisplay_notFirstPage:
- m_eBorderApply = SectionPropertyMap::BorderApply::ToAllButFirstInSection;
- break;
- }
- }
- break;
- case NS_ooxml::LN_CT_PageBorders_offsetFrom:
- {
- switch ( nIntValue )
- {
- default:
- case NS_ooxml::LN_Value_doc_ST_PageBorderOffset_page:
- m_eOffsetFrom = SectionPropertyMap::BorderOffsetFrom::Edge;
- break;
- case NS_ooxml::LN_Value_doc_ST_PageBorderOffset_text:
- m_eOffsetFrom = SectionPropertyMap::BorderOffsetFrom::Text;
- break;
- }
- }
- break;
- default:;
- }
-}
-
-void PageBordersHandler::lcl_sprm( Sprm& rSprm )
-{
- switch ( rSprm.getId( ) )
- {
- case NS_ooxml::LN_CT_PageBorders_top:
- case NS_ooxml::LN_CT_PageBorders_left:
- case NS_ooxml::LN_CT_PageBorders_bottom:
- case NS_ooxml::LN_CT_PageBorders_right:
- {
- writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
- if( pProperties )
- {
- auto pBorderHandler = std::make_shared<BorderHandler>( true );
- pProperties->resolve(*pBorderHandler);
- BorderPosition ePos = BorderPosition( 0 );
- switch( rSprm.getId( ) )
- {
- case NS_ooxml::LN_CT_PageBorders_top:
- ePos = BORDER_TOP;
- break;
- case NS_ooxml::LN_CT_PageBorders_left:
- ePos = BORDER_LEFT;
- break;
- case NS_ooxml::LN_CT_PageBorders_bottom:
- ePos = BORDER_BOTTOM;
- break;
- case NS_ooxml::LN_CT_PageBorders_right:
- ePos = BORDER_RIGHT;
- break;
- default:;
- }
-
- PgBorder aPgBorder;
- aPgBorder.m_rLine = pBorderHandler->getBorderLine( );
- aPgBorder.m_nDistance = pBorderHandler->getLineDistance( );
- aPgBorder.m_ePos = ePos;
- aPgBorder.m_bShadow = pBorderHandler->getShadow();
- m_aBorders.push_back( aPgBorder );
- }
- }
- break;
- default:;
- }
-}
-
-void PageBordersHandler::SetBorders( SectionPropertyMap* pSectContext )
-{
- for (const PgBorder& rBorder : m_aBorders)
- {
- pSectContext->SetBorder( rBorder.m_ePos, rBorder.m_nDistance, rBorder.m_rLine, rBorder.m_bShadow );
- }
- pSectContext->SetBorderApply(m_eBorderApply);
- pSectContext->SetBorderOffsetFrom(m_eOffsetFrom);
-}
-
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/PageBordersHandler.hxx b/writerfilter/source/dmapper/PageBordersHandler.hxx
deleted file mode 100644
index 4b913c09af1d..000000000000
--- a/writerfilter/source/dmapper/PageBordersHandler.hxx
+++ /dev/null
@@ -1,65 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * 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 .
- */
-#ifndef INCLUDED_WRITERFILTER_SOURCE_DMAPPER_PAGEBORDERSHANDLER_HXX
-#define INCLUDED_WRITERFILTER_SOURCE_DMAPPER_PAGEBORDERSHANDLER_HXX
-
-#include "PropertyMap.hxx"
-
-#include "LoggedResources.hxx"
-
-#include <com/sun/star/table/BorderLine2.hpp>
-
-#include <vector>
-
-namespace writerfilter::dmapper
-{
-class PgBorder
-{
-public:
- css::table::BorderLine2 m_rLine;
- sal_Int32 m_nDistance;
- BorderPosition m_ePos;
- bool m_bShadow;
-
- PgBorder();
-};
-
-class PageBordersHandler : public LoggedProperties
-{
-private:
- // See implementation of SectionPropertyMap::ApplyBorderToPageStyles
- SectionPropertyMap::BorderApply m_eBorderApply;
- SectionPropertyMap::BorderOffsetFrom m_eOffsetFrom;
- std::vector<PgBorder> m_aBorders;
-
- // Properties
- virtual void lcl_attribute(Id eName, Value& rVal) override;
- virtual void lcl_sprm(Sprm& rSprm) override;
-
-public:
- PageBordersHandler();
- virtual ~PageBordersHandler() override;
-
- void SetBorders(SectionPropertyMap* pSectContext);
-};
-}
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/PropertyIds.cxx b/writerfilter/source/dmapper/PropertyIds.cxx
deleted file mode 100644
index 3aafab2c9354..000000000000
--- a/writerfilter/source/dmapper/PropertyIds.cxx
+++ /dev/null
@@ -1,377 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * 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 .
- */
-#include <rtl/ustring.hxx>
-#include "PropertyIds.hxx"
-
-namespace writerfilter::dmapper{
-
-OUString getPropertyName( PropertyIds eId )
-{
- OUString sName;
- switch(eId) {
- case PROP_CHAR_WEIGHT: sName = "CharWeight"; break;
- case PROP_CHAR_POSTURE: sName = "CharPosture"; break;
- case PROP_CHAR_STRIKEOUT: sName = "CharStrikeout"; break;
- case PROP_CHAR_CONTOURED: sName = "CharContoured"; break;
- case PROP_CHAR_SHADOWED: sName = "CharShadowed"; break;
- case PROP_CHAR_CASE_MAP: sName = "CharCaseMap"; break;
- case PROP_CHAR_COLOR: sName = "CharColor"; break;
- case PROP_CHAR_RELIEF: sName = "CharRelief"; break;
- case PROP_CHAR_UNDERLINE: sName = "CharUnderline"; break;
- case PROP_CHAR_UNDERLINE_COLOR: sName = "CharUnderlineColor"; break;
- case PROP_CHAR_UNDERLINE_HAS_COLOR: sName = "CharUnderlineHasColor"; break;
- case PROP_CHAR_WORD_MODE: sName = "CharWordMode"; break;
- case PROP_CHAR_ESCAPEMENT : sName = "CharEscapement"; break;
- case PROP_CHAR_ESCAPEMENT_HEIGHT: sName = "CharEscapementHeight"; break;
- case PROP_CHAR_HEIGHT: sName = "CharHeight"; break;
- case PROP_CHAR_HEIGHT_COMPLEX: sName = "CharHeightComplex"; break;
- case PROP_CHAR_LOCALE: sName = "CharLocale"; break;
- case PROP_CHAR_LOCALE_ASIAN: sName = "CharLocaleAsian"; break;
- case PROP_CHAR_LOCALE_COMPLEX: sName = "CharLocaleComplex"; break;
- case PROP_CHAR_WEIGHT_COMPLEX : sName = "CharWeightComplex"; break;
- case PROP_CHAR_POSTURE_COMPLEX: sName = "CharPostureComplex"; break;
- case PROP_CHAR_CHAR_KERNING: sName = "CharKerning"; break;
- case PROP_CHAR_AUTO_KERNING: sName = "CharAutoKerning"; break;
- case PROP_CHAR_SCALE_WIDTH: sName = "CharScaleWidth"; break;
- case PROP_CHAR_STYLE_NAME: sName = "CharStyleName"; break;
- case PROP_CHAR_FONT_NAME: sName = "CharFontName"; break;
- case PROP_CHAR_FONT_CHAR_SET: sName = "CharFontCharSet"; break;
- case PROP_CHAR_FONT_NAME_ASIAN : sName = "CharFontNameAsian"; break;
- case PROP_CHAR_HEIGHT_ASIAN : sName = "CharHeightAsian"; break;
- case PROP_CHAR_FONT_NAME_COMPLEX : sName = "CharFontNameComplex"; break;
- case PROP_CHAR_HIDDEN : sName = "CharHidden"; break;
- case PROP_CHAR_WEIGHT_ASIAN : sName = "CharWeightAsian"; break;
- case PROP_CHAR_POSTURE_ASIAN : sName = "CharPostureAsian"; break;
- case PROP_CHAR_BACK_COLOR: sName = "CharBackColor"; break;
- case PROP_CHAR_EMPHASIS: sName = "CharEmphasis"; break;
- case PROP_CHAR_COMBINE_IS_ON: sName = "CharCombineIsOn"; break;
- case PROP_CHAR_COMBINE_PREFIX: sName = "CharCombinePrefix"; break;
- case PROP_CHAR_COMBINE_SUFFIX: sName = "CharCombineSuffix"; break;
- case PROP_CHAR_ROTATION: sName = "CharRotation"; break;
- case PROP_CHAR_ROTATION_IS_FIT_TO_LINE: sName = "CharRotationIsFitToLine"; break;
- case PROP_CHAR_FLASH: sName = "CharFlash"; break;
- case PROP_CHAR_LEFT_BORDER: sName = "CharLeftBorder";break;
- case PROP_CHAR_RIGHT_BORDER: sName = "CharRightBorder";break;
- case PROP_CHAR_TOP_BORDER: sName = "CharTopBorder";break;
- case PROP_CHAR_BOTTOM_BORDER: sName = "CharBottomBorder";break;
- case PROP_CHAR_LEFT_BORDER_DISTANCE: sName = "CharLeftBorderDistance"; break;
- case PROP_CHAR_RIGHT_BORDER_DISTANCE: sName = "CharRightBorderDistance"; break;
- case PROP_CHAR_TOP_BORDER_DISTANCE: sName = "CharTopBorderDistance";break;
- case PROP_CHAR_BOTTOM_BORDER_DISTANCE: sName = "CharBottomBorderDistance"; break;
- case PROP_CHAR_SHADOW_FORMAT: sName = "CharShadowFormat"; break;
- case PROP_CHAR_HIGHLIGHT: sName = "CharHighlight"; break;
- case PROP_PARA_STYLE_NAME: sName = "ParaStyleName"; break;
- case PROP_PARA_ADJUST: sName = "ParaAdjust"; break;
- case PROP_PARA_VERT_ALIGNMENT: sName = "ParaVertAlignment"; break;
- case PROP_PARA_LAST_LINE_ADJUST: sName = "ParaLastLineAdjust"; break;
- case PROP_PARA_RIGHT_MARGIN : sName = "ParaRightMargin"; break;
- case PROP_PARA_LEFT_MARGIN : sName = "ParaLeftMargin"; break;
- case PROP_PARA_FIRST_LINE_INDENT: sName = "ParaFirstLineIndent"; break;
- case PROP_PARA_KEEP_TOGETHER: sName = "ParaKeepTogether"; break;
- case PROP_PARA_TOP_MARGIN: sName = "ParaTopMargin"; break;
- case PROP_PARA_TOP_MARGIN_BEFORE_AUTO_SPACING: sName = "ParaTopMarginBeforeAutoSpacing"; break;
- case PROP_PARA_BOTTOM_MARGIN_AFTER_AUTO_SPACING: sName = "ParaBottomMarginAfterAutoSpacing"; break;
- case PROP_PARA_CONTEXT_MARGIN: sName = "ParaContextMargin"; break;
- case PROP_PARA_BOTTOM_MARGIN: sName = "ParaBottomMargin"; break;
- case PROP_PARA_IS_HYPHENATION: sName = "ParaIsHyphenation"; break;
- case PROP_PARA_HYPHENATION_NO_CAPS: sName = "ParaHyphenationNoCaps"; break;
- case PROP_PARA_LINE_NUMBER_COUNT: sName = "ParaLineNumberCount"; break;
- case PROP_PARA_IS_HANGING_PUNCTUATION: sName = "ParaIsHangingPunctuation"; break;
- case PROP_PARA_LINE_SPACING: sName = "ParaLineSpacing"; break;
- case PROP_PARA_TAB_STOPS: sName = "ParaTabStops"; break;
- case PROP_PARA_WIDOWS: sName = "ParaWidows"; break;
- case PROP_PARA_ORPHANS: sName = "ParaOrphans"; break;
- case PROP_PARA_LINE_NUMBER_START_VALUE: sName = "ParaLineNumberStartValue"; break;
- case PROP_NUMBERING_LEVEL: sName = "NumberingLevel"; break;
- case PROP_NUMBERING_RULES: sName = "NumberingRules"; break;
- case PROP_NUMBERING_TYPE: sName = "NumberingType"; break;
- case PROP_START_WITH: sName = "StartWith"; break;
- case PROP_ADJUST: sName = "Adjust"; break;
- case PROP_PARENT_NUMBERING: sName = "ParentNumbering"; break;
- case PROP_RIGHT_MARGIN : sName = "RightMargin"; break;
- case PROP_LEFT_MARGIN : sName = "LeftMargin"; break;
- case PROP_TOP_MARGIN : sName = "TopMargin"; break;
- case PROP_BOTTOM_MARGIN : sName = "BottomMargin"; break;
- case PROP_FIRST_LINE_OFFSET: sName = "FirstLineOffset"; break;
- case PROP_LEFT_BORDER : sName = "LeftBorder";break;
- case PROP_RIGHT_BORDER : sName = "RightBorder";break;
- case PROP_TOP_BORDER : sName = "TopBorder";break;
- case PROP_BOTTOM_BORDER : sName = "BottomBorder";break;
- case PROP_TABLE_BORDER : sName = "TableBorder";break;
- case PROP_TABLE_ROW_DELETE : sName = "TableRowDelete"; break;
- case PROP_TABLE_ROW_INSERT : sName = "TableRowInsert"; break;
- case PROP_TABLE_CELL_DELETE : sName = "TableCellDelete"; break;
- case PROP_TABLE_CELL_INSERT : sName = "TableCellInsert"; break;
- case PROP_LEFT_BORDER_DISTANCE : sName = "LeftBorderDistance"; break;
- case PROP_RIGHT_BORDER_DISTANCE : sName = "RightBorderDistance"; break;
- case PROP_TOP_BORDER_DISTANCE : sName = "TopBorderDistance";break;
- case PROP_BOTTOM_BORDER_DISTANCE: sName = "BottomBorderDistance"; break;
- case PROP_CURRENT_PRESENTATION : sName = "CurrentPresentation"; break;
- case PROP_IS_FIXED : sName = "IsFixed"; break;
- case PROP_SUB_TYPE : sName = "SubType"; break;
- case PROP_FILE_FORMAT : sName = "FileFormat"; break;
- case PROP_HYPER_LINK_U_R_L : sName = "HyperLinkURL"; break;
- case PROP_NUMBER_FORMAT : sName = "NumberFormat"; break;
- case PROP_NAME : sName = "Name"; break;
- case PROP_IS_INPUT : sName = "IsInput"; break;
- case PROP_HINT : sName = "Hint"; break;
- case PROP_FULL_NAME : sName = "FullName"; break;
- case PROP_DESCRIPTION : sName = "Description"; break;
- case PROP_MACRO_NAME : sName = "MacroName"; break;
- case PROP_TITLE : sName = "Title"; break;
- case PROP_CONTENT : sName = "Content"; break;
- case PROP_INPUT_STREAM : sName = "InputStream"; break;
- case PROP_GRAPHIC : sName = "Graphic"; break;
- case PROP_ANCHOR_TYPE : sName = "AnchorType"; break;
- case PROP_SIZE : sName = "Size"; break;
- case PROP_HORI_ORIENT : sName = "HoriOrient"; break;
- case PROP_HORI_ORIENT_POSITION : sName = "HoriOrientPosition"; break;
- case PROP_HORI_ORIENT_RELATION : sName = "HoriOrientRelation"; break;
- case PROP_VERT_ORIENT : sName = "VertOrient"; break;
- case PROP_VERT_ORIENT_POSITION : sName = "VertOrientPosition"; break;
- case PROP_VERT_ORIENT_RELATION : sName = "VertOrientRelation"; break;
- case PROP_SIZE100th_M_M : sName = "Size100thMM"; break;
- case PROP_SIZE_PIXEL : sName = "SizePixel"; break;
- case PROP_SURROUND : sName = "Surround"; break;
- case PROP_SURROUND_CONTOUR : sName = "SurroundContour"; break;
- case PROP_ADJUST_CONTRAST : sName = "AdjustContrast"; break;
- case PROP_ADJUST_LUMINANCE : sName = "AdjustLuminance"; break;
- case PROP_GRAPHIC_COLOR_MODE : sName = "GraphicColorMode"; break;
- case PROP_CONTOUR_OUTSIDE : sName = "ContourOutside"; break;
- case PROP_CONTOUR_POLY_POLYGON : sName = "ContourPolyPolygon"; break;
- case PROP_PAGE_TOGGLE : sName = "PageToggle"; break;
- case PROP_BACK_COLOR : sName = "BackColor"; break;
- case PROP_BACK_COLOR_TRANSPARENCY: sName = "BackColorTransparency"; break;
- case PROP_ALTERNATIVE_TEXT : sName = "AlternativeText"; break;
- case PROP_HEADER_TEXT_LEFT : sName = "HeaderTextLeft"; break;
- case PROP_HEADER_TEXT : sName = "HeaderText"; break;
- case PROP_HEADER_IS_SHARED : sName = "HeaderIsShared"; break;
- case PROP_HEADER_IS_ON : sName = "HeaderIsOn"; break;
- case PROP_FOOTER_TEXT_LEFT : sName = "FooterTextLeft"; break;
- case PROP_FOOTER_TEXT : sName = "FooterText"; break;
- case PROP_FOOTER_IS_SHARED : sName = "FooterIsShared"; break;
- case PROP_FOOTER_IS_ON : sName = "FooterIsOn"; break;
- case PROP_FOOTNOTE_COUNTING : sName = "FootnoteCounting"; break;
- case PROP_FOOTNOTE_LINE_ADJUST : sName = "FootnoteLineAdjust"; break;
- case PROP_WIDTH : sName = "Width"; break;
- case PROP_HEIGHT : sName = "Height"; break;
- case PROP_TEXT_COLUMNS : sName = "TextColumns"; break;
- case PROP_AUTOMATIC_DISTANCE : sName = "AutomaticDistance"; break;
- case PROP_IS_LANDSCAPE : sName = "IsLandscape"; break;
- case PROP_FIRST_PAGE : sName = "First Page"; break;
- case PROP_PAGE_DESC_NAME : sName = "PageDescName"; break;
- case PROP_PAGE_NUMBER_OFFSET: sName = "PageNumberOffset"; break;
- case PROP_BREAK_TYPE : sName = "BreakType"; break;
- case PROP_FOOTER_IS_DYNAMIC_HEIGHT: sName = "FooterIsDynamicHeight"; break;
- case PROP_FOOTER_DYNAMIC_SPACING: sName = "FooterDynamicSpacing"; break;
- case PROP_FOOTER_HEIGHT : sName = "FooterHeight"; break;
- case PROP_FOOTER_BODY_DISTANCE : sName = "FooterBodyDistance"; break;
- case PROP_HEADER_IS_DYNAMIC_HEIGHT: sName = "HeaderIsDynamicHeight"; break;
- case PROP_HEADER_DYNAMIC_SPACING: sName = "HeaderDynamicSpacing"; break;
- case PROP_HEADER_HEIGHT : sName = "HeaderHeight"; break;
- case PROP_HEADER_BODY_DISTANCE : sName = "HeaderBodyDistance"; break;
- case PROP_WRITING_MODE : sName = "WritingMode"; break;
- case PROP_GRID_MODE : sName = "GridMode"; break;
- case PROP_GRID_DISPLAY : sName = "GridDisplay"; break;
- case PROP_GRID_PRINT : sName = "GridPrint"; break;
- case PROP_GRID_LINES : sName = "GridLines"; break;
- case PROP_GRID_BASE_HEIGHT : sName = "GridBaseHeight"; break;
- case PROP_GRID_BASE_WIDTH : sName = "GridBaseWidth"; break;
- case PROP_GRID_RUBY_HEIGHT : sName = "GridRubyHeight"; break;
- case PROP_GRID_STANDARD_MODE : sName = "StandardPageMode"; break;
- case PROP_IS_ON : sName = "IsOn"; break;
- case PROP_RESTART_AT_EACH_PAGE : sName = "RestartAtEachPage"; break;
- case PROP_COUNT_EMPTY_LINES : sName = "CountEmptyLines"; break;
- case PROP_COUNT_LINES_IN_FRAMES : sName = "CountLinesInFrames"; break;
- case PROP_INTERVAL : sName = "Interval"; break;
- case PROP_DISTANCE : sName = "Distance"; break;
- case PROP_NUMBER_POSITION : sName = "NumberPosition"; break;
- case PROP_LEVEL : sName = "Level"; break;
- case PROP_LEVEL_FOLLOW : sName = "LabelFollowedBy"; break;
- case PROP_LEVEL_PARAGRAPH_STYLES : sName = "LevelParagraphStyles"; break;
- case PROP_LEVEL_FORMAT : sName = "LevelFormat"; break;
- case PROP_LIST_FORMAT : sName = "ListFormat"; break;
- case PROP_TOKEN_TYPE : sName = "TokenType"; break;
- case PROP_TOKEN_HYPERLINK_START : sName = "TokenHyperlinkStart"; break;
- case PROP_TOKEN_HYPERLINK_END : sName = "TokenHyperlinkEnd"; break;
- case PROP_TOKEN_CHAPTER_INFO : sName = "TokenChapterInfo"; break;
- case PROP_CHAPTER_FORMAT : sName = "ChapterFormat"; break;
- case PROP_TOKEN_TEXT : sName = "TokenText"; break;
- case PROP_TEXT : sName = "Text"; break;
- case PROP_CREATE_FROM_OUTLINE : sName = "CreateFromOutline"; break;
- case PROP_CREATE_FROM_MARKS : sName = "CreateFromMarks"; break;
- case PROP_STANDARD : sName = "Standard"; break;
- case PROP_SPLIT : sName = "Split"; break;
- case PROP_IS_SPLIT_ALLOWED : sName = "IsSplitAllowed"; break;
- case META_PROP_VERTICAL_BORDER : sName = "VerticalBorder"; break;
- case META_PROP_HORIZONTAL_BORDER : sName = "HorizontalBorder"; break;
- case PROP_HEADER_ROW_COUNT : sName = "HeaderRowCount"; break;
- case PROP_SIZE_TYPE : sName = "SizeType"; break;
- case PROP_TABLE_COLUMN_SEPARATORS: sName = "TableColumnSeparators"; break;
- case META_PROP_TABLE_STYLE_NAME : sName = "TableStyleName"; break;
- case PROP_TABLE_REDLINE_PARAMS : sName = "TableRedlineParams"; break;
- case PROP_REDLINE_AUTHOR : sName = "RedlineAuthor"; break;
- case PROP_REDLINE_DATE_TIME : sName = "RedlineDateTime"; break;
- case PROP_REDLINE_TYPE : sName = "RedlineType"; break;
- case PROP_REDLINE_REVERT_PROPERTIES: sName = "RedlineRevertProperties"; break;
- case PROP_IS_PROTECTED : sName = "IsProtected"; break;
- case PROP_SIZE_PROTECTED : sName = "SizeProtected"; break;
- case PROP_POSITION_PROTECTED : sName = "PositionProtected"; break;
- case PROP_OPAQUE : sName = "Opaque"; break;
- case PROP_VERTICAL_MERGE : sName = "VerticalMerge"; break;
- case PROP_BULLET_CHAR : sName = "BulletChar"; break;
- case PROP_BULLET_FONT_NAME : sName = "BulletFontName"; break;
- case PROP_TABS_RELATIVE_TO_INDENT: sName = "TabsRelativeToIndent"; break;
- case PROP_PREFIX : sName = "Prefix"; break;
- case PROP_SUFFIX : sName = "Suffix"; break;
- case PROP_CREATE_FROM_LEVEL_PARAGRAPH_STYLES: sName = "CreateFromLevelParagraphStyles"; break;
- case PROP_DROP_CAP_FORMAT : sName = "DropCapFormat"; break;
- case PROP_REFERENCE_FIELD_PART : sName = "ReferenceFieldPart"; break;
- case PROP_SOURCE_NAME: sName = "SourceName"; break;
- case PROP_REFERENCE_FIELD_SOURCE : sName = "ReferenceFieldSource"; break;
- case PROP_WIDTH_TYPE : sName = "WidthType"; break;
- case PROP_TBL_LOOK : sName = "TblLook"; break;
- case PROP_TEXT_RANGE: sName = "TextRange"; break;
- case PROP_TEXT_VERTICAL_ADJUST : sName = "TextVerticalAdjust"; break;
- case PROP_SERVICE_CHAR_STYLE : sName = "com.sun.star.style.CharacterStyle"; break;
- case PROP_SERVICE_PARA_STYLE : sName = "com.sun.star.style.ParagraphStyle"; break;
- case PROP_CHARACTER_STYLES : sName = "CharacterStyles"; break;
- case PROP_PARAGRAPH_STYLES : sName = "ParagraphStyles"; break;
- case PROP_TABLE_BORDER_DISTANCES: sName = "TableBorderDistances"; break;
- case META_PROP_CELL_MAR_TOP : sName = "MetaPropCellMarTop"; break;
- case META_PROP_CELL_MAR_BOTTOM : sName = "MetaPropCellMarBottom"; break;
- case META_PROP_CELL_MAR_LEFT : sName = "MetaPropCellMarLeft"; break;
- case META_PROP_CELL_MAR_RIGHT : sName = "MetaPropCellMarRight"; break;
- case PROP_START_AT : sName = "StartAt"; break;
- case PROP_CHAR_PROP_HEIGHT : sName = "CharPropHeight"; break;
- case PROP_CHAR_PROP_HEIGHT_ASIAN : sName = "CharPropHeightAsian"; break;
- case PROP_CHAR_PROP_HEIGHT_COMPLEX: sName = "CharPropHeightComplex"; break;
- case PROP_FORMAT : sName = "Format"; break;
- case PROP_INSERT : sName = "Insert"; break;
- case PROP_DELETE : sName = "Delete"; break;
- case PROP_PARAGRAPH_FORMAT : sName = "ParagraphFormat"; break;
- case PROP_STREAM_NAME: sName = "StreamName"; break;
- case PROP_BITMAP : sName = "Bitmap"; break;
- case PROP_IS_DATE : sName = "IsDate"; break;
- case PROP_TAB_STOP_DISTANCE : sName = "TabStopDistance"; break;
- case PROP_INDENT_AT : sName = "IndentAt"; break;
- case PROP_FIRST_LINE_INDENT : sName = "FirstLineIndent"; break;
- case PROP_NUMBERING_STYLE_NAME : sName = "NumberingStyleName"; break;
- case PROP_OUTLINE_LEVEL : sName = "OutlineLevel"; break;
- case PROP_LISTTAB_STOP_POSITION : sName = "ListtabStopPosition"; break;
- case PROP_POSITION_AND_SPACE_MODE : sName = "PositionAndSpaceMode"; break;
- case PROP_PARA_SPLIT: sName = "ParaSplit"; break;
- case PROP_HELP: sName = "Help"; break;
- case PROP_HEADING_STYLE_NAME: sName = "HeadingStyleName"; break;
- case PROP_FRM_DIRECTION: sName = "FRMDirection"; break;
- case PROP_EMBEDDED_OBJECT : sName = "EmbeddedObject"; break;
- case PROP_IS_VISIBLE: sName = "IsVisible"; break;
- case PROP_PAGE_STYLE_LAYOUT: sName = "PageStyleLayout"; break;
- case PROP_Z_ORDER: sName = "ZOrder"; break;
- case PROP_EMBED_FONTS: sName = "EmbedFonts"; break;
- case PROP_EMBED_SYSTEM_FONTS: sName = "EmbedSystemFonts"; break;
- case PROP_SHADOW_FORMAT: sName = "ShadowFormat"; break;
- case PROP_RELATIVE_WIDTH: sName = "RelativeWidth"; break;
- case PROP_IS_WIDTH_RELATIVE: sName = "IsWidthRelative"; break;
- case PROP_GRAPHIC_BITMAP: sName = "GraphicBitmap"; break;
- case PROP_GRAPHIC_SIZE: sName = "GraphicSize"; break;
- case PROP_CHAR_SHADING_VALUE: sName = "CharShadingValue"; break;
- case PROP_CHAR_SHADING_MARKER: sName = "CharShadingMarker"; break;
- case PROP_LABEL_CATEGORY: sName = "LabelCategory"; break;
- case PROP_MIRROR_INDENTS : sName = "MirrorIndents"; break;
- case PROP_SURROUND_TEXT_WRAP_SMALL: sName = "SurroundTextWrapSmall"; break;
- case PROP_PARA_SHADOW_FORMAT: sName = "ParaShadowFormat"; break;
- case PROP_FOOTNOTE_LINE_RELATIVE_WIDTH: sName = "FootnoteLineRelativeWidth"; break;
- case PROP_TBL_HEADER: sName = "TblHeader"; break;
- case PROP_CHAR_THEME_NAME_ASCII : sName = "CharThemeNameAscii"; break;
- case PROP_CHAR_THEME_NAME_CS : sName = "CharThemeNameCs"; break;
- case PROP_CHAR_THEME_NAME_H_ANSI : sName = "CharThemeNameHAnsi"; break;
- case PROP_CHAR_THEME_NAME_EAST_ASIA : sName = "CharThemeNameEastAsia"; break;
- case PROP_CHAR_THEME_FONT_NAME_ASCII : sName = "CharThemeFontNameAscii"; break;
- case PROP_CHAR_THEME_FONT_NAME_CS : sName = "CharThemeFontNameCs"; break;
- case PROP_CHAR_THEME_FONT_NAME_EAST_ASIA: sName = "CharThemeFontNameEastAsia"; break;
- case PROP_CHAR_THEME_COLOR : sName = "CharThemeColor"; break;
- case PROP_CHAR_THEME_ORIGINAL_COLOR : sName = "CharThemeOriginalColor"; break;
- case PROP_CHAR_THEME_COLOR_SHADE : sName = "CharThemeColorShade"; break;
- case PROP_CHAR_THEME_FILL : sName = "CharThemeFill"; break;
- case PROP_HORIZONTAL_MERGE: sName = "HorizontalMerge"; break;
- case PROP_HIDE_TAB_LEADER_AND_PAGE_NUMBERS : sName = "HideTabLeaderAndPageNumber" ; break ;
- case PROP_TAB_IN_TOC : sName = "TabInTOC"; break ;
- case PROP_TOC_BOOKMARK: sName = "TOCBookmark"; break;
- case PROP_TOC_NEW_LINE: sName = "TOCNewLine"; break;
- case PROP_TOC_PARAGRAPH_OUTLINE_LEVEL : sName = "TOCParagraphOutlineLevel"; break;
- case PROP_CHAR_THEME_COLOR_TINT : sName = "CharThemeColorTint"; break;
- case PROP_CHAR_GLOW_TEXT_EFFECT : sName = "CharGlowTextEffect"; break;
- case PROP_CHAR_SHADOW_TEXT_EFFECT : sName = "CharShadowTextEffect"; break;
- case PROP_CHAR_REFLECTION_TEXT_EFFECT : sName = "CharReflectionTextEffect"; break;
- case PROP_CHAR_TEXTOUTLINE_TEXT_EFFECT : sName = "CharTextOutlineTextEffect"; break;
- case PROP_CHAR_TEXTFILL_TEXT_EFFECT : sName = "CharTextFillTextEffect"; break;
- case PROP_CHAR_SCENE3D_TEXT_EFFECT : sName = "CharScene3DTextEffect"; break;
- case PROP_CHAR_PROPS3D_TEXT_EFFECT : sName = "CharProps3DTextEffect"; break;
- case PROP_CHAR_LIGATURES_TEXT_EFFECT : sName = "CharLigaturesTextEffect"; break;
- case PROP_CHAR_NUMFORM_TEXT_EFFECT : sName = "CharNumFormTextEffect"; break;
- case PROP_CHAR_NUMSPACING_TEXT_EFFECT : sName = "CharNumSpacingTextEffect"; break;
- case PROP_CHAR_STYLISTICSETS_TEXT_EFFECT : sName = "CharStylisticSetsTextEffect"; break;
- case PROP_CHAR_CNTXTALTS_TEXT_EFFECT : sName = "CharCntxtAltsTextEffect"; break;
- case PROP_SDTPR : sName = "SdtPr"; break;
- case PROP_INDEX_ENTRY_TYPE : sName = "IndexEntryType"; break;
- case PROP_CELL_INTEROP_GRAB_BAG : sName = "CellInteropGrabBag"; break;
- case PROP_TABLE_INTEROP_GRAB_BAG : sName = "TableInteropGrabBag"; break;
- case PROP_APPLY_PARAGRAPH_MARK_FORMAT_TO_NUMBERING : sName = "ApplyParagraphMarkFormatToNumbering"; break;
- case PROP_SDT_END_BEFORE: sName = "SdtEndBefore"; break;
- case PROP_PARA_SDT_END_BEFORE: sName = "ParaSdtEndBefore"; break;
- case META_PROP_TABLE_LOOK: sName = "TableStyleLook"; break;
- case PROP_PARA_CNF_STYLE: sName = "ParaCnfStyle"; break;
- case PROP_CELL_CNF_STYLE: sName = "CellCnfStyle"; break;
- case PROP_ROW_CNF_STYLE: sName = "RowCnfStyle"; break;
- case PROP_CELL_HIDE_MARK: sName = "CellHideMark"; break;
- case PROP_FOLLOW_TEXT_FLOW: sName = "IsFollowingTextFlow"; break;
- case PROP_FILL_STYLE: sName = "FillStyle"; break;
- case PROP_FILL_COLOR: sName = "FillColor"; break;
- case PROP_SNAP_TO_GRID: sName = "SnapToGrid"; break;
- case PROP_GRID_SNAP_TO_CHARS: sName = "GridSnapToChars"; break;
- case PROP_RUBY_STYLE: sName = "RubyCharStyleName"; break;
- case PROP_RUBY_TEXT: sName = "RubyText"; break;
- case PROP_RUBY_ADJUST: sName = "RubyAdjust"; break;
- case PROP_RUBY_POSITION: sName = "RubyPosition"; break;
- case PROP_DATABASE_NAME: sName = "DataBaseName"; break;
- case PROP_COMMAND_TYPE: sName = "DataCommandType"; break;
- case PROP_DATATABLE_NAME: sName = "DataTableName"; break;
- case PROP_DATACOLUMN_NAME: sName = "DataColumnName"; break;
- case PROP_CHAR_TRANSPARENCE: sName = "CharTransparence"; break;
- case PROP_CELL_FORMULA: sName = "CellFormula"; break;
- case PROP_CELL_FORMULA_CONVERTED: sName = "CellFormulaConverted"; break;
- }
- assert(sName.getLength()>0);
- return sName;
-}
-
-bool isCharacterProperty( const PropertyIds eId )
-{
- return eId > PROP_CHARACTER_STYLES && eId < PROP_CHARACTER_END;
-}
-
-bool isParagraphProperty( const PropertyIds eId )
-{
- return (eId >= PROP_PARA_ADJUST && eId <= PROP_PARA_WIDOWS) || eId == PROP_FILL_COLOR;
-}
-
-} //namespace writerfilter
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/PropertyIds.hxx b/writerfilter/source/dmapper/PropertyIds.hxx
deleted file mode 100644
index 5eed2297ff0d..000000000000
--- a/writerfilter/source/dmapper/PropertyIds.hxx
+++ /dev/null
@@ -1,374 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * 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 .
- */
-#ifndef INCLUDED_WRITERFILTER_SOURCE_DMAPPER_PROPERTYIDS_HXX
-#define INCLUDED_WRITERFILTER_SOURCE_DMAPPER_PROPERTYIDS_HXX
-
-#include <rtl/ustring.hxx>
-
-namespace writerfilter::dmapper{
-// Ensure that Character Properties are placed between PROP_CHARACTER_STYLES and PROP_CHARACTER_END
-enum PropertyIds
- {
- PROP_ID_START = 1
- ,META_PROP_CELL_MAR_BOTTOM = PROP_ID_START
- ,META_PROP_CELL_MAR_LEFT
- ,META_PROP_CELL_MAR_RIGHT
- ,META_PROP_CELL_MAR_TOP
- ,META_PROP_HORIZONTAL_BORDER
- ,META_PROP_TABLE_STYLE_NAME
- ,META_PROP_VERTICAL_BORDER
- ,PROP_ADJUST
- ,PROP_ADJUST_CONTRAST
- ,PROP_ADJUST_LUMINANCE
- ,PROP_ALTERNATIVE_TEXT
- ,PROP_ANCHOR_TYPE
- ,PROP_AUTOMATIC_DISTANCE
- ,PROP_BACK_COLOR
- ,PROP_BACK_COLOR_TRANSPARENCY
- ,PROP_BITMAP
- ,PROP_BOTTOM_BORDER
- ,PROP_BOTTOM_BORDER_DISTANCE
- ,PROP_BOTTOM_MARGIN
- ,PROP_BREAK_TYPE
- ,PROP_BULLET_CHAR
- ,PROP_BULLET_FONT_NAME
- ,PROP_CHAPTER_FORMAT
- ,PROP_CHARACTER_STYLES
- ,PROP_CHAR_AUTO_KERNING
- ,PROP_CHAR_BACK_COLOR
- ,PROP_CHAR_CASE_MAP
- ,PROP_CHAR_CHAR_KERNING
- ,PROP_CHAR_COLOR
- ,PROP_CHAR_COMBINE_IS_ON
- ,PROP_CHAR_COMBINE_PREFIX
- ,PROP_CHAR_COMBINE_SUFFIX
- ,PROP_CHAR_CONTOURED
- ,PROP_CHAR_LEFT_BORDER
- ,PROP_CHAR_RIGHT_BORDER
- ,PROP_CHAR_TOP_BORDER
- ,PROP_CHAR_BOTTOM_BORDER
- ,PROP_CHAR_LEFT_BORDER_DISTANCE
- ,PROP_CHAR_RIGHT_BORDER_DISTANCE
- ,PROP_CHAR_TOP_BORDER_DISTANCE
- ,PROP_CHAR_BOTTOM_BORDER_DISTANCE
- ,PROP_CHAR_EMPHASIS
- ,PROP_CHAR_ESCAPEMENT
- ,PROP_CHAR_ESCAPEMENT_HEIGHT
- ,PROP_CHAR_FLASH
- ,PROP_CHAR_FONT_CHAR_SET
- ,PROP_CHAR_FONT_NAME
- ,PROP_CHAR_FONT_NAME_ASIAN
- ,PROP_CHAR_FONT_NAME_COMPLEX
- ,PROP_CHAR_HEIGHT
- ,PROP_CHAR_HEIGHT_ASIAN
- ,PROP_CHAR_HEIGHT_COMPLEX
- ,PROP_CHAR_HIDDEN
- ,PROP_CHAR_HIGHLIGHT
- ,PROP_CHAR_LOCALE
- ,PROP_CHAR_LOCALE_ASIAN
- ,PROP_CHAR_LOCALE_COMPLEX
- ,PROP_CHAR_POSTURE
- ,PROP_CHAR_POSTURE_ASIAN
- ,PROP_CHAR_POSTURE_COMPLEX
- ,PROP_CHAR_PROP_HEIGHT
- ,PROP_CHAR_PROP_HEIGHT_ASIAN
- ,PROP_CHAR_PROP_HEIGHT_COMPLEX
- ,PROP_CHAR_RELIEF
- ,PROP_CHAR_ROTATION
- ,PROP_CHAR_ROTATION_IS_FIT_TO_LINE
- ,PROP_CHAR_SCALE_WIDTH
- ,PROP_CHAR_SHADOW_FORMAT
- ,PROP_CHAR_SHADING_MARKER
- ,PROP_CHAR_SHADING_VALUE
- ,PROP_CHAR_SHADOWED
- ,PROP_CHAR_STRIKEOUT
- ,PROP_CHAR_STYLE_NAME
- ,PROP_CHAR_TEXTOUTLINE_TEXT_EFFECT
- ,PROP_CHAR_TEXTFILL_TEXT_EFFECT
- ,PROP_CHAR_THEME_NAME_ASCII
- ,PROP_CHAR_THEME_NAME_CS
- ,PROP_CHAR_THEME_NAME_H_ANSI
- ,PROP_CHAR_THEME_NAME_EAST_ASIA
- ,PROP_CHAR_THEME_FONT_NAME_ASCII
- ,PROP_CHAR_THEME_FONT_NAME_CS
- ,PROP_CHAR_THEME_FONT_NAME_EAST_ASIA
- ,PROP_CHAR_THEME_COLOR
- ,PROP_CHAR_THEME_ORIGINAL_COLOR
- ,PROP_CHAR_THEME_COLOR_SHADE
- ,PROP_CHAR_THEME_FILL
- ,PROP_CHAR_THEME_COLOR_TINT
- ,PROP_CHAR_UNDERLINE
- ,PROP_CHAR_UNDERLINE_COLOR
- ,PROP_CHAR_UNDERLINE_HAS_COLOR
- ,PROP_CHAR_WEIGHT
- ,PROP_CHAR_WEIGHT_ASIAN
- ,PROP_CHAR_WEIGHT_COMPLEX
- ,PROP_CHAR_WORD_MODE
- ,PROP_CHAR_GLOW_TEXT_EFFECT
- ,PROP_CHAR_SHADOW_TEXT_EFFECT
- ,PROP_CHAR_REFLECTION_TEXT_EFFECT
- ,PROP_CHAR_SCENE3D_TEXT_EFFECT
- ,PROP_CHAR_PROPS3D_TEXT_EFFECT
- ,PROP_CHAR_LIGATURES_TEXT_EFFECT
- ,PROP_CHAR_NUMFORM_TEXT_EFFECT
- ,PROP_CHAR_NUMSPACING_TEXT_EFFECT
- ,PROP_CHAR_STYLISTICSETS_TEXT_EFFECT
- ,PROP_CHAR_CNTXTALTS_TEXT_EFFECT
- ,PROP_CHARACTER_END
- ,PROP_CONTENT = PROP_CHARACTER_END
- ,PROP_CONTOUR_OUTSIDE
- ,PROP_CONTOUR_POLY_POLYGON
- ,PROP_COUNT_EMPTY_LINES
- ,PROP_COUNT_LINES_IN_FRAMES
- ,PROP_CREATE_FROM_LEVEL_PARAGRAPH_STYLES
- ,PROP_CREATE_FROM_MARKS
- ,PROP_CREATE_FROM_OUTLINE
- ,PROP_CURRENT_PRESENTATION
- ,PROP_DELETE
- ,PROP_DESCRIPTION
- ,PROP_DISTANCE
- ,PROP_DROP_CAP_FORMAT
- ,PROP_FILE_FORMAT
- ,PROP_FIRST_LINE_INDENT
- ,PROP_FIRST_LINE_OFFSET
- ,PROP_FIRST_PAGE
- ,PROP_FOOTER_BODY_DISTANCE
- ,PROP_FOOTER_DYNAMIC_SPACING
- ,PROP_FOOTER_HEIGHT
- ,PROP_FOOTER_IS_DYNAMIC_HEIGHT
- ,PROP_FOOTER_IS_ON
- ,PROP_FOOTER_IS_SHARED
- ,PROP_FOOTER_TEXT
- ,PROP_FOOTER_TEXT_LEFT
- ,PROP_FOOTNOTE_COUNTING
- ,PROP_FOOTNOTE_LINE_ADJUST
- ,PROP_FORMAT
- ,PROP_FULL_NAME
- ,PROP_GRAPHIC
- ,PROP_GRAPHIC_COLOR_MODE
- ,PROP_GRID_BASE_HEIGHT
- ,PROP_GRID_BASE_WIDTH
- ,PROP_GRID_DISPLAY
- ,PROP_GRID_LINES
- ,PROP_GRID_MODE
- ,PROP_GRID_PRINT
- ,PROP_GRID_RUBY_HEIGHT
- ,PROP_HEADER_BODY_DISTANCE
- ,PROP_HEADER_DYNAMIC_SPACING
- ,PROP_HEADER_HEIGHT
- ,PROP_HEADER_IS_DYNAMIC_HEIGHT
- ,PROP_HEADER_IS_ON
- ,PROP_HEADER_IS_SHARED
- ,PROP_HEADER_ROW_COUNT
- ,PROP_HEADER_TEXT
- ,PROP_HEADER_TEXT_LEFT
- ,PROP_HEADING_STYLE_NAME
- ,PROP_HEIGHT
- ,PROP_HELP
- ,PROP_HINT
- ,PROP_HORI_ORIENT
- ,PROP_HORI_ORIENT_POSITION
- ,PROP_HORI_ORIENT_RELATION
- ,PROP_HYPER_LINK_U_R_L
- ,PROP_INDENT_AT
- ,PROP_INPUT_STREAM
- ,PROP_INSERT
- ,PROP_INTERVAL
- ,PROP_IS_DATE
- ,PROP_IS_FIXED
- ,PROP_IS_INPUT
- ,PROP_IS_LANDSCAPE
- ,PROP_IS_ON
- ,PROP_IS_SPLIT_ALLOWED
- ,PROP_IS_VISIBLE
- ,PROP_LABEL_CATEGORY
- ,PROP_LEFT_BORDER
- ,PROP_LEFT_BORDER_DISTANCE
- ,PROP_LEFT_MARGIN
- ,PROP_LEVEL
- ,PROP_LEVEL_FOLLOW
- ,PROP_LEVEL_FORMAT
- ,PROP_LEVEL_PARAGRAPH_STYLES
- ,PROP_LISTTAB_STOP_POSITION
- ,PROP_LIST_FORMAT
- ,PROP_MACRO_NAME
- ,PROP_NAME
- ,PROP_NUMBERING_LEVEL
- ,PROP_NUMBERING_RULES
- ,PROP_NUMBERING_STYLE_NAME
- ,PROP_NUMBERING_TYPE
- ,PROP_NUMBER_FORMAT
- ,PROP_NUMBER_POSITION
- ,PROP_OPAQUE
- ,PROP_OUTLINE_LEVEL
- ,PROP_PAGE_DESC_NAME
- ,PROP_PAGE_NUMBER_OFFSET
- ,PROP_PAGE_TOGGLE
- ,PROP_PARAGRAPH_FORMAT
- ,PROP_PARAGRAPH_STYLES
- ,PROP_PARA_ADJUST
- ,PROP_PARA_BOTTOM_MARGIN
- ,PROP_PARA_FIRST_LINE_INDENT
- ,PROP_PARA_IS_HANGING_PUNCTUATION
- ,PROP_PARA_IS_HYPHENATION
- ,PROP_PARA_HYPHENATION_NO_CAPS
- ,PROP_PARA_KEEP_TOGETHER
- ,PROP_PARA_LAST_LINE_ADJUST
- ,PROP_PARA_LEFT_MARGIN
- ,PROP_PARA_LINE_NUMBER_COUNT
- ,PROP_PARA_LINE_NUMBER_START_VALUE
- ,PROP_PARA_LINE_SPACING
- ,PROP_PARA_ORPHANS
- ,PROP_PARA_RIGHT_MARGIN
- ,PROP_PARA_SPLIT
- ,PROP_PARA_STYLE_NAME
- ,PROP_PARA_TAB_STOPS
- ,PROP_PARA_TOP_MARGIN
- ,PROP_PARA_VERT_ALIGNMENT
- ,PROP_PARA_WIDOWS
- ,PROP_PARENT_NUMBERING
- ,PROP_POSITION_AND_SPACE_MODE
- ,PROP_POSITION_PROTECTED
- ,PROP_IS_PROTECTED
- ,PROP_PREFIX
- ,PROP_REDLINE_AUTHOR
- ,PROP_REDLINE_DATE_TIME
- ,PROP_REDLINE_TYPE
- ,PROP_REDLINE_REVERT_PROPERTIES
- ,PROP_REFERENCE_FIELD_PART
- ,PROP_REFERENCE_FIELD_SOURCE
- ,PROP_RESTART_AT_EACH_PAGE
- ,PROP_RIGHT_BORDER
- ,PROP_RIGHT_BORDER_DISTANCE
- ,PROP_RIGHT_MARGIN
- ,PROP_SERVICE_CHAR_STYLE
- ,PROP_SERVICE_PARA_STYLE
- ,PROP_SIZE
- ,PROP_SIZE100th_M_M
- ,PROP_SIZE_PIXEL
- ,PROP_SIZE_PROTECTED
- ,PROP_SIZE_TYPE
- ,PROP_SOURCE_NAME
- ,PROP_SPLIT
- ,PROP_STANDARD
- ,PROP_START_AT
- ,PROP_START_WITH
- ,PROP_STREAM_NAME
- ,PROP_SUB_TYPE
- ,PROP_SUFFIX
- ,PROP_SURROUND
- ,PROP_SURROUND_CONTOUR
- ,PROP_TABLE_BORDER
- ,PROP_TABLE_BORDER_DISTANCES
- ,PROP_TABLE_COLUMN_SEPARATORS
- ,PROP_TABLE_REDLINE_PARAMS
- ,PROP_TABLE_ROW_DELETE
- ,PROP_TABLE_ROW_INSERT
- ,PROP_TABLE_CELL_DELETE
- ,PROP_TABLE_CELL_INSERT
- ,PROP_TABS_RELATIVE_TO_INDENT
- ,PROP_TAB_STOP_DISTANCE
- ,PROP_TEXT
- ,PROP_TEXT_COLUMNS
- ,PROP_TEXT_RANGE
- ,PROP_TEXT_VERTICAL_ADJUST
- ,PROP_TITLE
- ,PROP_TOKEN_CHAPTER_INFO
- ,PROP_TOKEN_HYPERLINK_END
- ,PROP_TOKEN_HYPERLINK_START
- ,PROP_TOKEN_TEXT
- ,PROP_TOKEN_TYPE
- ,PROP_TOP_BORDER
- ,PROP_TOP_BORDER_DISTANCE
- ,PROP_TOP_MARGIN
- ,PROP_VERTICAL_MERGE
- ,PROP_GRID_STANDARD_MODE
- ,PROP_VERT_ORIENT
- ,PROP_VERT_ORIENT_POSITION
- ,PROP_VERT_ORIENT_RELATION
- ,PROP_WIDTH
- ,PROP_WIDTH_TYPE
- ,PROP_TBL_LOOK
- ,PROP_WRITING_MODE
- ,PROP_FRM_DIRECTION
- ,PROP_EMBEDDED_OBJECT
- ,PROP_PARA_CONTEXT_MARGIN
- ,PROP_PAGE_STYLE_LAYOUT
- ,PROP_Z_ORDER
- ,PROP_EMBED_FONTS
- ,PROP_EMBED_SYSTEM_FONTS
- ,PROP_SHADOW_FORMAT
- ,PROP_RELATIVE_WIDTH
- ,PROP_IS_WIDTH_RELATIVE
- ,PROP_GRAPHIC_BITMAP
- ,PROP_GRAPHIC_SIZE
- ,PROP_MIRROR_INDENTS
- ,PROP_SURROUND_TEXT_WRAP_SMALL
- ,PROP_PARA_SHADOW_FORMAT
- ,PROP_FOOTNOTE_LINE_RELATIVE_WIDTH
- ,PROP_PARA_TOP_MARGIN_BEFORE_AUTO_SPACING
- ,PROP_PARA_BOTTOM_MARGIN_AFTER_AUTO_SPACING
- ,PROP_TBL_HEADER
- ,PROP_HORIZONTAL_MERGE
- ,PROP_HIDE_TAB_LEADER_AND_PAGE_NUMBERS
- ,PROP_TAB_IN_TOC
- ,PROP_TOC_BOOKMARK
- ,PROP_TOC_NEW_LINE
- ,PROP_TOC_PARAGRAPH_OUTLINE_LEVEL
- ,PROP_SDTPR
- ,PROP_CELL_INTEROP_GRAB_BAG
- ,PROP_TABLE_INTEROP_GRAB_BAG
- ,PROP_INDEX_ENTRY_TYPE
- ,PROP_APPLY_PARAGRAPH_MARK_FORMAT_TO_NUMBERING
- ,PROP_SDT_END_BEFORE
- ,PROP_PARA_SDT_END_BEFORE
- ,META_PROP_TABLE_LOOK
- ,PROP_PARA_CNF_STYLE
- ,PROP_CELL_CNF_STYLE
- ,PROP_ROW_CNF_STYLE
- ,PROP_CELL_HIDE_MARK
- ,PROP_FOLLOW_TEXT_FLOW
- ,PROP_FILL_STYLE
- ,PROP_FILL_COLOR
- ,PROP_SNAP_TO_GRID
- ,PROP_GRID_SNAP_TO_CHARS
- ,PROP_RUBY_STYLE
- ,PROP_RUBY_TEXT
- ,PROP_RUBY_ADJUST
- ,PROP_RUBY_POSITION
- ,PROP_DATABASE_NAME
- ,PROP_COMMAND_TYPE
- ,PROP_DATATABLE_NAME
- ,PROP_DATACOLUMN_NAME
- ,PROP_CHAR_TRANSPARENCE
- ,PROP_CELL_FORMULA
- ,PROP_CELL_FORMULA_CONVERTED
- };
-
-//Returns the UNO string equivalent to eId.
-OUString getPropertyName(PropertyIds eId);
-
-bool isCharacterProperty(const PropertyIds eId);
-
-bool isParagraphProperty(const PropertyIds eId);
-
-} // namespace writerfilter::dmapper
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/PropertyMap.cxx b/writerfilter/source/dmapper/PropertyMap.cxx
deleted file mode 100644
index 4cdd76e91a2c..000000000000
--- a/writerfilter/source/dmapper/PropertyMap.cxx
+++ /dev/null
@@ -1,2155 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * 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 .
- */
-
-#include <sal/config.h>
-
-#include <string_view>
-
-#include "PropertyMap.hxx"
-#include "TagLogger.hxx"
-#include <ooxml/resourceids.hxx>
-#include "DomainMapper_Impl.hxx"
-#include "ConversionHelper.hxx"
-#include <editeng/boxitem.hxx>
-#include <i18nutil/paper.hxx>
-#include <osl/diagnose.h>
-#include <rtl/ustring.hxx>
-#include <sal/log.hxx>
-#include <com/sun/star/beans/PropertyAttribute.hpp>
-#include <com/sun/star/beans/PropertyValue.hpp>
-#include <com/sun/star/beans/XMultiPropertySet.hpp>
-#include <com/sun/star/lang/XMultiServiceFactory.hpp>
-#include <com/sun/star/table/BorderLine2.hpp>
-#include <com/sun/star/container/XEnumeration.hpp>
-#include <com/sun/star/container/XEnumerationAccess.hpp>
-#include <com/sun/star/container/XNameContainer.hpp>
-#include <com/sun/star/style/BreakType.hpp>
-#include <com/sun/star/style/PageStyleLayout.hpp>
-#include <com/sun/star/style/XStyleFamiliesSupplier.hpp>
-#include <com/sun/star/table/ShadowFormat.hpp>
-#include <com/sun/star/text/RelOrientation.hpp>
-#include <com/sun/star/text/HoriOrientation.hpp>
-#include <com/sun/star/text/HorizontalAdjust.hpp>
-#include <com/sun/star/text/SizeType.hpp>
-#include <com/sun/star/text/VertOrientation.hpp>
-#include <com/sun/star/text/WritingMode.hpp>
-#include <com/sun/star/text/WritingMode2.hpp>
-#include <com/sun/star/text/XRedline.hpp>
-#include <com/sun/star/text/XTextColumns.hpp>
-#include <com/sun/star/text/XText.hpp>
-#include <com/sun/star/text/XTextFrame.hpp>
-#include <com/sun/star/text/XTextTablesSupplier.hpp>
-#include <com/sun/star/text/TextGridMode.hpp>
-#include <com/sun/star/text/XTextCopy.hpp>
-#include <com/sun/star/style/VerticalAlignment.hpp>
-#include <comphelper/sequence.hxx>
-#include <comphelper/propertyvalue.hxx>
-#include <tools/diagnose_ex.h>
-#include "PropertyMapHelper.hxx"
-#include <o3tl/sorted_vector.hxx>
-
-using namespace com::sun::star;
-
-namespace writerfilter::dmapper {
-
-uno::Sequence< beans::PropertyValue > PropertyMap::GetPropertyValues( bool bCharGrabBag )
-{
- using comphelper::makePropertyValue;
-
- if ( m_aValues.empty() && !m_vMap.empty() )
- {
- size_t nCharGrabBag = 0;
- size_t nParaGrabBag = 0;
- size_t nCellGrabBag = 0;
- size_t nRowGrabBag = 0;
-
- const PropValue* pParaStyleProp = nullptr;
- const PropValue* pCharStyleProp = nullptr;
- const PropValue* pNumRuleProp = nullptr;
-
- for ( const auto& rPropPair : m_vMap )
- {
- if ( rPropPair.second.getGrabBagType() == CHAR_GRAB_BAG )
- nCharGrabBag++;
- else if ( rPropPair.second.getGrabBagType() == PARA_GRAB_BAG )
- nParaGrabBag++;
- else if ( rPropPair.second.getGrabBagType() == CELL_GRAB_BAG )
- nCellGrabBag++;
- else if ( rPropPair.first == PROP_CELL_INTEROP_GRAB_BAG )
- {
- uno::Sequence< beans::PropertyValue > aSeq;
- rPropPair.second.getValue() >>= aSeq;
- nCellGrabBag += aSeq.getLength();
- }
- else if ( rPropPair.second.getGrabBagType() == ROW_GRAB_BAG )
- nRowGrabBag++;
-
- if ( rPropPair.first == PROP_PARA_STYLE_NAME ) pParaStyleProp = &rPropPair.second;
- if ( rPropPair.first == PROP_CHAR_STYLE_NAME ) pCharStyleProp = &rPropPair.second;
- if ( rPropPair.first == PROP_NUMBERING_RULES ) pNumRuleProp = &rPropPair.second;
- }
-
- // Style names have to be the first elements within the property sequence
- // otherwise they will overwrite 'hard' attributes
- if ( pParaStyleProp != nullptr )
- m_aValues.push_back( makePropertyValue( getPropertyName( PROP_PARA_STYLE_NAME ), pParaStyleProp->getValue() ) );
- if ( pCharStyleProp != nullptr )
- m_aValues.push_back( makePropertyValue( getPropertyName( PROP_CHAR_STYLE_NAME ), pCharStyleProp->getValue() ) );
- if ( pNumRuleProp != nullptr )
- m_aValues.push_back( makePropertyValue(getPropertyName( PROP_NUMBERING_RULES ), pNumRuleProp->getValue() ) );
-
- // If there are any grab bag properties, we need one slot for them.
- uno::Sequence< beans::PropertyValue > aCharGrabBagValues( nCharGrabBag );
- uno::Sequence< beans::PropertyValue > aParaGrabBagValues( nParaGrabBag );
- uno::Sequence< beans::PropertyValue > aCellGrabBagValues( nCellGrabBag );
- uno::Sequence< beans::PropertyValue > aRowGrabBagValues ( nRowGrabBag );
- beans::PropertyValue* pCharGrabBagValues = aCharGrabBagValues.getArray();
- beans::PropertyValue* pParaGrabBagValues = aParaGrabBagValues.getArray();
- beans::PropertyValue* pCellGrabBagValues = aCellGrabBagValues.getArray();
- beans::PropertyValue* pRowGrabBagValues = aRowGrabBagValues.getArray();
- // Record index for the next property to be added in each grab bag.
- sal_Int32 nRowGrabBagValue = 0;
- sal_Int32 nCellGrabBagValue = 0;
- sal_Int32 nParaGrabBagValue = 0;
- sal_Int32 nCharGrabBagValue = 0;
-
- for ( const auto& rPropPair : m_vMap )
- {
- if ( rPropPair.first != PROP_PARA_STYLE_NAME &&
- rPropPair.first != PROP_CHAR_STYLE_NAME &&
- rPropPair.first != PROP_NUMBERING_RULES )
- {
- if ( rPropPair.second.getGrabBagType() == CHAR_GRAB_BAG )
- {
- if ( bCharGrabBag )
- {
- pCharGrabBagValues[nCharGrabBagValue].Name = getPropertyName( rPropPair.first );
- pCharGrabBagValues[nCharGrabBagValue].Value = rPropPair.second.getValue();
- ++nCharGrabBagValue;
- }
- }
- else if ( rPropPair.second.getGrabBagType() == PARA_GRAB_BAG )
- {
- pParaGrabBagValues[nParaGrabBagValue].Name = getPropertyName( rPropPair.first );
- pParaGrabBagValues[nParaGrabBagValue].Value = rPropPair.second.getValue();
- ++nParaGrabBagValue;
- }
- else if ( rPropPair.second.getGrabBagType() == CELL_GRAB_BAG )
- {
- pCellGrabBagValues[nCellGrabBagValue].Name = getPropertyName( rPropPair.first );
- pCellGrabBagValues[nCellGrabBagValue].Value = rPropPair.second.getValue();
- ++nCellGrabBagValue;
- }
- else if ( rPropPair.second.getGrabBagType() == ROW_GRAB_BAG )
- {
- pRowGrabBagValues[nRowGrabBagValue].Name = getPropertyName( rPropPair.first );
- pRowGrabBagValues[nRowGrabBagValue].Value = rPropPair.second.getValue();
- ++nRowGrabBagValue;
- }
- else if ( rPropPair.first == PROP_CELL_INTEROP_GRAB_BAG )
- {
- uno::Sequence< beans::PropertyValue > aSeq;
- rPropPair.second.getValue() >>= aSeq;
- std::copy(aSeq.begin(), aSeq.end(), pCellGrabBagValues + nCellGrabBagValue);
- nCellGrabBagValue += aSeq.getLength();
- }
- else
- {
- m_aValues.push_back( makePropertyValue( getPropertyName( rPropPair.first ), rPropPair.second.getValue() ) );
- }
- }
- }
-
- if ( nCharGrabBag && bCharGrabBag )
- m_aValues.push_back( makePropertyValue( "CharInteropGrabBag", uno::makeAny( aCharGrabBagValues ) ) );
-
- if ( nParaGrabBag )
- m_aValues.push_back( makePropertyValue( "ParaInteropGrabBag", uno::makeAny( aParaGrabBagValues ) ) );
-
- if ( nCellGrabBag )
- m_aValues.push_back( makePropertyValue( "CellInteropGrabBag", uno::makeAny( aCellGrabBagValues ) ) );
-
- if ( nRowGrabBag )
- m_aValues.push_back( makePropertyValue( "RowInteropGrabBag", uno::makeAny( aRowGrabBagValues ) ) );
- }
-
- return comphelper::containerToSequence( m_aValues );
-}
-
-std::vector< PropertyIds > PropertyMap::GetPropertyIds()
-{
- std::vector< PropertyIds > aRet;
- for ( const auto& rPropPair : m_vMap )
- aRet.push_back( rPropPair.first );
- return aRet;
-}
-
-#ifdef DBG_UTIL
-static void lcl_AnyToTag( const uno::Any& rAny )
-{
- try {
- sal_Int32 aInt = 0;
- if ( rAny >>= aInt )
- {
- TagLogger::getInstance().attribute( "value", rAny );
- }
- else
- {
- TagLogger::getInstance().attribute( "unsignedValue", 0 );
- }
-
- sal_uInt32 auInt = 0;
- rAny >>= auInt;
- TagLogger::getInstance().attribute( "unsignedValue", auInt );
-
- float aFloat = 0.0f;
- if ( rAny >>= aFloat )
- {
- TagLogger::getInstance().attribute( "floatValue", rAny );
- }
- else
- {
- TagLogger::getInstance().attribute( "unsignedValue", 0 );
- }
-
- OUString aStr;
- rAny >>= aStr;
- TagLogger::getInstance().attribute( "stringValue", aStr );
- }
- catch ( ... )
- {
- }
-}
-#endif
-
-void PropertyMap::Insert( PropertyIds eId, const uno::Any& rAny, bool bOverwrite, GrabBagType i_GrabBagType, bool bDocDefault )
-{
-#ifdef DBG_UTIL
- const OUString& rInsert = getPropertyName(eId);
-
- TagLogger::getInstance().startElement("propertyMap.insert");
- TagLogger::getInstance().attribute("name", rInsert);
- lcl_AnyToTag(rAny);
- TagLogger::getInstance().endElement();
-#endif
-
- if ( !bOverwrite )
- m_vMap.insert(std::make_pair(eId, PropValue(rAny, i_GrabBagType, bDocDefault)));
- else
- m_vMap[eId] = PropValue(rAny, i_GrabBagType);
-
- Invalidate();
-}
-
-void PropertyMap::Erase( PropertyIds eId )
-{
- // Safe call to erase, it throws no exceptions, even if eId is not in m_vMap
- m_vMap.erase(eId);
-
- Invalidate();
-}
-
-std::optional< PropertyMap::Property > PropertyMap::getProperty( PropertyIds eId ) const
-{
- std::map< PropertyIds, PropValue >::const_iterator aIter = m_vMap.find( eId );
- if ( aIter == m_vMap.end() )
- return std::optional<Property>();
- else
- return std::make_pair( eId, aIter->second.getValue() );
-}
-
-bool PropertyMap::isSet( PropertyIds eId) const
-{
- return m_vMap.find( eId ) != m_vMap.end();
-}
-
-bool PropertyMap::isDocDefault( PropertyIds eId ) const
-{
- std::map< PropertyIds, PropValue >::const_iterator aIter = m_vMap.find( eId );
- if ( aIter == m_vMap.end() )
- return false;
- else
- return aIter->second.getIsDocDefault();
-}
-
-#ifdef DBG_UTIL
-void PropertyMap::dumpXml() const
-{
- TagLogger::getInstance().startElement( "PropertyMap" );
-
- for ( const auto& rPropPair : m_vMap )
- {
- TagLogger::getInstance().startElement( "property" );
-
- TagLogger::getInstance().attribute( "name", getPropertyName( rPropPair.first ) );
-
- switch ( rPropPair.first )
- {
- case PROP_TABLE_COLUMN_SEPARATORS:
- lcl_DumpTableColumnSeparators( rPropPair.second.getValue() );
- break;
- default:
- {
- try
- {
- sal_Int32 aInt = 0;
- rPropPair.second.getValue() >>= aInt;
- TagLogger::getInstance().attribute( "value", aInt );
-
- sal_uInt32 auInt = 0;
- rPropPair.second.getValue() >>= auInt;
- TagLogger::getInstance().attribute( "unsignedValue", auInt );
-
- float aFloat = 0.0;
- rPropPair.second.getValue() >>= aFloat;
- TagLogger::getInstance().attribute( "floatValue", aFloat );
-
- rPropPair.second.getValue() >>= auInt;
- TagLogger::getInstance().attribute( "stringValue", std::u16string_view() );
- }
- catch ( ... )
- {
- }
- }
- break;
- }
-
- TagLogger::getInstance().endElement();
- }
-
- TagLogger::getInstance().endElement();
-}
-#endif
-
-void PropertyMap::InsertProps( const PropertyMapPtr& rMap, const bool bOverwrite )
-{
- if ( !rMap )
- return;
-
- for ( const auto& rPropPair : rMap->m_vMap )
- {
- if ( bOverwrite || !m_vMap.count(rPropPair.first) )
- {
- if ( !bOverwrite && !rPropPair.second.getIsDocDefault() )
- m_vMap.insert(std::make_pair(rPropPair.first, PropValue(rPropPair.second.getValue(), rPropPair.second.getGrabBagType(), true)));
- else
- m_vMap[rPropPair.first] = rPropPair.second;
- }
- }
-
- insertTableProperties( rMap.get(), bOverwrite );
-
- Invalidate();
-}
-
-void PropertyMap::insertTableProperties( const PropertyMap*, const bool )
-{
-#ifdef DBG_UTIL
- TagLogger::getInstance().element( "PropertyMap.insertTableProperties" );
-#endif
-}
-
-void PropertyMap::printProperties()
-{
-#ifdef DBG_UTIL
- TagLogger::getInstance().startElement( "properties" );
-
- for ( const auto& rPropPair : m_vMap )
- {
- SAL_INFO( "writerfilter", getPropertyName( rPropPair.first ) );
-
- table::BorderLine2 aLine;
- sal_Int32 nColor;
- if ( rPropPair.second.getValue() >>= aLine )
- {
- TagLogger::getInstance().startElement( "borderline" );
- TagLogger::getInstance().attribute( "color", aLine.Color );
- TagLogger::getInstance().attribute( "inner", aLine.InnerLineWidth );
- TagLogger::getInstance().attribute( "outer", aLine.OuterLineWidth );
- TagLogger::getInstance().endElement();
- }
- else if ( rPropPair.second.getValue() >>= nColor )
- {
- TagLogger::getInstance().startElement( "color" );
- TagLogger::getInstance().attribute( "number", nColor );
- TagLogger::getInstance().endElement();
- }
- }
-
- TagLogger::getInstance().endElement();
-#else
- (void) this; // avoid loplugin:staticmethods
-#endif
-}
-
-SectionPropertyMap::SectionPropertyMap( bool bIsFirstSection )
- : m_bIsFirstSection( bIsFirstSection )
- , m_eBorderApply( BorderApply::ToAllInSection )
- , m_eBorderOffsetFrom( BorderOffsetFrom::Text )
- , m_bTitlePage( false )
- , m_nColumnCount( 0 )
- , m_nColumnDistance( 1249 )
- , m_bSeparatorLineIsOn( false )
- , m_bEvenlySpaced( false )
- , m_nPageNumber( -1 )
- , m_nPageNumberType( -1 )
- , m_nBreakType( -1 )
- , m_nLeftMargin( 2540 ) // page left margin, default 1 inch = 1440 twip -> 2540 1/100 mm
- , m_nRightMargin( 2540 ) // page right margin, default 1 inch = 1440 twip -> 2540 1/100 mm
- , m_nTopMargin( 2540 )
- , m_nBottomMargin( 2540 )
- , m_nHeaderTop( 1270 ) // 720 twip
- , m_nHeaderBottom( 1270 ) // 720 twip
- , m_nGridType( 0 )
- , m_nGridLinePitch( 1 )
- , m_nDxtCharSpace( 0 )
- , m_bGridSnapToChars( true )
- , m_nLnnMod( 0 )
- , m_nLnc(NS_ooxml::LN_Value_ST_LineNumberRestart_newPage)
- , m_ndxaLnn( 0 )
- , m_nLnnMin( 0 )
- , m_bDefaultHeaderLinkToPrevious( true )
- , m_bEvenPageHeaderLinkToPrevious( true )
- , m_bFirstPageHeaderLinkToPrevious( true )
- , m_bDefaultFooterLinkToPrevious( true )
- , m_bEvenPageFooterLinkToPrevious( true )
- , m_bFirstPageFooterLinkToPrevious( true )
-{
-#ifdef DBG_UTIL
- static sal_Int32 nNumber = 0;
- m_nDebugSectionNumber = nNumber++;
-#endif
-
- for ( sal_Int32 nBorder = 0; nBorder < 4; ++nBorder )
- {
- m_nBorderDistances[nBorder] = -1;
- m_bBorderShadows[nBorder] = false;
- }
- // todo: set defaults in ApplyPropertiesToPageStyles
- // initialize defaults
- PaperInfo aLetter( PAPER_LETTER );
- // page height, 1/100mm
- Insert( PROP_HEIGHT, uno::makeAny( static_cast<sal_Int32>(aLetter.getHeight()) ) );
- // page width, 1/100mm
- Insert( PROP_WIDTH, uno::makeAny( static_cast<sal_Int32>(aLetter.getWidth()) ) );
- // page left margin, default 0x5a0 (1440) twip -> 2540 1/100 mm
- Insert( PROP_LEFT_MARGIN, uno::makeAny( sal_Int32(2540) ) );
- // page right margin, default 0x5a0 (1440) twip -> 2540 1/100 mm
- Insert( PROP_RIGHT_MARGIN, uno::makeAny( sal_Int32(2540) ) );
- // page top margin, default 0x5a0 (1440) twip -> 2540 1/100 mm
- Insert( PROP_TOP_MARGIN, uno::makeAny( sal_Int32(2540) ) );
- // page bottom margin, default 0x5a0 (1440) twip -> 2540 1/100 mm
- Insert( PROP_BOTTOM_MARGIN, uno::makeAny( sal_Int32(2540) ) );
- // page style layout
- Insert( PROP_PAGE_STYLE_LAYOUT, uno::makeAny( style::PageStyleLayout_ALL ) );
- uno::Any aFalse( uno::makeAny( false ) );
- Insert( PROP_GRID_DISPLAY, aFalse );
- Insert( PROP_GRID_PRINT, aFalse );
- Insert( PROP_GRID_MODE, uno::makeAny( text::TextGridMode::NONE ) );
-
- if ( m_bIsFirstSection )
- {
- m_sFirstPageStyleName = getPropertyName( PROP_FIRST_PAGE );
- m_sFollowPageStyleName = getPropertyName( PROP_STANDARD );
- }
-}
-
-uno::Reference< beans::XPropertySet > SectionPropertyMap::GetPageStyle( DomainMapper_Impl& rDM_Impl,
- bool bFirst )
-{
- const uno::Reference< container::XNameContainer >& xPageStyles = rDM_Impl.GetPageStyles();
- const uno::Reference < lang::XMultiServiceFactory >& xTextFactory = rDM_Impl.GetTextFactory();
- uno::Reference< beans::XPropertySet > xRet;
- try
- {
- if ( bFirst )
- {
- if ( m_sFirstPageStyleName.isEmpty() && xPageStyles.is() )
- {
- assert( !rDM_Impl.IsInFootOrEndnote() && "Don't create useless page styles" );
- m_sFirstPageStyleName = rDM_Impl.GetUnusedPageStyleName();
- m_aFirstPageStyle.set( xTextFactory->createInstance( "com.sun.star.style.PageStyle" ),
- uno::UNO_QUERY );
-
- // Call insertByName() before GetPageStyle(), otherwise the
- // first and the follow page style will have the same name, and
- // insertByName() will fail.
- if ( xPageStyles.is() )
- xPageStyles->insertByName( m_sFirstPageStyleName, uno::makeAny( m_aFirstPageStyle ) );
-
- // Ensure that m_aFollowPageStyle has been created
- GetPageStyle( rDM_Impl, false );
- // Chain m_aFollowPageStyle to be after m_aFirstPageStyle
- m_aFirstPageStyle->setPropertyValue( "FollowStyle",
- uno::makeAny( m_sFollowPageStyleName ) );
- }
- else if ( !m_aFirstPageStyle.is() && xPageStyles.is() )
- {
- xPageStyles->getByName( m_sFirstPageStyleName ) >>= m_aFirstPageStyle;
- }
- xRet = m_aFirstPageStyle;
- }
- else
- {
- if ( m_sFollowPageStyleName.isEmpty() && xPageStyles.is() )
- {
- assert( !rDM_Impl.IsInFootOrEndnote() && "Don't create useless page styles" );
- m_sFollowPageStyleName = rDM_Impl.GetUnusedPageStyleName();
- m_aFollowPageStyle.set( xTextFactory->createInstance( "com.sun.star.style.PageStyle" ),
- uno::UNO_QUERY );
- xPageStyles->insertByName( m_sFollowPageStyleName, uno::makeAny( m_aFollowPageStyle ) );
- }
- else if ( !m_aFollowPageStyle.is() && xPageStyles.is() )
- {
- xPageStyles->getByName( m_sFollowPageStyleName ) >>= m_aFollowPageStyle;
- }
- xRet = m_aFollowPageStyle;
- }
-
- }
- catch ( const uno::Exception& )
- {
- DBG_UNHANDLED_EXCEPTION( "writerfilter" );
- }
-
- return xRet;
-}
-
-void SectionPropertyMap::SetBorder( BorderPosition ePos, sal_Int32 nLineDistance, const table::BorderLine2& rBorderLine, bool bShadow )
-{
- m_oBorderLines[ePos] = rBorderLine;
- m_nBorderDistances[ePos] = nLineDistance;
- m_bBorderShadows[ePos] = bShadow;
-}
-
-void SectionPropertyMap::ApplyBorderToPageStyles( DomainMapper_Impl& rDM_Impl,
- BorderApply eBorderApply, BorderOffsetFrom eOffsetFrom )
-{
- /*
- page border applies to:
- nIntValue & 0x07 ->
- 0 all pages in this section
- 1 first page in this section
- 2 all pages in this section but first
- 3 whole document (all sections)
- nIntValue & 0x18 -> page border depth 0 - in front 1- in back
- nIntValue & 0xe0 ->
- page border offset from:
- 0 offset from text
- 1 offset from edge of page
- */
- uno::Reference< beans::XPropertySet > xFirst;
- uno::Reference< beans::XPropertySet > xSecond;
- // todo: negative spacing (from ww8par6.cxx)
- switch ( eBorderApply )
- {
- case BorderApply::ToAllInSection: // all styles
- if ( !m_sFollowPageStyleName.isEmpty() )
- xFirst = GetPageStyle( rDM_Impl, false );
- if ( !m_sFirstPageStyleName.isEmpty() )
- xSecond = GetPageStyle( rDM_Impl, true );
- break;
- case BorderApply::ToFirstPageInSection: // first page
- if ( !m_sFirstPageStyleName.isEmpty() )
- xFirst = GetPageStyle( rDM_Impl, true );
- break;
- case BorderApply::ToAllButFirstInSection: // left and right
- if ( !m_sFollowPageStyleName.isEmpty() )
- xFirst = GetPageStyle( rDM_Impl, false );
- break;
- default:
- return;
- }
-
- // has to be sorted like enum BorderPosition: l-r-t-b
- const PropertyIds aBorderIds[4] =
- {
- PROP_LEFT_BORDER,
- PROP_RIGHT_BORDER,
- PROP_TOP_BORDER,
- PROP_BOTTOM_BORDER
- };
-
- const PropertyIds aBorderDistanceIds[4] =
- {
- PROP_LEFT_BORDER_DISTANCE,
- PROP_RIGHT_BORDER_DISTANCE,
- PROP_TOP_BORDER_DISTANCE,
- PROP_BOTTOM_BORDER_DISTANCE
- };
-
- const PropertyIds aMarginIds[4] =
- {
- PROP_LEFT_MARGIN,
- PROP_RIGHT_MARGIN,
- PROP_TOP_MARGIN,
- PROP_BOTTOM_MARGIN
- };
-
- for ( sal_Int32 nBorder = 0; nBorder < 4; ++nBorder )
- {
- if ( m_oBorderLines[nBorder] )
- {
- const OUString sBorderName = getPropertyName( aBorderIds[nBorder] );
- if ( xFirst.is() )
- xFirst->setPropertyValue( sBorderName, uno::makeAny( *m_oBorderLines[nBorder] ) );
- if ( xSecond.is() )
- xSecond->setPropertyValue( sBorderName, uno::makeAny( *m_oBorderLines[nBorder] ) );
- }
- if ( m_nBorderDistances[nBorder] >= 0 )
- {
- sal_uInt32 nLineWidth = 0;
- if ( m_oBorderLines[nBorder] )
- nLineWidth = m_oBorderLines[nBorder]->LineWidth;
- if ( xFirst.is() )
- SetBorderDistance( xFirst, aMarginIds[nBorder], aBorderDistanceIds[nBorder],
- m_nBorderDistances[nBorder], eOffsetFrom, nLineWidth );
- if ( xSecond.is() )
- SetBorderDistance( xSecond, aMarginIds[nBorder], aBorderDistanceIds[nBorder],
- m_nBorderDistances[nBorder], eOffsetFrom, nLineWidth );
- }
- }
-
- if ( m_bBorderShadows[BORDER_RIGHT] )
- {
- table::ShadowFormat aFormat = getShadowFromBorder( *m_oBorderLines[BORDER_RIGHT] );
- if ( xFirst.is() )
- xFirst->setPropertyValue( getPropertyName( PROP_SHADOW_FORMAT ), uno::makeAny( aFormat ) );
- if ( xSecond.is() )
- xSecond->setPropertyValue( getPropertyName( PROP_SHADOW_FORMAT ), uno::makeAny( aFormat ) );
- }
-}
-
-table::ShadowFormat PropertyMap::getShadowFromBorder( const table::BorderLine2& rBorder )
-{
- // In Word UI, shadow is a boolean property, in OOXML, it's a boolean
- // property of each 4 border type, finally in Writer the border is a
- // property of the page style, with shadow location, distance and
- // color. See SwWW8ImplReader::SetShadow().
- table::ShadowFormat aFormat;
- aFormat.Color = sal_Int32(COL_BLACK);
- aFormat.Location = table::ShadowLocation_BOTTOM_RIGHT;
- aFormat.ShadowWidth = rBorder.LineWidth;
- return aFormat;
-}
-
-void SectionPropertyMap::SetBorderDistance( const uno::Reference< beans::XPropertySet >& xStyle,
- PropertyIds eMarginId,
- PropertyIds eDistId,
- sal_Int32 nDistance,
- BorderOffsetFrom eOffsetFrom,
- sal_uInt32 nLineWidth )
-{
- if (!xStyle.is())
- return;
- const OUString sMarginName = getPropertyName( eMarginId );
- const OUString sBorderDistanceName = getPropertyName( eDistId );
- uno::Any aMargin = xStyle->getPropertyValue( sMarginName );
- sal_Int32 nMargin = 0;
- aMargin >>= nMargin;
- editeng::BorderDistanceFromWord(eOffsetFrom == BorderOffsetFrom::Edge, nMargin, nDistance,
- nLineWidth);
-
- // Change the margins with the border distance
- uno::Reference< beans::XMultiPropertySet > xMultiSet( xStyle, uno::UNO_QUERY_THROW );
- uno::Sequence<OUString> aProperties { sMarginName, sBorderDistanceName };
- uno::Sequence<uno::Any> aValues { uno::makeAny( nMargin ), uno::makeAny( nDistance ) };
- xMultiSet->setPropertyValues( aProperties, aValues );
-}
-
-void SectionPropertyMap::DontBalanceTextColumns()
-{
- try
- {
- if ( m_xColumnContainer.is() )
- m_xColumnContainer->setPropertyValue( "DontBalanceTextColumns", uno::makeAny( true ) );
- }
- catch ( const uno::Exception& )
- {
- TOOLS_WARN_EXCEPTION( "writerfilter", "SectionPropertyMap::DontBalanceTextColumns" );
- }
-}
-
-void SectionPropertyMap::ApplySectionProperties( const uno::Reference< beans::XPropertySet >& xSection, DomainMapper_Impl& /*rDM_Impl*/ )
-{
- try
- {
- if ( xSection.is() )
- {
- std::optional< PropertyMap::Property > pProp = getProperty( PROP_WRITING_MODE );
- if ( pProp )
- xSection->setPropertyValue( "WritingMode", pProp->second );
- }
- }
- catch ( uno::Exception& )
- {
- DBG_UNHANDLED_EXCEPTION("writerfilter", "Exception in SectionPropertyMap::ApplySectionProperties");
- }
-}
-
-void SectionPropertyMap::ApplyProtectionProperties( uno::Reference< beans::XPropertySet >& xSection, DomainMapper_Impl& rDM_Impl )
-{
- try
- {
- // Word implements section protection differently than LO.
- // PROP_IS_PROTECTED only applies if global setting GetProtectForm is enabled.
- bool bIsProtected = rDM_Impl.GetSettingsTable()->GetProtectForm();
- if ( bIsProtected )
- {
- // If form protection is enabled then section protection is enabled, unless explicitly disabled
- if ( isSet(PROP_IS_PROTECTED) )
- getProperty(PROP_IS_PROTECTED)->second >>= bIsProtected;
- if ( !xSection.is() )
- xSection = rDM_Impl.appendTextSectionAfter( m_xStartingRange );
- if ( xSection.is() )
- xSection->setPropertyValue( getPropertyName(PROP_IS_PROTECTED), uno::makeAny(bIsProtected) );
- }
- }
- catch ( uno::Exception& )
- {
- DBG_UNHANDLED_EXCEPTION("writerfilter", "ApplyProtectionProperties failed setting PROP_IS_PROTECTED");
- }
-}
-
-uno::Reference< text::XTextColumns > SectionPropertyMap::ApplyColumnProperties( const uno::Reference< beans::XPropertySet >& xColumnContainer,
- DomainMapper_Impl& rDM_Impl )
-{
- uno::Reference< text::XTextColumns > xColumns;
- assert( m_nColumnCount > 1 && "ApplyColumnProperties called without any columns" );
- try
- {
- const OUString sTextColumns = getPropertyName( PROP_TEXT_COLUMNS );
- if ( xColumnContainer.is() )
- xColumnContainer->getPropertyValue( sTextColumns ) >>= xColumns;
- uno::Reference< beans::XPropertySet > xColumnPropSet( xColumns, uno::UNO_QUERY_THROW );
- if ( !m_bEvenlySpaced &&
- ( sal_Int32(m_aColWidth.size()) == m_nColumnCount ) &&
- ( (sal_Int32(m_aColDistance.size()) == m_nColumnCount - 1) || (sal_Int32(m_aColDistance.size()) == m_nColumnCount) ) )
- {
- // the column width in word is an absolute value, in OOo it's relative
- // the distances are both absolute
- sal_Int32 nColSum = 0;
- for ( sal_Int32 nCol = 0; nCol < m_nColumnCount; ++nCol )
- {
- nColSum += m_aColWidth[nCol];
- if ( nCol )
- nColSum += m_aColDistance[nCol - 1];
- }
-
- sal_Int32 nRefValue = xColumns->getReferenceValue();
- double fRel = nColSum ? double( nRefValue ) / double( nColSum ) : 0.0;
- uno::Sequence< text::TextColumn > aColumns( m_nColumnCount );
- text::TextColumn* pColumn = aColumns.getArray();
-
- nColSum = 0;
- for ( sal_Int32 nCol = 0; nCol < m_nColumnCount; ++nCol )
- {
- const double fLeft = nCol ? m_aColDistance[nCol - 1] / 2 : 0;
- pColumn[nCol].LeftMargin = fLeft;
- const double fRight = (nCol == m_nColumnCount - 1) ? 0 : m_aColDistance[nCol] / 2;
- pColumn[nCol].RightMargin = fRight;
- const double fWidth = m_aColWidth[nCol];
- pColumn[nCol].Width = (fWidth + fLeft + fRight) * fRel;
- nColSum += pColumn[nCol].Width;
- }
- if ( nColSum != nRefValue )
- pColumn[m_nColumnCount - 1].Width += (nRefValue - nColSum);
- assert( pColumn[m_nColumnCount - 1].Width >= 0 );
-
- xColumns->setColumns( aColumns );
- }
- else
- {
- xColumns->setColumnCount( m_nColumnCount );
- xColumnPropSet->setPropertyValue( getPropertyName( PROP_AUTOMATIC_DISTANCE ), uno::makeAny( m_nColumnDistance ) );
- }
-
- if ( m_bSeparatorLineIsOn )
- {
- xColumnPropSet->setPropertyValue( "SeparatorLineIsOn", uno::makeAny( true ) );
- xColumnPropSet->setPropertyValue( "SeparatorLineVerticalAlignment", uno::makeAny( style::VerticalAlignment_TOP ) );
- xColumnPropSet->setPropertyValue( "SeparatorLineRelativeHeight", uno::makeAny( static_cast<sal_Int8>(100) ) );
- xColumnPropSet->setPropertyValue( "SeparatorLineColor", uno::makeAny( static_cast<sal_Int32>(COL_BLACK) ) );
- // 1 twip -> 2 mm100.
- xColumnPropSet->setPropertyValue( "SeparatorLineWidth", uno::makeAny( static_cast<sal_Int32>(2) ) );
- }
- xColumnContainer->setPropertyValue( sTextColumns, uno::makeAny( xColumns ) );
- // Set the columns to be unbalanced if that compatibility option is set or this is the last section.
- m_xColumnContainer = xColumnContainer;
- if ( rDM_Impl.GetSettingsTable()->GetNoColumnBalance() || rDM_Impl.GetIsLastSectionGroup() )
- DontBalanceTextColumns();
- }
- catch ( const uno::Exception& )
- {
- TOOLS_WARN_EXCEPTION( "writerfilter", "SectionPropertyMap::ApplyColumnProperties" );
- }
- return xColumns;
-}
-
-bool SectionPropertyMap::HasHeader( bool bFirstPage ) const
-{
- bool bRet = false;
- if ( (bFirstPage && m_aFirstPageStyle.is()) || (!bFirstPage && m_aFollowPageStyle.is()) )
- {
- if ( bFirstPage )
- m_aFirstPageStyle->getPropertyValue(
- getPropertyName( PROP_HEADER_IS_ON ) ) >>= bRet;
- else
- m_aFollowPageStyle->getPropertyValue(
- getPropertyName( PROP_HEADER_IS_ON ) ) >>= bRet;
- }
- return bRet;
-}
-
-bool SectionPropertyMap::HasFooter( bool bFirstPage ) const
-{
- bool bRet = false;
- if ( (bFirstPage && m_aFirstPageStyle.is()) || (!bFirstPage && m_aFollowPageStyle.is()) )
- {
- if ( bFirstPage )
- m_aFirstPageStyle->getPropertyValue( getPropertyName( PROP_FOOTER_IS_ON ) ) >>= bRet;
- else
- m_aFollowPageStyle->getPropertyValue( getPropertyName( PROP_FOOTER_IS_ON ) ) >>= bRet;
- }
- return bRet;
-}
-
-#define MIN_HEAD_FOOT_HEIGHT 100 // minimum header/footer height
-
-void SectionPropertyMap::CopyHeaderFooterTextProperty( const uno::Reference< beans::XPropertySet >& xPrevStyle,
- const uno::Reference< beans::XPropertySet >& xStyle,
- PropertyIds ePropId )
-{
- try {
- OUString sName = getPropertyName( ePropId );
-
- SAL_INFO( "writerfilter", "Copying " << sName );
- uno::Reference< text::XTextCopy > xTxt;
- if ( xStyle.is() )
- xTxt.set( xStyle->getPropertyValue( sName ), uno::UNO_QUERY_THROW );
-
- uno::Reference< text::XTextCopy > xPrevTxt;
- if ( xPrevStyle.is() )
- xPrevTxt.set( xPrevStyle->getPropertyValue( sName ), uno::UNO_QUERY_THROW );
-
- xTxt->copyText( xPrevTxt );
- }
- catch ( const uno::Exception& )
- {
- TOOLS_INFO_EXCEPTION( "writerfilter", "An exception occurred in SectionPropertyMap::CopyHeaderFooterTextProperty( )" );
- }
-}
-
-// Copy headers and footers from the previous page style.
-void SectionPropertyMap::CopyHeaderFooter( const uno::Reference< beans::XPropertySet >& xPrevStyle,
- const uno::Reference< beans::XPropertySet >& xStyle,
- bool bOmitRightHeader,
- bool bOmitLeftHeader,
- bool bOmitRightFooter,
- bool bOmitLeftFooter )
-{
- bool bHasPrevHeader = false;
- bool bHeaderIsShared = true;
- OUString sHeaderIsOn = getPropertyName( PROP_HEADER_IS_ON );
- OUString sHeaderIsShared = getPropertyName( PROP_HEADER_IS_SHARED );
- if ( xPrevStyle.is() )
- {
- xPrevStyle->getPropertyValue( sHeaderIsOn ) >>= bHasPrevHeader;
- xPrevStyle->getPropertyValue( sHeaderIsShared ) >>= bHeaderIsShared;
- }
-
- if ( bHasPrevHeader )
- {
- uno::Reference< beans::XMultiPropertySet > xMultiSet( xStyle, uno::UNO_QUERY_THROW );
- uno::Sequence<OUString> aProperties { sHeaderIsOn, sHeaderIsShared };
- uno::Sequence<uno::Any> aValues { uno::makeAny( true ), uno::makeAny( bHeaderIsShared ) };
- xMultiSet->setPropertyValues( aProperties, aValues );
- if ( !bOmitRightHeader )
- {
- CopyHeaderFooterTextProperty( xPrevStyle, xStyle,
- PROP_HEADER_TEXT );
- }
- if ( !bHeaderIsShared && !bOmitLeftHeader )
- {
- CopyHeaderFooterTextProperty( xPrevStyle, xStyle,
- PROP_HEADER_TEXT_LEFT );
- }
- }
-
- bool bHasPrevFooter = false;
- bool bFooterIsShared = true;
- OUString sFooterIsOn = getPropertyName( PROP_FOOTER_IS_ON );
- OUString sFooterIsShared = getPropertyName( PROP_FOOTER_IS_SHARED );
- if ( xPrevStyle.is() )
- {
- xPrevStyle->getPropertyValue( sFooterIsOn ) >>= bHasPrevFooter;
- xPrevStyle->getPropertyValue( sFooterIsShared ) >>= bFooterIsShared;
- }
-
- if ( !bHasPrevFooter )
- return;
-
- uno::Reference< beans::XMultiPropertySet > xMultiSet( xStyle, uno::UNO_QUERY_THROW );
- uno::Sequence<OUString> aProperties { sFooterIsOn, sFooterIsShared };
- uno::Sequence<uno::Any> aValues { uno::makeAny( true ), uno::makeAny( bFooterIsShared ) };
- xMultiSet->setPropertyValues( aProperties, aValues );
- if ( !bOmitRightFooter )
- {
- CopyHeaderFooterTextProperty( xPrevStyle, xStyle,
- PROP_FOOTER_TEXT );
- }
- if ( !bFooterIsShared && !bOmitLeftFooter )
- {
- CopyHeaderFooterTextProperty( xPrevStyle, xStyle,
- PROP_FOOTER_TEXT_LEFT );
- }
-}
-
-// Copy header and footer content from the previous docx section as needed.
-//
-// Any headers and footers which were not defined in this docx section
-// should be "linked" with the corresponding header or footer from the
-// previous section. LO does not support linking of header/footer content
-// across page styles so we just copy the content from the previous section.
-void SectionPropertyMap::CopyLastHeaderFooter( bool bFirstPage, DomainMapper_Impl& rDM_Impl )
-{
- SAL_INFO( "writerfilter", "START>>> SectionPropertyMap::CopyLastHeaderFooter()" );
- SectionPropertyMap* pLastContext = rDM_Impl.GetLastSectionContext();
- if ( pLastContext )
- {
- uno::Reference< beans::XPropertySet > xPrevStyle = pLastContext->GetPageStyle( rDM_Impl,
- bFirstPage );
- uno::Reference< beans::XPropertySet > xStyle = GetPageStyle( rDM_Impl,
- bFirstPage );
-
- if ( bFirstPage )
- {
- CopyHeaderFooter( xPrevStyle, xStyle,
- !m_bFirstPageHeaderLinkToPrevious, true,
- !m_bFirstPageFooterLinkToPrevious, true );
- }
- else
- {
- CopyHeaderFooter( xPrevStyle, xStyle,
- !m_bDefaultHeaderLinkToPrevious,
- !m_bEvenPageHeaderLinkToPrevious,
- !m_bDefaultFooterLinkToPrevious,
- !m_bEvenPageFooterLinkToPrevious );
- }
- }
- SAL_INFO( "writerfilter", "END>>> SectionPropertyMap::CopyLastHeaderFooter()" );
-}
-
-void SectionPropertyMap::PrepareHeaderFooterProperties( bool bFirstPage )
-{
- bool bCopyFirstToFollow = bFirstPage && m_bTitlePage && m_aFollowPageStyle.is();
-
- sal_Int32 nTopMargin = m_nTopMargin;
- sal_Int32 nHeaderTop = m_nHeaderTop;
- if ( HasHeader( bFirstPage ) )
- {
- nTopMargin = nHeaderTop;
- if ( m_nTopMargin > 0 && m_nTopMargin > nHeaderTop )
- nHeaderTop = m_nTopMargin - nHeaderTop;
- else
- nHeaderTop = 0;
-
- // minimum header height 1mm
- if ( nHeaderTop < MIN_HEAD_FOOT_HEIGHT )
- nHeaderTop = MIN_HEAD_FOOT_HEIGHT;
- }
-
-
- if ( m_nTopMargin >= 0 ) //fixed height header -> see WW8Par6.hxx
- {
- Insert( PROP_HEADER_IS_DYNAMIC_HEIGHT, uno::makeAny( true ) );
- Insert( PROP_HEADER_DYNAMIC_SPACING, uno::makeAny( true ) );
- Insert( PROP_HEADER_BODY_DISTANCE, uno::makeAny( nHeaderTop - MIN_HEAD_FOOT_HEIGHT ) );// ULSpace.Top()
- Insert( PROP_HEADER_HEIGHT, uno::makeAny( nHeaderTop ) );
-
- if (bCopyFirstToFollow && HasHeader(/*bFirstPage=*/true))
- {
- m_aFollowPageStyle->setPropertyValue("HeaderDynamicSpacing",
- getProperty(PROP_HEADER_DYNAMIC_SPACING)->second);
- m_aFollowPageStyle->setPropertyValue("HeaderHeight",
- getProperty(PROP_HEADER_HEIGHT)->second);
- }
- }
- else
- {
- //todo: old filter fakes a frame into the header/footer to support overlapping
- //current setting is completely wrong!
- Insert( PROP_HEADER_HEIGHT, uno::makeAny( nHeaderTop ) );
- Insert( PROP_HEADER_BODY_DISTANCE, uno::makeAny( m_nTopMargin - nHeaderTop ) );
- Insert( PROP_HEADER_IS_DYNAMIC_HEIGHT, uno::makeAny( false ) );
- Insert( PROP_HEADER_DYNAMIC_SPACING, uno::makeAny( false ) );
- }
-
- sal_Int32 nBottomMargin = m_nBottomMargin;
- sal_Int32 nHeaderBottom = m_nHeaderBottom;
- if ( HasFooter( bFirstPage ) )
- {
- nBottomMargin = nHeaderBottom;
- if ( m_nBottomMargin > 0 && m_nBottomMargin > nHeaderBottom )
- nHeaderBottom = m_nBottomMargin - nHeaderBottom;
- else
- nHeaderBottom = 0;
- if ( nHeaderBottom < MIN_HEAD_FOOT_HEIGHT )
- nHeaderBottom = MIN_HEAD_FOOT_HEIGHT;
- }
-
- if ( m_nBottomMargin >= 0 ) //fixed height footer -> see WW8Par6.hxx
- {
- Insert( PROP_FOOTER_IS_DYNAMIC_HEIGHT, uno::makeAny( true ) );
- Insert( PROP_FOOTER_DYNAMIC_SPACING, uno::makeAny( true ) );
- Insert( PROP_FOOTER_BODY_DISTANCE, uno::makeAny( nHeaderBottom - MIN_HEAD_FOOT_HEIGHT ) );
- Insert( PROP_FOOTER_HEIGHT, uno::makeAny( nHeaderBottom ) );
-
- if (bCopyFirstToFollow && HasFooter(/*bFirstPage=*/true))
- {
- m_aFollowPageStyle->setPropertyValue("FooterDynamicSpacing",
- getProperty(PROP_FOOTER_DYNAMIC_SPACING)->second);
- m_aFollowPageStyle->setPropertyValue("FooterHeight",
- getProperty(PROP_FOOTER_HEIGHT)->second);
- }
- }
- else
- {
- //todo: old filter fakes a frame into the header/footer to support overlapping
- //current setting is completely wrong!
- Insert( PROP_FOOTER_IS_DYNAMIC_HEIGHT, uno::makeAny( false ) );
- Insert( PROP_FOOTER_DYNAMIC_SPACING, uno::makeAny( false ) );
- Insert( PROP_FOOTER_HEIGHT, uno::makeAny( m_nBottomMargin - nHeaderBottom ) );
- Insert( PROP_FOOTER_BODY_DISTANCE, uno::makeAny( nHeaderBottom ) );
- }
-
- //now set the top/bottom margin for the follow page style
- Insert( PROP_TOP_MARGIN, uno::makeAny( std::max<sal_Int32>(nTopMargin, 0) ) );
- Insert( PROP_BOTTOM_MARGIN, uno::makeAny( std::max<sal_Int32>(nBottomMargin, 0) ) );
-}
-
-static uno::Reference< beans::XPropertySet > lcl_GetRangeProperties( bool bIsFirstSection,
- DomainMapper_Impl& rDM_Impl,
- const uno::Reference< text::XTextRange >& xStartingRange )
-{
- uno::Reference< beans::XPropertySet > xRangeProperties;
- if ( bIsFirstSection && rDM_Impl.GetBodyText().is() )
- {
- uno::Reference< container::XEnumerationAccess > xEnumAccess( rDM_Impl.GetBodyText(), uno::UNO_QUERY_THROW );
- uno::Reference< container::XEnumeration > xEnum = xEnumAccess->createEnumeration();
- xRangeProperties.set( xEnum->nextElement(), uno::UNO_QUERY_THROW );
- if ( rDM_Impl.GetIsDummyParaAddedForTableInSection() && xEnum->hasMoreElements() )
- xRangeProperties.set( xEnum->nextElement(), uno::UNO_QUERY_THROW );
- }
- else if ( xStartingRange.is() )
- xRangeProperties.set( xStartingRange, uno::UNO_QUERY_THROW );
- return xRangeProperties;
-}
-
-void SectionPropertyMap::HandleMarginsHeaderFooter( bool bFirstPage, DomainMapper_Impl& rDM_Impl )
-{
- Insert( PROP_LEFT_MARGIN, uno::makeAny( m_nLeftMargin ) );
- Insert( PROP_RIGHT_MARGIN, uno::makeAny( m_nRightMargin ) );
-
- if ( rDM_Impl.m_oBackgroundColor )
- Insert( PROP_BACK_COLOR, uno::makeAny( *rDM_Impl.m_oBackgroundColor ) );
-
- // Check for missing footnote separator only in case there is at least
- // one footnote.
- if (rDM_Impl.m_bHasFtn && !rDM_Impl.m_bHasFtnSep)
- {
- // Set footnote line width to zero, document has no footnote separator.
- Insert(PROP_FOOTNOTE_LINE_RELATIVE_WIDTH, uno::makeAny(sal_Int32(0)));
- }
- if ( rDM_Impl.m_bHasFtnSep )
- {
- //If default paragraph style is RTL, footnote separator should be right aligned
- //and for RTL locales, LTR default paragraph style should present a left aligned footnote separator
- try
- {
- uno::Reference<style::XStyleFamiliesSupplier> xStylesSupplier(rDM_Impl.GetTextDocument(), uno::UNO_QUERY);
- if ( xStylesSupplier.is() )
- {
- uno::Reference<container::XNameAccess> xStyleFamilies = xStylesSupplier->getStyleFamilies();
- uno::Reference<container::XNameAccess> xParagraphStyles;
- if ( xStyleFamilies.is() )
- xStyleFamilies->getByName("ParagraphStyles") >>= xParagraphStyles;
- uno::Reference<beans::XPropertySet> xStandard;
- if ( xParagraphStyles.is() )
- xParagraphStyles->getByName("Standard") >>= xStandard;
- if ( xStandard.is() )
- {
- sal_Int16 aWritingMode(0);
- xStandard->getPropertyValue( getPropertyName(PROP_WRITING_MODE) ) >>= aWritingMode;
- if( aWritingMode == text::WritingMode2::RL_TB )
- Insert( PROP_FOOTNOTE_LINE_ADJUST, uno::makeAny( sal_Int16(text::HorizontalAdjust_RIGHT) ), false );
- else
- Insert( PROP_FOOTNOTE_LINE_ADJUST, uno::makeAny( sal_Int16(text::HorizontalAdjust_LEFT) ), false );
- }
- }
- }
- catch ( const uno::Exception& ) {}
- }
-
- /*** if headers/footers are available then the top/bottom margins of the
- header/footer are copied to the top/bottom margin of the page
- */
- CopyLastHeaderFooter( bFirstPage, rDM_Impl );
- PrepareHeaderFooterProperties( bFirstPage );
-}
-
-bool SectionPropertyMap::FloatingTableConversion( const DomainMapper_Impl& rDM_Impl, FloatingTableInfo& rInfo )
-{
- // This is OOXML version of the code deciding if the table needs to be
- // in a floating frame.
- // For ww8 code, see SwWW8ImplReader::FloatingTableConversion in
- // sw/source/filter/ww8/ww8par.cxx
- // The two should do the same, so if you make changes here, please check
- // that the other is in sync.
-
- // Note that this is just a list of heuristics till sw core can have a
- // table that is floating and can span over multiple pages at the same
- // time.
-
- // If there is an explicit section break right after a table, then there
- // will be no wrapping anyway.
- if (rDM_Impl.m_bConvertedTable && !rDM_Impl.GetIsLastSectionGroup() && rInfo.m_nBreakType == NS_ooxml::LN_Value_ST_SectionMark_nextPage)
- return false;
-
- sal_Int32 nPageWidth = GetPageWidth();
- sal_Int32 nTextAreaWidth = nPageWidth - GetLeftMargin() - GetRightMargin();
- // Count the layout width of the table.
- sal_Int32 nTableWidth = rInfo.m_nTableWidth;
- if (rInfo.m_nTableWidthType == text::SizeType::VARIABLE)
- {
- nTableWidth *= nTextAreaWidth / 100.0;
- }
- sal_Int32 nLeftMargin = 0;
- if ( rInfo.getPropertyValue( u"LeftMargin" ) >>= nLeftMargin )
- nTableWidth += nLeftMargin;
- sal_Int32 nRightMargin = 0;
- if ( rInfo.getPropertyValue( u"RightMargin" ) >>= nRightMargin )
- nTableWidth += nRightMargin;
-
- sal_Int16 nHoriOrientRelation = rInfo.getPropertyValue( u"HoriOrientRelation" ).get<sal_Int16>();
- sal_Int16 nVertOrientRelation = rInfo.getPropertyValue( u"VertOrientRelation" ).get<sal_Int16>();
- if ( nHoriOrientRelation == text::RelOrientation::PAGE_FRAME && nVertOrientRelation == text::RelOrientation::PAGE_FRAME )
- {
- sal_Int16 nHoriOrient = rInfo.getPropertyValue( u"HoriOrient" ).get<sal_Int16>();
- sal_Int16 nVertOrient = rInfo.getPropertyValue( u"VertOrient" ).get<sal_Int16>();
- if ( nHoriOrient == text::HoriOrientation::NONE && nVertOrient == text::VertOrientation::NONE )
- {
- // Anchor position is relative to the page horizontally and vertically as well and is an absolute position.
- // The more close we are to the left edge, the less likely there will be any wrapping.
- // The more close we are to the bottom, the more likely the table will span over to the next page
- // So if we're in the bottom left quarter, don't do any conversion.
- sal_Int32 nHoriOrientPosition = rInfo.getPropertyValue( u"HoriOrientPosition" ).get<sal_Int32>();
- sal_Int32 nVertOrientPosition = rInfo.getPropertyValue( u"VertOrientPosition" ).get<sal_Int32>();
- sal_Int32 nPageHeight = getProperty( PROP_HEIGHT )->second.get<sal_Int32>();
- if ( nHoriOrientPosition < (nPageWidth / 2) && nVertOrientPosition >( nPageHeight / 2 ) )
- return false;
- }
- }
-
- // It seems Word has a limit here, so that in case the table width is quite
- // close to the text area width, then it won't perform a wrapping, even in
- // case the content (e.g. an empty paragraph) would fit. The magic constant
- // here represents this limit.
- const sal_Int32 nMagicNumber = 469;
-
- // If the table's width is smaller than the text area width, text might
- // be next to the table and so it should behave as a floating table.
- if ( (nTableWidth + nMagicNumber) < nTextAreaWidth )
- return true;
-
- // If the position is relative to the edge of the page, then we need to check the whole
- // page width to see whether text can fit next to the table.
- if ( nHoriOrientRelation == text::RelOrientation::PAGE_FRAME )
- {
- // If the table is wide enough so that no text fits next to it, then don't create a fly
- // for the table: no wrapping will be performed anyway, but multi-page
- // tables will be broken.
- if ((nTableWidth + nMagicNumber) < (nPageWidth - std::min(GetLeftMargin(), GetRightMargin())))
- return true;
- }
-
- // If there are columns, always create the fly, otherwise the columns would
- // restrict geometry of the table.
- if ( ColumnCount() > 1 )
- return true;
-
- return false;
-}
-
-void SectionPropertyMap::InheritOrFinalizePageStyles( DomainMapper_Impl& rDM_Impl )
-{
- // if no new styles have been created for this section, inherit from the previous section,
- // otherwise apply this section's settings to the new style.
- // Ensure that FollowPage is inherited first - otherwise GetPageStyle may auto-create a follow when checking FirstPage.
- SectionPropertyMap* pLastContext = rDM_Impl.GetLastSectionContext();
- //tdf124637 TODO: identify and skip special sections (like footnotes/endnotes)
- if ( pLastContext && m_sFollowPageStyleName.isEmpty() )
- m_sFollowPageStyleName = pLastContext->GetPageStyleName();
- else
- {
- HandleMarginsHeaderFooter( /*bFirst=*/false, rDM_Impl );
- GetPageStyle( rDM_Impl, /*bFirst=*/false );
- if ( rDM_Impl.IsNewDoc() && m_aFollowPageStyle.is() )
- ApplyProperties_( m_aFollowPageStyle );
- }
-
- // FirstPageStyle may only be inherited if it will not be used or re-linked to a different follow
- if ( !m_bTitlePage && pLastContext && m_sFirstPageStyleName.isEmpty() )
- m_sFirstPageStyleName = pLastContext->GetPageStyleName( /*bFirst=*/true );
- else
- {
- HandleMarginsHeaderFooter( /*bFirst=*/true, rDM_Impl );
- GetPageStyle( rDM_Impl, /*bFirst=*/true );
- if ( rDM_Impl.IsNewDoc() && m_aFirstPageStyle.is() )
- ApplyProperties_( m_aFirstPageStyle );
-
- // Chain m_aFollowPageStyle to be after m_aFirstPageStyle
- m_aFirstPageStyle->setPropertyValue( "FollowStyle", uno::makeAny( m_sFollowPageStyleName ) );
- }
-}
-
-void SectionPropertyMap::HandleIncreasedAnchoredObjectSpacing(DomainMapper_Impl& rDM_Impl)
-{
- // Ignore Word 2010 and older.
- if (rDM_Impl.GetSettingsTable()->GetWordCompatibilityMode() < 15)
- return;
-
- sal_Int32 nPageWidth = GetPageWidth();
- sal_Int32 nTextAreaWidth = nPageWidth - GetLeftMargin() - GetRightMargin();
-
- std::vector<AnchoredObjectsInfo>& rAnchoredObjectAnchors = rDM_Impl.m_aAnchoredObjectAnchors;
- for (const auto& rAnchor : rAnchoredObjectAnchors)
- {
- // Ignore this paragraph when there are not enough shapes to trigger the Word bug we
- // emulate.
- if (rAnchor.m_aAnchoredObjects.size() < 4)
- continue;
-
- // Ignore this paragraph if none of the objects are wrapped in the background.
- sal_Int32 nOpaqueCount = 0;
- for (const auto& rAnchored : rAnchor.m_aAnchoredObjects)
- {
- uno::Reference<beans::XPropertySet> xShape(rAnchored.m_xAnchoredObject, uno::UNO_QUERY);
- if (!xShape.is())
- {
- continue;
- }
-
- bool bOpaque = true;
- xShape->getPropertyValue("Opaque") >>= bOpaque;
- if (!bOpaque)
- {
- ++nOpaqueCount;
- }
- }
- if (nOpaqueCount < 1)
- {
- continue;
- }
-
- // Analyze the anchored objects of this paragraph, now that we know the
- // page width.
- sal_Int32 nShapesWidth = 0;
- for (const auto& rAnchored : rAnchor.m_aAnchoredObjects)
- {
- uno::Reference<drawing::XShape> xShape(rAnchored.m_xAnchoredObject, uno::UNO_QUERY);
- if (!xShape.is())
- continue;
-
- uno::Reference<beans::XPropertySet> xPropertySet(xShape, uno::UNO_QUERY);
- if (!xPropertySet.is())
- continue;
-
- // Ignore objects with no wrapping.
- text::WrapTextMode eWrap = text::WrapTextMode_THROUGH;
- xPropertySet->getPropertyValue("Surround") >>= eWrap;
- if (eWrap == text::WrapTextMode_THROUGH)
- continue;
-
- // Use the original left margin, in case GraphicImport::lcl_sprm() reduced the doc model
- // one to 0.
- sal_Int32 nLeftMargin = rAnchored.m_nLeftMargin;
- sal_Int32 nRightMargin = 0;
- xPropertySet->getPropertyValue("RightMargin") >>= nRightMargin;
- nShapesWidth += xShape->getSize().Width + nLeftMargin + nRightMargin;
- }
-
- // Ignore cases when we have enough horizontal space for the shapes.
- if (nTextAreaWidth > nShapesWidth)
- continue;
-
- sal_Int32 nHeight = 0;
- for (const auto& rAnchored : rAnchor.m_aAnchoredObjects)
- {
- uno::Reference<drawing::XShape> xShape(rAnchored.m_xAnchoredObject, uno::UNO_QUERY);
- if (!xShape.is())
- continue;
-
- nHeight += xShape->getSize().Height;
- }
-
- uno::Reference<beans::XPropertySet> xParagraph(rAnchor.m_xParagraph, uno::UNO_QUERY);
- if (xParagraph.is())
- {
- sal_Int32 nTopMargin = 0;
- xParagraph->getPropertyValue("ParaTopMargin") >>= nTopMargin;
- // Increase top spacing of the paragraph to match Word layout
- // behavior.
- nTopMargin = std::max(nTopMargin, nHeight);
- xParagraph->setPropertyValue("ParaTopMargin", uno::makeAny(nTopMargin));
- }
- }
- rAnchoredObjectAnchors.clear();
-}
-
-void SectionPropertyMap::CloseSectionGroup( DomainMapper_Impl& rDM_Impl )
-{
- SectionPropertyMap* pPrevSection = rDM_Impl.GetLastSectionContext();
-
- // The default section type is nextPage.
- if ( m_nBreakType == -1 )
- m_nBreakType = NS_ooxml::LN_Value_ST_SectionMark_nextPage;
- else if ( m_nBreakType == NS_ooxml::LN_Value_ST_SectionMark_nextColumn )
- {
- // Word 2013+ seems to treat a section column break as a page break all the time.
- // It always acts like a page break if there are no columns, or a different number of columns.
- // Also, if this is the first section, the break type is basically irrelevant - works best as nextPage.
- if ( rDM_Impl.GetSettingsTable()->GetWordCompatibilityMode() > 14
- || !pPrevSection
- || m_nColumnCount < 2
- || m_nColumnCount != pPrevSection->ColumnCount()
- )
- {
- m_nBreakType = NS_ooxml::LN_Value_ST_SectionMark_nextPage;
- }
- }
- else if ( m_nBreakType == NS_ooxml::LN_Value_ST_SectionMark_continuous )
- {
- // if page orientation differs from previous section, it can't be treated as continuous
- if ( pPrevSection )
- {
- bool bIsLandscape = false;
- std::optional< PropertyMap::Property > pProp = getProperty( PROP_IS_LANDSCAPE );
- if ( pProp )
- pProp->second >>= bIsLandscape;
-
- bool bPrevIsLandscape = false;
- pProp = pPrevSection->getProperty( PROP_IS_LANDSCAPE );
- if ( pProp )
- pProp->second >>= bPrevIsLandscape;
-
- if ( bIsLandscape != bPrevIsLandscape )
- m_nBreakType = NS_ooxml::LN_Value_ST_SectionMark_nextPage;
- }
- }
-
- // Text area width is known at the end of a section: decide if tables should be converted or not.
- std::vector<FloatingTableInfo>& rPendingFloatingTables = rDM_Impl.m_aPendingFloatingTables;
- uno::Reference<text::XTextAppendAndConvert> xBodyText( rDM_Impl.GetBodyText(), uno::UNO_QUERY );
- for ( FloatingTableInfo & rInfo : rPendingFloatingTables )
- {
- rInfo.m_nBreakType = m_nBreakType;
- if ( FloatingTableConversion( rDM_Impl, rInfo ) )
- {
- std::vector<css::uno::Any> aFramedRedlines = rDM_Impl.aFramedRedlines;
- try
- {
- // convert redline ranges to cursor movement and character length
- std::vector<sal_Int32> redPos, redLen;
- std::vector<OUString> redCell;
- std::vector<OUString> redTable;
- for( size_t i = 0; i < aFramedRedlines.size(); i+=3)
- {
- uno::Reference<text::XText> xCell;
- uno::Reference< text::XTextRange > xRange;
- aFramedRedlines[i] >>= xRange;
- uno::Reference< beans::XPropertySet > xRangeProperties;
- if ( xRange.is() )
- {
- OUString sTableName;
- OUString sCellName;
- xRangeProperties.set( xRange, uno::UNO_QUERY_THROW );
- if (xRangeProperties->getPropertySetInfo()->hasPropertyByName("TextTable"))
- {
- uno::Any aTable = xRangeProperties->getPropertyValue("TextTable");
- if ( aTable != uno::Any() )
- {
- uno::Reference<text::XTextTable> xTable;
- aTable >>= xTable;
- uno::Reference<beans::XPropertySet> xTableProperties(xTable, uno::UNO_QUERY);
- xTableProperties->getPropertyValue("TableName") >>= sTableName;
- }
- if (xRangeProperties->getPropertySetInfo()->hasPropertyByName("Cell"))
- {
- uno::Any aCell = xRangeProperties->getPropertyValue("Cell");
- if ( aCell != uno::Any() )
- {
- aCell >>= xCell;
- uno::Reference<beans::XPropertySet> xCellProperties(xCell, uno::UNO_QUERY);
- xCellProperties->getPropertyValue("CellName") >>= sCellName;
- }
- }
- }
- redTable.push_back(sTableName);
- redCell.push_back(sCellName);
- bool bOk = false;
- if (!sTableName.isEmpty() && !sCellName.isEmpty())
- {
- uno::Reference<text::XTextCursor> xRangeCursor = xCell->createTextCursorByRange( xRange );
- if ( xRangeCursor.is() )
- {
- bOk = true;
- sal_Int32 nLen = xRange->getString().getLength();
- redLen.push_back(nLen);
- xRangeCursor->gotoStart(true);
- redPos.push_back(xRangeCursor->getString().getLength() - nLen);
- }
- }
- if (!bOk)
- {
- // missing cell or failed createTextCursorByRange()
- redLen.push_back(-1);
- redPos.push_back(-1);
- }
- }
- }
-
- xBodyText->convertToTextFrame(rInfo.m_xStart, rInfo.m_xEnd,
- rInfo.m_aFrameProperties);
-
- uno::Reference<text::XTextTablesSupplier> xTextDocument(rDM_Impl.GetTextDocument(), uno::UNO_QUERY);
- uno::Reference<container::XNameAccess> xTables = xTextDocument->getTextTables();
- for( size_t i = 0; i < aFramedRedlines.size(); i+=3)
- {
- OUString sType;
- beans::PropertyValues aRedlineProperties( 3 );
- // skip failed createTextCursorByRange()
- if (redPos[i/3] == -1)
- continue;
- aFramedRedlines[i+1] >>= sType;
- aFramedRedlines[i+2] >>= aRedlineProperties;
- uno::Reference<text::XTextTable> xTable(xTables->getByName(redTable[i/3]), uno::UNO_QUERY);
- uno::Reference<text::XText> xCell(xTable->getCellByName(redCell[i/3]), uno::UNO_QUERY);
- uno::Reference<text::XTextCursor> xCrsr = xCell->createTextCursor();
- xCrsr->goRight(redPos[i/3], false);
- xCrsr->goRight(redLen[i/3], true);
- uno::Reference < text::XRedline > xRedline( xCrsr, uno::UNO_QUERY_THROW );
- xRedline->makeRedline( sType, aRedlineProperties );
- }
- }
- catch (const uno::Exception&)
- {
- DBG_UNHANDLED_EXCEPTION("writerfilter", "convertToTextFrame() failed");
- }
-
- aFramedRedlines.clear();
- }
- }
- rPendingFloatingTables.clear();
-
- try
- {
- HandleIncreasedAnchoredObjectSpacing(rDM_Impl);
- }
- catch (const uno::Exception&)
- {
- DBG_UNHANDLED_EXCEPTION("writerfilter", "HandleIncreasedAnchoredObjectSpacing() failed");
- }
-
- if ( m_nLnnMod )
- {
- bool bFirst = rDM_Impl.IsLineNumberingSet();
- rDM_Impl.SetLineNumbering( m_nLnnMod, m_nLnc, m_ndxaLnn );
- if ( m_nLnnMin > 0 || (bFirst && m_nLnc == NS_ooxml::LN_Value_ST_LineNumberRestart_newSection) )
- {
- //set the starting value at the beginning of the section
- try
- {
- uno::Reference< beans::XPropertySet > xRangeProperties;
- if ( m_xStartingRange.is() )
- {
- xRangeProperties.set( m_xStartingRange, uno::UNO_QUERY_THROW );
- }
- else
- {
- //set the start value at the beginning of the document
- xRangeProperties.set( rDM_Impl.GetTextDocument()->getText()->getStart(), uno::UNO_QUERY_THROW );
- }
- // Writer is 1-based, Word is 0-based.
- xRangeProperties->setPropertyValue(
- getPropertyName(PROP_PARA_LINE_NUMBER_START_VALUE),
- uno::makeAny(m_nLnnMin + 1));
- }
- catch ( const uno::Exception& )
- {
- DBG_UNHANDLED_EXCEPTION("writerfilter.dmapper", "Exception in SectionPropertyMap::CloseSectionGroup");
- }
- }
- }
-
- if (m_nBreakType == static_cast<sal_Int32>(NS_ooxml::LN_Value_ST_SectionMark_continuous)
- && !rDM_Impl.IsInComments())
- {
- //todo: insert a section or access the already inserted section
- uno::Reference< beans::XPropertySet > xSection =
- rDM_Impl.appendTextSectionAfter( m_xStartingRange );
- if ( xSection.is() )
- {
- if ( m_nColumnCount > 1 )
- ApplyColumnProperties( xSection, rDM_Impl );
-
- ApplyProtectionProperties( xSection, rDM_Impl );
- }
-
- try
- {
- InheritOrFinalizePageStyles( rDM_Impl );
- ApplySectionProperties( xSection, rDM_Impl ); //depends on InheritOrFinalizePageStyles
- OUString aName = m_bTitlePage ? m_sFirstPageStyleName : m_sFollowPageStyleName;
- uno::Reference< beans::XPropertySet > xRangeProperties( lcl_GetRangeProperties( m_bIsFirstSection, rDM_Impl, m_xStartingRange ) );
- if ( m_bIsFirstSection && !aName.isEmpty() && xRangeProperties.is() )
- {
- xRangeProperties->setPropertyValue( getPropertyName( PROP_PAGE_DESC_NAME ), uno::makeAny( aName ) );
- }
- else if ((!m_bFirstPageHeaderLinkToPrevious ||
- !m_bFirstPageFooterLinkToPrevious ||
- !m_bDefaultHeaderLinkToPrevious ||
- !m_bDefaultFooterLinkToPrevious ||
- !m_bEvenPageHeaderLinkToPrevious ||
- !m_bEvenPageFooterLinkToPrevious)
- && rDM_Impl.GetCurrentXText())
- { // find a node in the section that has a page break and change
- // it to apply the page style; see "nightmare scenario" in
- // wwSectionManager::InsertSegments()
- auto xTextAppend = rDM_Impl.GetCurrentXText();
- uno::Reference<container::XEnumerationAccess> const xCursor(
- xTextAppend->createTextCursorByRange(
- uno::Reference<text::XTextContent>(xSection, uno::UNO_QUERY_THROW)->getAnchor()),
- uno::UNO_QUERY_THROW);
- uno::Reference<container::XEnumeration> const xEnum(
- xCursor->createEnumeration());
- bool isFound = false;
- while (xEnum->hasMoreElements())
- {
- uno::Reference<beans::XPropertySet> xElem;
- xEnum->nextElement() >>= xElem;
- if (xElem->getPropertySetInfo()->hasPropertyByName("BreakType"))
- {
- style::BreakType bt;
- if ((xElem->getPropertyValue("BreakType") >>= bt)
- && bt == style::BreakType_PAGE_BEFORE)
- {
- // tdf#112201: do *not* use m_sFirstPageStyleName here!
- xElem->setPropertyValue(getPropertyName(PROP_PAGE_DESC_NAME),
- uno::makeAny(m_sFollowPageStyleName));
- isFound = true;
- break;
- }
- }
- }
- uno::Reference<text::XParagraphCursor> const xPCursor(xCursor,
- uno::UNO_QUERY_THROW);
- float fCharHeight = 0;
- if (!isFound)
- { // HACK: try the last paragraph of the previous section
- xPCursor->gotoPreviousParagraph(false);
- uno::Reference<beans::XPropertySet> const xPSCursor(xCursor, uno::UNO_QUERY_THROW);
- style::BreakType bt;
- if ((xPSCursor->getPropertyValue("BreakType") >>= bt)
- && bt == style::BreakType_PAGE_BEFORE)
- {
- xPSCursor->setPropertyValue(getPropertyName(PROP_PAGE_DESC_NAME),
- uno::makeAny(m_sFollowPageStyleName));
- isFound = true;
- }
- else
- {
- xPSCursor->getPropertyValue("CharHeight") >>= fCharHeight;
- }
- }
- if (!isFound && fCharHeight <= 1.0)
- {
- // If still not found, see if the last paragraph is ~invisible, and work with
- // the last-in-practice paragraph.
- xPCursor->gotoPreviousParagraph(false);
- uno::Reference<beans::XPropertySet> xPropertySet(xCursor, uno::UNO_QUERY_THROW);
- OUString aPageDescName;
- if ((xPropertySet->getPropertyValue("PageDescName") >>= aPageDescName)
- && !aPageDescName.isEmpty())
- {
- uno::Reference<beans::XPropertySet> xPageStyle(
- rDM_Impl.GetPageStyles()->getByName(aPageDescName), uno::UNO_QUERY);
- xPageStyle->setPropertyValue("FollowStyle",
- uno::makeAny(m_sFollowPageStyleName));
- }
- }
- }
- }
- catch ( const uno::Exception& )
- {
- SAL_WARN( "writerfilter", "failed to set PageDescName!" );
- }
- }
- // If the section is of type "New column" (0x01), then simply insert a column break.
- // But only if there actually are columns on the page, otherwise a column break
- // seems to be handled like a page break by MSO.
- else if (m_nBreakType == static_cast<sal_Int32>(NS_ooxml::LN_Value_ST_SectionMark_nextColumn)
- && m_nColumnCount > 1 && !rDM_Impl.IsInComments())
- {
- try
- {
- InheritOrFinalizePageStyles( rDM_Impl );
- /*TODO tdf#135343: Just inserting a column break sounds like the right idea, but the implementation is wrong.
- * Somehow, the previous column section needs to be extended to cover this new text.
- * Currently, it is completely broken, producing a no-column section that starts on a new page.
- */
- uno::Reference< beans::XPropertySet > xRangeProperties;
- if ( m_xStartingRange.is() )
- {
- xRangeProperties.set( m_xStartingRange, uno::UNO_QUERY_THROW );
- }
- else
- {
- //set the start value at the beginning of the document
- xRangeProperties.set( rDM_Impl.GetTextDocument()->getText()->getStart(), uno::UNO_QUERY_THROW );
- }
- xRangeProperties->setPropertyValue( getPropertyName( PROP_BREAK_TYPE ), uno::makeAny( style::BreakType_COLUMN_BEFORE ) );
- }
- catch ( const uno::Exception& ) {}
- }
- else if (!rDM_Impl.IsInComments())
- {
- uno::Reference< beans::XPropertySet > xSection;
- ApplyProtectionProperties( xSection, rDM_Impl );
-
- //get the properties and create appropriate page styles
- uno::Reference< beans::XPropertySet > xFollowPageStyle;
- //This part certainly is not needed for footnotes, so don't create unused page styles.
- if ( !rDM_Impl.IsInFootOrEndnote() )
- {
- xFollowPageStyle.set( GetPageStyle( rDM_Impl, false ) );
-
- HandleMarginsHeaderFooter(/*bFirstPage=*/false, rDM_Impl );
- }
-
- if ( rDM_Impl.GetSettingsTable()->GetMirrorMarginSettings() )
- {
- Insert( PROP_PAGE_STYLE_LAYOUT, uno::makeAny( style::PageStyleLayout_MIRRORED ) );
- }
- uno::Reference< text::XTextColumns > xColumns;
- if ( m_nColumnCount > 1 )
- {
- // prefer setting column properties into a section, not a page style if at all possible.
- if ( !xSection.is() )
- xSection = rDM_Impl.appendTextSectionAfter( m_xStartingRange );
- if ( xSection.is() )
- ApplyColumnProperties( xSection, rDM_Impl );
- else if ( xFollowPageStyle.is() )
- xColumns = ApplyColumnProperties( xFollowPageStyle, rDM_Impl );
- }
-
- // these BreakTypes are effectively page-breaks: don't evenly distribute text in columns before a page break;
- if ( pPrevSection && pPrevSection->ColumnCount() )
- pPrevSection->DontBalanceTextColumns();
-
- //prepare text grid properties
- sal_Int32 nHeight = 1;
- std::optional< PropertyMap::Property > pProp = getProperty( PROP_HEIGHT );
- if ( pProp )
- pProp->second >>= nHeight;
-
- sal_Int32 nWidth = 1;
- pProp = getProperty( PROP_WIDTH );
- if ( pProp )
- pProp->second >>= nWidth;
-
- text::WritingMode eWritingMode = text::WritingMode_LR_TB;
- pProp = getProperty( PROP_WRITING_MODE );
- if ( pProp )
- pProp->second >>= eWritingMode;
-
- sal_Int32 nTextAreaHeight = eWritingMode == text::WritingMode_LR_TB ?
- nHeight - m_nTopMargin - m_nBottomMargin :
- nWidth - m_nLeftMargin - m_nRightMargin;
-
- sal_Int32 nGridLinePitch = m_nGridLinePitch;
- //sep.dyaLinePitch
- if ( nGridLinePitch < 1 || nGridLinePitch > 31680 )
- {
- SAL_WARN( "writerfilter", "sep.dyaLinePitch outside legal range: " << nGridLinePitch );
- nGridLinePitch = 1;
- }
-
- const sal_Int32 nGridLines = nTextAreaHeight / nGridLinePitch;
- if ( nGridLines >= 0 && nGridLines <= SAL_MAX_INT16 )
- Insert( PROP_GRID_LINES, uno::makeAny( sal_Int16(nGridLines) ) );
-
- // PROP_GRID_MODE
- Insert( PROP_GRID_MODE, uno::makeAny( static_cast<sal_Int16> (m_nGridType) ) );
- if ( m_nGridType == text::TextGridMode::LINES_AND_CHARS )
- {
- Insert( PROP_GRID_SNAP_TO_CHARS, uno::makeAny( m_bGridSnapToChars ) );
- }
-
- sal_Int32 nCharWidth = 423; //240 twip/ 12 pt
- const StyleSheetEntryPtr pEntry = rDM_Impl.GetStyleSheetTable()->FindStyleSheetByConvertedStyleName( u"Standard" );
- if ( pEntry )
- {
- std::optional< PropertyMap::Property > pPropHeight = pEntry->pProperties->getProperty( PROP_CHAR_HEIGHT_ASIAN );
- if ( pPropHeight )
- {
- double fHeight = 0;
- if ( pPropHeight->second >>= fHeight )
- nCharWidth = ConversionHelper::convertTwipToMM100( static_cast<tools::Long>(fHeight * 20.0 + 0.5) );
- }
- }
-
- //dxtCharSpace
- if ( m_nDxtCharSpace )
- {
- sal_Int32 nCharSpace = m_nDxtCharSpace;
- //main lives in top 20 bits, and is signed.
- sal_Int32 nMain = (nCharSpace & 0xFFFFF000);
- nMain /= 0x1000;
- nCharWidth += ConversionHelper::convertTwipToMM100( nMain * 20 );
-
- sal_Int32 nFraction = (nCharSpace & 0x00000FFF);
- nFraction = (nFraction * 20) / 0xFFF;
- nCharWidth += ConversionHelper::convertTwipToMM100( nFraction );
- }
-
- if ( m_nPageNumberType >= 0 )
- Insert( PROP_NUMBERING_TYPE, uno::makeAny( m_nPageNumberType ) );
-
- // #i119558#, force to set document as standard page mode,
- // refer to ww8 import process function "SwWW8ImplReader::SetDocumentGrid"
- try
- {
- uno::Reference< beans::XPropertySet > xDocProperties;
- xDocProperties.set( rDM_Impl.GetTextDocument(), uno::UNO_QUERY_THROW );
- Insert(PROP_GRID_STANDARD_MODE, uno::makeAny(true));
- xDocProperties->setPropertyValue("DefaultPageMode", uno::makeAny(false));
- }
- catch ( const uno::Exception& )
- {
- DBG_UNHANDLED_EXCEPTION("writerfilter.dmapper", "Exception in SectionPropertyMap::CloseSectionGroup");
- }
-
- Insert( PROP_GRID_BASE_HEIGHT, uno::makeAny( nGridLinePitch ) );
- Insert( PROP_GRID_BASE_WIDTH, uno::makeAny( nCharWidth ) );
- Insert( PROP_GRID_RUBY_HEIGHT, uno::makeAny( sal_Int32( 0 ) ) );
-
- if ( rDM_Impl.IsNewDoc() && xFollowPageStyle.is() )
- ApplyProperties_( xFollowPageStyle );
-
- //todo: creating a "First Page" style depends on HasTitlePage and _fFacingPage_
- if ( m_bTitlePage )
- {
- CopyLastHeaderFooter( true, rDM_Impl );
- PrepareHeaderFooterProperties( true );
- uno::Reference< beans::XPropertySet > xFirstPageStyle = GetPageStyle(
- rDM_Impl, true );
- if ( rDM_Impl.IsNewDoc() )
- ApplyProperties_( xFirstPageStyle );
-
- if ( xColumns.is() )
- xFirstPageStyle->setPropertyValue(
- getPropertyName( PROP_TEXT_COLUMNS ), uno::makeAny( xColumns ) );
- }
-
- ApplyBorderToPageStyles( rDM_Impl, m_eBorderApply, m_eBorderOffsetFrom );
-
- try
- {
- //now apply this break at the first paragraph of this section
- uno::Reference< beans::XPropertySet > xRangeProperties( lcl_GetRangeProperties( m_bIsFirstSection, rDM_Impl, m_xStartingRange ) );
-
- // Handle page breaks with odd/even page numbering. We need to use an extra page style for setting the page style
- // to left/right, because if we set it to the normal style, we'd set it to "First Page"/"Default Style", which would
- // break them (all default pages would be only left or right).
- if ( m_nBreakType == static_cast<sal_Int32>(NS_ooxml::LN_Value_ST_SectionMark_evenPage) || m_nBreakType == static_cast<sal_Int32>(NS_ooxml::LN_Value_ST_SectionMark_oddPage) )
- {
- OUString* pageStyle = m_bTitlePage ? &m_sFirstPageStyleName : &m_sFollowPageStyleName;
- OUString evenOddStyleName = rDM_Impl.GetUnusedPageStyleName();
- uno::Reference< beans::XPropertySet > evenOddStyle(
- rDM_Impl.GetTextFactory()->createInstance( "com.sun.star.style.PageStyle" ),
- uno::UNO_QUERY );
- // Unfortunately using setParent() does not work for page styles, so make a deep copy of the page style.
- uno::Reference< beans::XPropertySet > pageProperties( m_bTitlePage ? m_aFirstPageStyle : m_aFollowPageStyle );
- uno::Reference< beans::XPropertySetInfo > pagePropertiesInfo( pageProperties->getPropertySetInfo() );
- const uno::Sequence< beans::Property > propertyList( pagePropertiesInfo->getProperties() );
- // Ignore write-only properties.
- static const o3tl::sorted_vector<OUString> aDenylist
- = { "FooterBackGraphicURL", "BackGraphicURL", "HeaderBackGraphicURL" };
- for ( const auto& rProperty : propertyList )
- {
- if ( (rProperty.Attributes & beans::PropertyAttribute::READONLY) == 0 )
- {
- if (aDenylist.find(rProperty.Name) == aDenylist.end())
- evenOddStyle->setPropertyValue(
- rProperty.Name,
- pageProperties->getPropertyValue(rProperty.Name));
- }
- }
- evenOddStyle->setPropertyValue( "FollowStyle", uno::makeAny( *pageStyle ) );
- rDM_Impl.GetPageStyles()->insertByName( evenOddStyleName, uno::makeAny( evenOddStyle ) );
- evenOddStyle->setPropertyValue( "HeaderIsOn", uno::makeAny( false ) );
- evenOddStyle->setPropertyValue( "FooterIsOn", uno::makeAny( false ) );
- CopyHeaderFooter( pageProperties, evenOddStyle );
- *pageStyle = evenOddStyleName; // And use it instead of the original one (which is set as follow of this one).
- if ( m_nBreakType == static_cast<sal_Int32>(NS_ooxml::LN_Value_ST_SectionMark_evenPage) )
- evenOddStyle->setPropertyValue( getPropertyName( PROP_PAGE_STYLE_LAYOUT ), uno::makeAny( style::PageStyleLayout_LEFT ) );
- else if ( m_nBreakType == static_cast<sal_Int32>(NS_ooxml::LN_Value_ST_SectionMark_oddPage) )
- evenOddStyle->setPropertyValue( getPropertyName( PROP_PAGE_STYLE_LAYOUT ), uno::makeAny( style::PageStyleLayout_RIGHT ) );
- }
-
- if (rDM_Impl.m_xAltChunkStartingRange.is())
- {
- xRangeProperties.set(rDM_Impl.m_xAltChunkStartingRange, uno::UNO_QUERY);
- }
- if (xRangeProperties.is() && (rDM_Impl.IsNewDoc() || rDM_Impl.IsAltChunk()))
- {
- // Avoid setting page style in case of autotext: so inserting the autotext at the
- // end of the document does not introduce an unwanted page break.
- // Also avoid setting the page style at the very beginning if it still is the default page style.
- const OUString sPageStyle = m_bTitlePage ? m_sFirstPageStyleName : m_sFollowPageStyleName;
- if (!rDM_Impl.IsReadGlossaries()
- && !rDM_Impl.IsInFootOrEndnote()
- && !(m_bIsFirstSection && sPageStyle == getPropertyName( PROP_STANDARD ) && m_nPageNumber < 0)
- )
- {
- xRangeProperties->setPropertyValue(
- getPropertyName( PROP_PAGE_DESC_NAME ),
- uno::makeAny(sPageStyle) );
- }
-
- if (0 <= m_nPageNumber)
- {
- sal_Int16 nPageNumber = static_cast< sal_Int16 >(m_nPageNumber);
- xRangeProperties->setPropertyValue(getPropertyName(PROP_PAGE_NUMBER_OFFSET),
- uno::makeAny(nPageNumber));
- }
- }
- }
- catch ( const uno::Exception& )
- {
- TOOLS_WARN_EXCEPTION( "writerfilter", "SectionPropertyMap::CloseSectionGroup" );
- }
- }
-
- // Now that the margins are known, resize relative width shapes because some shapes in LO do not support percentage-sizes
- sal_Int32 nParagraphWidth = GetPageWidth() - m_nLeftMargin - m_nRightMargin;
- if ( m_nColumnCount > 1 )
- {
- // skip custom-width columns since we don't know what column the shape is in.
- if ( !m_aColWidth.empty() )
- nParagraphWidth = 0;
- else
- nParagraphWidth = (nParagraphWidth - (m_nColumnDistance * (m_nColumnCount - 1))) / m_nColumnCount;
- }
- if ( nParagraphWidth > 0 )
- {
- const OUString sPropRelativeWidth = getPropertyName(PROP_RELATIVE_WIDTH);
- for ( const auto& xShape : m_xRelativeWidthShapes )
- {
- const uno::Reference<beans::XPropertySet> xShapePropertySet( xShape, uno::UNO_QUERY );
- if ( xShapePropertySet->getPropertySetInfo()->hasPropertyByName(sPropRelativeWidth) )
- {
- sal_uInt16 nPercent = 0;
- try
- {
- xShapePropertySet->getPropertyValue(sPropRelativeWidth) >>= nPercent;
- }
- catch (const css::uno::RuntimeException& e)
- {
- // May happen e.g. when text frame has no frame format
- // See sw/qa/extras/ooxmlimport/data/n779627.docx
- SAL_WARN("writerfilter", "Getting relative width failed. " << e.Message);
- }
- if ( nPercent )
- {
- const sal_Int32 nWidth = nParagraphWidth * nPercent / 100;
- xShape->setSize( awt::Size( nWidth, xShape->getSize().Height ) );
- }
- }
- }
- }
- m_xRelativeWidthShapes.clear();
-
- rDM_Impl.SetIsLastSectionGroup( false );
- rDM_Impl.SetIsFirstParagraphInSection( true );
-
- if ( !rDM_Impl.IsInFootOrEndnote() && !rDM_Impl.IsInComments() )
- {
- rDM_Impl.m_bHasFtn = false;
- rDM_Impl.m_bHasFtnSep = false;
- }
-}
-
-// Clear the flag that says we should take the header/footer content from
-// the previous section. This should be called when we encounter a header
-// or footer definition for this section.
-void SectionPropertyMap::ClearHeaderFooterLinkToPrevious( bool bHeader, PageType eType )
-{
- if ( bHeader )
- {
- switch ( eType )
- {
- case PAGE_FIRST: m_bFirstPageHeaderLinkToPrevious = false; break;
- case PAGE_LEFT: m_bEvenPageHeaderLinkToPrevious = false; break;
- case PAGE_RIGHT: m_bDefaultHeaderLinkToPrevious = false; break;
- // no default case as all enumeration values have been covered
- }
- }
- else
- {
- switch ( eType )
- {
- case PAGE_FIRST: m_bFirstPageFooterLinkToPrevious = false; break;
- case PAGE_LEFT: m_bEvenPageFooterLinkToPrevious = false; break;
- case PAGE_RIGHT: m_bDefaultFooterLinkToPrevious = false; break;
- }
- }
-}
-
-namespace {
-
-class NamedPropertyValue
-{
-private:
- OUString m_aName;
-
-public:
- explicit NamedPropertyValue( const OUString& i_aStr )
- : m_aName( i_aStr )
- {
- }
-
- bool operator() ( beans::PropertyValue const & aVal )
- {
- return aVal.Name == m_aName;
- }
-};
-
-}
-
-void SectionPropertyMap::ApplyProperties_( const uno::Reference< beans::XPropertySet >& xStyle )
-{
- uno::Reference< beans::XMultiPropertySet > const xMultiSet( xStyle, uno::UNO_QUERY );
-
- std::vector< OUString > vNames;
- std::vector< uno::Any > vValues;
- {
- // Convert GetPropertyValues() value into something useful
- uno::Sequence< beans::PropertyValue > vPropVals = GetPropertyValues();
-
- //Temporarily store the items that are in grab bags
- uno::Sequence< beans::PropertyValue > vCharVals;
- uno::Sequence< beans::PropertyValue > vParaVals;
- beans::PropertyValue* pCharGrabBag = std::find_if( vPropVals.begin(), vPropVals.end(), NamedPropertyValue( "CharInteropGrabBag" ) );
- if ( pCharGrabBag != vPropVals.end() )
- (pCharGrabBag->Value) >>= vCharVals;
- beans::PropertyValue* pParaGrabBag = std::find_if( vPropVals.begin(), vPropVals.end(), NamedPropertyValue( "ParaInteropGrabBag" ) );
- if ( pParaGrabBag != vPropVals.end() )
- (pParaGrabBag->Value) >>= vParaVals;
-
- for ( beans::PropertyValue* pIter = vPropVals.begin(); pIter != vPropVals.end(); ++pIter )
- {
- if ( pIter != pCharGrabBag && pIter != pParaGrabBag
- && pIter->Name != "IsProtected" //section-only property
- )
- {
- vNames.push_back( pIter->Name );
- vValues.push_back( pIter->Value );
- }
- }
- for ( const beans::PropertyValue & v : std::as_const(vCharVals) )
- {
- vNames.push_back( v.Name );
- vValues.push_back( v.Value );
- }
- for ( const beans::PropertyValue & v : std::as_const(vParaVals) )
- {
- vNames.push_back( v.Name );
- vValues.push_back( v.Value );
- }
- }
- if ( xMultiSet.is() )
- {
- try
- {
- xMultiSet->setPropertyValues( comphelper::containerToSequence( vNames ), comphelper::containerToSequence( vValues ) );
- return;
- }
- catch ( const uno::Exception& )
- {
- TOOLS_WARN_EXCEPTION( "writerfilter", "SectionPropertyMap::ApplyProperties_" );
- }
- }
- for ( size_t i = 0; i < vNames.size(); ++i )
- {
- try
- {
- if ( xStyle.is() )
- xStyle->setPropertyValue( vNames[i], vValues[i] );
- }
- catch ( const uno::Exception& )
- {
- TOOLS_WARN_EXCEPTION( "writerfilter", "SectionPropertyMap::ApplyProperties_" );
- }
- }
-}
-
-sal_Int32 SectionPropertyMap::GetPageWidth() const
-{
- return getProperty( PROP_WIDTH )->second.get<sal_Int32>();
-}
-
-StyleSheetPropertyMap::StyleSheetPropertyMap()
- : mnListLevel( -1 )
- , mnOutlineLevel( -1 )
-{
-}
-
-ParagraphProperties::ParagraphProperties()
- : m_bFrameMode( false )
- , m_nDropCap( NS_ooxml::LN_Value_doc_ST_DropCap_none )
- , m_nLines( 0 )
- , m_w( -1 )
- , m_h( -1 )
- , m_nWrap( text::WrapTextMode::WrapTextMode_MAKE_FIXED_SIZE )
- , m_hAnchor( -1 )
- , m_vAnchor( -1 )
- , m_x( -1 )
- , m_bxValid( false )
- , m_y( -1 )
- , m_byValid( false )
- , m_hSpace( -1 )
- , m_vSpace( -1 )
- , m_hRule( -1 )
- , m_xAlign( -1 )
- , m_yAlign( -1 )
- , m_nDropCapLength( 0 )
-{
-}
-
-bool ParagraphProperties::operator==( const ParagraphProperties& rCompare )
-{
- return ( m_bFrameMode == rCompare.m_bFrameMode &&
- m_nDropCap == rCompare.m_nDropCap &&
- m_nLines == rCompare.m_nLines &&
- m_w == rCompare.m_w &&
- m_h == rCompare.m_h &&
- m_nWrap == rCompare.m_nWrap &&
- m_hAnchor == rCompare.m_hAnchor &&
- m_vAnchor == rCompare.m_vAnchor &&
- m_x == rCompare.m_x &&
- m_bxValid == rCompare.m_bxValid &&
- m_y == rCompare.m_y &&
- m_byValid == rCompare.m_byValid &&
- m_hSpace == rCompare.m_hSpace &&
- m_vSpace == rCompare.m_vSpace &&
- m_hRule == rCompare.m_hRule &&
- m_xAlign == rCompare.m_xAlign &&
- m_yAlign == rCompare.m_yAlign );
-}
-
-void ParagraphProperties::ResetFrameProperties()
-{
- m_bFrameMode = false;
- m_nDropCap = NS_ooxml::LN_Value_doc_ST_DropCap_none;
- m_nLines = 0;
- m_w = -1;
- m_h = -1;
- m_nWrap = text::WrapTextMode::WrapTextMode_MAKE_FIXED_SIZE;
- m_hAnchor = -1;
- m_vAnchor = -1;
- m_x = -1;
- m_bxValid = false;
- m_y = -1;
- m_byValid = false;
- m_hSpace = -1;
- m_vSpace = -1;
- m_hRule = -1;
- m_xAlign = -1;
- m_yAlign = -1;
- m_nDropCapLength = 0;
-}
-
-bool TablePropertyMap::getValue( TablePropertyMapTarget eWhich, sal_Int32& nFill )
-{
- if ( eWhich < TablePropertyMapTarget_MAX )
- {
- if ( m_aValidValues[eWhich].bValid )
- nFill = m_aValidValues[eWhich].nValue;
- return m_aValidValues[eWhich].bValid;
- }
- else
- {
- OSL_FAIL( "invalid TablePropertyMapTarget" );
- return false;
- }
-}
-
-void TablePropertyMap::setValue( TablePropertyMapTarget eWhich, sal_Int32 nSet )
-{
- if ( eWhich < TablePropertyMapTarget_MAX )
- {
- m_aValidValues[eWhich].bValid = true;
- m_aValidValues[eWhich].nValue = nSet;
- }
- else
- OSL_FAIL( "invalid TablePropertyMapTarget" );
-}
-
-void TablePropertyMap::insertTableProperties( const PropertyMap* pMap, const bool bOverwrite )
-{
-#ifdef DBG_UTIL
- TagLogger::getInstance().startElement( "TablePropertyMap.insertTableProperties" );
- pMap->dumpXml();
-#endif
-
- const TablePropertyMap* pSource = dynamic_cast< const TablePropertyMap* >(pMap);
- if ( pSource )
- {
- for ( sal_Int32 eTarget = TablePropertyMapTarget_START;
- eTarget < TablePropertyMapTarget_MAX; ++eTarget )
- {
- if ( pSource->m_aValidValues[eTarget].bValid && (bOverwrite || !m_aValidValues[eTarget].bValid) )
- {
- m_aValidValues[eTarget].bValid = true;
- m_aValidValues[eTarget].nValue = pSource->m_aValidValues[eTarget].nValue;
- }
- }
- }
-
-#ifdef DBG_UTIL
- dumpXml();
- TagLogger::getInstance().endElement();
-#endif
-}
-
-} // namespace writerfilter
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/PropertyMap.hxx b/writerfilter/source/dmapper/PropertyMap.hxx
deleted file mode 100644
index c48d52803ee1..000000000000
--- a/writerfilter/source/dmapper/PropertyMap.hxx
+++ /dev/null
@@ -1,607 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * 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 .
- */
-#ifndef INCLUDED_WRITERFILTER_SOURCE_DMAPPER_PROPERTYMAP_HXX
-#define INCLUDED_WRITERFILTER_SOURCE_DMAPPER_PROPERTYMAP_HXX
-
-#include <rtl/ustring.hxx>
-#include <tools/ref.hxx>
-#include <com/sun/star/uno/Sequence.hxx>
-#include <com/sun/star/beans/PropertyValue.hpp>
-#include <com/sun/star/beans/XPropertySet.hpp>
-#include <com/sun/star/table/BorderLine2.hpp>
-#include <com/sun/star/text/WrapTextMode.hpp>
-#include <com/sun/star/uno/Any.h>
-#include <com/sun/star/drawing/XShape.hpp>
-#include "PropertyIds.hxx"
-#include <memory>
-#include <optional>
-#include <map>
-#include <vector>
-#include <set>
-
-namespace com::sun::star {
- namespace beans {
- struct PropertyValue;
- }
- namespace container {
- class XNameContainer;
- }
- namespace lang {
- class XMultiServiceFactory;
- }
- namespace text {
- class XTextRange;
- class XTextColumns;
- class XFootnote;
- }
- namespace table {
- struct BorderLine2;
- struct ShadowFormat;
- }
-}
-
-namespace writerfilter::dmapper {
-
-class DomainMapper_Impl;
-struct FloatingTableInfo;
-struct AnchoredObjectInfo;
-
-enum BorderPosition
-{
- BORDER_LEFT,
- BORDER_RIGHT,
- BORDER_TOP,
- BORDER_BOTTOM
-};
-
-enum GrabBagType
-{
- NO_GRAB_BAG,
- ROW_GRAB_BAG,
- CELL_GRAB_BAG,
- PARA_GRAB_BAG,
- CHAR_GRAB_BAG
-};
-
-struct RedlineParams : public virtual SvRefBase
-{
- OUString m_sAuthor;
- OUString m_sDate;
- sal_Int32 m_nToken;
-
- // This can hold properties of runs that had formatted 'track changes' properties
- css::uno::Sequence< css::beans::PropertyValue > m_aRevertProperties;
-};
-
-typedef tools::SvRef< RedlineParams > RedlineParamsPtr;
-
-class PropValue
-{
-private:
- css::uno::Any m_aValue;
- GrabBagType m_GrabBagType;
- bool m_bIsDocDefault;
-
-public:
- PropValue( const css::uno::Any& rValue, GrabBagType i_GrabBagType, bool bDocDefault )
- : m_aValue( rValue )
- , m_GrabBagType( i_GrabBagType )
- , m_bIsDocDefault( bDocDefault )
- {
- }
-
- PropValue( const css::uno::Any& rValue, GrabBagType i_GrabBagType )
- : m_aValue( rValue )
- , m_GrabBagType( i_GrabBagType )
- , m_bIsDocDefault( false )
- {
- }
-
- PropValue()
- : m_aValue()
- , m_GrabBagType( NO_GRAB_BAG )
- , m_bIsDocDefault( false )
- {
- }
-
- const css::uno::Any& getValue() const { return m_aValue; }
-
- GrabBagType getGrabBagType() const { return m_GrabBagType; }
-
- bool getIsDocDefault() const { return m_bIsDocDefault; }
-};
-
-class PropertyMap;
-typedef tools::SvRef< PropertyMap > PropertyMapPtr;
-
-class PropertyMap : public virtual SvRefBase
-{
-private:
- // Cache the property values for the GetPropertyValues() call(s).
- std::vector< css::beans::PropertyValue > m_aValues;
-
- // marks context as footnote context - ::text( ) events contain either the footnote character or can be ignored
- // depending on sprmCSymbol
- css::uno::Reference< css::text::XFootnote > m_xFootnote;
- OUString m_sFootnoteCharStyleName;
- std::map< PropertyIds, PropValue > m_vMap;
- std::vector< RedlineParamsPtr > m_aRedlines;
-
-public:
- typedef std::pair< PropertyIds, css::uno::Any > Property;
-
- PropertyMap() {}
-
- // Sequence: Grab Bags: The CHAR_GRAB_BAG has Name "CharInteropGrabBag" and the PARA_GRAB_BAG has Name "ParaInteropGrabBag"
- // the contained properties are their Value.
- css::uno::Sequence< css::beans::PropertyValue > GetPropertyValues( bool bCharGrabBag = true );
-
- std::vector< PropertyIds > GetPropertyIds();
-
- // Add property, optionally overwriting existing attributes
- void Insert( PropertyIds eId, const css::uno::Any& rAny, bool bOverwrite = true, GrabBagType i_GrabBagType = NO_GRAB_BAG, bool bDocDefault = false );
-
- // Remove a named property from *this, does nothing if the property id has not been set
- void Erase( PropertyIds eId);
-
- // Imports properties from pMap (bOverwrite==false means m_bIsDocDefault=true setting)
- void InsertProps( const PropertyMapPtr& rMap, const bool bOverwrite = true );
-
- // Returns a copy of the property if it exists, .first is its PropertyIds and .second is its Value (type css::uno::Any)
- std::optional< Property > getProperty( PropertyIds eId ) const;
-
- // Has the property named been set (via Insert)?
- bool isSet( PropertyIds eId ) const;
- bool isDocDefault( PropertyIds eId ) const;
-
- const css::uno::Reference< css::text::XFootnote >& GetFootnote() const { return m_xFootnote; }
- const OUString& GetFootnoteStyle() const { return m_sFootnoteCharStyleName; }
-
- void SetFootnote(const css::uno::Reference< css::text::XFootnote >& xFootnote, const OUString& sStyleName)
- {
- m_xFootnote = xFootnote;
- m_sFootnoteCharStyleName = sStyleName;
- }
-
- virtual void insertTableProperties( const PropertyMap*, const bool bOverwrite = true );
-
- const std::vector< RedlineParamsPtr >& Redlines() const { return m_aRedlines; }
-
- std::vector< RedlineParamsPtr >& Redlines() { return m_aRedlines; }
-
- void printProperties();
-
-#ifdef DBG_UTIL
- void dumpXml() const;
-#endif
-
- static css::table::ShadowFormat getShadowFromBorder( const css::table::BorderLine2& rBorder );
-
-protected:
- void Invalidate()
- {
- if ( m_aValues.size() )
- m_aValues.clear();
- }
-};
-
-class SectionPropertyMap : public PropertyMap
-{
-public:
- enum class BorderApply
- {
- ToAllInSection = 0,
- ToFirstPageInSection = 1,
- ToAllButFirstInSection = 2
- };
- enum class BorderOffsetFrom
- {
- Text = 0,
- Edge = 1,
- };
-private:
-#ifdef DBG_UTIL
- sal_Int32 m_nDebugSectionNumber;
-#endif
-
- // 'temporarily' the section page settings are imported as page styles
- // empty strings mark page settings as not yet imported
-
- bool m_bIsFirstSection;
- css::uno::Reference< css::text::XTextRange > m_xStartingRange;
-
- OUString m_sFirstPageStyleName;
- OUString m_sFollowPageStyleName;
- css::uno::Reference< css::beans::XPropertySet > m_aFirstPageStyle;
- css::uno::Reference< css::beans::XPropertySet > m_aFollowPageStyle;
-
- std::optional< css::table::BorderLine2 > m_oBorderLines[4];
- sal_Int32 m_nBorderDistances[4];
- BorderApply m_eBorderApply;
- BorderOffsetFrom m_eBorderOffsetFrom;
- bool m_bBorderShadows[4];
-
- bool m_bTitlePage;
- sal_Int16 m_nColumnCount;
- sal_Int32 m_nColumnDistance;
- css::uno::Reference< css::beans::XPropertySet > m_xColumnContainer;
- std::vector< sal_Int32 > m_aColWidth;
- std::vector< sal_Int32 > m_aColDistance;
-
- bool m_bSeparatorLineIsOn;
- bool m_bEvenlySpaced;
-
- sal_Int32 m_nPageNumber;
- // Page number type is a value from css::style::NumberingType.
- sal_Int16 m_nPageNumberType;
- sal_Int32 m_nBreakType;
-
- 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_nGridType;
- sal_Int32 m_nGridLinePitch;
- sal_Int32 m_nDxtCharSpace;
- bool m_bGridSnapToChars;
-
- // line numbering
- sal_Int32 m_nLnnMod;
- sal_uInt32 m_nLnc;
- sal_Int32 m_ndxaLnn;
- sal_Int32 m_nLnnMin;
-
- std::vector<css::uno::Reference<css::drawing::XShape>> m_xRelativeWidthShapes;
-
- // The "Link To Previous" flag indicates whether the header/footer
- // content should be taken from the previous section
- bool m_bDefaultHeaderLinkToPrevious;
- bool m_bEvenPageHeaderLinkToPrevious;
- bool m_bFirstPageHeaderLinkToPrevious;
- bool m_bDefaultFooterLinkToPrevious;
- bool m_bEvenPageFooterLinkToPrevious;
- bool m_bFirstPageFooterLinkToPrevious;
-
- void ApplyProperties_( const css::uno::Reference< css::beans::XPropertySet >& xStyle );
-
- void DontBalanceTextColumns();
-
- /// Apply section-specific properties: only valid to use after PageStyle has been determined by InheritOrFinalizePageStyles
- void ApplySectionProperties( const css::uno::Reference< css::beans::XPropertySet >& xSection, DomainMapper_Impl& rDM_Impl );
-
- /// Check if document is protected. If so, ensure a section exists, and apply its protected value.
- void ApplyProtectionProperties( css::uno::Reference< css::beans::XPropertySet >& xSection, DomainMapper_Impl& rDM_Impl );
-
- css::uno::Reference< css::text::XTextColumns > ApplyColumnProperties( const css::uno::Reference< css::beans::XPropertySet >& xFollowPageStyle,
- DomainMapper_Impl& rDM_Impl);
-
- void CopyLastHeaderFooter( bool bFirstPage, DomainMapper_Impl& rDM_Impl );
-
- static void CopyHeaderFooter( const css::uno::Reference< css::beans::XPropertySet >& xPrevStyle,
- const css::uno::Reference< css::beans::XPropertySet >& xStyle,
- bool bOmitRightHeader = false, bool bOmitLeftHeader = false,
- bool bOmitRightFooter = false, bool bOmitLeftFooter = false );
-
- static void CopyHeaderFooterTextProperty( const css::uno::Reference< css::beans::XPropertySet >& xPrevStyle,
- const css::uno::Reference< css::beans::XPropertySet >& xStyle,
- PropertyIds ePropId );
-
- void PrepareHeaderFooterProperties( bool bFirstPage );
-
- bool HasHeader( bool bFirstPage ) const;
- bool HasFooter( bool bFirstPage ) const;
-
- static void SetBorderDistance( const css::uno::Reference< css::beans::XPropertySet >& xStyle,
- PropertyIds eMarginId,
- PropertyIds eDistId,
- sal_Int32 nDistance,
- BorderOffsetFrom eOffsetFrom,
- sal_uInt32 nLineWidth );
-
- // Determines if conversion of a given floating table is wanted or not.
- bool FloatingTableConversion( const DomainMapper_Impl& rDM_Impl, FloatingTableInfo& rInfo );
-
- /// Increases paragraph spacing according to Word 2013+ needs if necessary.
- void HandleIncreasedAnchoredObjectSpacing(DomainMapper_Impl& rDM_Impl);
-
-public:
- enum PageType
- {
- PAGE_FIRST,
- PAGE_LEFT,
- PAGE_RIGHT
- };
-
- explicit SectionPropertyMap( bool bIsFirstSection );
-
- bool IsFirstSection() const { return m_bIsFirstSection; }
-
- void SetStart( const css::uno::Reference< css::text::XTextRange >& xRange ) { m_xStartingRange = xRange; }
-
- const css::uno::Reference< css::text::XTextRange >& GetStartingRange() const { return m_xStartingRange; }
-
- css::uno::Reference< css::beans::XPropertySet > GetPageStyle( DomainMapper_Impl& rDM_Impl, bool bFirst );
-
- const OUString& GetPageStyleName( bool bFirstPage = false )
- {
- return bFirstPage ? m_sFirstPageStyleName : m_sFollowPageStyleName;
- }
-
- // @throws css::beans::UnknownPropertyException
- // @throws css::beans::PropertyVetoException
- // @throws css::lang::IllegalArgumentException
- // @throws css::lang::WrappedTargetException
- // @throws css::uno::RuntimeException
- void InheritOrFinalizePageStyles( DomainMapper_Impl& rDM_Impl );
-
- void SetBorder( BorderPosition ePos, sal_Int32 nLineDistance, const css::table::BorderLine2& rBorderLine, bool bShadow );
- void SetBorderApply( BorderApply nSet ) { m_eBorderApply = nSet; }
- void SetBorderOffsetFrom( BorderOffsetFrom nSet ) { m_eBorderOffsetFrom = nSet; }
-
- void SetColumnCount( sal_Int16 nCount ) { m_nColumnCount = nCount; }
- sal_Int16 ColumnCount() const { return m_nColumnCount; }
-
- 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 SetPageNumber( sal_Int32 nSet ) { m_nPageNumber = nSet; }
- void SetPageNumberType( sal_Int32 nSet ) { m_nPageNumberType = nSet; }
- void SetBreakType( sal_Int32 nSet ) { m_nBreakType = nSet; }
- // GetBreakType returns -1 if the breakType has not yet been identified for the section
- sal_Int32 GetBreakType() const { return m_nBreakType; }
-
- void SetLeftMargin( sal_Int32 nSet ) { m_nLeftMargin = nSet; }
- sal_Int32 GetLeftMargin() const { return m_nLeftMargin; }
- void SetRightMargin( sal_Int32 nSet ) { m_nRightMargin = nSet; }
- sal_Int32 GetRightMargin() const { return m_nRightMargin; }
- 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; }
- sal_Int32 GetPageWidth() const;
-
- void SetGridType( sal_Int32 nSet ) { m_nGridType = nSet; }
- void SetGridLinePitch( sal_Int32 nSet ) { m_nGridLinePitch = nSet; }
- void SetGridSnapToChars( bool bSet ) { m_bGridSnapToChars = bSet; }
- 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; }
-
- void addRelativeWidthShape( css::uno::Reference<css::drawing::XShape> xShape ) { m_xRelativeWidthShapes.push_back( xShape ); }
-
- // determine which style gets the borders
- void ApplyBorderToPageStyles( DomainMapper_Impl &rDM_Impl,
- BorderApply eBorderApply, BorderOffsetFrom eOffsetFrom );
-
- void CloseSectionGroup( DomainMapper_Impl& rDM_Impl );
- // Handling of margins, header and footer for any kind of sections breaks.
- void HandleMarginsHeaderFooter( bool bFirstPage, DomainMapper_Impl& rDM_Impl );
- void ClearHeaderFooterLinkToPrevious( bool bHeader, PageType eType );
-};
-
-class ParagraphProperties : public virtual SvRefBase
-{
-private:
- 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
- css::text::WrapTextMode 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
- sal_Int8 m_nDropCapLength; // number of characters
- OUString m_sParaStyleName;
-
- css::uno::Reference< css::text::XTextRange > m_xStartingRange; // start of a frame
- css::uno::Reference< css::text::XTextRange > m_xEndingRange; // end of the frame
- sal_Int32 m_nListId = -1;
-
-public:
- ParagraphProperties();
-
- ParagraphProperties(ParagraphProperties const &) = default;
- ParagraphProperties(ParagraphProperties &&) = default;
- ParagraphProperties & operator =(ParagraphProperties const &) = default;
- ParagraphProperties & operator =(ParagraphProperties &&) = default;
-
- // Does not compare the starting/ending range, m_sParaStyleName and m_nDropCapLength
- bool operator==( const ParagraphProperties& );
-
- sal_Int32 GetListId() const { return m_nListId; }
- void SetListId( sal_Int32 nId ) { m_nListId = nId; }
-
- bool IsFrameMode() const { return m_bFrameMode; }
- void SetFrameMode( bool set = true ) { m_bFrameMode = set; }
-
- sal_Int32 GetDropCap() const { return m_nDropCap; }
- void SetDropCap( sal_Int32 nSet ) { m_nDropCap = nSet; }
-
- sal_Int32 GetLines() const { return m_nLines; }
- void SetLines( sal_Int32 nSet ) { m_nLines = nSet; }
-
- sal_Int32 Getw() const { return m_w; }
- void Setw( sal_Int32 nSet ) { m_w = nSet; }
-
- sal_Int32 Geth() const { return m_h; }
- void Seth( sal_Int32 nSet ) { m_h = nSet; }
-
- css::text::WrapTextMode GetWrap() const { return m_nWrap; }
- void SetWrap( css::text::WrapTextMode nSet ) { m_nWrap = nSet; }
-
- sal_Int32 GethAnchor() const { return m_hAnchor; }
- void SethAnchor( sal_Int32 nSet ) { m_hAnchor = nSet; }
-
- sal_Int32 GetvAnchor() const { return m_vAnchor; }
- void SetvAnchor( sal_Int32 nSet ) { m_vAnchor = nSet; }
-
- sal_Int32 Getx() const { return m_x; }
- void Setx( sal_Int32 nSet ) { m_x = nSet; m_bxValid = true; }
- bool IsxValid() const { return m_bxValid; }
-
- sal_Int32 Gety() const { return m_y; }
- void Sety( sal_Int32 nSet ) { m_y = nSet; m_byValid = true; }
- bool IsyValid() const { return m_byValid; }
-
- void SethSpace( sal_Int32 nSet ) { m_hSpace = nSet; }
- sal_Int32 GethSpace() const { return m_hSpace; }
-
- sal_Int32 GetvSpace() const { return m_vSpace; }
- void SetvSpace( sal_Int32 nSet ) { m_vSpace = nSet; }
-
- sal_Int32 GethRule() const { return m_hRule; }
- void SethRule( sal_Int32 nSet ) { m_hRule = nSet; }
-
- sal_Int32 GetxAlign() const { return m_xAlign; }
- void SetxAlign( sal_Int32 nSet ) { m_xAlign = nSet; }
-
- sal_Int32 GetyAlign() const { return m_yAlign; }
- void SetyAlign( sal_Int32 nSet ) { m_yAlign = nSet; }
-
- sal_Int8 GetDropCapLength() const { return m_nDropCapLength; }
- void SetDropCapLength( sal_Int8 nSet ) { m_nDropCapLength = nSet; }
-
- const css::uno::Reference< css::text::XTextRange >& GetStartingRange() const { return m_xStartingRange; }
- void SetStartingRange( const css::uno::Reference< css::text::XTextRange >& xSet ) { m_xStartingRange = xSet; }
-
- const css::uno::Reference< css::text::XTextRange >& GetEndingRange() const { return m_xEndingRange; }
- void SetEndingRange( const css::uno::Reference< css::text::XTextRange >& xSet ) { m_xEndingRange = xSet; }
-
- const OUString& GetParaStyleName() const { return m_sParaStyleName; }
- void SetParaStyleName( const OUString& rSet ) { m_sParaStyleName = rSet; }
-
- void ResetFrameProperties();
-};
-
-typedef tools::SvRef< ParagraphProperties > ParagraphPropertiesPtr;
-
-/*-------------------------------------------------------------------------
- property map of a stylesheet
- -----------------------------------------------------------------------*/
-
-#define WW_OUTLINE_MAX sal_Int16( 9 )
-#define WW_OUTLINE_MIN sal_Int16( 0 )
-
-class StyleSheetPropertyMap
- : public PropertyMap
- , public ParagraphProperties
-{
-private:
- sal_Int16 mnListLevel;
- sal_Int16 mnOutlineLevel;
-
-public:
- explicit StyleSheetPropertyMap();
-
- 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; }
-};
-
-class ParagraphPropertyMap
- : public PropertyMap
- , public ParagraphProperties
-{
-public:
- explicit ParagraphPropertyMap() {}
-};
-
-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,
- TABLE_WIDTH_TYPE,
- 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() {}
-
- bool getValue( TablePropertyMapTarget eWhich, sal_Int32& nFill );
- void setValue( TablePropertyMapTarget eWhich, sal_Int32 nSet );
-
- virtual void insertTableProperties( const PropertyMap*, const bool bOverwrite = true ) override;
-};
-
-typedef tools::SvRef< TablePropertyMap > TablePropertyMapPtr;
-
-/// Information about a paragraph to be finished after a table end.
-struct TableParagraph
-{
- css::uno::Reference<css::text::XTextRange> m_rStartParagraph;
- css::uno::Reference<css::text::XTextRange> m_rEndParagraph;
- PropertyMapPtr m_pPropertyMap;
- css::uno::Reference<css::beans::XPropertySet> m_rPropertySet;
- std::set<OUString> m_aParaOverrideApplied;
-};
-
-typedef std::shared_ptr< std::vector<TableParagraph> > TableParagraphVectorPtr;
-
-} // namespace writerfilter::dmapper
-
-#endif // INCLUDED_WRITERFILTER_SOURCE_DMAPPER_PROPERTYMAP_HXX
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/PropertyMapHelper.cxx b/writerfilter/source/dmapper/PropertyMapHelper.cxx
deleted file mode 100644
index a944dc147aa4..000000000000
--- a/writerfilter/source/dmapper/PropertyMapHelper.cxx
+++ /dev/null
@@ -1,98 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * 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 .
- */
-
-#include <com/sun/star/text/TableColumnSeparator.hpp>
-#include "TagLogger.hxx"
-#include "PropertyMapHelper.hxx"
-
-namespace writerfilter::dmapper
-{
-using namespace ::com::sun::star;
-
-void lcl_DumpTableColumnSeparators(const uno::Any& rTableColumnSeparators)
-{
-#ifdef DBG_UTIL
- uno::Sequence<text::TableColumnSeparator> aSeq;
- rTableColumnSeparators >>= aSeq;
-
- TagLogger::getInstance().startElement("property.TableColumnSeparators");
-
- sal_uInt32 nLength = aSeq.getLength();
- for (sal_uInt32 n = 0; n < nLength; ++n)
- {
- TagLogger::getInstance().startElement("separator");
-
- TagLogger::getInstance().attribute("position", aSeq[n].Position);
- TagLogger::getInstance().attribute("visible", sal_uInt32(aSeq[n].IsVisible));
-
- TagLogger::getInstance().endElement();
- }
-
- TagLogger::getInstance().endElement();
-#else
- (void)rTableColumnSeparators;
-#endif // DBG_UTIL
-}
-
-#ifdef DBG_UTIL
-void lcl_DumpPropertyValues(beans::PropertyValues const& rValues)
-{
- TagLogger::getInstance().startElement("propertyValues");
-
- for (beans::PropertyValue const& propVal : rValues)
- {
- TagLogger::getInstance().startElement("propertyValue");
-
- TagLogger::getInstance().attribute("name", propVal.Name);
-
- try
- {
- sal_Int32 aInt = 0;
- propVal.Value >>= aInt;
- TagLogger::getInstance().attribute("value", aInt);
- }
- catch (...)
- {
- }
-
- if (propVal.Name == "TableColumnSeparators")
- {
- lcl_DumpTableColumnSeparators(propVal.Value);
- }
-
- TagLogger::getInstance().endElement();
- }
- TagLogger::getInstance().endElement();
-}
-
-void lcl_DumpPropertyValueSeq(css::uno::Sequence<css::beans::PropertyValues> const& rPropValSeq)
-{
- TagLogger::getInstance().startElement("PropertyValueSeq");
-
- for (auto const& propVal : rPropValSeq)
- {
- lcl_DumpPropertyValues(propVal);
- }
-
- TagLogger::getInstance().endElement();
-}
-#endif // DBG_UTIL
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/PropertyMapHelper.hxx b/writerfilter/source/dmapper/PropertyMapHelper.hxx
deleted file mode 100644
index 044ae1b92f35..000000000000
--- a/writerfilter/source/dmapper/PropertyMapHelper.hxx
+++ /dev/null
@@ -1,37 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * 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 .
- */
-
-#ifndef INCLUDED_WRITERFILTER_SOURCE_DMAPPER_PROPERTYMAPHELPER_HXX
-#define INCLUDED_WRITERFILTER_SOURCE_DMAPPER_PROPERTYMAPHELPER_HXX
-
-#include <com/sun/star/beans/PropertyValues.hpp>
-
-namespace writerfilter::dmapper
-{
-void lcl_DumpTableColumnSeparators(const css::uno::Any& rTableColumnSeparators);
-#ifdef DBG_UTIL
-void lcl_DumpPropertyValues(css::beans::PropertyValues const& rValues);
-
-void lcl_DumpPropertyValueSeq(css::uno::Sequence<css::beans::PropertyValues> const& rPropValSeq);
-#endif // DBG_UTIL
-}
-
-#endif // INCLUDED_WRITERFILTER_SOURCE_DMAPPER_PROPERTYMAPHELPER_HXX
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/SdtHelper.cxx b/writerfilter/source/dmapper/SdtHelper.cxx
deleted file mode 100644
index dd3b7c755ac6..000000000000
--- a/writerfilter/source/dmapper/SdtHelper.cxx
+++ /dev/null
@@ -1,250 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-
-#include "SdtHelper.hxx"
-#include <com/sun/star/lang/XMultiServiceFactory.hpp>
-#include <com/sun/star/drawing/XControlShape.hpp>
-#include <com/sun/star/text/VertOrientation.hpp>
-#include <editeng/unoprnms.hxx>
-#include <vcl/svapp.hxx>
-#include <vcl/outdev.hxx>
-#include <comphelper/sequence.hxx>
-#include <xmloff/odffields.hxx>
-#include <com/sun/star/text/XTextField.hpp>
-#include "DomainMapper_Impl.hxx"
-#include "StyleSheetTable.hxx"
-#include <officecfg/Office/Writer.hxx>
-
-namespace writerfilter::dmapper
-{
-using namespace ::com::sun::star;
-
-/// w:sdt's w:dropDownList doesn't have width, so guess the size based on the longest string.
-static awt::Size lcl_getOptimalWidth(const StyleSheetTablePtr& pStyleSheet,
- OUString const& rDefault, std::vector<OUString>& rItems)
-{
- OUString aLongest = rDefault;
- sal_Int32 nHeight = 0;
- for (const OUString& rItem : rItems)
- if (rItem.getLength() > aLongest.getLength())
- aLongest = rItem;
-
- MapMode aMap(MapUnit::Map100thMM);
- OutputDevice* pOut = Application::GetDefaultDevice();
- pOut->Push(PushFlags::FONT | PushFlags::MAPMODE);
-
- PropertyMapPtr pDefaultCharProps = pStyleSheet->GetDefaultCharProps();
- vcl::Font aFont(pOut->GetFont());
- std::optional<PropertyMap::Property> aFontName
- = pDefaultCharProps->getProperty(PROP_CHAR_FONT_NAME);
- if (aFontName)
- aFont.SetFamilyName(aFontName->second.get<OUString>());
- std::optional<PropertyMap::Property> aHeight = pDefaultCharProps->getProperty(PROP_CHAR_HEIGHT);
- if (aHeight)
- {
- nHeight = aHeight->second.get<double>() * 35; // points -> mm100
- aFont.SetFontSize(Size(0, nHeight));
- }
- pOut->SetFont(aFont);
- pOut->SetMapMode(aMap);
- sal_Int32 nWidth = pOut->GetTextWidth(aLongest);
-
- pOut->Pop();
-
- // Border: see PDFWriterImpl::drawFieldBorder(), border size is font height / 4,
- // so additional width / height needed is height / 2.
- sal_Int32 nBorder = nHeight / 2;
-
- // Width: space for the text + the square having the dropdown arrow.
- return { nWidth + nBorder + nHeight, nHeight + nBorder };
-}
-
-SdtHelper::SdtHelper(DomainMapper_Impl& rDM_Impl)
- : m_rDM_Impl(rDM_Impl)
- , m_bInsideDropDownControl(false)
- , m_bHasElements(false)
- , m_bOutsideAParagraph(false)
-{
-}
-
-SdtHelper::~SdtHelper() = default;
-
-void SdtHelper::createDropDownControl()
-{
- assert(m_bInsideDropDownControl);
-
- const bool bDropDown
- = officecfg::Office::Writer::Filter::Import::DOCX::ImportComboBoxAsDropDown::get();
- const OUString aDefaultText = m_aSdtTexts.makeStringAndClear();
-
- if (bDropDown)
- {
- // create field
- uno::Reference<css::text::XTextField> xControlModel(
- m_rDM_Impl.GetTextFactory()->createInstance("com.sun.star.text.TextField.DropDown"),
- uno::UNO_QUERY);
-
- const auto it = std::find_if(
- m_aDropDownItems.begin(), m_aDropDownItems.end(),
- [aDefaultText](const OUString& item) -> bool { return !item.compareTo(aDefaultText); });
-
- if (m_aDropDownItems.end() == it)
- {
- m_aDropDownItems.push_back(aDefaultText);
- }
-
- // set properties
- uno::Reference<beans::XPropertySet> xPropertySet(xControlModel, uno::UNO_QUERY);
- xPropertySet->setPropertyValue("SelectedItem", uno::makeAny(aDefaultText));
- xPropertySet->setPropertyValue(
- "Items", uno::makeAny(comphelper::containerToSequence(m_aDropDownItems)));
-
- // add it into document
- m_rDM_Impl.appendTextContent(xControlModel, uno::Sequence<beans::PropertyValue>());
-
- m_bHasElements = true;
- }
- else
- {
- // create control
- uno::Reference<awt::XControlModel> xControlModel(
- m_rDM_Impl.GetTextFactory()->createInstance("com.sun.star.form.component.ComboBox"),
- uno::UNO_QUERY);
-
- // set properties
- uno::Reference<beans::XPropertySet> xPropertySet(xControlModel, uno::UNO_QUERY);
- xPropertySet->setPropertyValue("DefaultText", uno::makeAny(aDefaultText));
- xPropertySet->setPropertyValue("Dropdown", uno::makeAny(true));
- xPropertySet->setPropertyValue(
- "StringItemList", uno::makeAny(comphelper::containerToSequence(m_aDropDownItems)));
-
- // add it into document
- createControlShape(
- lcl_getOptimalWidth(m_rDM_Impl.GetStyleSheetTable(), aDefaultText, m_aDropDownItems),
- xControlModel, uno::Sequence<beans::PropertyValue>());
- }
-
- // clean up
- m_aDropDownItems.clear();
- m_bInsideDropDownControl = false;
-}
-
-bool SdtHelper::validateDateFormat()
-{
- return !m_sDateFormat.toString().isEmpty() && !m_sLocale.toString().isEmpty();
-}
-
-void SdtHelper::createDateContentControl()
-{
- if (!m_xDateFieldStartRange.is())
- return;
-
- uno::Reference<text::XTextCursor> xCrsr;
- if (m_rDM_Impl.HasTopText())
- {
- uno::Reference<text::XTextAppend> xTextAppend = m_rDM_Impl.GetTopTextAppend();
- if (xTextAppend.is())
- {
- xCrsr = xTextAppend->createTextCursorByRange(xTextAppend);
- }
- }
- if (!xCrsr.is())
- return;
-
- try
- {
- xCrsr->gotoRange(m_xDateFieldStartRange, false);
- bool bIsInTable = (m_rDM_Impl.hasTableManager() && m_rDM_Impl.getTableManager().isInTable())
- || (m_rDM_Impl.m_nTableDepth > 0);
- if (bIsInTable)
- xCrsr->goRight(1, false);
- xCrsr->gotoEnd(true);
- }
- catch (uno::Exception&)
- {
- OSL_ENSURE(false, "Cannot get the right text range for date field");
- return;
- }
-
- uno::Reference<uno::XInterface> xFieldInterface
- = m_rDM_Impl.GetTextFactory()->createInstance("com.sun.star.text.Fieldmark");
- uno::Reference<text::XFormField> xFormField(xFieldInterface, uno::UNO_QUERY);
- uno::Reference<text::XTextContent> xToInsert(xFormField, uno::UNO_QUERY);
- if (!(xFormField.is() && xToInsert.is()))
- return;
-
- xToInsert->attach(uno::Reference<text::XTextRange>(xCrsr, uno::UNO_QUERY_THROW));
- xFormField->setFieldType(ODF_FORMDATE);
- uno::Reference<container::XNameContainer> xNameCont = xFormField->getParameters();
- if (xNameCont.is())
- {
- OUString sDateFormat = m_sDateFormat.makeStringAndClear();
- // Replace quotation mark used for marking static strings in date format
- sDateFormat = sDateFormat.replaceAll("'", "\"");
- xNameCont->insertByName(ODF_FORMDATE_DATEFORMAT, uno::makeAny(sDateFormat));
- xNameCont->insertByName(ODF_FORMDATE_DATEFORMAT_LANGUAGE,
- uno::makeAny(m_sLocale.makeStringAndClear()));
- }
- OUString sFullDate = m_sDate.makeStringAndClear();
- if (!sFullDate.isEmpty())
- {
- sal_Int32 nTimeSep = sFullDate.indexOf("T");
- if (nTimeSep != -1)
- sFullDate = sFullDate.copy(0, nTimeSep);
- xNameCont->insertByName(ODF_FORMDATE_CURRENTDATE, uno::makeAny(sFullDate));
- }
-}
-
-void SdtHelper::createControlShape(awt::Size aSize,
- uno::Reference<awt::XControlModel> const& xControlModel,
- const uno::Sequence<beans::PropertyValue>& rGrabBag)
-{
- uno::Reference<drawing::XControlShape> xControlShape(
- m_rDM_Impl.GetTextFactory()->createInstance("com.sun.star.drawing.ControlShape"),
- uno::UNO_QUERY);
- xControlShape->setSize(aSize);
- xControlShape->setControl(xControlModel);
-
- uno::Reference<beans::XPropertySet> xPropertySet(xControlShape, uno::UNO_QUERY);
- xPropertySet->setPropertyValue("VertOrient", uno::makeAny(text::VertOrientation::CENTER));
-
- if (rGrabBag.hasElements())
- xPropertySet->setPropertyValue(UNO_NAME_MISC_OBJ_INTEROPGRABBAG, uno::makeAny(rGrabBag));
-
- uno::Reference<text::XTextContent> xTextContent(xControlShape, uno::UNO_QUERY);
- m_rDM_Impl.appendTextContent(xTextContent, uno::Sequence<beans::PropertyValue>());
- m_bHasElements = true;
-}
-
-void SdtHelper::appendToInteropGrabBag(const beans::PropertyValue& rValue)
-{
- m_aGrabBag.push_back(rValue);
-}
-
-uno::Sequence<beans::PropertyValue> SdtHelper::getInteropGrabBagAndClear()
-{
- uno::Sequence<beans::PropertyValue> aRet = comphelper::containerToSequence(m_aGrabBag);
- m_aGrabBag.clear();
- return aRet;
-}
-
-bool SdtHelper::isInteropGrabBagEmpty() const { return m_aGrabBag.empty(); }
-
-sal_Int32 SdtHelper::getInteropGrabBagSize() const { return m_aGrabBag.size(); }
-
-bool SdtHelper::containedInInteropGrabBag(const OUString& rValueName)
-{
- return std::any_of(
- m_aGrabBag.begin(), m_aGrabBag.end(),
- [&rValueName](const beans::PropertyValue& i) { return i.Name == rValueName; });
-}
-
-} // namespace writerfilter::dmapper
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/SdtHelper.hxx b/writerfilter/source/dmapper/SdtHelper.hxx
deleted file mode 100644
index e5decd927ad0..000000000000
--- a/writerfilter/source/dmapper/SdtHelper.hxx
+++ /dev/null
@@ -1,116 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-
-#ifndef INCLUDED_WRITERFILTER_SOURCE_DMAPPER_SDTHELPER_HXX
-#define INCLUDED_WRITERFILTER_SOURCE_DMAPPER_SDTHELPER_HXX
-
-#include <vector>
-
-#include <com/sun/star/beans/PropertyValue.hpp>
-#include <com/sun/star/text/XTextRange.hpp>
-
-#include <rtl/ustrbuf.hxx>
-#include <tools/ref.hxx>
-
-namespace com::sun::star::awt
-{
-struct Size;
-class XControlModel;
-}
-
-namespace writerfilter::dmapper
-{
-class DomainMapper_Impl;
-
-/**
- * Helper to create form controls from w:sdt tokens.
- *
- * w:sdt tokens can't be imported as form fields, as w:sdt supports
- * e.g. date picking as well.
- */
-class SdtHelper final : public virtual SvRefBase
-{
- DomainMapper_Impl& m_rDM_Impl;
-
- /// Items of the drop-down control.
- std::vector<OUString> m_aDropDownItems;
- /// Indicator of a drop-down control
- bool m_bInsideDropDownControl;
- /// Pieces of the default text -- currently used only by the dropdown control.
- OUStringBuffer m_aSdtTexts;
- /// Date ISO string contained in the w:date element, used by the date control.
- OUStringBuffer m_sDate;
- /// Date format string as it comes from the ooxml document.
- OUStringBuffer m_sDateFormat;
- /// Start range of the date field
- css::uno::Reference<css::text::XTextRange> m_xDateFieldStartRange;
- /// Locale string as it comes from the ooxml document.
- OUStringBuffer m_sLocale;
- /// Grab bag to store unsupported SDTs, aiming to save them back on export.
- std::vector<css::beans::PropertyValue> m_aGrabBag;
-
- bool m_bHasElements;
- /// The last stored SDT element is outside paragraphs.
- bool m_bOutsideAParagraph;
-
- /// Create and append the drawing::XControlShape, containing the various models.
- void createControlShape(css::awt::Size aSize,
- css::uno::Reference<css::awt::XControlModel> const& xControlModel,
- const css::uno::Sequence<css::beans::PropertyValue>& rGrabBag);
-
-public:
- explicit SdtHelper(DomainMapper_Impl& rDM_Impl);
- ~SdtHelper() override;
-
- std::vector<OUString>& getDropDownItems() { return m_aDropDownItems; }
- OUStringBuffer& getSdtTexts() { return m_aSdtTexts; }
-
- OUStringBuffer& getDate() { return m_sDate; }
-
- OUStringBuffer& getDateFormat() { return m_sDateFormat; }
-
- void setDateFieldStartRange(const css::uno::Reference<css::text::XTextRange>& xStartRange)
- {
- m_xDateFieldStartRange = xStartRange;
- }
-
- /// Decides if we have enough information to create a date control.
- bool validateDateFormat();
-
- OUStringBuffer& getLocale() { return m_sLocale; }
- /// If createControlShape() was ever called.
- bool hasElements() const { return m_bHasElements; }
-
- void setOutsideAParagraph(bool bOutsideAParagraph)
- {
- m_bOutsideAParagraph = bOutsideAParagraph;
- }
-
- bool isOutsideAParagraph() const { return m_bOutsideAParagraph; }
-
- bool isInsideDropDownControl() const { return m_bInsideDropDownControl; }
- void setInsideDropDownControl(bool bInside) { m_bInsideDropDownControl = bInside; }
-
- /// Create drop-down control from w:sdt's w:dropDownList.
- void createDropDownControl();
- /// Create date control from w:sdt's w:date.
- void createDateContentControl();
-
- void appendToInteropGrabBag(const css::beans::PropertyValue& rValue);
- css::uno::Sequence<css::beans::PropertyValue> getInteropGrabBagAndClear();
- bool isInteropGrabBagEmpty() const;
- bool containedInInteropGrabBag(const OUString& rValueName);
- sal_Int32 getInteropGrabBagSize() const;
-};
-
-} // namespace writerfilter::dmapper
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/SectionColumnHandler.cxx b/writerfilter/source/dmapper/SectionColumnHandler.cxx
deleted file mode 100644
index 9fed9c34a68e..000000000000
--- a/writerfilter/source/dmapper/SectionColumnHandler.cxx
+++ /dev/null
@@ -1,90 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * 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 .
- */
-#include "SectionColumnHandler.hxx"
-#include "ConversionHelper.hxx"
-#include <ooxml/resourceids.hxx>
-#include <osl/diagnose.h>
-
-namespace writerfilter::dmapper
-{
-using namespace ::com::sun::star;
-
-SectionColumnHandler::SectionColumnHandler()
- : LoggedProperties("SectionColumnHandler")
- , m_bEqualWidth(false)
- , m_nSpace(1270) // 720 twips
- , m_nNum(0)
- , m_bSep(false)
-{
- m_aTempColumn.nWidth = m_aTempColumn.nSpace = 0;
-}
-
-SectionColumnHandler::~SectionColumnHandler() {}
-
-void SectionColumnHandler::lcl_attribute(Id rName, Value& rVal)
-{
- sal_Int32 nIntValue = rVal.getInt();
- switch (rName)
- {
- case NS_ooxml::LN_CT_Columns_equalWidth:
- m_bEqualWidth = (nIntValue != 0);
- break;
- case NS_ooxml::LN_CT_Columns_space:
- m_nSpace = ConversionHelper::convertTwipToMM100(nIntValue);
- break;
- case NS_ooxml::LN_CT_Columns_num:
- m_nNum = nIntValue;
- break;
- case NS_ooxml::LN_CT_Columns_sep:
- m_bSep = (nIntValue != 0);
- break;
-
- case NS_ooxml::LN_CT_Column_w:
- m_aTempColumn.nWidth = ConversionHelper::convertTwipToMM100(nIntValue);
- break;
- case NS_ooxml::LN_CT_Column_space:
- m_aTempColumn.nSpace = ConversionHelper::convertTwipToMM100(nIntValue);
- break;
- default:
- OSL_FAIL("SectionColumnHandler: unknown attribute");
- }
-}
-
-void SectionColumnHandler::lcl_sprm(Sprm& rSprm)
-{
- switch (rSprm.getId())
- {
- case NS_ooxml::LN_CT_Columns_col:
- {
- m_aTempColumn.nWidth = m_aTempColumn.nSpace = 0;
- writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
- if (pProperties)
- {
- pProperties->resolve(*this);
- m_aCols.push_back(m_aTempColumn);
- }
- }
- break;
- default:
- OSL_FAIL("SectionColumnHandler: unknown sprm");
- }
-}
-} //namespace writerfilter::dmapper
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/SectionColumnHandler.hxx b/writerfilter/source/dmapper/SectionColumnHandler.hxx
deleted file mode 100644
index 70c9d6d7209f..000000000000
--- a/writerfilter/source/dmapper/SectionColumnHandler.hxx
+++ /dev/null
@@ -1,65 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * 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 .
- */
-#ifndef INCLUDED_WRITERFILTER_SOURCE_DMAPPER_SECTIONCOLUMNHANDLER_HXX
-#define INCLUDED_WRITERFILTER_SOURCE_DMAPPER_SECTIONCOLUMNHANDLER_HXX
-
-#include "LoggedResources.hxx"
-#include <vector>
-
-namespace writerfilter::dmapper
-{
-struct Column_
-{
- sal_Int32 nWidth;
- sal_Int32 nSpace;
-};
-
-
-class SectionColumnHandler : public LoggedProperties
-{
- bool m_bEqualWidth;
- sal_Int32 m_nSpace;
- sal_Int32 m_nNum;
- bool m_bSep;
- std::vector<Column_> m_aCols;
-
- Column_ m_aTempColumn;
-
- // Properties
- virtual void lcl_attribute(Id Name, Value & val) override;
- virtual void lcl_sprm(Sprm & sprm) override;
-
-public:
- SectionColumnHandler();
- virtual ~SectionColumnHandler() override;
-
- bool IsEqualWidth() const { return m_bEqualWidth; }
- sal_Int32 GetSpace() const { return m_nSpace; }
- sal_Int32 GetNum() const { return m_nNum; }
- bool IsSeparator() const { return m_bSep; }
-
- const std::vector<Column_>& GetColumns() const { return m_aCols;}
-
-};
-
-}
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/SettingsTable.cxx b/writerfilter/source/dmapper/SettingsTable.cxx
deleted file mode 100644
index 788fd93f25bc..000000000000
--- a/writerfilter/source/dmapper/SettingsTable.cxx
+++ /dev/null
@@ -1,891 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * 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 .
- */
-
-#include "SettingsTable.hxx"
-#include "TagLogger.hxx"
-
-#include <vector>
-
-#include <rtl/ustring.hxx>
-#include <sfx2/zoomitem.hxx>
-#include <com/sun/star/lang/XMultiServiceFactory.hpp>
-#include <com/sun/star/beans/XPropertySet.hpp>
-#include <com/sun/star/beans/XPropertyState.hpp>
-#include <com/sun/star/container/XNameContainer.hpp>
-#include <com/sun/star/style/XStyle.hpp>
-#include <com/sun/star/style/XStyleFamiliesSupplier.hpp>
-#include <comphelper/propertysequence.hxx>
-#include <comphelper/sequence.hxx>
-#include <ooxml/resourceids.hxx>
-#include "ConversionHelper.hxx"
-#include "DomainMapper.hxx"
-#include "util.hxx"
-
-using namespace com::sun::star;
-
-namespace writerfilter {
-namespace
-{
-/// Maps OOXML <w:zoom w:val="..."> to SvxZoomType.
-sal_Int16 lcl_GetZoomType(Id nType)
-{
- switch (nType)
- {
- case NS_ooxml::LN_Value_doc_ST_Zoom_fullPage:
- return sal_Int16(SvxZoomType::WHOLEPAGE);
- case NS_ooxml::LN_Value_doc_ST_Zoom_bestFit:
- return sal_Int16(SvxZoomType::PAGEWIDTH);
- case NS_ooxml::LN_Value_doc_ST_Zoom_textFit:
- return sal_Int16(SvxZoomType::OPTIMAL);
- }
-
- return sal_Int16(SvxZoomType::PERCENT);
-}
-}
-
-namespace dmapper
-{
- namespace {
-
- /** Document protection restrictions
- *
- * This element specifies the set of document protection restrictions which have been applied to the contents of a
- * WordprocessingML document.These restrictions should be enforced by applications editing this document
- * when the enforcement attribute is turned on, and ignored(but persisted) otherwise.Document protection is a
- * set of restrictions used to prevent unintentional changes to all or part of a WordprocessingML document.
- */
- struct DocumentProtection_Impl
- {
- /** Document Editing Restrictions
- *
- * Possible values:
- * - NS_ooxml::LN_Value_doc_ST_DocProtect_none
- * - NS_ooxml::LN_Value_doc_ST_DocProtect_readOnly
- * - NS_ooxml::LN_Value_doc_ST_DocProtect_comments
- * - NS_ooxml::LN_Value_doc_ST_DocProtect_trackedChanges
- * - NS_ooxml::LN_Value_doc_ST_DocProtect_forms
- */
- sal_Int32 m_nEdit;
- bool m_bEnforcement;
- bool m_bFormatting;
-
- /** Provider type
- *
- * Possible values:
- * "rsaAES" - NS_ooxml::LN_Value_doc_ST_CryptProv_rsaAES
- * "rsaFull" - NS_ooxml::LN_Value_doc_ST_CryptProv_rsaFull
- */
- sal_Int32 m_nCryptProviderType;
- OUString m_sCryptAlgorithmClass;
- OUString m_sCryptAlgorithmType;
- OUString m_sCryptAlgorithmSid;
- sal_Int32 m_CryptSpinCount;
- OUString m_sHash;
- OUString m_sSalt;
-
- DocumentProtection_Impl()
- : m_nEdit(NS_ooxml::LN_Value_doc_ST_DocProtect_none) // Specifies that no editing restrictions have been applied to the document
- , m_bEnforcement(false)
- , m_bFormatting(false)
- , m_nCryptProviderType(NS_ooxml::LN_Value_doc_ST_CryptProv_rsaAES)
- , m_sCryptAlgorithmClass("hash")
- , m_sCryptAlgorithmType("typeAny")
- , m_CryptSpinCount(0)
- {
- }
-
- css::uno::Sequence<css::beans::PropertyValue> toSequence() const;
-
- bool enabled() const
- {
- return ! isNone();
- }
-
- bool isNone() const { return m_nEdit == NS_ooxml::LN_Value_doc_ST_DocProtect_none; };
- };
-
- }
-
- css::uno::Sequence<css::beans::PropertyValue> DocumentProtection_Impl::toSequence() const
- {
- std::vector<beans::PropertyValue> documentProtection;
-
- if (enabled())
- {
- // w:edit
- {
- beans::PropertyValue aValue;
- aValue.Name = "edit";
-
- switch (m_nEdit)
- {
- case NS_ooxml::LN_Value_doc_ST_DocProtect_none: aValue.Value <<= OUString("none"); break;
- case NS_ooxml::LN_Value_doc_ST_DocProtect_readOnly: aValue.Value <<= OUString("readOnly"); break;
- case NS_ooxml::LN_Value_doc_ST_DocProtect_comments: aValue.Value <<= OUString("comments"); break;
- case NS_ooxml::LN_Value_doc_ST_DocProtect_trackedChanges: aValue.Value <<= OUString("trackedChanges"); break;
- case NS_ooxml::LN_Value_doc_ST_DocProtect_forms: aValue.Value <<= OUString("forms"); break;
- default:
- {
-#ifdef DBG_UTIL
- TagLogger::getInstance().element("unhandled");
-#endif
- }
- }
-
- documentProtection.push_back(aValue);
- }
-
- // w:enforcement
- if (m_bEnforcement)
- {
- beans::PropertyValue aValue;
- aValue.Name = "enforcement";
- aValue.Value <<= OUString("1");
- documentProtection.push_back(aValue);
- }
-
- // w:formatting
- if (m_bFormatting)
- {
- beans::PropertyValue aValue;
- aValue.Name = "formatting";
- aValue.Value <<= OUString("1");
- documentProtection.push_back(aValue);
- }
-
- // w:cryptProviderType
- {
- beans::PropertyValue aValue;
- aValue.Name = "cryptProviderType";
- if (m_nCryptProviderType == NS_ooxml::LN_Value_doc_ST_CryptProv_rsaAES)
- aValue.Value <<= OUString("rsaAES");
- else if (m_nCryptProviderType == NS_ooxml::LN_Value_doc_ST_CryptProv_rsaFull)
- aValue.Value <<= OUString("rsaFull");
- documentProtection.push_back(aValue);
- }
-
- // w:cryptAlgorithmClass
- {
- beans::PropertyValue aValue;
- aValue.Name = "cryptAlgorithmClass";
- aValue.Value <<= m_sCryptAlgorithmClass;
- documentProtection.push_back(aValue);
- }
-
- // w:cryptAlgorithmType
- {
- beans::PropertyValue aValue;
- aValue.Name = "cryptAlgorithmType";
- aValue.Value <<= m_sCryptAlgorithmType;
- documentProtection.push_back(aValue);
- }
-
- // w:cryptAlgorithmSid
- {
- beans::PropertyValue aValue;
- aValue.Name = "cryptAlgorithmSid";
- aValue.Value <<= m_sCryptAlgorithmSid;
- documentProtection.push_back(aValue);
- }
-
- // w:cryptSpinCount
- {
- beans::PropertyValue aValue;
- aValue.Name = "cryptSpinCount";
- aValue.Value <<= OUString::number(m_CryptSpinCount);
- documentProtection.push_back(aValue);
- }
-
- // w:hash
- {
- beans::PropertyValue aValue;
- aValue.Name = "hash";
- aValue.Value <<= m_sHash;
- documentProtection.push_back(aValue);
- }
-
- // w:salt
- {
- beans::PropertyValue aValue;
- aValue.Name = "salt";
- aValue.Value <<= m_sSalt;
- documentProtection.push_back(aValue);
- }
- }
-
- return comphelper::containerToSequence(documentProtection);
- }
-
-struct SettingsTable_Impl
-{
- int m_nDefaultTabStop;
-
- bool m_bRecordChanges;
- bool m_bShowInsDelChanges;
- bool m_bShowFormattingChanges;
- bool m_bShowMarkupChanges;
- bool m_bLinkStyles;
- sal_Int16 m_nZoomFactor;
- sal_Int16 m_nZoomType = 0;
- sal_Int32 m_nWordCompatibilityMode;
- Id m_nView;
- bool m_bEvenAndOddHeaders;
- bool m_bUsePrinterMetrics;
- bool embedTrueTypeFonts;
- bool embedSystemFonts;
- bool m_bDoNotUseHTMLParagraphAutoSpacing;
- bool m_bNoColumnBalance;
- bool m_bAutoHyphenation;
- bool m_bNoHyphenateCaps;
- sal_Int16 m_nHyphenationZone;
- bool m_bWidowControl;
- bool m_bLongerSpaceSequence;
- bool m_bSplitPgBreakAndParaMark;
- bool m_bMirrorMargin;
- bool m_bDoNotExpandShiftReturn;
- bool m_bProtectForm;
- bool m_bRedlineProtection;
- OUString m_sRedlineProtectionKey;
- bool m_bReadOnly;
- bool m_bDisplayBackgroundShape;
- bool m_bNoLeading = false;
- OUString m_sDecimalSymbol;
- OUString m_sListSeparator;
-
- uno::Sequence<beans::PropertyValue> m_pThemeFontLangProps;
-
- std::vector<beans::PropertyValue> m_aCompatSettings;
- uno::Sequence<beans::PropertyValue> m_pCurrentCompatSetting;
- OUString m_sCurrentDatabaseDataSource;
-
- DocumentProtection_Impl m_DocumentProtection;
-
- SettingsTable_Impl() :
- m_nDefaultTabStop( 720 ) //default is 1/2 in
- , m_bRecordChanges(false)
- , m_bShowInsDelChanges(true)
- , m_bShowFormattingChanges(false)
- , m_bShowMarkupChanges(true)
- , m_bLinkStyles(false)
- , m_nZoomFactor(0)
- , m_nWordCompatibilityMode(-1)
- , m_nView(0)
- , m_bEvenAndOddHeaders(false)
- , m_bUsePrinterMetrics(false)
- , embedTrueTypeFonts(false)
- , embedSystemFonts(false)
- , m_bDoNotUseHTMLParagraphAutoSpacing(false)
- , m_bNoColumnBalance(false)
- , m_bAutoHyphenation(false)
- , m_bNoHyphenateCaps(false)
- , m_nHyphenationZone(0)
- , m_bWidowControl(false)
- , m_bLongerSpaceSequence(false)
- , m_bSplitPgBreakAndParaMark(false)
- , m_bMirrorMargin(false)
- , m_bDoNotExpandShiftReturn(false)
- , m_bProtectForm(false)
- , m_bRedlineProtection(false)
- , m_sRedlineProtectionKey()
- , m_bReadOnly(false)
- , m_bDisplayBackgroundShape(false)
- , m_sDecimalSymbol(".")
- , m_sListSeparator(",")
- , m_pThemeFontLangProps(3)
- , m_pCurrentCompatSetting(3)
- {}
-
-};
-
-SettingsTable::SettingsTable(const DomainMapper& rDomainMapper)
-: LoggedProperties("SettingsTable")
-, LoggedTable("SettingsTable")
-, m_pImpl( new SettingsTable_Impl )
-{
- if (rDomainMapper.IsRTFImport())
- {
- // HTML paragraph auto-spacing is opt-in for RTF, opt-out for OOXML.
- m_pImpl->m_bDoNotUseHTMLParagraphAutoSpacing = true;
- // Longer space sequence is opt-in for RTF, and not in OOXML.
- m_pImpl->m_bLongerSpaceSequence = true;
- }
-}
-
-SettingsTable::~SettingsTable()
-{
-}
-
-void SettingsTable::lcl_attribute(Id nName, Value & val)
-{
- int nIntValue = val.getInt();
- OUString sStringValue = val.getString();
-
- switch(nName)
- {
- case NS_ooxml::LN_CT_Zoom_percent:
- m_pImpl->m_nZoomFactor = nIntValue;
- break;
- case NS_ooxml::LN_CT_Zoom_val:
- m_pImpl->m_nZoomType = lcl_GetZoomType(nIntValue);
- break;
- case NS_ooxml::LN_CT_Language_val:
- m_pImpl->m_pThemeFontLangProps[0].Name = "val";
- m_pImpl->m_pThemeFontLangProps[0].Value <<= sStringValue;
- break;
- case NS_ooxml::LN_CT_Language_eastAsia:
- m_pImpl->m_pThemeFontLangProps[1].Name = "eastAsia";
- m_pImpl->m_pThemeFontLangProps[1].Value <<= sStringValue;
- break;
- case NS_ooxml::LN_CT_Language_bidi:
- m_pImpl->m_pThemeFontLangProps[2].Name = "bidi";
- m_pImpl->m_pThemeFontLangProps[2].Value <<= sStringValue;
- break;
- case NS_ooxml::LN_CT_View_val:
- m_pImpl->m_nView = nIntValue;
- break;
- case NS_ooxml::LN_CT_CompatSetting_name:
- m_pImpl->m_pCurrentCompatSetting[0].Name = "name";
- m_pImpl->m_pCurrentCompatSetting[0].Value <<= sStringValue;
- break;
- case NS_ooxml::LN_CT_CompatSetting_uri:
- m_pImpl->m_pCurrentCompatSetting[1].Name = "uri";
- m_pImpl->m_pCurrentCompatSetting[1].Value <<= sStringValue;
- break;
- case NS_ooxml::LN_CT_CompatSetting_val:
- m_pImpl->m_pCurrentCompatSetting[2].Name = "val";
- m_pImpl->m_pCurrentCompatSetting[2].Value <<= sStringValue;
- break;
- case NS_ooxml::LN_CT_DocProtect_edit: // 92037
- m_pImpl->m_DocumentProtection.m_nEdit = nIntValue;
- // multiple DocProtect_edits should not exist. If they do, last one wins
- m_pImpl->m_bRedlineProtection = false;
- m_pImpl->m_bProtectForm = false;
- m_pImpl->m_bReadOnly = false;
- switch (nIntValue)
- {
- case NS_ooxml::LN_Value_doc_ST_DocProtect_trackedChanges:
- {
- m_pImpl->m_bRedlineProtection = true;
- m_pImpl->m_sRedlineProtectionKey = m_pImpl->m_DocumentProtection.m_sHash;
- break;
- }
- case NS_ooxml::LN_Value_doc_ST_DocProtect_forms:
- m_pImpl->m_bProtectForm = true;
- break;
- case NS_ooxml::LN_Value_doc_ST_DocProtect_readOnly:
- m_pImpl->m_bReadOnly = true;
- break;
- }
- break;
- case NS_ooxml::LN_CT_DocProtect_enforcement: // 92039
- m_pImpl->m_DocumentProtection.m_bEnforcement = (nIntValue != 0);
- break;
- case NS_ooxml::LN_CT_DocProtect_formatting: // 92038
- m_pImpl->m_DocumentProtection.m_bFormatting = (nIntValue != 0);
- break;
- case NS_ooxml::LN_AG_Password_cryptProviderType: // 92025
- m_pImpl->m_DocumentProtection.m_nCryptProviderType = nIntValue;
- break;
- case NS_ooxml::LN_AG_Password_cryptAlgorithmClass: // 92026
- if (nIntValue == NS_ooxml::LN_Value_doc_ST_AlgClass_hash) // 92023
- m_pImpl->m_DocumentProtection.m_sCryptAlgorithmClass = "hash";
- break;
- case NS_ooxml::LN_AG_Password_cryptAlgorithmType: // 92027
- if (nIntValue == NS_ooxml::LN_Value_doc_ST_AlgType_typeAny) // 92024
- m_pImpl->m_DocumentProtection.m_sCryptAlgorithmType = "typeAny";
- break;
- case NS_ooxml::LN_AG_Password_cryptAlgorithmSid: // 92028
- m_pImpl->m_DocumentProtection.m_sCryptAlgorithmSid = sStringValue;
- break;
- case NS_ooxml::LN_AG_Password_cryptSpinCount: // 92029
- m_pImpl->m_DocumentProtection.m_CryptSpinCount = nIntValue;
- break;
- case NS_ooxml::LN_AG_Password_hash: // 92035
- m_pImpl->m_DocumentProtection.m_sHash = sStringValue;
- break;
- case NS_ooxml::LN_AG_Password_salt: // 92036
- m_pImpl->m_DocumentProtection.m_sSalt = sStringValue;
- break;
- case NS_ooxml::LN_CT_TrackChangesView_insDel:
- m_pImpl->m_bShowInsDelChanges = (nIntValue != 0);
- break;
- case NS_ooxml::LN_CT_TrackChangesView_formatting:
- m_pImpl->m_bShowFormattingChanges = (nIntValue != 0);
- break;
- case NS_ooxml::LN_CT_TrackChangesView_markup:
- m_pImpl->m_bShowMarkupChanges = (nIntValue != 0);
- break;
- default:
- {
-#ifdef DBG_UTIL
- TagLogger::getInstance().element("unhandled");
-#endif
- }
- }
-}
-
-void SettingsTable::lcl_sprm(Sprm& rSprm)
-{
- sal_uInt32 nSprmId = rSprm.getId();
-
- Value::Pointer_t pValue = rSprm.getValue();
- sal_Int32 nIntValue = pValue->getInt();
-
- switch(nSprmId)
- {
- case NS_ooxml::LN_CT_Settings_zoom: // 92469;
- case NS_ooxml::LN_CT_Settings_proofState: // 92489;
- case NS_ooxml::LN_CT_Settings_attachedTemplate: // 92491;
- case NS_ooxml::LN_CT_Settings_hdrShapeDefaults: // 92544;
- case NS_ooxml::LN_CT_Settings_footnotePr: // 92545;
- case NS_ooxml::LN_CT_Settings_endnotePr: // 92546;
- case NS_ooxml::LN_CT_Settings_compat: // 92547;
- case NS_ooxml::LN_CT_Settings_themeFontLang: // 92552;
- case NS_ooxml::LN_CT_Settings_shapeDefaults: // 92560;
- case NS_ooxml::LN_CT_Settings_view:
- //PropertySetValues - need to be resolved
- {
- resolveSprmProps(*this, rSprm);
- }
- break;
- case NS_ooxml::LN_CT_Settings_stylePaneFormatFilter: // 92493;
- break;
- case NS_ooxml::LN_CT_Settings_defaultTabStop: // 92505;
- m_pImpl->m_nDefaultTabStop = nIntValue;
- break;
- case NS_ooxml::LN_CT_Settings_linkStyles: // 92663;
- m_pImpl->m_bLinkStyles = nIntValue;
- break;
- case NS_ooxml::LN_CT_Settings_evenAndOddHeaders:
- m_pImpl->m_bEvenAndOddHeaders = nIntValue;
- break;
- case NS_ooxml::LN_CT_Settings_noPunctuationKerning: // 92526;
- break;
- case NS_ooxml::LN_CT_Settings_characterSpacingControl: // 92527;
- // doNotCompress, compressPunctuation, compressPunctuationAndJapaneseKana
- break;
- case NS_ooxml::LN_CT_Settings_doNotIncludeSubdocsInStats: // 92554; // Do Not Include Content in Text Boxes, Footnotes, and Endnotes in Document Statistics)
- break;
- case NS_ooxml::LN_CT_Settings_decimalSymbol: // 92562;
- m_pImpl->m_sDecimalSymbol = pValue->getString();
- break;
- case NS_ooxml::LN_CT_Settings_listSeparator: // 92563;
- m_pImpl->m_sListSeparator = pValue->getString();
- break;
- case NS_ooxml::LN_CT_Settings_rsids: // 92549; revision save Ids - probably not necessary
- break;
- case NS_ooxml::LN_CT_Settings_hyphenationZone: // 92508;
- m_pImpl->m_nHyphenationZone = nIntValue;
- break;
- case NS_ooxml::LN_CT_Compat_useFELayout: // 92422;
- // useFELayout (Do Not Bypass East Asian/Complex Script Layout Code - support of old versions of Word - ignored)
- break;
- case NS_ooxml::LN_CT_Settings_trackRevisions:
- {
- m_pImpl->m_bRecordChanges = bool(rSprm.getValue( )->getInt( ) );
- }
- break;
- case NS_ooxml::LN_CT_Settings_revisionView:
- resolveSprmProps(*this, rSprm);
- break;
- case NS_ooxml::LN_CT_Settings_documentProtection:
- resolveSprmProps(*this, rSprm);
- break;
- case NS_ooxml::LN_CT_Compat_usePrinterMetrics:
- m_pImpl->m_bUsePrinterMetrics = nIntValue;
- break;
- case NS_ooxml::LN_CT_Settings_embedTrueTypeFonts:
- m_pImpl->embedTrueTypeFonts = nIntValue != 0;
- break;
- case NS_ooxml::LN_CT_Settings_embedSystemFonts:
- m_pImpl->embedSystemFonts = nIntValue != 0;
- break;
- case NS_ooxml::LN_CT_Compat_doNotUseHTMLParagraphAutoSpacing:
- m_pImpl->m_bDoNotUseHTMLParagraphAutoSpacing = nIntValue;
- break;
- case NS_ooxml::LN_CT_Compat_splitPgBreakAndParaMark:
- m_pImpl->m_bSplitPgBreakAndParaMark = nIntValue;
- break;
- case NS_ooxml::LN_CT_Settings_mirrorMargins:
- m_pImpl->m_bMirrorMargin = nIntValue;
- break;
- case NS_ooxml::LN_CT_Settings_mailMerge:
- {
- writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
- if (pProperties)
- pProperties->resolve(*this);
- }
- break;
- case NS_ooxml::LN_CT_MailMerge_query:
- {
- // try to get the "database.table" name from the query saved previously
- OUString sVal = pValue->getString();
- if ( sVal.endsWith("$") && sVal.indexOf(".dbo.") > 0 )
- {
- sal_Int32 nSpace = sVal.lastIndexOf(' ');
- sal_Int32 nDbo = sVal.lastIndexOf(".dbo.");
- if ( nSpace > 0 && nSpace < nDbo - 1 )
- {
- m_pImpl->m_sCurrentDatabaseDataSource = OUString::Concat(sVal.subView(nSpace + 1, nDbo - nSpace - 1)) +
- sVal.subView(nDbo + 4, sVal.getLength() - nDbo - 5);
- }
- }
- }
- break;
- case NS_ooxml::LN_CT_Compat_compatSetting:
- {
- writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
- if (pProperties)
- {
- pProperties->resolve(*this);
-
- beans::PropertyValue aValue;
- aValue.Name = "compatSetting";
- aValue.Value <<= m_pImpl->m_pCurrentCompatSetting;
- m_pImpl->m_aCompatSettings.push_back(aValue);
- }
- }
- break;
- case NS_ooxml::LN_CT_Compat_noColumnBalance:
- m_pImpl->m_bNoColumnBalance = nIntValue;
- break;
- case NS_ooxml::LN_CT_Settings_autoHyphenation:
- m_pImpl->m_bAutoHyphenation = nIntValue;
- break;
- case NS_ooxml::LN_CT_Settings_doNotHyphenateCaps:
- m_pImpl->m_bNoHyphenateCaps = nIntValue;
- break;
- case NS_ooxml::LN_CT_Settings_widowControl:
- m_pImpl->m_bWidowControl = nIntValue;
- break;
- case NS_ooxml::LN_CT_Settings_longerSpaceSequence:
- m_pImpl->m_bLongerSpaceSequence = nIntValue;
- break;
- case NS_ooxml::LN_CT_Compat_doNotExpandShiftReturn:
- m_pImpl->m_bDoNotExpandShiftReturn = true;
- break;
- case NS_ooxml::LN_CT_Settings_displayBackgroundShape:
- m_pImpl->m_bDisplayBackgroundShape = nIntValue;
- break;
- case NS_ooxml::LN_CT_Compat_noLeading:
- m_pImpl->m_bNoLeading = nIntValue != 0;
- break;
- default:
- {
-#ifdef DBG_UTIL
- TagLogger::getInstance().element("unhandled");
-#endif
- }
- }
-}
-
-void SettingsTable::lcl_entry(writerfilter::Reference<Properties>::Pointer_t ref)
-{
- ref->resolve(*this);
-}
-
-//returns default TabStop in 1/100th mm
-int SettingsTable::GetDefaultTabStop() const
-{
- return ConversionHelper::convertTwipToMM100( m_pImpl->m_nDefaultTabStop );
-}
-
-bool SettingsTable::GetLinkStyles() const
-{
- return m_pImpl->m_bLinkStyles;
-}
-
-sal_Int16 SettingsTable::GetZoomFactor() const
-{
- return m_pImpl->m_nZoomFactor;
-}
-
-sal_Int16 SettingsTable::GetZoomType() const { return m_pImpl->m_nZoomType; }
-
-Id SettingsTable::GetView() const
-{
- return m_pImpl->m_nView;
-}
-
-bool SettingsTable::GetUsePrinterMetrics() const
-{
- return m_pImpl->m_bUsePrinterMetrics;
-}
-
-bool SettingsTable::GetEvenAndOddHeaders() const
-{
- return m_pImpl->m_bEvenAndOddHeaders;
-}
-
-bool SettingsTable::GetEmbedTrueTypeFonts() const
-{
- return m_pImpl->embedTrueTypeFonts;
-}
-
-bool SettingsTable::GetEmbedSystemFonts() const
-{
- return m_pImpl->embedSystemFonts;
-}
-
-bool SettingsTable::GetDoNotUseHTMLParagraphAutoSpacing() const
-{
- return m_pImpl->m_bDoNotUseHTMLParagraphAutoSpacing;
-}
-
-bool SettingsTable::GetNoColumnBalance() const
-{
- return m_pImpl->m_bNoColumnBalance;
-}
-
-bool SettingsTable::GetSplitPgBreakAndParaMark() const
-{
- return m_pImpl->m_bSplitPgBreakAndParaMark;
-}
-
-bool SettingsTable::GetMirrorMarginSettings() const
-{
- return m_pImpl->m_bMirrorMargin;
-}
-
-bool SettingsTable::GetDisplayBackgroundShape() const
-{
- return m_pImpl->m_bDisplayBackgroundShape;
-}
-
-bool SettingsTable::GetDoNotExpandShiftReturn() const
-{
- return m_pImpl->m_bDoNotExpandShiftReturn;
-}
-
-bool SettingsTable::GetProtectForm() const
-{
- return m_pImpl->m_bProtectForm && m_pImpl->m_DocumentProtection.m_bEnforcement;
-}
-
-bool SettingsTable::GetReadOnly() const
-{
- return m_pImpl->m_bReadOnly && m_pImpl->m_DocumentProtection.m_bEnforcement;
-}
-
-bool SettingsTable::GetNoHyphenateCaps() const
-{
- return m_pImpl->m_bNoHyphenateCaps;
-}
-
-sal_Int16 SettingsTable::GetHyphenationZone() const
-{
- return m_pImpl->m_nHyphenationZone;
-}
-
-OUString SettingsTable::GetDecimalSymbol() const
-{
- return m_pImpl->m_sDecimalSymbol;
-}
-
-OUString SettingsTable::GetListSeparator() const
-{
- return m_pImpl->m_sListSeparator;
-}
-
-
-uno::Sequence<beans::PropertyValue> const & SettingsTable::GetThemeFontLangProperties() const
-{
- return m_pImpl->m_pThemeFontLangProps;
-}
-
-uno::Sequence<beans::PropertyValue> SettingsTable::GetCompatSettings() const
-{
- if ( GetWordCompatibilityMode() == -1 )
- {
- // the default value for an undefined compatibilityMode is 12 (Word 2007)
- uno::Sequence<beans::PropertyValue> aCompatSetting( comphelper::InitPropertySequence({
- { "name", uno::Any(OUString("compatibilityMode")) },
- { "uri", uno::Any(OUString("http://schemas.microsoft.com/office/word")) },
- { "val", uno::Any(OUString("12")) } //12: Use word processing features specified in ECMA-376. This is the default.
- }));
-
- beans::PropertyValue aValue;
- aValue.Name = "compatSetting";
- aValue.Value <<= aCompatSetting;
-
- m_pImpl->m_aCompatSettings.push_back(aValue);
- }
-
- return comphelper::containerToSequence(m_pImpl->m_aCompatSettings);
-}
-
-css::uno::Sequence<css::beans::PropertyValue> SettingsTable::GetDocumentProtectionSettings() const
-{
- return m_pImpl->m_DocumentProtection.toSequence();
-}
-
-const OUString & SettingsTable::GetCurrentDatabaseDataSource() const
-{
- return m_pImpl->m_sCurrentDatabaseDataSource;
-}
-
-static bool lcl_isDefault(const uno::Reference<beans::XPropertyState>& xPropertyState, const OUString& rPropertyName)
-{
- return xPropertyState->getPropertyState(rPropertyName) == beans::PropertyState_DEFAULT_VALUE;
-}
-
-void SettingsTable::ApplyProperties(uno::Reference<text::XTextDocument> const& xDoc)
-{
- uno::Reference< beans::XPropertySet> xDocProps( xDoc, uno::UNO_QUERY );
-
- if (GetWordCompatibilityMode() <= 14)
- {
- uno::Reference<lang::XMultiServiceFactory> xTextFactory(xDoc, uno::UNO_QUERY_THROW);
- uno::Reference<beans::XPropertySet> xDocumentSettings(xTextFactory->createInstance("com.sun.star.document.Settings"), uno::UNO_QUERY_THROW);
- xDocumentSettings->setPropertyValue("MsWordCompMinLineHeightByFly", uno::makeAny(true));
- }
-
- // Show changes value
- if (xDocProps.is())
- {
- bool bHideChanges = !m_pImpl->m_bShowInsDelChanges || !m_pImpl->m_bShowMarkupChanges;
- xDocProps->setPropertyValue("ShowChanges", uno::makeAny( !bHideChanges || m_pImpl->m_bShowFormattingChanges ) );
- }
-
- // Record changes value
- if (xDocProps.is())
- {
- xDocProps->setPropertyValue("RecordChanges", uno::makeAny( m_pImpl->m_bRecordChanges ) );
- // Password protected Record changes
- if ( m_pImpl->m_bRecordChanges && m_pImpl->m_bRedlineProtection && m_pImpl->m_DocumentProtection.m_bEnforcement )
- {
- // use dummy protection key to forbid disabling of Record changes without a notice
- // (extending the recent GrabBag support) TODO support password verification...
- css::uno::Sequence<sal_Int8> aDummyKey(1);
- aDummyKey[0] = 1;
- xDocProps->setPropertyValue("RedlineProtectionKey", uno::makeAny( aDummyKey ));
- }
- }
-
- // Auto hyphenation: turns on hyphenation by default, <w:suppressAutoHyphens/> may still disable it at a paragraph level.
- // Situation is similar for RTF_WIDOWCTRL, which turns on widow / orphan control by default.
- if (!(m_pImpl->m_bAutoHyphenation || m_pImpl->m_bNoHyphenateCaps || m_pImpl->m_bWidowControl))
- return;
-
- uno::Reference<style::XStyleFamiliesSupplier> xStyleFamiliesSupplier(xDoc, uno::UNO_QUERY);
- if (!xStyleFamiliesSupplier.is())
- return;
-
- uno::Reference<container::XNameAccess> xStyleFamilies = xStyleFamiliesSupplier->getStyleFamilies();
- uno::Reference<container::XNameContainer> xParagraphStyles = xStyleFamilies->getByName("ParagraphStyles").get< uno::Reference<container::XNameContainer> >();
- uno::Reference<style::XStyle> xDefault = xParagraphStyles->getByName("Standard").get< uno::Reference<style::XStyle> >();
- uno::Reference<beans::XPropertyState> xPropertyState(xDefault, uno::UNO_QUERY);
- if (m_pImpl->m_bAutoHyphenation && lcl_isDefault(xPropertyState, "ParaIsHyphenation"))
- {
- uno::Reference<beans::XPropertySet> xPropertySet(xDefault, uno::UNO_QUERY);
- xPropertySet->setPropertyValue("ParaIsHyphenation", uno::makeAny(true));
- }
- if (m_pImpl->m_bNoHyphenateCaps)
- {
- uno::Reference<beans::XPropertySet> xPropertySet(xDefault, uno::UNO_QUERY);
- xPropertySet->setPropertyValue("ParaHyphenationNoCaps", uno::makeAny(true));
- }
- if (m_pImpl->m_bWidowControl && lcl_isDefault(xPropertyState, "ParaWidows") && lcl_isDefault(xPropertyState, "ParaOrphans"))
- {
- uno::Reference<beans::XPropertySet> xPropertySet(xDefault, uno::UNO_QUERY);
- uno::Any aAny = uno::makeAny(static_cast<sal_Int8>(2));
- xPropertySet->setPropertyValue("ParaWidows", aAny);
- xPropertySet->setPropertyValue("ParaOrphans", aAny);
- }
-}
-
-bool SettingsTable::GetCompatSettingValue( std::u16string_view sCompatName ) const
-{
- bool bRet = false;
- for (const auto& rProp : m_pImpl->m_aCompatSettings)
- {
- if (rProp.Name == "compatSetting") //always true
- {
- css::uno::Sequence<css::beans::PropertyValue> aCurrentCompatSettings;
- rProp.Value >>= aCurrentCompatSettings;
-
- OUString sName;
- aCurrentCompatSettings[0].Value >>= sName;
- if ( sName != sCompatName )
- continue;
-
- OUString sUri;
- aCurrentCompatSettings[1].Value >>= sUri;
- if ( sUri != "http://schemas.microsoft.com/office/word" )
- continue;
-
- OUString sVal;
- aCurrentCompatSettings[2].Value >>= sVal;
- // if repeated, what happens? Last one wins
- bRet = sVal.toBoolean();
- }
- }
-
- return bRet;
-}
-
-//Keep this function in-sync with the one in sw/.../docxattributeoutput.cxx
-sal_Int32 SettingsTable::GetWordCompatibilityMode() const
-{
- if ( m_pImpl->m_nWordCompatibilityMode != -1 )
- return m_pImpl->m_nWordCompatibilityMode;
-
- for (const auto& rProp : m_pImpl->m_aCompatSettings)
- {
- if (rProp.Name == "compatSetting") //always true
- {
- css::uno::Sequence<css::beans::PropertyValue> aCurrentCompatSettings;
- rProp.Value >>= aCurrentCompatSettings;
-
- OUString sName;
- aCurrentCompatSettings[0].Value >>= sName;
- if ( sName != "compatibilityMode" )
- continue;
-
- OUString sUri;
- aCurrentCompatSettings[1].Value >>= sUri;
- if ( sUri != "http://schemas.microsoft.com/office/word" )
- continue;
-
- OUString sVal;
- aCurrentCompatSettings[2].Value >>= sVal;
- const sal_Int32 nValidMode = sVal.toInt32();
- // if repeated, highest mode wins in MS Word. 11 is the first valid mode.
- if ( nValidMode > 10 && nValidMode > m_pImpl->m_nWordCompatibilityMode )
- m_pImpl->m_nWordCompatibilityMode = nValidMode;
- }
- }
-
- return m_pImpl->m_nWordCompatibilityMode;
-}
-
-bool SettingsTable::GetLongerSpaceSequence() const
-{
- return m_pImpl->m_bLongerSpaceSequence;
-}
-
-bool SettingsTable::GetNoLeading() const
-{
- return m_pImpl->m_bNoLeading;
-}
-
-}//namespace dmapper
-} //namespace writerfilter
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/SettingsTable.hxx b/writerfilter/source/dmapper/SettingsTable.hxx
deleted file mode 100644
index 035384af52be..000000000000
--- a/writerfilter/source/dmapper/SettingsTable.hxx
+++ /dev/null
@@ -1,111 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * 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 .
- */
-
-#ifndef INCLUDED_WRITERFILTER_SOURCE_DMAPPER_SETTINGSTABLE_HXX
-#define INCLUDED_WRITERFILTER_SOURCE_DMAPPER_SETTINGSTABLE_HXX
-
-#include "LoggedResources.hxx"
-#include <com/sun/star/text/XTextDocument.hpp>
-#include <memory>
-
-namespace com::sun::star::lang
-{
-class XMultiServiceFactory;
-struct Locale;
-}
-
-namespace writerfilter::dmapper
-{
-class DomainMapper;
-
-struct SettingsTable_Impl;
-
-class SettingsTable : public LoggedProperties, public LoggedTable
-{
- std::unique_ptr<SettingsTable_Impl> m_pImpl;
-
-public:
- SettingsTable(const DomainMapper& rDomainMapper);
- virtual ~SettingsTable() override;
-
- //returns default TabStop in 1/100th mm
- int GetDefaultTabStop() const;
-
- /// Automatically update styles from document template?
- bool GetLinkStyles() const;
-
- /// What's the zoom factor set in percents?
- sal_Int16 GetZoomFactor() const;
-
- /// Gets the type of the zoom.
- sal_Int16 GetZoomType() const;
-
- /// What's the requested view? E.g. "web".
- Id GetView() const;
-
- bool GetEvenAndOddHeaders() const;
-
- bool GetUsePrinterMetrics() const;
-
- bool GetEmbedTrueTypeFonts() const;
- bool GetEmbedSystemFonts() const;
-
- bool GetDoNotUseHTMLParagraphAutoSpacing() const;
- bool GetSplitPgBreakAndParaMark() const;
- bool GetMirrorMarginSettings() const;
- bool GetDisplayBackgroundShape() const;
- bool GetDoNotExpandShiftReturn() const;
- bool GetNoColumnBalance() const;
- bool GetProtectForm() const;
- bool GetReadOnly() const;
- bool GetLongerSpaceSequence() const;
- bool GetNoLeading() const;
- bool GetNoHyphenateCaps() const;
- sal_Int16 GetHyphenationZone() const;
-
- OUString GetDecimalSymbol() const;
- OUString GetListSeparator() const;
-
- css::uno::Sequence<css::beans::PropertyValue> const& GetThemeFontLangProperties() const;
-
- css::uno::Sequence<css::beans::PropertyValue> GetCompatSettings() const;
-
- css::uno::Sequence<css::beans::PropertyValue> GetDocumentProtectionSettings() const;
-
- void ApplyProperties(css::uno::Reference<css::text::XTextDocument> const& xDoc);
-
- bool GetCompatSettingValue(std::u16string_view sCompatName) const;
- sal_Int32 GetWordCompatibilityMode() const;
-
- const OUString& GetCurrentDatabaseDataSource() const;
-
-private:
- // Properties
- virtual void lcl_attribute(Id Name, Value& val) override;
- virtual void lcl_sprm(Sprm& sprm) override;
-
- // Table
- virtual void lcl_entry(writerfilter::Reference<Properties>::Pointer_t ref) override;
-};
-typedef tools::SvRef<SettingsTable> SettingsTablePtr;
-}
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/SmartTagHandler.cxx b/writerfilter/source/dmapper/SmartTagHandler.cxx
deleted file mode 100644
index c92fa7c44be5..000000000000
--- a/writerfilter/source/dmapper/SmartTagHandler.cxx
+++ /dev/null
@@ -1,127 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-
-#include "SmartTagHandler.hxx"
-
-#include <com/sun/star/rdf/Literal.hpp>
-#include <com/sun/star/rdf/URI.hpp>
-#include <com/sun/star/rdf/XDocumentMetadataAccess.hpp>
-#include <com/sun/star/text/XTextDocument.hpp>
-#include <com/sun/star/text/XTextRange.hpp>
-
-#include <ooxml/resourceids.hxx>
-
-#include <sal/log.hxx>
-
-namespace
-{
-OUString lcl_getTypePath(OUString& rType)
-{
- OUString aRet;
- if (rType.startsWith("urn:bails"))
- {
- rType = "urn:bails";
- aRet = "tscp/bails.rdf";
- }
- return aRet;
-}
-}
-
-namespace writerfilter::dmapper
-{
-using namespace ::com::sun::star;
-
-SmartTagHandler::SmartTagHandler(uno::Reference<uno::XComponentContext> xComponentContext,
- const uno::Reference<text::XTextDocument>& xTextDocument)
- : LoggedProperties("SmartTagHandler")
- , m_xComponentContext(std::move(xComponentContext))
- , m_xDocumentMetadataAccess(xTextDocument, uno::UNO_QUERY)
-{
-}
-
-SmartTagHandler::~SmartTagHandler() = default;
-
-void SmartTagHandler::lcl_attribute(Id nId, Value& rValue)
-{
- switch (nId)
- {
- case NS_ooxml::LN_CT_Attr_name:
- m_aAttributes.emplace_back(rValue.getString(), OUString());
- break;
- case NS_ooxml::LN_CT_Attr_val:
- if (!m_aAttributes.empty())
- m_aAttributes.back().second = rValue.getString();
- break;
- default:
- SAL_WARN("writerfilter", "SmartTagHandler::lcl_attribute: unhandled attribute "
- << nId << " (string value: '" << rValue.getString()
- << "')");
- break;
- }
-}
-
-void SmartTagHandler::lcl_sprm(Sprm& rSprm)
-{
- switch (rSprm.getId())
- {
- case NS_ooxml::LN_CT_SmartTagPr_attr:
- {
- writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
- if (pProperties)
- pProperties->resolve(*this);
- break;
- }
- }
-}
-
-void SmartTagHandler::setURI(const OUString& rURI) { m_aURI = rURI; }
-
-void SmartTagHandler::setElement(const OUString& rElement) { m_aElement = rElement; }
-
-void SmartTagHandler::handle(const uno::Reference<text::XTextRange>& xParagraph)
-{
- if (m_aURI.isEmpty() || m_aElement.isEmpty() || m_aAttributes.empty())
- return;
-
- uno::Reference<rdf::XResource> xSubject(xParagraph, uno::UNO_QUERY);
-
- for (const std::pair<OUString, OUString>& rAttribute : m_aAttributes)
- {
- OUString aTypeNS = rAttribute.first;
- OUString aMetadataFilePath = lcl_getTypePath(aTypeNS);
- if (aMetadataFilePath.isEmpty())
- continue;
-
- uno::Reference<rdf::XURI> xType = rdf::URI::create(m_xComponentContext, aTypeNS);
- uno::Sequence<uno::Reference<rdf::XURI>> aGraphNames
- = m_xDocumentMetadataAccess->getMetadataGraphsWithType(xType);
- uno::Reference<rdf::XURI> xGraphName;
- if (aGraphNames.hasElements())
- xGraphName = aGraphNames[0];
- else
- {
- uno::Sequence<uno::Reference<rdf::XURI>> xTypes = { xType };
- xGraphName = m_xDocumentMetadataAccess->addMetadataFile(aMetadataFilePath, xTypes);
- }
- uno::Reference<rdf::XNamedGraph> xGraph
- = m_xDocumentMetadataAccess->getRDFRepository()->getGraph(xGraphName);
- uno::Reference<rdf::XURI> xKey = rdf::URI::create(m_xComponentContext, rAttribute.first);
- uno::Reference<rdf::XLiteral> xValue
- = rdf::Literal::create(m_xComponentContext, rAttribute.second);
- xGraph->addStatement(xSubject, xKey, xValue);
- }
-
- m_aURI.clear();
- m_aElement.clear();
- m_aAttributes.clear();
-}
-
-} // namespace writerfilter::dmapper
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/SmartTagHandler.hxx b/writerfilter/source/dmapper/SmartTagHandler.hxx
deleted file mode 100644
index ef3dd1243231..000000000000
--- a/writerfilter/source/dmapper/SmartTagHandler.hxx
+++ /dev/null
@@ -1,63 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-#ifndef INCLUDED_WRITERFILTER_SOURCE_DMAPPER_SMARTTAGHANDLER_HXX
-#define INCLUDED_WRITERFILTER_SOURCE_DMAPPER_SMARTTAGHANDLER_HXX
-
-#include <vector>
-
-#include "LoggedResources.hxx"
-
-namespace com::sun::star
-{
-namespace rdf
-{
-class XDocumentMetadataAccess;
-}
-namespace text
-{
-class XTextDocument;
-class XTextRange;
-}
-namespace uno
-{
-class XComponentContext;
-}
-}
-
-namespace writerfilter::dmapper
-{
-/// Handler for smart tags, i.e. <w:smartTag> and below.
-class SmartTagHandler : public LoggedProperties
-{
- css::uno::Reference<css::uno::XComponentContext> m_xComponentContext;
- css::uno::Reference<css::rdf::XDocumentMetadataAccess> m_xDocumentMetadataAccess;
- OUString m_aURI;
- OUString m_aElement;
- std::vector<std::pair<OUString, OUString>> m_aAttributes;
-
-public:
- SmartTagHandler(css::uno::Reference<css::uno::XComponentContext> xComponentContext,
- const css::uno::Reference<css::text::XTextDocument>& xTextDocument);
- ~SmartTagHandler() override;
-
- void lcl_attribute(Id nId, Value& rValue) override;
- void lcl_sprm(Sprm& rSprm) override;
-
- void setURI(const OUString& rURI);
- void setElement(const OUString& rElement);
-
- /// Set m_aAttributes as RDF statements on xParagraph.
- void handle(const css::uno::Reference<css::text::XTextRange>& xParagraph);
-};
-
-} // namespace writerfilter::dmapper
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/StyleSheetTable.cxx b/writerfilter/source/dmapper/StyleSheetTable.cxx
deleted file mode 100644
index 731facdaff84..000000000000
--- a/writerfilter/source/dmapper/StyleSheetTable.cxx
+++ /dev/null
@@ -1,1648 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * 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 .
- */
-#include "StyleSheetTable.hxx"
-#include "util.hxx"
-#include "ConversionHelper.hxx"
-#include "TblStylePrHandler.hxx"
-#include "TagLogger.hxx"
-#include "BorderHandler.hxx"
-#include "LatentStyleHandler.hxx"
-#include <ooxml/resourceids.hxx>
-#include <vector>
-#include <iterator>
-#include <com/sun/star/beans/XMultiPropertySet.hpp>
-#include <com/sun/star/beans/XPropertyState.hpp>
-#include <com/sun/star/beans/PropertyValue.hpp>
-#include <com/sun/star/container/XNameContainer.hpp>
-#include <com/sun/star/container/XIndexReplace.hpp>
-#include <com/sun/star/text/XTextDocument.hpp>
-#include <com/sun/star/style/NumberingType.hpp>
-#include <com/sun/star/style/XStyleFamiliesSupplier.hpp>
-#include <com/sun/star/style/XStyle.hpp>
-#include <com/sun/star/style/ParagraphAdjust.hpp>
-#include <com/sun/star/text/WritingMode.hpp>
-#include <com/sun/star/lang/XMultiServiceFactory.hpp>
-#include <map>
-#include <osl/diagnose.h>
-#include <rtl/ustrbuf.hxx>
-#include <sal/log.hxx>
-#include <comphelper/string.hxx>
-#include <comphelper/sequence.hxx>
-#include <tools/diagnose_ex.h>
-#include <o3tl/sorted_vector.hxx>
-
-using namespace ::com::sun::star;
-
-namespace writerfilter::dmapper
-{
-
-StyleSheetEntry::StyleSheetEntry() :
- sStyleIdentifierD()
- ,bIsDefaultStyle(false)
- ,bInvalidHeight(false)
- ,bHasUPE(false)
- ,nStyleTypeCode(STYLE_TYPE_UNKNOWN)
- ,sBaseStyleIdentifier()
- ,sNextStyleIdentifier()
- ,pProperties(new StyleSheetPropertyMap)
- ,bAutoRedefine(false)
-{
-}
-
-StyleSheetEntry::~StyleSheetEntry()
-{
-}
-
-TableStyleSheetEntry::TableStyleSheetEntry( StyleSheetEntry const & rEntry ):
- StyleSheetEntry( )
-{
- bIsDefaultStyle = rEntry.bIsDefaultStyle;
- bInvalidHeight = rEntry.bInvalidHeight;
- bHasUPE = rEntry.bHasUPE;
- nStyleTypeCode = STYLE_TYPE_TABLE;
- sBaseStyleIdentifier = rEntry.sBaseStyleIdentifier;
- sNextStyleIdentifier = rEntry.sNextStyleIdentifier;
- sStyleName = rEntry.sStyleName;
- sStyleIdentifierD = rEntry.sStyleIdentifierD;
-}
-
-TableStyleSheetEntry::~TableStyleSheetEntry( )
-{
-}
-
-void TableStyleSheetEntry::AddTblStylePr( TblStyleType nType, const PropertyMapPtr& pProps )
-{
- static const int nTypesProps = 4;
- static const TblStyleType pTypesToFix[nTypesProps] =
- {
- TBL_STYLE_FIRSTROW,
- TBL_STYLE_LASTROW,
- TBL_STYLE_FIRSTCOL,
- TBL_STYLE_LASTCOL
- };
-
- static const PropertyIds pPropsToCheck[nTypesProps] =
- {
- PROP_BOTTOM_BORDER,
- PROP_TOP_BORDER,
- PROP_RIGHT_BORDER,
- PROP_LEFT_BORDER
- };
-
- for (int i=0; i < nTypesProps; ++i )
- {
- if ( nType == pTypesToFix[i] )
- {
- PropertyIds nChecked = pPropsToCheck[i];
- std::optional<PropertyMap::Property> pChecked = pProps->getProperty(nChecked);
-
- PropertyIds nInsideProp = ( i < 2 ) ? META_PROP_HORIZONTAL_BORDER : META_PROP_VERTICAL_BORDER;
- std::optional<PropertyMap::Property> pInside = pProps->getProperty(nInsideProp);
-
- if ( pChecked && pInside )
- {
- // In this case, remove the inside border
- pProps->Erase( nInsideProp );
- }
-
- break;
- }
- }
-
- // Append the tblStylePr
- m_aStyles[nType] = pProps;
-}
-
-PropertyMapPtr TableStyleSheetEntry::GetProperties( sal_Int32 nMask )
-{
- PropertyMapPtr pProps( new PropertyMap );
-
- // And finally get the mask ones
- pProps->InsertProps(GetLocalPropertiesFromMask(nMask));
-
- return pProps;
-}
-
-beans::PropertyValues StyleSheetEntry::GetInteropGrabBagSeq() const
-{
- return comphelper::containerToSequence(m_aInteropGrabBag);
-}
-
-beans::PropertyValue StyleSheetEntry::GetInteropGrabBag()
-{
- beans::PropertyValue aRet;
- aRet.Name = sStyleIdentifierD;
-
- beans::PropertyValues aSeq = GetInteropGrabBagSeq();
- aRet.Value <<= aSeq;
- return aRet;
-}
-
-void StyleSheetEntry::AppendInteropGrabBag(const beans::PropertyValue& rValue)
-{
- m_aInteropGrabBag.push_back(rValue);
-}
-
-PropertyMapPtr StyleSheetEntry::GetMergedInheritedProperties(const StyleSheetTablePtr& pStyleSheetTable)
-{
- PropertyMapPtr pRet;
- if ( pStyleSheetTable && !sBaseStyleIdentifier.isEmpty() && sBaseStyleIdentifier != sStyleIdentifierD )
- {
- const StyleSheetEntryPtr pParentStyleSheet = pStyleSheetTable->FindStyleSheetByISTD(sBaseStyleIdentifier);
- if ( pParentStyleSheet )
- pRet = pParentStyleSheet->GetMergedInheritedProperties(pStyleSheetTable);
- }
-
- if ( !pRet )
- pRet = new PropertyMap;
-
- pRet->InsertProps(pProperties);
-
- return pRet;
-}
-
-static void lcl_mergeProps( const PropertyMapPtr& pToFill, const PropertyMapPtr& pToAdd, TblStyleType nStyleId )
-{
- static const PropertyIds pPropsToCheck[] =
- {
- PROP_BOTTOM_BORDER,
- PROP_TOP_BORDER,
- PROP_RIGHT_BORDER,
- PROP_LEFT_BORDER,
- };
-
- bool pRemoveInside[] =
- {
- ( nStyleId == TBL_STYLE_FIRSTROW ),
- ( nStyleId == TBL_STYLE_LASTROW ),
- ( nStyleId == TBL_STYLE_LASTCOL ),
- ( nStyleId == TBL_STYLE_FIRSTCOL )
- };
-
- for ( unsigned i = 0 ; i != SAL_N_ELEMENTS(pPropsToCheck); i++ )
- {
- PropertyIds nId = pPropsToCheck[i];
- std::optional<PropertyMap::Property> pProp = pToAdd->getProperty(nId);
-
- if ( pProp )
- {
- if ( pRemoveInside[i] )
- {
- // Remove the insideH and insideV depending on the cell pos
- PropertyIds nInsideProp = ( i < 2 ) ? META_PROP_HORIZONTAL_BORDER : META_PROP_VERTICAL_BORDER;
- pToFill->Erase(nInsideProp);
- }
- }
- }
-
- pToFill->InsertProps(pToAdd);
-}
-
-PropertyMapPtr TableStyleSheetEntry::GetLocalPropertiesFromMask( sal_Int32 nMask )
-{
- // Order from right to left
- struct TblStyleTypeAndMask {
- sal_Int32 mask;
- TblStyleType type;
- };
-
- static const TblStyleTypeAndMask aOrderedStyleTable[] =
- {
- { 0x010, TBL_STYLE_BAND2HORZ },
- { 0x020, TBL_STYLE_BAND1HORZ },
- { 0x040, TBL_STYLE_BAND2VERT },
- { 0x080, TBL_STYLE_BAND1VERT },
- { 0x100, TBL_STYLE_LASTCOL },
- { 0x200, TBL_STYLE_FIRSTCOL },
- { 0x400, TBL_STYLE_LASTROW },
- { 0x800, TBL_STYLE_FIRSTROW },
- { 0x001, TBL_STYLE_SWCELL },
- { 0x002, TBL_STYLE_SECELL },
- { 0x004, TBL_STYLE_NWCELL },
- { 0x008, TBL_STYLE_NECELL }
- };
-
- // Get the properties applying according to the mask
- PropertyMapPtr pProps( new PropertyMap( ) );
- for (const TblStyleTypeAndMask & i : aOrderedStyleTable)
- {
- TblStylePrs::iterator pIt = m_aStyles.find( i.type );
- if ( ( nMask & i.mask ) && ( pIt != m_aStyles.end( ) ) )
- lcl_mergeProps( pProps, pIt->second, i.type );
- }
- return pProps;
-}
-
-namespace {
-
-struct ListCharStylePropertyMap_t
-{
- OUString sCharStyleName;
- PropertyValueVector_t aPropertyValues;
-
- ListCharStylePropertyMap_t(const OUString& rCharStyleName, const PropertyValueVector_t& rPropertyValues):
- sCharStyleName( rCharStyleName ),
- aPropertyValues( rPropertyValues )
- {}
-};
-
-}
-
-typedef std::vector< ListCharStylePropertyMap_t > ListCharStylePropertyVector_t;
-
-
-struct StyleSheetTable_Impl
-{
- DomainMapper& m_rDMapper;
- uno::Reference< text::XTextDocument> m_xTextDocument;
- uno::Reference< beans::XPropertySet> m_xTextDefaults;
- std::vector< StyleSheetEntryPtr > m_aStyleSheetEntries;
- StyleSheetEntryPtr m_pCurrentEntry;
- PropertyMapPtr m_pDefaultParaProps, m_pDefaultCharProps;
- OUString m_sDefaultParaStyleName; //WW8 name
- ListCharStylePropertyVector_t m_aListCharStylePropertyVector;
- bool m_bHasImportedDefaultParaProps;
- bool m_bIsNewDoc;
-
- StyleSheetTable_Impl(DomainMapper& rDMapper, uno::Reference< text::XTextDocument> const& xTextDocument, bool bIsNewDoc);
-
- OUString HasListCharStyle( const PropertyValueVector_t& rCharProperties );
-
- /// Appends the given key-value pair to the list of latent style properties of the current entry.
- void AppendLatentStyleProperty(const OUString& aName, Value const & rValue);
- /// Sets all properties of xStyle back to default.
- static void SetPropertiesToDefault(const uno::Reference<style::XStyle>& xStyle);
-};
-
-
-StyleSheetTable_Impl::StyleSheetTable_Impl(DomainMapper& rDMapper,
- uno::Reference< text::XTextDocument> const& xTextDocument,
- bool const bIsNewDoc)
- :
- m_rDMapper( rDMapper ),
- m_xTextDocument( xTextDocument ),
- m_pCurrentEntry(),
- m_pDefaultParaProps(new PropertyMap),
- m_pDefaultCharProps(new PropertyMap),
- m_sDefaultParaStyleName("Normal"),
- m_bHasImportedDefaultParaProps(false),
- m_bIsNewDoc(bIsNewDoc)
-{
- //set font height default to 10pt
- uno::Any aVal = uno::makeAny( 10.0 );
- m_pDefaultCharProps->Insert( PROP_CHAR_HEIGHT, aVal );
- m_pDefaultCharProps->Insert( PROP_CHAR_HEIGHT_ASIAN, aVal );
- m_pDefaultCharProps->Insert( PROP_CHAR_HEIGHT_COMPLEX, aVal );
-
- // See SwDoc::RemoveAllFormatLanguageDependencies(), internal filters
- // disable kerning by default, do the same here.
- m_pDefaultCharProps->Insert(PROP_CHAR_AUTO_KERNING, uno::Any(false));
-}
-
-
-OUString StyleSheetTable_Impl::HasListCharStyle( const PropertyValueVector_t& rPropValues )
-{
- for( const auto& rListVector : m_aListCharStylePropertyVector )
- {
- const auto& rPropertyValues = rListVector.aPropertyValues;
- //if size is identical
- if( rPropertyValues.size() == rPropValues.size() )
- {
- bool bBreak = false;
- //then search for all contained properties
- for( const auto& rPropVal1 : rPropValues)
- {
- //find the property
- auto aListIter = std::find_if(rPropertyValues.begin(), rPropertyValues.end(),
- [&rPropVal1](const css::beans::PropertyValue& rPropVal2) { return rPropVal2.Name == rPropVal1.Name; });
- //set break flag if property hasn't been found
- bBreak = (aListIter == rPropertyValues.end()) || (aListIter->Value != rPropVal1.Value);
- if( bBreak )
- break;
- }
- if( !bBreak )
- return rListVector.sCharStyleName;
- }
- }
- return OUString();
-}
-
-void StyleSheetTable_Impl::AppendLatentStyleProperty(const OUString& aName, Value const & rValue)
-{
- beans::PropertyValue aValue;
- aValue.Name = aName;
- aValue.Value <<= rValue.getString();
- m_pCurrentEntry->aLatentStyles.push_back(aValue);
-}
-
-void StyleSheetTable_Impl::SetPropertiesToDefault(const uno::Reference<style::XStyle>& xStyle)
-{
- // See if the existing style has any non-default properties. If so, reset them back to default.
- uno::Reference<beans::XPropertySet> xPropertySet(xStyle, uno::UNO_QUERY);
- uno::Reference<beans::XPropertySetInfo> xPropertySetInfo = xPropertySet->getPropertySetInfo();
- uno::Sequence<beans::Property> aProperties = xPropertySetInfo->getProperties();
- std::vector<OUString> aPropertyNames;
- aPropertyNames.reserve(aProperties.getLength());
- std::transform(aProperties.begin(), aProperties.end(), std::back_inserter(aPropertyNames),
- [](const beans::Property& rProp) { return rProp.Name; });
-
- uno::Reference<beans::XPropertyState> xPropertyState(xStyle, uno::UNO_QUERY);
- uno::Sequence<beans::PropertyState> aStates = xPropertyState->getPropertyStates(comphelper::containerToSequence(aPropertyNames));
- for (sal_Int32 i = 0; i < aStates.getLength(); ++i)
- {
- if (aStates[i] == beans::PropertyState_DIRECT_VALUE)
- {
- try
- {
- xPropertyState->setPropertyToDefault(aPropertyNames[i]);
- }
- catch(const uno::Exception&)
- {
- TOOLS_INFO_EXCEPTION("writerfilter", "setPropertyToDefault(" << aPropertyNames[i] << ") failed");
- }
- }
- }
-}
-
-StyleSheetTable::StyleSheetTable(DomainMapper& rDMapper,
- uno::Reference< text::XTextDocument> const& xTextDocument,
- bool const bIsNewDoc)
-: LoggedProperties("StyleSheetTable")
-, LoggedTable("StyleSheetTable")
-, m_pImpl( new StyleSheetTable_Impl(rDMapper, xTextDocument, bIsNewDoc) )
-{
-}
-
-
-StyleSheetTable::~StyleSheetTable()
-{
-}
-
-void StyleSheetTable::SetDefaultParaProps(PropertyIds eId, const css::uno::Any& rAny)
-{
- m_pImpl->m_pDefaultParaProps->Insert(eId, rAny, /*bOverwrite=*/false, NO_GRAB_BAG, /*bDocDefault=*/true);
-}
-
-PropertyMapPtr const & StyleSheetTable::GetDefaultParaProps() const
-{
- return m_pImpl->m_pDefaultParaProps;
-}
-
-PropertyMapPtr const & StyleSheetTable::GetDefaultCharProps() const
-{
- return m_pImpl->m_pDefaultCharProps;
-}
-
-void StyleSheetTable::lcl_attribute(Id Name, Value & val)
-{
- OSL_ENSURE( m_pImpl->m_pCurrentEntry, "current entry has to be set here");
- if(!m_pImpl->m_pCurrentEntry)
- return ;
- int nIntValue = val.getInt();
- OUString sValue = val.getString();
-
- // The default type is paragraph, and it needs to be processed first,
- // because the NS_ooxml::LN_CT_Style_type handling may set m_pImpl->m_pCurrentEntry
- // to point to a different object.
- if( m_pImpl->m_pCurrentEntry->nStyleTypeCode == STYLE_TYPE_UNKNOWN )
- {
- if( Name != NS_ooxml::LN_CT_Style_type )
- m_pImpl->m_pCurrentEntry->nStyleTypeCode = STYLE_TYPE_PARA;
- }
- switch(Name)
- {
- case NS_ooxml::LN_CT_Style_type:
- {
- SAL_WARN_IF( m_pImpl->m_pCurrentEntry->nStyleTypeCode != STYLE_TYPE_UNKNOWN,
- "writerfilter", "Style type needs to be processed first" );
- StyleType nType(STYLE_TYPE_UNKNOWN);
- switch (nIntValue)
- {
- case NS_ooxml::LN_Value_ST_StyleType_paragraph:
- nType = STYLE_TYPE_PARA;
- break;
- case NS_ooxml::LN_Value_ST_StyleType_character:
- nType = STYLE_TYPE_CHAR;
- break;
- case NS_ooxml::LN_Value_ST_StyleType_table:
- nType = STYLE_TYPE_TABLE;
- break;
- case NS_ooxml::LN_Value_ST_StyleType_numbering:
- nType = STYLE_TYPE_LIST;
- break;
- default:
- SAL_WARN("writerfilter", "unknown LN_CT_Style_type " << nType);
- [[fallthrough]];
- case 0: // explicit unknown set by tokenizer
- break;
-
- }
- if ( nType == STYLE_TYPE_TABLE )
- {
- StyleSheetEntryPtr pEntry = m_pImpl->m_pCurrentEntry;
- tools::SvRef<TableStyleSheetEntry> pTableEntry( new TableStyleSheetEntry( *pEntry ) );
- m_pImpl->m_pCurrentEntry = pTableEntry.get();
- }
- else
- m_pImpl->m_pCurrentEntry->nStyleTypeCode = nType;
- }
- break;
- case NS_ooxml::LN_CT_Style_default:
- m_pImpl->m_pCurrentEntry->bIsDefaultStyle = (nIntValue != 0);
-
- if (m_pImpl->m_pCurrentEntry->nStyleTypeCode != STYLE_TYPE_UNKNOWN)
- {
- // "If this attribute is specified by multiple styles, then the last instance shall be used."
- if ( m_pImpl->m_pCurrentEntry->nStyleTypeCode == STYLE_TYPE_PARA && !m_pImpl->m_pCurrentEntry->sStyleIdentifierD.isEmpty() )
- m_pImpl->m_sDefaultParaStyleName = m_pImpl->m_pCurrentEntry->sStyleIdentifierD;
-
- beans::PropertyValue aValue;
- aValue.Name = "default";
- aValue.Value <<= m_pImpl->m_pCurrentEntry->bIsDefaultStyle;
- m_pImpl->m_pCurrentEntry->AppendInteropGrabBag(aValue);
- }
- break;
- case NS_ooxml::LN_CT_Style_customStyle:
- if (m_pImpl->m_pCurrentEntry->nStyleTypeCode != STYLE_TYPE_UNKNOWN)
- {
- beans::PropertyValue aValue;
- aValue.Name = "customStyle";
- aValue.Value <<= (nIntValue != 0);
- m_pImpl->m_pCurrentEntry->AppendInteropGrabBag(aValue);
- }
- break;
- case NS_ooxml::LN_CT_Style_styleId:
- m_pImpl->m_pCurrentEntry->sStyleIdentifierD = sValue;
- if(m_pImpl->m_pCurrentEntry->nStyleTypeCode == STYLE_TYPE_TABLE)
- {
- TableStyleSheetEntry* pTableEntry = static_cast<TableStyleSheetEntry *>(m_pImpl->m_pCurrentEntry.get());
- beans::PropertyValue aValue;
- aValue.Name = "styleId";
- aValue.Value <<= sValue;
- pTableEntry->AppendInteropGrabBag(aValue);
- }
- break;
- case NS_ooxml::LN_CT_TblWidth_w:
- break;
- case NS_ooxml::LN_CT_TblWidth_type:
- break;
- case NS_ooxml::LN_CT_LatentStyles_defQFormat:
- m_pImpl->AppendLatentStyleProperty("defQFormat", val);
- break;
- case NS_ooxml::LN_CT_LatentStyles_defUnhideWhenUsed:
- m_pImpl->AppendLatentStyleProperty("defUnhideWhenUsed", val);
- break;
- case NS_ooxml::LN_CT_LatentStyles_defSemiHidden:
- m_pImpl->AppendLatentStyleProperty("defSemiHidden", val);
- break;
- case NS_ooxml::LN_CT_LatentStyles_count:
- m_pImpl->AppendLatentStyleProperty("count", val);
- break;
- case NS_ooxml::LN_CT_LatentStyles_defUIPriority:
- m_pImpl->AppendLatentStyleProperty("defUIPriority", val);
- break;
- case NS_ooxml::LN_CT_LatentStyles_defLockedState:
- m_pImpl->AppendLatentStyleProperty("defLockedState", val);
- break;
- default:
- {
-#ifdef DBG_UTIL
- TagLogger::getInstance().element("unhandled");
-#endif
- }
- break;
- }
-}
-
-
-void StyleSheetTable::lcl_sprm(Sprm & rSprm)
-{
- sal_uInt32 nSprmId = rSprm.getId();
- Value::Pointer_t pValue = rSprm.getValue();
- sal_Int32 nIntValue = pValue ? pValue->getInt() : 0;
- OUString sStringValue = pValue ? pValue->getString() : OUString();
-
- switch(nSprmId)
- {
- case NS_ooxml::LN_CT_Style_name:
- //this is only a UI name!
- m_pImpl->m_pCurrentEntry->sStyleName = sStringValue;
- if(m_pImpl->m_pCurrentEntry->nStyleTypeCode == STYLE_TYPE_TABLE)
- {
- TableStyleSheetEntry* pTableEntry = static_cast<TableStyleSheetEntry *>(m_pImpl->m_pCurrentEntry.get());
- beans::PropertyValue aValue;
- aValue.Name = "name";
- aValue.Value <<= sStringValue;
- pTableEntry->AppendInteropGrabBag(aValue);
- }
- break;
- case NS_ooxml::LN_CT_Style_basedOn:
- m_pImpl->m_pCurrentEntry->sBaseStyleIdentifier = sStringValue;
- if(m_pImpl->m_pCurrentEntry->nStyleTypeCode == STYLE_TYPE_TABLE)
- {
- TableStyleSheetEntry* pTableEntry = static_cast<TableStyleSheetEntry *>(m_pImpl->m_pCurrentEntry.get());
- beans::PropertyValue aValue;
- aValue.Name = "basedOn";
- aValue.Value <<= sStringValue;
- pTableEntry->AppendInteropGrabBag(aValue);
- }
- break;
- case NS_ooxml::LN_CT_Style_next:
- m_pImpl->m_pCurrentEntry->sNextStyleIdentifier = sStringValue;
- break;
- case NS_ooxml::LN_CT_Style_aliases:
- case NS_ooxml::LN_CT_Style_hidden:
- case NS_ooxml::LN_CT_Style_personal:
- case NS_ooxml::LN_CT_Style_personalCompose:
- case NS_ooxml::LN_CT_Style_personalReply:
- break;
- case NS_ooxml::LN_CT_Style_autoRedefine:
- m_pImpl->m_pCurrentEntry->bAutoRedefine = nIntValue;
- break;
- case NS_ooxml::LN_CT_Style_tcPr:
- {
- writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
- if( pProperties && m_pImpl->m_pCurrentEntry->nStyleTypeCode == STYLE_TYPE_TABLE)
- {
- auto pTblStylePrHandler = std::make_shared<TblStylePrHandler>(m_pImpl->m_rDMapper);
- pProperties->resolve(*pTblStylePrHandler);
- StyleSheetEntry* pEntry = m_pImpl->m_pCurrentEntry.get();
- TableStyleSheetEntry& rTableEntry = dynamic_cast<TableStyleSheetEntry&>(*pEntry);
- rTableEntry.AppendInteropGrabBag(pTblStylePrHandler->getInteropGrabBag("tcPr"));
-
- // This is a <w:tcPr> directly under <w:style>, so it affects the whole table.
- rTableEntry.pProperties->InsertProps(pTblStylePrHandler->getProperties());
- }
- }
- break;
- case NS_ooxml::LN_CT_Style_trPr:
- break;
- case NS_ooxml::LN_CT_Style_rsid:
- case NS_ooxml::LN_CT_Style_qFormat:
- case NS_ooxml::LN_CT_Style_semiHidden:
- case NS_ooxml::LN_CT_Style_unhideWhenUsed:
- case NS_ooxml::LN_CT_Style_uiPriority:
- case NS_ooxml::LN_CT_Style_link:
- case NS_ooxml::LN_CT_Style_locked:
- if (m_pImpl->m_pCurrentEntry->nStyleTypeCode != STYLE_TYPE_UNKNOWN)
- {
- StyleSheetEntryPtr pEntry = m_pImpl->m_pCurrentEntry;
- beans::PropertyValue aValue;
- switch (nSprmId)
- {
- case NS_ooxml::LN_CT_Style_rsid:
- {
- // We want the rsid as a hex string, but always with the length of 8.
- OUStringBuffer aBuf = OUString::number(nIntValue, 16);
- OUStringBuffer aStr;
- comphelper::string::padToLength(aStr, 8 - aBuf.getLength(), '0');
- aStr.append(aBuf.getStr());
-
- aValue.Name = "rsid";
- aValue.Value <<= aStr.makeStringAndClear();
- }
- break;
- case NS_ooxml::LN_CT_Style_qFormat:
- aValue.Name = "qFormat";
- break;
- case NS_ooxml::LN_CT_Style_semiHidden:
- aValue.Name = "semiHidden";
- break;
- case NS_ooxml::LN_CT_Style_unhideWhenUsed:
- aValue.Name = "unhideWhenUsed";
- break;
- case NS_ooxml::LN_CT_Style_uiPriority:
- {
- aValue.Name = "uiPriority";
- aValue.Value <<= OUString::number(nIntValue);
- }
- break;
- case NS_ooxml::LN_CT_Style_link:
- {
- aValue.Name = "link";
- aValue.Value <<= sStringValue;
- }
- break;
- case NS_ooxml::LN_CT_Style_locked:
- aValue.Name = "locked";
- break;
- }
- pEntry->AppendInteropGrabBag(aValue);
- }
- break;
- case NS_ooxml::LN_CT_Style_tblPr: //contains table properties
- case NS_ooxml::LN_CT_Style_tblStylePr: //contains to table properties
- case NS_ooxml::LN_CT_TblPrBase_tblInd: //table properties - at least width value and type
- case NS_ooxml::LN_EG_RPrBase_rFonts: //table fonts
- {
- writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
- if( pProperties )
- {
- auto pTblStylePrHandler = std::make_shared<TblStylePrHandler>( m_pImpl->m_rDMapper );
- pProperties->resolve( *pTblStylePrHandler );
-
- // Add the properties to the table style
- TblStyleType nType = pTblStylePrHandler->getType( );
- PropertyMapPtr pProps = pTblStylePrHandler->getProperties( );
- StyleSheetEntry * pEntry = m_pImpl->m_pCurrentEntry.get();
-
- TableStyleSheetEntry * pTableEntry = dynamic_cast<TableStyleSheetEntry*>( pEntry );
- if (nType == TBL_STYLE_UNKNOWN)
- {
- pEntry->pProperties->InsertProps(pProps);
- }
- else
- {
- if (pTableEntry != nullptr)
- pTableEntry->AddTblStylePr( nType, pProps );
- }
-
- if (nSprmId == NS_ooxml::LN_CT_Style_tblPr)
- {
- if (pTableEntry != nullptr)
- pTableEntry->AppendInteropGrabBag(pTblStylePrHandler->getInteropGrabBag("tblPr"));
- }
- else if (nSprmId == NS_ooxml::LN_CT_Style_tblStylePr)
- {
- pTblStylePrHandler->appendInteropGrabBag("type", pTblStylePrHandler->getTypeString());
- if (pTableEntry != nullptr)
- pTableEntry->AppendInteropGrabBag(pTblStylePrHandler->getInteropGrabBag("tblStylePr"));
- }
- }
- break;
- }
- case NS_ooxml::LN_CT_PPrDefault_pPr:
- case NS_ooxml::LN_CT_DocDefaults_pPrDefault:
- m_pImpl->m_rDMapper.PushStyleSheetProperties( m_pImpl->m_pDefaultParaProps );
- resolveSprmProps( m_pImpl->m_rDMapper, rSprm );
- if ( nSprmId == NS_ooxml::LN_CT_DocDefaults_pPrDefault && m_pImpl->m_pDefaultParaProps &&
- !m_pImpl->m_pDefaultParaProps->isSet( PROP_PARA_TOP_MARGIN ) )
- {
- SetDefaultParaProps( PROP_PARA_TOP_MARGIN, uno::makeAny( sal_Int32(0) ) );
- }
- m_pImpl->m_rDMapper.PopStyleSheetProperties();
- applyDefaults( true );
- m_pImpl->m_bHasImportedDefaultParaProps = true;
- break;
- case NS_ooxml::LN_CT_RPrDefault_rPr:
- case NS_ooxml::LN_CT_DocDefaults_rPrDefault:
- m_pImpl->m_rDMapper.PushStyleSheetProperties( m_pImpl->m_pDefaultCharProps );
- resolveSprmProps( m_pImpl->m_rDMapper, rSprm );
- m_pImpl->m_rDMapper.PopStyleSheetProperties();
- applyDefaults( false );
- break;
- case NS_ooxml::LN_CT_TblPrBase_jc: //table alignment - row properties!
- m_pImpl->m_pCurrentEntry->pProperties->Insert( PROP_HORI_ORIENT,
- uno::makeAny( ConversionHelper::convertTableJustification( nIntValue )));
- break;
- case NS_ooxml::LN_CT_TrPrBase_jc: //table alignment - row properties!
- break;
- case NS_ooxml::LN_CT_TblPrBase_tblBorders: //table borders, might be defined in table style
- {
- writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
- if( pProperties )
- {
- auto pBorderHandler = std::make_shared<BorderHandler>(m_pImpl->m_rDMapper.IsOOXMLImport());
- pProperties->resolve(*pBorderHandler);
- m_pImpl->m_pCurrentEntry->pProperties->InsertProps(
- pBorderHandler->getProperties());
- }
- }
- break;
- case NS_ooxml::LN_CT_TblPrBase_tblStyleRowBandSize:
- case NS_ooxml::LN_CT_TblPrBase_tblStyleColBandSize:
- break;
- case NS_ooxml::LN_CT_TblPrBase_tblCellMar:
- //no cell margins in styles
- break;
- case NS_ooxml::LN_CT_LatentStyles_lsdException:
- {
- writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
- if (pProperties)
- {
- tools::SvRef<LatentStyleHandler> pLatentStyleHandler(new LatentStyleHandler());
- pProperties->resolve(*pLatentStyleHandler);
- beans::PropertyValue aValue;
- aValue.Name = "lsdException";
- aValue.Value <<= comphelper::containerToSequence(pLatentStyleHandler->getAttributes());
- m_pImpl->m_pCurrentEntry->aLsdExceptions.push_back(aValue);
- }
- }
- break;
- case NS_ooxml::LN_CT_Style_pPr:
- // no break
- case NS_ooxml::LN_CT_Style_rPr:
- // no break
- default:
- {
- if (!m_pImpl->m_pCurrentEntry)
- break;
-
- tools::SvRef<TablePropertiesHandler> pTblHandler(new TablePropertiesHandler());
- pTblHandler->SetProperties( m_pImpl->m_pCurrentEntry->pProperties );
- if ( !pTblHandler->sprm( rSprm ) )
- {
- m_pImpl->m_rDMapper.PushStyleSheetProperties( m_pImpl->m_pCurrentEntry->pProperties );
-
- PropertyMapPtr pProps(new PropertyMap());
- if (m_pImpl->m_pCurrentEntry->nStyleTypeCode == STYLE_TYPE_TABLE)
- {
- if (nSprmId == NS_ooxml::LN_CT_Style_pPr)
- m_pImpl->m_rDMapper.enableInteropGrabBag("pPr");
- else if (nSprmId == NS_ooxml::LN_CT_Style_rPr)
- m_pImpl->m_rDMapper.enableInteropGrabBag("rPr");
- }
- m_pImpl->m_rDMapper.sprmWithProps( rSprm, pProps );
- if (m_pImpl->m_pCurrentEntry->nStyleTypeCode == STYLE_TYPE_TABLE)
- {
- if (nSprmId == NS_ooxml::LN_CT_Style_pPr || nSprmId == NS_ooxml::LN_CT_Style_rPr)
- {
- TableStyleSheetEntry* pTableEntry = static_cast<TableStyleSheetEntry *>(m_pImpl->m_pCurrentEntry.get());
- pTableEntry->AppendInteropGrabBag(m_pImpl->m_rDMapper.getInteropGrabBag());
- }
- }
-
- m_pImpl->m_pCurrentEntry->pProperties->InsertProps(pProps);
-
- m_pImpl->m_rDMapper.PopStyleSheetProperties( );
- }
- }
- break;
-}
-}
-
-
-void StyleSheetTable::lcl_entry(writerfilter::Reference<Properties>::Pointer_t ref)
-{
- //create a new style entry
- OSL_ENSURE( !m_pImpl->m_pCurrentEntry, "current entry has to be NULL here");
- StyleSheetEntryPtr pNewEntry( new StyleSheetEntry );
- m_pImpl->m_pCurrentEntry = pNewEntry;
- m_pImpl->m_rDMapper.PushStyleSheetProperties( m_pImpl->m_pCurrentEntry->pProperties );
- ref->resolve(*this);
- //append it to the table
- m_pImpl->m_rDMapper.PopStyleSheetProperties();
- if( !m_pImpl->m_rDMapper.IsOOXMLImport() || !m_pImpl->m_pCurrentEntry->sStyleName.isEmpty())
- {
- m_pImpl->m_pCurrentEntry->sConvertedStyleName = ConvertStyleName( m_pImpl->m_pCurrentEntry->sStyleName );
- m_pImpl->m_aStyleSheetEntries.push_back( m_pImpl->m_pCurrentEntry );
- }
- else
- {
- //TODO: this entry contains the default settings - they have to be added to the settings
- }
-
- if (!m_pImpl->m_pCurrentEntry->aLatentStyles.empty())
- {
- // We have latent styles for this entry, then process them.
- std::vector<beans::PropertyValue>& rLatentStyles = m_pImpl->m_pCurrentEntry->aLatentStyles;
-
- if (!m_pImpl->m_pCurrentEntry->aLsdExceptions.empty())
- {
- std::vector<beans::PropertyValue>& rLsdExceptions = m_pImpl->m_pCurrentEntry->aLsdExceptions;
- beans::PropertyValue aValue;
- aValue.Name = "lsdExceptions";
- aValue.Value <<= comphelper::containerToSequence(rLsdExceptions);
- rLatentStyles.push_back(aValue);
- }
-
- uno::Sequence<beans::PropertyValue> aLatentStyles( comphelper::containerToSequence(rLatentStyles) );
-
- // We can put all latent style info directly to the document interop
- // grab bag, as we can be sure that only a single style entry has
- // latent style info.
- uno::Reference<beans::XPropertySet> xPropertySet(m_pImpl->m_xTextDocument, uno::UNO_QUERY);
- auto aGrabBag = comphelper::sequenceToContainer< std::vector<beans::PropertyValue> >(xPropertySet->getPropertyValue("InteropGrabBag").get< uno::Sequence<beans::PropertyValue> >());
- beans::PropertyValue aValue;
- aValue.Name = "latentStyles";
- aValue.Value <<= aLatentStyles;
- aGrabBag.push_back(aValue);
- xPropertySet->setPropertyValue("InteropGrabBag", uno::makeAny(comphelper::containerToSequence(aGrabBag)));
- }
-
- StyleSheetEntryPtr pEmptyEntry;
- m_pImpl->m_pCurrentEntry = pEmptyEntry;
-}
-/*-------------------------------------------------------------------------
- sorting helper
- -----------------------------------------------------------------------*/
-namespace {
-
-class PropValVector
-{
- std::vector<beans::PropertyValue> m_aValues;
-public:
- PropValVector(){}
-
- void Insert(const beans::PropertyValue& rVal);
- uno::Sequence< uno::Any > getValues();
- uno::Sequence< OUString > getNames();
- const std::vector<beans::PropertyValue>& getProperties() const { return m_aValues; };
-};
-
-}
-
-void PropValVector::Insert(const beans::PropertyValue& rVal)
-{
- auto aIt = std::find_if(m_aValues.begin(), m_aValues.end(),
- [&rVal](beans::PropertyValue& rPropVal) { return rPropVal.Name > rVal.Name; });
- if (aIt != m_aValues.end())
- {
- m_aValues.insert( aIt, rVal );
- return;
- }
- m_aValues.push_back(rVal);
-}
-
-uno::Sequence< uno::Any > PropValVector::getValues()
-{
- std::vector<uno::Any> aRet;
- std::transform(m_aValues.begin(), m_aValues.end(), std::back_inserter(aRet), [](const beans::PropertyValue& rValue) { return rValue.Value; });
- return comphelper::containerToSequence(aRet);
-}
-
-uno::Sequence< OUString > PropValVector::getNames()
-{
- std::vector<OUString> aRet;
- std::transform(m_aValues.begin(), m_aValues.end(), std::back_inserter(aRet), [](const beans::PropertyValue& rValue) { return rValue.Name; });
- return comphelper::containerToSequence(aRet);
-}
-
-void StyleSheetTable::ApplyNumberingStyleNameToParaStyles()
-{
- try
- {
- uno::Reference< style::XStyleFamiliesSupplier > xStylesSupplier( m_pImpl->m_xTextDocument, uno::UNO_QUERY_THROW );
- uno::Reference< lang::XMultiServiceFactory > xDocFactory( m_pImpl->m_xTextDocument, uno::UNO_QUERY_THROW );
- uno::Reference< container::XNameAccess > xStyleFamilies = xStylesSupplier->getStyleFamilies();
- uno::Reference<container::XNameContainer> xParaStyles;
- xStyleFamilies->getByName(getPropertyName( PROP_PARAGRAPH_STYLES )) >>= xParaStyles;
-
- if ( !xParaStyles.is() )
- return;
-
- for ( auto& pEntry : m_pImpl->m_aStyleSheetEntries )
- {
- StyleSheetPropertyMap* pStyleSheetProperties = nullptr;
- if ( pEntry->nStyleTypeCode == STYLE_TYPE_PARA && (pStyleSheetProperties = dynamic_cast<StyleSheetPropertyMap*>(pEntry->pProperties.get())) )
- {
- // ListId 0 means turn off numbering - to cancel inheritance - so make sure that can be set.
- // Ignore the special "chapter numbering" outline styles as they are handled internally.
- if ( pStyleSheetProperties->GetListId() > -1 && pStyleSheetProperties->GetOutlineLevel() == -1 )
- {
- uno::Reference< style::XStyle > xStyle;
- xParaStyles->getByName( ConvertStyleName(pEntry->sStyleName) ) >>= xStyle;
-
- if ( !xStyle.is() )
- break;
-
- uno::Reference<beans::XPropertySet> xPropertySet( xStyle, uno::UNO_QUERY_THROW );
- const OUString sNumberingStyleName = m_pImpl->m_rDMapper.GetListStyleName( pStyleSheetProperties->GetListId() );
- if ( !sNumberingStyleName.isEmpty() || !pStyleSheetProperties->GetListId() )
- xPropertySet->setPropertyValue( getPropertyName(PROP_NUMBERING_STYLE_NAME), uno::makeAny(sNumberingStyleName) );
- }
- }
- }
- }
- catch( const uno::Exception& )
- {
- DBG_UNHANDLED_EXCEPTION("writerfilter", "Failed applying numbering style name to Paragraph styles");
- }
-}
-
-void StyleSheetTable::ApplyStyleSheets( const FontTablePtr& rFontTable )
-{
- try
- {
- uno::Reference< style::XStyleFamiliesSupplier > xStylesSupplier( m_pImpl->m_xTextDocument, uno::UNO_QUERY_THROW );
- uno::Reference< lang::XMultiServiceFactory > xDocFactory( m_pImpl->m_xTextDocument, uno::UNO_QUERY_THROW );
- uno::Reference< container::XNameAccess > xStyleFamilies = xStylesSupplier->getStyleFamilies();
- uno::Reference<container::XNameContainer> xCharStyles;
- uno::Reference<container::XNameContainer> xParaStyles;
- uno::Reference<container::XNameContainer> xNumberingStyles;
-
- xStyleFamilies->getByName(getPropertyName( PROP_CHARACTER_STYLES )) >>= xCharStyles;
- xStyleFamilies->getByName(getPropertyName( PROP_PARAGRAPH_STYLES )) >>= xParaStyles;
- xStyleFamilies->getByName("NumberingStyles") >>= xNumberingStyles;
- if(xCharStyles.is() && xParaStyles.is())
- {
- std::vector< ::std::pair<OUString, uno::Reference<style::XStyle>> > aMissingParent;
- std::vector< ::std::pair<OUString, uno::Reference<style::XStyle>> > aMissingFollow;
- std::vector<beans::PropertyValue> aTableStylesVec;
- for( auto& pEntry : m_pImpl->m_aStyleSheetEntries )
- {
- if( pEntry->nStyleTypeCode == STYLE_TYPE_UNKNOWN && !pEntry->sStyleName.isEmpty() )
- pEntry->nStyleTypeCode = STYLE_TYPE_PARA; // unspecified style types are considered paragraph styles
-
- if( pEntry->nStyleTypeCode == STYLE_TYPE_CHAR || pEntry->nStyleTypeCode == STYLE_TYPE_PARA || pEntry->nStyleTypeCode == STYLE_TYPE_LIST )
- {
- bool bParaStyle = pEntry->nStyleTypeCode == STYLE_TYPE_PARA;
- bool bListStyle = pEntry->nStyleTypeCode == STYLE_TYPE_LIST;
- bool bInsert = false;
- uno::Reference< container::XNameContainer > xStyles = bParaStyle ? xParaStyles : (bListStyle ? xNumberingStyles : xCharStyles);
- uno::Reference< style::XStyle > xStyle;
- const OUString sConvertedStyleName = ConvertStyleName( pEntry->sStyleName );
-
- if(xStyles->hasByName( sConvertedStyleName ))
- {
- // When pasting, don't update existing styles.
- if (!m_pImpl->m_bIsNewDoc)
- {
- continue;
- }
- xStyles->getByName( sConvertedStyleName ) >>= xStyle;
-
- {
- StyleSheetTable_Impl::SetPropertiesToDefault(xStyle);
-
- // resolve import conflicts with built-in styles (only if defaults have been defined)
- if ( m_pImpl->m_bHasImportedDefaultParaProps
- && pEntry->sBaseStyleIdentifier.isEmpty() //imported style has no inheritance
- && !xStyle->getParentStyle().isEmpty() ) //built-in style has a default inheritance
- {
- xStyle->setParentStyle( "" );
- }
- }
- }
- else
- {
- bInsert = true;
- xStyle.set(xDocFactory->createInstance(
- bParaStyle ?
- getPropertyName( PROP_SERVICE_PARA_STYLE ) :
- (bListStyle ? OUString("com.sun.star.style.NumberingStyle") : getPropertyName( PROP_SERVICE_CHAR_STYLE ))),
- uno::UNO_QUERY_THROW);
-
- // Numbering styles have to be inserted early, as e.g. the NumberingRules property is only available after insertion.
- if (bListStyle)
- {
- xStyles->insertByName( sConvertedStyleName, uno::makeAny( xStyle ) );
- xStyle.set(xStyles->getByName(sConvertedStyleName), uno::UNO_QUERY_THROW);
-
- StyleSheetPropertyMap* pPropertyMap = dynamic_cast<StyleSheetPropertyMap*>(pEntry->pProperties.get());
- if (pPropertyMap && pPropertyMap->GetListId() == -1)
- {
- // No properties? Word default is 'none', Writer one is 'arabic', handle this.
- uno::Reference<beans::XPropertySet> xPropertySet(xStyle, uno::UNO_QUERY_THROW);
- uno::Reference<container::XIndexReplace> xNumberingRules;
- xPropertySet->getPropertyValue("NumberingRules") >>= xNumberingRules;
- uno::Reference<container::XIndexAccess> xIndexAccess(xNumberingRules, uno::UNO_QUERY_THROW);
- for (sal_Int32 i = 0; i < xIndexAccess->getCount(); ++i)
- {
- uno::Sequence< beans::PropertyValue > aLvlProps(1);
- aLvlProps[0].Name = "NumberingType";
- aLvlProps[0].Value <<= style::NumberingType::NUMBER_NONE;
- xNumberingRules->replaceByIndex(i, uno::makeAny(aLvlProps));
- xPropertySet->setPropertyValue("NumberingRules", uno::makeAny(xNumberingRules));
- }
- }
- }
- }
- if( !pEntry->sBaseStyleIdentifier.isEmpty() )
- {
- try
- {
- //TODO: Handle cases where a paragraph <> character style relation is needed
- StyleSheetEntryPtr pParent = FindStyleSheetByISTD( pEntry->sBaseStyleIdentifier );
- // Writer core doesn't support numbering styles having a parent style, it seems
- if (pParent && !bListStyle)
- {
- const OUString sParentStyleName = ConvertStyleName( pParent->sStyleName );
- if ( !sParentStyleName.isEmpty() && !xStyles->hasByName( sParentStyleName ) )
- aMissingParent.emplace_back( sParentStyleName, xStyle );
- else
- xStyle->setParentStyle( sParentStyleName );
- }
- }
- catch( const uno::RuntimeException& )
- {
- OSL_FAIL( "Styles parent could not be set");
- }
- }
- else if( bParaStyle )
- {
- // Paragraph styles that don't inherit from some parent need to apply the DocDefaults
- pEntry->pProperties->InsertProps( m_pImpl->m_pDefaultParaProps, /*bOverwrite=*/false );
-
- //now it's time to set the default parameters - for paragraph styles
- //Fonts: Western first entry in font table
- //CJK: second entry
- //CTL: third entry, if it exists
-
- sal_uInt32 nFontCount = rFontTable->size();
- if( !m_pImpl->m_rDMapper.IsOOXMLImport() && nFontCount > 2 )
- {
- uno::Any aTwoHundredFortyTwip = uno::makeAny(12.);
-
- // font size to 240 twip (12 pts) for all if not set
- pEntry->pProperties->Insert(PROP_CHAR_HEIGHT, aTwoHundredFortyTwip, false);
-
- // western font not already set -> apply first font
- const FontEntry::Pointer_t pWesternFontEntry(rFontTable->getFontEntry( 0 ));
- OUString sWesternFontName = pWesternFontEntry->sFontName;
- pEntry->pProperties->Insert(PROP_CHAR_FONT_NAME, uno::makeAny( sWesternFontName ), false);
-
- // CJK ... apply second font
- const FontEntry::Pointer_t pCJKFontEntry(rFontTable->getFontEntry( 2 ));
- pEntry->pProperties->Insert(PROP_CHAR_FONT_NAME_ASIAN, uno::makeAny( pCJKFontEntry->sFontName ), false);
- pEntry->pProperties->Insert(PROP_CHAR_HEIGHT_ASIAN, aTwoHundredFortyTwip, false);
-
- // CTL ... apply third font, if available
- if( nFontCount > 3 )
- {
- const FontEntry::Pointer_t pCTLFontEntry(rFontTable->getFontEntry( 3 ));
- pEntry->pProperties->Insert(PROP_CHAR_FONT_NAME_COMPLEX, uno::makeAny( pCTLFontEntry->sFontName ), false);
- pEntry->pProperties->Insert(PROP_CHAR_HEIGHT_COMPLEX, aTwoHundredFortyTwip, false);
- }
- }
- }
-
- auto aPropValues = comphelper::sequenceToContainer< std::vector<beans::PropertyValue> >(pEntry->pProperties->GetPropertyValues());
-
- if( bParaStyle )
- {
- // delay adding FollowStyle property: all styles need to be created first
- if ( !pEntry->sNextStyleIdentifier.isEmpty() )
- {
- StyleSheetEntryPtr pFollowStyle = FindStyleSheetByISTD( pEntry->sNextStyleIdentifier );
- if ( pFollowStyle && !pFollowStyle->sStyleName.isEmpty() )
- aMissingFollow.emplace_back( ConvertStyleName( pFollowStyle->sStyleName ), xStyle );
- }
-
- // Set the outline levels
- StyleSheetPropertyMap* pStyleSheetProperties = dynamic_cast<StyleSheetPropertyMap*>(pEntry ? pEntry->pProperties.get() : nullptr);
-
- if ( pStyleSheetProperties )
- {
- beans::PropertyValue aLvlVal( getPropertyName( PROP_OUTLINE_LEVEL ), 0,
- uno::makeAny( sal_Int16( pStyleSheetProperties->GetOutlineLevel( ) + 1 ) ),
- beans::PropertyState_DIRECT_VALUE );
- aPropValues.push_back(aLvlVal);
-
- // tdf#95495 missing list level settings in custom styles in old DOCX: apply settings of the parent style
- if (pStyleSheetProperties->GetListLevel() == -1 && pStyleSheetProperties->GetOutlineLevel() == -1)
- {
- const beans::PropertyValues aPropGrabBag = pEntry->GetInteropGrabBagSeq();
- for (const auto& rVal : aPropGrabBag)
- {
- if (rVal.Name == "customStyle" && rVal.Value == true)
- {
- OUString sBaseId = pEntry->sBaseStyleIdentifier;
- for (const auto& aSheetProps : m_pImpl->m_aStyleSheetEntries)
- {
- if (aSheetProps->sStyleIdentifierD == sBaseId)
- {
- StyleSheetPropertyMap& rStyleSheetProps
- = dynamic_cast<StyleSheetPropertyMap&>(*aSheetProps->pProperties);
- pStyleSheetProperties->SetListLevel(rStyleSheetProps.GetListLevel());
- pStyleSheetProperties->SetOutlineLevel(rStyleSheetProps.GetOutlineLevel());
- break;
- }
- }
- }
- }
- }
- }
-
- uno::Reference< beans::XPropertyState >xState( xStyle, uno::UNO_QUERY_THROW );
- if( sConvertedStyleName == "Contents Heading" ||
- sConvertedStyleName == "User Index Heading" ||
- sConvertedStyleName == "Index Heading" )
- {
- // remove Left/RightMargin values from TOX heading styles
- //left margin is set to NULL by default
- xState->setPropertyToDefault(getPropertyName( PROP_PARA_LEFT_MARGIN ));
- }
- else if ( sConvertedStyleName == "Text body" )
- xState->setPropertyToDefault(getPropertyName( PROP_PARA_BOTTOM_MARGIN ));
- else if ( sConvertedStyleName == "Heading 1" ||
- sConvertedStyleName == "Heading 2" ||
- sConvertedStyleName == "Heading 3" ||
- sConvertedStyleName == "Heading 4" ||
- sConvertedStyleName == "Heading 5" ||
- sConvertedStyleName == "Heading 6" ||
- sConvertedStyleName == "Heading 7" ||
- sConvertedStyleName == "Heading 8" ||
- sConvertedStyleName == "Heading 9" )
- {
- xState->setPropertyToDefault(getPropertyName( PROP_CHAR_WEIGHT ));
- xState->setPropertyToDefault(getPropertyName( PROP_CHAR_WEIGHT_ASIAN ));
- xState->setPropertyToDefault(getPropertyName( PROP_CHAR_WEIGHT_COMPLEX ));
- xState->setPropertyToDefault(getPropertyName( PROP_CHAR_POSTURE ));
- xState->setPropertyToDefault(getPropertyName( PROP_CHAR_POSTURE_ASIAN ));
- xState->setPropertyToDefault(getPropertyName( PROP_CHAR_POSTURE_COMPLEX ));
- xState->setPropertyToDefault(getPropertyName( PROP_CHAR_PROP_HEIGHT ));
- xState->setPropertyToDefault(getPropertyName( PROP_CHAR_PROP_HEIGHT_ASIAN ));
- xState->setPropertyToDefault(getPropertyName( PROP_CHAR_PROP_HEIGHT_COMPLEX));
-
- }
- }
-
- if ( !aPropValues.empty() )
- {
- PropValVector aSortedPropVals;
- for (const beans::PropertyValue& rValue : aPropValues)
- {
- // Don't add the style name properties
- bool bIsParaStyleName = rValue.Name == "ParaStyleName";
- bool bIsCharStyleName = rValue.Name == "CharStyleName";
- if ( !bIsParaStyleName && !bIsCharStyleName )
- {
- aSortedPropVals.Insert(rValue);
- }
- }
-
- try
- {
- uno::Reference< beans::XMultiPropertySet > xMultiPropertySet( xStyle, uno::UNO_QUERY_THROW);
- try
- {
- xMultiPropertySet->setPropertyValues( aSortedPropVals.getNames(), aSortedPropVals.getValues() );
- }
- catch ( const uno::Exception& )
- {
- uno::Reference<beans::XPropertySet> xPropertySet(xStyle, uno::UNO_QUERY_THROW);
- for ( const beans::PropertyValue& rValue : aSortedPropVals.getProperties() )
- {
- try
- {
- xPropertySet->setPropertyValue( rValue.Name, rValue.Value );
- }
- catch ( const uno::Exception& )
- {
- SAL_WARN( "writerfilter", "StyleSheetTable::ApplyStyleSheets could not set property " << rValue.Name );
- }
- }
- }
- // Duplicate MSWord's single footnote reference into Footnote Characters and Footnote anchor
- if( pEntry->sStyleName.equalsIgnoreAsciiCase("footnote reference")
- || pEntry->sStyleName.equalsIgnoreAsciiCase("endnote reference") )
- {
- uno::Reference< style::XStyle > xCopyStyle;
- if( pEntry->sStyleName.equalsIgnoreAsciiCase("footnote reference") )
- xStyles->getByName( "Footnote anchor" ) >>= xCopyStyle;
- else
- xStyles->getByName( "Endnote anchor" ) >>= xCopyStyle;
-
- xMultiPropertySet.set( xCopyStyle, uno::UNO_QUERY_THROW);
- xMultiPropertySet->setPropertyValues( aSortedPropVals.getNames(), aSortedPropVals.getValues() );
- }
- }
- catch( const lang::WrappedTargetException& rWrapped)
- {
-#ifdef DBG_UTIL
- OUString aMessage("StyleSheetTable::ApplyStyleSheets: Some style properties could not be set");
- beans::UnknownPropertyException aUnknownPropertyException;
-
- if (rWrapped.TargetException >>= aUnknownPropertyException)
- aMessage += ": " + aUnknownPropertyException.Message;
-
- SAL_WARN("writerfilter", aMessage);
-#else
- (void) rWrapped;
-#endif
- }
- catch( const uno::Exception& )
- {
- OSL_FAIL( "Some style properties could not be set");
- }
- }
- // Numbering style got inserted earlier.
- if(bInsert && !bListStyle)
- {
- const OUString sParentStyle = xStyle->getParentStyle();
- if( !sParentStyle.isEmpty() && !xStyles->hasByName( sParentStyle ) )
- aMissingParent.emplace_back( sParentStyle, xStyle );
-
- xStyles->insertByName( sConvertedStyleName, uno::makeAny( xStyle) );
- }
-
- beans::PropertyValues aGrabBag = pEntry->GetInteropGrabBagSeq();
- uno::Reference<beans::XPropertySet> xPropertySet(xStyle, uno::UNO_QUERY);
- if (aGrabBag.hasElements())
- {
- xPropertySet->setPropertyValue("StyleInteropGrabBag", uno::makeAny(aGrabBag));
- }
-
- // Only paragraph styles support automatic updates.
- if (pEntry->bAutoRedefine && bParaStyle)
- xPropertySet->setPropertyValue("IsAutoUpdate", uno::makeAny(true));
- }
- else if(pEntry->nStyleTypeCode == STYLE_TYPE_TABLE)
- {
- // If this is a table style, save its contents as-is for roundtrip purposes.
- TableStyleSheetEntry* pTableEntry = static_cast<TableStyleSheetEntry *>(pEntry.get());
- aTableStylesVec.push_back(pTableEntry->GetInteropGrabBag());
-
- // if DocDefaults exist, MS Word includes these in the table style definition.
- pEntry->pProperties->InsertProps( m_pImpl->m_pDefaultCharProps, /*bOverwrite=*/false );
- pEntry->pProperties->InsertProps( m_pImpl->m_pDefaultParaProps, /*bOverwrite=*/false );
- }
- }
-
- // Update the styles that were created before their parents or next-styles
- for( auto const & iter : aMissingParent )
- {
- iter.second->setParentStyle( iter.first );
- }
-
- for( auto const & iter : aMissingFollow )
- {
- try
- {
- uno::Reference<beans::XPropertySet> xPropertySet(iter.second, uno::UNO_QUERY);
- xPropertySet->setPropertyValue( "FollowStyle", uno::makeAny(iter.first) );
- }
- catch( uno::Exception & ) {}
- }
-
- if (!aTableStylesVec.empty())
- {
- // If we had any table styles, add a new document-level InteropGrabBag entry for them.
- uno::Reference<beans::XPropertySet> xPropertySet(m_pImpl->m_xTextDocument, uno::UNO_QUERY);
- uno::Any aAny = xPropertySet->getPropertyValue("InteropGrabBag");
- auto aGrabBag = comphelper::sequenceToContainer< std::vector<beans::PropertyValue> >(aAny.get< uno::Sequence<beans::PropertyValue> >());
- beans::PropertyValue aValue;
- aValue.Name = "tableStyles";
- aValue.Value <<= comphelper::containerToSequence(aTableStylesVec);
- aGrabBag.push_back(aValue);
- xPropertySet->setPropertyValue("InteropGrabBag", uno::makeAny(comphelper::containerToSequence(aGrabBag)));
- }
- }
- }
- catch( const uno::Exception& )
- {
- DBG_UNHANDLED_EXCEPTION("writerfilter", "Styles could not be imported completely");
- }
-}
-
-
-StyleSheetEntryPtr StyleSheetTable::FindStyleSheetByISTD(std::u16string_view sIndex)
-{
- StyleSheetEntryPtr pRet;
- for(const StyleSheetEntryPtr & rpEntry : m_pImpl->m_aStyleSheetEntries)
- {
- if( rpEntry->sStyleIdentifierD == sIndex)
- {
- pRet = rpEntry;
- break;
- }
- }
- return pRet;
-}
-
-
-StyleSheetEntryPtr StyleSheetTable::FindStyleSheetByConvertedStyleName(std::u16string_view sIndex)
-{
- StyleSheetEntryPtr pRet;
- for(const StyleSheetEntryPtr & rpEntry : m_pImpl->m_aStyleSheetEntries)
- {
- if( rpEntry->sConvertedStyleName == sIndex)
- {
- pRet = rpEntry;
- break;
- }
- }
- return pRet;
-}
-
-
-StyleSheetEntryPtr StyleSheetTable::FindDefaultParaStyle()
-{
- return FindStyleSheetByISTD( m_pImpl->m_sDefaultParaStyleName );
-}
-
-const StyleSheetEntryPtr & StyleSheetTable::GetCurrentEntry() const
-{
- return m_pImpl->m_pCurrentEntry;
-}
-
-OUString StyleSheetTable::ConvertStyleName( const OUString& rWWName, bool bExtendedSearch)
-{
- OUString sRet( rWWName );
- if( bExtendedSearch )
- {
- //search for the rWWName in the IdentifierD of the existing styles and convert the sStyleName member
- //TODO: performance issue - put styles list into a map sorted by its sStyleIdentifierD members
- for( const auto& rStyleSheetEntryPtr : m_pImpl->m_aStyleSheetEntries )
- {
- if( rWWName == rStyleSheetEntryPtr->sStyleIdentifierD )
- sRet = rStyleSheetEntryPtr->sStyleName;
- }
- }
-
- // create a map only once
- static const std::map< OUString, OUString> StyleNameMap {
- { "Normal", "Standard" },
- { "heading 1", "Heading 1" },
- { "heading 2", "Heading 2" },
- { "heading 3", "Heading 3" },
- { "heading 4", "Heading 4" },
- { "heading 5", "Heading 5" },
- { "heading 6", "Heading 6" },
- { "heading 7", "Heading 7" },
- { "heading 8", "Heading 8" },
- { "heading 9", "Heading 9" },
- { "Heading 1", "Heading 1" },
- { "Heading 2", "Heading 2" },
- { "Heading 3", "Heading 3" },
- { "Heading 4", "Heading 4" },
- { "Heading 5", "Heading 5" },
- { "Heading 6", "Heading 6" },
- { "Heading 7", "Heading 7" },
- { "Heading 8", "Heading 8" },
- { "Heading 9", "Heading 9" },
- { "Index 1", "Index 1" },
- { "Index 2", "Index 2" },
- { "Index 3", "Index 3" },
-// { "Index 4", "" },
-// { "Index 5", "" },
-// { "Index 6", "" },
-// { "Index 7", "" },
-// { "Index 8", "" },
-// { "Index 9", "" },
- { "TOC 1", "Contents 1" },
- { "TOC 2", "Contents 2" },
- { "TOC 3", "Contents 3" },
- { "TOC 4", "Contents 4" },
- { "TOC 5", "Contents 5" },
- { "TOC 6", "Contents 6" },
- { "TOC 7", "Contents 7" },
- { "TOC 8", "Contents 8" },
- { "TOC 9", "Contents 9" },
- { "TOCHeading", "Contents Heading" },
- { "toc 1", "Contents 1" },
- { "toc 2", "Contents 2" },
- { "toc 3", "Contents 3" },
- { "toc 4", "Contents 4" },
- { "toc 5", "Contents 5" },
- { "toc 6", "Contents 6" },
- { "toc 7", "Contents 7" },
- { "toc 8", "Contents 8" },
- { "toc 9", "Contents 9" },
- { "TOC1", "Contents 1" },
- { "TOC2", "Contents 2" },
- { "TOC3", "Contents 3" },
- { "TOC4", "Contents 4" },
- { "TOC5", "Contents 5" },
- { "TOC6", "Contents 6" },
- { "TOC7", "Contents 7" },
- { "TOC8", "Contents 8" },
- { "TOC9", "Contents 9" },
-// { "Normal Indent", "" },
- { "footnote text", "Footnote" },
- { "Footnote Text", "Footnote" },
-// { "Annotation Text", "" },
- { "Header", "Header" },
- { "header", "Header" },
- { "Footer", "Footer" },
- { "footer", "Footer" },
- { "Index Heading", "Index Heading" },
-// { "Caption", "" },
-// { "Table of Figures", "" },
- { "Envelope Address", "Addressee" },
- { "Envelope Return", "Sender" },
- { "footnote reference", "Footnote Characters" },
- { "Footnote Reference", "Footnote Characters" },
-// { "Annotation Reference", "" },
- { "Line Number", "Line numbering" },
- { "Page Number", "Page Number" },
- { "endnote reference", "Endnote Characters" },
- { "Endnote Reference", "Endnote Characters" },
- { "endnote text", "Endnote" },
- { "Endnote Text", "Endnote" },
-// { "Table of Authorities", "" },
-// { "Macro Text", "" },
-// { "TOA Heading", "" },
- { "List", "List" },
-// { "List 2", "" },
-// { "List 3", "" },
-// { "List 4", "" },
-// { "List 5", "" },
-// { "List Bullet", "" },
-// { "List Bullet 2", "" },
-// { "List Bullet 3", "" },
-// { "List Bullet 4", "" },
-// { "List Bullet 5", "" },
-// { "List Number", "" },
-// { "List Number 2", "" },
-// { "List Number 3", "" },
-// { "List Number 4", "" },
-// { "List Number 5", "" },
- { "Title", "Title" },
-// { "Closing", "" },
- { "Signature", "Signature" },
-// { "Default Paragraph Font", "" },
- { "DefaultParagraphFont", "Default Paragraph Font" },
- { "Body Text", "Text body" },
- { "BodyText", "Text body" },
- { "BodyTextIndentItalic", "Text body indent italic" },
- { "Body Text Indent", "Text body indent" },
- { "BodyTextIndent", "Text body indent" },
- { "BodyTextIndent2", "Text body indent2" },
-// { "List Continue", "" },
-// { "List Continue 2", "" },
-// { "List Continue 3", "" },
-// { "List Continue 4", "" },
-// { "List Continue 5", "" },
-// { "Message Header", "" },
- { "Subtitle", "Subtitle" },
-// { "Salutation", "" },
-// { "Date", "" },
- { "Body Text First Indent", "Body Text Indent" },
-// { "Body Text First Indent 2", "" },
-// { "Note Heading", "" },
-// { "Body Text 2", "" },
-// { "Body Text 3", "" },
-// { "Body Text Indent 2", "" },
-// { "Body Text Indent 3", "" },
-// { "Block Text", "" },
- { "Hyperlink", "Internet link" },
- { "FollowedHyperlink", "Visited Internet Link" },
- { "Emphasis", "Emphasis" },
-// { "Document Map", "" },
-// { "Plain Text", "" },
- { "NoList", "No List" },
- { "AbstractHeading", "Abstract Heading" },
- { "AbstractBody", "Abstract Body" },
- { "PageNumber", "page number" },
- { "TableNormal", "Normal Table" },
- { "DocumentMap", "Document Map" },
- };
-
- // find style-name using map
- if (const auto aIt = StyleNameMap.find(sRet); aIt != StyleNameMap.end())
- {
- sRet = aIt->second;
- }
- else
- {
- // Style names which should not be used without a " (user)" suffix
- static const o3tl::sorted_vector<OUString> ReservedStyleNames = [] {
- o3tl::sorted_vector<OUString> set;
- for (const auto& pair : StyleNameMap)
- set.insert(pair.second);
- return set;
- }();
- // SwStyleNameMapper doc says: If the UI style name equals a
- // programmatic name, then it must append " (user)" to the end.
- if (ReservedStyleNames.find(sRet) != ReservedStyleNames.end())
- sRet += " (user)";
- }
-
- return sRet;
-}
-
-void StyleSheetTable::applyDefaults(bool bParaProperties)
-{
- try{
-
- if (!m_pImpl->m_bIsNewDoc)
- {
- // tdf#72942: do not corrupts original styles in master document
- // during inserting of text from second document
- return;
- }
-
- if(!m_pImpl->m_xTextDefaults.is())
- {
- m_pImpl->m_xTextDefaults.set(
- m_pImpl->m_rDMapper.GetTextFactory()->createInstance("com.sun.star.text.Defaults"),
- uno::UNO_QUERY_THROW );
- }
-
- // WARNING: these defaults only take effect IF there is a DocDefaults style section. Normally there is, but not always.
- if( bParaProperties && m_pImpl->m_pDefaultParaProps)
- {
- // tdf#87533 LO will have different defaults here, depending on the locale. Import with documented defaults
- SetDefaultParaProps(PROP_WRITING_MODE, uno::makeAny(sal_Int16(text::WritingMode_LR_TB)));
- SetDefaultParaProps(PROP_PARA_ADJUST, uno::makeAny(sal_Int16(style::ParagraphAdjust_LEFT)));
-
- // Widow/Orphan -> set both to two if not already set
- uno::Any aTwo = uno::makeAny(sal_Int8(2));
- SetDefaultParaProps(PROP_PARA_WIDOWS, aTwo);
- SetDefaultParaProps(PROP_PARA_ORPHANS, aTwo);
-
- uno::Reference<style::XStyleFamiliesSupplier> xStylesSupplier(m_pImpl->m_xTextDocument, uno::UNO_QUERY);
- uno::Reference<container::XNameAccess> xStyleFamilies = xStylesSupplier->getStyleFamilies();
- uno::Reference<container::XNameAccess> xParagraphStyles;
- xStyleFamilies->getByName("ParagraphStyles") >>= xParagraphStyles;
- uno::Reference<beans::XPropertySet> xDefault;
- // This is the built-in default style that every style inherits from
- xParagraphStyles->getByName("Paragraph style") >>= xDefault;
-
- const uno::Sequence< beans::PropertyValue > aPropValues = m_pImpl->m_pDefaultParaProps->GetPropertyValues();
- for( const auto& rPropValue : aPropValues )
- {
- try
- {
- xDefault->setPropertyValue(rPropValue.Name, rPropValue.Value);
- }
- catch( const uno::Exception& )
- {
- TOOLS_WARN_EXCEPTION( "writerfilter", "setPropertyValue");
- }
- }
- }
- if( !bParaProperties && m_pImpl->m_pDefaultCharProps )
- {
- // tdf#108350: Earlier in DomainMapper for DOCX, Calibri/11pt was set to match MSWord 2007+,
- // but that is valid only if DocDefaults_rPrDefault is omitted.
- // Now that DocDefaults_rPrDefault is known, the defaults should be reset to Times New Roman/10pt.
- if ( m_pImpl->m_rDMapper.IsOOXMLImport() )
- m_pImpl->m_xTextDefaults->setPropertyValue( getPropertyName(PROP_CHAR_FONT_NAME), css::uno::Any(OUString("Times New Roman")) );
-
- const uno::Sequence< beans::PropertyValue > aPropValues = m_pImpl->m_pDefaultCharProps->GetPropertyValues();
- for( const auto& rPropValue : aPropValues )
- {
- try
- {
- m_pImpl->m_xTextDefaults->setPropertyValue( rPropValue.Name, rPropValue.Value );
- }
- catch( const uno::Exception& )
- {
- TOOLS_WARN_EXCEPTION( "writerfilter", "exception");
- }
- }
- }
- }
- catch( const uno::Exception& )
- {
- }
-}
-
-
-OUString StyleSheetTable::getOrCreateCharStyle( PropertyValueVector_t& rCharProperties, bool bAlwaysCreate )
-{
- //find out if any of the styles already has the required properties then return its name
- OUString sListLabel = m_pImpl->HasListCharStyle(rCharProperties);
- // Don't try to reuse an existing character style if requested.
- if( !sListLabel.isEmpty() && !bAlwaysCreate)
- return sListLabel;
- const char cListLabel[] = "ListLabel ";
- uno::Reference< style::XStyleFamiliesSupplier > xStylesSupplier( m_pImpl->m_xTextDocument, uno::UNO_QUERY_THROW );
- uno::Reference< container::XNameAccess > xStyleFamilies = xStylesSupplier->getStyleFamilies();
- uno::Reference<container::XNameContainer> xCharStyles;
- xStyleFamilies->getByName("CharacterStyles") >>= xCharStyles;
- //search for all character styles with the name sListLabel + <index>
- sal_Int32 nStyleFound = 0;
- const uno::Sequence< OUString > aStyleNames = xCharStyles->getElementNames();
- for( const auto& rStyleName : aStyleNames )
- {
- OUString sSuffix;
- if( rStyleName.startsWith( cListLabel, &sSuffix ) )
- {
- sal_Int32 nSuffix = sSuffix.toInt32();
- if( nSuffix > 0 && nSuffix > nStyleFound )
- nStyleFound = nSuffix;
- }
- }
- sListLabel = cListLabel + OUString::number( ++nStyleFound );
- //create a new one otherwise
- uno::Reference< lang::XMultiServiceFactory > xDocFactory( m_pImpl->m_xTextDocument, uno::UNO_QUERY_THROW );
- try
- {
- uno::Reference< style::XStyle > xStyle( xDocFactory->createInstance(
- getPropertyName( PROP_SERVICE_CHAR_STYLE )), uno::UNO_QUERY_THROW);
- uno::Reference< beans::XPropertySet > xStyleProps(xStyle, uno::UNO_QUERY_THROW );
- for( const auto& rCharProp : rCharProperties)
- {
- try
- {
- xStyleProps->setPropertyValue( rCharProp.Name, rCharProp.Value );
- }
- catch( const uno::Exception& )
- {
- TOOLS_WARN_EXCEPTION( "writerfilter", "StyleSheetTable::getOrCreateCharStyle - Style::setPropertyValue");
- }
- }
- xCharStyles->insertByName( sListLabel, uno::makeAny( xStyle) );
- m_pImpl->m_aListCharStylePropertyVector.emplace_back( sListLabel, rCharProperties );
- }
- catch( const uno::Exception& )
- {
- TOOLS_WARN_EXCEPTION( "writerfilter", "StyleSheetTable::getOrCreateCharStyle");
- }
-
- return sListLabel;
-}
-
-}//namespace writerfilter
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/StyleSheetTable.hxx b/writerfilter/source/dmapper/StyleSheetTable.hxx
deleted file mode 100644
index 69469d19d37a..000000000000
--- a/writerfilter/source/dmapper/StyleSheetTable.hxx
+++ /dev/null
@@ -1,150 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * 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 .
- */
-#ifndef INCLUDED_WRITERFILTER_SOURCE_DMAPPER_STYLESHEETTABLE_HXX
-#define INCLUDED_WRITERFILTER_SOURCE_DMAPPER_STYLESHEETTABLE_HXX
-
-#include <memory>
-#include "TblStylePrHandler.hxx"
-
-#include "DomainMapper.hxx"
-#include <com/sun/star/beans/PropertyValues.hpp>
-#include "PropertyMap.hxx"
-#include "FontTable.hxx"
-#include "LoggedResources.hxx"
-
-namespace com::sun::star::text { class XTextDocument; }
-
-
-namespace writerfilter::dmapper
-{
-
-
-enum StyleType
-{
- STYLE_TYPE_UNKNOWN,
- STYLE_TYPE_PARA,
- STYLE_TYPE_CHAR,
- STYLE_TYPE_TABLE,
- STYLE_TYPE_LIST
-};
-class StyleSheetTable;
-typedef tools::SvRef<StyleSheetTable> StyleSheetTablePtr;
-
-struct StyleSheetTable_Impl;
-class StyleSheetEntry : public virtual SvRefBase
-{
- std::vector<css::beans::PropertyValue> m_aInteropGrabBag;
-public:
- OUString sStyleIdentifierD; // WW8 name
- bool bIsDefaultStyle;
- bool bInvalidHeight;
- bool bHasUPE; //universal property expansion
- StyleType nStyleTypeCode; //sgc
- OUString sBaseStyleIdentifier;
- OUString sNextStyleIdentifier;
- OUString sStyleName;
- const PropertyMapPtr pProperties; ///< always StyleSheetPropertyMap
- OUString sConvertedStyleName;
- std::vector<css::beans::PropertyValue> aLatentStyles; ///< Attributes of latentStyles
- std::vector<css::beans::PropertyValue> aLsdExceptions; ///< List of lsdException attribute lists
- bool bAutoRedefine; ///< Writer calls this auto-update.
-
- void AppendInteropGrabBag(const css::beans::PropertyValue& rValue);
- css::beans::PropertyValue GetInteropGrabBag(); ///< Used for table styles, has a name.
- css::beans::PropertyValues GetInteropGrabBagSeq() const; ///< Used for existing styles, just a list of properties.
-
- // Get all properties, merged with the all of the parent's properties
- PropertyMapPtr GetMergedInheritedProperties(const StyleSheetTablePtr& pStyleSheetTable);
-
- StyleSheetEntry();
- virtual ~StyleSheetEntry() override;
-};
-
-typedef tools::SvRef<StyleSheetEntry> StyleSheetEntryPtr;
-
-class DomainMapper;
-class StyleSheetTable :
- public LoggedProperties,
- public LoggedTable
-{
- std::unique_ptr<StyleSheetTable_Impl> m_pImpl;
-
-public:
- StyleSheetTable(DomainMapper& rDMapper, css::uno::Reference<css::text::XTextDocument> const& xTextDocument, bool bIsNewDoc);
- virtual ~StyleSheetTable() override;
-
- void ApplyNumberingStyleNameToParaStyles();
- void ApplyStyleSheets( const FontTablePtr& rFontTable );
- StyleSheetEntryPtr FindStyleSheetByISTD(std::u16string_view sIndex);
- StyleSheetEntryPtr FindStyleSheetByConvertedStyleName(std::u16string_view rIndex);
- StyleSheetEntryPtr FindDefaultParaStyle();
-
- OUString ConvertStyleName( const OUString& rWWName, bool bExtendedSearch = false );
-
- OUString getOrCreateCharStyle( PropertyValueVector_t& rCharProperties, bool bAlwaysCreate );
-
- void SetDefaultParaProps(PropertyIds eId, const css::uno::Any& rAny);
- PropertyMapPtr const & GetDefaultParaProps() const;
- /// Returns the default character properties.
- PropertyMapPtr const & GetDefaultCharProps() const;
-
- const StyleSheetEntryPtr & GetCurrentEntry() const;
-
-private:
- // Properties
- virtual void lcl_attribute(Id Name, Value & val) override;
- virtual void lcl_sprm(Sprm & sprm) override;
-
- // Table
- virtual void lcl_entry(writerfilter::Reference<Properties>::Pointer_t ref) override;
-
- void applyDefaults(bool bParaProperties);
-};
-
-
-class TableStyleSheetEntry :
- public StyleSheetEntry
-{
-public:
- // Adds a new tblStylePr to the table style entry. This method
- // fixes some possible properties conflicts, like borders ones.
- void AddTblStylePr( TblStyleType nType, const PropertyMapPtr& pProps );
-
- // Gets all the properties
- // + corresponding to the mask,
- // + from the parent styles
-
- // @param mask mask describing which properties to return
- PropertyMapPtr GetProperties( sal_Int32 nMask);
-
- TableStyleSheetEntry( StyleSheetEntry const & aEntry );
- virtual ~TableStyleSheetEntry( ) override;
-
-private:
- typedef std::map<TblStyleType, PropertyMapPtr> TblStylePrs;
- TblStylePrs m_aStyles;
- PropertyMapPtr GetLocalPropertiesFromMask( sal_Int32 nMask );
-};
-
-
-}
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/TDefTableHandler.cxx b/writerfilter/source/dmapper/TDefTableHandler.cxx
deleted file mode 100644
index 9d7059feece6..000000000000
--- a/writerfilter/source/dmapper/TDefTableHandler.cxx
+++ /dev/null
@@ -1,458 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * 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 .
- */
-#include "TDefTableHandler.hxx"
-#include "PropertyMap.hxx"
-#include "ConversionHelper.hxx"
-#include <ooxml/resourceids.hxx>
-#include <filter/msfilter/util.hxx>
-#include <tools/color.hxx>
-#include <com/sun/star/table/BorderLine2.hpp>
-#include <comphelper/sequence.hxx>
-
-namespace writerfilter::dmapper {
-
-using namespace ::com::sun::star;
-
-
-TDefTableHandler::TDefTableHandler() :
-LoggedProperties("TDefTableHandler"),
-m_nLineWidth(0),
-m_nLineType(0),
-m_nLineColor(0)
-{
-}
-
-
-TDefTableHandler::~TDefTableHandler()
-{
-}
-
-OUString TDefTableHandler::getBorderTypeString(sal_Int32 nType)
-{
- switch (nType)
- {
- case NS_ooxml::LN_Value_ST_Border_nil: return "nil";
- case NS_ooxml::LN_Value_ST_Border_none: return "none";
- case NS_ooxml::LN_Value_ST_Border_single: return "single";
- case NS_ooxml::LN_Value_ST_Border_thick: return "thick";
- case NS_ooxml::LN_Value_ST_Border_double: return "double";
- case NS_ooxml::LN_Value_ST_Border_dotted: return "dotted";
- case NS_ooxml::LN_Value_ST_Border_dashed: return "dashed";
- case NS_ooxml::LN_Value_ST_Border_dotDash: return "dotDash";
- case NS_ooxml::LN_Value_ST_Border_dotDotDash: return "dotDotDash";
- case NS_ooxml::LN_Value_ST_Border_triple: return "triple";
- case NS_ooxml::LN_Value_ST_Border_thinThickSmallGap: return "thinThickSmallGap";
- case NS_ooxml::LN_Value_ST_Border_thickThinSmallGap: return "thickThinSmallGap";
- case NS_ooxml::LN_Value_ST_Border_thinThickThinSmallGap: return "thinThickThinSmallGap";
- case NS_ooxml::LN_Value_ST_Border_thinThickMediumGap: return "thinThickMediumGap";
- case NS_ooxml::LN_Value_ST_Border_thickThinMediumGap: return "thickThinMediumGap";
- case NS_ooxml::LN_Value_ST_Border_thinThickThinMediumGap: return "thinThickThinMediumGap";
- case NS_ooxml::LN_Value_ST_Border_thinThickLargeGap: return "thinThickLargeGap";
- case NS_ooxml::LN_Value_ST_Border_thickThinLargeGap: return "thickThinLargeGap";
- case NS_ooxml::LN_Value_ST_Border_thinThickThinLargeGap: return "thinThickThinLargeGap";
- case NS_ooxml::LN_Value_ST_Border_wave: return "wave";
- case NS_ooxml::LN_Value_ST_Border_doubleWave: return "doubleWave";
- case NS_ooxml::LN_Value_ST_Border_dashSmallGap: return "dashSmallGap";
- case NS_ooxml::LN_Value_ST_Border_dashDotStroked: return "dashDotStroked";
- case NS_ooxml::LN_Value_ST_Border_threeDEmboss: return "threeDEmboss";
- case NS_ooxml::LN_Value_ST_Border_threeDEngrave: return "threeDEngrave";
- case NS_ooxml::LN_Value_ST_Border_outset: return "outset";
- case NS_ooxml::LN_Value_ST_Border_inset: return "inset";
- case NS_ooxml::LN_Value_ST_Border_apples: return "apples";
- case NS_ooxml::LN_Value_ST_Border_archedScallops: return "archedScallops";
- case NS_ooxml::LN_Value_ST_Border_babyPacifier: return "babyPacifier";
- case NS_ooxml::LN_Value_ST_Border_babyRattle: return "babyRattle";
- case NS_ooxml::LN_Value_ST_Border_balloons3Colors: return "balloons3Colors";
- case NS_ooxml::LN_Value_ST_Border_balloonsHotAir: return "balloonsHotAir";
- case NS_ooxml::LN_Value_ST_Border_basicBlackDashes: return "basicBlackDashes";
- case NS_ooxml::LN_Value_ST_Border_basicBlackDots: return "basicBlackDots";
- case NS_ooxml::LN_Value_ST_Border_basicBlackSquares: return "basicBlackSquares";
- case NS_ooxml::LN_Value_ST_Border_basicThinLines: return "basicThinLines";
- case NS_ooxml::LN_Value_ST_Border_basicWhiteDashes: return "basicWhiteDashes";
- case NS_ooxml::LN_Value_ST_Border_basicWhiteDots: return "basicWhiteDots";
- case NS_ooxml::LN_Value_ST_Border_basicWhiteSquares: return "basicWhiteSquares";
- case NS_ooxml::LN_Value_ST_Border_basicWideInline: return "basicWideInline";
- case NS_ooxml::LN_Value_ST_Border_basicWideMidline: return "basicWideMidline";
- case NS_ooxml::LN_Value_ST_Border_basicWideOutline: return "basicWideOutline";
- case NS_ooxml::LN_Value_ST_Border_bats: return "bats";
- case NS_ooxml::LN_Value_ST_Border_birds: return "birds";
- case NS_ooxml::LN_Value_ST_Border_birdsFlight: return "birdsFlight";
- case NS_ooxml::LN_Value_ST_Border_cabins: return "cabins";
- case NS_ooxml::LN_Value_ST_Border_cakeSlice: return "cakeSlice";
- case NS_ooxml::LN_Value_ST_Border_candyCorn: return "candyCorn";
- case NS_ooxml::LN_Value_ST_Border_celticKnotwork: return "celticKnotwork";
- case NS_ooxml::LN_Value_ST_Border_certificateBanner: return "certificateBanner";
- case NS_ooxml::LN_Value_ST_Border_chainLink: return "chainLink";
- case NS_ooxml::LN_Value_ST_Border_champagneBottle: return "champagneBottle";
- case NS_ooxml::LN_Value_ST_Border_checkedBarBlack: return "checkedBarBlack";
- case NS_ooxml::LN_Value_ST_Border_checkedBarColor: return "checkedBarColor";
- case NS_ooxml::LN_Value_ST_Border_checkered: return "checkered";
- case NS_ooxml::LN_Value_ST_Border_christmasTree: return "christmasTree";
- case NS_ooxml::LN_Value_ST_Border_circlesLines: return "circlesLines";
- case NS_ooxml::LN_Value_ST_Border_circlesRectangles: return "circlesRectangles";
- case NS_ooxml::LN_Value_ST_Border_classicalWave: return "classicalWave";
- case NS_ooxml::LN_Value_ST_Border_clocks: return "clocks";
- case NS_ooxml::LN_Value_ST_Border_compass: return "compass";
- case NS_ooxml::LN_Value_ST_Border_confetti: return "confetti";
- case NS_ooxml::LN_Value_ST_Border_confettiGrays: return "confettiGrays";
- case NS_ooxml::LN_Value_ST_Border_confettiOutline: return "confettiOutline";
- case NS_ooxml::LN_Value_ST_Border_confettiStreamers: return "confettiStreamers";
- case NS_ooxml::LN_Value_ST_Border_confettiWhite: return "confettiWhite";
- case NS_ooxml::LN_Value_ST_Border_cornerTriangles: return "cornerTriangles";
- case NS_ooxml::LN_Value_ST_Border_couponCutoutDashes: return "couponCutoutDashes";
- case NS_ooxml::LN_Value_ST_Border_couponCutoutDots: return "couponCutoutDots";
- case NS_ooxml::LN_Value_ST_Border_crazyMaze: return "crazyMaze";
- case NS_ooxml::LN_Value_ST_Border_creaturesButterfly: return "creaturesButterfly";
- case NS_ooxml::LN_Value_ST_Border_creaturesFish: return "creaturesFish";
- case NS_ooxml::LN_Value_ST_Border_creaturesInsects: return "creaturesInsects";
- case NS_ooxml::LN_Value_ST_Border_creaturesLadyBug: return "creaturesLadyBug";
- case NS_ooxml::LN_Value_ST_Border_crossStitch: return "crossStitch";
- case NS_ooxml::LN_Value_ST_Border_cup: return "cup";
- case NS_ooxml::LN_Value_ST_Border_decoArch: return "decoArch";
- case NS_ooxml::LN_Value_ST_Border_decoArchColor: return "decoArchColor";
- case NS_ooxml::LN_Value_ST_Border_decoBlocks: return "decoBlocks";
- case NS_ooxml::LN_Value_ST_Border_diamondsGray: return "diamondsGray";
- case NS_ooxml::LN_Value_ST_Border_doubleD: return "doubleD";
- case NS_ooxml::LN_Value_ST_Border_doubleDiamonds: return "doubleDiamonds";
- case NS_ooxml::LN_Value_ST_Border_earth1: return "earth1";
- case NS_ooxml::LN_Value_ST_Border_earth2: return "earth2";
- case NS_ooxml::LN_Value_ST_Border_eclipsingSquares1: return "eclipsingSquares1";
- case NS_ooxml::LN_Value_ST_Border_eclipsingSquares2: return "eclipsingSquares2";
- case NS_ooxml::LN_Value_ST_Border_eggsBlack: return "eggsBlack";
- case NS_ooxml::LN_Value_ST_Border_fans: return "fans";
- case NS_ooxml::LN_Value_ST_Border_film: return "film";
- case NS_ooxml::LN_Value_ST_Border_firecrackers: return "firecrackers";
- case NS_ooxml::LN_Value_ST_Border_flowersBlockPrint: return "flowersBlockPrint";
- case NS_ooxml::LN_Value_ST_Border_flowersDaisies: return "flowersDaisies";
- case NS_ooxml::LN_Value_ST_Border_flowersModern1: return "flowersModern1";
- case NS_ooxml::LN_Value_ST_Border_flowersModern2: return "flowersModern2";
- case NS_ooxml::LN_Value_ST_Border_flowersPansy: return "flowersPansy";
- case NS_ooxml::LN_Value_ST_Border_flowersRedRose: return "flowersRedRose";
- case NS_ooxml::LN_Value_ST_Border_flowersRoses: return "flowersRoses";
- case NS_ooxml::LN_Value_ST_Border_flowersTeacup: return "flowersTeacup";
- case NS_ooxml::LN_Value_ST_Border_flowersTiny: return "flowersTiny";
- case NS_ooxml::LN_Value_ST_Border_gems: return "gems";
- case NS_ooxml::LN_Value_ST_Border_gingerbreadMan: return "gingerbreadMan";
- case NS_ooxml::LN_Value_ST_Border_gradient: return "gradient";
- case NS_ooxml::LN_Value_ST_Border_handmade1: return "handmade1";
- case NS_ooxml::LN_Value_ST_Border_handmade2: return "handmade2";
- case NS_ooxml::LN_Value_ST_Border_heartBalloon: return "heartBalloon";
- case NS_ooxml::LN_Value_ST_Border_heartGray: return "heartGray";
- case NS_ooxml::LN_Value_ST_Border_hearts: return "hearts";
- case NS_ooxml::LN_Value_ST_Border_heebieJeebies: return "heebieJeebies";
- case NS_ooxml::LN_Value_ST_Border_holly: return "holly";
- case NS_ooxml::LN_Value_ST_Border_houseFunky: return "houseFunky";
- case NS_ooxml::LN_Value_ST_Border_hypnotic: return "hypnotic";
- case NS_ooxml::LN_Value_ST_Border_iceCreamCones: return "iceCreamCones";
- case NS_ooxml::LN_Value_ST_Border_lightBulb: return "lightBulb";
- case NS_ooxml::LN_Value_ST_Border_lightning1: return "lightning1";
- case NS_ooxml::LN_Value_ST_Border_lightning2: return "lightning2";
- case NS_ooxml::LN_Value_ST_Border_mapPins: return "mapPins";
- case NS_ooxml::LN_Value_ST_Border_mapleLeaf: return "mapleLeaf";
- case NS_ooxml::LN_Value_ST_Border_mapleMuffins: return "mapleMuffins";
- case NS_ooxml::LN_Value_ST_Border_marquee: return "marquee";
- case NS_ooxml::LN_Value_ST_Border_marqueeToothed: return "marqueeToothed";
- case NS_ooxml::LN_Value_ST_Border_moons: return "moons";
- case NS_ooxml::LN_Value_ST_Border_mosaic: return "mosaic";
- case NS_ooxml::LN_Value_ST_Border_musicNotes: return "musicNotes";
- case NS_ooxml::LN_Value_ST_Border_northwest: return "northwest";
- case NS_ooxml::LN_Value_ST_Border_ovals: return "ovals";
- case NS_ooxml::LN_Value_ST_Border_packages: return "packages";
- case NS_ooxml::LN_Value_ST_Border_palmsBlack: return "palmsBlack";
- case NS_ooxml::LN_Value_ST_Border_palmsColor: return "palmsColor";
- case NS_ooxml::LN_Value_ST_Border_paperClips: return "paperClips";
- case NS_ooxml::LN_Value_ST_Border_papyrus: return "papyrus";
- case NS_ooxml::LN_Value_ST_Border_partyFavor: return "partyFavor";
- case NS_ooxml::LN_Value_ST_Border_partyGlass: return "partyGlass";
- case NS_ooxml::LN_Value_ST_Border_pencils: return "pencils";
- case NS_ooxml::LN_Value_ST_Border_people: return "people";
- case NS_ooxml::LN_Value_ST_Border_peopleWaving: return "peopleWaving";
- case NS_ooxml::LN_Value_ST_Border_peopleHats: return "peopleHats";
- case NS_ooxml::LN_Value_ST_Border_poinsettias: return "poinsettias";
- case NS_ooxml::LN_Value_ST_Border_postageStamp: return "postageStamp";
- case NS_ooxml::LN_Value_ST_Border_pumpkin1: return "pumpkin1";
- case NS_ooxml::LN_Value_ST_Border_pushPinNote2: return "pushPinNote2";
- case NS_ooxml::LN_Value_ST_Border_pushPinNote1: return "pushPinNote1";
- case NS_ooxml::LN_Value_ST_Border_pyramids: return "pyramids";
- case NS_ooxml::LN_Value_ST_Border_pyramidsAbove: return "pyramidsAbove";
- case NS_ooxml::LN_Value_ST_Border_quadrants: return "quadrants";
- case NS_ooxml::LN_Value_ST_Border_rings: return "rings";
- case NS_ooxml::LN_Value_ST_Border_safari: return "safari";
- case NS_ooxml::LN_Value_ST_Border_sawtooth: return "sawtooth";
- case NS_ooxml::LN_Value_ST_Border_sawtoothGray: return "sawtoothGray";
- case NS_ooxml::LN_Value_ST_Border_scaredCat: return "scaredCat";
- case NS_ooxml::LN_Value_ST_Border_seattle: return "seattle";
- case NS_ooxml::LN_Value_ST_Border_shadowedSquares: return "shadowedSquares";
- case NS_ooxml::LN_Value_ST_Border_sharksTeeth: return "sharksTeeth";
- case NS_ooxml::LN_Value_ST_Border_shorebirdTracks: return "shorebirdTracks";
- case NS_ooxml::LN_Value_ST_Border_skyrocket: return "skyrocket";
- case NS_ooxml::LN_Value_ST_Border_snowflakeFancy: return "snowflakeFancy";
- case NS_ooxml::LN_Value_ST_Border_snowflakes: return "snowflakes";
- case NS_ooxml::LN_Value_ST_Border_sombrero: return "sombrero";
- case NS_ooxml::LN_Value_ST_Border_southwest: return "southwest";
- case NS_ooxml::LN_Value_ST_Border_stars: return "stars";
- case NS_ooxml::LN_Value_ST_Border_starsTop: return "starsTop";
- case NS_ooxml::LN_Value_ST_Border_stars3d: return "stars3d";
- case NS_ooxml::LN_Value_ST_Border_starsBlack: return "starsBlack";
- case NS_ooxml::LN_Value_ST_Border_starsShadowed: return "starsShadowed";
- case NS_ooxml::LN_Value_ST_Border_sun: return "sun";
- case NS_ooxml::LN_Value_ST_Border_swirligig: return "swirligig";
- case NS_ooxml::LN_Value_ST_Border_tornPaper: return "tornPaper";
- case NS_ooxml::LN_Value_ST_Border_tornPaperBlack: return "tornPaperBlack";
- case NS_ooxml::LN_Value_ST_Border_trees: return "trees";
- case NS_ooxml::LN_Value_ST_Border_triangleParty: return "triangleParty";
- case NS_ooxml::LN_Value_ST_Border_triangles: return "triangles";
- case NS_ooxml::LN_Value_ST_Border_tribal1: return "tribal1";
- case NS_ooxml::LN_Value_ST_Border_tribal2: return "tribal2";
- case NS_ooxml::LN_Value_ST_Border_tribal3: return "tribal3";
- case NS_ooxml::LN_Value_ST_Border_tribal4: return "tribal4";
- case NS_ooxml::LN_Value_ST_Border_tribal5: return "tribal5";
- case NS_ooxml::LN_Value_ST_Border_tribal6: return "tribal6";
- case NS_ooxml::LN_Value_ST_Border_twistedLines1: return "twistedLines1";
- case NS_ooxml::LN_Value_ST_Border_twistedLines2: return "twistedLines2";
- case NS_ooxml::LN_Value_ST_Border_vine: return "vine";
- case NS_ooxml::LN_Value_ST_Border_waveline: return "waveline";
- case NS_ooxml::LN_Value_ST_Border_weavingAngles: return "weavingAngles";
- case NS_ooxml::LN_Value_ST_Border_weavingBraid: return "weavingBraid";
- case NS_ooxml::LN_Value_ST_Border_weavingRibbon: return "weavingRibbon";
- case NS_ooxml::LN_Value_ST_Border_weavingStrips: return "weavingStrips";
- case NS_ooxml::LN_Value_ST_Border_whiteFlowers: return "whiteFlowers";
- case NS_ooxml::LN_Value_ST_Border_woodwork: return "woodwork";
- case NS_ooxml::LN_Value_ST_Border_xIllusions: return "xIllusions";
- case NS_ooxml::LN_Value_ST_Border_zanyTriangles: return "zanyTriangles";
- case NS_ooxml::LN_Value_ST_Border_zigZag: return "zigZag";
- case NS_ooxml::LN_Value_ST_Border_zigZagStitch: return "zigZagStitch";
- default: break;
- }
- return OUString();
-}
-
-OUString TDefTableHandler::getThemeColorTypeString(sal_Int32 nType)
-{
- switch (nType)
- {
- case NS_ooxml::LN_Value_St_ThemeColor_dark1: return "dark1";
- case NS_ooxml::LN_Value_St_ThemeColor_light1: return "light1";
- case NS_ooxml::LN_Value_St_ThemeColor_dark2: return "dark2";
- case NS_ooxml::LN_Value_St_ThemeColor_light2: return "light2";
- case NS_ooxml::LN_Value_St_ThemeColor_accent1: return "accent1";
- case NS_ooxml::LN_Value_St_ThemeColor_accent2: return "accent2";
- case NS_ooxml::LN_Value_St_ThemeColor_accent3: return "accent3";
- case NS_ooxml::LN_Value_St_ThemeColor_accent4: return "accent4";
- case NS_ooxml::LN_Value_St_ThemeColor_accent5: return "accent5";
- case NS_ooxml::LN_Value_St_ThemeColor_accent6: return "accent6";
- case NS_ooxml::LN_Value_St_ThemeColor_hyperlink: return "hyperlink";
- case NS_ooxml::LN_Value_St_ThemeColor_followedHyperlink: return "followedHyperlink";
- case NS_ooxml::LN_Value_St_ThemeColor_none: return "none";
- case NS_ooxml::LN_Value_St_ThemeColor_background1: return "background1";
- case NS_ooxml::LN_Value_St_ThemeColor_text1: return "text1";
- case NS_ooxml::LN_Value_St_ThemeColor_background2: return "background2";
- case NS_ooxml::LN_Value_St_ThemeColor_text2: return "text2";
- default: break;
- }
- return OUString();
-}
-
-void TDefTableHandler::lcl_attribute(Id rName, Value & rVal)
-{
- sal_Int32 nIntValue = rVal.getInt();
- switch( rName )
- {
- case NS_ooxml::LN_CT_Border_sz:
- // width of a single line in 1/8 pt, max of 32 pt -> twip * 5 / 2.
- m_nLineWidth = nIntValue * 5 / 2;
- appendGrabBag("sz", OUString::number(nIntValue));
- break;
- case NS_ooxml::LN_CT_Border_val:
- m_nLineType = nIntValue;
- appendGrabBag("val", TDefTableHandler::getBorderTypeString(nIntValue));
- break;
- case NS_ooxml::LN_CT_Border_color:
- appendGrabBag("color", OUString::fromUtf8(msfilter::util::ConvertColor(Color(ColorTransparency,nIntValue))));
- m_nLineColor = nIntValue;
- break;
- case NS_ooxml::LN_CT_Border_space:
- appendGrabBag("space", OUString::number(nIntValue));
- break;
- case NS_ooxml::LN_CT_Border_shadow:
- //if 1 then line has shadow - unsupported
- case NS_ooxml::LN_CT_Border_frame:
- // ignored
- break;
- case NS_ooxml::LN_CT_Border_themeColor:
- appendGrabBag("themeColor", TDefTableHandler::getThemeColorTypeString(nIntValue));
- break;
- case NS_ooxml::LN_CT_Border_themeTint:
- case NS_ooxml::LN_CT_Border_themeShade:
- // ignored
- break;
- default:
- OSL_FAIL("unknown attribute");
- }
-}
-
-
-void TDefTableHandler::localResolve(Id rName, const writerfilter::Reference<Properties>::Pointer_t& pProperties)
-{
- if( !pProperties )
- return;
-
- m_nLineWidth = m_nLineType = m_nLineColor = 0;
- std::vector<beans::PropertyValue> aSavedGrabBag;
- if (!m_aInteropGrabBagName.isEmpty())
- {
- aSavedGrabBag = m_aInteropGrabBag;
- m_aInteropGrabBag.clear();
- }
- pProperties->resolve( *this );
- table::BorderLine2 aBorderLine;
- ConversionHelper::MakeBorderLine(m_nLineWidth, m_nLineType, m_nLineColor, aBorderLine, /*bIsOOXML=*/true);
- const bool rtl = false; // TODO
- switch( rName )
- {
- case NS_ooxml::LN_CT_TcBorders_top:
- m_aTopBorderLines.push_back(aBorderLine);
- if (!m_aInteropGrabBagName.isEmpty())
- aSavedGrabBag.push_back(getInteropGrabBag("top"));
- break;
- case NS_ooxml::LN_CT_TcBorders_start:
- if( rtl )
- m_aRightBorderLines.push_back(aBorderLine);
- else
- m_aLeftBorderLines.push_back(aBorderLine);
- if (!m_aInteropGrabBagName.isEmpty())
- aSavedGrabBag.push_back(getInteropGrabBag("start"));
- break;
- case NS_ooxml::LN_CT_TcBorders_left:
- m_aLeftBorderLines.push_back(aBorderLine);
- if (!m_aInteropGrabBagName.isEmpty())
- aSavedGrabBag.push_back(getInteropGrabBag("left"));
- break;
- case NS_ooxml::LN_CT_TcBorders_bottom:
- m_aBottomBorderLines.push_back(aBorderLine);
- if (!m_aInteropGrabBagName.isEmpty())
- aSavedGrabBag.push_back(getInteropGrabBag("bottom"));
- break;
- case NS_ooxml::LN_CT_TcBorders_end:
- if( rtl )
- m_aLeftBorderLines.push_back(aBorderLine);
- else
- m_aRightBorderLines.push_back(aBorderLine);
- if (!m_aInteropGrabBagName.isEmpty())
- aSavedGrabBag.push_back(getInteropGrabBag("end"));
- break;
- case NS_ooxml::LN_CT_TcBorders_right:
- m_aRightBorderLines.push_back(aBorderLine);
- if (!m_aInteropGrabBagName.isEmpty())
- aSavedGrabBag.push_back(getInteropGrabBag("right"));
- break;
- case NS_ooxml::LN_CT_TcBorders_insideH:
- m_aInsideHBorderLines.push_back(aBorderLine);
- if (!m_aInteropGrabBagName.isEmpty())
- aSavedGrabBag.push_back(getInteropGrabBag("insideH"));
- break;
- case NS_ooxml::LN_CT_TcBorders_insideV:
- m_aInsideVBorderLines.push_back(aBorderLine);
- if (!m_aInteropGrabBagName.isEmpty())
- aSavedGrabBag.push_back(getInteropGrabBag("insideV"));
- break;
- case NS_ooxml::LN_CT_TcBorders_tl2br:
- if (!m_aInteropGrabBagName.isEmpty())
- aSavedGrabBag.push_back(getInteropGrabBag("tl2br"));
- break;
- case NS_ooxml::LN_CT_TcBorders_tr2bl:
- if (!m_aInteropGrabBagName.isEmpty())
- aSavedGrabBag.push_back(getInteropGrabBag("tr2bl"));
- break;
- default:;
- }
- if (!m_aInteropGrabBagName.isEmpty())
- m_aInteropGrabBag = aSavedGrabBag;
-}
-
-
-void TDefTableHandler::lcl_sprm(Sprm & rSprm)
-{
- switch( rSprm.getId() )
- {
- case NS_ooxml::LN_CT_TcBorders_top:
- case NS_ooxml::LN_CT_TcBorders_left:
- case NS_ooxml::LN_CT_TcBorders_start:
- case NS_ooxml::LN_CT_TcBorders_bottom:
- case NS_ooxml::LN_CT_TcBorders_right:
- case NS_ooxml::LN_CT_TcBorders_end:
- case NS_ooxml::LN_CT_TcBorders_insideH:
- case NS_ooxml::LN_CT_TcBorders_insideV:
- case NS_ooxml::LN_CT_TcBorders_tl2br:
- case NS_ooxml::LN_CT_TcBorders_tr2bl:
- {
- writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
- localResolve( rSprm.getId(), pProperties );
- }
- break;
- default:;
- }
-}
-
-void TDefTableHandler::fillCellProperties( const ::tools::SvRef< TablePropertyMap >& pCellProperties ) const
-{
- if( !m_aTopBorderLines.empty() )
- pCellProperties->Insert( PROP_TOP_BORDER, uno::makeAny( m_aTopBorderLines[0] ) );
- if( !m_aLeftBorderLines.empty() )
- pCellProperties->Insert( PROP_LEFT_BORDER, uno::makeAny( m_aLeftBorderLines[0] ) );
- if( !m_aBottomBorderLines.empty() )
- pCellProperties->Insert( PROP_BOTTOM_BORDER, uno::makeAny( m_aBottomBorderLines[0] ) );
- if( !m_aRightBorderLines.empty() )
- pCellProperties->Insert( PROP_RIGHT_BORDER, uno::makeAny( m_aRightBorderLines[0] ) );
- if( !m_aInsideHBorderLines.empty() )
- pCellProperties->Insert( META_PROP_HORIZONTAL_BORDER, uno::makeAny( m_aInsideHBorderLines[0] ) );
- if( !m_aInsideVBorderLines.empty() )
- pCellProperties->Insert( META_PROP_VERTICAL_BORDER, uno::makeAny( m_aInsideVBorderLines[0] ) );
-}
-
-
-void TDefTableHandler::enableInteropGrabBag(const OUString& aName)
-{
- m_aInteropGrabBagName = aName;
-}
-
-beans::PropertyValue TDefTableHandler::getInteropGrabBag(const OUString& aName)
-{
- beans::PropertyValue aRet;
- if (aName.isEmpty())
- aRet.Name = m_aInteropGrabBagName;
- else
- aRet.Name = aName;
-
- aRet.Value <<= comphelper::containerToSequence(m_aInteropGrabBag);
- m_aInteropGrabBag.clear();
- return aRet;
-}
-
-void TDefTableHandler::appendGrabBag(const OUString& aKey, const OUString& aValue)
-{
- beans::PropertyValue aProperty;
- aProperty.Name = aKey;
- aProperty.Value <<= aValue;
- m_aInteropGrabBag.push_back(aProperty);
-}
-
-} //namespace writerfilter
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/TDefTableHandler.hxx b/writerfilter/source/dmapper/TDefTableHandler.hxx
deleted file mode 100644
index 3c9ca8daf73f..000000000000
--- a/writerfilter/source/dmapper/TDefTableHandler.hxx
+++ /dev/null
@@ -1,75 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * 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 .
- */
-#ifndef INCLUDED_WRITERFILTER_SOURCE_DMAPPER_TDEFTABLEHANDLER_HXX
-#define INCLUDED_WRITERFILTER_SOURCE_DMAPPER_TDEFTABLEHANDLER_HXX
-
-#include "LoggedResources.hxx"
-#include <vector>
-namespace com::sun::star{
- namespace table {
- struct BorderLine2;
- }
- namespace beans {
- struct PropertyValue;
- }
-}
-
-namespace writerfilter::dmapper
-{
-class PropertyMap;
-class TablePropertyMap;
-class TDefTableHandler : public LoggedProperties
-{
- std::vector<css::table::BorderLine2> m_aLeftBorderLines;
- std::vector<css::table::BorderLine2> m_aRightBorderLines;
- std::vector<css::table::BorderLine2> m_aTopBorderLines;
- std::vector<css::table::BorderLine2> m_aBottomBorderLines;
- std::vector<css::table::BorderLine2> m_aInsideHBorderLines;
- std::vector<css::table::BorderLine2> m_aInsideVBorderLines;
-
- //values of the current border
- sal_Int32 m_nLineWidth;
- sal_Int32 m_nLineType;
- sal_Int32 m_nLineColor;
-
- OUString m_aInteropGrabBagName;
- std::vector<css::beans::PropertyValue> m_aInteropGrabBag;
- void appendGrabBag(const OUString& aKey, const OUString& aValue);
-
- void localResolve(Id Name, const writerfilter::Reference<Properties>::Pointer_t& pProperties);
-
- // Properties
- virtual void lcl_attribute(Id Name, Value & val) override;
- virtual void lcl_sprm(Sprm & sprm) override;
-
-public:
- TDefTableHandler();
- virtual ~TDefTableHandler() override;
-
- void fillCellProperties( const ::tools::SvRef< TablePropertyMap >& pCellProperties) const;
- void enableInteropGrabBag(const OUString& aName);
- css::beans::PropertyValue getInteropGrabBag(const OUString& aName = OUString());
- static OUString getBorderTypeString(sal_Int32 nType);
- static OUString getThemeColorTypeString(sal_Int32 nType);
-};
-}
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/TableData.hxx b/writerfilter/source/dmapper/TableData.hxx
deleted file mode 100644
index 78ddf86ec049..000000000000
--- a/writerfilter/source/dmapper/TableData.hxx
+++ /dev/null
@@ -1,393 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * 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 .
- */
-
-#ifndef INCLUDED_WRITERFILTER_SOURCE_DMAPPER_TABLEDATA_HXX
-#define INCLUDED_WRITERFILTER_SOURCE_DMAPPER_TABLEDATA_HXX
-
-#include <com/sun/star/text/XTextRange.hpp>
-
-#include "PropertyMap.hxx"
-
-#include <vector>
-
-namespace writerfilter::dmapper
-{
-
-/**
- Class containing the data to describe a table cell.
- */
-class CellData final : public virtual SvRefBase
-{
- /**
- Handle to start of cell.
- */
- css::uno::Reference<css::text::XTextRange> mStart;
-
- /**
- Handle to end of cell.
- */
- css::uno::Reference<css::text::XTextRange> mEnd;
-
- /**
- Pointer to properties of cell.
- */
- TablePropertyMapPtr mpProps;
-
- bool mbOpen;
-
- sal_uInt32 m_nGridSpan; ///< number of grid columns in the parent table's table grid which this cell defines
-
-public:
- typedef tools::SvRef<CellData> Pointer_t;
-
- CellData(css::uno::Reference<css::text::XTextRange> const & start, TablePropertyMapPtr pProps)
- : mStart(start), mEnd(start), mpProps(pProps), mbOpen(true)
- , m_nGridSpan(1)
- {
- }
-
- /**
- Set the end handle of a cell.
-
- @param end the end handle of the cell
- */
- void setEnd(css::uno::Reference<css::text::XTextRange> const & end) { mEnd = end; mbOpen = false; }
-
- /**
- Adds properties to the cell.
-
- @param pProps the properties to add
- */
- void insertProperties(TablePropertyMapPtr pProps)
- {
- if( mpProps )
- mpProps->InsertProps(pProps.get());
- else
- mpProps = pProps;
- }
-
- /**
- Return start handle of the cell.
- */
- const css::uno::Reference<css::text::XTextRange>& getStart() const { return mStart; }
-
- /**
- Return end handle of the cell.
- */
- const css::uno::Reference<css::text::XTextRange>& getEnd() const { return mEnd; }
-
- /**
- Return properties of the cell.
- */
- const TablePropertyMapPtr& getProperties() const { return mpProps; }
-
- bool isOpen() const { return mbOpen; }
-
- sal_uInt32 getGridSpan() const { return m_nGridSpan; }
- void setGridSpan( sal_uInt32 nSpan ) { m_nGridSpan = nSpan; }
-};
-
-/**
- Class to handle data of a table row.
- */
-class RowData final : public virtual SvRefBase
-{
- typedef ::std::vector<CellData::Pointer_t> Cells;
-
- /**
- the cell data of the row
- */
- Cells mCells;
-
- /**
- the properties of the row
- */
- mutable TablePropertyMapPtr mpProperties;
-
- sal_uInt32 m_nGridBefore; ///< number of grid columns in the parent table's table grid which must be skipped before the contents of this table row are added to the parent table
- sal_uInt32 m_nGridAfter; ///< number of grid columns in the parent table's table grid which shall be left after the last cell in the table row
-
-public:
- typedef tools::SvRef<RowData> Pointer_t;
-
- RowData()
- : m_nGridBefore(0)
- , m_nGridAfter(0)
- {
- }
-
- RowData(const RowData& rRowData)
- : SvRefBase(), mCells(rRowData.mCells), mpProperties(rRowData.mpProperties)
- , m_nGridBefore(rRowData.m_nGridBefore)
- , m_nGridAfter(rRowData.m_nGridAfter)
- {
- }
-
- /**
- Add a cell to the row.
-
- @param start the start handle of the cell
- @param end the end handle of the cell
- @param pProps the properties of the cell
- @param bAddBefore true: add an empty cell at beginning of the row for gridBefore
- */
- void addCell(const css::uno::Reference<css::text::XTextRange>& start, TablePropertyMapPtr pProps, bool bAddBefore = false)
- {
- CellData::Pointer_t pCellData(new CellData(start, pProps));
- if (bAddBefore)
- {
- mCells.insert(mCells.begin(), pCellData);
- mCells[0]->setEnd(start);
- }
- else
- mCells.push_back(pCellData);
- }
-
- void endCell(const css::uno::Reference<css::text::XTextRange>& end)
- {
- if (mCells.size() > 0)
- mCells.back()->setEnd(end);
- }
-
- bool isCellOpen() const
- {
- return mCells.size() > 0 && mCells.back()->isOpen();
- }
-
- /**
- Add properties to the row.
-
- @param pProperties the properties to set
- */
- void insertProperties(TablePropertyMapPtr pProperties)
- {
- if( pProperties )
- {
- if( !mpProperties )
- mpProperties = pProperties;
- else
- mpProperties->InsertProps(pProperties.get());
- }
- }
-
- /**
- Add properties to the last cell of the row.
- */
- void insertCellProperties(TablePropertyMapPtr pProps)
- {
- if (!mCells.empty())
- mCells.back()->insertProperties(pProps);
- }
-
- /**
- Return number of cells in the row.
- */
- unsigned int getCellCount() const
- {
- return mCells.size();
- }
-
- /**
- Return start handle of a cell in the row.
-
- @param i index of the cell
- */
- const css::uno::Reference<css::text::XTextRange>& getCellStart(unsigned int i) const
- {
- return mCells[i]->getStart();
- }
-
- /**
- Return end handle of a cell in the row.
-
- @param i index of the cell
- */
- const css::uno::Reference<css::text::XTextRange>& getCellEnd(unsigned int i) const
- {
- return mCells[i]->getEnd();
- }
-
- /**
- Return the properties of a cell in the row.
-
- @param i index of the cell
- */
- TablePropertyMapPtr const & getCellProperties(unsigned int i) const
- {
- return mCells[i]->getProperties();
- }
-
- /**
- Return properties of the row.
- */
- const TablePropertyMapPtr& getProperties() const
- {
- return mpProperties;
- }
-
- sal_uInt32 getGridBefore() const { return m_nGridBefore; }
- void setGridBefore(sal_uInt32 nSkipGrids) { m_nGridBefore = nSkipGrids; }
- sal_uInt32 getGridAfter() const { return m_nGridAfter; }
- void setGridAfter(sal_uInt32 nSkipGrids) { m_nGridAfter = nSkipGrids; }
- sal_uInt32 getGridSpan(sal_uInt32 i) { return mCells[i]->getGridSpan(); }
- std::vector< sal_uInt32 > getGridSpans()
- {
- std::vector< sal_uInt32 > nRet;
- for (auto const& aCell: mCells)
- nRet.push_back(aCell->getGridSpan());
- return nRet;
- }
- void setCurrentGridSpan(sal_uInt32 nSpan, bool bFirstCell = false)
- {
- if ( mCells.size() )
- {
- if ( bFirstCell )
- mCells.front()->setGridSpan(nSpan);
- else
- mCells.back()->setGridSpan(nSpan);
- }
- }
-};
-
-/**
- Class that holds the data of a table.
- */
-class TableData : public virtual SvRefBase
-{
- typedef RowData::Pointer_t RowPointer_t;
- typedef ::std::vector<RowPointer_t> Rows;
-
- /**
- the data of the rows of the table
- */
- Rows mRows;
-
- /**
- pointer to the data of the current row (while building up the table data).
- */
- RowPointer_t mpRow;
-
- /**
- depth of the current table in a hierarchy of tables
- */
- unsigned int mnDepth;
-
- /**
- initialize mpRow
- */
- void newRow() { mpRow = RowPointer_t(new RowData()); }
-
-public:
- typedef tools::SvRef<TableData> Pointer_t;
-
- explicit TableData(unsigned int nDepth) : mnDepth(nDepth) { newRow(); }
-
- /**
- End the current row.
-
- Sets properties of the current row and pushes the row to the
- back of the rows currently contained in the table.
-
- @param pProperties properties of the row to be ended
- */
- void endRow(TablePropertyMapPtr pProperties)
- {
- mpRow->insertProperties(pProperties);
- mRows.push_back(mpRow);
- newRow();
- }
-
- /**
- Add a cell to the current row.
-
- @param start start handle of the cell
- @param end end handle of the cell
- @param pProps properties of the cell
- */
- void addCell(const css::uno::Reference<css::text::XTextRange>& start, TablePropertyMapPtr pProps)
- {
- mpRow->addCell(start, pProps);
- }
-
- /**
- End the current cell of the current row.
-
- @parm end end handle of the cell
- */
- void endCell(const css::uno::Reference<css::text::XTextRange>& end)
- {
- mpRow->endCell(end);
- }
-
- /**
- Return if the current cell of the current row is open.
- */
- bool isCellOpen() const
- {
- return mpRow->isCellOpen();
- }
-
- /**
- Insert properties to the current cell of the current row.
-
- @param pProps the properties to add
- */
- void insertCellProperties(TablePropertyMapPtr pProps)
- {
- mpRow->insertCellProperties(pProps);
- }
-
- /**
- Return number of rows in the table.
- */
- unsigned int getRowCount() const
- {
- return mRows.size();
- }
-
- /**
- Return depth of table in surrounding table hierarchy.
- */
- unsigned int getDepth() const
- {
- return mnDepth;
- }
-
- /**
- Return row data of a certain row.
-
- @param i index of the row
- */
- RowPointer_t const & getRow(unsigned int i) const
- {
- return mRows[i];
- }
-
- const RowPointer_t& getCurrentRow() const
- {
- return mpRow;
- }
-};
-
-}
-
-
-#endif // INCLUDED_WRITERFILTER_SOURCE_DMAPPER_RESOURCEMODEL_TABLEDATA_HXX
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/TableManager.cxx b/writerfilter/source/dmapper/TableManager.cxx
deleted file mode 100644
index ea71e887adb3..000000000000
--- a/writerfilter/source/dmapper/TableManager.cxx
+++ /dev/null
@@ -1,603 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * 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 .
- */
-
-#include "TableManager.hxx"
-#include <ooxml/resourceids.hxx>
-#include "TagLogger.hxx"
-#include "DomainMapperTableHandler.hxx"
-#include "DomainMapper_Impl.hxx"
-#include "util.hxx"
-
-#include <tools/diagnose_ex.h>
-
-namespace writerfilter::dmapper
-{
-void TableManager::clearData() {}
-
-void TableManager::openCell(const css::uno::Reference<css::text::XTextRange>& rHandle,
- const TablePropertyMapPtr& pProps)
-{
-#ifdef DBG_UTIL
- TagLogger::getInstance().startElement("tablemanager.openCell");
- TagLogger::getInstance().chars(XTextRangeToString(rHandle));
- TagLogger::getInstance().endElement();
-#endif
-
- if (!mTableDataStack.empty())
- {
- TableData::Pointer_t pTableData = mTableDataStack.top();
-
- pTableData->addCell(rHandle, pProps);
- }
-}
-
-bool TableManager::isIgnore() const { return isRowEnd(); }
-
-sal_uInt32 TableManager::getGridBefore(sal_uInt32 nRow)
-{
- assert(isInTable());
- if (nRow >= mTableDataStack.top()->getRowCount())
- return 0;
- return mTableDataStack.top()->getRow(nRow)->getGridBefore();
-}
-
-sal_uInt32 TableManager::getCurrentGridBefore()
-{
- return mTableDataStack.top()->getCurrentRow()->getGridBefore();
-}
-
-void TableManager::setCurrentGridBefore(sal_uInt32 nSkipGrids)
-{
- mTableDataStack.top()->getCurrentRow()->setGridBefore(nSkipGrids);
-}
-
-sal_uInt32 TableManager::getGridAfter(sal_uInt32 nRow)
-{
- assert(isInTable());
- if (nRow >= mTableDataStack.top()->getRowCount())
- return 0;
- return mTableDataStack.top()->getRow(nRow)->getGridAfter();
-}
-
-void TableManager::setCurrentGridAfter(sal_uInt32 nSkipGrids)
-{
- assert(isInTable());
- mTableDataStack.top()->getCurrentRow()->setGridAfter(nSkipGrids);
-}
-
-std::vector<sal_uInt32> TableManager::getCurrentGridSpans()
-{
- return mTableDataStack.top()->getCurrentRow()->getGridSpans();
-}
-
-void TableManager::setCurrentGridSpan(sal_uInt32 nGridSpan, bool bFirstCell)
-{
- mTableDataStack.top()->getCurrentRow()->setCurrentGridSpan(nGridSpan, bFirstCell);
-}
-
-sal_uInt32 TableManager::findColumn(const sal_uInt32 nRow, const sal_uInt32 nCell)
-{
- RowData::Pointer_t pRow = mTableDataStack.top()->getRow(nRow);
- if (!pRow || nCell < pRow->getGridBefore()
- || nCell >= pRow->getCellCount() - pRow->getGridAfter())
- {
- return SAL_MAX_UINT32;
- }
-
- // The gridSpans provide a one-based index, so add up all the spans of the PREVIOUS columns,
- // and that result will provide the first possible zero-based number for the desired column.
- sal_uInt32 nColumn = 0;
- for (sal_uInt32 n = 0; n < nCell; ++n)
- nColumn += pRow->getGridSpan(n);
- return nColumn;
-}
-
-sal_uInt32 TableManager::findColumnCell(const sal_uInt32 nRow, const sal_uInt32 nCol)
-{
- RowData::Pointer_t pRow = mTableDataStack.top()->getRow(nRow);
- if (!pRow || nCol < pRow->getGridBefore())
- return SAL_MAX_UINT32;
-
- sal_uInt32 nCell = 0;
- sal_uInt32 nGrids = 0;
- // The gridSpans give us a one-based index, but requested column is zero-based - so keep that in mind.
- const sal_uInt32 nMaxCell = pRow->getCellCount() - pRow->getGridAfter() - 1;
- for (const auto& rSpan : pRow->getGridSpans())
- {
- nGrids += rSpan;
- if (nCol < nGrids)
- return nCell;
-
- ++nCell;
- if (nCell > nMaxCell)
- break;
- }
- return SAL_MAX_UINT32; // must be in gridAfter or invalid column request
-}
-
-void TableManager::endOfRowAction() {}
-
-void TableManager::endOfCellAction() {}
-
-void TableManager::insertTableProps(const TablePropertyMapPtr& pProps)
-{
-#ifdef DBG_UTIL
- TagLogger::getInstance().startElement("tablemanager.insertTableProps");
-#endif
-
- if (getTableProps() && getTableProps() != pProps)
- getTableProps()->InsertProps(pProps.get());
- else
- mState.setTableProps(pProps);
-
-#ifdef DBG_UTIL
- TagLogger::getInstance().endElement();
-#endif
-}
-
-void TableManager::insertRowProps(const TablePropertyMapPtr& pProps)
-{
-#ifdef DBG_UTIL
- TagLogger::getInstance().startElement("tablemanager.insertRowProps");
-#endif
-
- if (getRowProps())
- getRowProps()->InsertProps(pProps.get());
- else
- mState.setRowProps(pProps);
-
-#ifdef DBG_UTIL
- TagLogger::getInstance().endElement();
-#endif
-}
-
-void TableManager::cellProps(const TablePropertyMapPtr& pProps)
-{
-#ifdef DBG_UTIL
- TagLogger::getInstance().startElement("tablemanager.cellProps");
-#endif
-
- if (getCellProps())
- getCellProps()->InsertProps(pProps.get());
- else
- mState.setCellProps(pProps);
-
-#ifdef DBG_UTIL
- TagLogger::getInstance().endElement();
-#endif
-}
-
-void TableManager::tableExceptionProps(const TablePropertyMapPtr& pProps)
-{
-#ifdef DBG_UTIL
- TagLogger::getInstance().startElement("tablemanager.tableExceptionProps");
-#endif
-
- if (getTableExceptionProps())
- getTableExceptionProps()->InsertProps(pProps.get());
- else
- mState.setTableExceptionProps(pProps);
-
-#ifdef DBG_UTIL
- TagLogger::getInstance().endElement();
-#endif
-}
-
-void TableManager::utext(const sal_uInt8* data, std::size_t len)
-{
- // optimization: cell/row end characters are the last characters in a run
-
- if (len > 0)
- {
- sal_Unicode nChar = data[(len - 1) * 2] + (data[(len - 1) * 2 + 1] << 8);
- if (nChar == 0x7)
- handle0x7();
- }
-}
-
-void TableManager::text(const sal_uInt8* data, std::size_t len)
-{
- // optimization: cell/row end characters are the last characters in a run
- if (len > 0 && data[len - 1] == 0x7)
- handle0x7();
-}
-
-void TableManager::handle0x7()
-{
-#ifdef DBG_UTIL
- TagLogger::getInstance().startElement("tablemanager.handle0x7");
-#endif
-
- if (mnTableDepthNew < 1)
- mnTableDepthNew = 1;
-
- if (isInCell())
- endCell();
- else
- endRow();
-
-#ifdef DBG_UTIL
- TagLogger::getInstance().endElement();
-#endif
-}
-
-bool TableManager::sprm(Sprm& rSprm)
-{
- bool bRet = true;
- switch (rSprm.getId())
- {
- case NS_ooxml::LN_tblDepth:
- {
- Value::Pointer_t pValue = rSprm.getValue();
-
- cellDepth(pValue->getInt());
- }
- break;
- case NS_ooxml::LN_inTbl:
- inCell();
- break;
- case NS_ooxml::LN_tblCell:
- endCell();
- break;
- case NS_ooxml::LN_tblRow:
- endRow();
- break;
- default:
- bRet = false;
- }
- return bRet;
-}
-
-void TableManager::closeCell(const css::uno::Reference<css::text::XTextRange>& rHandle)
-{
-#ifdef DBG_UTIL
- TagLogger::getInstance().startElement("tablemanager.closeCell");
- TagLogger::getInstance().chars(XTextRangeToString(rHandle));
- TagLogger::getInstance().endElement();
-#endif
-
- if (!mTableDataStack.empty())
- {
- TableData::Pointer_t pTableData = mTableDataStack.top();
-
- pTableData->endCell(rHandle);
-
- if (mpTableDataHandler)
- mpTableDataHandler->getDomainMapperImpl().ClearPreviousParagraph();
- }
-}
-
-void TableManager::ensureOpenCell(const TablePropertyMapPtr& pProps)
-{
-#ifdef DBG_UTIL
- TagLogger::getInstance().startElement("tablemanager.ensureOpenCell");
-#endif
-
- if (!mTableDataStack.empty())
- {
- TableData::Pointer_t pTableData = mTableDataStack.top();
-
- if (pTableData != nullptr)
- {
- if (!pTableData->isCellOpen())
- openCell(getHandle(), pProps);
- else
- pTableData->insertCellProperties(pProps);
- }
- }
-#ifdef DBG_UTIL
- TagLogger::getInstance().endElement();
-#endif
-}
-
-void TableManager::endParagraphGroup()
-{
- sal_Int32 nTableDepthDifference = mnTableDepthNew - mnTableDepth;
-
- TablePropertyMapPtr pEmptyProps;
-
- while (nTableDepthDifference > 0)
- {
- ensureOpenCell(pEmptyProps);
- startLevel();
-
- --nTableDepthDifference;
- }
- while (nTableDepthDifference < 0)
- {
- endLevel();
-
- ++nTableDepthDifference;
- }
-
- mnTableDepth = mnTableDepthNew;
-
- if (mnTableDepth <= 0)
- return;
-
- if (isRowEnd())
- {
- endOfRowAction();
- mTableDataStack.top()->endRow(getRowProps());
- mState.resetRowProps();
- }
-
- else if (isInCell())
- {
- ensureOpenCell(getCellProps());
-
- if (mState.isCellEnd())
- {
- endOfCellAction();
- closeCell(getHandle());
- }
- }
- mState.resetCellProps();
-}
-
-void TableManager::startParagraphGroup()
-{
- mState.resetCellSpecifics();
- mnTableDepthNew = 0;
-}
-
-void TableManager::resolveCurrentTable()
-{
-#ifdef DBG_UTIL
- TagLogger::getInstance().startElement("tablemanager.resolveCurrentTable");
-#endif
-
- if (mpTableDataHandler != nullptr)
- {
- try
- {
- TableData::Pointer_t pTableData = mTableDataStack.top();
-
- unsigned int nRows = pTableData->getRowCount();
-
- mpTableDataHandler->startTable(getTableProps());
-
- for (unsigned int nRow = 0; nRow < nRows; ++nRow)
- {
- RowData::Pointer_t pRowData = pTableData->getRow(nRow);
-
- unsigned int nCells = pRowData->getCellCount();
-
- mpTableDataHandler->startRow(pRowData->getProperties());
-
- for (unsigned int nCell = 0; nCell < nCells; ++nCell)
- {
- mpTableDataHandler->startCell(pRowData->getCellStart(nCell),
- pRowData->getCellProperties(nCell));
-
- mpTableDataHandler->endCell(pRowData->getCellEnd(nCell));
- }
-
- mpTableDataHandler->endRow();
- }
-
- mpTableDataHandler->endTable(mTableDataStack.size() - 1, m_bTableStartsAtCellStart);
- }
- catch (css::uno::Exception const&)
- {
- TOOLS_WARN_EXCEPTION("writerfilter", "resolving of current table failed");
- }
- }
- mState.resetTableProps();
- clearData();
-
-#ifdef DBG_UTIL
- TagLogger::getInstance().endElement();
-#endif
-}
-
-void TableManager::endLevel()
-{
- if (mpTableDataHandler != nullptr)
- resolveCurrentTable();
-
- // Store the unfinished row as it will be used for the next table
- if (mbKeepUnfinishedRow)
- mpUnfinishedRow = mTableDataStack.top()->getCurrentRow();
- mState.endLevel();
- mTableDataStack.pop();
-
-#ifdef DBG_UTIL
- TableData::Pointer_t pTableData;
-
- if (!mTableDataStack.empty())
- pTableData = mTableDataStack.top();
-
- TagLogger::getInstance().startElement("tablemanager.endLevel");
- TagLogger::getInstance().attribute("level", mTableDataStack.size());
-
- if (pTableData != nullptr)
- TagLogger::getInstance().attribute("openCell", pTableData->isCellOpen() ? "yes" : "no");
-
- TagLogger::getInstance().endElement();
-#endif
-}
-
-void TableManager::startLevel()
-{
-#ifdef DBG_UTIL
- TableData::Pointer_t pTableData;
-
- if (!mTableDataStack.empty())
- pTableData = mTableDataStack.top();
-
- TagLogger::getInstance().startElement("tablemanager.startLevel");
- TagLogger::getInstance().attribute("level", mTableDataStack.size());
-
- if (pTableData != nullptr)
- TagLogger::getInstance().attribute("openCell", pTableData->isCellOpen() ? "yes" : "no");
-
- TagLogger::getInstance().endElement();
-#endif
-
- TableData::Pointer_t pTableData2(new TableData(mTableDataStack.size()));
-
- // If we have an unfinished row stored here, then push it to the new TableData
- if (mpUnfinishedRow)
- {
- for (unsigned int i = 0; i < mpUnfinishedRow->getCellCount(); ++i)
- {
- pTableData2->addCell(mpUnfinishedRow->getCellStart(i),
- mpUnfinishedRow->getCellProperties(i));
- pTableData2->endCell(mpUnfinishedRow->getCellEnd(i));
- pTableData2->getCurrentRow()->setCurrentGridSpan(mpUnfinishedRow->getGridSpan(i));
- }
- pTableData2->getCurrentRow()->setGridBefore(mpUnfinishedRow->getGridBefore());
- pTableData2->getCurrentRow()->setGridAfter(mpUnfinishedRow->getGridAfter());
- mpUnfinishedRow.clear();
- }
-
- mTableDataStack.push(pTableData2);
- mState.startLevel();
-}
-
-bool TableManager::isInTable()
-{
- bool bInTable = false;
- if (!mTableDataStack.empty())
- bInTable = mTableDataStack.top()->getDepth() > 0;
- return bInTable;
-}
-
-void TableManager::handle(const css::uno::Reference<css::text::XTextRange>& rHandle)
-{
-#ifdef DBG_UTIL
- TagLogger::getInstance().startElement("tablemanager.handle");
- TagLogger::getInstance().chars(XTextRangeToString(rHandle));
- TagLogger::getInstance().endElement();
-#endif
-
- setHandle(rHandle);
-}
-
-void TableManager::setHandler(const tools::SvRef<DomainMapperTableHandler>& pTableDataHandler)
-{
- mpTableDataHandler = pTableDataHandler;
-}
-
-void TableManager::endRow()
-{
-#ifdef DBG_UTIL
- TagLogger::getInstance().element("tablemanager.endRow");
-#endif
- TableData::Pointer_t pTableData = mTableDataStack.top();
-
- // Add borderless w:gridBefore cell(s) to the row
- sal_uInt32 nGridBefore = getCurrentGridBefore();
- if (pTableData && nGridBefore > 0 && pTableData->getCurrentRow()->getCellCount() > 0)
- {
- const css::uno::Reference<css::text::XTextRange>& xRowStart
- = pTableData->getCurrentRow()->getCellStart(0);
- if (xRowStart.is())
- {
- try
- {
- // valid TextRange for table creation (not a nested table)?
- xRowStart->getText()->createTextCursorByRange(xRowStart);
-
- for (unsigned int i = 0; i < nGridBefore; ++i)
- {
- css::table::BorderLine2 aBorderLine;
- aBorderLine.Color = 0;
- aBorderLine.InnerLineWidth = 0;
- aBorderLine.OuterLineWidth = 0;
- TablePropertyMapPtr pCellProperties(new TablePropertyMap);
- pCellProperties->Insert(PROP_TOP_BORDER, css::uno::makeAny(aBorderLine));
- pCellProperties->Insert(PROP_LEFT_BORDER, css::uno::makeAny(aBorderLine));
- pCellProperties->Insert(PROP_BOTTOM_BORDER, css::uno::makeAny(aBorderLine));
- pCellProperties->Insert(PROP_RIGHT_BORDER, css::uno::makeAny(aBorderLine));
- pTableData->getCurrentRow()->addCell(xRowStart, pCellProperties,
- /*bAddBefore=*/true);
- }
- }
- catch (css::uno::Exception const&)
- {
- // don't add gridBefore cells in not valid TextRange
- setCurrentGridBefore(0);
- setCurrentGridSpan(getCurrentGridSpans().front() + nGridBefore,
- /*bFirstCell=*/true);
- }
- }
- }
-
- setRowEnd(true);
-}
-
-void TableManager::endCell()
-{
-#ifdef DBG_UTIL
- TagLogger::getInstance().element("tablemanager.endCell");
-#endif
-
- setCellEnd(true);
-}
-
-void TableManager::inCell()
-{
-#ifdef DBG_UTIL
- TagLogger::getInstance().element("tablemanager.inCell");
-#endif
- setInCell(true);
-
- if (mnTableDepthNew < 1)
- mnTableDepthNew = 1;
-}
-
-void TableManager::cellDepth(sal_uInt32 nDepth)
-{
-#ifdef DBG_UTIL
- TagLogger::getInstance().startElement("tablemanager.cellDepth");
- TagLogger::getInstance().attribute("depth", nDepth);
- TagLogger::getInstance().endElement();
-#endif
-
- mnTableDepthNew = nDepth;
-}
-
-void TableManager::setTableStartsAtCellStart(bool bTableStartsAtCellStart)
-{
- m_bTableStartsAtCellStart = bTableStartsAtCellStart;
-}
-
-void TableManager::setCellLastParaAfterAutospacing(bool bIsAfterAutospacing)
-{
- m_bCellLastParaAfterAutospacing = bIsAfterAutospacing;
-}
-
-TableManager::TableManager()
- : mnTableDepthNew(0)
- , mnTableDepth(0)
- , mbKeepUnfinishedRow(false)
- , m_bTableStartsAtCellStart(false)
-{
- setRowEnd(false);
- setInCell(false);
- setCellEnd(false);
- m_bCellLastParaAfterAutospacing = false;
-}
-
-TableManager::~TableManager() = default;
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/TableManager.hxx b/writerfilter/source/dmapper/TableManager.hxx
deleted file mode 100644
index 2dcf679e135f..000000000000
--- a/writerfilter/source/dmapper/TableManager.hxx
+++ /dev/null
@@ -1,524 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * 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 .
- */
-
-#ifndef INCLUDED_WRITERFILTER_SOURCE_DMAPPER_TABLEMANAGER_HXX
-#define INCLUDED_WRITERFILTER_SOURCE_DMAPPER_TABLEMANAGER_HXX
-
-#include <memory>
-#include <stack>
-
-#include "PropertyMap.hxx"
-#include "TableData.hxx"
-
-#include <dmapper/resourcemodel.hxx>
-
-namespace writerfilter::dmapper
-{
-
-class DomainMapperTableHandler;
-
-/**
- The table manager.
-
- This class gets forwarded events from the tokenizer. It gathers the
- table data and after ending the table generates events for the
- table structure. The events have to be handles by a TableDataHandler.
-
- */
-class TableManager : public virtual SvRefBase
-{
- class TableManagerState final
- {
- /**
- properties of the current cell
- */
- TablePropertyMapPtr mpCellProps;
-
- /**
- properties of the current row
- */
- TablePropertyMapPtr mpRowProps;
-
- /**
- table exception properties of the current row
- */
- TablePropertyMapPtr mpTableExceptionProps;
-
- /**
- properties of the current table
- */
- std::stack<TablePropertyMapPtr> mTableProps;
-
- /**
- true if at the end of a row
- */
- bool mbRowEnd;
-
- /**
- true when in a cell
- */
- bool mbInCell;
-
- /**
- true when at the end of a cell
- */
- bool mbCellEnd;
-
- public:
- /**
- Constructor
- */
- TableManagerState()
- : mbRowEnd(false), mbInCell(false), mbCellEnd(false)
- {
- }
-
- void startLevel()
- {
- TablePropertyMapPtr pProps;
- mTableProps.push(pProps);
- }
-
- void endLevel()
- {
- mTableProps.pop();
- }
-
- /**
- Reset to initial state at beginning of row.
- */
- void resetCellSpecifics()
- {
- mbRowEnd = false;
- mbInCell = false;
- mbCellEnd = false;
- }
-
- void resetCellProps()
- {
- mpCellProps = getTableExceptionProps();
- }
-
- void setCellProps(TablePropertyMapPtr pProps)
- {
- mpCellProps = pProps;
- }
-
- const TablePropertyMapPtr& getCellProps() const
- {
- return mpCellProps;
- }
-
- void resetRowProps()
- {
- // reset also table exception and
- // its copy set by the previous resetCellProps()
- mpTableExceptionProps.clear();
- resetCellProps();
- mpRowProps.clear();
- }
-
- void setRowProps(TablePropertyMapPtr pProps)
- {
- mpRowProps = pProps;
- }
-
- const TablePropertyMapPtr& getRowProps() const
- {
- return mpRowProps;
- }
-
- void setTableExceptionProps(TablePropertyMapPtr pProps)
- {
- mpTableExceptionProps = pProps;
- }
-
- const TablePropertyMapPtr& getTableExceptionProps() const
- {
- return mpTableExceptionProps;
- }
-
- void resetTableProps()
- {
- if (mTableProps.size() > 0)
- mTableProps.top().clear();
- }
-
- void setTableProps(TablePropertyMapPtr pProps)
- {
- if (mTableProps.size() > 0)
- mTableProps.top() = pProps;
- }
-
- TablePropertyMapPtr getTableProps()
- {
- TablePropertyMapPtr pResult;
-
- if (mTableProps.size() > 0)
- pResult = mTableProps.top();
-
- return pResult;
- }
-
- void setInCell(bool bInCell)
- {
- mbInCell = bInCell;
- }
-
- bool isInCell() const
- {
- return mbInCell;
- }
-
- void setCellEnd(bool bCellEnd)
- {
- mbCellEnd = bCellEnd;
- }
-
- bool isCellEnd() const
- {
- return mbCellEnd;
- }
-
- void setRowEnd(bool bRowEnd)
- {
- mbRowEnd = bRowEnd;
- }
-
- bool isRowEnd() const
- {
- return mbRowEnd;
- }
- };
-
- /**
- handle for the current position in document
- */
- css::uno::Reference<css::text::XTextRange> mCurHandle;
-
- TableManagerState mState;
-
-protected:
- TablePropertyMapPtr const & getCellProps() const
- {
- return mState.getCellProps();
- }
-
-public:
- TablePropertyMapPtr const & getRowProps() const
- {
- return mState.getRowProps();
- }
-
- TablePropertyMapPtr const & getTableExceptionProps() const
- {
- return mState.getTableExceptionProps();
- }
-
-protected:
- void setInCell(bool bInCell)
- {
- mState.setInCell(bInCell);
- }
-
- bool isInCell() const
- {
- return mState.isInCell();
- }
-
- void setCellEnd(bool bCellEnd)
- {
- mState.setCellEnd(bCellEnd);
- }
-
- void setRowEnd(bool bRowEnd)
- {
- mState.setRowEnd(bRowEnd);
- }
-
- bool isRowEnd() const
- {
- return mState.isRowEnd();
- }
-
- TablePropertyMapPtr getTableProps()
- {
- return mState.getTableProps();
- }
-
- const css::uno::Reference<css::text::XTextRange>& getHandle() const
- {
- return mCurHandle;
- }
-
- void setHandle(const css::uno::Reference<css::text::XTextRange>& rHandle)
- {
- mCurHandle = rHandle;
- }
-
-private:
- typedef tools::SvRef< css::uno::Reference<css::text::XTextRange> > T_p;
-
- /**
- depth of the current cell
- */
- sal_uInt32 mnTableDepthNew;
-
- /**
- depth of the previous cell
- */
- sal_uInt32 mnTableDepth;
-
- /**
- stack of table data
-
- for each level of nested tables there is one frame in the stack
- */
- std::stack<TableData::Pointer_t> mTableDataStack;
- RowData::Pointer_t mpUnfinishedRow;
- bool mbKeepUnfinishedRow;
- /// If this is a nested table, does it start at cell start?
- bool m_bTableStartsAtCellStart;
-
- bool m_bCellLastParaAfterAutospacing;
-
- /**
- handler for resolveCurrentTable
- */
- tools::SvRef<DomainMapperTableHandler> mpTableDataHandler;
-
- /**
- Set flag which indicates the current handle is in a cell.
- */
- void inCell();
-
- /**
- Set flag which indicate the current handle is at the end of a cell.
- */
- void endCell();
-
- /**
- Set the table depth of the current cell.
-
- @param nDepth the cell depth
- */
- void cellDepth(sal_uInt32 nDepth);
-
- /**
- Set flag indication the current handle is at the end of a row.
- */
- void endRow();
-
- /**
- Resolve the current table to the TableDataHandler.
- */
- void resolveCurrentTable();
-
- /**
- Open a cell at current level.
- */
-
- void openCell(const css::uno::Reference<css::text::XTextRange>& rHandle, const TablePropertyMapPtr& pProps);
-
- /**
- Close a cell at current level.
- */
- void closeCell(const css::uno::Reference<css::text::XTextRange>& rHandle);
-
- /**
- Ensure a cell is open at the current level.
- */
- void ensureOpenCell(const TablePropertyMapPtr& pProps);
-
-protected:
- /**
- Return the current table difference, i.e. 1 if we are in the first cell of a new table, etc.
- */
- sal_uInt32 getTableDepthDifference() const { return mnTableDepthNew - mnTableDepth; }
-
- sal_uInt32 getTableDepth() const { return mnTableDepthNew; }
-
- /**
- Action to be carried out at the end of the last paragraph of a
- cell.
- */
- virtual void endOfCellAction();
-
- /**
- Action to be carried out at the end of the "table row"
- paragraph.
- */
- virtual void endOfRowAction();
- /** let the derived class clear their table related data
- */
- virtual void clearData();
-
- /** Should we keep the unfinished row in endLevel to initialize the table
- data in the following startLevel.
- */
- void setKeepUnfinishedRow(bool bKeep)
- {
- mbKeepUnfinishedRow = bKeep;
- }
-
-
-public:
- TableManager();
- ~TableManager();
-
- /**
- Set handler for resolveCurrentTable.
-
- @param pTableDataHandler the handler
- */
- void setHandler(const tools::SvRef<DomainMapperTableHandler>& pTableDataHandler);
-
- /**
- Set the current handle.
-
- @param rHandle the handle
- */
- void handle(const css::uno::Reference<css::text::XTextRange>& rHandle);
-
- /**
- Start a new table level.
-
- A new context is pushed onto the table data stack,
- */
- virtual void startLevel();
-
- /**
- End a table level.
-
- The current table is resolved and the context is popped from
- the stack.
- */
- virtual void endLevel();
-
- /**
- * Signal that the next paragraph definitely won't be part of any table.
- */
- void endTable()
- {
- setRowEnd(false);
- }
-
- /**
- Tells whether a table has been started or not
- */
- bool isInTable();
-
- /**
- Handle the start of a paragraph group.
- */
- void startParagraphGroup();
-
- /**
- Handle the end of a paragraph group.
- */
- void endParagraphGroup();
-
- /**
- Handle an SPRM at current handle.
-
- @param rSprm the SPRM
- */
- virtual bool sprm(Sprm & rSprm);
-
- /**
- Handle occurrence of character 0x7.
- */
- void handle0x7();
-
- /**
- Handle 8 bit text at current handle.
-
- @param data array of characters
- @param len number of characters to handle
- */
- void text(const sal_uInt8 * data, size_t len);
-
- /**
- Handle 16 bit text at current handle.
-
- @param data array of characters
- @param len number of characters to handle
- */
- void utext(const sal_uInt8 * data, size_t len);
-
- /**
- Handle properties of the current cell.
-
- @param pProps the properties
- */
- virtual void cellProps(const TablePropertyMapPtr& pProps);
-
- /**
- Handle properties of the current row.
-
- @param pProps the properties
- */
- virtual void insertRowProps(const TablePropertyMapPtr& pProps);
-
- /**
- Handle table exception properties of the current row.
-
- @param pProps the properties
- */
- virtual void tableExceptionProps(const TablePropertyMapPtr& pProps);
-
- /**
- Handle properties of the current table.
-
- @param pProps the properties
- */
- virtual void insertTableProps(const TablePropertyMapPtr& pProps);
-
- /**
- Return if table manager has detected paragraph to ignore.
-
- If this function returns true the current paragraph contains
- only control information, e.g. end of row.
- */
- bool isIgnore() const;
-
- sal_uInt32 getGridBefore(sal_uInt32 nRow);
- sal_uInt32 getCurrentGridBefore();
- void setCurrentGridBefore( sal_uInt32 nSkipGrids );
- sal_uInt32 getGridAfter(sal_uInt32 nRow);
- void setCurrentGridAfter( sal_uInt32 nSkipGrids );
- std::vector<sal_uInt32> getCurrentGridSpans();
- void setCurrentGridSpan( sal_uInt32 nGridSpan, bool bFirstCell = false );
- /// Given a zero-based row/cell, return the zero-based grid it belongs to, or SAL_MAX_UINT16 for invalid.
- sal_uInt32 findColumn( const sal_uInt32 nRow, const sal_uInt32 nCell );
- /// Given a zero-based row/col, return the zero-based cell describing that grid, or SAL_MAX_UINT16 for invalid.
- sal_uInt32 findColumnCell( const sal_uInt32 nRow, const sal_uInt32 nCol );
-
- void setTableStartsAtCellStart(bool bTableStartsAtCellStart);
- void setCellLastParaAfterAutospacing(bool bIsAfterAutospacing);
- bool isCellLastParaAfterAutospacing() const {return m_bCellLastParaAfterAutospacing;}
-};
-
-}
-
-
-
-#endif // INCLUDED_WRITERFILTER_INC_RESOURCEMODEL_TABLEMANAGER_HXX
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/TablePositionHandler.cxx b/writerfilter/source/dmapper/TablePositionHandler.cxx
deleted file mode 100644
index 5eea4a00046e..000000000000
--- a/writerfilter/source/dmapper/TablePositionHandler.cxx
+++ /dev/null
@@ -1,154 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-#include "TablePositionHandler.hxx"
-#include "ConversionHelper.hxx"
-#include "TagLogger.hxx"
-#include <ooxml/resourceids.hxx>
-#include <com/sun/star/beans/PropertyValue.hpp>
-#include <com/sun/star/text/HoriOrientation.hpp>
-#include <com/sun/star/text/VertOrientation.hpp>
-#include <com/sun/star/text/RelOrientation.hpp>
-#include <comphelper/sequenceashashmap.hxx>
-
-namespace writerfilter::dmapper
-{
-using namespace ::com::sun::star;
-
-TablePositionHandler::TablePositionHandler()
- : LoggedProperties("TablePositionHandler")
-{
-}
-
-TablePositionHandler::~TablePositionHandler() = default;
-
-void TablePositionHandler::lcl_attribute(Id nId, Value& rVal)
-{
- switch (nId)
- {
- case NS_ooxml::LN_CT_TblPPr_vertAnchor:
- m_aVertAnchor = rVal.getString();
- break;
- case NS_ooxml::LN_CT_TblPPr_tblpYSpec:
- m_aYSpec = rVal.getString();
- break;
- case NS_ooxml::LN_CT_TblPPr_horzAnchor:
- m_aHorzAnchor = rVal.getString();
- break;
- case NS_ooxml::LN_CT_TblPPr_tblpXSpec:
- m_aXSpec = rVal.getString();
- break;
- case NS_ooxml::LN_CT_TblPPr_tblpY:
- m_nY = rVal.getInt();
- break;
- case NS_ooxml::LN_CT_TblPPr_tblpX:
- m_nX = rVal.getInt();
- break;
- case NS_ooxml::LN_CT_TblPPr_leftFromText:
- m_nLeftFromText = rVal.getInt();
- break;
- case NS_ooxml::LN_CT_TblPPr_rightFromText:
- m_nRightFromText = rVal.getInt();
- break;
- case NS_ooxml::LN_CT_TblPPr_topFromText:
- m_nTopFromText = rVal.getInt();
- break;
- case NS_ooxml::LN_CT_TblPPr_bottomFromText:
- m_nBottomFromText = rVal.getInt();
- break;
- default:
-#ifdef DBG_UTIL
- TagLogger::getInstance().element("unhandled");
-#endif
- break;
- }
-}
-
-void TablePositionHandler::lcl_sprm(Sprm& /*rSprm*/) {}
-
-uno::Sequence<beans::PropertyValue> TablePositionHandler::getTablePosition() const
-{
- comphelper::SequenceAsHashMap aFrameProperties;
-
- aFrameProperties["LeftBorderDistance"] <<= sal_Int32(0);
- aFrameProperties["RightBorderDistance"] <<= sal_Int32(0);
- aFrameProperties["TopBorderDistance"] <<= sal_Int32(0);
- aFrameProperties["BottomBorderDistance"] <<= sal_Int32(0);
-
- aFrameProperties["LeftMargin"] <<= ConversionHelper::convertTwipToMM100(m_nLeftFromText);
- aFrameProperties["RightMargin"] <<= ConversionHelper::convertTwipToMM100(m_nRightFromText);
- aFrameProperties["TopMargin"] <<= ConversionHelper::convertTwipToMM100(m_nTopFromText);
- aFrameProperties["BottomMargin"] <<= ConversionHelper::convertTwipToMM100(m_nBottomFromText);
-
- table::BorderLine2 aEmptyBorder;
- aFrameProperties["TopBorder"] <<= aEmptyBorder;
- aFrameProperties["BottomBorder"] <<= aEmptyBorder;
- aFrameProperties["LeftBorder"] <<= aEmptyBorder;
- aFrameProperties["RightBorder"] <<= aEmptyBorder;
-
- // Horizontal positioning
- sal_Int16 nHoriOrient = text::HoriOrientation::NONE;
- if (m_aXSpec == "center")
- nHoriOrient = text::HoriOrientation::CENTER;
- else if (m_aXSpec == "inside")
- nHoriOrient = text::HoriOrientation::INSIDE;
- else if (m_aXSpec == "left")
- nHoriOrient = text::HoriOrientation::LEFT;
- else if (m_aXSpec == "outside")
- nHoriOrient = text::HoriOrientation::OUTSIDE;
- else if (m_aXSpec == "right")
- nHoriOrient = text::HoriOrientation::RIGHT;
-
- sal_Int16 nHoriOrientRelation;
- if (m_aHorzAnchor == "margin")
- nHoriOrientRelation = text::RelOrientation::PAGE_PRINT_AREA;
- else if (m_aHorzAnchor == "page")
- nHoriOrientRelation = text::RelOrientation::PAGE_FRAME;
- else if (m_aHorzAnchor == "text")
- nHoriOrientRelation = text::RelOrientation::FRAME;
-
- aFrameProperties["HoriOrient"] <<= nHoriOrient;
- aFrameProperties["HoriOrientRelation"] <<= nHoriOrientRelation;
- aFrameProperties["HoriOrientPosition"] <<= ConversionHelper::convertTwipToMM100(m_nX);
-
- // Vertical positioning
- sal_Int16 nVertOrient = text::VertOrientation::NONE;
- if (m_aYSpec == "bottom")
- nVertOrient = text::VertOrientation::BOTTOM;
- else if (m_aYSpec == "center")
- nVertOrient = text::VertOrientation::CENTER;
- else if (m_aYSpec == "top")
- nVertOrient = text::VertOrientation::TOP;
- // TODO There are a few cases we can't map ATM.
-
- sal_Int16 nVertOrientRelation;
- if (m_aVertAnchor == "margin")
- nVertOrientRelation = text::RelOrientation::PAGE_PRINT_AREA;
- else if (m_aVertAnchor == "page")
- nVertOrientRelation = text::RelOrientation::PAGE_FRAME;
- else if (m_aVertAnchor == "text")
- nVertOrientRelation = text::RelOrientation::FRAME;
-
- aFrameProperties["VertOrient"] <<= nVertOrient;
- aFrameProperties["VertOrientRelation"] <<= nVertOrientRelation;
- aFrameProperties["VertOrientPosition"] <<= ConversionHelper::convertTwipToMM100(m_nY);
- aFrameProperties["FillTransparence"] <<= sal_Int32(100);
-
- return aFrameProperties.getAsConstPropertyValueList();
-}
-
-bool TablePositionHandler::operator==(const TablePositionHandler& rHandler) const
-{
- return m_aVertAnchor == rHandler.m_aVertAnchor && m_aYSpec == rHandler.m_aYSpec
- && m_aHorzAnchor == rHandler.m_aHorzAnchor && m_aXSpec == rHandler.m_aXSpec
- && m_nY == rHandler.m_nY && m_nX == rHandler.m_nX;
-}
-
-} // namespace writerfilter::dmapper
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/TablePositionHandler.hxx b/writerfilter/source/dmapper/TablePositionHandler.hxx
deleted file mode 100644
index 0a9a29d61f37..000000000000
--- a/writerfilter/source/dmapper/TablePositionHandler.hxx
+++ /dev/null
@@ -1,71 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-#ifndef INCLUDED_WRITERFILTER_SOURCE_DMAPPER_TABLEPOSITIONHANDLER_HXX
-#define INCLUDED_WRITERFILTER_SOURCE_DMAPPER_TABLEPOSITIONHANDLER_HXX
-
-#include "LoggedResources.hxx"
-
-namespace com::sun::star::beans
-{
-struct PropertyValue;
-}
-
-namespace writerfilter::dmapper
-{
-/// Handler for floating table positioning
-class TablePositionHandler : public LoggedProperties
-{
- OUString m_aVertAnchor{ "margin" };
- OUString m_aYSpec;
- OUString m_aHorzAnchor{ "text" };
- OUString m_aXSpec;
- sal_Int32 m_nY = 0;
- sal_Int32 m_nX = 0;
- sal_Int32 m_nLeftFromText = 0;
- sal_Int32 m_nRightFromText = 0;
- sal_Int32 m_nTopFromText = 0;
- sal_Int32 m_nBottomFromText = 0;
-
- // Properties
- void lcl_attribute(Id nId, Value& rVal) override;
- void lcl_sprm(Sprm& sprm) override;
-
-public:
- sal_Int32 getY() const { return m_nY; }
- sal_Int32 getX() const { return m_nX; }
- sal_Int32 getLeftFromText() const { return m_nLeftFromText; }
- sal_Int32 getRightFromText() const { return m_nRightFromText; }
- sal_Int32 getTopFromText() const { return m_nTopFromText; }
- sal_Int32 getBottomFromText() const { return m_nBottomFromText; }
-
- const OUString& getVertAnchor() const { return m_aVertAnchor; }
- const OUString& getYSpec() const { return m_aYSpec; }
- const OUString& getHorzAnchor() const { return m_aHorzAnchor; }
- const OUString& getXSpec() const { return m_aXSpec; }
-
- TablePositionHandler();
- ~TablePositionHandler() override;
-
- /** Compute the UNO properties for the frame containing the table based
- on the received tokens.
-
- Note that the properties will need to be adjusted with the table
- properties before actually using them.
- */
- css::uno::Sequence<css::beans::PropertyValue> getTablePosition() const;
-
- bool operator==(const TablePositionHandler& rHandler) const;
-};
-
-using TablePositionHandlerPtr = tools::SvRef<TablePositionHandler>;
-} // namespace writerfilter::dmapper
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/TablePropertiesHandler.cxx b/writerfilter/source/dmapper/TablePropertiesHandler.cxx
deleted file mode 100644
index b2cb476e3623..000000000000
--- a/writerfilter/source/dmapper/TablePropertiesHandler.cxx
+++ /dev/null
@@ -1,394 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * 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 .
- */
-
-#include "BorderHandler.hxx"
-#include "CellColorHandler.hxx"
-#include "CellMarginHandler.hxx"
-#include "ConversionHelper.hxx"
-#include "MeasureHandler.hxx"
-#include "TrackChangesHandler.hxx"
-#include "TablePropertiesHandler.hxx"
-#include "TagLogger.hxx"
-#include "TDefTableHandler.hxx"
-#include "DomainMapperTableManager.hxx"
-
-#include <ooxml/resourceids.hxx>
-
-#include <com/sun/star/text/VertOrientation.hpp>
-#include <oox/token/tokens.hxx>
-
-using namespace com::sun::star;
-using namespace oox;
-
-namespace writerfilter::dmapper {
-
- TablePropertiesHandler::TablePropertiesHandler() :
- m_pCurrentInteropGrabBag(nullptr),
- m_pTableManager( nullptr )
- {
- }
-
- bool TablePropertiesHandler::sprm(Sprm & rSprm)
- {
-#ifdef DBG_UTIL
- TagLogger::getInstance().startElement("TablePropertiesHandler.sprm");
- TagLogger::getInstance().attribute("sprm", rSprm.toString());
-#endif
-
- bool bRet = true;
- sal_uInt32 nSprmId = rSprm.getId();
- Value::Pointer_t pValue = rSprm.getValue();
- sal_Int32 nIntValue = (pValue ? pValue->getInt() : 0);
- switch( nSprmId )
- {
- case NS_ooxml::LN_CT_TrPrBase_jc:
- case NS_ooxml::LN_CT_TblPrBase_jc:
- {
- sal_Int16 nOrient = ConversionHelper::convertTableJustification( nIntValue );
- TablePropertyMapPtr pTableMap( new TablePropertyMap );
- pTableMap->setValue( TablePropertyMap::HORI_ORIENT, nOrient );
- insertTableProps( pTableMap );
- }
- break;
- case NS_ooxml::LN_CT_TrPrBase_trHeight:
- {
- //contains unit and value
- writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
- if( pProperties )
- { //contains attributes x2902 (LN_unit) and x17e2 (LN_trleft)
- MeasureHandlerPtr pMeasureHandler( new MeasureHandler );
- pProperties->resolve(*pMeasureHandler);
- TablePropertyMapPtr pPropMap( new TablePropertyMap );
-
- pPropMap->Insert( PROP_SIZE_TYPE, uno::makeAny( pMeasureHandler->GetRowHeightSizeType() ), false);
- pPropMap->Insert( PROP_HEIGHT, uno::makeAny(pMeasureHandler->getMeasureValue() ));
-
- insertRowProps(pPropMap);
- }
- }
- break;
- case NS_ooxml::LN_CT_TrPr_ins:
- case NS_ooxml::LN_CT_TrPr_del:
- {
- writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
- if( pProperties )
- {
- sal_Int32 nToken = sal_Int32();
- switch( nSprmId )
- {
- case NS_ooxml::LN_CT_TrPr_ins:
- nToken = XML_tableRowInsert;
- break;
- case NS_ooxml::LN_CT_TrPr_del:
- nToken = XML_tableRowDelete;
- break;
- }
- auto pTrackChangesHandler = std::make_shared<TrackChangesHandler>( nToken );
- pProperties->resolve(*pTrackChangesHandler);
- TablePropertyMapPtr pPropMap( new TablePropertyMap );
-
- // Add the 'track changes' properties to the 'table row' via UNO.
- // This way - in the SW core - when it receives this - it will create a new 'Table Redline' object for that row
- uno::Sequence<beans::PropertyValue> aTableRedlineProperties = pTrackChangesHandler->getRedlineProperties();
- pPropMap->Insert( PROP_TABLE_REDLINE_PARAMS , uno::makeAny( aTableRedlineProperties ));
- insertRowProps(pPropMap);
- }
- }
- break;
- case NS_ooxml::LN_CT_TcPrBase_cellIns:
- case NS_ooxml::LN_CT_TcPrBase_cellDel:
- {
- writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
- if( pProperties )
- {
- sal_Int32 nToken;
- switch( nSprmId )
- {
- case NS_ooxml::LN_CT_TcPrBase_cellIns:
- nToken = XML_tableCellInsert;
- break;
- case NS_ooxml::LN_CT_TcPrBase_cellDel:
- nToken = XML_tableCellDelete;
- break;
- default:
- throw lang::IllegalArgumentException("illegal redline token type", nullptr, 0);
- break;
- }
- auto pTrackChangesHandler = std::make_shared<TrackChangesHandler>( nToken );
- pProperties->resolve(*pTrackChangesHandler);
- TablePropertyMapPtr pPropMap( new TablePropertyMap );
-
- // Add the 'track changes' properties to the 'table row' via UNO.
- // This way - in the SW core - when it receives this - it will create a new 'Table Redline' object for that row
- uno::Sequence<beans::PropertyValue> aTableRedlineProperties = pTrackChangesHandler->getRedlineProperties();
- pPropMap->Insert( PROP_TABLE_REDLINE_PARAMS , uno::makeAny( aTableRedlineProperties ));
- cellProps(pPropMap);
- }
- }
- break;
- case NS_ooxml::LN_CT_TrPrBase_cantSplit:
- {
- //row can't break across pages if nIntValue == 1
- TablePropertyMapPtr pPropMap( new TablePropertyMap );
- pPropMap->Insert( PROP_IS_SPLIT_ALLOWED, uno::makeAny( nIntValue != 1 ) );
- insertRowProps(pPropMap);
- }
- break;
- case NS_ooxml::LN_CT_TcPrBase_vAlign:
- {
- sal_Int16 nVertOrient = text::VertOrientation::NONE;
- switch( nIntValue )
- {
- case NS_ooxml::LN_Value_ST_VerticalJc_center: nVertOrient = text::VertOrientation::CENTER; break;
- case NS_ooxml::LN_Value_ST_VerticalJc_bottom: nVertOrient = text::VertOrientation::BOTTOM; break;
- default:;
- }
- TablePropertyMapPtr pCellPropMap( new TablePropertyMap() );
- pCellPropMap->Insert( PROP_VERT_ORIENT, uno::makeAny( nVertOrient ) );
- //todo: in ooxml import the value of m_ncell is wrong
- cellProps( pCellPropMap );
- if (m_pCurrentInteropGrabBag)
- {
- OUString aVertOrient;
- switch( nIntValue )
- {
- case NS_ooxml::LN_Value_ST_VerticalJc_top: aVertOrient = "top"; break;
- case NS_ooxml::LN_Value_ST_VerticalJc_center: aVertOrient = "center"; break;
- case NS_ooxml::LN_Value_ST_VerticalJc_both: aVertOrient = "both"; break;
- case NS_ooxml::LN_Value_ST_VerticalJc_bottom: aVertOrient = "bottom"; break;
- }
- if (!aVertOrient.isEmpty())
- {
- beans::PropertyValue aValue;
- aValue.Name = "vAlign";
- aValue.Value <<= aVertOrient;
- m_pCurrentInteropGrabBag->push_back(aValue);
- }
- }
- }
- break;
- case NS_ooxml::LN_CT_TblPrBase_tblBorders: //table borders, might be defined in table style
- {
- writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
- if( pProperties )
- {
- auto pBorderHandler = std::make_shared<BorderHandler>(true);
- if (m_pCurrentInteropGrabBag)
- pBorderHandler->enableInteropGrabBag("tblBorders");
- pProperties->resolve(*pBorderHandler);
- if (m_pCurrentInteropGrabBag)
- m_pCurrentInteropGrabBag->push_back(pBorderHandler->getInteropGrabBag());
- TablePropertyMapPtr pTablePropMap( new TablePropertyMap );
- pTablePropMap->InsertProps(pBorderHandler->getProperties());
-
-#ifdef DBG_UTIL
- pTablePropMap->dumpXml();
-#endif
- insertTableProps( pTablePropMap );
- }
- }
- break;
- case NS_ooxml::LN_CT_TblPrBase_tblLayout:
- {
- DomainMapperTableManager* pManager = dynamic_cast<DomainMapperTableManager*>(m_pTableManager);
- if (pManager)
- pManager->SetLayoutType(static_cast<sal_uInt32>(nIntValue));
- }
- break;
- case NS_ooxml::LN_CT_TblPrEx_tblBorders:
- {
- writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
- if( pProperties)
- {
- auto pBorderHandler = std::make_shared<BorderHandler>(true);
- pProperties->resolve(*pBorderHandler);
- TablePropertyMapPtr pTablePropMap( new TablePropertyMap );
- pTablePropMap->InsertProps(pBorderHandler->getProperties());
-
-#ifdef DBG_UTIL
- pTablePropMap->dumpXml();
-#endif
- tableExceptionProps( pTablePropMap );
- }
- }
- break;
- case NS_ooxml::LN_CT_TcPrBase_tcBorders ://cell borders
- //contains CT_TcBorders_left, right, top, bottom
- {
- writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
- if( pProperties )
- {
- //in OOXML there's one set of borders at each cell (if there is any)
- tools::SvRef< TDefTableHandler > pTDefTableHandler( new TDefTableHandler());
- if (m_pCurrentInteropGrabBag)
- pTDefTableHandler->enableInteropGrabBag("tcBorders");
- pProperties->resolve( *pTDefTableHandler );
- if (m_pCurrentInteropGrabBag)
- m_pCurrentInteropGrabBag->push_back(pTDefTableHandler->getInteropGrabBag());
- TablePropertyMapPtr pCellPropMap( new TablePropertyMap );
- pTDefTableHandler->fillCellProperties( pCellPropMap );
- cellProps( pCellPropMap );
- }
- }
- break;
- case NS_ooxml::LN_CT_TcPrBase_tcMar:
-
- {
- writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
- if (pProperties)
- {
- auto pCellMarginHandler = std::make_shared<CellMarginHandler>();
- if (m_pCurrentInteropGrabBag)
- pCellMarginHandler->enableInteropGrabBag("tcMar");
- pProperties->resolve(*pCellMarginHandler);
- if (m_pCurrentInteropGrabBag)
- m_pCurrentInteropGrabBag->push_back(pCellMarginHandler->getInteropGrabBag());
- TablePropertyMapPtr pCellProperties(new TablePropertyMap);
- if (pCellMarginHandler->m_bTopMarginValid)
- pCellProperties->Insert(PROP_TOP_BORDER_DISTANCE, uno::makeAny(pCellMarginHandler->m_nTopMargin));
- if (pCellMarginHandler->m_bLeftMarginValid)
- pCellProperties->Insert(PROP_LEFT_BORDER_DISTANCE, uno::makeAny(pCellMarginHandler->m_nLeftMargin));
- if (pCellMarginHandler->m_bBottomMarginValid)
- pCellProperties->Insert(PROP_BOTTOM_BORDER_DISTANCE, uno::makeAny(pCellMarginHandler->m_nBottomMargin));
- if (pCellMarginHandler->m_bRightMarginValid)
- pCellProperties->Insert(PROP_RIGHT_BORDER_DISTANCE, uno::makeAny(pCellMarginHandler->m_nRightMargin));
- cellProps(pCellProperties);
- }
- }
- break;
-/* // tdf#123189 skip to keep MSO interoperability
- case NS_ooxml::LN_CT_TblPrBase_shd:
- {
- writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
- if( pProperties.get())
- {
- std::shared_ptr<CellColorHandler> pCellColorHandler( new CellColorHandler);
- pProperties->resolve( *pCellColorHandler );
- TablePropertyMapPtr pTablePropMap( new TablePropertyMap );
- insertTableProps( pCellColorHandler->getProperties() );
- }
- }
-*/
- break;
- case NS_ooxml::LN_CT_TcPrBase_shd:
- {
- // each color sprm contains as much colors as cells are in a row
- //LN_CT_TcPrBase_shd: cell shading contains: LN_CT_Shd_val, LN_CT_Shd_fill, LN_CT_Shd_color
- writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
- if( pProperties )
- {
- auto pCellColorHandler = std::make_shared<CellColorHandler>();
- pCellColorHandler->enableInteropGrabBag("shd"); //enable to store shd unsupported props in grab bag
- pProperties->resolve( *pCellColorHandler );
- TablePropertyMapPtr pPropertyMap = pCellColorHandler->getProperties();
- beans::PropertyValue aGrabBag = pCellColorHandler->getInteropGrabBag();
- if (m_pCurrentInteropGrabBag)
- m_pCurrentInteropGrabBag->push_back(aGrabBag);
- pPropertyMap->Insert( PROP_CELL_INTEROP_GRAB_BAG, aGrabBag.Value );
- cellProps( pPropertyMap );
- }
- }
- break;
-//OOXML table properties
- case NS_ooxml::LN_CT_TblPrBase_tblCellMar: //cell margins
- {
- //contains LN_CT_TblCellMar_top, LN_CT_TblCellMar_left, LN_CT_TblCellMar_bottom, LN_CT_TblCellMar_right
- // LN_CT_TblCellMar_start, LN_CT_TblCellMar_end
- writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
- if( pProperties )
- {
- auto pCellMarginHandler = std::make_shared<CellMarginHandler>();
- if (m_pCurrentInteropGrabBag)
- pCellMarginHandler->enableInteropGrabBag("tblCellMar");
- pProperties->resolve( *pCellMarginHandler );
- if (m_pCurrentInteropGrabBag)
- m_pCurrentInteropGrabBag->push_back(pCellMarginHandler->getInteropGrabBag());
- TablePropertyMapPtr pMarginProps( new TablePropertyMap );
- if( pCellMarginHandler->m_bTopMarginValid )
- pMarginProps->setValue( TablePropertyMap::CELL_MAR_TOP, pCellMarginHandler->m_nTopMargin );
- if( pCellMarginHandler->m_bBottomMarginValid )
- pMarginProps->setValue( TablePropertyMap::CELL_MAR_BOTTOM, pCellMarginHandler->m_nBottomMargin );
- if( pCellMarginHandler->m_bLeftMarginValid )
- pMarginProps->setValue( TablePropertyMap::CELL_MAR_LEFT, pCellMarginHandler->m_nLeftMargin );
- if( pCellMarginHandler->m_bRightMarginValid )
- pMarginProps->setValue( TablePropertyMap::CELL_MAR_RIGHT, pCellMarginHandler->m_nRightMargin );
- insertTableProps(pMarginProps);
- }
- }
- break;
- case NS_ooxml::LN_CT_TblPrBase_tblInd:
- {
- writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
- if (pProperties)
- {
- MeasureHandlerPtr pHandler(new MeasureHandler);
- if (m_pCurrentInteropGrabBag)
- pHandler->enableInteropGrabBag("tblInd");
- pProperties->resolve( *pHandler );
- if (m_pCurrentInteropGrabBag)
- m_pCurrentInteropGrabBag->push_back(pHandler->getInteropGrabBag());
- TablePropertyMapPtr pTblIndMap(new TablePropertyMap);
- sal_uInt32 nTblInd = pHandler->getMeasureValue();
- pTblIndMap->setValue( TablePropertyMap::LEFT_MARGIN, nTblInd);
- insertTableProps(pTblIndMap);
- }
- }
- break;
- case NS_ooxml::LN_CT_TcPrBase_hideMark:
- if (nIntValue)
- {
- TablePropertyMapPtr pPropMap(new TablePropertyMap());
- pPropMap->Insert(PROP_CELL_HIDE_MARK, uno::makeAny(nIntValue));
- cellProps(pPropMap);
- }
- break;
- default:
- // Not handled here, give the next handler a chance.
- bRet = false;
- // However, these logically belong here, so save the value if necessary.
- switch (nSprmId)
- {
- case NS_ooxml::LN_CT_TblPrBase_tblStyleRowBandSize:
- case NS_ooxml::LN_CT_TblPrBase_tblStyleColBandSize:
- if (m_pCurrentInteropGrabBag)
- {
- beans::PropertyValue aValue;
- aValue.Name = (nSprmId == NS_ooxml::LN_CT_TblPrBase_tblStyleRowBandSize ? OUStringLiteral(u"tblStyleRowBandSize") : OUStringLiteral(u"tblStyleColBandSize"));
- aValue.Value <<= nIntValue;
- m_pCurrentInteropGrabBag->push_back(aValue);
- }
- break;
- }
- break;
- }
-
-#ifdef DBG_UTIL
- TagLogger::getInstance().endElement();
-#endif
-
- return bRet;
- }
-
- void TablePropertiesHandler::SetInteropGrabBag(std::vector<beans::PropertyValue>& rValue)
- {
- m_pCurrentInteropGrabBag = &rValue;
- }
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/TablePropertiesHandler.hxx b/writerfilter/source/dmapper/TablePropertiesHandler.hxx
deleted file mode 100644
index 6ba81cf9010f..000000000000
--- a/writerfilter/source/dmapper/TablePropertiesHandler.hxx
+++ /dev/null
@@ -1,97 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * 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 .
- */
-
-#ifndef INCLUDED_WRITERFILTER_SOURCE_DMAPPER_TABLEPROPERTIESHANDLER_HXX
-#define INCLUDED_WRITERFILTER_SOURCE_DMAPPER_TABLEPROPERTIESHANDLER_HXX
-
-#include "PropertyMap.hxx"
-
-#include "TableManager.hxx"
-#include <dmapper/resourcemodel.hxx>
-
-#include <vector>
-
-namespace writerfilter::dmapper {
-
-class DomainMapper;
-
-class TablePropertiesHandler final : public virtual SvRefBase
-{
-private:
- PropertyMapPtr m_pCurrentProperties;
- std::vector<css::beans::PropertyValue>* m_pCurrentInteropGrabBag;
- TableManager* m_pTableManager;
-
-public:
- TablePropertiesHandler();
-
- bool sprm(Sprm & sprm);
-
- void SetTableManager( TableManager* pTableManager )
- {
- m_pTableManager = pTableManager;
- };
-
- void SetProperties( PropertyMapPtr pProperties )
- {
- m_pCurrentProperties = pProperties;
- };
-
- void SetInteropGrabBag(std::vector<css::beans::PropertyValue>& rValue);
-
-private:
-
- void cellProps( TablePropertyMapPtr pProps )
- {
- if ( m_pTableManager )
- m_pTableManager->cellProps( pProps );
- else
- m_pCurrentProperties->InsertProps(pProps.get());
- };
-
- void insertRowProps( TablePropertyMapPtr pProps )
- {
- if ( m_pTableManager )
- m_pTableManager->insertRowProps( pProps );
- else
- m_pCurrentProperties->InsertProps(pProps.get());
- };
-
- void tableExceptionProps( TablePropertyMapPtr pProps )
- {
- if ( m_pTableManager )
- m_pTableManager->tableExceptionProps( pProps );
- else
- m_pCurrentProperties->InsertProps(pProps.get());
- };
-
- void insertTableProps( TablePropertyMapPtr pProps )
- {
- if ( m_pTableManager )
- m_pTableManager->insertTableProps( pProps );
- else
- m_pCurrentProperties->InsertProps(pProps.get());
- };
-};
-
-}
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/TagLogger.cxx b/writerfilter/source/dmapper/TagLogger.cxx
deleted file mode 100644
index a7443f056d29..000000000000
--- a/writerfilter/source/dmapper/TagLogger.cxx
+++ /dev/null
@@ -1,237 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * 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 .
- */
-
-#include <string.h>
-#include "TagLogger.hxx"
-#ifdef DBG_UTIL
-#include <unotools/pathoptions.hxx>
-#endif
-
-using namespace css;
-
-namespace writerfilter
-{
- TagLogger::TagLogger()
- : pWriter( nullptr ), pName( "DOMAINMAPPER" )
- {
- }
-
- TagLogger::~TagLogger()
- {
- pWriter = nullptr;
- pName = nullptr;
- }
-
-#ifdef DBG_UTIL
- void TagLogger::setFileName( const std::string & filename )
- {
- if ( pWriter )
- endDocument();
-
- std::string fileName;
- char * temp = getenv("TAGLOGGERTMP");
-
- if (temp != nullptr)
- fileName += temp;
- else
- fileName += SvtPathOptions().GetTempPath().toUtf8().getStr();
-
- std::string sPrefix = filename;
- size_t nLastSlash = sPrefix.find_last_of('/');
- size_t nLastBackslash = sPrefix.find_last_of('\\');
- size_t nCutPos = nLastSlash;
- if (nLastBackslash < nCutPos)
- nCutPos = nLastBackslash;
- if (nCutPos < sPrefix.size())
- sPrefix = sPrefix.substr(nCutPos + 1);
-
- fileName += "/";
- fileName += sPrefix;
- fileName += ".";
- fileName += pName;
- fileName += ".xml";
-
- pWriter = xmlNewTextWriterFilename( fileName.c_str(), 0 );
- xmlTextWriterSetIndent(pWriter,1);
- xmlTextWriterSetIndentString(pWriter, BAD_CAST(" "));
- xmlTextWriterSetIndent( pWriter, 4 );
- }
-
- void TagLogger::startDocument()
- {
- if (!pWriter)
- return;
- xmlTextWriterStartDocument( pWriter, nullptr, nullptr, nullptr );
- xmlTextWriterStartElement( pWriter, BAD_CAST( "root" ) );
- }
-
- void TagLogger::endDocument()
- {
- if (!pWriter)
- return;
- xmlTextWriterEndDocument( pWriter );
- xmlFreeTextWriter( pWriter );
- pWriter = nullptr;
- }
-
-#endif
-
-namespace {
-
-struct TheTagLogger:
- public rtl::Static<TagLogger, TheTagLogger>
-{};
-
-}
-
- TagLogger& TagLogger::getInstance()
- {
- return TheTagLogger::get();
- }
-
-#ifdef DBG_UTIL
- void TagLogger::element(const std::string & name)
- {
- startElement(name);
- endElement();
- }
-
- void TagLogger::unoPropertySet(const uno::Reference<beans::XPropertySet>& rPropSet)
- {
- uno::Reference<beans::XPropertySetInfo> xPropSetInfo(rPropSet->getPropertySetInfo());
- const uno::Sequence<beans::Property> aProps(xPropSetInfo->getProperties());
-
- startElement( "unoPropertySet" );
-
- for (beans::Property const & prop : aProps)
- {
- startElement( "property" );
- OUString sName(prop.Name);
-
- attribute( "name", sName );
- try
- {
- attribute( "value", rPropSet->getPropertyValue( sName ) );
- }
- catch (const uno::Exception &)
- {
- startElement( "exception" );
-
- chars(std::string("getPropertyValue(\""));
- chars(sName);
- chars(std::string("\")"));
-
- endElement( );
- }
- endElement( );
- }
- endElement( );
- }
-
- void TagLogger::startElement(const std::string & name)
- {
- if (!pWriter)
- return;
- xmlChar* xmlName = xmlCharStrdup( name.c_str() );
- xmlTextWriterStartElement( pWriter, xmlName );
- xmlFree( xmlName );
- }
-#endif
-
- void TagLogger::attribute(const std::string & name, const std::string & value)
- {
- if (!pWriter)
- return;
- xmlChar* xmlName = xmlCharStrdup( name.c_str() );
- xmlChar* xmlValue = xmlCharStrdup( value.c_str() );
- xmlTextWriterWriteAttribute( pWriter, xmlName, xmlValue );
-
- xmlFree( xmlValue );
- xmlFree( xmlName );
- }
-
-#ifdef DBG_UTIL
- void TagLogger::attribute(const std::string & name, std::u16string_view value)
- {
- attribute( name, OUStringToOString( value, RTL_TEXTENCODING_ASCII_US ).getStr() );
- }
-
- void TagLogger::attribute(const std::string & name, sal_uInt32 value)
- {
- if (!pWriter)
- return;
- xmlChar* xmlName = xmlCharStrdup( name.c_str() );
- xmlTextWriterWriteFormatAttribute( pWriter, xmlName,
- "%" SAL_PRIuUINT32, value );
- xmlFree( xmlName );
- }
-
- void TagLogger::attribute(const std::string & name, const uno::Any& aAny)
- {
- if (!pWriter)
- return;
-
- sal_Int32 nInt = 0;
- float nFloat = 0.0;
- OUString aStr;
-
- xmlChar* xmlName = xmlCharStrdup( name.c_str() );
- if ( aAny >>= nInt )
- {
- xmlTextWriterWriteFormatAttribute( pWriter, xmlName,
- "%" SAL_PRIdINT32, nInt );
- }
- else if ( aAny >>= nFloat )
- {
- xmlTextWriterWriteFormatAttribute( pWriter, xmlName,
- "%f", nFloat );
- }
- else if ( aAny >>= aStr )
- {
- attribute( name, aStr );
- }
- xmlFree( xmlName );
- }
-
- void TagLogger::chars(const std::string & rChars)
- {
- if (!pWriter)
- return;
- xmlChar* xmlChars = xmlCharStrdup( rChars.c_str() );
- xmlTextWriterWriteString( pWriter, xmlChars );
- xmlFree( xmlChars );
- }
-
- void TagLogger::chars(std::u16string_view rChars)
- {
- chars(OUStringToOString(rChars, RTL_TEXTENCODING_ASCII_US).getStr());
- }
-
- void TagLogger::endElement()
- {
- if (!pWriter)
- return;
- xmlTextWriterEndElement( pWriter );
- }
-
-#endif
-
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/TagLogger.hxx b/writerfilter/source/dmapper/TagLogger.hxx
deleted file mode 100644
index f28b58b59f26..000000000000
--- a/writerfilter/source/dmapper/TagLogger.hxx
+++ /dev/null
@@ -1,68 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * 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 .
- */
-
-#ifndef INCLUDED_WRITERFILTER_SOURCE_DMAPPER_TAGLOGGER_HXX
-#define INCLUDED_WRITERFILTER_SOURCE_DMAPPER_TAGLOGGER_HXX
-
-#include <rtl/ustring.hxx>
-#include <tools/ref.hxx>
-#include <com/sun/star/beans/XPropertySet.hpp>
-#include <string>
-#include <string_view>
-#include <libxml/xmlwriter.h>
-
-namespace writerfilter
-{
-
- class TagLogger
- {
- private:
- xmlTextWriterPtr pWriter;
- const char* pName;
-
- public:
- explicit TagLogger();
- ~TagLogger();
-
- static TagLogger& getInstance();
-
-#ifdef DBG_UTIL
- void setFileName(const std::string & filename);
- void startDocument();
- void endDocument();
-
- void element(const std::string & name);
- void unoPropertySet(const css::uno::Reference<css::beans::XPropertySet>& rPropSet);
- void startElement(const std::string & name);
-#endif
- void attribute(const std::string & name, const std::string & value);
-#ifdef DBG_UTIL
- void attribute(const std::string & name, std::u16string_view value);
- void attribute(const std::string & name, sal_uInt32 value);
- void attribute(const std::string & name, const css::uno::Any& aAny);
- void chars(const std::string & chars);
- void chars(std::u16string_view chars);
- void endElement();
-#endif
- };
-}
-
-#endif // INCLUDED_WRITERFILTER_SOURCE_DMAPPER_TAGLOGGER_HXX
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/TblStylePrHandler.cxx b/writerfilter/source/dmapper/TblStylePrHandler.cxx
deleted file mode 100644
index 001cecbd9f86..000000000000
--- a/writerfilter/source/dmapper/TblStylePrHandler.cxx
+++ /dev/null
@@ -1,259 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * 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 .
- */
-
-#include "TblStylePrHandler.hxx"
-#include "TagLogger.hxx"
-#include "CellMarginHandler.hxx"
-#include "PropertyMap.hxx"
-#include "MeasureHandler.hxx"
-#include <ooxml/resourceids.hxx>
-#include <comphelper/sequence.hxx>
-
-
-using namespace css;
-
-namespace writerfilter::dmapper {
-
-TblStylePrHandler::TblStylePrHandler( DomainMapper & rDMapper ) :
-LoggedProperties("TblStylePrHandler"),
-m_rDMapper( rDMapper ),
-m_pTablePropsHandler(new TablePropertiesHandler()),
-m_nType( TBL_STYLE_UNKNOWN ),
-m_pProperties( new PropertyMap )
-{
-}
-
-TblStylePrHandler::~TblStylePrHandler( )
-{
-}
-
-OUString TblStylePrHandler::getTypeString() const
-{
- switch (m_nType)
- {
- case TBL_STYLE_WHOLETABLE: return "wholeTable";
- case TBL_STYLE_FIRSTROW: return "firstRow";
- case TBL_STYLE_LASTROW: return "lastRow";
- case TBL_STYLE_FIRSTCOL: return "firstCol";
- case TBL_STYLE_LASTCOL: return "lastCol";
- case TBL_STYLE_BAND1VERT: return "band1Vert";
- case TBL_STYLE_BAND2VERT: return "band2Vert";
- case TBL_STYLE_BAND1HORZ: return "band1Horz";
- case TBL_STYLE_BAND2HORZ: return "band2Horz";
- case TBL_STYLE_NECELL: return "neCell";
- case TBL_STYLE_NWCELL: return "nwCell";
- case TBL_STYLE_SECELL: return "seCell";
- case TBL_STYLE_SWCELL: return "swCell";
- default: break;
- }
- return OUString();
-}
-
-void TblStylePrHandler::lcl_attribute(Id rName, Value & rVal)
-{
-
- switch ( rName )
- {
- case NS_ooxml::LN_CT_TblStyleOverrideType:
- {
- switch (rVal.getInt())
- {
- case NS_ooxml::LN_Value_ST_TblStyleOverrideType_wholeTable:
- m_nType = TBL_STYLE_WHOLETABLE;
- break;
- case NS_ooxml::LN_Value_ST_TblStyleOverrideType_firstRow:
- m_nType = TBL_STYLE_FIRSTROW;
- break;
- case NS_ooxml::LN_Value_ST_TblStyleOverrideType_lastRow:
- m_nType = TBL_STYLE_LASTROW;
- break;
- case NS_ooxml::LN_Value_ST_TblStyleOverrideType_firstCol:
- m_nType = TBL_STYLE_FIRSTCOL;
- break;
- case NS_ooxml::LN_Value_ST_TblStyleOverrideType_lastCol:
- m_nType = TBL_STYLE_LASTCOL;
- break;
- case NS_ooxml::LN_Value_ST_TblStyleOverrideType_band1Vert:
- m_nType = TBL_STYLE_BAND1VERT;
- break;
- case NS_ooxml::LN_Value_ST_TblStyleOverrideType_band2Vert:
- m_nType = TBL_STYLE_BAND2VERT;
- break;
- case NS_ooxml::LN_Value_ST_TblStyleOverrideType_band1Horz:
- m_nType = TBL_STYLE_BAND1HORZ;
- break;
- case NS_ooxml::LN_Value_ST_TblStyleOverrideType_band2Horz:
- m_nType = TBL_STYLE_BAND2HORZ;
- break;
- case NS_ooxml::LN_Value_ST_TblStyleOverrideType_neCell:
- m_nType = TBL_STYLE_NECELL;
- break;
- case NS_ooxml::LN_Value_ST_TblStyleOverrideType_nwCell:
- m_nType = TBL_STYLE_NWCELL;
- break;
- case NS_ooxml::LN_Value_ST_TblStyleOverrideType_seCell:
- m_nType = TBL_STYLE_SECELL;
- break;
- case NS_ooxml::LN_Value_ST_TblStyleOverrideType_swCell:
- m_nType = TBL_STYLE_SWCELL;
- break;
- }
- }
- break;
- }
-}
-
-void TblStylePrHandler::lcl_sprm(Sprm & rSprm)
-{
-#ifdef DBG_UTIL
- TagLogger::getInstance().startElement("TblStylePrHandler.sprm");
- TagLogger::getInstance().attribute("sprm", rSprm.toString());
-#endif
-
- switch ( rSprm.getId( ) )
- {
- case NS_ooxml::LN_CT_PPrBase:
- case NS_ooxml::LN_EG_RPrBase:
- case NS_ooxml::LN_CT_TblPrBase:
- case NS_ooxml::LN_CT_TrPrBase:
- case NS_ooxml::LN_CT_TcPrBase:
- {
- std::vector<beans::PropertyValue> aSavedGrabBag;
- bool bGrabBag = rSprm.getId() == NS_ooxml::LN_CT_PPrBase ||
- rSprm.getId() == NS_ooxml::LN_EG_RPrBase ||
- rSprm.getId() == NS_ooxml::LN_CT_TblPrBase ||
- rSprm.getId() == NS_ooxml::LN_CT_TrPrBase ||
- rSprm.getId() == NS_ooxml::LN_CT_TcPrBase;
- if (bGrabBag)
- {
- std::swap(aSavedGrabBag, m_aInteropGrabBag);
- }
- resolveSprmProps( rSprm );
- if (bGrabBag)
- {
- if (rSprm.getId() == NS_ooxml::LN_CT_PPrBase)
- aSavedGrabBag.push_back(getInteropGrabBag("pPr"));
- else if (rSprm.getId() == NS_ooxml::LN_EG_RPrBase)
- aSavedGrabBag.push_back(getInteropGrabBag("rPr"));
- else if (rSprm.getId() == NS_ooxml::LN_CT_TblPrBase)
- aSavedGrabBag.push_back(getInteropGrabBag("tblPr"));
- else if (rSprm.getId() == NS_ooxml::LN_CT_TrPrBase)
- aSavedGrabBag.push_back(getInteropGrabBag("trPr"));
- else if (rSprm.getId() == NS_ooxml::LN_CT_TcPrBase)
- aSavedGrabBag.push_back(getInteropGrabBag("tcPr"));
- std::swap(m_aInteropGrabBag, aSavedGrabBag);
- }
- }
- break;
- case NS_ooxml::LN_CT_TrPrBase_tblHeader:
- {
- m_pProperties->Insert( PROP_HEADER_ROW_COUNT, uno::makeAny(sal_Int32(1)));
- beans::PropertyValue aValue;
- aValue.Name = "tblHeader";
- aValue.Value <<= true;
- m_aInteropGrabBag.push_back(aValue);
- }
- break;
- case NS_ooxml::LN_CT_TblPrBase_tblInd:
- {
- //contains unit and value
- writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
- if( pProperties )
- {
- MeasureHandlerPtr pMeasureHandler( new MeasureHandler );
- pProperties->resolve(*pMeasureHandler);
- TablePropertyMapPtr pPropMap( new TablePropertyMap );
- pPropMap->setValue( TablePropertyMap::LEFT_MARGIN, pMeasureHandler->getMeasureValue() );
- m_pProperties->Insert( PROP_LEFT_MARGIN, uno::makeAny(pMeasureHandler->getMeasureValue()) );
- }
- }
- break;
- case NS_ooxml::LN_CT_TblPrBase_tblCellMar:
- {
- writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
- if ( pProperties )
- {
- auto pCellMarginHandler = std::make_shared<CellMarginHandler>();
- pCellMarginHandler->enableInteropGrabBag("tblCellMar");
- pProperties->resolve( *pCellMarginHandler );
- m_aInteropGrabBag.push_back(pCellMarginHandler->getInteropGrabBag());
-
- if( pCellMarginHandler->m_bTopMarginValid )
- m_pProperties->Insert( META_PROP_CELL_MAR_TOP, uno::makeAny(pCellMarginHandler->m_nTopMargin) );
- if( pCellMarginHandler->m_bBottomMarginValid )
- m_pProperties->Insert( META_PROP_CELL_MAR_BOTTOM, uno::makeAny(pCellMarginHandler->m_nBottomMargin) );
- if( pCellMarginHandler->m_bLeftMarginValid )
- m_pProperties->Insert( META_PROP_CELL_MAR_LEFT, uno::makeAny(pCellMarginHandler->m_nLeftMargin) );
- if( pCellMarginHandler->m_bRightMarginValid )
- m_pProperties->Insert( META_PROP_CELL_MAR_RIGHT, uno::makeAny(pCellMarginHandler->m_nRightMargin) );
- }
- }
- break;
- default:
- // Tables specific properties have to handled here
- m_pTablePropsHandler->SetProperties( m_pProperties );
- m_pTablePropsHandler->SetInteropGrabBag(m_aInteropGrabBag);
- bool bRet = m_pTablePropsHandler->sprm( rSprm );
-
- if ( !bRet )
- {
- // The DomainMapper can handle some of the properties
- m_rDMapper.PushStyleSheetProperties( m_pProperties, true );
- // Just pass a non-empty string, the array will have a single element anyway.
- m_rDMapper.enableInteropGrabBag("TblStylePrHandler");
- m_rDMapper.sprm( rSprm );
- uno::Sequence<beans::PropertyValue> aGrabBag = m_rDMapper.getInteropGrabBag().Value.get< uno::Sequence<beans::PropertyValue> >();
- if (aGrabBag.hasElements())
- m_aInteropGrabBag.push_back(aGrabBag[0]);
- m_rDMapper.PopStyleSheetProperties( true );
- }
- }
-
-#ifdef DBG_UTIL
- TagLogger::getInstance().endElement();
-#endif
-}
-
-void TblStylePrHandler::resolveSprmProps(Sprm & rSprm)
-{
- writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
- if( pProperties )
- pProperties->resolve(*this);
-}
-
-void TblStylePrHandler::appendInteropGrabBag(const OUString& aKey, const OUString& aValue)
-{
- beans::PropertyValue aProperty;
- aProperty.Name = aKey;
- aProperty.Value <<= aValue;
- m_aInteropGrabBag.push_back(aProperty);
-}
-
-beans::PropertyValue TblStylePrHandler::getInteropGrabBag(const OUString& aName)
-{
- beans::PropertyValue aRet;
- aRet.Name = aName;
-
- aRet.Value <<= comphelper::containerToSequence(m_aInteropGrabBag);
- return aRet;
-}
-
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/TblStylePrHandler.hxx b/writerfilter/source/dmapper/TblStylePrHandler.hxx
deleted file mode 100644
index df493eb11187..000000000000
--- a/writerfilter/source/dmapper/TblStylePrHandler.hxx
+++ /dev/null
@@ -1,85 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * 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 .
- */
-
-#ifndef INCLUDED_WRITERFILTER_SOURCE_DMAPPER_TBLSTYLEPRHANDLER_HXX
-#define INCLUDED_WRITERFILTER_SOURCE_DMAPPER_TBLSTYLEPRHANDLER_HXX
-
-#include "TablePropertiesHandler.hxx"
-
-#include "DomainMapper.hxx"
-#include "LoggedResources.hxx"
-#include <memory>
-#include <vector>
-
-namespace writerfilter::dmapper {
-
-class DomainMapper;
-
-enum TblStyleType
-{
- TBL_STYLE_UNKNOWN,
- TBL_STYLE_WHOLETABLE,
- TBL_STYLE_FIRSTROW,
- TBL_STYLE_LASTROW,
- TBL_STYLE_FIRSTCOL,
- TBL_STYLE_LASTCOL,
- TBL_STYLE_BAND1VERT,
- TBL_STYLE_BAND2VERT,
- TBL_STYLE_BAND1HORZ,
- TBL_STYLE_BAND2HORZ,
- TBL_STYLE_NECELL,
- TBL_STYLE_NWCELL,
- TBL_STYLE_SECELL,
- TBL_STYLE_SWCELL
-};
-
-class TblStylePrHandler : public LoggedProperties
-{
-private:
- DomainMapper & m_rDMapper;
- std::unique_ptr<TablePropertiesHandler> m_pTablePropsHandler;
-
- TblStyleType m_nType;
- PropertyMapPtr m_pProperties;
- std::vector<css::beans::PropertyValue> m_aInteropGrabBag;
-
- // Properties
- virtual void lcl_attribute(Id Name, Value & val) override;
- virtual void lcl_sprm(Sprm & sprm) override;
-
-public:
- explicit TblStylePrHandler( DomainMapper & rDMapper );
- virtual ~TblStylePrHandler( ) override;
-
- const PropertyMapPtr& getProperties() const { return m_pProperties; };
- TblStyleType getType() const { return m_nType; };
- OUString getTypeString() const;
- void appendInteropGrabBag(const OUString& aKey, const OUString& aValue);
- css::beans::PropertyValue getInteropGrabBag(const OUString& aName);
-
-private:
-
- void resolveSprmProps(Sprm & rSprm);
-};
-
-}
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/TextEffectsHandler.cxx b/writerfilter/source/dmapper/TextEffectsHandler.cxx
deleted file mode 100644
index 3288556c8979..000000000000
--- a/writerfilter/source/dmapper/TextEffectsHandler.cxx
+++ /dev/null
@@ -1,803 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- */
-
-#include <sal/config.h>
-
-#include <map>
-
-#include "TextEffectsHandler.hxx"
-
-#include <rtl/ustrbuf.hxx>
-#include <comphelper/string.hxx>
-#include <ooxml/resourceids.hxx>
-#include <comphelper/sequenceashashmap.hxx>
-#include <oox/drawingml/drawingmltypes.hxx>
-
-namespace writerfilter::dmapper
-{
-
-using namespace com::sun::star;
-
-namespace
-{
-
-OUString lclGetNameForElementId(sal_uInt32 aId)
-{
- static std::map<sal_uInt32, OUString> aIdMap;
- if(aIdMap.empty())
- {
- aIdMap[NS_ooxml::LN_EG_ColorChoice_srgbClr] = "srgbClr";
- aIdMap[NS_ooxml::LN_EG_ColorChoice_schemeClr] = "schemeClr";
- aIdMap[NS_ooxml::LN_EG_ColorTransform_tint] = "tint";
- aIdMap[NS_ooxml::LN_EG_ColorTransform_shade] = "shade";
- aIdMap[NS_ooxml::LN_EG_ColorTransform_alpha] = "alpha";
- aIdMap[NS_ooxml::LN_EG_ColorTransform_hueMod] = "hueMod";
- aIdMap[NS_ooxml::LN_EG_ColorTransform_sat] = "sat";
- aIdMap[NS_ooxml::LN_EG_ColorTransform_satOff] = "satOff";
- aIdMap[NS_ooxml::LN_EG_ColorTransform_satMod] = "satMod";
- aIdMap[NS_ooxml::LN_EG_ColorTransform_lum] = "lum";
- aIdMap[NS_ooxml::LN_EG_ColorTransform_lumOff] = "lumOff";
- aIdMap[NS_ooxml::LN_EG_ColorTransform_lumMod] = "lumMod";
- aIdMap[NS_ooxml::LN_EG_FillProperties_noFill] = "noFill";
- aIdMap[NS_ooxml::LN_EG_FillProperties_solidFill] = "solidFill";
- aIdMap[NS_ooxml::LN_EG_FillProperties_gradFill] = "gradFill";
- aIdMap[NS_ooxml::LN_CT_GradientFillProperties_gsLst] = "gsLst";
- aIdMap[NS_ooxml::LN_CT_GradientStopList_gs] = "gs";
- aIdMap[NS_ooxml::LN_CT_GradientStop_pos] = "pos";
- aIdMap[NS_ooxml::LN_EG_ShadeProperties_lin] = "lin";
- aIdMap[NS_ooxml::LN_EG_ShadeProperties_path] = "path";
- aIdMap[NS_ooxml::LN_CT_PathShadeProperties_fillToRect] = "fillToRect";
- aIdMap[NS_ooxml::LN_EG_LineDashProperties_prstDash] = "prstDash";
- aIdMap[NS_ooxml::LN_EG_LineJoinProperties_round] = "round";
- aIdMap[NS_ooxml::LN_EG_LineJoinProperties_bevel] = "bevel";
- aIdMap[NS_ooxml::LN_EG_LineJoinProperties_miter] = "miter";
- aIdMap[NS_ooxml::LN_CT_Scene3D_camera] = "camera";
- aIdMap[NS_ooxml::LN_CT_Scene3D_lightRig] = "lightRig";
- aIdMap[NS_ooxml::LN_CT_LightRig_rot] = "rot";
- aIdMap[NS_ooxml::LN_CT_Props3D_bevelT] = "bevelT";
- aIdMap[NS_ooxml::LN_CT_Props3D_bevelB] = "bevelB";
- aIdMap[NS_ooxml::LN_CT_Props3D_extrusionClr] = "extrusionClr";
- aIdMap[NS_ooxml::LN_CT_Props3D_contourClr] = "contourClr";
- aIdMap[NS_ooxml::LN_CT_StylisticSets_styleSet] = "styleSet";
- }
- return aIdMap[aId];
-}
-
-constexpr OUStringLiteral constAttributesSequenceName = u"attributes";
-
-}
-
-OUString TextEffectsHandler::getSchemeColorValTypeString(sal_Int32 nType)
-{
- switch (nType)
- {
- case NS_ooxml::LN_ST_SchemeColorVal_bg1: return "bg1";
- case NS_ooxml::LN_ST_SchemeColorVal_tx1: return "tx1";
- case NS_ooxml::LN_ST_SchemeColorVal_bg2: return "bg2";
- case NS_ooxml::LN_ST_SchemeColorVal_tx2: return "tx2";
- case NS_ooxml::LN_ST_SchemeColorVal_accent1: return "accent1";
- case NS_ooxml::LN_ST_SchemeColorVal_accent2: return "accent2";
- case NS_ooxml::LN_ST_SchemeColorVal_accent3: return "accent3";
- case NS_ooxml::LN_ST_SchemeColorVal_accent4: return "accent4";
- case NS_ooxml::LN_ST_SchemeColorVal_accent5: return "accent5";
- case NS_ooxml::LN_ST_SchemeColorVal_accent6: return "accent6";
- case NS_ooxml::LN_ST_SchemeColorVal_hlink: return "hlink";
- case NS_ooxml::LN_ST_SchemeColorVal_folHlink: return "folHlink";
- case NS_ooxml::LN_ST_SchemeColorVal_dk1: return "dk1";
- case NS_ooxml::LN_ST_SchemeColorVal_lt1: return "lt1";
- case NS_ooxml::LN_ST_SchemeColorVal_dk2: return "dk2";
- case NS_ooxml::LN_ST_SchemeColorVal_lt2: return "lt2";
- case NS_ooxml::LN_ST_SchemeColorVal_phClr: return "phClr";
- default: break;
- }
- return OUString();
-}
-
-OUString TextEffectsHandler::getRectAlignmentString(sal_Int32 nType)
-{
- switch (nType)
- {
- case NS_ooxml::LN_ST_RectAlignment_none: return "none";
- case NS_ooxml::LN_ST_RectAlignment_tl: return "tl";
- case NS_ooxml::LN_ST_RectAlignment_t: return "t";
- case NS_ooxml::LN_ST_RectAlignment_tr: return "tr";
- case NS_ooxml::LN_ST_RectAlignment_l: return "l";
- case NS_ooxml::LN_ST_RectAlignment_ctr: return "ctr";
- case NS_ooxml::LN_ST_RectAlignment_r: return "r";
- case NS_ooxml::LN_ST_RectAlignment_bl: return "bl";
- case NS_ooxml::LN_ST_RectAlignment_b: return "b";
- case NS_ooxml::LN_ST_RectAlignment_br: return "br";
-
- default: break;
- }
- return OUString();
-}
-
-OUString TextEffectsHandler::getLineCapString(sal_Int32 nType)
-{
- switch (nType)
- {
- case NS_ooxml::LN_ST_LineCap_rnd: return "rnd";
- case NS_ooxml::LN_ST_LineCap_sq: return "sq";
- case NS_ooxml::LN_ST_LineCap_flat: return "flat";
- default: break;
- }
- return OUString();
-}
-
-OUString TextEffectsHandler::getCompoundLineString(sal_Int32 nType)
-{
- switch (nType)
- {
- case NS_ooxml::LN_ST_CompoundLine_sng: return "sng";
- case NS_ooxml::LN_ST_CompoundLine_dbl: return "dbl";
- case NS_ooxml::LN_ST_CompoundLine_thickThin: return "thickThin";
- case NS_ooxml::LN_ST_CompoundLine_thinThick: return "thinThick";
- case NS_ooxml::LN_ST_CompoundLine_tri: return "tri";
- default: break;
- }
- return OUString();
-}
-
-OUString TextEffectsHandler::getPenAlignmentString(sal_Int32 nType)
-{
- switch (nType)
- {
- case NS_ooxml::LN_ST_PenAlignment_ctr: return "ctr";
- case NS_ooxml::LN_ST_PenAlignment_in: return "in";
- default: break;
- }
- return OUString();
-}
-
-OUString TextEffectsHandler::getOnOffString(sal_Int32 nType)
-{
- switch (nType)
- {
- case NS_ooxml::LN_ST_OnOff_true: return "true";
- case NS_ooxml::LN_ST_OnOff_false: return "false";
- case NS_ooxml::LN_ST_OnOff_1: return "1";
- case NS_ooxml::LN_ST_OnOff_0: return "0";
- default: break;
- }
- return OUString();
-}
-
-OUString TextEffectsHandler::getPathShadeTypeString(sal_Int32 nType)
-{
- switch (nType)
- {
- case NS_ooxml::LN_ST_PathShadeType_shape: return "shape";
- case NS_ooxml::LN_ST_PathShadeType_circle: return "circle";
- case NS_ooxml::LN_ST_PathShadeType_rect: return "rect";
- default: break;
- }
- return OUString();
-}
-
-OUString TextEffectsHandler::getPresetLineDashValString(sal_Int32 nType)
-{
- switch (nType)
- {
- case NS_ooxml::LN_ST_PresetLineDashVal_solid: return "solid";
- case NS_ooxml::LN_ST_PresetLineDashVal_dot: return "dot";
- case NS_ooxml::LN_ST_PresetLineDashVal_sysDot: return "sysDot";
- case NS_ooxml::LN_ST_PresetLineDashVal_dash: return "dash";
- case NS_ooxml::LN_ST_PresetLineDashVal_sysDash: return "sysDash";
- case NS_ooxml::LN_ST_PresetLineDashVal_lgDash: return "lgDash";
- case NS_ooxml::LN_ST_PresetLineDashVal_dashDot: return "dashDot";
- case NS_ooxml::LN_ST_PresetLineDashVal_sysDashDot: return "sysDashDot";
- case NS_ooxml::LN_ST_PresetLineDashVal_lgDashDot: return "lgDashDot";
- case NS_ooxml::LN_ST_PresetLineDashVal_lgDashDotDot: return "lgDashDotDot";
- case NS_ooxml::LN_ST_PresetLineDashVal_sysDashDotDot: return "sysDashDotDot";
- default: break;
- }
- return OUString();
-}
-
-OUString TextEffectsHandler::getPresetCameraTypeString(sal_Int32 nType)
-{
- switch (nType)
- {
- case NS_ooxml::LN_ST_PresetCameraType_legacyObliqueTopLeft: return "legacyObliqueTopLeft";
- case NS_ooxml::LN_ST_PresetCameraType_legacyObliqueTop: return "legacyObliqueTop";
- case NS_ooxml::LN_ST_PresetCameraType_legacyObliqueTopRight: return "legacyObliqueTopRight";
- case NS_ooxml::LN_ST_PresetCameraType_legacyObliqueLeft: return "legacyObliqueLeft";
- case NS_ooxml::LN_ST_PresetCameraType_legacyObliqueFront: return "legacyObliqueFront";
- case NS_ooxml::LN_ST_PresetCameraType_legacyObliqueRight: return "legacyObliqueRight";
- case NS_ooxml::LN_ST_PresetCameraType_legacyObliqueBottomLeft: return "legacyObliqueBottomLeft";
- case NS_ooxml::LN_ST_PresetCameraType_legacyObliqueBottom: return "legacyObliqueBottom";
- case NS_ooxml::LN_ST_PresetCameraType_legacyObliqueBottomRight: return "legacyObliqueBottomRight";
- case NS_ooxml::LN_ST_PresetCameraType_legacyPerspectiveTopLeft: return "legacyPerspectiveTopLeft";
- case NS_ooxml::LN_ST_PresetCameraType_legacyPerspectiveTop: return "legacyPerspectiveTop";
- case NS_ooxml::LN_ST_PresetCameraType_legacyPerspectiveTopRight: return "legacyPerspectiveTopRight";
- case NS_ooxml::LN_ST_PresetCameraType_legacyPerspectiveLeft: return "legacyPerspectiveLeft";
- case NS_ooxml::LN_ST_PresetCameraType_legacyPerspectiveFront: return "legacyPerspectiveFront";
- case NS_ooxml::LN_ST_PresetCameraType_legacyPerspectiveRight: return "legacyPerspectiveRight";
- case NS_ooxml::LN_ST_PresetCameraType_legacyPerspectiveBottomLeft: return "legacyPerspectiveBottomLeft";
- case NS_ooxml::LN_ST_PresetCameraType_legacyPerspectiveBottom: return "legacyPerspectiveBottom";
- case NS_ooxml::LN_ST_PresetCameraType_legacyPerspectiveBottomRight: return "legacyPerspectiveBottomRight";
- case NS_ooxml::LN_ST_PresetCameraType_orthographicFront: return "orthographicFront";
- case NS_ooxml::LN_ST_PresetCameraType_isometricTopUp: return "isometricTopUp";
- case NS_ooxml::LN_ST_PresetCameraType_isometricTopDown: return "isometricTopDown";
- case NS_ooxml::LN_ST_PresetCameraType_isometricBottomUp: return "isometricBottomUp";
- case NS_ooxml::LN_ST_PresetCameraType_isometricBottomDown: return "isometricBottomDown";
- case NS_ooxml::LN_ST_PresetCameraType_isometricLeftUp: return "isometricLeftUp";
- case NS_ooxml::LN_ST_PresetCameraType_isometricLeftDown: return "isometricLeftDown";
- case NS_ooxml::LN_ST_PresetCameraType_isometricRightUp: return "isometricRightUp";
- case NS_ooxml::LN_ST_PresetCameraType_isometricRightDown: return "isometricRightDown";
- case NS_ooxml::LN_ST_PresetCameraType_isometricOffAxis1Left: return "isometricOffAxis1Left";
- case NS_ooxml::LN_ST_PresetCameraType_isometricOffAxis1Right: return "isometricOffAxis1Right";
- case NS_ooxml::LN_ST_PresetCameraType_isometricOffAxis1Top: return "isometricOffAxis1Top";
- case NS_ooxml::LN_ST_PresetCameraType_isometricOffAxis2Left: return "isometricOffAxis2Left";
- case NS_ooxml::LN_ST_PresetCameraType_isometricOffAxis2Right: return "isometricOffAxis2Right";
- case NS_ooxml::LN_ST_PresetCameraType_isometricOffAxis2Top: return "isometricOffAxis2Top";
- case NS_ooxml::LN_ST_PresetCameraType_isometricOffAxis3Left: return "isometricOffAxis3Left";
- case NS_ooxml::LN_ST_PresetCameraType_isometricOffAxis3Right: return "isometricOffAxis3Right";
- case NS_ooxml::LN_ST_PresetCameraType_isometricOffAxis3Bottom: return "isometricOffAxis3Bottom";
- case NS_ooxml::LN_ST_PresetCameraType_isometricOffAxis4Left: return "isometricOffAxis4Left";
- case NS_ooxml::LN_ST_PresetCameraType_isometricOffAxis4Right: return "isometricOffAxis4Right";
- case NS_ooxml::LN_ST_PresetCameraType_isometricOffAxis4Bottom: return "isometricOffAxis4Bottom";
- case NS_ooxml::LN_ST_PresetCameraType_obliqueTopLeft: return "obliqueTopLeft";
- case NS_ooxml::LN_ST_PresetCameraType_obliqueTop: return "obliqueTop";
- case NS_ooxml::LN_ST_PresetCameraType_obliqueTopRight: return "obliqueTopRight";
- case NS_ooxml::LN_ST_PresetCameraType_obliqueLeft: return "obliqueLeft";
- case NS_ooxml::LN_ST_PresetCameraType_obliqueRight: return "obliqueRight";
- case NS_ooxml::LN_ST_PresetCameraType_obliqueBottomLeft: return "obliqueBottomLeft";
- case NS_ooxml::LN_ST_PresetCameraType_obliqueBottom: return "obliqueBottom";
- case NS_ooxml::LN_ST_PresetCameraType_obliqueBottomRight: return "obliqueBottomRight";
- case NS_ooxml::LN_ST_PresetCameraType_perspectiveFront: return "perspectiveFront";
- case NS_ooxml::LN_ST_PresetCameraType_perspectiveLeft: return "perspectiveLeft";
- case NS_ooxml::LN_ST_PresetCameraType_perspectiveRight: return "perspectiveRight";
- case NS_ooxml::LN_ST_PresetCameraType_perspectiveAbove: return "perspectiveAbove";
- case NS_ooxml::LN_ST_PresetCameraType_perspectiveBelow: return "perspectiveBelow";
- case NS_ooxml::LN_ST_PresetCameraType_perspectiveAboveLeftFacing: return "perspectiveAboveLeftFacing";
- case NS_ooxml::LN_ST_PresetCameraType_perspectiveAboveRightFacing: return "perspectiveAboveRightFacing";
- case NS_ooxml::LN_ST_PresetCameraType_perspectiveContrastingLeftFacing: return "perspectiveContrastingLeftFacing";
- case NS_ooxml::LN_ST_PresetCameraType_perspectiveContrastingRightFacing: return "perspectiveContrastingRightFacing";
- case NS_ooxml::LN_ST_PresetCameraType_perspectiveHeroicLeftFacing: return "perspectiveHeroicLeftFacing";
- case NS_ooxml::LN_ST_PresetCameraType_perspectiveHeroicRightFacing: return "perspectiveHeroicRightFacing";
- case NS_ooxml::LN_ST_PresetCameraType_perspectiveHeroicExtremeLeftFacing: return "perspectiveHeroicExtremeLeftFacing";
- case NS_ooxml::LN_ST_PresetCameraType_perspectiveHeroicExtremeRightFacing: return "perspectiveHeroicExtremeRightFacing";
- case NS_ooxml::LN_ST_PresetCameraType_perspectiveRelaxed: return "perspectiveRelaxed";
- case NS_ooxml::LN_ST_PresetCameraType_perspectiveRelaxedModerately: return "perspectiveRelaxedModerately";
- default: break;
- }
- return OUString();
-}
-
-
-OUString TextEffectsHandler::getLightRigTypeString(sal_Int32 nType)
-{
- switch (nType)
- {
- case NS_ooxml::LN_ST_LightRigType_legacyFlat1: return "legacyFlat1";
- case NS_ooxml::LN_ST_LightRigType_legacyFlat2: return "legacyFlat2";
- case NS_ooxml::LN_ST_LightRigType_legacyFlat3: return "legacyFlat3";
- case NS_ooxml::LN_ST_LightRigType_legacyFlat4: return "legacyFlat4";
- case NS_ooxml::LN_ST_LightRigType_legacyNormal1: return "legacyNormal1";
- case NS_ooxml::LN_ST_LightRigType_legacyNormal2: return "legacyNormal2";
- case NS_ooxml::LN_ST_LightRigType_legacyNormal3: return "legacyNormal3";
- case NS_ooxml::LN_ST_LightRigType_legacyNormal4: return "legacyNormal4";
- case NS_ooxml::LN_ST_LightRigType_legacyHarsh1: return "legacyHarsh1";
- case NS_ooxml::LN_ST_LightRigType_legacyHarsh2: return "legacyHarsh2";
- case NS_ooxml::LN_ST_LightRigType_legacyHarsh3: return "legacyHarsh3";
- case NS_ooxml::LN_ST_LightRigType_legacyHarsh4: return "legacyHarsh4";
- case NS_ooxml::LN_ST_LightRigType_threePt: return "threePt";
- case NS_ooxml::LN_ST_LightRigType_balanced: return "balanced";
- case NS_ooxml::LN_ST_LightRigType_soft: return "soft";
- case NS_ooxml::LN_ST_LightRigType_harsh: return "harsh";
- case NS_ooxml::LN_ST_LightRigType_flood: return "flood";
- case NS_ooxml::LN_ST_LightRigType_contrasting: return "contrasting";
- case NS_ooxml::LN_ST_LightRigType_morning: return "morning";
- case NS_ooxml::LN_ST_LightRigType_sunrise: return "sunrise";
- case NS_ooxml::LN_ST_LightRigType_sunset: return "sunset";
- case NS_ooxml::LN_ST_LightRigType_chilly: return "chilly";
- case NS_ooxml::LN_ST_LightRigType_freezing: return "freezing";
- case NS_ooxml::LN_ST_LightRigType_flat: return "flat";
- case NS_ooxml::LN_ST_LightRigType_twoPt: return "twoPt";
- case NS_ooxml::LN_ST_LightRigType_glow: return "glow";
- case NS_ooxml::LN_ST_LightRigType_brightRoom: return "brightRoom";
- default: break;
- }
- return OUString();
-}
-
-OUString TextEffectsHandler::getLightRigDirectionString(sal_Int32 nType)
-{
- switch (nType)
- {
- case NS_ooxml::LN_ST_LightRigDirection_tl: return "tl";
- case NS_ooxml::LN_ST_LightRigDirection_t: return "t";
- case NS_ooxml::LN_ST_LightRigDirection_tr: return "tr";
- case NS_ooxml::LN_ST_LightRigDirection_l: return "l";
- case NS_ooxml::LN_ST_LightRigDirection_r: return "r";
- case NS_ooxml::LN_ST_LightRigDirection_bl: return "bl";
- case NS_ooxml::LN_ST_LightRigDirection_b: return "b";
- case NS_ooxml::LN_ST_LightRigDirection_br: return "br";
-
- default: break;
- }
- return OUString();
-}
-
-OUString TextEffectsHandler::getBevelPresetTypeString(sal_Int32 nType)
-{
- switch (nType)
- {
- case NS_ooxml::LN_ST_BevelPresetType_relaxedInset: return "relaxedInset";
- case NS_ooxml::LN_ST_BevelPresetType_circle: return "circle";
- case NS_ooxml::LN_ST_BevelPresetType_slope: return "slope";
- case NS_ooxml::LN_ST_BevelPresetType_cross: return "cross";
- case NS_ooxml::LN_ST_BevelPresetType_angle: return "angle";
- case NS_ooxml::LN_ST_BevelPresetType_softRound: return "softRound";
- case NS_ooxml::LN_ST_BevelPresetType_convex: return "convex";
- case NS_ooxml::LN_ST_BevelPresetType_coolSlant: return "coolSlant";
- case NS_ooxml::LN_ST_BevelPresetType_divot: return "divot";
- case NS_ooxml::LN_ST_BevelPresetType_riblet: return "riblet";
- case NS_ooxml::LN_ST_BevelPresetType_hardEdge: return "hardEdge";
- case NS_ooxml::LN_ST_BevelPresetType_artDeco: return "artDeco";
- default: break;
- }
- return OUString();
-}
-
-OUString TextEffectsHandler::getPresetMaterialTypeString(sal_Int32 nType)
-{
- switch (nType)
- {
- case NS_ooxml::LN_ST_PresetMaterialType_legacyMatte: return "legacyMatte";
- case NS_ooxml::LN_ST_PresetMaterialType_legacyPlastic: return "legacyPlastic";
- case NS_ooxml::LN_ST_PresetMaterialType_legacyMetal: return "legacyMetal";
- case NS_ooxml::LN_ST_PresetMaterialType_legacyWireframe: return "legacyWireframe";
- case NS_ooxml::LN_ST_PresetMaterialType_matte: return "matte";
- case NS_ooxml::LN_ST_PresetMaterialType_plastic: return "plastic";
- case NS_ooxml::LN_ST_PresetMaterialType_metal: return "metal";
- case NS_ooxml::LN_ST_PresetMaterialType_warmMatte: return "warmMatte";
- case NS_ooxml::LN_ST_PresetMaterialType_translucentPowder: return "translucentPowder";
- case NS_ooxml::LN_ST_PresetMaterialType_powder: return "powder";
- case NS_ooxml::LN_ST_PresetMaterialType_dkEdge: return "dkEdge";
- case NS_ooxml::LN_ST_PresetMaterialType_softEdge: return "softEdge";
- case NS_ooxml::LN_ST_PresetMaterialType_clear: return "clear";
- case NS_ooxml::LN_ST_PresetMaterialType_flat: return "flat";
- case NS_ooxml::LN_ST_PresetMaterialType_softmetal: return "softmetal";
- case NS_ooxml::LN_ST_PresetMaterialType_none: return "none";
- default: break;
- }
- return OUString();
-}
-
-OUString TextEffectsHandler::getLigaturesString(sal_Int32 nType)
-{
- switch (nType)
- {
- case NS_ooxml::LN_ST_Ligatures_none: return "none";
- case NS_ooxml::LN_ST_Ligatures_standard: return "standard";
- case NS_ooxml::LN_ST_Ligatures_contextual: return "contextual";
- case NS_ooxml::LN_ST_Ligatures_historical: return "historical";
- case NS_ooxml::LN_ST_Ligatures_discretional: return "discretional";
- case NS_ooxml::LN_ST_Ligatures_standardContextual: return "standardContextual";
- case NS_ooxml::LN_ST_Ligatures_standardHistorical: return "standardHistorical";
- case NS_ooxml::LN_ST_Ligatures_contextualHistorical: return "contextualHistorical";
- case NS_ooxml::LN_ST_Ligatures_standardDiscretional: return "standardDiscretional";
- case NS_ooxml::LN_ST_Ligatures_contextualDiscretional: return "contextualDiscretional";
- case NS_ooxml::LN_ST_Ligatures_historicalDiscretional: return "historicalDiscretional";
- case NS_ooxml::LN_ST_Ligatures_standardContextualHistorical: return "standardContextualHistorical";
- case NS_ooxml::LN_ST_Ligatures_standardContextualDiscretional: return "standardContextualDiscretional";
- case NS_ooxml::LN_ST_Ligatures_standardHistoricalDiscretional: return "standardHistoricalDiscretional";
- case NS_ooxml::LN_ST_Ligatures_contextualHistoricalDiscretional: return "contextualHistoricalDiscretional";
- case NS_ooxml::LN_ST_Ligatures_all: return "all";
- default: break;
- }
- return OUString();
-}
-
-OUString TextEffectsHandler::getNumFormString(sal_Int32 nType)
-{
- switch (nType)
- {
- case NS_ooxml::LN_ST_NumForm_default: return "default";
- case NS_ooxml::LN_ST_NumForm_lining: return "lining";
- case NS_ooxml::LN_ST_NumForm_oldStyle: return "oldStyle";
- default: break;
- }
- return OUString();
-}
-
-OUString TextEffectsHandler::getNumSpacingString(sal_Int32 nType)
-{
- switch (nType)
- {
- case NS_ooxml::LN_ST_NumSpacing_default: return "default";
- case NS_ooxml::LN_ST_NumSpacing_proportional: return "proportional";
- case NS_ooxml::LN_ST_NumSpacing_tabular: return "tabular";
- default: break;
- }
- return OUString();
-}
-
-void TextEffectsHandler::convertElementIdToPropertyId(sal_Int32 aElementId)
-{
- switch(aElementId)
- {
- case NS_ooxml::LN_glow_glow:
- maPropertyId = PROP_CHAR_GLOW_TEXT_EFFECT;
- maElementName = "glow";
- break;
- case NS_ooxml::LN_shadow_shadow:
- maPropertyId = PROP_CHAR_SHADOW_TEXT_EFFECT;
- maElementName = "shadow";
- break;
- case NS_ooxml::LN_reflection_reflection:
- maPropertyId = PROP_CHAR_REFLECTION_TEXT_EFFECT;
- maElementName = "reflection";
- break;
- case NS_ooxml::LN_textOutline_textOutline:
- maPropertyId = PROP_CHAR_TEXTOUTLINE_TEXT_EFFECT;
- maElementName = "textOutline";
- break;
- case NS_ooxml::LN_textFill_textFill:
- maPropertyId = PROP_CHAR_TEXTFILL_TEXT_EFFECT;
- maElementName = "textFill";
- break;
- case NS_ooxml::LN_scene3d_scene3d:
- maPropertyId = PROP_CHAR_SCENE3D_TEXT_EFFECT;
- maElementName = "scene3d";
- break;
- case NS_ooxml::LN_props3d_props3d:
- maPropertyId = PROP_CHAR_PROPS3D_TEXT_EFFECT;
- maElementName = "props3d";
- break;
- case NS_ooxml::LN_ligatures_ligatures:
- maPropertyId = PROP_CHAR_LIGATURES_TEXT_EFFECT;
- maElementName = "ligatures";
- break;
- case NS_ooxml::LN_numForm_numForm:
- maPropertyId = PROP_CHAR_NUMFORM_TEXT_EFFECT;
- maElementName = "numForm";
- break;
- case NS_ooxml::LN_numSpacing_numSpacing:
- maPropertyId = PROP_CHAR_NUMSPACING_TEXT_EFFECT;
- maElementName = "numSpacing";
- break;
- case NS_ooxml::LN_stylisticSets_stylisticSets:
- maPropertyId = PROP_CHAR_STYLISTICSETS_TEXT_EFFECT;
- maElementName = "stylisticSets";
- break;
- case NS_ooxml::LN_cntxtAlts_cntxtAlts:
- maPropertyId = PROP_CHAR_CNTXTALTS_TEXT_EFFECT;
- maElementName = "cntxtAlts";
- break;
- default:
- break;
- }
-}
-
-TextEffectsHandler::TextEffectsHandler(sal_uInt32 aElementId) :
- LoggedProperties("TextEffectsHandler")
-{
- convertElementIdToPropertyId(aElementId);
- mpGrabBagStack.reset(new oox::GrabBagStack(maElementName));
-}
-
-TextEffectsHandler::~TextEffectsHandler()
-{
-}
-
-
-void TextEffectsHandler::lcl_attribute(Id aName, Value& aValue)
-{
- if (mpGrabBagStack->getCurrentName() != constAttributesSequenceName)
- mpGrabBagStack->push(constAttributesSequenceName);
-
- switch(aName)
- {
- case NS_ooxml::LN_CT_Percentage_val:
- case NS_ooxml::LN_CT_PositiveFixedPercentage_val:
- case NS_ooxml::LN_CT_PositivePercentage_val:
- mpGrabBagStack->addInt32("val", sal_Int32(aValue.getInt()));
- break;
- case NS_ooxml::LN_CT_Glow_rad:
- mpGrabBagStack->addInt32("rad", sal_Int32(aValue.getInt()));
- break;
- case NS_ooxml::LN_CT_SchemeColor_val:
- {
- OUString aString = getSchemeColorValTypeString(sal_Int32(aValue.getInt()));
- mpGrabBagStack->addString("val", aString);
- }
- break;
- case NS_ooxml::LN_CT_SRgbColor_val:
- {
- OUString aBuffer = OUString::number(aValue.getInt(), 16);
- OUStringBuffer aString;
- comphelper::string::padToLength(aString, 6 - aBuffer.getLength(), '0');
- aString.append(aBuffer.getStr());
- mpGrabBagStack->addString("val", aString.makeStringAndClear().toAsciiUpperCase());
- }
- break;
- case NS_ooxml::LN_CT_Shadow_blurRad:
- case NS_ooxml::LN_CT_Reflection_blurRad:
- mpGrabBagStack->addInt32("blurRad", sal_Int32(aValue.getInt()));
- break;
- case NS_ooxml::LN_CT_Reflection_stA:
- mpGrabBagStack->addInt32("stA", sal_Int32(aValue.getInt()));
- break;
- case NS_ooxml::LN_CT_Reflection_stPos:
- mpGrabBagStack->addInt32("stPos", sal_Int32(aValue.getInt()));
- break;
- case NS_ooxml::LN_CT_Reflection_endA:
- mpGrabBagStack->addInt32("endA", sal_Int32(aValue.getInt()));
- break;
- case NS_ooxml::LN_CT_Reflection_endPos:
- mpGrabBagStack->addInt32("endPos", sal_Int32(aValue.getInt()));
- break;
- case NS_ooxml::LN_CT_Shadow_dist:
- case NS_ooxml::LN_CT_Reflection_dist:
- mpGrabBagStack->addInt32("dist", sal_Int32(aValue.getInt()));
- break;
- case NS_ooxml::LN_CT_Shadow_dir:
- case NS_ooxml::LN_CT_Reflection_dir:
- mpGrabBagStack->addInt32("dir", sal_Int32(aValue.getInt()));
- break;
- case NS_ooxml::LN_CT_Reflection_fadeDir:
- mpGrabBagStack->addInt32("fadeDir", sal_Int32(aValue.getInt()));
- break;
- case NS_ooxml::LN_CT_Shadow_sx:
- case NS_ooxml::LN_CT_Reflection_sx:
- mpGrabBagStack->addInt32("sx", sal_Int32(aValue.getInt()));
- break;
- case NS_ooxml::LN_CT_Shadow_sy:
- case NS_ooxml::LN_CT_Reflection_sy:
- mpGrabBagStack->addInt32("sy", sal_Int32(aValue.getInt()));
- break;
- case NS_ooxml::LN_CT_Shadow_kx:
- case NS_ooxml::LN_CT_Reflection_kx:
- mpGrabBagStack->addInt32("kx", sal_Int32(aValue.getInt()));
- break;
- case NS_ooxml::LN_CT_Shadow_ky:
- case NS_ooxml::LN_CT_Reflection_ky:
- mpGrabBagStack->addInt32("ky", sal_Int32(aValue.getInt()));
- break;
- case NS_ooxml::LN_CT_Shadow_algn:
- case NS_ooxml::LN_CT_Reflection_algn:
- {
- uno::Any aAny = uno::makeAny(getRectAlignmentString(sal_Int32(aValue.getInt())));
- mpGrabBagStack->appendElement("algn", aAny);
- }
- break;
- case NS_ooxml::LN_CT_TextOutlineEffect_w:
- mpGrabBagStack->addInt32("w", sal_Int32(aValue.getInt()));
- break;
- case NS_ooxml::LN_CT_TextOutlineEffect_cap:
- {
- uno::Any aAny = uno::makeAny(getLineCapString(sal_Int32(aValue.getInt())));
- mpGrabBagStack->appendElement("cap", aAny);
- }
- break;
- case NS_ooxml::LN_CT_TextOutlineEffect_cmpd:
- {
- uno::Any aAny = uno::makeAny(getCompoundLineString(sal_Int32(aValue.getInt())));
- mpGrabBagStack->appendElement("cmpd", aAny);
- }
- break;
- case NS_ooxml::LN_CT_TextOutlineEffect_algn:
- {
- uno::Any aAny = uno::makeAny(getPenAlignmentString(sal_Int32(aValue.getInt())));
- mpGrabBagStack->appendElement("algn", aAny);
- }
- break;
- case NS_ooxml::LN_CT_GradientStop_pos:
- mpGrabBagStack->addInt32("pos", sal_Int32(aValue.getInt()));
- break;
- case NS_ooxml::LN_CT_LinearShadeProperties_ang:
- mpGrabBagStack->addInt32("ang", sal_Int32(aValue.getInt()));
- break;
- case NS_ooxml::LN_CT_LinearShadeProperties_scaled:
- {
- uno::Any aAny = uno::makeAny(getOnOffString(sal_Int32(aValue.getInt())));
- mpGrabBagStack->appendElement("scaled", aAny);
- }
- break;
- case NS_ooxml::LN_CT_PathShadeProperties_path:
- {
- uno::Any aAny = uno::makeAny(getPathShadeTypeString(sal_Int32(aValue.getInt())));
- mpGrabBagStack->appendElement("path", aAny);
- }
- break;
- case NS_ooxml::LN_CT_RelativeRect_l:
- mpGrabBagStack->addInt32("l", sal_Int32(aValue.getInt()));
- break;
- case NS_ooxml::LN_CT_RelativeRect_t:
- mpGrabBagStack->addInt32("t", sal_Int32(aValue.getInt()));
- break;
- case NS_ooxml::LN_CT_RelativeRect_r:
- mpGrabBagStack->addInt32("r", sal_Int32(aValue.getInt()));
- break;
- case NS_ooxml::LN_CT_RelativeRect_b:
- mpGrabBagStack->addInt32("b", sal_Int32(aValue.getInt()));
- break;
- case NS_ooxml::LN_CT_PresetLineDashProperties_val:
- {
- uno::Any aAny = uno::makeAny(getPresetLineDashValString(sal_Int32(aValue.getInt())));
- mpGrabBagStack->appendElement("val", aAny);
- }
- break;
- case NS_ooxml::LN_CT_LineJoinMiterProperties_lim:
- mpGrabBagStack->addInt32("lim", sal_Int32(aValue.getInt()));
- break;
- case NS_ooxml::LN_CT_Camera_prst:
- {
- uno::Any aAny = uno::makeAny(getPresetCameraTypeString(sal_Int32(aValue.getInt())));
- mpGrabBagStack->appendElement("prst", aAny);
- }
- break;
- case NS_ooxml::LN_CT_LightRig_rig:
- {
- uno::Any aAny = uno::makeAny(getLightRigTypeString(sal_Int32(aValue.getInt())));
- mpGrabBagStack->appendElement("rig", aAny);
- }
- break;
- case NS_ooxml::LN_CT_LightRig_dir:
- {
- uno::Any aAny = uno::makeAny(getLightRigDirectionString(sal_Int32(aValue.getInt())));
- mpGrabBagStack->appendElement("dir", aAny);
- }
- break;
- case NS_ooxml::LN_CT_SphereCoords_lat:
- mpGrabBagStack->addInt32("lat", sal_Int32(aValue.getInt()));
- break;
- case NS_ooxml::LN_CT_SphereCoords_lon:
- mpGrabBagStack->addInt32("lon", sal_Int32(aValue.getInt()));
- break;
- case NS_ooxml::LN_CT_SphereCoords_rev:
- mpGrabBagStack->addInt32("rev", sal_Int32(aValue.getInt()));
- break;
- case NS_ooxml::LN_CT_Props3D_extrusionH:
- mpGrabBagStack->addInt32("extrusionH", sal_Int32(aValue.getInt()));
- break;
- case NS_ooxml::LN_CT_Props3D_contourW:
- mpGrabBagStack->addInt32("contourW", sal_Int32(aValue.getInt()));
- break;
- case NS_ooxml::LN_CT_Props3D_prstMaterial:
- {
- uno::Any aAny = uno::makeAny(getPresetMaterialTypeString(sal_Int32(aValue.getInt())));
- mpGrabBagStack->appendElement("prstMaterial", aAny);
- }
- break;
- case NS_ooxml::LN_CT_Bevel_w:
- mpGrabBagStack->addInt32("w", sal_Int32(aValue.getInt()));
- break;
- case NS_ooxml::LN_CT_Bevel_h:
- mpGrabBagStack->addInt32("h", sal_Int32(aValue.getInt()));
- break;
- case NS_ooxml::LN_CT_Bevel_prst:
- {
- uno::Any aAny = uno::makeAny(getBevelPresetTypeString(sal_Int32(aValue.getInt())));
- mpGrabBagStack->appendElement("prst", aAny);
- }
- break;
- case NS_ooxml::LN_CT_Ligatures_val:
- {
- uno::Any aAny = uno::makeAny(getLigaturesString(sal_Int32(aValue.getInt())));
- mpGrabBagStack->appendElement("val", aAny);
- }
- break;
- case NS_ooxml::LN_CT_NumForm_val:
- {
- uno::Any aAny = uno::makeAny(getNumFormString(sal_Int32(aValue.getInt())));
- mpGrabBagStack->appendElement("val", aAny);
- }
- break;
- case NS_ooxml::LN_CT_NumSpacing_val:
- {
- uno::Any aAny = uno::makeAny(getNumSpacingString(sal_Int32(aValue.getInt())));
- mpGrabBagStack->appendElement("val", aAny);
- }
- break;
- case NS_ooxml::LN_CT_StyleSet_id:
- mpGrabBagStack->addInt32("id", sal_Int32(aValue.getInt()));
- break;
- case NS_ooxml::LN_CT_StyleSet_val:
- case NS_ooxml::LN_CT_OnOff_val:
- {
- uno::Any aAny = uno::makeAny(getOnOffString(sal_Int32(aValue.getInt())));
- mpGrabBagStack->appendElement("val", aAny);
- }
- break;
- default:
- break;
- }
-}
-
-void TextEffectsHandler::lcl_sprm(Sprm& rSprm)
-{
- if (mpGrabBagStack->getCurrentName() == constAttributesSequenceName)
- mpGrabBagStack->pop();
-
- sal_uInt32 nSprmId = rSprm.getId();
- OUString aElementName = lclGetNameForElementId(nSprmId);
- if(aElementName.isEmpty())
- {
- // Element is unknown -> leave.
- return;
- }
-
- mpGrabBagStack->push(aElementName);
-
- writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
- if( !pProperties )
- return;
-
- pProperties->resolve( *this );
-
- if (mpGrabBagStack->getCurrentName() == constAttributesSequenceName)
- mpGrabBagStack->pop();
-
- mpGrabBagStack->pop();
-}
-
-beans::PropertyValue TextEffectsHandler::getInteropGrabBag()
-{
- beans::PropertyValue aReturn = mpGrabBagStack->getRootProperty();
- mpGrabBagStack.reset();
- return aReturn;
-}
-
-sal_uInt8 TextEffectsHandler::GetTextFillSolidFillAlpha(const css::beans::PropertyValue& rValue)
-{
- if (rValue.Name != "textFill")
- {
- return 0;
- }
-
- uno::Sequence<beans::PropertyValue> aPropertyValues;
- rValue.Value >>= aPropertyValues;
- comphelper::SequenceAsHashMap aMap(aPropertyValues);
- auto it = aMap.find("solidFill");
- if (it == aMap.end())
- {
- return 0;
- }
-
- comphelper::SequenceAsHashMap aSolidFillMap(it->second);
- it = aSolidFillMap.find("srgbClr");
- if (it == aSolidFillMap.end())
- {
- return 0;
- }
-
- comphelper::SequenceAsHashMap aSrgbClrMap(it->second);
- it = aSrgbClrMap.find("alpha");
- if (it == aSrgbClrMap.end())
- {
- return 0;
- }
-
- comphelper::SequenceAsHashMap aAlphaMap(it->second);
- it = aAlphaMap.find("attributes");
- if (it == aAlphaMap.end())
- {
- return 0;
- }
-
- comphelper::SequenceAsHashMap aAttributesMap(it->second);
- it = aAttributesMap.find("val");
- if (it == aAttributesMap.end())
- {
- return 0;
- }
- sal_Int32 nVal = 0;
- it->second >>= nVal;
- return nVal / oox::drawingml::PER_PERCENT;
-}
-
-} // namespace
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/TextEffectsHandler.hxx b/writerfilter/source/dmapper/TextEffectsHandler.hxx
deleted file mode 100644
index d7df31d85515..000000000000
--- a/writerfilter/source/dmapper/TextEffectsHandler.hxx
+++ /dev/null
@@ -1,72 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- */
-
-#ifndef INCLUDED_WRITERFILTER_SOURCE_DMAPPER_TEXTEFFECTSHANDLER_HXX
-#define INCLUDED_WRITERFILTER_SOURCE_DMAPPER_TEXTEFFECTSHANDLER_HXX
-
-#include "LoggedResources.hxx"
-
-#include <com/sun/star/beans/PropertyValue.hpp>
-
-#include "PropertyIds.hxx"
-
-#include <oox/helper/grabbagstack.hxx>
-
-#include <memory>
-#include <optional>
-
-namespace writerfilter::dmapper
-{
-/// Class to process all text effects like glow, textOutline, ...
-class TextEffectsHandler : public LoggedProperties
-{
-private:
- std::optional<PropertyIds> maPropertyId;
- OUString maElementName;
- std::unique_ptr<oox::GrabBagStack> mpGrabBagStack;
-
- void convertElementIdToPropertyId(sal_Int32 aElementId);
-
- // LoggedProperties
- virtual void lcl_attribute(Id aName, Value& aValue) override;
- virtual void lcl_sprm(Sprm& sprm) override;
-
-public:
- explicit TextEffectsHandler(sal_uInt32 aElementId);
- virtual ~TextEffectsHandler() override;
-
- const std::optional<PropertyIds>& getGrabBagPropertyId() const { return maPropertyId; }
-
- css::beans::PropertyValue getInteropGrabBag();
-
- static OUString getSchemeColorValTypeString(sal_Int32 nType);
- static OUString getRectAlignmentString(sal_Int32 nType);
- static OUString getLineCapString(sal_Int32 nType);
- static OUString getCompoundLineString(sal_Int32 nType);
- static OUString getPenAlignmentString(sal_Int32 nType);
- static OUString getOnOffString(sal_Int32 nType);
- static OUString getPathShadeTypeString(sal_Int32 nType);
- static OUString getPresetLineDashValString(sal_Int32 nType);
- static OUString getPresetCameraTypeString(sal_Int32 nType);
- static OUString getLightRigTypeString(sal_Int32 nType);
- static OUString getLightRigDirectionString(sal_Int32 nType);
- static OUString getBevelPresetTypeString(sal_Int32 nType);
- static OUString getPresetMaterialTypeString(sal_Int32 nType);
- static OUString getLigaturesString(sal_Int32 nType);
- static OUString getNumFormString(sal_Int32 nType);
- static OUString getNumSpacingString(sal_Int32 nType);
-
- static sal_uInt8 GetTextFillSolidFillAlpha(const css::beans::PropertyValue& rValue);
-};
-}
-
-#endif // INCLUDED_WRITERFILTER_SOURCE_DMAPPER_TEXTEFFECTSHANDLER_HXX
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/ThemeTable.cxx b/writerfilter/source/dmapper/ThemeTable.cxx
deleted file mode 100644
index ffa2262cdecc..000000000000
--- a/writerfilter/source/dmapper/ThemeTable.cxx
+++ /dev/null
@@ -1,564 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * 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 .
- */
-
-#include "TagLogger.hxx"
-#include "ThemeTable.hxx"
-#include <i18nlangtag/languagetag.hxx>
-#include <ooxml/resourceids.hxx>
-
-#include <map>
-
-using namespace com::sun::star;
-
-namespace writerfilter::dmapper
-{
-
-struct ThemeTable_Impl
-{
- ThemeTable_Impl() :
- m_currentThemeFontId(0),
- m_currentFontThemeEntry(),
- m_supplementalFontId(0)
- {}
- std::map<sal_uInt32, std::map<sal_uInt32, OUString> > m_themeFontMap;
- sal_uInt32 m_currentThemeFontId;
- std::map<sal_uInt32, OUString> m_currentFontThemeEntry;
- OUString m_supplementalFontName;
- sal_uInt32 m_supplementalFontId;
- OUString m_themeFontLangEastAsia;
- OUString m_themeFontLangBidi;
-};
-
-ThemeTable::ThemeTable()
-: LoggedProperties("ThemeTable")
-, LoggedTable("ThemeTable")
-, m_pImpl( new ThemeTable_Impl )
-{
-
-}
-
-ThemeTable::~ThemeTable()
-{
-}
-
-void ThemeTable::lcl_attribute(Id Name, Value & val)
-{
- OUString sValue = val.getString();
- switch(Name)
- {
- case NS_ooxml::LN_CT_TextFont_typeface:
- if (!sValue.isEmpty())
- m_pImpl->m_currentFontThemeEntry[m_pImpl->m_currentThemeFontId] = sValue;
- break;
- case NS_ooxml::LN_CT_SupplementalFont_script:
- if (!sValue.isEmpty())
- {
- if (sValue == m_pImpl->m_themeFontLangBidi)
- m_pImpl->m_supplementalFontId = NS_ooxml::LN_CT_FontCollection_cs;
- else if (sValue == m_pImpl->m_themeFontLangEastAsia)
- m_pImpl->m_supplementalFontId = NS_ooxml::LN_CT_FontCollection_ea;
- }
- break;
- case NS_ooxml::LN_CT_SupplementalFont_typeface:
- if (!sValue.isEmpty())
- m_pImpl->m_supplementalFontName = sValue;
- break;
- default:
- {
-#ifdef DBG_UTIL
- TagLogger::getInstance().element("unhandled");
-#endif
- }
- }
- if(m_pImpl->m_supplementalFontId && m_pImpl->m_supplementalFontName.getLength() > 0)
- {
- m_pImpl->m_currentFontThemeEntry[m_pImpl->m_supplementalFontId] = m_pImpl->m_supplementalFontName;
- m_pImpl->m_supplementalFontName.clear();
- m_pImpl->m_supplementalFontId = 0;
- }
-}
-
-void ThemeTable::lcl_sprm(Sprm& rSprm)
-{
-#ifdef DBG_UTIL
- TagLogger::getInstance().startElement("ThemeTable.sprm");
- TagLogger::getInstance().chars(rSprm.toString());
-#endif
-
- m_pImpl->m_supplementalFontName.clear();
- m_pImpl->m_supplementalFontId = 0;
-
- sal_uInt32 nSprmId = rSprm.getId();
- switch(nSprmId)
- {
- case NS_ooxml::LN_CT_BaseStyles_fontScheme:
- {
- writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
- if( pProperties )
- pProperties->resolve(*this);
- }
- break;
- case NS_ooxml::LN_CT_FontScheme_majorFont:
- case NS_ooxml::LN_CT_FontScheme_minorFont:
- {
- writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
- m_pImpl->m_currentFontThemeEntry = std::map<sal_uInt32, OUString>();
- if( pProperties )
- pProperties->resolve(*this);
- m_pImpl->m_themeFontMap[nSprmId] = m_pImpl->m_currentFontThemeEntry;
- }
- break;
- case NS_ooxml::LN_CT_FontCollection_latin:
- case NS_ooxml::LN_CT_FontCollection_ea:
- case NS_ooxml::LN_CT_FontCollection_cs:
- {
- m_pImpl->m_currentThemeFontId = nSprmId;
- writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
- if( pProperties )
- pProperties->resolve(*this);
- }
- break;
- case NS_ooxml::LN_CT_FontCollection_font:
- {
- writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
- if (pProperties )
- pProperties->resolve(*this);
- }
- break;
- default:
- {
-#ifdef DBG_UTIL
- TagLogger::getInstance().element("unhandled");
-#endif
- }
- }
-#ifdef DBG_UTIL
- TagLogger::getInstance().endElement();
-#endif
-}
-
-void ThemeTable::lcl_entry(writerfilter::Reference<Properties>::Pointer_t ref)
-{
-#ifdef DBG_UTIL
- TagLogger::getInstance().startElement("ThemeTable.entry");
-#endif
-
- ref->resolve(*this);
-
-#ifdef DBG_UTIL
- TagLogger::getInstance().endElement();
-#endif
-}
-
-OUString ThemeTable::getStringForTheme(const Id id)
-{
- switch (id)
- {
- case NS_ooxml::LN_Value_ST_Theme_majorEastAsia:
- return "majorEastAsia";
- case NS_ooxml::LN_Value_ST_Theme_majorBidi:
- return "majorBidi";
- case NS_ooxml::LN_Value_ST_Theme_majorAscii:
- return "majorAscii";
- case NS_ooxml::LN_Value_ST_Theme_majorHAnsi:
- return "majorHAnsi";
- case NS_ooxml::LN_Value_ST_Theme_minorEastAsia:
- return "minorEastAsia";
- case NS_ooxml::LN_Value_ST_Theme_minorBidi:
- return "minorBidi";
- case NS_ooxml::LN_Value_ST_Theme_minorAscii:
- return "minorAscii";
- case NS_ooxml::LN_Value_ST_Theme_minorHAnsi:
- return "minorHAnsi";
- }
- return OUString();
-}
-OUString ThemeTable::getFontNameForTheme(const Id id) const
-{
- std::map<sal_uInt32, OUString> tmpThemeFontMap;
- switch (id)
- {
- case NS_ooxml::LN_Value_ST_Theme_majorEastAsia:
- case NS_ooxml::LN_Value_ST_Theme_majorBidi:
- case NS_ooxml::LN_Value_ST_Theme_majorAscii:
- case NS_ooxml::LN_Value_ST_Theme_majorHAnsi:
- tmpThemeFontMap = m_pImpl->m_themeFontMap[NS_ooxml::LN_CT_FontScheme_majorFont];
- break;
- case NS_ooxml::LN_Value_ST_Theme_minorEastAsia:
- case NS_ooxml::LN_Value_ST_Theme_minorBidi:
- case NS_ooxml::LN_Value_ST_Theme_minorAscii:
- case NS_ooxml::LN_Value_ST_Theme_minorHAnsi:
- tmpThemeFontMap = m_pImpl->m_themeFontMap[NS_ooxml::LN_CT_FontScheme_minorFont];
- break;
- default:
- return OUString();
- }
-
- switch (id)
- {
- case NS_ooxml::LN_Value_ST_Theme_majorAscii:
- case NS_ooxml::LN_Value_ST_Theme_majorHAnsi:
- case NS_ooxml::LN_Value_ST_Theme_minorAscii:
- case NS_ooxml::LN_Value_ST_Theme_minorHAnsi:
- {
- std::map<sal_uInt32, OUString>::const_iterator Iter = tmpThemeFontMap.find(NS_ooxml::LN_CT_FontCollection_latin);
- if (Iter != tmpThemeFontMap.end())
- return Iter->second;
- return OUString();
- }
- case NS_ooxml::LN_Value_ST_Theme_majorBidi:
- case NS_ooxml::LN_Value_ST_Theme_minorBidi:
- {
- std::map<sal_uInt32, OUString>::const_iterator Iter = tmpThemeFontMap.find(NS_ooxml::LN_CT_FontCollection_cs);
- if (Iter != tmpThemeFontMap.end())
- return Iter->second;
- return OUString();
- }
- case NS_ooxml::LN_Value_ST_Theme_majorEastAsia:
- case NS_ooxml::LN_Value_ST_Theme_minorEastAsia:
- {
- std::map<sal_uInt32, OUString>::const_iterator Iter = tmpThemeFontMap.find(NS_ooxml::LN_CT_FontCollection_ea);
- if (Iter != tmpThemeFontMap.end())
- return Iter->second;
- return OUString();
- }
- default:
- return OUString();
- }
-}
-
-void ThemeTable::setThemeFontLangProperties(const uno::Sequence<beans::PropertyValue>& aPropSeq)
-{
- for (const auto& rProp : aPropSeq)
- {
- OUString sLocaleName;
- rProp.Value >>= sLocaleName;
- if (rProp.Name == "eastAsia")
- m_pImpl->m_themeFontLangEastAsia = fromLocaleToScriptTag(sLocaleName);
- if (rProp.Name == "bidi")
- m_pImpl->m_themeFontLangBidi = fromLocaleToScriptTag(sLocaleName);
-
- }
-}
-
-OUString ThemeTable::fromLocaleToScriptTag(const OUString& sLocale)
-{
- return fromLCIDToScriptTag(LanguageTag::convertToLanguageType(sLocale));
-}
-
-OUString ThemeTable::fromLCIDToScriptTag(LanguageType lang)
-{
- // conversion list from:
- // http://blogs.msdn.com/b/officeinteroperability/archive/2013/04/22/office-open-xml-themes-schemes-and-fonts.aspx
- switch (static_cast<sal_uInt16>(lang))
- {
- case 0x429 : // lidFarsi
- case 0x401 : // lidArabic
- case 0x801 : // lidIraq
- case 0xc01 : // lidEgyptian
- case 0x1001 : // lidLibya
- case 0x1401 : // lidAlgerian
- case 0x1801 : // lidMorocco
- case 0x1c01 : // lidTunisia
- case 0x2001 : // lidOman
- case 0x2401 : // lidYemen
- case 0x2801 : // lidSyria
- case 0x2c01 : // lidJordan
- case 0x3001 : // lidLebanon
- case 0x3401 : // lidKuwait
- case 0x3801 : // lidUAE
- case 0x3c01 : // lidBahrain
- case 0x4001 : // lidQatar
- case 0x420 : // lidUrdu
- case 0x846 : // lidPunjabiPakistan
- case 0x859 : // lidSindhiPakistan
- case 0x45f : // lidTamazight
- case 0x460 : // lidKashmiri
- case 0x463 : // lidPashto
- case 0x48c : // lidDari
- return "Arab";
- case 0x42b : // lidArmenian
- return "Armn";
- case 0x445 : // lidBengali
- case 0x845 : // lidBengaliBangladesh
- case 0x44d : // lidAssamese
- case 0x458 : // lidManipuri
- return "Beng";
- case 0x45d : // lidInuktitut
- return "Cans";
- case 0x45c : // lidCherokee
- return "Cher";
- case 0x419 : // lidRussian
- case 0x402 : // lidBulgarian
- case 0x281a : // lidSerbianCyrillic
- case 0x422 : // lidUkranian
- case 0x819 : // lidRussianMoldavia
- case 0xc1a : // lidSerbianCyrillicSerbMont
- case 0x1c1a : // lidSerbianBosniaHerzegovinaCyrillic
- case 0x201a : // lidBosnianBosniaHerzegovinaCyrillic
- case 0x301a : // lidSerbianMontenegroCyrillic
- case 0x423 : // lidByelorussian
- case 0x428 : // lidTajik
- case 0x82c : // lidAzeriCyrillic
- case 0x42f : // lidMacedonian
- case 0x43f : // lidKazakh
- case 0x440 : // lidKyrgyz
- case 0x843 : // lidUzbekCyrillic
- case 0x444 : // lidTatar
- case 0x450 : // lidMongolian
- case 0x46d : // lidBashkir
- case 0x485 : // lidSakha
- return "Cyrl";
- case 0x439 : // lidHindi
- case 0x44e : // lidMarathi
- case 0x44f : // lidSanskrit
- case 0x457 : // lidKonkani
- case 0x459 : // lidSindhi
- case 0x860 : // lidKashmiriIndia
- case 0x461 : // lidNepali
- case 0x861 : // lidNepaliIndia
- return "Deva";
- case 0x45e : // lidAmharic
- case 0x473 : // lidTigrignaEthiopic
- case 0x873 : // lidTigrignaEritrea
- return "Ethi";
- case 0x437 : // lidGeorgian
- return "Geor";
- case 0x408 : // lidGreek
- return "Grek";
- case 0x447 : // lidGujarati
- return "Gujr";
- case 0x446 : // lidPunjabi
- return "Guru";
- case 0x412 : // lidKoreanExtWansung
- return "Hang";
- case 0x804 : // lidChineseSimp
- case 0x1004 : // lidSingapore
- return "Hans";
- case 0x404 : // lidChineseTrad
- case 0xc04 : // lidHongkong
- case 0x1404 : // lidMacau
- return "Hant";
- case 0x40d : // lidHebrew
- case 0x43d : // lidYiddish
- return "Hebr";
- case 0x411 : // lidJapanese
- return "Jpan";
- case 0x453 : // lidKhmer
- return "Khmr";
- case 0x44b : // lidKannada
- return "Knda";
- case 0x454 : // lidLao
- return "Laoo";
- case 0x409 : // lidAmerican
- case 0xc09 : // lidAustralian
- case 0x809 : // lidBritish
- case 0x1009 : // lidEnglishCanadian
- case 0x403 : // lidCatalan
- case 0x406 : // lidDanish
- case 0x413 : // lidDutch
- case 0x813 : // lidDutchBelgian
- case 0x479 : // lidPapiamentu
- case 0x40b : // lidFinnish
- case 0x40c : // lidFrench
- case 0xc0c : // lidFrenchCanadian
- case 0x407 : // lidGerman
- case 0x807 : // lidSwissGerman
- case 0xc07 : // lidAustrianGerman
- case 0x1007 : // lidGermanLuxembourg
- case 0x1407 : // lidGermanLiechtenstein
- case 0x410 : // lidItalian
- case 0x414 : // lidNorskBokmal
- case 0x814 : // lidNorskNynorsk
- case 0x416 : // lidPortBrazil
- case 0x816 : // lidPortIberian
- case 0x40a : // lidSpanish
- case 0x41d : // lidSwedish
- case 0x405 : // lidCzech
- case 0x40e : // lidHungarian
- case 0x415 : // lidPolish
- case 0x41f : // lidTurkish
- case 0x42d : // lidBasque
- case 0x424 : // lidSlovenian
- case 0x426 : // lidLatvian
- case 0x427 : // lidLithuanian
- case 0x418 : // lidRomanian
- case 0x818 : // lidRomanianMoldavia
- case 0x241a : // lidSerbianLatin
- case 0x41a : // lidCroatian, lidCroat
- case 0x491 : // lidGaelicScots
- case 0x83c : // lidGaelicIrish
- case 0x430 : // lidSutu
- case 0x431 : // lidTsonga
- case 0x432 : // lidTswana
- case 0x433 : // lidVenda
- case 0x434 : // lidXhosa
- case 0x435 : // lidZulu
- case 0x436 : // lidAfrikaans
- case 0x425 : // lidEstonian
- case 0x456 : // lidGalician
- case 0x41b : // lidSlovak
- case 0x1409 : // lidEnglishNewZealand
- case 0x1809 : // lidEnglishIreland
- case 0x1c09 : // lidEnglishSouthAfrica
- case 0x2009 : // lidEnglishJamaica
- case 0x2409 : // lidEnglishCaribbean
- case 0x2809 : // lidEnglishBelize
- case 0x2c09 : // lidEnglishTrinidad
- case 0x3009 : // lidEnglishZimbabwe
- case 0x3409 : // lidEnglishPhilippines
- case 0x3809 : // lidEnglishIndonesia
- case 0x3c09 : // lidEnglishHongKong
- case 0x4009 : // lidEnglishIndia
- case 0x4409 : // lidEnglishMalaysia
- case 0x4809 : // lidEnglishSingapore
- case 0x80a : // lidSpanishMexican, lidMexican
- case 0xc0a : // lidSpanishModern
- case 0x100a : // lidGuatemala
- case 0x140a : // lidCostaRica
- case 0x180a : // lidPanama
- case 0x1c0a : // lidDominicanRepublic
- case 0x200a : // lidSpanishSA, lidVenezuela
- case 0x240a : // lidColombia
- case 0x280a : // lidPeru
- case 0x2c0a : // lidArgentina
- case 0x300a : // lidEcuador
- case 0x340a : // lidChile
- case 0x380a : // lidUruguay
- case 0x3c0a : // lidParguay
- case 0x400a : // lidBolivia
- case 0x440a : // lidElSalvador
- case 0x480a : // lidHonduras
- case 0x4c0a : // lidNicaragua
- case 0x500a : // lidPuertoRico
- case 0x540a : // lidSpanishUS
- case 0x80c : // lidFrenchBelgian
- case 0x100c : // lidFrenchSwiss
- case 0x140c : // lidFrenchLuxembourg
- case 0x180c : // lidFrenchMonaco
- case 0x1c0c : // lidFrenchWestIndies
- case 0x200c : // lidFrenchReunion
- case 0x240c : // lidFrenchCongoDRC, lidFrenchZaire
- case 0x280c : // lidFrenchSenegal
- case 0x2c0c : // lidFrenchCameroon
- case 0x300c : // lidFrenchCotedIvoire
- case 0x340c : // lidFrenchMali
- case 0x3c0c : // lidFrenchHaiti
- case 0x380c : // lidFrenchMorocco
- case 0x40f : // lidIcelandic
- case 0x810 : // lidItalianSwiss
- case 0x417 : // lidRhaetoRomanic, lidRomanic
- case 0x81a : // lidSerbianLatinSerbMont, lidCroatSerbo
- case 0x101a : // lidBosniaHerzegovina
- case 0x141a : // lidBosnianBosniaHerzegovinaLatin
- case 0x181a : // lidSerbianBosniaHerzegovinaLatin
- case 0x2c1a : // lidSerbianMontenegroLatin
- case 0x41c : // lidAlbanian
- case 0x81d : // lidSwedishFinland
- case 0x421 : // lidBahasa, lidIndonesian
- case 0x42c : // lidAzeriLatin
- case 0x42e : // lidSorbian
- case 0x82e : // lidLowerSorbian
- case 0x438 : // lidFaeroese
- case 0x43a : // lidMaltese
- case 0x43b : // lidSamiLappish
- case 0x83b : // lidNorthSamiSwe
- case 0xc3b : // lidNorthernSamiFi
- case 0x103b : // lidLuleSamiNor
- case 0x143b : // lidLuleSamiSwe
- case 0x183b : // lidSouthSamiNor
- case 0x1c3b : // lidSouthSamiSwe
- case 0x203b : // lidSkoltSami
- case 0x243b : // lidInariSami
- case 0x43e : // lidMalaysian
- case 0x83e : // lidMalayBrunei
- case 0x441 : // lidSwahili
- case 0x442 : // lidTurkmen
- case 0x443 : // lidUzbekLatin
- case 0x452 : // lidWelsh
- case 0x85d : // lidInuktitutLatin
- case 0x85f : // lidTamazightLatin
- case 0x462 : // lidFrisian
- case 0x464 : // lidFilipino
- case 0x466 : // lidEdo
- case 0x467 : // lidFulfulde
- case 0x468 : // lidHausa
- case 0x469 : // lidIbibio
- case 0x46a : // lidYoruba
- case 0x46b : // lidQuechuaBol
- case 0x86b : // lidQuechuaEcu
- case 0xc6b : // lidQuechuaPe
- case 0x46c : // lidSesothoSaLeboa
- case 0x46e : // lidLuxembourgish
- case 0x46f : // lidGreenlandic
- case 0x470 : // lidIgbo
- case 0x471 : // lidKanuri
- case 0x472 : // lidOromo
- case 0x474 : // lidGuarani
- case 0x475 : // lidHawaiian
- case 0x476 : // lidLatin
- case 0x477 : // lidSomali
- case 0x47a : // lidMapudungun
- case 0x47c : // lidMohawk
- case 0x47e : // lidBreton
- case 0x481 : // lidMaori
- case 0x482 : // lidOccitan
- case 0x483 : // lidCorsican
- case 0x484 : // lidAlsatian
- case 0x486 : // lidKiche
- case 0x487 : // lidKinyarwanda
- case 0x488 : // lidWolof
- return "Latn";
- case 0x44c : // lidMalayalam
- return "Mlym";
- case 0x850 : // lidMongolianMongo
- return "Mong";
- case 0x455 : // lidBurmese
- return "Mymr";
- case 0x448 : // lidOriya
- return "Orya";
- case 0x45b : // lidSinhalese
- return "Sinh";
- case 0x45a : // lidSyriac
- return "Syrc";
- case 0x449 : // lidTamil
- return "Taml";
- case 0x44a : // lidTelugu
- return "Telu";
- case 0x465 : // lidMaldivian
- return "Thaa";
- case 0x41e : // lidThai
- return "Thai";
- case 0x451 : // lidTibetan
- case 0x851 : // lidBhutanese
- return "Tibt";
- case 0x480 : // lidUighur
- return "Uigh";
- case 0x42a : // lidVietnamese
- return "Viet";
- case 0x478 : // lidYi
- return "Yiii";
- default:
- return OUString();
- }
-}
-
-} //namespace writerfilter
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/ThemeTable.hxx b/writerfilter/source/dmapper/ThemeTable.hxx
deleted file mode 100644
index eed737020247..000000000000
--- a/writerfilter/source/dmapper/ThemeTable.hxx
+++ /dev/null
@@ -1,61 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * 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 .
- */
-
-#ifndef INCLUDED_WRITERFILTER_SOURCE_DMAPPER_THEMETABLE_HXX
-#define INCLUDED_WRITERFILTER_SOURCE_DMAPPER_THEMETABLE_HXX
-
-#include "LoggedResources.hxx"
-#include <com/sun/star/beans/PropertyValue.hpp>
-#include <i18nlangtag/lang.h>
-#include <memory>
-
-namespace writerfilter::dmapper
-{
-struct ThemeTable_Impl;
-
-class ThemeTable : public LoggedProperties, public LoggedTable
-{
- std::unique_ptr<ThemeTable_Impl> m_pImpl;
-
-public:
- ThemeTable();
- virtual ~ThemeTable() override;
-
- OUString getFontNameForTheme(const Id id) const;
- static OUString getStringForTheme(const Id id);
- void setThemeFontLangProperties(const css::uno::Sequence<css::beans::PropertyValue>& aPropSeq);
-
-private:
- // Properties
- virtual void lcl_attribute(Id Name, Value& val) override;
- virtual void lcl_sprm(Sprm& sprm) override;
-
- // Table
- virtual void lcl_entry(writerfilter::Reference<Properties>::Pointer_t ref) override;
-
- // Helper methods
- static OUString fromLocaleToScriptTag(const OUString& sLocale);
- static OUString fromLCIDToScriptTag(LanguageType lang);
-};
-typedef tools::SvRef<ThemeTable> ThemeTablePtr;
-}
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/TrackChangesHandler.cxx b/writerfilter/source/dmapper/TrackChangesHandler.cxx
deleted file mode 100644
index 212f88261c4a..000000000000
--- a/writerfilter/source/dmapper/TrackChangesHandler.cxx
+++ /dev/null
@@ -1,95 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-#include "TrackChangesHandler.hxx"
-#include "PropertyMap.hxx"
-#include "ConversionHelper.hxx"
-#include <ooxml/resourceids.hxx>
-#include <oox/token/tokens.hxx>
-#include <osl/diagnose.h>
-
-namespace writerfilter::dmapper {
-
-using namespace ::com::sun::star;
-using namespace oox;
-
-
-TrackChangesHandler::TrackChangesHandler( sal_Int32 nToken ) :
- LoggedProperties("TrackChangesHandler"),
- m_pRedlineParams(new RedlineParams)
-{
- m_pRedlineParams->m_nToken = nToken;
-}
-
-
-TrackChangesHandler::~TrackChangesHandler()
-{
-}
-
-
-void TrackChangesHandler::lcl_attribute(Id rName, Value & rVal)
-{
- OUString sStringValue = rVal.getString();
- switch( rName )
- {
- case NS_ooxml::LN_CT_TrackChange_author:
- {
- m_pRedlineParams->m_sAuthor = sStringValue;
- }
- break;
- case NS_ooxml::LN_CT_TrackChange_date:
- {
- m_pRedlineParams->m_sDate = sStringValue;
- }
- break;
- case NS_ooxml::LN_CT_Markup_id:
- break;
- default:
- OSL_FAIL( "unknown attribute");
- }
-}
-
-uno::Sequence<beans::PropertyValue> TrackChangesHandler::getRedlineProperties() const
-{
- uno::Sequence< beans::PropertyValue > aRedlineProperties(3);
- beans::PropertyValue* pRedlineProperties = aRedlineProperties.getArray();
-
- OUString sType;
- switch ( m_pRedlineParams->m_nToken & 0xffff )
- {
- case XML_tableRowInsert:
- sType = getPropertyName( PROP_TABLE_ROW_INSERT );
- break;
- case XML_tableRowDelete:
- sType = getPropertyName( PROP_TABLE_ROW_DELETE );
- break;
- case XML_tableCellInsert:
- sType = getPropertyName( PROP_TABLE_CELL_INSERT );
- break;
- case XML_tableCellDelete:
- sType = getPropertyName( PROP_TABLE_CELL_DELETE );
- break;
- }
-
- pRedlineProperties[0].Name = getPropertyName( PROP_REDLINE_TYPE );
- pRedlineProperties[0].Value <<= sType;
- pRedlineProperties[1].Name = getPropertyName( PROP_REDLINE_AUTHOR );
- pRedlineProperties[1].Value <<= m_pRedlineParams->m_sAuthor;
- pRedlineProperties[2].Name = getPropertyName( PROP_REDLINE_DATE_TIME );
- pRedlineProperties[2].Value <<= ConversionHelper::ConvertDateStringToDateTime( m_pRedlineParams->m_sDate );
- //pRedlineProperties[3].Name = getPropertyName( PROP_REDLINE_REVERT_PROPERTIES );
- //pRedlineProperties[3].Value <<= pRedline->m_aRevertProperties;
-
- return aRedlineProperties;
-}
-
-void TrackChangesHandler::lcl_sprm(Sprm &) {}
-
-} //namespace writerfilter::dmapper
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/TrackChangesHandler.hxx b/writerfilter/source/dmapper/TrackChangesHandler.hxx
deleted file mode 100644
index bd29fc4a20b2..000000000000
--- a/writerfilter/source/dmapper/TrackChangesHandler.hxx
+++ /dev/null
@@ -1,43 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-#ifndef INCLUDED_WRITERFILTER_SOURCE_DMAPPER_TRACKCHANGESHANDLER_HXX
-#define INCLUDED_WRITERFILTER_SOURCE_DMAPPER_TRACKCHANGESHANDLER_HXX
-
-#include "LoggedResources.hxx"
-#include <com/sun/star/beans/PropertyValue.hpp>
-#include <dmapper/PropertyMap.hxx>
-
-namespace writerfilter::dmapper
-{
-/** Handler for sprms that contain 'track changes' attributes
- - Author
- - Date
- - ID
- (This class is based on work done in 'MeasureHandler')
- */
-class TrackChangesHandler : public LoggedProperties
-{
- RedlineParamsPtr m_pRedlineParams;
-
- // Properties
- virtual void lcl_attribute(Id Name, Value& val) override;
- virtual void lcl_sprm(Sprm& sprm) override;
-
-public:
- explicit TrackChangesHandler(sal_Int32 nToken);
- virtual ~TrackChangesHandler() override;
-
- /// Compute the UNO properties for the track changes object based on the received tokens.
- css::uno::Sequence<css::beans::PropertyValue> getRedlineProperties() const;
-};
-}
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/WrapPolygonHandler.cxx b/writerfilter/source/dmapper/WrapPolygonHandler.cxx
deleted file mode 100644
index 3f693b45f389..000000000000
--- a/writerfilter/source/dmapper/WrapPolygonHandler.cxx
+++ /dev/null
@@ -1,217 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * 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 .
- */
-
-#include <com/sun/star/drawing/PointSequence.hpp>
-#include <com/sun/star/text/GraphicCrop.hpp>
-#include <comphelper/sequence.hxx>
-#include <tools/UnitConversion.hxx>
-
-#include <ooxml/resourceids.hxx>
-
-#include "WrapPolygonHandler.hxx"
-#include "util.hxx"
-
-#include <sal/log.hxx>
-
-namespace writerfilter {
-
-using namespace com::sun::star;
-
-namespace dmapper {
-
-WrapPolygon::WrapPolygon()
-{
-}
-
-WrapPolygon::~WrapPolygon()
-{
-}
-
-void WrapPolygon::addPoint(const awt::Point & rPoint)
-{
- mPoints.push_back(rPoint);
-}
-
-WrapPolygon::Points_t::const_iterator WrapPolygon::begin() const
-{
- return mPoints.begin();
-}
-
-WrapPolygon::Points_t::const_iterator WrapPolygon::end() const
-{
- return mPoints.end();
-}
-
-WrapPolygon::Pointer_t WrapPolygon::move(const awt::Point & rPoint) const
-{
- WrapPolygon::Pointer_t pResult(new WrapPolygon);
-
- Points_t::const_iterator aIt = begin();
- Points_t::const_iterator aItEnd = end();
-
- while (aIt != aItEnd)
- {
- awt::Point aPoint(aIt->X + rPoint.X, aIt->Y + rPoint.Y);
- pResult->addPoint(aPoint);
- ++aIt;
- }
-
- return pResult;
-}
-
-WrapPolygon::Pointer_t WrapPolygon::scale(const Fraction & rFractionX, const Fraction & rFractionY) const
-{
- WrapPolygon::Pointer_t pResult(new WrapPolygon);
-
- Points_t::const_iterator aIt = begin();
- Points_t::const_iterator aItEnd = end();
-
- while (aIt != aItEnd)
- {
- awt::Point aPoint((Fraction(tools::Long(aIt->X)) * rFractionX).operator long(), (Fraction(tools::Long(aIt->Y)) * rFractionY).operator long());
- pResult->addPoint(aPoint);
- ++aIt;
- }
-
- return pResult;
-}
-
-WrapPolygon::Pointer_t WrapPolygon::correctWordWrapPolygon(const awt::Size & rSrcSize) const
-{
- WrapPolygon::Pointer_t pResult;
-
- const tools::Long nWrap100Percent = 21600;
-
- Fraction aMove(nWrap100Percent, rSrcSize.Width);
- aMove = aMove * Fraction(convertTwipToMm100(15), 1);
- awt::Point aMovePoint(aMove.operator long(), 0);
- pResult = move(aMovePoint);
-
- Fraction aScaleX = nWrap100Percent / (nWrap100Percent + aMove);
- Fraction aScaleY = nWrap100Percent / (nWrap100Percent - aMove);
- pResult = pResult->scale(aScaleX, aScaleY);
-
- Fraction aScaleSrcX(rSrcSize.Width, nWrap100Percent);
- Fraction aScaleSrcY(rSrcSize.Height, nWrap100Percent);
- pResult = pResult->scale(aScaleSrcX, aScaleSrcY);
-
- return pResult;
-}
-
-WrapPolygon::Pointer_t WrapPolygon::correctWordWrapPolygonPixel(const awt::Size & rSrcSize) const
-{
- WrapPolygon::Pointer_t pResult;
-
- /*
- * https://msdn.microsoft.com/en-us/library/ee342530.aspx
- *
- * Image wrapping polygons in Microsoft Word use a fixed coordinate space
- * that is 21600 units x 21600 units. Coordinate (0,0) is the upper left
- * corner of the image and coordinate (21600,21600) is the lower right
- * corner of the image. Microsoft Word scales the size of the wrapping
- * polygon units to fit the size of the image. The 21600 value is a legacy
- * artifact from the drawing layer of early versions of Microsoft Office.
- */
- const tools::Long nWrap100Percent = 21600;
-
- Fraction aScaleX(rSrcSize.Width, nWrap100Percent);
- Fraction aScaleY(rSrcSize.Height, nWrap100Percent);
- pResult = scale(aScaleX, aScaleY);
-
- return pResult;
-}
-
-WrapPolygon::Pointer_t WrapPolygon::correctCrop(const awt::Size& rGraphicSize,
- const text::GraphicCrop& rGraphicCrop) const
-{
- WrapPolygon::Pointer_t pResult;
-
- Fraction aScaleX(rGraphicSize.Width - rGraphicCrop.Left - rGraphicCrop.Right,
- rGraphicSize.Width);
- Fraction aScaleY(rGraphicSize.Height - rGraphicCrop.Top - rGraphicCrop.Bottom,
- rGraphicSize.Height);
- pResult = scale(aScaleX, aScaleY);
-
- awt::Point aMove(rGraphicCrop.Left, rGraphicCrop.Top);
- pResult = pResult->move(aMove);
-
- return pResult;
-}
-
-drawing::PointSequenceSequence WrapPolygon::getPointSequenceSequence() const
-{
- drawing::PointSequenceSequence aPolyPolygon(1);
- drawing::PointSequence aPolygon = comphelper::containerToSequence(mPoints);
- aPolyPolygon[0] = aPolygon;
- return aPolyPolygon;
-}
-
-WrapPolygonHandler::WrapPolygonHandler()
- : LoggedProperties("WrapPolygonHandler")
- , mpPolygon(new WrapPolygon)
- , mnX(0)
- , mnY(0)
-{
-}
-
-WrapPolygonHandler::~WrapPolygonHandler()
-{
-}
-
-void WrapPolygonHandler::lcl_attribute(Id Name, Value & val)
-{
- sal_Int32 nIntValue = val.getInt();
-
- switch(Name)
- {
- case NS_ooxml::LN_CT_Point2D_x:
- mnX = nIntValue;
- break;
- case NS_ooxml::LN_CT_Point2D_y:
- mnY = nIntValue;
- break;
- default:
- SAL_WARN("writerfilter", "WrapPolygonHandler::lcl_attribute: unhandled token: " << Name);
- break;
- }
-}
-
-void WrapPolygonHandler::lcl_sprm(Sprm & _sprm)
-{
- switch (_sprm.getId())
- {
- case NS_ooxml::LN_CT_WrapPath_lineTo:
- case NS_ooxml::LN_CT_WrapPath_start:
- {
- resolveSprmProps(*this, _sprm);
-
- awt::Point aPoint(mnX, mnY);
- mpPolygon->addPoint(aPoint);
- }
- break;
- default:
- SAL_WARN("writerfilter", "WrapPolygonHandler::lcl_sprm: unhandled token: " << _sprm.getId());
- break;
- }
-}
-
-
-}}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/WrapPolygonHandler.hxx b/writerfilter/source/dmapper/WrapPolygonHandler.hxx
deleted file mode 100644
index 2267ce8f35e8..000000000000
--- a/writerfilter/source/dmapper/WrapPolygonHandler.hxx
+++ /dev/null
@@ -1,85 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * 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 .
- */
-
-#ifndef INCLUDED_WRITERFILTER_SOURCE_DMAPPER_WRAPPOLYGONHANDLER_HXX
-#define INCLUDED_WRITERFILTER_SOURCE_DMAPPER_WRAPPOLYGONHANDLER_HXX
-
-#include <com/sun/star/drawing/PointSequenceSequence.hpp>
-#include "LoggedResources.hxx"
-#include <tools/fract.hxx>
-#include <vector>
-
-namespace com::sun::star::text
-{
-struct GraphicCrop;
-}
-
-namespace writerfilter::dmapper
-{
-/// Handles <wp:wrapPolygon> from DOCX and the pWrapPolygonVertices shape property from RTF.
-class WrapPolygon final : public virtual SvRefBase
-{
-public:
- typedef std::vector<css::awt::Point> Points_t;
- typedef ::tools::SvRef<WrapPolygon> Pointer_t;
-
-private:
- Points_t mPoints;
-
-public:
- WrapPolygon();
- ~WrapPolygon() override;
-
- void addPoint(const css::awt::Point& rPoint);
-
- Points_t::const_iterator begin() const;
- Points_t::const_iterator end() const;
-
- WrapPolygon::Pointer_t move(const css::awt::Point& rMove) const;
- WrapPolygon::Pointer_t scale(const Fraction& rFractionX, const Fraction& rFractionY) const;
- WrapPolygon::Pointer_t correctWordWrapPolygon(const css::awt::Size& rSrcSize) const;
- WrapPolygon::Pointer_t correctWordWrapPolygonPixel(const css::awt::Size& rSrcSize) const;
- WrapPolygon::Pointer_t correctCrop(const css::awt::Size& rGraphicSize,
- const css::text::GraphicCrop& rGraphicCrop) const;
- css::drawing::PointSequenceSequence getPointSequenceSequence() const;
-};
-
-class WrapPolygonHandler : public LoggedProperties
-{
-public:
- WrapPolygonHandler();
- virtual ~WrapPolygonHandler() override;
-
- const WrapPolygon::Pointer_t& getPolygon() const { return mpPolygon; }
-
-private:
- WrapPolygon::Pointer_t mpPolygon;
-
- sal_Int32 mnX;
- sal_Int32 mnY;
-
- // Properties
- virtual void lcl_attribute(Id Name, Value& val) override;
- virtual void lcl_sprm(Sprm& sprm) override;
-};
-}
-
-#endif // INCLUDED_WRITERFILTER_SOURCE_DMAPPER_WRAPPOLYGONHANDLER_HXX
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/domainmapperfactory.cxx b/writerfilter/source/dmapper/domainmapperfactory.cxx
deleted file mode 100644
index 1e52cfc36fcc..000000000000
--- a/writerfilter/source/dmapper/domainmapperfactory.cxx
+++ /dev/null
@@ -1,39 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-
-#include "DomainMapper.hxx"
-#include "TagLogger.hxx"
-#include <unotools/mediadescriptor.hxx>
-
-namespace writerfilter::dmapper
-{
-Stream::Pointer_t
-DomainMapperFactory::createMapper(css::uno::Reference<css::uno::XComponentContext> const& xContext,
- css::uno::Reference<css::io::XInputStream> const& xInputStream,
- css::uno::Reference<css::lang::XComponent> const& xModel,
- bool bRepairStorage, SourceDocumentType eDocumentType,
- utl::MediaDescriptor const& rMediaDesc)
-{
-#ifdef DBG_UTIL
- OUString sURL
- = rMediaDesc.getUnpackedValueOrDefault(utl::MediaDescriptor::PROP_URL(), OUString());
- ::std::string sURLc = OUStringToOString(sURL, RTL_TEXTENCODING_ASCII_US).getStr();
-
- if (getenv("SW_DEBUG_WRITERFILTER"))
- TagLogger::getInstance().setFileName(sURLc);
- TagLogger::getInstance().startDocument();
-#endif
-
- return Stream::Pointer_t(new DomainMapper(xContext, xInputStream, xModel, bRepairStorage,
- eDocumentType, rMediaDesc));
-}
-
-} // namespace writerfilter::dmapper
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/util.cxx b/writerfilter/source/dmapper/util.cxx
deleted file mode 100644
index d5b23a3d46bc..000000000000
--- a/writerfilter/source/dmapper/util.cxx
+++ /dev/null
@@ -1,70 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * 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 .
- */
-
-#include <string>
-#include "util.hxx"
-
-namespace writerfilter::dmapper
-{
-using namespace com::sun::star;
-
-std::string XTextRangeToString(uno::Reference<text::XTextRange> const& textRange)
-{
- std::string result;
-
-#ifdef DBG_UTIL
- if (textRange)
- {
- OUString aOUStr;
-
- try
- {
- aOUStr = textRange->getString();
- }
- catch (const uno::Exception& rException)
- {
- result += "(exception: ";
- result += rException.Message.toUtf8().getStr();
- result += ")";
- }
-
- OString aOStr(aOUStr.getStr(), aOUStr.getLength(), RTL_TEXTENCODING_ASCII_US);
-
- result = aOStr.getStr();
- }
- else
- {
- result = "(nil)";
- }
-#else
- (void)textRange;
-#endif
-
- return result;
-}
-
-void resolveSprmProps(Properties& rHandler, Sprm& rSprm)
-{
- writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
- if (pProperties)
- pProperties->resolve(rHandler);
-}
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/util.hxx b/writerfilter/source/dmapper/util.hxx
deleted file mode 100644
index 5a94a5d0932d..000000000000
--- a/writerfilter/source/dmapper/util.hxx
+++ /dev/null
@@ -1,35 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * 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 .
- */
-
-#ifndef INCLUDED_WRITERFILTER_SOURCE_DMAPPER_UTIL_HXX
-#define INCLUDED_WRITERFILTER_SOURCE_DMAPPER_UTIL_HXX
-
-#include <com/sun/star/text/XTextRange.hpp>
-#include <string>
-#include <dmapper/resourcemodel.hxx>
-
-namespace writerfilter::dmapper
-{
-std::string XTextRangeToString(css::uno::Reference<css::text::XTextRange> const& textRange);
-void resolveSprmProps(Properties& rHandler, Sprm& rSprm);
-}
-
-#endif // INCLUDED_WRITERFILTER_SOURCE_DMAPPER_UTIL_HXX
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/filter/RtfFilter.cxx b/writerfilter/source/filter/RtfFilter.cxx
deleted file mode 100644
index bfa9a208786e..000000000000
--- a/writerfilter/source/filter/RtfFilter.cxx
+++ /dev/null
@@ -1,220 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * 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 .
- */
-
-#include <memory>
-
-#include <com/sun/star/beans/XPropertySet.hpp>
-#include <com/sun/star/document/XExporter.hpp>
-#include <com/sun/star/document/XFilter.hpp>
-#include <com/sun/star/document/XImporter.hpp>
-#include <com/sun/star/io/WrongFormatException.hpp>
-#include <com/sun/star/lang/WrappedTargetRuntimeException.hpp>
-#include <com/sun/star/lang/XInitialization.hpp>
-#include <com/sun/star/lang/XServiceInfo.hpp>
-#include <com/sun/star/lang/XMultiServiceFactory.hpp>
-#include <cppuhelper/exc_hlp.hxx>
-#include <cppuhelper/supportsservice.hxx>
-#include <osl/file.hxx>
-#include <tools/diagnose_ex.h>
-#include <unotools/mediadescriptor.hxx>
-#include <unotools/streamwrap.hxx>
-#include <unotools/ucbstreamhelper.hxx>
-#include <comphelper/scopeguard.hxx>
-
-#include <dmapper/DomainMapperFactory.hxx>
-#include <rtftok/RTFDocument.hxx>
-
-using namespace ::com::sun::star;
-
-namespace
-{
-/// Invokes the RTF tokenizer + dmapper or RtfExportFilter in sw via UNO.
-class RtfFilter
- : public cppu::WeakImplHelper<document::XFilter, document::XImporter, document::XExporter,
- lang::XInitialization, lang::XServiceInfo>
-{
- uno::Reference<uno::XComponentContext> m_xContext;
- uno::Reference<lang::XComponent> m_xSrcDoc, m_xDstDoc;
-
-public:
- explicit RtfFilter(uno::Reference<uno::XComponentContext> xContext);
-
- // XFilter
- sal_Bool SAL_CALL filter(const uno::Sequence<beans::PropertyValue>& rDescriptor) override;
- void SAL_CALL cancel() override;
-
- // XImporter
- void SAL_CALL setTargetDocument(const uno::Reference<lang::XComponent>& xDoc) override;
-
- // XExporter
- void SAL_CALL setSourceDocument(const uno::Reference<lang::XComponent>& xDoc) override;
-
- // XInitialization
- void SAL_CALL initialize(const uno::Sequence<uno::Any>& rArguments) override;
-
- // XServiceInfo
- OUString SAL_CALL getImplementationName() override;
- sal_Bool SAL_CALL supportsService(const OUString& rServiceName) override;
- uno::Sequence<OUString> SAL_CALL getSupportedServiceNames() override;
-};
-}
-
-RtfFilter::RtfFilter(uno::Reference<uno::XComponentContext> xContext)
- : m_xContext(std::move(xContext))
-{
-}
-
-sal_Bool RtfFilter::filter(const uno::Sequence<beans::PropertyValue>& rDescriptor)
-{
- if (m_xSrcDoc.is())
- {
- uno::Reference<lang::XMultiServiceFactory> xMSF(m_xContext->getServiceManager(),
- uno::UNO_QUERY_THROW);
- uno::Reference<uno::XInterface> xIfc(
- xMSF->createInstance("com.sun.star.comp.Writer.RtfExport"), uno::UNO_SET_THROW);
- uno::Reference<document::XExporter> xExporter(xIfc, uno::UNO_QUERY_THROW);
- uno::Reference<document::XFilter> xFilter(xIfc, uno::UNO_QUERY_THROW);
- xExporter->setSourceDocument(m_xSrcDoc);
- return xFilter->filter(rDescriptor);
- }
-
- bool bResult(false);
- uno::Reference<task::XStatusIndicator> xStatusIndicator;
-
- uno::Reference<beans::XPropertySet> xDocProps;
- if (m_xDstDoc.is()) // not in cppunittest?
- {
- xDocProps.set(m_xDstDoc, uno::UNO_QUERY);
- xDocProps->setPropertyValue("UndocumentedWriterfilterHack", uno::makeAny(true));
- }
- comphelper::ScopeGuard g([xDocProps] {
- if (xDocProps.is()) // not in cppunittest?
- {
- // note: pStream.clear calls RemoveLastParagraph()
- xDocProps->setPropertyValue("UndocumentedWriterfilterHack", uno::makeAny(false));
- }
- });
-
- try
- {
- utl::MediaDescriptor aMediaDesc(rDescriptor);
- bool bRepairStorage = aMediaDesc.getUnpackedValueOrDefault("RepairPackage", false);
- bool bIsNewDoc = !aMediaDesc.getUnpackedValueOrDefault("InsertMode", false);
- uno::Reference<io::XInputStream> xInputStream;
-
- aMediaDesc.addInputStream();
- aMediaDesc[utl::MediaDescriptor::PROP_INPUTSTREAM()] >>= xInputStream;
-
- // If this is set, write to this file, instead of the real document during paste.
- char* pEnv = getenv("SW_DEBUG_RTF_PASTE_TO");
- OUString aOutStr;
- if (!bIsNewDoc && pEnv
- && osl::FileBase::getFileURLFromSystemPath(OUString::fromUtf8(pEnv), aOutStr)
- == osl::FileBase::E_None)
- {
- std::unique_ptr<SvStream> pOut(
- utl::UcbStreamHelper::CreateStream(aOutStr, StreamMode::WRITE));
- std::unique_ptr<SvStream> pIn(utl::UcbStreamHelper::CreateStream(xInputStream));
- pOut->WriteStream(*pIn);
- return true;
- }
-
- // If this is set, read from this file, instead of the real clipboard during paste.
- pEnv = getenv("SW_DEBUG_RTF_PASTE_FROM");
- if (!bIsNewDoc && pEnv)
- {
- OUString aInStr;
- osl::FileBase::getFileURLFromSystemPath(OUString::fromUtf8(pEnv), aInStr);
- std::unique_ptr<SvStream> pStream
- = utl::UcbStreamHelper::CreateStream(aInStr, StreamMode::READ);
- uno::Reference<io::XStream> xStream(new utl::OStreamWrapper(std::move(pStream)));
- xInputStream.set(xStream, uno::UNO_QUERY);
- }
-
- uno::Reference<frame::XFrame> xFrame = aMediaDesc.getUnpackedValueOrDefault(
- utl::MediaDescriptor::PROP_FRAME(), uno::Reference<frame::XFrame>());
-
- xStatusIndicator = aMediaDesc.getUnpackedValueOrDefault(
- utl::MediaDescriptor::PROP_STATUSINDICATOR(), uno::Reference<task::XStatusIndicator>());
-
- writerfilter::Stream::Pointer_t pStream(
- writerfilter::dmapper::DomainMapperFactory::createMapper(
- m_xContext, xInputStream, m_xDstDoc, bRepairStorage,
- writerfilter::dmapper::SourceDocumentType::RTF, aMediaDesc));
- writerfilter::rtftok::RTFDocument::Pointer_t pDocument(
- writerfilter::rtftok::RTFDocumentFactory::createDocument(
- m_xContext, xInputStream, m_xDstDoc, xFrame, xStatusIndicator, aMediaDesc));
- pDocument->resolve(*pStream);
- bResult = true;
- }
- catch (const io::WrongFormatException&)
- {
- css::uno::Any anyEx = cppu::getCaughtException();
- // cannot throw WrongFormatException directly :(
- throw lang::WrappedTargetRuntimeException("", static_cast<OWeakObject*>(this), anyEx);
- }
- catch (const uno::Exception&)
- {
- TOOLS_INFO_EXCEPTION("writerfilter", "Exception caught");
- }
-
- if (xStatusIndicator.is())
- xStatusIndicator->end();
- return bResult;
-}
-
-void RtfFilter::cancel() {}
-
-void RtfFilter::setSourceDocument(const uno::Reference<lang::XComponent>& xDoc)
-{
- m_xSrcDoc = xDoc;
-}
-
-void RtfFilter::setTargetDocument(const uno::Reference<lang::XComponent>& xDoc)
-{
- m_xDstDoc = xDoc;
-}
-
-void RtfFilter::initialize(const uno::Sequence<uno::Any>& /*aArguments*/)
-{
- // The DOCX exporter here extracts 'type' of the filter, ie 'Word' or
- // 'Word Template' but we don't need it for RTF.
-}
-
-OUString RtfFilter::getImplementationName() { return "com.sun.star.comp.Writer.RtfFilter"; }
-
-sal_Bool RtfFilter::supportsService(const OUString& rServiceName)
-{
- return cppu::supportsService(this, rServiceName);
-}
-
-uno::Sequence<OUString> RtfFilter::getSupportedServiceNames()
-{
- uno::Sequence<OUString> aRet = { OUString("com.sun.star.document.ImportFilter"),
- OUString("com.sun.star.document.ExportFilter") };
- return aRet;
-}
-
-extern "C" SAL_DLLPUBLIC_EXPORT uno::XInterface*
-com_sun_star_comp_Writer_RtfFilter_get_implementation(uno::XComponentContext* pComponent,
- uno::Sequence<uno::Any> const& /*rSequence*/)
-{
- return cppu::acquire(new RtfFilter(pComponent));
-}
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/filter/WriterFilter.cxx b/writerfilter/source/filter/WriterFilter.cxx
deleted file mode 100644
index dcfdf29a60f7..000000000000
--- a/writerfilter/source/filter/WriterFilter.cxx
+++ /dev/null
@@ -1,366 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * 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 .
- */
-
-#ifdef DBG_UTIL
-#include <iostream>
-#endif
-
-#include <com/sun/star/beans/XPropertySet.hpp>
-#include <com/sun/star/document/XExporter.hpp>
-#include <com/sun/star/document/XFilter.hpp>
-#include <com/sun/star/document/XImporter.hpp>
-#include <com/sun/star/drawing/XDrawPageSupplier.hpp>
-#include <com/sun/star/io/WrongFormatException.hpp>
-#include <com/sun/star/lang/WrappedTargetRuntimeException.hpp>
-#include <com/sun/star/lang/XInitialization.hpp>
-#include <com/sun/star/lang/XMultiServiceFactory.hpp>
-#include <com/sun/star/xml/sax/SAXParseException.hpp>
-#include <cppuhelper/exc_hlp.hxx>
-#include <cppuhelper/supportsservice.hxx>
-#include <dmapper/DomainMapperFactory.hxx>
-#include <oox/core/filterdetect.hxx>
-#include <oox/core/xmlfilterbase.hxx>
-#include <oox/helper/graphichelper.hxx>
-#include <oox/ole/olestorage.hxx>
-#include <oox/ole/vbaproject.hxx>
-#include <ooxml/OOXMLDocument.hxx>
-#include <unotools/mediadescriptor.hxx>
-#include <rtl/ref.hxx>
-#include <sal/log.hxx>
-#include <tools/diagnose_ex.h>
-#include <comphelper/scopeguard.hxx>
-
-using namespace ::com::sun::star;
-
-static OUString lcl_GetExceptionMessageRec(xml::sax::SAXException const& e);
-
-static OUString lcl_GetExceptionMessage(xml::sax::SAXException const& e)
-{
- OUString const thisMessage("SAXParseException: \"" + e.Message + "\"");
- OUString const restMessage(lcl_GetExceptionMessageRec(e));
- return restMessage + "\n" + thisMessage;
-}
-static OUString lcl_GetExceptionMessage(xml::sax::SAXParseException const& e)
-{
- OUString const thisMessage("SAXParseException: '" + e.Message + "', Stream '" + e.SystemId
- + "', Line " + OUString::number(e.LineNumber) + ", Column "
- + OUString::number(e.ColumnNumber));
- OUString const restMessage(lcl_GetExceptionMessageRec(e));
- return restMessage + "\n" + thisMessage;
-}
-
-static OUString lcl_GetExceptionMessageRec(xml::sax::SAXException const& e)
-{
- xml::sax::SAXParseException saxpe;
- if (e.WrappedException >>= saxpe)
- {
- return lcl_GetExceptionMessage(saxpe);
- }
- xml::sax::SAXException saxe;
- if (e.WrappedException >>= saxe)
- {
- return lcl_GetExceptionMessage(saxe);
- }
- uno::Exception ue;
- if (e.WrappedException >>= ue)
- {
- return ue.Message;
- }
- return OUString();
-}
-
-namespace
-{
-/// Common DOCX filter, calls DocxExportFilter via UNO or does the DOCX import.
-class WriterFilter
- : public cppu::WeakImplHelper<document::XFilter, document::XImporter, document::XExporter,
- lang::XInitialization, lang::XServiceInfo>
-{
- uno::Reference<uno::XComponentContext> m_xContext;
- uno::Reference<lang::XComponent> m_xSrcDoc, m_xDstDoc;
- uno::Sequence<uno::Any> m_xInitializationArguments;
-
-public:
- explicit WriterFilter(uno::Reference<uno::XComponentContext> xContext)
- : m_xContext(std::move(xContext))
- {
- }
-
- // XFilter
- sal_Bool SAL_CALL filter(const uno::Sequence<beans::PropertyValue>& rDescriptor) override;
- void SAL_CALL cancel() override;
-
- // XImporter
- void SAL_CALL setTargetDocument(const uno::Reference<lang::XComponent>& xDoc) override;
-
- // XExporter
- void SAL_CALL setSourceDocument(const uno::Reference<lang::XComponent>& xDoc) override;
-
- // XInitialization
- void SAL_CALL initialize(const uno::Sequence<uno::Any>& rArguments) override;
-
- // XServiceInfo
- OUString SAL_CALL getImplementationName() override;
- sal_Bool SAL_CALL supportsService(const OUString& rServiceName) override;
- uno::Sequence<OUString> SAL_CALL getSupportedServiceNames() override;
-};
-}
-
-sal_Bool WriterFilter::filter(const uno::Sequence<beans::PropertyValue>& rDescriptor)
-{
- if (m_xSrcDoc.is())
- {
- uno::Reference<lang::XMultiServiceFactory> xMSF(m_xContext->getServiceManager(),
- uno::UNO_QUERY_THROW);
- uno::Reference<uno::XInterface> xIfc;
- try
- {
- xIfc.set(xMSF->createInstance("com.sun.star.comp.Writer.DocxExport"),
- uno::UNO_SET_THROW);
- }
- catch (uno::RuntimeException&)
- {
- throw;
- }
- catch (uno::Exception& e)
- {
- uno::Any a(cppu::getCaughtException());
- throw lang::WrappedTargetRuntimeException("wrapped " + a.getValueTypeName() + ": "
- + e.Message,
- uno::Reference<uno::XInterface>(), a);
- }
-
- uno::Reference<lang::XInitialization> xInit(xIfc, uno::UNO_QUERY_THROW);
- xInit->initialize(m_xInitializationArguments);
-
- uno::Reference<document::XExporter> xExprtr(xIfc, uno::UNO_QUERY_THROW);
- uno::Reference<document::XFilter> xFltr(xIfc, uno::UNO_QUERY_THROW);
- xExprtr->setSourceDocument(m_xSrcDoc);
- return xFltr->filter(rDescriptor);
- }
- if (m_xDstDoc.is())
- {
- uno::Reference<beans::XPropertySet> const xDocProps(m_xDstDoc, uno::UNO_QUERY);
- xDocProps->setPropertyValue("UndocumentedWriterfilterHack", uno::makeAny(true));
- comphelper::ScopeGuard g([xDocProps] {
- xDocProps->setPropertyValue("UndocumentedWriterfilterHack", uno::makeAny(false));
- });
- utl::MediaDescriptor aMediaDesc(rDescriptor);
- bool bRepairStorage = aMediaDesc.getUnpackedValueOrDefault("RepairPackage", false);
- bool bSkipImages
- = aMediaDesc.getUnpackedValueOrDefault("FilterOptions", OUString()) == "SkipImages";
-
- uno::Reference<io::XInputStream> xInputStream;
- try
- {
- // use the oox.core.FilterDetect implementation to extract the decrypted ZIP package
- rtl::Reference<::oox::core::FilterDetect> xDetector(
- new ::oox::core::FilterDetect(m_xContext));
- xInputStream = xDetector->extractUnencryptedPackage(aMediaDesc);
- }
- catch (uno::Exception&)
- {
- }
-
- if (!xInputStream.is())
- return false;
-
- writerfilter::Stream::Pointer_t pStream(
- writerfilter::dmapper::DomainMapperFactory::createMapper(
- m_xContext, xInputStream, m_xDstDoc, bRepairStorage,
- writerfilter::dmapper::SourceDocumentType::OOXML, aMediaDesc));
- //create the tokenizer and domain mapper
- writerfilter::ooxml::OOXMLStream::Pointer_t pDocStream
- = writerfilter::ooxml::OOXMLDocumentFactory::createStream(m_xContext, xInputStream,
- bRepairStorage);
- uno::Reference<task::XStatusIndicator> xStatusIndicator
- = aMediaDesc.getUnpackedValueOrDefault(utl::MediaDescriptor::PROP_STATUSINDICATOR(),
- uno::Reference<task::XStatusIndicator>());
- writerfilter::ooxml::OOXMLDocument::Pointer_t pDocument(
- writerfilter::ooxml::OOXMLDocumentFactory::createDocument(pDocStream, xStatusIndicator,
- bSkipImages, rDescriptor));
-
- uno::Reference<frame::XModel> xModel(m_xDstDoc, uno::UNO_QUERY_THROW);
- pDocument->setModel(xModel);
-
- uno::Reference<drawing::XDrawPageSupplier> xDrawings(m_xDstDoc, uno::UNO_QUERY_THROW);
- uno::Reference<drawing::XDrawPage> xDrawPage(xDrawings->getDrawPage(), uno::UNO_SET_THROW);
- pDocument->setDrawPage(xDrawPage);
-
- try
- {
- pDocument->resolve(*pStream);
- }
- catch (xml::sax::SAXParseException const& e)
- {
- // note: SfxObjectShell checks for WrongFormatException
- io::WrongFormatException wfe(lcl_GetExceptionMessage(e));
- throw lang::WrappedTargetRuntimeException("", static_cast<OWeakObject*>(this),
- uno::makeAny(wfe));
- }
- catch (xml::sax::SAXException const& e)
- {
- // note: SfxObjectShell checks for WrongFormatException
- io::WrongFormatException wfe(lcl_GetExceptionMessage(e));
- throw lang::WrappedTargetRuntimeException("", static_cast<OWeakObject*>(this),
- uno::makeAny(wfe));
- }
- catch (uno::RuntimeException const&)
- {
- throw;
- }
- catch (uno::Exception const&)
- {
- css::uno::Any anyEx = cppu::getCaughtException();
- SAL_WARN("writerfilter",
- "WriterFilter::filter(): failed with " << exceptionToString(anyEx));
- throw lang::WrappedTargetRuntimeException("", static_cast<OWeakObject*>(this), anyEx);
- }
-
- // Adding some properties to the document's grab bag for interoperability purposes:
- comphelper::SequenceAsHashMap aGrabBagProperties;
-
- // Adding the saved Theme DOM
- aGrabBagProperties["OOXTheme"] <<= pDocument->getThemeDom();
-
- // Adding the saved custom xml DOM
- aGrabBagProperties["OOXCustomXml"] <<= pDocument->getCustomXmlDomList();
- aGrabBagProperties["OOXCustomXmlProps"] <<= pDocument->getCustomXmlDomPropsList();
-
- // Adding the saved Glossary Document DOM to the document's grab bag
- aGrabBagProperties["OOXGlossary"] <<= pDocument->getGlossaryDocDom();
- aGrabBagProperties["OOXGlossaryDom"] <<= pDocument->getGlossaryDomList();
-
- // Adding the saved embedding document to document's grab bag
- aGrabBagProperties["OOXEmbeddings"] <<= pDocument->getEmbeddingsList();
-
- oox::core::XmlFilterBase::putPropertiesToDocumentGrabBag(m_xDstDoc, aGrabBagProperties);
-
- writerfilter::ooxml::OOXMLStream::Pointer_t pVBAProjectStream(
- writerfilter::ooxml::OOXMLDocumentFactory::createStream(
- pDocStream, writerfilter::ooxml::OOXMLStream::VBAPROJECT));
- oox::StorageRef xVbaPrjStrg = std::make_shared<::oox::ole::OleStorage>(
- m_xContext, pVBAProjectStream->getDocumentStream(), false);
- if (xVbaPrjStrg && xVbaPrjStrg->isStorage())
- {
- ::oox::ole::VbaProject aVbaProject(m_xContext, xModel, u"Writer");
- uno::Reference<frame::XFrame> xFrame = aMediaDesc.getUnpackedValueOrDefault(
- utl::MediaDescriptor::PROP_FRAME(), uno::Reference<frame::XFrame>());
-
- // if no XFrame try fallback to what we can glean from the Model
- if (!xFrame.is())
- {
- uno::Reference<frame::XController> xController = xModel->getCurrentController();
- xFrame = xController.is() ? xController->getFrame() : nullptr;
- }
-
- oox::GraphicHelper gHelper(m_xContext, xFrame, xVbaPrjStrg);
- aVbaProject.importVbaProject(*xVbaPrjStrg, gHelper);
-
- writerfilter::ooxml::OOXMLStream::Pointer_t pVBADataStream(
- writerfilter::ooxml::OOXMLDocumentFactory::createStream(
- pDocStream, writerfilter::ooxml::OOXMLStream::VBADATA));
- if (pVBADataStream)
- {
- uno::Reference<io::XInputStream> xDataStream = pVBADataStream->getDocumentStream();
- if (xDataStream.is())
- aVbaProject.importVbaData(xDataStream);
- }
- }
-
- pStream.clear();
-
- // note: pStream.clear calls RemoveLastParagraph()
-
- return true;
- }
- return false;
-}
-
-void WriterFilter::cancel() {}
-
-void WriterFilter::setTargetDocument(const uno::Reference<lang::XComponent>& xDoc)
-{
- m_xDstDoc = xDoc;
-
- // Set some compatibility options that are valid for all the formats
- uno::Reference<lang::XMultiServiceFactory> xFactory(xDoc, uno::UNO_QUERY);
- uno::Reference<beans::XPropertySet> xSettings(
- xFactory->createInstance("com.sun.star.document.Settings"), uno::UNO_QUERY);
-
- xSettings->setPropertyValue("AddFrameOffsets", uno::makeAny(true));
- xSettings->setPropertyValue("AddVerticalFrameOffsets", uno::makeAny(true));
- xSettings->setPropertyValue("UseOldNumbering", uno::makeAny(false));
- xSettings->setPropertyValue("IgnoreFirstLineIndentInNumbering", uno::makeAny(false));
- xSettings->setPropertyValue("DoNotResetParaAttrsForNumFont", uno::makeAny(false));
- xSettings->setPropertyValue("UseFormerLineSpacing", uno::makeAny(false));
- xSettings->setPropertyValue("AddParaSpacingToTableCells", uno::makeAny(true));
- xSettings->setPropertyValue("AddParaLineSpacingToTableCells", uno::makeAny(true));
- xSettings->setPropertyValue("UseFormerObjectPositioning", uno::makeAny(false));
- xSettings->setPropertyValue("ConsiderTextWrapOnObjPos", uno::makeAny(true));
- xSettings->setPropertyValue("UseFormerTextWrapping", uno::makeAny(false));
- xSettings->setPropertyValue("TableRowKeep", uno::makeAny(true));
- xSettings->setPropertyValue("IgnoreTabsAndBlanksForLineCalculation", uno::makeAny(true));
- xSettings->setPropertyValue("InvertBorderSpacing", uno::makeAny(true));
- xSettings->setPropertyValue("CollapseEmptyCellPara", uno::makeAny(true));
- xSettings->setPropertyValue("TabOverflow", uno::makeAny(true));
- xSettings->setPropertyValue("UnbreakableNumberings", uno::makeAny(true));
-
- xSettings->setPropertyValue("FloattableNomargins", uno::makeAny(true));
- xSettings->setPropertyValue("ClippedPictures", uno::makeAny(true));
- xSettings->setPropertyValue("BackgroundParaOverDrawings", uno::makeAny(true));
- xSettings->setPropertyValue("TabOverMargin", uno::makeAny(true));
- xSettings->setPropertyValue("TreatSingleColumnBreakAsPageBreak", uno::makeAny(true));
- xSettings->setPropertyValue("PropLineSpacingShrinksFirstLine", uno::makeAny(true));
- xSettings->setPropertyValue("DoNotCaptureDrawObjsOnPage", uno::makeAny(true));
- xSettings->setPropertyValue("DisableOffPagePositioning", uno::makeAny(true));
-}
-
-void WriterFilter::setSourceDocument(const uno::Reference<lang::XComponent>& xDoc)
-{
- m_xSrcDoc = xDoc;
-}
-
-void WriterFilter::initialize(const uno::Sequence<uno::Any>& rArguments)
-{
- m_xInitializationArguments = rArguments;
-}
-
-OUString WriterFilter::getImplementationName() { return "com.sun.star.comp.Writer.WriterFilter"; }
-
-sal_Bool WriterFilter::supportsService(const OUString& rServiceName)
-{
- return cppu::supportsService(this, rServiceName);
-}
-
-uno::Sequence<OUString> WriterFilter::getSupportedServiceNames()
-{
- uno::Sequence<OUString> aRet = { OUString("com.sun.star.document.ImportFilter"),
- OUString("com.sun.star.document.ExportFilter") };
- return aRet;
-}
-
-extern "C" SAL_DLLPUBLIC_EXPORT uno::XInterface*
-com_sun_star_comp_Writer_WriterFilter_get_implementation(
- uno::XComponentContext* component, uno::Sequence<uno::Any> const& /*rSequence*/)
-{
- return cppu::acquire(new WriterFilter(component));
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/ooxml/Handler.cxx b/writerfilter/source/ooxml/Handler.cxx
deleted file mode 100644
index 3b49b5218148..000000000000
--- a/writerfilter/source/ooxml/Handler.cxx
+++ /dev/null
@@ -1,428 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * 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 .
- */
-
-#include <ooxml/resourceids.hxx>
-#include "Handler.hxx"
-
-#include <sal/log.hxx>
-
-namespace writerfilter::ooxml
-{
-
-/*
- class OOXMLFootnoteHandler
- */
-OOXMLFootnoteHandler::OOXMLFootnoteHandler(OOXMLFastContextHandler * pContext)
-: mpFastContext(pContext)
-{
-}
-
-OOXMLFootnoteHandler::~OOXMLFootnoteHandler()
-{
-}
-
-void OOXMLFootnoteHandler::attribute(Id name, Value & val)
-{
- switch (name)
- {
- case NS_ooxml::LN_CT_FtnEdnRef_id:
- mpFastContext->resolveFootnote(sal_Int32(val.getInt()));
- break;
- default:
- break;
- }
-}
-
-void OOXMLFootnoteHandler::sprm(Sprm & /*sprm*/)
-{
-}
-
-/*
- class OOXMLEndnoteHandler
- */
-OOXMLEndnoteHandler::OOXMLEndnoteHandler(OOXMLFastContextHandler * pContext)
-: mpFastContext(pContext)
-{
-}
-
-OOXMLEndnoteHandler::~OOXMLEndnoteHandler()
-{
-}
-
-void OOXMLEndnoteHandler::attribute(Id name, Value & val)
-{
- switch (name)
- {
- case NS_ooxml::LN_CT_FtnEdnRef_id:
- mpFastContext->resolveEndnote(sal_Int32(val.getInt()));
- break;
- default:
- break;
- }
-}
-
-void OOXMLEndnoteHandler::sprm(Sprm & /*sprm*/)
-{
-}
-
-/*
- class OOXMLCommentHandler
-*/
-OOXMLCommentHandler::OOXMLCommentHandler(OOXMLFastContextHandler * pContext)
-: mpFastContext(pContext)
-{
-}
-
-OOXMLCommentHandler::~OOXMLCommentHandler()
-{
-}
-
-void OOXMLCommentHandler::attribute(Id name, Value & val)
-{
- switch (name)
- {
- case NS_ooxml::LN_CT_Markup_id:
- mpFastContext->resolveComment(val.getInt());
- break;
- default:
- ;
- }
-}
-
-void OOXMLCommentHandler::sprm(Sprm & /*sprm*/)
-{
-}
-
-/*
- class OOXMLOLEHandler
-*/
-OOXMLOLEHandler::OOXMLOLEHandler(OOXMLFastContextHandler * pContext)
-: mpFastContext(pContext)
-{
-}
-
-OOXMLOLEHandler::~OOXMLOLEHandler()
-{
-}
-
-void OOXMLOLEHandler::attribute(Id name, Value & val)
-{
- switch (name)
- {
- case NS_ooxml::LN_CT_OLEObject_r_id:
- try {
- mpFastContext->resolveData(val.getString());
- }
- catch (const ::css::uno::Exception&)
- {
- // Can't resolve OLE stream
- SAL_WARN("writerfilter.ooxml", "Failed to open OLE stream!");
- }
- break;
- default:
- ;
- }
-}
-
-void OOXMLOLEHandler::sprm(Sprm & /*sprm*/)
-{
-}
-
-OOXMLEmbeddedFontHandler::OOXMLEmbeddedFontHandler(OOXMLFastContextHandler * pContext)
-: mpFastContext(pContext)
-{
-}
-
-OOXMLEmbeddedFontHandler::~OOXMLEmbeddedFontHandler()
-{
-}
-
-void OOXMLEmbeddedFontHandler::attribute(Id name, Value & val)
-{
- switch (name)
- {
- case NS_ooxml::LN_CT_Rel_id:
- mpFastContext->resolveData(val.getString());
- break;
- default:
- break;
- }
-}
-
-void OOXMLEmbeddedFontHandler::sprm(Sprm & /*sprm*/)
-{
-}
-
-/*
- class OOXMLFooterHandler
- */
-OOXMLFooterHandler::OOXMLFooterHandler(OOXMLFastContextHandler * pContext)
- : mpFastContext(pContext), msStreamId(), mnType(0)
-{
-}
-
-void OOXMLFooterHandler::finalize()
-{
- mpFastContext->resolveFooter(mnType, msStreamId);
-}
-
-void OOXMLFooterHandler::attribute(Id name, Value & val)
-{
- switch (name)
- {
- case NS_ooxml::LN_CT_HdrFtrRef_id:
- msStreamId = val.getString();
- break;
- case NS_ooxml::LN_CT_HdrFtrRef_type:
- mnType = val.getInt();
- break;
- default:
- break;
- }
-}
-
-void OOXMLFooterHandler::sprm(Sprm & /*sprm*/)
-{
-}
-
-/*
- class OOXMLHeaderHandler
- */
-OOXMLHeaderHandler::OOXMLHeaderHandler(OOXMLFastContextHandler * pContext)
- : mpFastContext(pContext), msStreamId(), mnType(0)
-{
-}
-
-void OOXMLHeaderHandler::finalize()
-{
- mpFastContext->resolveHeader(mnType, msStreamId);
-}
-
-void OOXMLHeaderHandler::attribute(Id name, Value & val)
-{
- switch (name)
- {
- case NS_ooxml::LN_CT_HdrFtrRef_id:
- msStreamId = val.getString();
- break;
- case NS_ooxml::LN_CT_HdrFtrRef_type:
- mnType = val.getInt();
- break;
- default:
- break;
- }
-}
-
-void OOXMLHeaderHandler::sprm(Sprm & /*sprm*/)
-{
-}
-
-/*
- class OOXMLBreakHandler
- */
-OOXMLBreakHandler::OOXMLBreakHandler(Stream &rStream)
-: mnType(0),
- mrStream(rStream)
-{
-}
-
-OOXMLBreakHandler::~OOXMLBreakHandler()
-{
- sal_uInt8 tmpBreak[1];
- switch (mnType)
- {
- case NS_ooxml::LN_Value_ST_BrType_column:
- tmpBreak[0] = 0x0E;
- break;
- case NS_ooxml::LN_Value_ST_BrType_page:
- tmpBreak[0] = 0x0C;
- break;
- case NS_ooxml::LN_Value_ST_BrType_textWrapping:
- default: // when no attribute type is present, the spec assume textWrapping
- tmpBreak[0] = 0x0A;
- break;
- }
- mrStream.text(&tmpBreak[0], 1);
-}
-
-void OOXMLBreakHandler::attribute(Id name, Value & val)
-{
- switch (name)
- {
- case NS_ooxml::LN_CT_Br_type:
- mnType = val.getInt();
- break;
- case NS_ooxml::LN_CT_Br_clear:
- break;
- default:
- break;
- }
-}
-
-void OOXMLBreakHandler::sprm(Sprm & /*sprm*/)
-{
-}
-
-/*
- class OOXMLPictureHandler
- */
-OOXMLPictureHandler::OOXMLPictureHandler(OOXMLFastContextHandler * pContext)
-: mpFastContext(pContext)
-{
-}
-
-OOXMLPictureHandler::~OOXMLPictureHandler()
-{
-}
-
-void OOXMLPictureHandler::attribute(Id name, Value & val)
-{
- if (name == NS_ooxml::LN_AG_Blob_r_embed)
- mpFastContext->resolvePicture(val.getString());
- else
- {
- writerfilter::Reference<Properties>::Pointer_t pProps
- (val.getProperties());
- if (pProps)
- pProps->resolve(*this);
- }
-}
-
-void OOXMLPictureHandler::sprm(Sprm & rSprm)
-{
- writerfilter::Reference<Properties>::Pointer_t pProps
- (rSprm.getProps());
-
- if (pProps)
- pProps->resolve(*this);
-}
-
-/**
- class OOXMLHyperlinkHandler
- */
-
-OOXMLHyperlinkHandler::OOXMLHyperlinkHandler(OOXMLFastContextHandler * pContext)
-: mpFastContext(pContext)
-{
-}
-
-OOXMLHyperlinkHandler::~OOXMLHyperlinkHandler()
-{
-}
-
-void OOXMLHyperlinkHandler::writetext()
-{
- OUString sReturn = " HYPERLINK \"" + mURL + "\"" + mFieldCode;
- mpFastContext->text(sReturn);
-}
-
-void OOXMLHyperlinkHandler::attribute(Id name, Value & val)
-{
- switch (name)
- {
- case NS_ooxml::LN_CT_Hyperlink_tgtFrame:
- mFieldCode += " \\t \"";
- mFieldCode += val.getString();
- mFieldCode += "\"";
- break;
- case NS_ooxml::LN_CT_Hyperlink_tooltip:
- mFieldCode += " \\o \"";
- mFieldCode += val.getString();
- mFieldCode += "\"";
- break;
- case NS_ooxml::LN_CT_Hyperlink_docLocation:
- break;
- case NS_ooxml::LN_CT_Hyperlink_history:
- break;
- case NS_ooxml::LN_CT_Hyperlink_anchor:
- mFieldCode += " \\l \"";
- mFieldCode += val.getString();
- mFieldCode += "\"";
- break;
- case NS_ooxml::LN_CT_Hyperlink_r_id:
- mURL = mpFastContext->getTargetForId(val.getString());
- break;
- default:
- break;
- }
-}
-
-void OOXMLHyperlinkHandler::sprm(Sprm & /*rSprm*/)
-{
-}
-
-/**
- class OOXMLHyperlinkURLHandler
- */
-
-OOXMLHyperlinkURLHandler::OOXMLHyperlinkURLHandler(OOXMLFastContextHandler * pContext)
-: mpFastContext(pContext)
-{
-}
-
-OOXMLHyperlinkURLHandler::~OOXMLHyperlinkURLHandler()
-{
- mpFastContext->clearProps();
- mpFastContext->newProperty(NS_ooxml::LN_CT_Hyperlink_URL, OOXMLValue::Pointer_t(new OOXMLStringValue(mURL)));
-}
-
-void OOXMLHyperlinkURLHandler::attribute(Id name, Value & val)
-{
- switch (name)
- {
- case NS_ooxml::LN_CT_Hyperlink_URL:
- mURL = mpFastContext->getTargetForId(val.getString());
- break;
- default:
- break;
- }
-}
-
-void OOXMLHyperlinkURLHandler::sprm(Sprm & /*rSprm*/)
-{
-}
-
-OOXMLAltChunkHandler::OOXMLAltChunkHandler(OOXMLFastContextHandler* pContext)
- : mpFastContext(pContext)
-{
-}
-
-OOXMLAltChunkHandler::~OOXMLAltChunkHandler()
-{
- mpFastContext->clearProps();
- mpFastContext->newProperty(NS_ooxml::LN_CT_AltChunk,
- OOXMLValue::Pointer_t(new OOXMLStringValue(m_aStreamName)));
-}
-
-void OOXMLAltChunkHandler::attribute(Id nName, Value& rValue)
-{
- switch (nName)
- {
- case NS_ooxml::LN_CT_AltChunk:
- m_aStreamName = mpFastContext->getTargetForId(rValue.getString());
- break;
- default:
- break;
- }
-}
-
-void OOXMLAltChunkHandler::sprm(Sprm& /*rSprm*/) {}
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/ooxml/Handler.hxx b/writerfilter/source/ooxml/Handler.hxx
deleted file mode 100644
index 214820086a1e..000000000000
--- a/writerfilter/source/ooxml/Handler.hxx
+++ /dev/null
@@ -1,180 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * 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 .
- */
-#ifndef INCLUDED_WRITERFILTER_SOURCE_OOXML_HANDLER_HXX
-#define INCLUDED_WRITERFILTER_SOURCE_OOXML_HANDLER_HXX
-
-#include <dmapper/resourcemodel.hxx>
-#include "OOXMLFastContextHandler.hxx"
-
-namespace writerfilter::ooxml
-{
-class OOXMLFootnoteHandler : public Properties
-{
- OOXMLFastContextHandler* mpFastContext;
-
-public:
- explicit OOXMLFootnoteHandler(OOXMLFastContextHandler* pContext);
- virtual ~OOXMLFootnoteHandler() override;
-
- virtual void attribute(Id name, Value& val) override;
- virtual void sprm(Sprm& sprm) override;
-};
-
-class OOXMLEndnoteHandler : public Properties
-{
- OOXMLFastContextHandler* mpFastContext;
-
-public:
- explicit OOXMLEndnoteHandler(OOXMLFastContextHandler* pContext);
- virtual ~OOXMLEndnoteHandler() override;
-
- virtual void attribute(Id name, Value& val) override;
- virtual void sprm(Sprm& sprm) override;
-};
-
-class OOXMLFooterHandler : public Properties
-{
- OOXMLFastContextHandler* mpFastContext;
- OUString msStreamId;
- sal_Int32 mnType;
-
-public:
- explicit OOXMLFooterHandler(OOXMLFastContextHandler* pContext);
- void finalize();
- virtual void attribute(Id name, Value& val) override;
- virtual void sprm(Sprm& sprm) override;
-};
-
-class OOXMLHeaderHandler : public Properties
-{
- OOXMLFastContextHandler* mpFastContext;
- OUString msStreamId;
- sal_Int32 mnType;
-
-public:
- explicit OOXMLHeaderHandler(OOXMLFastContextHandler* pContext);
- void finalize();
- virtual void attribute(Id name, Value& val) override;
- virtual void sprm(Sprm& sprm) override;
-};
-
-class OOXMLCommentHandler : public Properties
-{
- OOXMLFastContextHandler* mpFastContext;
-
-public:
- explicit OOXMLCommentHandler(OOXMLFastContextHandler* pContext);
- virtual ~OOXMLCommentHandler() override;
- virtual void attribute(Id name, Value& val) override;
- virtual void sprm(Sprm& sprm) override;
-};
-
-class OOXMLOLEHandler : public Properties
-{
- OOXMLFastContextHandler* mpFastContext;
-
-public:
- explicit OOXMLOLEHandler(OOXMLFastContextHandler* pContext);
- virtual ~OOXMLOLEHandler() override;
-
- virtual void attribute(Id name, Value& val) override;
- virtual void sprm(Sprm& sprm) override;
-};
-
-class OOXMLEmbeddedFontHandler : public Properties
-{
- OOXMLFastContextHandler* mpFastContext;
-
-public:
- explicit OOXMLEmbeddedFontHandler(OOXMLFastContextHandler* pContext);
- virtual ~OOXMLEmbeddedFontHandler() override;
-
- virtual void attribute(Id name, Value& val) override;
- virtual void sprm(Sprm& sprm) override;
-};
-
-class OOXMLBreakHandler : public Properties
-{
- sal_Int32 mnType;
- Stream& mrStream;
-
-public:
- explicit OOXMLBreakHandler(Stream& rStream);
- virtual ~OOXMLBreakHandler() override;
- virtual void attribute(Id name, Value& val) override;
- virtual void sprm(Sprm& sprm) override;
-};
-
-class OOXMLPictureHandler : public Properties
-{
- OOXMLFastContextHandler* mpFastContext;
-
-public:
- explicit OOXMLPictureHandler(OOXMLFastContextHandler* pContext);
- virtual ~OOXMLPictureHandler() override;
-
- virtual void attribute(Id name, Value& val) override;
- virtual void sprm(Sprm& sprm) override;
-};
-
-class OOXMLHyperlinkHandler : public Properties
-{
- OOXMLFastContextHandler* mpFastContext;
- OUString mFieldCode;
- OUString mURL;
-
-public:
- explicit OOXMLHyperlinkHandler(OOXMLFastContextHandler* pContext);
- virtual ~OOXMLHyperlinkHandler() override;
- void writetext();
-
- virtual void attribute(Id name, Value& val) override;
- virtual void sprm(Sprm& sprm) override;
-};
-
-class OOXMLHyperlinkURLHandler : public Properties
-{
- OOXMLFastContextHandler* mpFastContext;
- OUString mURL;
-
-public:
- explicit OOXMLHyperlinkURLHandler(OOXMLFastContextHandler* pContext);
- virtual ~OOXMLHyperlinkURLHandler() override;
-
- virtual void attribute(Id name, Value& val) override;
- virtual void sprm(Sprm& sprm) override;
-};
-
-/// Looks up the stream name for a '<w:altChunk r:id="..."/>' reference.
-class OOXMLAltChunkHandler : public Properties
-{
- OOXMLFastContextHandler* mpFastContext;
- OUString m_aStreamName;
-
-public:
- explicit OOXMLAltChunkHandler(OOXMLFastContextHandler* pContext);
- virtual ~OOXMLAltChunkHandler() override;
-
- virtual void attribute(Id name, Value& val) override;
- virtual void sprm(Sprm& sprm) override;
-};
-}
-#endif // INCLUDED_WRITERFILTER_SOURCE_OOXML_HANDLER_HXX
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/ooxml/OOXMLBinaryObjectReference.cxx b/writerfilter/source/ooxml/OOXMLBinaryObjectReference.cxx
deleted file mode 100644
index 1cf7ba7d01cc..000000000000
--- a/writerfilter/source/ooxml/OOXMLBinaryObjectReference.cxx
+++ /dev/null
@@ -1,71 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * 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 .
- */
-#include "OOXMLBinaryObjectReference.hxx"
-#include <string.h>
-
-namespace writerfilter::ooxml
-{
-
-using namespace ::com::sun::star;
-
-OOXMLBinaryObjectReference::OOXMLBinaryObjectReference
-(OOXMLStream::Pointer_t const & pStream)
-: mpStream(pStream), mbRead(false)
-{
-}
-
-OOXMLBinaryObjectReference::~OOXMLBinaryObjectReference()
-{
-}
-
-void OOXMLBinaryObjectReference::read()
-{
- sal_uInt32 nMaxReadBytes = 1024*1024;
- uno::Sequence<sal_Int8> aSeq(nMaxReadBytes);
- uno::Reference<io::XInputStream> xInputStream =
- mpStream->getDocumentStream();
-
- sal_uInt32 nSize = 0;
- sal_uInt32 nOldSize = 0;
- sal_uInt32 nBytesRead = 0;
-
- while ((nBytesRead = xInputStream->readSomeBytes(aSeq, nMaxReadBytes)) > 0)
- {
- nOldSize = nSize;
- nSize += nBytesRead;
- mSequence.resize(nSize);
-
- memcpy(&mSequence[nOldSize], aSeq.getArray(), nBytesRead);
- }
-
- mbRead = true;
-}
-
-void OOXMLBinaryObjectReference::resolve(BinaryObj & rHandler)
-{
- if (! mbRead)
- read();
-
- rHandler.data(reinterpret_cast<sal_uInt8 *>(mSequence.data()),
- mSequence.size());
-}
-
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/ooxml/OOXMLBinaryObjectReference.hxx b/writerfilter/source/ooxml/OOXMLBinaryObjectReference.hxx
deleted file mode 100644
index 92177d0b35ed..000000000000
--- a/writerfilter/source/ooxml/OOXMLBinaryObjectReference.hxx
+++ /dev/null
@@ -1,46 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * 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 .
- */
-#ifndef INCLUDED_WRITERFILTER_SOURCE_OOXML_OOXMLBINARYOBJECTREFERENCE_HXX
-#define INCLUDED_WRITERFILTER_SOURCE_OOXML_OOXMLBINARYOBJECTREFERENCE_HXX
-
-#include <dmapper/resourcemodel.hxx>
-#include <ooxml/OOXMLDocument.hxx>
-#include <vector>
-
-namespace writerfilter::ooxml
-{
-class OOXMLBinaryObjectReference : public writerfilter::Reference<BinaryObj>
-{
- OOXMLStream::Pointer_t mpStream;
- std::vector<sal_Int8> mSequence;
- bool mbRead;
-
- void read();
-
-public:
- explicit OOXMLBinaryObjectReference(OOXMLStream::Pointer_t const& pStream);
- virtual ~OOXMLBinaryObjectReference() override;
-
- virtual void resolve(BinaryObj& rHandler) override;
-};
-}
-
-#endif // INCLUDED_WRITERFILTER_SOURCE_OOXML_OOXMLBINARYOBJECTREFERENCE_HXX
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/ooxml/OOXMLDocumentImpl.cxx b/writerfilter/source/ooxml/OOXMLDocumentImpl.cxx
deleted file mode 100644
index 813b9cbc75fb..000000000000
--- a/writerfilter/source/ooxml/OOXMLDocumentImpl.cxx
+++ /dev/null
@@ -1,883 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * 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 .
- */
-
-#include <comphelper/sequenceashashmap.hxx>
-
-#include <com/sun/star/lang/WrappedTargetRuntimeException.hpp>
-#include <com/sun/star/document/XDocumentPropertiesSupplier.hpp>
-#include <com/sun/star/xml/sax/SAXException.hpp>
-#include <com/sun/star/xml/dom/DocumentBuilder.hpp>
-#include <com/sun/star/graphic/GraphicMapper.hpp>
-#include <ooxml/resourceids.hxx>
-#include "OOXMLStreamImpl.hxx"
-#include "OOXMLDocumentImpl.hxx"
-#include "OOXMLBinaryObjectReference.hxx"
-#include "OOXMLFastDocumentHandler.hxx"
-#include "OOXMLPropertySet.hxx"
-
-#include <sal/log.hxx>
-#include <tools/diagnose_ex.h>
-#include <svx/dialmgr.hxx>
-#include <svx/strings.hrc>
-#include <comphelper/sequence.hxx>
-#include <cppuhelper/exc_hlp.hxx>
-#include <unotools/mediadescriptor.hxx>
-
-#include <iostream>
-#include <sfx2/objsh.hxx>
-
-// this extern variable is declared in OOXMLStreamImpl.hxx
-OUString customTarget;
-OUString embeddingsTarget;
-using namespace ::com::sun::star;
-namespace writerfilter::ooxml
-{
-
-OOXMLDocumentImpl::OOXMLDocumentImpl(OOXMLStream::Pointer_t const & pStream, const uno::Reference<task::XStatusIndicator>& xStatusIndicator, bool bSkipImages, const uno::Sequence<beans::PropertyValue>& rDescriptor)
- : mpStream(pStream)
- , mxStatusIndicator(xStatusIndicator)
- , mnXNoteId(0)
- , mbIsSubstream(false)
- , mbSkipImages(bSkipImages)
- , mnPercentSize(0)
- , mnProgressLastPos(0)
- , mnProgressCurrentPos(0)
- , mnProgressEndPos(0)
- , m_rBaseURL(utl::MediaDescriptor(rDescriptor).getUnpackedValueOrDefault("DocumentBaseURL", OUString()))
- , maMediaDescriptor(rDescriptor)
- , mxGraphicMapper(graphic::GraphicMapper::create(mpStream->getContext()))
-{
- pushShapeContext();
-}
-
-OOXMLDocumentImpl::~OOXMLDocumentImpl()
-{
-}
-
-void OOXMLDocumentImpl::resolveFastSubStream(Stream & rStreamHandler,
- OOXMLStream::StreamType_t nType)
-{
- OOXMLStream::Pointer_t pStream;
- try
- {
- pStream = OOXMLDocumentFactory::createStream(mpStream, nType);
- }
- catch (uno::Exception const&)
- {
- TOOLS_INFO_EXCEPTION("writerfilter.ooxml", "resolveFastSubStream: exception while "
- "resolving stream " << nType);
- return;
- }
- OOXMLStream::Pointer_t savedStream = mpStream;
- mpStream = pStream;
-
- uno::Reference<xml::sax::XFastParser> xParser(mpStream->getFastParser());
-
- if (xParser.is())
- {
- uno::Reference<uno::XComponentContext> xContext(mpStream->getContext());
- OOXMLFastDocumentHandler * pDocHandler =
- new OOXMLFastDocumentHandler(xContext, &rStreamHandler, this, mnXNoteId);
-
- uno::Reference<xml::sax::XFastDocumentHandler> xDocumentHandler(pDocHandler);
- uno::Reference<xml::sax::XFastTokenHandler> xTokenHandler(mpStream->getFastTokenHandler());
-
- xParser->setFastDocumentHandler(xDocumentHandler);
- xParser->setTokenHandler(xTokenHandler);
-
- uno::Reference<io::XInputStream> xInputStream = pStream->getDocumentStream();
-
- if (xInputStream.is())
- {
- struct xml::sax::InputSource oInputSource;
- oInputSource.aInputStream = xInputStream;
- xParser->parseStream(oInputSource);
-
- xInputStream->closeInput();
- }
- }
-
- mpStream = savedStream;
-}
-
-void OOXMLDocumentImpl::resolveFastSubStreamWithId(Stream & rStream,
- const writerfilter::Reference<Stream>::Pointer_t& pStream,
- sal_uInt32 nId)
-{
- rStream.substream(nId, pStream);
-}
-
-uno::Reference<xml::dom::XDocument> OOXMLDocumentImpl::importSubStream(OOXMLStream::StreamType_t nType)
-{
- uno::Reference<xml::dom::XDocument> xRet;
-
- OOXMLStream::Pointer_t pStream;
- try
- {
- pStream = OOXMLDocumentFactory::createStream(mpStream, nType);
- }
- catch (uno::Exception const&)
- {
- TOOLS_INFO_EXCEPTION("writerfilter.ooxml", "importSubStream: exception while "
- "importing stream " << nType);
- return xRet;
- }
-
- uno::Reference<io::XInputStream> xInputStream = pStream->getDocumentStream();
- if (xInputStream.is())
- {
- try
- {
- uno::Reference<uno::XComponentContext> xContext(mpStream->getContext());
- uno::Reference<xml::dom::XDocumentBuilder> xDomBuilder(xml::dom::DocumentBuilder::create(xContext));
- xRet = xDomBuilder->parse(xInputStream);
- }
- catch (uno::Exception const&)
- {
- TOOLS_INFO_EXCEPTION("writerfilter.ooxml", "importSubStream: exception while "
- "parsing stream " << nType);
- return xRet;
- }
- }
-
- if (OOXMLStream::CUSTOMXML == nType)
- {
- importSubStreamRelations(pStream, OOXMLStream::CUSTOMXMLPROPS);
- }
- else if (OOXMLStream::CHARTS == nType)
- {
- importSubStreamRelations(pStream, OOXMLStream::EMBEDDINGS);
- }
-
- return xRet;
-}
-
-
-void OOXMLDocumentImpl::importSubStreamRelations(const OOXMLStream::Pointer_t& pStream, OOXMLStream::StreamType_t nType)
-{
- uno::Reference<xml::dom::XDocument> xRelation;
- OOXMLStream::Pointer_t cStream;
- try
- {
- cStream = OOXMLDocumentFactory::createStream(pStream, nType);
- }
- catch (uno::Exception const&)
- {
- TOOLS_WARN_EXCEPTION("writerfilter.ooxml", "importSubStreamRelations: exception while "
- "importing stream " << nType);
- return;
- }
-
- uno::Reference<io::XInputStream> xcpInputStream = cStream->getDocumentStream();
-
- if (!xcpInputStream.is())
- return;
-
- // importing itemprops files for item.xml from customXml.
- if (OOXMLStream::CUSTOMXMLPROPS == nType)
- {
- try
- {
- uno::Reference<uno::XComponentContext> xcpContext(pStream->getContext());
- uno::Reference<xml::dom::XDocumentBuilder> xDomBuilder(xml::dom::DocumentBuilder::create(xcpContext));
- xRelation = xDomBuilder->parse(xcpInputStream);
- }
- catch (uno::Exception const&)
- {
- TOOLS_WARN_EXCEPTION("writerfilter.ooxml", "importSubStream: exception while "
- "parsing stream " << nType);
- mxCustomXmlProsDom = xRelation;
- }
-
- if(xRelation.is())
- {
- mxCustomXmlProsDom = xRelation;
- }
- }
- else if(OOXMLStream::EMBEDDINGS == nType)
- {
- mxEmbeddings = xcpInputStream;
- }
- else if(OOXMLStream::CHARTS == nType)
- {
- importSubStreamRelations(cStream, OOXMLStream::EMBEDDINGS);
- }
-
-
-}
-
-void OOXMLDocumentImpl::setXNoteId(const sal_Int32 nId)
-{
- mnXNoteId = nId;
-}
-
-sal_Int32 OOXMLDocumentImpl::getXNoteId() const
-{
- return mnXNoteId;
-}
-
-const OUString & OOXMLDocumentImpl::getTarget() const
-{
- return mpStream->getTarget();
-}
-
-writerfilter::Reference<Stream>::Pointer_t
-OOXMLDocumentImpl::getSubStream(const OUString & rId)
-{
- OOXMLStream::Pointer_t pStream
- (OOXMLDocumentFactory::createStream(mpStream, rId));
-
- OOXMLDocumentImpl * pTemp;
- // Do not pass status indicator to sub-streams: they are typically marginal in size, so we just track the main document for now.
- writerfilter::Reference<Stream>::Pointer_t pRet( pTemp = new OOXMLDocumentImpl(pStream, uno::Reference<task::XStatusIndicator>(), mbSkipImages, maMediaDescriptor));
- pTemp->setModel(mxModel);
- pTemp->setDrawPage(mxDrawPage);
- pTemp->mbIsSubstream = true;
- return pRet;
-}
-
-writerfilter::Reference<Stream>::Pointer_t
-OOXMLDocumentImpl::getXNoteStream(OOXMLStream::StreamType_t nType, const sal_Int32 nId)
-{
- OOXMLStream::Pointer_t pStream =
- OOXMLDocumentFactory::createStream(mpStream, nType);
- // See above, no status indicator for the note stream, either.
- OOXMLDocumentImpl * pDocument = new OOXMLDocumentImpl(pStream, uno::Reference<task::XStatusIndicator>(), mbSkipImages, maMediaDescriptor);
- pDocument->setXNoteId(nId);
- pDocument->setModel(getModel());
- pDocument->setDrawPage(getDrawPage());
-
- return writerfilter::Reference<Stream>::Pointer_t(pDocument);
-}
-
-void OOXMLDocumentImpl::resolveFootnote(Stream & rStream,
- Id aType,
- const sal_Int32 nNoteId)
-{
- writerfilter::Reference<Stream>::Pointer_t pStream =
- getXNoteStream(OOXMLStream::FOOTNOTES, nNoteId);
-
- Id nId;
- switch (aType)
- {
- case NS_ooxml::LN_Value_doc_ST_FtnEdn_separator:
- case NS_ooxml::LN_Value_doc_ST_FtnEdn_continuationSeparator:
- nId = aType;
- break;
- default:
- nId = NS_ooxml::LN_footnote;
- break;
- }
-
- resolveFastSubStreamWithId(rStream, pStream, nId);
-}
-
-void OOXMLDocumentImpl::resolveEndnote(Stream & rStream,
- Id aType,
- const sal_Int32 nNoteId)
-{
- writerfilter::Reference<Stream>::Pointer_t pStream =
- getXNoteStream(OOXMLStream::ENDNOTES, nNoteId);
-
- Id nId;
- switch (aType)
- {
- case NS_ooxml::LN_Value_doc_ST_FtnEdn_separator:
- case NS_ooxml::LN_Value_doc_ST_FtnEdn_continuationSeparator:
- nId = aType;
- break;
- default:
- nId = NS_ooxml::LN_endnote;
- break;
- }
-
- resolveFastSubStreamWithId(rStream, pStream, nId);
-}
-
-void OOXMLDocumentImpl::resolveComment(Stream & rStream,
- const sal_Int32 nId)
-{
- writerfilter::Reference<Stream>::Pointer_t pStream =
- getXNoteStream(OOXMLStream::COMMENTS, nId);
-
- resolveFastSubStreamWithId(rStream, pStream, NS_ooxml::LN_annotation);
-}
-
-OOXMLPropertySet * OOXMLDocumentImpl::getPicturePropSet
-(const OUString & rId)
-{
- OOXMLStream::Pointer_t pStream
- (OOXMLDocumentFactory::createStream(mpStream, rId));
-
- writerfilter::Reference<BinaryObj>::Pointer_t pPicture
- (new OOXMLBinaryObjectReference(pStream));
-
- OOXMLValue::Pointer_t pPayloadValue(new OOXMLBinaryValue(pPicture));
-
- OOXMLPropertySet::Pointer_t pBlipSet(new OOXMLPropertySet);
-
- pBlipSet->add(NS_ooxml::LN_payload, pPayloadValue, OOXMLProperty::ATTRIBUTE);
-
- OOXMLValue::Pointer_t pBlipValue(new OOXMLPropertySetValue(pBlipSet));
-
- OOXMLPropertySet * pProps = new OOXMLPropertySet;
-
- pProps->add(NS_ooxml::LN_blip, pBlipValue, OOXMLProperty::ATTRIBUTE);
-
- return pProps;
-}
-
-void OOXMLDocumentImpl::resolvePicture(Stream & rStream,
- const OUString & rId)
-{
- OOXMLPropertySet::Pointer_t pProps(getPicturePropSet(rId));
-
- rStream.props(pProps.get());
-}
-
-OUString OOXMLDocumentImpl::getTargetForId(const OUString & rId)
-{
- return mpStream->getTargetForId(rId);
-}
-
-void OOXMLDocumentImpl::resolveHeader(Stream & rStream,
- const sal_Int32 type,
- const OUString & rId)
-{
- writerfilter::Reference<Stream>::Pointer_t pStream =
- getSubStream(rId);
- switch (type)
- {
- case NS_ooxml::LN_Value_ST_HdrFtr_even:
- resolveFastSubStreamWithId(rStream, pStream, NS_ooxml::LN_headerl);
- break;
- case NS_ooxml::LN_Value_ST_HdrFtr_default: // here we assume that default is right, but not necessarily true :-(
- resolveFastSubStreamWithId(rStream, pStream, NS_ooxml::LN_headerr);
- break;
- case NS_ooxml::LN_Value_ST_HdrFtr_first:
- resolveFastSubStreamWithId(rStream, pStream, NS_ooxml::LN_headerf);
- break;
- default:
- break;
- }
-}
-
-void OOXMLDocumentImpl::resolveFooter(Stream & rStream,
- const sal_Int32 type,
- const OUString & rId)
-{
- writerfilter::Reference<Stream>::Pointer_t pStream =
- getSubStream(rId);
-
- switch (type)
- {
- case NS_ooxml::LN_Value_ST_HdrFtr_even:
- resolveFastSubStreamWithId(rStream, pStream, NS_ooxml::LN_footerl);
- break;
- case NS_ooxml::LN_Value_ST_HdrFtr_default: // here we assume that default is right, but not necessarily true :-(
- resolveFastSubStreamWithId(rStream, pStream, NS_ooxml::LN_footerr);
- break;
- case NS_ooxml::LN_Value_ST_HdrFtr_first:
- resolveFastSubStreamWithId(rStream, pStream, NS_ooxml::LN_footerf);
- break;
- default:
- break;
- }
-}
-
-namespace {
-// Ensures that the indicator is reset after exiting OOXMLDocumentImpl::resolve
-class StatusIndicatorGuard{
-public:
- explicit StatusIndicatorGuard(css::uno::Reference<css::task::XStatusIndicator> const & xStatusIndicator)
- :mxStatusIndicator(xStatusIndicator)
- {
- }
-
- ~StatusIndicatorGuard()
- {
- if (mxStatusIndicator.is())
- mxStatusIndicator->end();
- }
-
-private:
- css::uno::Reference<css::task::XStatusIndicator> mxStatusIndicator;
-};
-}
-
-void OOXMLDocumentImpl::resolve(Stream & rStream)
-{
- StatusIndicatorGuard aStatusIndicatorGuard(mxStatusIndicator);
-
- if (utl::MediaDescriptor(maMediaDescriptor).getUnpackedValueOrDefault("ReadGlossaries", false))
- {
- resolveFastSubStream(rStream, OOXMLStream::GLOSSARY);
- return;
- }
-
- uno::Reference<xml::sax::XFastParser> xParser(mpStream->getFastParser());
-
- if (mxModel.is())
- {
- uno::Reference<document::XDocumentPropertiesSupplier> xDocumentPropertiesSupplier(mxModel, uno::UNO_QUERY);
- uno::Reference<document::XDocumentProperties> xDocumentProperties = xDocumentPropertiesSupplier->getDocumentProperties();
- comphelper::SequenceAsHashMap aMap(xDocumentProperties->getDocumentStatistics());
- if (aMap.find("ParagraphCount") != aMap.end())
- {
- sal_Int32 nValue;
- if (aMap["ParagraphCount"] >>= nValue)
- {
- if (mxStatusIndicator.is())
- {
- // We want to care about the progress if we know the estimated paragraph count and we have given a status indicator as well.
- // Set the end position only here, so later it's enough to check if that is non-zero in incrementProgress().
- mnProgressEndPos = nValue;
- OUString aDocLoad(SvxResId(RID_SVXSTR_DOC_LOAD));
- mxStatusIndicator->start(aDocLoad, mnProgressEndPos);
- mnPercentSize = mnProgressEndPos / 100;
- }
- }
- }
- }
-
- if (!xParser.is())
- return;
-
- uno::Reference<uno::XComponentContext> xContext(mpStream->getContext());
-
- OOXMLFastDocumentHandler * pDocHandler =
- new OOXMLFastDocumentHandler(xContext, &rStream, this, mnXNoteId);
- pDocHandler->setIsSubstream( mbIsSubstream );
- uno::Reference < xml::sax::XFastDocumentHandler > xDocumentHandler(pDocHandler);
- uno::Reference < xml::sax::XFastTokenHandler > xTokenHandler(mpStream->getFastTokenHandler());
-
- resolveFastSubStream(rStream, OOXMLStream::SETTINGS);
- mxThemeDom = importSubStream(OOXMLStream::THEME);
- resolveFastSubStream(rStream, OOXMLStream::THEME);
- mxGlossaryDocDom = importSubStream(OOXMLStream::GLOSSARY);
- if (mxGlossaryDocDom.is())
- resolveGlossaryStream(rStream);
-
- resolveEmbeddingsStream(mpStream);
-
- // Custom xml's are handled as part of grab bag.
- resolveCustomXmlStream(rStream);
-
- resolveFastSubStream(rStream, OOXMLStream::FONTTABLE);
- resolveFastSubStream(rStream, OOXMLStream::STYLES);
- resolveFastSubStream(rStream, OOXMLStream::NUMBERING);
-
- xParser->setFastDocumentHandler( xDocumentHandler );
- xParser->setTokenHandler( xTokenHandler );
-
- xml::sax::InputSource aParserInput;
- aParserInput.sSystemId = mpStream->getTarget();
- aParserInput.aInputStream = mpStream->getDocumentStream();
- try
- {
- xParser->parseStream(aParserInput);
- }
- catch (xml::sax::SAXException const& rErr)
- {
- // don't silently swallow these - handlers may not have been executed,
- // and the domain mapper is likely in an inconsistent state
- // In case user chooses to try to continue loading, don't ask again for this file
- SfxObjectShell* rShell = SfxObjectShell::GetShellFromComponent(mxModel);
- if (!rShell
- || !rShell->IsContinueImportOnFilterExceptions(
- OUString("SAXException: " + rErr.Message)))
- throw;
- }
- catch (uno::RuntimeException const&)
- {
- throw;
- }
- // note: cannot throw anything other than SAXException out of here?
- catch (uno::Exception const&)
- {
- css::uno::Any anyEx = cppu::getCaughtException();
- SAL_WARN("writerfilter.ooxml", "OOXMLDocumentImpl::resolve(): " << exceptionToString(anyEx));
- throw lang::WrappedTargetRuntimeException("", nullptr, anyEx);
- }
- catch (...)
- {
- SAL_WARN("writerfilter.ooxml",
- "OOXMLDocumentImpl::resolve(): non-UNO exception");
- }
-}
-
-void OOXMLDocumentImpl::incrementProgress()
-{
- mnProgressCurrentPos++;
- // 1) If we know the end
- // 2) We progressed enough that updating makes sense
- // 3) We did not reach the end yet (possible in case the doc stat is misleading)
- if (mnProgressEndPos && mnProgressCurrentPos > (mnProgressLastPos + mnPercentSize) && mnProgressLastPos < mnProgressEndPos)
- {
- mnProgressLastPos = mnProgressCurrentPos;
- if (mxStatusIndicator.is())
- mxStatusIndicator->setValue(mnProgressLastPos);
- }
-}
-
-void OOXMLDocumentImpl::resolveCustomXmlStream(Stream & rStream)
-{
- // Resolving all item[n].xml files from CustomXml folder.
- uno::Reference<embed::XRelationshipAccess> xRelationshipAccess;
- xRelationshipAccess.set(dynamic_cast<OOXMLStreamImpl&>(*mpStream).accessDocumentStream(), uno::UNO_QUERY);
- if (!xRelationshipAccess.is())
- return;
-
- static const char sCustomType[] = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXml";
- static const char sCustomTypeStrict[] = "http://purl.oclc.org/ooxml/officeDocument/relationships/customXml";
- bool bFound = false;
- const uno::Sequence<uno::Sequence< beans::StringPair>> aSeqs = xRelationshipAccess->getAllRelationships();
- std::vector<uno::Reference<xml::dom::XDocument>> aCustomXmlDomList;
- std::vector<uno::Reference<xml::dom::XDocument>> aCustomXmlDomPropsList;
- for (const uno::Sequence<beans::StringPair>& aSeq : aSeqs)
- {
- for (const beans::StringPair& aPair : aSeq)
- {
- // Need to resolve only customxml files from document relationships.
- // Skipping other files.
- if (aPair.Second == sCustomType ||
- aPair.Second == sCustomTypeStrict)
- bFound = true;
- else if (aPair.First == "Target" && bFound)
- {
- // Adding value to extern variable customTarget. It will be used in ooxmlstreamimpl
- // to ensure customxml target is visited in lcl_getTarget.
- customTarget = aPair.Second;
- }
- }
-
- if (bFound)
- {
- uno::Reference<xml::dom::XDocument> customXmlTemp = importSubStream(OOXMLStream::CUSTOMXML);
- // This will add all item[n].xml with its relationship file i.e itemprops.xml to
- // grabbag list.
- if (mxCustomXmlProsDom.is() && customXmlTemp.is())
- {
- aCustomXmlDomList.push_back(customXmlTemp);
- aCustomXmlDomPropsList.push_back(mxCustomXmlProsDom);
- resolveFastSubStream(rStream, OOXMLStream::CUSTOMXML);
- }
-
- bFound = false;
- }
- }
-
- mxCustomXmlDomList = comphelper::containerToSequence(aCustomXmlDomList);
- mxCustomXmlDomPropsList = comphelper::containerToSequence(aCustomXmlDomPropsList);
-}
-
-void OOXMLDocumentImpl::resolveGlossaryStream(Stream & /*rStream*/)
-{
- static const char sSettingsType[] = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/settings";
- static const char sStylesType[] = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles";
- static const char sFonttableType[] = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/fontTable";
- static const char sWebSettings[] = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/webSettings";
- static const char sSettingsTypeStrict[] = "http://purl.oclc.org/ooxml/officeDocument/relationships/settings";
- static const char sStylesTypeStrict[] = "http://purl.oclc.org/ooxml/officeDocument/relationships/styles";
- static const char sFonttableTypeStrict[] = "http://purl.oclc.org/ooxml/officeDocument/relationships/fontTable";
- static const char sWebSettingsStrict[] = "http://purl.oclc.org/ooxml/officeDocument/relationships/webSettings";
-
- OOXMLStream::Pointer_t pStream;
- try
- {
- pStream = OOXMLDocumentFactory::createStream(mpStream, OOXMLStream::GLOSSARY);
- }
- catch (uno::Exception const&)
- {
- TOOLS_INFO_EXCEPTION("writerfilter.ooxml", "resolveGlossaryStream: exception while "
- "createStream for glossary" << OOXMLStream::GLOSSARY);
- return;
- }
- uno::Reference<embed::XRelationshipAccess> xRelationshipAccess;
- xRelationshipAccess.set(dynamic_cast<OOXMLStreamImpl&>(*pStream).accessDocumentStream(), uno::UNO_QUERY);
- if (!xRelationshipAccess.is())
- return;
-
-
- const uno::Sequence< uno::Sequence< beans::StringPair > >aSeqs = xRelationshipAccess->getAllRelationships();
- std::vector< uno::Sequence<uno::Any> > aGlossaryDomList;
- for (const uno::Sequence< beans::StringPair >& aSeq : aSeqs)
- {
- OOXMLStream::Pointer_t gStream;
- //Follows following aSeq[0] is Id, aSeq[1] is Type, aSeq[2] is Target
- if (aSeq.getLength() < 3)
- {
- SAL_WARN("writerfilter.ooxml", "too short sequence");
- continue;
- }
-
- OUString gId(aSeq[0].Second);
- OUString gType(aSeq[1].Second);
- OUString gTarget(aSeq[2].Second);
- OUString contentType;
-
- OOXMLStream::StreamType_t nType(OOXMLStream::UNKNOWN);
- bool bFound = true;
- if(gType == sSettingsType ||
- gType == sSettingsTypeStrict)
- {
- nType = OOXMLStream::SETTINGS;
- contentType = "application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml";
- }
- else if(gType == sStylesType ||
- gType == sStylesTypeStrict)
- {
- nType = OOXMLStream::STYLES;
- contentType = "application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml";
- }
- else if(gType == sWebSettings ||
- gType == sWebSettingsStrict)
- {
- nType = OOXMLStream::WEBSETTINGS;
- contentType = "application/vnd.openxmlformats-officedocument.wordprocessingml.webSettings+xml";
- }
- else if(gType == sFonttableType ||
- gType == sFonttableTypeStrict)
- {
- nType = OOXMLStream::FONTTABLE;
- contentType = "application/vnd.openxmlformats-officedocument.wordprocessingml.fontTable+xml";
- }
- else
- {
- bFound = false;
- //"Unhandled content-type while grab bagging Glossary Folder");
- }
-
- if (bFound)
- {
- uno::Reference<xml::dom::XDocument> xDom;
- try
- {
- gStream = OOXMLDocumentFactory::createStream(pStream, nType);
- uno::Reference<io::XInputStream> xInputStream = gStream->getDocumentStream();
- uno::Reference<uno::XComponentContext> xContext(pStream->getContext());
- uno::Reference<xml::dom::XDocumentBuilder> xDomBuilder(xml::dom::DocumentBuilder::create(xContext));
- xDom = xDomBuilder->parse(xInputStream);
- }
- catch (uno::Exception const&)
- {
- TOOLS_INFO_EXCEPTION("writerfilter.ooxml", "importSubStream: exception while "
- "parsing stream of Type" << nType);
- return;
- }
-
- if (xDom.is())
- {
- uno::Sequence< uno::Any > glossaryTuple (5);
- glossaryTuple[0] <<= xDom;
- glossaryTuple[1] <<= gId;
- glossaryTuple[2] <<= gType;
- glossaryTuple[3] <<= gTarget;
- glossaryTuple[4] <<= contentType;
- aGlossaryDomList.push_back(glossaryTuple);
- }
- }
- }
- mxGlossaryDomList = comphelper::containerToSequence(aGlossaryDomList);
-}
-
-void OOXMLDocumentImpl::resolveEmbeddingsStream(const OOXMLStream::Pointer_t& pStream)
-{
- uno::Reference<embed::XRelationshipAccess> xRelationshipAccess;
- xRelationshipAccess.set(dynamic_cast<OOXMLStreamImpl&>(*pStream).accessDocumentStream(), uno::UNO_QUERY);
- if (xRelationshipAccess.is())
- {
- OUString const sChartType("http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart");
- OUString const sChartTypeStrict("http://purl.oclc.org/ooxml/officeDocument/relationships/chart");
- OUString const sFootersType("http://schemas.openxmlformats.org/officeDocument/2006/relationships/footer");
- OUString const sFootersTypeStrict("http://purl.oclc.org/ooxml/officeDocument/relationships/footer");
- OUString const sHeaderType("http://schemas.openxmlformats.org/officeDocument/2006/relationships/header");
- OUString const sHeaderTypeStrict("http://purl.oclc.org/ooxml/officeDocument/relationships/header");
-
- bool bFound = false;
- bool bHeaderFooterFound = false;
- OOXMLStream::StreamType_t streamType = OOXMLStream::UNKNOWN;
- const uno::Sequence< uno::Sequence< beans::StringPair > >aSeqs = xRelationshipAccess->getAllRelationships();
- for (const uno::Sequence< beans::StringPair >& aSeq : aSeqs)
- {
- for (const beans::StringPair& aPair : aSeq)
- {
- if (aPair.Second == sChartType ||
- aPair.Second == sChartTypeStrict)
- {
- bFound = true;
- }
- else if(aPair.Second == sFootersType ||
- aPair.Second == sFootersTypeStrict)
- {
- bHeaderFooterFound = true;
- streamType = OOXMLStream::FOOTER;
- }
- else if(aPair.Second == sHeaderType ||
- aPair.Second == sHeaderTypeStrict)
- {
- bHeaderFooterFound = true;
- streamType = OOXMLStream::HEADER;
- }
- else if(aPair.First == "Target" && ( bFound || bHeaderFooterFound ))
- {
- // Adding value to extern variable customTarget. It will be used in ooxmlstreamimpl
- // to ensure chart.xml target is visited in lcl_getTarget.
- customTarget = aPair.Second;
- }
- }
- if( bFound || bHeaderFooterFound)
- {
- if(bFound)
- {
- importSubStreamRelations(pStream, OOXMLStream::CHARTS);
- }
- if(bHeaderFooterFound)
- {
- try
- {
- OOXMLStream::Pointer_t Stream = OOXMLDocumentFactory::createStream(pStream, streamType);
- if (Stream)
- resolveEmbeddingsStream(Stream);
- }
- catch (uno::Exception const&)
- {
- TOOLS_INFO_EXCEPTION("writerfilter.ooxml", "resolveEmbeddingsStream: can't find header/footer whilst "
- "resolving stream " << streamType);
- return;
- }
- }
-
- beans::PropertyValue embeddingsTemp;
- // This will add all .xlsx and .bin to grabbag list.
- if(bFound && mxEmbeddings.is())
- {
- embeddingsTemp.Name = embeddingsTarget;
- embeddingsTemp.Value <<= mxEmbeddings;
- aEmbeddings.push_back(embeddingsTemp);
- mxEmbeddings.clear();
- }
- bFound = false;
- bHeaderFooterFound = false;
- }
- }
- }
- if (!aEmbeddings.empty())
- mxEmbeddingsList = comphelper::containerToSequence(aEmbeddings);
-}
-
-uno::Reference<xml::dom::XDocument> OOXMLDocumentImpl::getGlossaryDocDom( )
-{
- return mxGlossaryDocDom;
-}
-
-uno::Sequence<uno::Sequence< uno::Any> > OOXMLDocumentImpl::getGlossaryDomList()
-{
- return mxGlossaryDomList;
-}
-
-uno::Reference<io::XInputStream> OOXMLDocumentImpl::getInputStreamForId(const OUString & rId)
-{
- OOXMLStream::Pointer_t pStream(OOXMLDocumentFactory::createStream(mpStream, rId));
-
- return pStream->getDocumentStream();
-}
-
-void OOXMLDocumentImpl::setModel(uno::Reference<frame::XModel> xModel)
-{
- mxModel.set(xModel);
-}
-
-uno::Reference<frame::XModel> OOXMLDocumentImpl::getModel()
-{
- return mxModel;
-}
-
-void OOXMLDocumentImpl::setDrawPage(uno::Reference<drawing::XDrawPage> xDrawPage)
-{
- mxDrawPage.set(xDrawPage);
-}
-
-uno::Reference<drawing::XDrawPage> OOXMLDocumentImpl::getDrawPage()
-{
- return mxDrawPage;
-}
-
-const uno::Sequence<beans::PropertyValue>& OOXMLDocumentImpl::getMediaDescriptor() const
-{
- return maMediaDescriptor;
-}
-
-void OOXMLDocumentImpl::setShapeContext( uno::Reference<xml::sax::XFastShapeContextHandler> xContext )
-{
- if (!maShapeContexts.empty())
- maShapeContexts.top() = xContext;
-}
-
-uno::Reference<xml::sax::XFastShapeContextHandler> OOXMLDocumentImpl::getShapeContext( )
-{
- if (!maShapeContexts.empty())
- return maShapeContexts.top();
- else
- return uno::Reference<xml::sax::XFastShapeContextHandler>();
-}
-
-void OOXMLDocumentImpl::pushShapeContext()
-{
- maShapeContexts.push(uno::Reference<xml::sax::XFastShapeContextHandler>());
-}
-
-void OOXMLDocumentImpl::popShapeContext()
-{
- if (!maShapeContexts.empty())
- maShapeContexts.pop();
-}
-
-uno::Reference<xml::dom::XDocument> OOXMLDocumentImpl::getThemeDom( )
-{
- return mxThemeDom;
-}
-
-uno::Sequence<uno::Reference<xml::dom::XDocument> > OOXMLDocumentImpl::getCustomXmlDomList( )
-{
- return mxCustomXmlDomList;
-}
-
-uno::Sequence<uno::Reference<xml::dom::XDocument> > OOXMLDocumentImpl::getCustomXmlDomPropsList( )
-{
- return mxCustomXmlDomPropsList;
-}
-
-uno::Sequence<beans::PropertyValue > OOXMLDocumentImpl::getEmbeddingsList( )
-{
- return mxEmbeddingsList;
-}
-
-OOXMLDocument *
-OOXMLDocumentFactory::createDocument
-(const OOXMLStream::Pointer_t& pStream,
- const uno::Reference<task::XStatusIndicator>& xStatusIndicator,
- bool mbSkipImages, const uno::Sequence<beans::PropertyValue>& rDescriptor)
-{
- return new OOXMLDocumentImpl(pStream, xStatusIndicator, mbSkipImages, rDescriptor);
-}
-
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/ooxml/OOXMLDocumentImpl.hxx b/writerfilter/source/ooxml/OOXMLDocumentImpl.hxx
deleted file mode 100644
index 1848f8971766..000000000000
--- a/writerfilter/source/ooxml/OOXMLDocumentImpl.hxx
+++ /dev/null
@@ -1,150 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * 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 .
- */
-#ifndef INCLUDED_WRITERFILTER_SOURCE_OOXML_OOXMLDOCUMENTIMPL_HXX
-#define INCLUDED_WRITERFILTER_SOURCE_OOXML_OOXMLDOCUMENTIMPL_HXX
-
-#include <ooxml/OOXMLDocument.hxx>
-
-#include <com/sun/star/xml/dom/XDocument.hpp>
-#include <com/sun/star/graphic/XGraphicMapper.hpp>
-
-#include "OOXMLPropertySet.hxx"
-
-#include <vector>
-#include <stack>
-
-namespace writerfilter::ooxml
-{
-
-class OOXMLDocumentImpl : public OOXMLDocument
-{
- OOXMLStream::Pointer_t mpStream;
- css::uno::Reference<css::task::XStatusIndicator> mxStatusIndicator;
- sal_Int32 mnXNoteId;
-
- css::uno::Reference<css::frame::XModel> mxModel;
- css::uno::Reference<css::drawing::XDrawPage> mxDrawPage;
- css::uno::Reference<css::xml::dom::XDocument> mxGlossaryDocDom;
- css::uno::Sequence < css::uno::Sequence< css::uno::Any > > mxGlossaryDomList;
- /// Stack of shape contexts, 1 element for VML, 1 element / nesting level for drawingML.
- std::stack< css::uno::Reference<css::xml::sax::XFastShapeContextHandler> > maShapeContexts;
- css::uno::Reference<css::xml::dom::XDocument> mxThemeDom;
- css::uno::Sequence<css::uno::Reference<css::xml::dom::XDocument> > mxCustomXmlDomList;
- css::uno::Sequence<css::uno::Reference<css::xml::dom::XDocument> > mxCustomXmlDomPropsList;
- css::uno::Reference<css::xml::dom::XDocument> mxCustomXmlProsDom;
- css::uno::Reference<css::io::XInputStream> mxEmbeddings;
- css::uno::Sequence < css::beans::PropertyValue > mxEmbeddingsList;
- std::vector<css::beans::PropertyValue> aEmbeddings;
- bool mbIsSubstream;
- bool mbSkipImages;
- /// How many paragraphs equal to 1 percent?
- sal_Int32 mnPercentSize;
- /// Position progress when it was last updated, possibly not after every paragraph in case of large documents.
- sal_Int32 mnProgressLastPos;
- /// Current position progress, updated after every paragraph.
- sal_Int32 mnProgressCurrentPos;
- /// End position, i.e. the estimated number of paragraphs.
- sal_Int32 mnProgressEndPos;
- /// DocumentBaseURL
- OUString m_rBaseURL;
- css::uno::Sequence<css::beans::PropertyValue> maMediaDescriptor;
- /// Graphic mapper
- css::uno::Reference<css::graphic::XGraphicMapper> mxGraphicMapper;
-
-private:
- void resolveFastSubStream(Stream & rStream,
- OOXMLStream::StreamType_t nType);
-
- static void resolveFastSubStreamWithId(Stream & rStream,
- const writerfilter::Reference<Stream>::Pointer_t& pStream,
- sal_uInt32 nId);
-
- css::uno::Reference<css::xml::dom::XDocument> importSubStream(OOXMLStream::StreamType_t nType);
-
- void importSubStreamRelations(const OOXMLStream::Pointer_t& pStream, OOXMLStream::StreamType_t nType);
-
- writerfilter::Reference<Stream>::Pointer_t
- getSubStream(const OUString & rId);
-
- writerfilter::Reference<Stream>::Pointer_t
- getXNoteStream(OOXMLStream::StreamType_t nType, const sal_Int32 nNoteId);
-
- void resolveCustomXmlStream(Stream & rStream);
- void resolveGlossaryStream(Stream & rStream);
- void resolveEmbeddingsStream(const OOXMLStream::Pointer_t& pStream);
-public:
- OOXMLDocumentImpl(OOXMLStream::Pointer_t const & pStream, const css::uno::Reference<css::task::XStatusIndicator>& xStatusIndicator, bool bSkipImages, const css::uno::Sequence<css::beans::PropertyValue>& rDescriptor);
- virtual ~OOXMLDocumentImpl() override;
-
- virtual void resolve(Stream & rStream) override;
-
- virtual void resolveFootnote(Stream & rStream,
- Id aType,
- const sal_Int32 nNoteId) override;
- virtual void resolveEndnote(Stream & rStream,
- Id aType,
- const sal_Int32 nNoteId) override;
- virtual void resolveHeader(Stream & rStream,
- const sal_Int32 type,
- const OUString & rId) override;
- virtual void resolveFooter(Stream & rStream,
- const sal_Int32 type,
- const OUString & rId) override;
-
- virtual void resolveComment(Stream & rStream, const sal_Int32 nId) override;
-
- OOXMLPropertySet * getPicturePropSet(const OUString & rId);
- virtual void resolvePicture(Stream & rStream, const OUString & rId) override;
-
- virtual OUString getTargetForId(const OUString & rId) override;
-
- virtual void setModel(css::uno::Reference<css::frame::XModel> xModel) override;
- virtual css::uno::Reference<css::frame::XModel> getModel() override;
- virtual void setDrawPage(css::uno::Reference<css::drawing::XDrawPage> xDrawPage) override;
- virtual css::uno::Reference<css::drawing::XDrawPage> getDrawPage() override;
- virtual css::uno::Reference<css::io::XInputStream> getInputStreamForId(const OUString & rId) override;
- virtual void setXNoteId(const sal_Int32 nId) override;
- virtual sal_Int32 getXNoteId() const override;
- virtual const OUString & getTarget() const override;
- virtual css::uno::Reference<css::xml::sax::XFastShapeContextHandler> getShapeContext( ) override;
- virtual void setShapeContext( css::uno::Reference<css::xml::sax::XFastShapeContextHandler> xContext ) override;
- void pushShapeContext() override;
- void popShapeContext() override;
- virtual css::uno::Reference<css::xml::dom::XDocument> getThemeDom() override;
- virtual css::uno::Sequence<css::uno::Reference<css::xml::dom::XDocument> > getCustomXmlDomList() override;
- virtual css::uno::Sequence<css::uno::Reference<css::xml::dom::XDocument> > getCustomXmlDomPropsList() override;
- virtual css::uno::Reference<css::xml::dom::XDocument> getGlossaryDocDom() override;
- virtual css::uno::Sequence<css::uno::Sequence< css::uno::Any> > getGlossaryDomList() override;
- virtual css::uno::Sequence<css::beans::PropertyValue > getEmbeddingsList() override;
-
- void incrementProgress();
- bool IsSkipImages() const { return mbSkipImages; };
- OUString const& GetDocumentBaseURL() const { return m_rBaseURL; };
- const css::uno::Sequence<css::beans::PropertyValue>& getMediaDescriptor() const;
-
- const css::uno::Reference<css::graphic::XGraphicMapper>& getGraphicMapper() const
- {
- return mxGraphicMapper;
- }
-};
-
-}
-#endif // OOXML_DOCUMENT_IMPL_HXX
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/ooxml/OOXMLFactory.cxx b/writerfilter/source/ooxml/OOXMLFactory.cxx
deleted file mode 100644
index 51d6ada11dab..000000000000
--- a/writerfilter/source/ooxml/OOXMLFactory.cxx
+++ /dev/null
@@ -1,216 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * 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 .
- */
-
-#include <sax/fastattribs.hxx>
-#include "OOXMLFactory.hxx"
-
-namespace writerfilter::ooxml {
-
-using namespace com::sun::star;
-
-
-OOXMLFactory_ns::~OOXMLFactory_ns()
-{
-}
-
-
-void OOXMLFactory::attributes(OOXMLFastContextHandler * pHandler,
- const uno::Reference< xml::sax::XFastAttributeList > & xAttribs)
-{
- Id nDefine = pHandler->getDefine();
- OOXMLFactory_ns::Pointer_t pFactory = getFactoryForNamespace(nDefine);
-
- if (!pFactory)
- return;
-
- sax_fastparser::FastAttributeList& rAttribs =
- sax_fastparser::castToFastAttributeList( xAttribs );
-
- const AttributeInfo *pAttr = pFactory->getAttributeInfoArray(nDefine);
- if (!pAttr)
- return;
-
- for (; pAttr->m_nToken != -1; ++pAttr)
- {
- sal_Int32 nToken = pAttr->m_nToken;
- sal_Int32 nAttrIndex = rAttribs.getAttributeIndex(nToken);
- if (nAttrIndex == -1)
- continue;
-
- Id nId = pFactory->getResourceId(nDefine, nToken);
-
- switch (pAttr->m_nResource)
- {
- case ResourceType::Boolean:
- {
- const char *pValue = rAttribs.getAsCharByIndex(nAttrIndex);
- OOXMLValue::Pointer_t xValue(OOXMLBooleanValue::Create(pValue));
- pHandler->newProperty(nId, xValue);
- pFactory->attributeAction(pHandler, nToken, xValue);
- }
- break;
- case ResourceType::String:
- {
- OUString aValue(rAttribs.getValueByIndex(nAttrIndex));
- OOXMLValue::Pointer_t xValue(new OOXMLStringValue(aValue));
- pHandler->newProperty(nId, xValue);
- pFactory->attributeAction(pHandler, nToken, xValue);
- }
- break;
- case ResourceType::Integer:
- {
- sal_Int32 nValue = rAttribs.getAsIntegerByIndex(nAttrIndex);
- OOXMLValue::Pointer_t xValue = OOXMLIntegerValue::Create(nValue);
- pHandler->newProperty(nId, xValue);
- pFactory->attributeAction(pHandler, nToken, xValue);
- }
- break;
- case ResourceType::Hex:
- {
- const char *pValue = rAttribs.getAsCharByIndex(nAttrIndex);
- OOXMLValue::Pointer_t xValue(new OOXMLHexValue(pValue));
- pHandler->newProperty(nId, xValue);
- pFactory->attributeAction(pHandler, nToken, xValue);
- }
- break;
- case ResourceType::HexColor:
- {
- const char *pValue = rAttribs.getAsCharByIndex(nAttrIndex);
- OOXMLValue::Pointer_t xValue(new OOXMLHexColorValue(pValue));
- pHandler->newProperty(nId, xValue);
- pFactory->attributeAction(pHandler, nToken, xValue);
- }
- break;
- case ResourceType::TwipsMeasure_asSigned:
- case ResourceType::TwipsMeasure_asZero:
- {
- const char *pValue = rAttribs.getAsCharByIndex(nAttrIndex);
- OOXMLValue::Pointer_t xValue(new OOXMLTwipsMeasureValue(pValue));
- if ( xValue->getInt() < 0 )
- {
- if ( pAttr->m_nResource == ResourceType::TwipsMeasure_asZero )
- xValue = OOXMLIntegerValue::Create(0);
- }
- pHandler->newProperty(nId, xValue);
- pFactory->attributeAction(pHandler, nToken, xValue);
- }
- break;
- case ResourceType::HpsMeasure:
- {
- const char *pValue = rAttribs.getAsCharByIndex(nAttrIndex);
- OOXMLValue::Pointer_t xValue(new OOXMLHpsMeasureValue(pValue));
- pHandler->newProperty(nId, xValue);
- pFactory->attributeAction(pHandler, nToken, xValue);
- }
- break;
- case ResourceType::MeasurementOrPercent:
- {
- const char *pValue = rAttribs.getAsCharByIndex(nAttrIndex);
- OOXMLValue::Pointer_t xValue(new OOXMLMeasurementOrPercentValue(pValue));
- pHandler->newProperty(nId, xValue);
- pFactory->attributeAction(pHandler, nToken, xValue);
- }
- break;
- case ResourceType::List:
- {
- sal_uInt32 nValue;
- if (pFactory->getListValue(pAttr->m_nRef, rAttribs.getValueByIndex(nAttrIndex), nValue))
- {
- OOXMLValue::Pointer_t xValue = OOXMLIntegerValue::Create(nValue);
- pHandler->newProperty(nId, xValue);
- pFactory->attributeAction(pHandler, nToken, xValue);
- }
- }
- break;
- default:
- break;
- }
- }
-}
-
-uno::Reference< xml::sax::XFastContextHandler>
-OOXMLFactory::createFastChildContext(OOXMLFastContextHandler * pHandler,
- Token_t Element)
-{
- Id nDefine = pHandler->getDefine();
-
- OOXMLFactory_ns::Pointer_t pFactory = getFactoryForNamespace(nDefine);
-
- uno::Reference< xml::sax::XFastContextHandler> ret;
-
- //Avoid handling unknown tokens and recursing to death
- if ((Element & 0xffff) < oox::XML_TOKEN_COUNT)
- ret = createFastChildContextFromFactory(pHandler, pFactory, Element);
-
- return ret;
-}
-
-void OOXMLFactory::characters(OOXMLFastContextHandler * pHandler,
- const OUString & rString)
-{
- Id nDefine = pHandler->getDefine();
- OOXMLFactory_ns::Pointer_t pFactory = getFactoryForNamespace(nDefine);
-
- if (pFactory)
- {
- pFactory->charactersAction(pHandler, rString);
- }
-}
-
-void OOXMLFactory::startAction(OOXMLFastContextHandler * pHandler)
-{
- Id nDefine = pHandler->getDefine();
- OOXMLFactory_ns::Pointer_t pFactory = getFactoryForNamespace(nDefine);
-
- if (pFactory)
- {
- pFactory->startAction(pHandler);
- }
-}
-
-void OOXMLFactory::endAction(OOXMLFastContextHandler * pHandler)
-{
- Id nDefine = pHandler->getDefine();
- OOXMLFactory_ns::Pointer_t pFactory = getFactoryForNamespace(nDefine);
-
- if (pFactory)
- {
- pFactory->endAction(pHandler);
- }
-}
-
-void OOXMLFactory_ns::startAction(OOXMLFastContextHandler *)
-{
-}
-
-void OOXMLFactory_ns::endAction(OOXMLFastContextHandler *)
-{
-}
-
-void OOXMLFactory_ns::charactersAction(OOXMLFastContextHandler *, const OUString &)
-{
-}
-
-void OOXMLFactory_ns::attributeAction(OOXMLFastContextHandler *, Token_t, const OOXMLValue::Pointer_t&)
-{
-}
-
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/ooxml/OOXMLFactory.hxx b/writerfilter/source/ooxml/OOXMLFactory.hxx
deleted file mode 100644
index bf92bd6e2a51..000000000000
--- a/writerfilter/source/ooxml/OOXMLFactory.hxx
+++ /dev/null
@@ -1,108 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * 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 .
- */
-
-#ifndef INCLUDED_WRITERFILTER_SOURCE_OOXML_OOXMLFACTORY_HXX
-#define INCLUDED_WRITERFILTER_SOURCE_OOXML_OOXMLFACTORY_HXX
-
-#include <dmapper/resourcemodel.hxx>
-
-#include "OOXMLFastContextHandler.hxx"
-
-namespace writerfilter::ooxml {
-
-enum class ResourceType {
- NoResource,
- Table,
- Stream,
- List,
- Integer,
- Properties,
- Hex,
- HexColor,
- String,
- Shape,
- Boolean,
- Value,
- XNote,
- TextTableCell,
- TextTableRow,
- TextTable,
- PropertyTable,
- Math,
- Any,
- TwipsMeasure_asSigned,
- TwipsMeasure_asZero,
- HpsMeasure,
- MeasurementOrPercent
-};
-
-struct AttributeInfo
-{
- Token_t m_nToken;
- ResourceType m_nResource;
- Id m_nRef;
-};
-
-class OOXMLFactory_ns : public virtual SvRefBase {
-public:
- typedef tools::SvRef<OOXMLFactory_ns> Pointer_t;
-
- virtual void startAction(OOXMLFastContextHandler * pHandler);
- virtual void charactersAction(OOXMLFastContextHandler * pHandler, const OUString & rString);
- virtual void endAction(OOXMLFastContextHandler * pHandler);
- virtual void attributeAction(OOXMLFastContextHandler * pHandler, Token_t nToken, const OOXMLValue::Pointer_t& pValue);
-
-protected:
- virtual ~OOXMLFactory_ns() override;
-
-public:
- virtual bool getListValue(Id nId, const OUString& rValue, sal_uInt32& rOutValue) = 0;
- virtual Id getResourceId(Id nDefine, sal_Int32 nToken) = 0;
- virtual const AttributeInfo* getAttributeInfoArray(Id nId) = 0;
- virtual bool getElementId(Id nDefine, Id nId, ResourceType& rOutResource, Id& rOutElement) = 0;
-};
-
-class OOXMLFactory
-{
-public:
-
- static css::uno::Reference< css::xml::sax::XFastContextHandler> createFastChildContext(OOXMLFastContextHandler * pHandler, Token_t Element);
-
- static css::uno::Reference< css::xml::sax::XFastContextHandler> createFastChildContextFromStart(OOXMLFastContextHandler * pHandler, Token_t Element);
-
- static void attributes(OOXMLFastContextHandler * pHandler, const css::uno::Reference< css::xml::sax::XFastAttributeList > & Attribs);
-
- static void characters(OOXMLFastContextHandler * pHandler, const OUString & rString);
-
- static void startAction(OOXMLFastContextHandler * pHandler);
- static void endAction(OOXMLFastContextHandler * pHandler);
-
-private:
- OOXMLFactory() = delete;
- static OOXMLFactory_ns::Pointer_t getFactoryForNamespace(Id id);
-
- static css::uno::Reference< css::xml::sax::XFastContextHandler> createFastChildContextFromFactory(OOXMLFastContextHandler * pHandler, OOXMLFactory_ns::Pointer_t pFactory, Token_t Element);
-};
-
-}
-
-
-#endif // INCLUDED_WRITERFILTER_SOURCE_OOXML_OOXMLFACTORY_HXX
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx b/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx
deleted file mode 100644
index 3b62c912967e..000000000000
--- a/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx
+++ /dev/null
@@ -1,2203 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * 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 .
- */
-
-#include <com/sun/star/beans/XPropertySet.hpp>
-#include <com/sun/star/text/RelOrientation.hpp>
-#include <com/sun/star/lang/WrappedTargetRuntimeException.hpp>
-#include <com/sun/star/xml/sax/FastShapeContextHandler.hpp>
-#include <com/sun/star/xml/sax/SAXException.hpp>
-#include <ooxml/resourceids.hxx>
-#include <oox/mathml/import.hxx>
-#include <oox/token/namespaces.hxx>
-#include <sal/log.hxx>
-#include <comphelper/embeddedobjectcontainer.hxx>
-#include <cppuhelper/exc_hlp.hxx>
-#include <tools/globname.hxx>
-#include <comphelper/classids.hxx>
-#include <sfx2/sfxbasemodel.hxx>
-#include "OOXMLFastContextHandler.hxx"
-#include "OOXMLFactory.hxx"
-#include "Handler.hxx"
-#include <dmapper/PropertyIds.hxx>
-#include <comphelper/propertysequence.hxx>
-#include <comphelper/sequenceashashmap.hxx>
-
-const sal_Unicode uCR = 0xd;
-const sal_Unicode uFtnEdnRef = 0x2;
-const sal_Unicode uFtnEdnSep = 0x3;
-const sal_Unicode uTab = 0x9;
-const sal_Unicode uPgNum = 0x0;
-const sal_Unicode uNoBreakHyphen = 0x2011;
-const sal_Unicode uSoftHyphen = 0xAD;
-
-const sal_uInt8 cFtnEdnCont = 0x4;
-const sal_uInt8 cFieldLock = 0x8;
-
-namespace writerfilter::ooxml
-{
-using namespace ::com::sun::star;
-using namespace oox;
-using namespace ::std;
-using namespace ::com::sun::star::xml::sax;
-
-/*
- class OOXMLFastContextHandler
- */
-
-OOXMLFastContextHandler::OOXMLFastContextHandler
-(uno::Reference< uno::XComponentContext > const & context)
-: mpParent(nullptr),
- mId(0),
- mnDefine(0),
- mnToken(oox::XML_TOKEN_COUNT),
- mnMathJcVal(0),
- mbIsMathPara(false),
- mpStream(nullptr),
- mnTableDepth(0),
- inPositionV(false),
- mbAllowInCell(true),
- mbIsVMLfound(false),
- m_xContext(context),
- m_bDiscardChildren(false),
- m_bTookChoice(false)
-{
- if (!mpParserState)
- mpParserState = new OOXMLParserState();
-
- mpParserState->incContextCount();
-}
-
-OOXMLFastContextHandler::OOXMLFastContextHandler(OOXMLFastContextHandler * pContext)
-: cppu::WeakImplHelper<xml::sax::XFastContextHandler>(),
- mpParent(pContext),
- mId(0),
- mnDefine(0),
- mnToken(oox::XML_TOKEN_COUNT),
- mnMathJcVal(pContext->mnMathJcVal),
- mbIsMathPara(pContext->mbIsMathPara),
- mpStream(pContext->mpStream),
- mpParserState(pContext->mpParserState),
- mnTableDepth(pContext->mnTableDepth),
- inPositionV(pContext->inPositionV),
- mbAllowInCell(pContext->mbAllowInCell),
- mbIsVMLfound(pContext->mbIsVMLfound),
- m_xContext(pContext->m_xContext),
- m_bDiscardChildren(pContext->m_bDiscardChildren),
- m_bTookChoice(pContext->m_bTookChoice)
-{
- if (!mpParserState)
- mpParserState = new OOXMLParserState();
-
- mpParserState->incContextCount();
-}
-
-OOXMLFastContextHandler::~OOXMLFastContextHandler()
-{
-}
-
-bool OOXMLFastContextHandler::prepareMceContext(Token_t nElement, const uno::Reference<xml::sax::XFastAttributeList>& rAttribs)
-{
- switch (oox::getBaseToken(nElement))
- {
- case XML_AlternateContent:
- {
- SavedAlternateState aState;
- aState.m_bDiscardChildren = m_bDiscardChildren;
- m_bDiscardChildren = false;
- aState.m_bTookChoice = m_bTookChoice;
- m_bTookChoice = false;
- mpParserState->getSavedAlternateStates().push_back(aState);
- }
- break;
- case XML_Choice:
- {
- OUString aRequires = rAttribs->getOptionalValue(XML_Requires);
- static const char* aFeatures[] = {
- "wps",
- "wpg",
- "w14",
- };
- for (const char *p : aFeatures)
- {
- if (aRequires.equalsAscii(p))
- {
- m_bTookChoice = true;
- return false;
- }
- }
- return true;
- }
- break;
- case XML_Fallback:
- // If Choice is already taken, then let's ignore the Fallback.
- return m_bTookChoice;
- break;
- default:
- SAL_WARN("writerfilter", "OOXMLFastContextHandler::prepareMceContext: unhandled element:" << oox::getBaseToken(nElement));
- break;
- }
- return false;
-}
-
-// xml::sax::XFastContextHandler:
-void SAL_CALL OOXMLFastContextHandler::startFastElement
-(sal_Int32 Element,
- const uno::Reference< xml::sax::XFastAttributeList > & Attribs)
-{
- // Set xml:space value early, to allow child contexts use it when dealing with strings.
- if (Attribs && Attribs->hasAttribute(oox::NMSP_xml | oox::XML_space))
- {
- mbPreserveSpace = Attribs->getValue(oox::NMSP_xml | oox::XML_space) == "preserve";
- mbPreserveSpaceSet = true;
- }
- if (Element == (NMSP_officeMath | XML_oMathPara))
- {
- mnMathJcVal = eMathParaJc::CENTER;
- mbIsMathPara = true;
- }
- if (Element == (NMSP_officeMath | XML_jc) && mpParent && mpParent->mpParent )
- {
- mbIsMathPara = true;
- auto aAttrLst = Attribs->getFastAttributes();
- if (aAttrLst[0].Value == "center") mpParent->mpParent->mnMathJcVal = eMathParaJc::CENTER;
- if (aAttrLst[0].Value == "left") mpParent->mpParent->mnMathJcVal = eMathParaJc::LEFT;
- if (aAttrLst[0].Value == "right") mpParent->mpParent->mnMathJcVal = eMathParaJc::RIGHT;
- }
-
- if (oox::getNamespace(Element) == NMSP_mce)
- m_bDiscardChildren = prepareMceContext(Element, Attribs);
-
- else if (!m_bDiscardChildren)
- {
- attributes(Attribs);
- lcl_startFastElement(Element, Attribs);
- }
-}
-
-void SAL_CALL OOXMLFastContextHandler::startUnknownElement
-(const OUString & /*Namespace*/, const OUString & /*Name*/,
- const uno::Reference< xml::sax::XFastAttributeList > & /*Attribs*/)
-{
-}
-
-void SAL_CALL OOXMLFastContextHandler::endFastElement(sal_Int32 Element)
-{
- if (Element == (NMSP_mce | XML_Choice) || Element == (NMSP_mce | XML_Fallback))
- m_bDiscardChildren = false;
- else if (Element == (NMSP_mce | XML_AlternateContent))
- {
- SavedAlternateState aState(mpParserState->getSavedAlternateStates().back());
- mpParserState->getSavedAlternateStates().pop_back();
- m_bDiscardChildren = aState.m_bDiscardChildren;
- m_bTookChoice = aState.m_bTookChoice;
- }
- else if (!m_bDiscardChildren)
- lcl_endFastElement(Element);
-}
-
-void OOXMLFastContextHandler::lcl_startFastElement
-(Token_t Element,
- const uno::Reference< xml::sax::XFastAttributeList > & /*Attribs*/)
-{
- OOXMLFactory::startAction(this);
- if( Element == (NMSP_dmlWordDr|XML_positionV) )
- inPositionV = true;
- else if( Element == (NMSP_dmlWordDr|XML_positionH) )
- inPositionV = false;
-
-}
-
-void OOXMLFastContextHandler::lcl_endFastElement
-(Token_t /*Element*/)
-{
- OOXMLFactory::endAction(this);
-}
-
-void SAL_CALL OOXMLFastContextHandler::endUnknownElement
-(const OUString & , const OUString & )
-{
-}
-
-uno::Reference< xml::sax::XFastContextHandler > SAL_CALL
- OOXMLFastContextHandler::createFastChildContext
-(sal_Int32 Element,
- const uno::Reference< xml::sax::XFastAttributeList > & Attribs)
-{
- uno::Reference< xml::sax::XFastContextHandler > xResult;
- if (oox::getNamespace(Element) != NMSP_mce && !m_bDiscardChildren)
- xResult.set(lcl_createFastChildContext(Element, Attribs));
- else if (oox::getNamespace(Element) == NMSP_mce)
- xResult = this;
-
- return xResult;
-}
-
-uno::Reference< xml::sax::XFastContextHandler >
- OOXMLFastContextHandler::lcl_createFastChildContext
-(Token_t Element,
- const uno::Reference< xml::sax::XFastAttributeList > & /*Attribs*/)
-{
- return OOXMLFactory::createFastChildContext(this, Element);
-}
-
-uno::Reference< xml::sax::XFastContextHandler > SAL_CALL
-OOXMLFastContextHandler::createUnknownChildContext
-(const OUString &,
- const OUString &,
- const uno::Reference< xml::sax::XFastAttributeList > & /*Attribs*/)
-{
- return uno::Reference< xml::sax::XFastContextHandler >
- (new OOXMLFastContextHandler(*const_cast<const OOXMLFastContextHandler *>(this)));
-}
-
-void SAL_CALL OOXMLFastContextHandler::characters
-(const OUString & aChars)
-{
- lcl_characters(aChars);
-}
-
-void OOXMLFastContextHandler::lcl_characters
-(const OUString & rString)
-{
- if (!m_bDiscardChildren)
- OOXMLFactory::characters(this, rString);
-}
-
-void OOXMLFastContextHandler::setStream(Stream * pStream)
-{
- mpStream = pStream;
-}
-
-OOXMLValue::Pointer_t OOXMLFastContextHandler::getValue() const
-{
- return OOXMLValue::Pointer_t();
-}
-
-void OOXMLFastContextHandler::attributes
-(const uno::Reference< xml::sax::XFastAttributeList > & Attribs)
-{
- OOXMLFactory::attributes(this, Attribs);
-}
-
-void OOXMLFastContextHandler::startAction()
-{
- OOXMLFactory::startAction(this);
-}
-
-void OOXMLFastContextHandler::endAction()
-{
- OOXMLFactory::endAction(this);
-}
-
-void OOXMLFastContextHandler::setId(Id rId)
-{
- mId = rId;
-}
-
-Id OOXMLFastContextHandler::getId() const
-{
- return mId;
-}
-
-void OOXMLFastContextHandler::setDefine(Id nDefine)
-{
- mnDefine = nDefine;
-}
-
-
-void OOXMLFastContextHandler::setToken(Token_t nToken)
-{
- mnToken = nToken;
-}
-
-Token_t OOXMLFastContextHandler::getToken() const
-{
- return mnToken;
-}
-
-void OOXMLFastContextHandler::sendTableDepth() const
-{
- if (mnTableDepth <= 0)
- return;
-
- OOXMLPropertySet::Pointer_t pProps(new OOXMLPropertySet);
- {
- OOXMLValue::Pointer_t pVal = OOXMLIntegerValue::Create(mnTableDepth);
- pProps->add(NS_ooxml::LN_tblDepth, pVal, OOXMLProperty::SPRM);
- }
- {
- OOXMLValue::Pointer_t pVal = OOXMLIntegerValue::Create(1);
- pProps->add(NS_ooxml::LN_inTbl, pVal, OOXMLProperty::SPRM);
- }
-
- mpStream->props(pProps.get());
-}
-
-void OOXMLFastContextHandler::setHandle()
-{
- mpParserState->setHandle();
- mpStream->info(mpParserState->getHandle());
-}
-
-void OOXMLFastContextHandler::startCharacterGroup()
-{
- if (!isForwardEvents())
- return;
-
- if (mpParserState->isInCharacterGroup())
- endCharacterGroup();
-
- if (! mpParserState->isInParagraphGroup())
- startParagraphGroup();
-
- if (! mpParserState->isInCharacterGroup())
- {
- mpStream->startCharacterGroup();
- mpParserState->setInCharacterGroup(true);
- mpParserState->resolveCharacterProperties(*mpStream);
- }
-
- // tdf#108714 : if we have a postponed break information,
- // then apply it now, before any other paragraph content.
- mpParserState->resolvePostponedBreak(*mpStream);
-}
-
-void OOXMLFastContextHandler::endCharacterGroup()
-{
- if (isForwardEvents() && mpParserState->isInCharacterGroup())
- {
- mpStream->endCharacterGroup();
- mpParserState->setInCharacterGroup(false);
- }
-}
-
-void OOXMLFastContextHandler::pushBiDiEmbedLevel() {}
-
-void OOXMLFastContextHandler::popBiDiEmbedLevel() {}
-
-void OOXMLFastContextHandler::startParagraphGroup()
-{
- if (!isForwardEvents())
- return;
-
- if (mpParserState->isInParagraphGroup())
- endParagraphGroup();
-
- if (! mpParserState->isInSectionGroup())
- startSectionGroup();
-
- if (! mpParserState->isInParagraphGroup())
- {
- mpStream->startParagraphGroup();
- mpParserState->setInParagraphGroup(true);
- }
-}
-
-void OOXMLFastContextHandler::endParagraphGroup()
-{
- if (isForwardEvents())
- {
- if (mpParserState->isInCharacterGroup())
- endCharacterGroup();
-
- if (mpParserState->isInParagraphGroup())
- {
- mpStream->endParagraphGroup();
- mpParserState->setInParagraphGroup(false);
- }
- }
-}
-
-void OOXMLFastContextHandler::startSdt()
-{
- OOXMLPropertySet::Pointer_t pProps(new OOXMLPropertySet);
- OOXMLValue::Pointer_t pVal = OOXMLIntegerValue::Create(1);
- pProps->add(NS_ooxml::LN_CT_SdtBlock_sdtContent, pVal, OOXMLProperty::ATTRIBUTE);
- mpStream->props(pProps.get());
-}
-
-void OOXMLFastContextHandler::endSdt()
-{
- OOXMLPropertySet::Pointer_t pProps(new OOXMLPropertySet);
- OOXMLValue::Pointer_t pVal = OOXMLIntegerValue::Create(1);
- pProps->add(NS_ooxml::LN_CT_SdtBlock_sdtEndContent, pVal, OOXMLProperty::ATTRIBUTE);
- mpStream->props(pProps.get());
-}
-
-void OOXMLFastContextHandler::startSectionGroup()
-{
- if (isForwardEvents())
- {
- if (mpParserState->isInSectionGroup())
- endSectionGroup();
-
- if (! mpParserState->isInSectionGroup())
- {
- mpStream->info(mpParserState->getHandle());
- mpStream->startSectionGroup();
- mpParserState->setInSectionGroup(true);
- }
- }
-}
-
-void OOXMLFastContextHandler::endSectionGroup()
-{
- if (isForwardEvents())
- {
- if (mpParserState->isInParagraphGroup())
- endParagraphGroup();
-
- if (mpParserState->isInSectionGroup())
- {
- mpStream->endSectionGroup();
- mpParserState->setInSectionGroup(false);
- }
- }
-}
-
-void OOXMLFastContextHandler::setLastParagraphInSection()
-{
- mpParserState->setLastParagraphInSection(true);
- mpStream->markLastParagraphInSection( );
-}
-
-void OOXMLFastContextHandler::setLastSectionGroup()
-{
- mpStream->markLastSectionGroup( );
-}
-
-void OOXMLFastContextHandler::newProperty
-(Id /*nId*/, const OOXMLValue::Pointer_t& /*pVal*/)
-{
-}
-
-void OOXMLFastContextHandler::setPropertySet
-(const OOXMLPropertySet::Pointer_t& /* pPropertySet */)
-{
-}
-
-OOXMLPropertySet::Pointer_t OOXMLFastContextHandler::getPropertySet() const
-{
- return OOXMLPropertySet::Pointer_t();
-}
-
-void OOXMLFastContextHandler::startField()
-{
- startCharacterGroup();
- if (isForwardEvents())
- mpStream->text(&cFieldStart, 1);
- endCharacterGroup();
-}
-
-void OOXMLFastContextHandler::fieldSeparator()
-{
- startCharacterGroup();
- if (isForwardEvents())
- mpStream->text(&cFieldSep, 1);
- endCharacterGroup();
-}
-
-void OOXMLFastContextHandler::endField()
-{
- startCharacterGroup();
- if (isForwardEvents())
- mpStream->text(&cFieldEnd, 1);
- endCharacterGroup();
-}
-
-void OOXMLFastContextHandler::lockField()
-{
- startCharacterGroup();
- if (isForwardEvents())
- mpStream->text(&cFieldLock, 1);
- endCharacterGroup();
-}
-
-void OOXMLFastContextHandler::ftnednref()
-{
- if (isForwardEvents())
- mpStream->utext(reinterpret_cast<const sal_uInt8*>(&uFtnEdnRef), 1);
-}
-
-void OOXMLFastContextHandler::ftnednsep()
-{
- if (isForwardEvents())
- mpStream->utext(reinterpret_cast<const sal_uInt8*>(&uFtnEdnSep), 1);
-}
-
-void OOXMLFastContextHandler::ftnedncont()
-{
- if (isForwardEvents())
- mpStream->text(&cFtnEdnCont, 1);
-}
-
-void OOXMLFastContextHandler::pgNum()
-{
- if (isForwardEvents())
- mpStream->utext(reinterpret_cast<const sal_uInt8*>(&uPgNum), 1);
-}
-
-void OOXMLFastContextHandler::tab()
-{
- if (isForwardEvents())
- mpStream->utext(reinterpret_cast<const sal_uInt8*>(&uTab), 1);
-}
-
-void OOXMLFastContextHandler::symbol()
-{
- if (isForwardEvents())
- sendPropertiesWithId(NS_ooxml::LN_EG_RunInnerContent_sym);
-}
-
-void OOXMLFastContextHandler::cr()
-{
- if (isForwardEvents())
- mpStream->utext(reinterpret_cast<const sal_uInt8*>(&uCR), 1);
-}
-
-void OOXMLFastContextHandler::noBreakHyphen()
-{
- if (isForwardEvents())
- mpStream->utext(reinterpret_cast<const sal_uInt8*>(&uNoBreakHyphen), 1);
-}
-
-void OOXMLFastContextHandler::softHyphen()
-{
- if (isForwardEvents())
- mpStream->utext(reinterpret_cast<const sal_uInt8*>(&uSoftHyphen), 1);
-}
-
-void OOXMLFastContextHandler::handleLastParagraphInSection()
-{
- if (mpParserState->isLastParagraphInSection())
- {
- mpParserState->setLastParagraphInSection(false);
- startSectionGroup();
- }
-}
-
-void OOXMLFastContextHandler::endOfParagraph()
-{
- if (! mpParserState->isInCharacterGroup())
- startCharacterGroup();
- if (isForwardEvents())
- mpStream->utext(reinterpret_cast<const sal_uInt8*>(&uCR), 1);
-
- mpParserState->getDocument()->incrementProgress();
-}
-
-void OOXMLFastContextHandler::startTxbxContent()
-{
-/*
- This usually means there are recursive <w:p> elements, and the ones
- inside and outside of w:txbxContent should not interfere (e.g.
- the lastParagraphInSection setting). So save the whole state
- and possibly start new groups for the nested content (not section
- group though, as that'd cause the txbxContent to be moved onto
- another page, I'm not sure how that should work exactly).
-*/
- mpParserState->startTxbxContent();
- startParagraphGroup();
-}
-
-void OOXMLFastContextHandler::endTxbxContent()
-{
- endParagraphGroup();
- mpParserState->endTxbxContent();
-}
-
-namespace {
-// XML schema defines white space as one of four characters:
-// #x9 (tab), #xA (line feed), #xD (carriage return), and #x20 (space)
-bool IsXMLWhitespace(sal_Unicode cChar)
-{
- return cChar == 0x9 || cChar == 0xA || cChar == 0xD || cChar == 0x20;
-}
-
-OUString TrimXMLWhitespace(const OUString & sText)
-{
- sal_Int32 nTrimmedStart = 0;
- const sal_Int32 nLen = sText.getLength();
- sal_Int32 nTrimmedEnd = nLen - 1;
- while (nTrimmedStart < nLen && IsXMLWhitespace(sText[nTrimmedStart]))
- ++nTrimmedStart;
- while (nTrimmedStart <= nTrimmedEnd && IsXMLWhitespace(sText[nTrimmedEnd]))
- --nTrimmedEnd;
- if ((nTrimmedStart == 0) && (nTrimmedEnd == nLen - 1))
- return sText;
- else if (nTrimmedStart > nTrimmedEnd)
- return OUString();
- else
- return sText.copy(nTrimmedStart, nTrimmedEnd-nTrimmedStart+1);
-}
-}
-
-void OOXMLFastContextHandler::text(const OUString & sText)
-{
- if (!isForwardEvents())
- return;
-
- // tdf#108806: CRLFs in XML were converted to \n before this point.
- // These must be converted to spaces before further processing.
- OUString sNormalizedText = sText.replaceAll("\n", " ");
- // tdf#108995: by default, leading and trailing white space is ignored;
- // tabs are converted to spaces
- if (!IsPreserveSpace())
- {
- sNormalizedText = TrimXMLWhitespace(sNormalizedText).replaceAll("\t", " ");
- }
- mpStream->utext(reinterpret_cast < const sal_uInt8 * >
- (sNormalizedText.getStr()),
- sNormalizedText.getLength());
-}
-
-void OOXMLFastContextHandler::positionOffset(const OUString& rText)
-{
- if (isForwardEvents())
- mpStream->positionOffset(rText, inPositionV);
-}
-
-void OOXMLFastContextHandler::ignore()
-{
-}
-
-void OOXMLFastContextHandler::alignH(const OUString& rText)
-{
- if (isForwardEvents())
- mpStream->align(rText, /*bVertical=*/false);
-}
-
-void OOXMLFastContextHandler::alignV(const OUString& rText)
-{
- if (isForwardEvents())
- mpStream->align(rText, /*bVertical=*/true);
-}
-
-void OOXMLFastContextHandler::positivePercentage(const OUString& rText)
-{
- if (isForwardEvents())
- mpStream->positivePercentage(rText);
-}
-
-void OOXMLFastContextHandler::startGlossaryEntry()
-{
- if (isForwardEvents())
- mpStream->startGlossaryEntry();
-}
-
-void OOXMLFastContextHandler::endGlossaryEntry()
-{
- if (isForwardEvents())
- mpStream->endGlossaryEntry();
-}
-
-void OOXMLFastContextHandler::propagateCharacterProperties()
-{
- mpParserState->setCharacterProperties(getPropertySet());
-}
-
-void OOXMLFastContextHandler::propagateCellProperties()
-{
- mpParserState->setCellProperties(getPropertySet());
-}
-
-void OOXMLFastContextHandler::propagateRowProperties()
-{
- mpParserState->setRowProperties(getPropertySet());
-}
-
-void OOXMLFastContextHandler::propagateTableProperties()
-{
- OOXMLPropertySet::Pointer_t pProps = getPropertySet();
-
- mpParserState->setTableProperties(pProps);
-}
-
-void OOXMLFastContextHandler::sendCellProperties()
-{
- mpParserState->resolveCellProperties(*mpStream);
-}
-
-void OOXMLFastContextHandler::sendRowProperties()
-{
- mpParserState->resolveRowProperties(*mpStream);
-}
-
-void OOXMLFastContextHandler::sendTableProperties()
-{
- mpParserState->resolveTableProperties(*mpStream);
-}
-
-void OOXMLFastContextHandler::clearTableProps()
-{
- mpParserState->setTableProperties(new OOXMLPropertySet());
-}
-
-void OOXMLFastContextHandler::sendPropertiesWithId(Id nId)
-{
- OOXMLValue::Pointer_t pValue(new OOXMLPropertySetValue(getPropertySet()));
- OOXMLPropertySet::Pointer_t pPropertySet(new OOXMLPropertySet);
-
- pPropertySet->add(nId, pValue, OOXMLProperty::SPRM);
- mpStream->props(pPropertySet.get());
-}
-
-void OOXMLFastContextHandler::clearProps()
-{
- setPropertySet(new OOXMLPropertySet());
-}
-
-void OOXMLFastContextHandler::setDefaultBooleanValue()
-{
-}
-
-void OOXMLFastContextHandler::setDefaultIntegerValue()
-{
-}
-
-void OOXMLFastContextHandler::setDefaultHexValue()
-{
-}
-
-void OOXMLFastContextHandler::setDefaultStringValue()
-{
-}
-
-void OOXMLFastContextHandler::setDocument(OOXMLDocumentImpl* pDocument)
-{
- mpParserState->setDocument(pDocument);
-}
-
-OOXMLDocumentImpl* OOXMLFastContextHandler::getDocument()
-{
- return mpParserState->getDocument();
-}
-
-void OOXMLFastContextHandler::setForwardEvents(bool bForwardEvents)
-{
- mpParserState->setForwardEvents(bForwardEvents);
-}
-
-bool OOXMLFastContextHandler::isForwardEvents() const
-{
- return mpParserState->isForwardEvents();
-}
-
-void OOXMLFastContextHandler::setXNoteId(const sal_Int32 nId)
-{
- mpParserState->setXNoteId(nId);
-}
-
-void OOXMLFastContextHandler::setXNoteId(const OOXMLValue::Pointer_t& pValue)
-{
- mpParserState->setXNoteId(sal_Int32(pValue->getInt()));
-}
-
-sal_Int32 OOXMLFastContextHandler::getXNoteId() const
-{
- return mpParserState->getXNoteId();
-}
-
-void OOXMLFastContextHandler::resolveFootnote
-(const sal_Int32 nId)
-{
- mpParserState->getDocument()->resolveFootnote
- (*mpStream, 0, nId);
-}
-
-void OOXMLFastContextHandler::resolveEndnote(const sal_Int32 nId)
-{
- mpParserState->getDocument()->resolveEndnote
- (*mpStream, 0, nId);
-}
-
-void OOXMLFastContextHandler::resolveComment(const sal_Int32 nId)
-{
- mpParserState->getDocument()->resolveComment(*mpStream, nId);
-}
-
-void OOXMLFastContextHandler::resolvePicture(const OUString & rId)
-{
- mpParserState->getDocument()->resolvePicture(*mpStream, rId);
-}
-
-void OOXMLFastContextHandler::resolveHeader
-(const sal_Int32 type, const OUString & rId)
-{
- mpParserState->getDocument()->resolveHeader(*mpStream, type, rId);
-}
-
-void OOXMLFastContextHandler::resolveFooter
-(const sal_Int32 type, const OUString & rId)
-{
- mpParserState->getDocument()->resolveFooter(*mpStream, type, rId);
-}
-
-// Add the data pointed to by the reference as another property.
-void OOXMLFastContextHandler::resolveData(const OUString & rId)
-{
- OOXMLDocument * objDocument = getDocument();
- SAL_WARN_IF(!objDocument, "writerfilter", "no document to resolveData");
- if (!objDocument)
- return;
-
- uno::Reference<io::XInputStream> xInputStream
- (objDocument->getInputStreamForId(rId));
-
- OOXMLValue::Pointer_t aValue(new OOXMLInputStreamValue(xInputStream));
-
- newProperty(NS_ooxml::LN_inputstream, aValue);
-}
-
-OUString OOXMLFastContextHandler::getTargetForId
-(const OUString & rId)
-{
- return mpParserState->getDocument()->getTargetForId(rId);
-}
-
-void OOXMLFastContextHandler::sendPropertyToParent()
-{
- if (mpParent != nullptr)
- {
- OOXMLPropertySet::Pointer_t pProps(mpParent->getPropertySet());
-
- if (pProps)
- {
- pProps->add(mId, getValue(), OOXMLProperty::SPRM);
- }
- }
-}
-
-void OOXMLFastContextHandler::sendPropertiesToParent()
-{
- if (mpParent == nullptr)
- return;
-
- OOXMLPropertySet::Pointer_t pParentProps(mpParent->getPropertySet());
-
- if (!pParentProps)
- return;
-
- OOXMLPropertySet::Pointer_t pProps(getPropertySet());
-
- if (pProps)
- {
- OOXMLValue::Pointer_t pValue
- (new OOXMLPropertySetValue(getPropertySet()));
-
- pParentProps->add(getId(), pValue, OOXMLProperty::SPRM);
-
- }
-}
-
-bool OOXMLFastContextHandler::IsPreserveSpace() const
-{
- // xml:space attribute applies to all elements within the content of the element where it is specified,
- // unless overridden with another instance of the xml:space attribute
- if (mbPreserveSpaceSet)
- return mbPreserveSpace;
- if (mpParent)
- return mpParent->IsPreserveSpace();
- return false; // default value
-}
-
-/*
- class OOXMLFastContextHandlerStream
- */
-
-OOXMLFastContextHandlerStream::OOXMLFastContextHandlerStream
-(OOXMLFastContextHandler * pContext)
-: OOXMLFastContextHandler(pContext),
- mpPropertySetAttrs(new OOXMLPropertySet)
-{
-}
-
-OOXMLFastContextHandlerStream::~OOXMLFastContextHandlerStream()
-{
-}
-
-void OOXMLFastContextHandlerStream::newProperty(Id nId,
- const OOXMLValue::Pointer_t& pVal)
-{
- if (nId != 0x0)
- {
- mpPropertySetAttrs->add(nId, pVal, OOXMLProperty::ATTRIBUTE);
- }
-}
-
-void OOXMLFastContextHandlerStream::sendProperty(Id nId)
-{
- OOXMLPropertySetEntryToString aHandler(nId);
- getPropertySetAttrs()->resolve(aHandler);
- const OUString & sText = aHandler.getString();
- mpStream->utext(reinterpret_cast < const sal_uInt8 * >
- (sText.getStr()),
- sText.getLength());
-}
-
-
-OOXMLPropertySet::Pointer_t OOXMLFastContextHandlerStream::getPropertySet()
- const
-{
- return getPropertySetAttrs();
-}
-
-void OOXMLFastContextHandlerStream::handleHyperlink()
-{
- OOXMLHyperlinkHandler aHyperlinkHandler(this);
- getPropertySetAttrs()->resolve(aHyperlinkHandler);
- aHyperlinkHandler.writetext();
-}
-
-/*
- class OOXMLFastContextHandlerProperties
- */
-OOXMLFastContextHandlerProperties::OOXMLFastContextHandlerProperties
-(OOXMLFastContextHandler * pContext)
-: OOXMLFastContextHandler(pContext), mpPropertySet(new OOXMLPropertySet),
- mbResolve(false)
-{
- if (pContext->getResource() == STREAM)
- mbResolve = true;
-}
-
-OOXMLFastContextHandlerProperties::~OOXMLFastContextHandlerProperties()
-{
-}
-
-void OOXMLFastContextHandlerProperties::lcl_endFastElement
-(Token_t /*Element*/)
-{
- try
- {
- endAction();
-
- if (mbResolve)
- {
- if (isForwardEvents())
- {
- mpStream->props(mpPropertySet.get());
- }
- }
- else
- {
- sendPropertiesToParent();
- }
- }
- catch (const uno::RuntimeException&)
- {
- throw;
- }
- catch (const xml::sax::SAXException&)
- {
- throw;
- }
- catch (const uno::Exception& e)
- {
- auto a = cppu::getCaughtException();
- throw lang::WrappedTargetRuntimeException(e.Message, e.Context, a);
- }
-}
-
-OOXMLValue::Pointer_t OOXMLFastContextHandlerProperties::getValue() const
-{
- return OOXMLValue::Pointer_t(new OOXMLPropertySetValue(mpPropertySet));
-}
-
-void OOXMLFastContextHandlerProperties::newProperty
-(Id nId, const OOXMLValue::Pointer_t& pVal)
-{
- if (nId != 0x0)
- {
- mpPropertySet->add(nId, pVal, OOXMLProperty::ATTRIBUTE);
- }
-}
-
-void OOXMLFastContextHandlerProperties::handleXNotes()
-{
- switch (mnToken)
- {
- case W_TOKEN(footnoteReference):
- {
- OOXMLFootnoteHandler aFootnoteHandler(this);
- mpPropertySet->resolve(aFootnoteHandler);
- }
- break;
- case W_TOKEN(endnoteReference):
- {
- OOXMLEndnoteHandler aEndnoteHandler(this);
- mpPropertySet->resolve(aEndnoteHandler);
- }
- break;
- default:
- break;
- }
-}
-
-void OOXMLFastContextHandlerProperties::handleHdrFtr()
-{
- switch (mnToken)
- {
- case W_TOKEN(footerReference):
- {
- OOXMLFooterHandler aFooterHandler(this);
- mpPropertySet->resolve(aFooterHandler);
- aFooterHandler.finalize();
- }
- break;
- case W_TOKEN(headerReference):
- {
- OOXMLHeaderHandler aHeaderHandler(this);
- mpPropertySet->resolve(aHeaderHandler);
- aHeaderHandler.finalize();
- }
- break;
- default:
- break;
- }
-}
-
-void OOXMLFastContextHandlerProperties::handleComment()
-{
- OOXMLCommentHandler aCommentHandler(this);
- getPropertySet()->resolve(aCommentHandler);
-}
-
-void OOXMLFastContextHandlerProperties::handlePicture()
-{
- OOXMLPictureHandler aPictureHandler(this);
- getPropertySet()->resolve(aPictureHandler);
-}
-
-void OOXMLFastContextHandlerProperties::handleBreak()
-{
- if(isForwardEvents())
- {
- OOXMLBreakHandler aBreakHandler(*mpStream);
- getPropertySet()->resolve(aBreakHandler);
- }
-}
-
-// tdf#108714 : allow <w:br> at block level (despite this is illegal according to ECMA-376-1:2016)
-void OOXMLFastContextHandlerProperties::handleOutOfOrderBreak()
-{
- if(isForwardEvents())
- {
- mpParserState->setPostponedBreak(getPropertySet());
- }
-}
-
-void OOXMLFastContextHandlerProperties::handleOLE()
-{
- OOXMLOLEHandler aOLEHandler(this);
- getPropertySet()->resolve(aOLEHandler);
-}
-
-void OOXMLFastContextHandlerProperties::handleFontRel()
-{
- OOXMLEmbeddedFontHandler handler(this);
- getPropertySet()->resolve(handler);
-}
-
-void OOXMLFastContextHandlerProperties::handleHyperlinkURL() {
- OOXMLHyperlinkURLHandler aHyperlinkURLHandler(this);
- getPropertySet()->resolve(aHyperlinkURLHandler);
-}
-
-void OOXMLFastContextHandlerProperties::handleAltChunk()
-{
- OOXMLAltChunkHandler aHandler(this);
- getPropertySet()->resolve(aHandler);
-}
-
-void OOXMLFastContextHandlerProperties::setPropertySet
-(const OOXMLPropertySet::Pointer_t& pPropertySet)
-{
- if (pPropertySet)
- mpPropertySet = pPropertySet;
-}
-
-OOXMLPropertySet::Pointer_t
-OOXMLFastContextHandlerProperties::getPropertySet() const
-{
- return mpPropertySet;
-}
-
-/*
- * class OOXMLFasContextHandlerPropertyTable
- */
-
-OOXMLFastContextHandlerPropertyTable::OOXMLFastContextHandlerPropertyTable
-(OOXMLFastContextHandler * pContext)
-: OOXMLFastContextHandlerProperties(pContext)
-{
-}
-
-OOXMLFastContextHandlerPropertyTable::~OOXMLFastContextHandlerPropertyTable()
-{
-}
-
-void OOXMLFastContextHandlerPropertyTable::lcl_endFastElement
-(Token_t /*Element*/)
-{
- OOXMLPropertySet::Pointer_t pPropSet(mpPropertySet->clone());
- OOXMLTable::ValuePointer_t pTmpVal
- (new OOXMLPropertySetValue(pPropSet));
-
- mTable.add(pTmpVal);
-
- writerfilter::Reference<Table>::Pointer_t pTable(mTable.clone());
-
- mpStream->table(mId, pTable);
-
- endAction();
-}
-
-/*
- class OOXMLFastContextHandlerValue
-*/
-
-OOXMLFastContextHandlerValue::OOXMLFastContextHandlerValue
-(OOXMLFastContextHandler * pContext)
-: OOXMLFastContextHandler(pContext)
-{
-}
-
-OOXMLFastContextHandlerValue::~OOXMLFastContextHandlerValue()
-{
-}
-
-void OOXMLFastContextHandlerValue::setValue(const OOXMLValue::Pointer_t& pValue)
-{
- mpValue = pValue;
-}
-
-OOXMLValue::Pointer_t OOXMLFastContextHandlerValue::getValue() const
-{
- return mpValue;
-}
-
-void OOXMLFastContextHandlerValue::lcl_endFastElement
-(Token_t /*Element*/)
-{
- sendPropertyToParent();
-
- endAction();
-}
-
-void OOXMLFastContextHandlerValue::setDefaultBooleanValue()
-{
- if (!mpValue)
- {
- OOXMLValue::Pointer_t pValue = OOXMLBooleanValue::Create(true);
- setValue(pValue);
- }
-}
-
-void OOXMLFastContextHandlerValue::setDefaultIntegerValue()
-{
- if (!mpValue)
- {
- OOXMLValue::Pointer_t pValue = OOXMLIntegerValue::Create(0);
- setValue(pValue);
- }
-}
-
-void OOXMLFastContextHandlerValue::setDefaultHexValue()
-{
- if (!mpValue)
- {
- OOXMLValue::Pointer_t pValue(new OOXMLHexValue(sal_uInt32(0)));
- setValue(pValue);
- }
-}
-
-void OOXMLFastContextHandlerValue::setDefaultStringValue()
-{
- if (!mpValue)
- {
- OOXMLValue::Pointer_t pValue(new OOXMLStringValue(OUString()));
- setValue(pValue);
- }
-}
-
-// ECMA-376-1:2016 17.3.2.8; https://www.unicode.org/reports/tr9/#Explicit_Directional_Embeddings
-void OOXMLFastContextHandlerValue::pushBiDiEmbedLevel()
-{
- const bool bRtl
- = mpValue && mpValue->getInt() == NS_ooxml::LN_Value_ST_Direction_rtl;
- OOXMLFactory::characters(this, bRtl ? OUString(u"\u202B") : OUString(u"\u202A")); // RLE / LRE
-}
-
-void OOXMLFastContextHandlerValue::popBiDiEmbedLevel()
-{
- OOXMLFactory::characters(this, u"\u202C"); // PDF (POP DIRECTIONAL FORMATTING)
-}
-
-void OOXMLFastContextHandlerValue::handleGridAfter()
-{
- if (!getValue())
- return;
-
- if (OOXMLFastContextHandler* pTableRowProperties = getParent())
- {
- if (OOXMLFastContextHandler* pTableRow = pTableRowProperties->getParent())
- // Save the value into the table row context, so it can be handled
- // right before the end of the row.
- pTableRow->setGridAfter(getValue());
- }
-}
-
-/*
- class OOXMLFastContextHandlerTable
-*/
-
-OOXMLFastContextHandlerTable::OOXMLFastContextHandlerTable
-(OOXMLFastContextHandler * pContext)
-: OOXMLFastContextHandler(pContext)
-{
-}
-
-OOXMLFastContextHandlerTable::~OOXMLFastContextHandlerTable()
-{
-}
-
-uno::Reference< xml::sax::XFastContextHandler > SAL_CALL
-OOXMLFastContextHandlerTable::createFastChildContext
-(sal_Int32 Element,
- const uno::Reference< xml::sax::XFastAttributeList > & Attribs)
-{
- addCurrentChild();
-
- mCurrentChild.set(OOXMLFastContextHandler::createFastChildContext(Element, Attribs));
-
- return mCurrentChild;
-}
-
-void OOXMLFastContextHandlerTable::lcl_endFastElement
-(Token_t /*Element*/)
-{
- addCurrentChild();
-
- writerfilter::Reference<Table>::Pointer_t pTable(mTable.clone());
- if (isForwardEvents() && mId != 0x0)
- {
- mpStream->table(mId, pTable);
- }
-}
-
-void OOXMLFastContextHandlerTable::addCurrentChild()
-{
- OOXMLFastContextHandler * pHandler = dynamic_cast<OOXMLFastContextHandler*>(mCurrentChild.get());
- if (pHandler != nullptr)
- {
- OOXMLValue::Pointer_t pValue(pHandler->getValue());
-
- if (pValue)
- {
- OOXMLTable::ValuePointer_t pTmpVal(pValue->clone());
- mTable.add(pTmpVal);
- }
- }
-}
-
-/*
- class OOXMLFastContextHandlerXNote
- */
-
-OOXMLFastContextHandlerXNote::OOXMLFastContextHandlerXNote
- (OOXMLFastContextHandler * pContext)
- : OOXMLFastContextHandlerProperties(pContext)
- , mbForwardEventsSaved(false)
- , mnMyXNoteId(0)
- , mnMyXNoteType(0)
-{
-}
-
-OOXMLFastContextHandlerXNote::~OOXMLFastContextHandlerXNote()
-{
-}
-
-void OOXMLFastContextHandlerXNote::lcl_startFastElement
-(Token_t /*Element*/,
- const uno::Reference< xml::sax::XFastAttributeList > & /*Attribs*/)
-{
- mbForwardEventsSaved = isForwardEvents();
-
- // If this is the note we're looking for or this is the footnote separator one.
- if (mnMyXNoteId == getXNoteId() || static_cast<sal_uInt32>(mnMyXNoteType) == NS_ooxml::LN_Value_doc_ST_FtnEdn_separator)
- setForwardEvents(true);
- else
- setForwardEvents(false);
-
- startAction();
-}
-
-void OOXMLFastContextHandlerXNote::lcl_endFastElement
-(Token_t Element)
-{
- endAction();
-
- OOXMLFastContextHandlerProperties::lcl_endFastElement(Element);
-
- setForwardEvents(mbForwardEventsSaved);
-}
-
-void OOXMLFastContextHandlerXNote::checkId(const OOXMLValue::Pointer_t& pValue)
-{
- mnMyXNoteId = sal_Int32(pValue->getInt());
-}
-
-void OOXMLFastContextHandlerXNote::checkType(const OOXMLValue::Pointer_t& pValue)
-{
- mnMyXNoteType = pValue->getInt();
-}
-
-/*
- class OOXMLFastContextHandlerTextTableCell
- */
-
-OOXMLFastContextHandlerTextTableCell::OOXMLFastContextHandlerTextTableCell
-(OOXMLFastContextHandler * pContext)
-: OOXMLFastContextHandler(pContext)
-{
-}
-
-OOXMLFastContextHandlerTextTableCell::~OOXMLFastContextHandlerTextTableCell()
-{
-}
-
-void OOXMLFastContextHandlerTextTableCell::startCell()
-{
- if (isForwardEvents())
- {
- OOXMLPropertySet::Pointer_t pProps(new OOXMLPropertySet);
- {
- OOXMLValue::Pointer_t pVal = OOXMLBooleanValue::Create(mnTableDepth > 0);
- pProps->add(NS_ooxml::LN_tcStart, pVal, OOXMLProperty::SPRM);
- }
-
- mpStream->props(pProps.get());
- }
-}
-
-void OOXMLFastContextHandlerTextTableCell::endCell()
-{
- if (!isForwardEvents())
- return;
-
- OOXMLPropertySet::Pointer_t pProps(new OOXMLPropertySet);
- {
- OOXMLValue::Pointer_t pVal = OOXMLIntegerValue::Create(mnTableDepth);
- pProps->add(NS_ooxml::LN_tblDepth, pVal, OOXMLProperty::SPRM);
- }
- {
- OOXMLValue::Pointer_t pVal = OOXMLIntegerValue::Create(1);
- pProps->add(NS_ooxml::LN_inTbl, pVal, OOXMLProperty::SPRM);
- }
- {
- OOXMLValue::Pointer_t pVal = OOXMLBooleanValue::Create(mnTableDepth > 0);
- pProps->add(NS_ooxml::LN_tblCell, pVal, OOXMLProperty::SPRM);
- }
- {
- OOXMLValue::Pointer_t pVal = OOXMLBooleanValue::Create(mnTableDepth > 0);
- pProps->add(NS_ooxml::LN_tcEnd, pVal, OOXMLProperty::SPRM);
- }
-
- mpStream->props(pProps.get());
-}
-
-/*
- class OOXMLFastContextHandlerTextTableRow
- */
-
-OOXMLFastContextHandlerTextTableRow::OOXMLFastContextHandlerTextTableRow
-(OOXMLFastContextHandler * pContext)
-: OOXMLFastContextHandler(pContext)
-{
-}
-
-OOXMLFastContextHandlerTextTableRow::~OOXMLFastContextHandlerTextTableRow()
-{
-}
-
-void OOXMLFastContextHandlerTextTableRow::startRow()
-{
-}
-
-void OOXMLFastContextHandlerTextTableRow::endRow()
-{
- if (mpGridAfter)
- {
- // Grid after is the same as grid before, the empty cells are just
- // inserted after the real ones, not before.
- handleGridBefore(mpGridAfter);
- mpGridAfter = nullptr;
- }
-
- startParagraphGroup();
-
- if (isForwardEvents())
- {
- OOXMLPropertySet::Pointer_t pProps(new OOXMLPropertySet);
- {
- OOXMLValue::Pointer_t pVal = OOXMLIntegerValue::Create(mnTableDepth);
- pProps->add(NS_ooxml::LN_tblDepth, pVal, OOXMLProperty::SPRM);
- }
- {
- OOXMLValue::Pointer_t pVal = OOXMLIntegerValue::Create(1);
- pProps->add(NS_ooxml::LN_inTbl, pVal, OOXMLProperty::SPRM);
- }
- {
- OOXMLValue::Pointer_t pVal = OOXMLIntegerValue::Create(1);
- pProps->add(NS_ooxml::LN_tblRow, pVal, OOXMLProperty::SPRM);
- }
-
- mpStream->props(pProps.get());
- }
-
- startCharacterGroup();
-
- if (isForwardEvents())
- mpStream->utext(reinterpret_cast<const sal_uInt8*>(&uCR), 1);
-
- endCharacterGroup();
- endParagraphGroup();
-}
-
-namespace {
-OOXMLValue::Pointer_t fakeNoBorder()
-{
- OOXMLPropertySet::Pointer_t pProps( new OOXMLPropertySet );
- OOXMLValue::Pointer_t pVal = OOXMLIntegerValue::Create(0);
- pProps->add(NS_ooxml::LN_CT_Border_val, pVal, OOXMLProperty::ATTRIBUTE);
- OOXMLValue::Pointer_t pValue( new OOXMLPropertySetValue( pProps ));
- return pValue;
-}
-}
-
-// Handle w:gridBefore here by faking necessary input that'll fake cells. I'm apparently
-// not insane enough to find out how to add cells in dmapper.
-void OOXMLFastContextHandlerTextTableRow::handleGridBefore( const OOXMLValue::Pointer_t& val )
-{
- // start removing: disable for w:gridBefore
- if (!mpGridAfter)
- return;
-
- int count = val->getInt();
- for( int i = 0;
- i < count;
- ++i )
- {
- endOfParagraph();
-
- if (isForwardEvents())
- {
- // This whole part is OOXMLFastContextHandlerTextTableCell::endCell() .
- OOXMLPropertySet::Pointer_t pProps(new OOXMLPropertySet);
- {
- OOXMLValue::Pointer_t pVal = OOXMLIntegerValue::Create(mnTableDepth);
- pProps->add(NS_ooxml::LN_tblDepth, pVal, OOXMLProperty::SPRM);
- }
- {
- OOXMLValue::Pointer_t pVal = OOXMLIntegerValue::Create(1);
- pProps->add(NS_ooxml::LN_inTbl, pVal, OOXMLProperty::SPRM);
- }
- {
- OOXMLValue::Pointer_t pVal = OOXMLBooleanValue::Create(mnTableDepth > 0);
- pProps->add(NS_ooxml::LN_tblCell, pVal, OOXMLProperty::SPRM);
- }
-
- mpStream->props(pProps.get());
-
- // fake <w:tcBorders> with no border
- OOXMLPropertySet::Pointer_t pCellProps( new OOXMLPropertySet );
- {
- OOXMLPropertySet::Pointer_t pBorderProps( new OOXMLPropertySet );
- static Id borders[] = { NS_ooxml::LN_CT_TcBorders_top, NS_ooxml::LN_CT_TcBorders_bottom,
- NS_ooxml::LN_CT_TcBorders_start, NS_ooxml::LN_CT_TcBorders_end };
- for(sal_uInt32 border : borders)
- pBorderProps->add(border, fakeNoBorder(), OOXMLProperty::SPRM);
- OOXMLValue::Pointer_t pValue( new OOXMLPropertySetValue( pBorderProps ));
- pCellProps->add(NS_ooxml::LN_CT_TcPrBase_tcBorders, pValue, OOXMLProperty::SPRM);
- mpParserState->setCellProperties(pCellProps);
- }
- }
-
- sendCellProperties();
- endParagraphGroup();
- }
-}
-
-/*
- class OOXMLFastContextHandlerTextTable
- */
-
-OOXMLFastContextHandlerTextTable::OOXMLFastContextHandlerTextTable
-(OOXMLFastContextHandler * pContext)
-: OOXMLFastContextHandler(pContext)
-{
-}
-
-OOXMLFastContextHandlerTextTable::~OOXMLFastContextHandlerTextTable()
-{
- clearTableProps();
-}
-
-void OOXMLFastContextHandlerTextTable::lcl_startFastElement
-(Token_t /*Element*/,
- const uno::Reference< xml::sax::XFastAttributeList > & /*Attribs*/)
-{
- mpParserState->startTable();
- mnTableDepth++;
-
- OOXMLPropertySet::Pointer_t pProps( new OOXMLPropertySet );
- {
- OOXMLValue::Pointer_t pVal = OOXMLIntegerValue::Create(mnTableDepth);
- pProps->add(NS_ooxml::LN_tblStart, pVal, OOXMLProperty::SPRM);
- }
- mpParserState->setCharacterProperties(pProps);
-
- startAction();
-}
-
-void OOXMLFastContextHandlerTextTable::lcl_endFastElement
-(Token_t /*Element*/)
-{
- endAction();
-
- OOXMLPropertySet::Pointer_t pProps( new OOXMLPropertySet );
- {
- OOXMLValue::Pointer_t pVal = OOXMLIntegerValue::Create(mnTableDepth);
- pProps->add(NS_ooxml::LN_tblEnd, pVal, OOXMLProperty::SPRM);
- }
- mpParserState->setCharacterProperties(pProps);
-
- mnTableDepth--;
- mpParserState->endTable();
-}
-
-// tdf#111550
-void OOXMLFastContextHandlerTextTable::start_P_Tbl()
-{
- // Normally, when one paragraph ends, and another begins,
- // in OOXMLFactory_wml::endAction handler for <w:p>,
- // pHandler->endOfParagraph() is called, which (among other things)
- // calls TableManager::setHandle() to update current cell's starting point.
- // Then, in OOXMLFactory_wml::startAction for next <w:p>,
- // pHandler->startParagraphGroup() is called, which ends previous group,
- // and there, it pushes cells to row in TableManager::endParagraphGroup()
- // (cells have correct bounds defined by mCurHandle).
- // When a table is child of a <w:p>, that paragraph doesn't end before nested
- // paragraph begins. So, pHandler->endOfParagraph() was not (and should not be)
- // called. But as next paragraph starts, is the previous group is closed, then
- // cells will have wrong boundings. Here, we know that we *are* in paragraph
- // group, but it should not be finished.
- mpParserState->setInParagraphGroup(false);
-}
-
-/*
- class OOXMLFastContextHandlerShape
- */
-
-OOXMLFastContextHandlerShape::OOXMLFastContextHandlerShape
-(OOXMLFastContextHandler * pContext)
-: OOXMLFastContextHandlerProperties(pContext), m_bShapeSent( false ),
- m_bShapeStarted(false), m_bShapeContextPushed(false)
-{
-}
-
-OOXMLFastContextHandlerShape::~OOXMLFastContextHandlerShape()
-{
- if (m_bShapeContextPushed)
- getDocument()->popShapeContext();
-}
-
-void OOXMLFastContextHandlerShape::lcl_startFastElement
-(Token_t Element,
- const uno::Reference< xml::sax::XFastAttributeList > & Attribs)
-{
- startAction();
-
- if (mrShapeContext.is())
- {
- mrShapeContext->startFastElement(Element, Attribs);
- }
-}
-
-void SAL_CALL OOXMLFastContextHandlerShape::startUnknownElement
-(const OUString & Namespace,
- const OUString & Name,
- const uno::Reference< xml::sax::XFastAttributeList > & Attribs)
-{
- if (mrShapeContext.is())
- mrShapeContext->startUnknownElement(Namespace, Name, Attribs);
-}
-
-void OOXMLFastContextHandlerShape::setToken(Token_t nToken)
-{
- if (nToken == Token_t(NMSP_wps | XML_wsp) || nToken == Token_t(NMSP_dmlPicture | XML_pic))
- {
- // drawingML shapes are independent, <wps:bodyPr> is not parsed after
- // shape contents without pushing/popping the stack.
- m_bShapeContextPushed = true;
- getDocument()->pushShapeContext();
- }
-
- mrShapeContext.set(getDocument()->getShapeContext());
- if (!mrShapeContext.is())
- {
- // Define the shape context for the whole document
- mrShapeContext = css::xml::sax::FastShapeContextHandler::create(getComponentContext());
- getDocument()->setShapeContext(mrShapeContext);
- }
-
- mrShapeContext->setModel(getDocument()->getModel());
- uno::Reference<document::XDocumentPropertiesSupplier> xDocSupplier(getDocument()->getModel(), uno::UNO_QUERY_THROW);
- mrShapeContext->setDocumentProperties(xDocSupplier->getDocumentProperties());
- mrShapeContext->setDrawPage(getDocument()->getDrawPage());
- mrShapeContext->setMediaDescriptor(getDocument()->getMediaDescriptor());
-
- mrShapeContext->setRelationFragmentPath(mpParserState->getTarget());
-
- auto xGraphicMapper = getDocument()->getGraphicMapper();
-
- if (xGraphicMapper.is())
- mrShapeContext->setGraphicMapper(xGraphicMapper);
-
- OOXMLFastContextHandler::setToken(nToken);
-
- if (mrShapeContext.is())
- mrShapeContext->setStartToken(nToken);
-}
-
-void OOXMLFastContextHandlerShape::sendShape( Token_t Element )
-{
- if ( !mrShapeContext.is() || m_bShapeSent )
- return;
-
- awt::Point aPosition = mpStream->getPositionOffset();
- mrShapeContext->setPosition(aPosition);
- uno::Reference<drawing::XShape> xShape(mrShapeContext->getShape());
- m_bShapeSent = true;
- if (!xShape.is())
- return;
-
- OOXMLValue::Pointer_t
- pValue(new OOXMLShapeValue(xShape));
- newProperty(NS_ooxml::LN_shape, pValue);
-
- bool bIsPicture = Element == ( NMSP_dmlPicture | XML_pic );
-
- //tdf#87569: Fix table layout with correcting anchoring
- //If anchored object is in table, Word calculates its position from cell border
- //instead of page (what is set in the sample document)
- uno::Reference<beans::XPropertySet> xShapePropSet(xShape, uno::UNO_QUERY);
- if (mnTableDepth > 0 && xShapePropSet.is() && mbIsVMLfound) //if we had a table
- {
- xShapePropSet->setPropertyValue(dmapper::getPropertyName(dmapper::PROP_FOLLOW_TEXT_FLOW),
- uno::makeAny(mbAllowInCell));
- }
- // Notify the dmapper that the shape is ready to use
- if ( !bIsPicture )
- {
- mpStream->startShape( xShape );
- m_bShapeStarted = true;
- }
-}
-
-void OOXMLFastContextHandlerShape::lcl_endFastElement
-(Token_t Element)
-{
- if (!isForwardEvents())
- return;
-
- if (mrShapeContext.is())
- {
- mrShapeContext->endFastElement(Element);
- sendShape( Element );
- }
-
- OOXMLFastContextHandlerProperties::lcl_endFastElement(Element);
-
- // Ending the shape should be the last thing to do
- bool bIsPicture = Element == ( NMSP_dmlPicture | XML_pic );
- if ( !bIsPicture && m_bShapeStarted)
- mpStream->endShape( );
-}
-
-void SAL_CALL OOXMLFastContextHandlerShape::endUnknownElement
-(const OUString & Namespace,
- const OUString & Name)
-{
- if (mrShapeContext.is())
- mrShapeContext->endUnknownElement(Namespace, Name);
-}
-
-uno::Reference< xml::sax::XFastContextHandler >
-OOXMLFastContextHandlerShape::lcl_createFastChildContext
-(Token_t Element,
- const uno::Reference< xml::sax::XFastAttributeList > & Attribs)
-{
- uno::Reference< xml::sax::XFastContextHandler > xContextHandler;
-
- bool bGroupShape = Element == Token_t(NMSP_vml | XML_group);
- // drawingML version also counts as a group shape.
- bGroupShape |= mrShapeContext->getStartToken() == Token_t(NMSP_wpg | XML_wgp);
- mbIsVMLfound = (getNamespace(Element) == NMSP_vmlOffice) || (getNamespace(Element) == NMSP_vml);
- switch (oox::getNamespace(Element))
- {
- case NMSP_doc:
- case NMSP_vmlWord:
- case NMSP_vmlOffice:
- if (!bGroupShape)
- xContextHandler.set(OOXMLFactory::createFastChildContextFromStart(this, Element));
- [[fallthrough]];
- default:
- if (!xContextHandler.is())
- {
- if (mrShapeContext.is())
- {
- uno::Reference<XFastContextHandler> pChildContext =
- mrShapeContext->createFastChildContext(Element, Attribs);
-
- OOXMLFastContextHandlerWrapper * pWrapper =
- new OOXMLFastContextHandlerWrapper(this,
- pChildContext,
- this);
-
- //tdf129888 store allowincell attribute of the VML shape
- if (Attribs->hasAttribute(NMSP_vmlOffice | XML_allowincell))
- mbAllowInCell
- = !(Attribs->getValue(NMSP_vmlOffice | XML_allowincell) == "f");
-
- if (!bGroupShape)
- {
- pWrapper->addNamespace(NMSP_doc);
- pWrapper->addNamespace(NMSP_vmlWord);
- pWrapper->addNamespace(NMSP_vmlOffice);
- pWrapper->addToken( NMSP_vml|XML_textbox );
- }
- xContextHandler.set(pWrapper);
- }
- else
- xContextHandler.set(this);
- }
- break;
- }
-
- // VML import of shape text is already handled by
- // OOXMLFastContextHandlerWrapper::lcl_createFastChildContext(), here we
- // handle the WPS import of shape text, as there the parent context is a
- // Shape one, so a different situation.
- if (Element == static_cast<sal_Int32>(NMSP_wps | XML_txbx) ||
- Element == static_cast<sal_Int32>(NMSP_wps | XML_linkedTxbx) )
- sendShape(Element);
-
- return xContextHandler;
-}
-
-uno::Reference< xml::sax::XFastContextHandler > SAL_CALL
-OOXMLFastContextHandlerShape::createUnknownChildContext
-(const OUString & Namespace,
- const OUString & Name,
- const uno::Reference< xml::sax::XFastAttributeList > & Attribs)
-{
- uno::Reference< xml::sax::XFastContextHandler > xResult;
-
- if (mrShapeContext.is())
- xResult.set(mrShapeContext->createUnknownChildContext
- (Namespace, Name, Attribs));
-
- return xResult;
-}
-
-void OOXMLFastContextHandlerShape::lcl_characters
-(const OUString & aChars)
-{
- if (mrShapeContext.is())
- mrShapeContext->characters(aChars);
-}
-
-/*
- class OOXMLFastContextHandlerWrapper
-*/
-
-OOXMLFastContextHandlerWrapper::OOXMLFastContextHandlerWrapper
-(OOXMLFastContextHandler * pParent,
- uno::Reference<XFastContextHandler> const & xContext,
- rtl::Reference<OOXMLFastContextHandlerShape> const & xShapeHandler)
- : OOXMLFastContextHandler(pParent),
- mxWrappedContext(xContext),
- mxShapeHandler(xShapeHandler)
-{
- setId(pParent->getId());
- setToken(pParent->getToken());
- setPropertySet(pParent->getPropertySet());
-}
-
-OOXMLFastContextHandlerWrapper::~OOXMLFastContextHandlerWrapper()
-{
-}
-
-void SAL_CALL OOXMLFastContextHandlerWrapper::startUnknownElement
-(const OUString & Namespace,
- const OUString & Name,
- const uno::Reference< xml::sax::XFastAttributeList > & Attribs)
-{
- if (mxWrappedContext.is())
- mxWrappedContext->startUnknownElement(Namespace, Name, Attribs);
-}
-
-void SAL_CALL OOXMLFastContextHandlerWrapper::endUnknownElement
-(const OUString & Namespace,
- const OUString & Name)
-{
- if (mxWrappedContext.is())
- mxWrappedContext->endUnknownElement(Namespace, Name);
-}
-
-uno::Reference< xml::sax::XFastContextHandler > SAL_CALL
-OOXMLFastContextHandlerWrapper::createUnknownChildContext
-(const OUString & Namespace,
- const OUString & Name,
- const uno::Reference< xml::sax::XFastAttributeList > & Attribs)
-{
- uno::Reference< xml::sax::XFastContextHandler > xResult;
-
- if (mxWrappedContext.is())
- xResult = mxWrappedContext->createUnknownChildContext
- (Namespace, Name, Attribs);
- else
- xResult.set(this);
-
- return xResult;
-}
-
-void OOXMLFastContextHandlerWrapper::attributes
-(const uno::Reference< xml::sax::XFastAttributeList > & Attribs)
-{
- if (mxWrappedContext.is())
- {
- OOXMLFastContextHandler * pHandler = getFastContextHandler();
- if (pHandler != nullptr)
- pHandler->attributes(Attribs);
- }
-}
-
-OOXMLFastContextHandler::ResourceEnum_t
-OOXMLFastContextHandlerWrapper::getResource() const
-{
- return UNKNOWN;
-}
-
-void OOXMLFastContextHandlerWrapper::addNamespace(Id nId)
-{
- mMyNamespaces.insert(nId);
-}
-
-void OOXMLFastContextHandlerWrapper::addToken( Token_t Token )
-{
- mMyTokens.insert( Token );
-}
-
-void OOXMLFastContextHandlerWrapper::lcl_startFastElement
-(Token_t Element,
- const uno::Reference< xml::sax::XFastAttributeList > & Attribs)
-{
- if (mxWrappedContext.is())
- mxWrappedContext->startFastElement(Element, Attribs);
-}
-
-void OOXMLFastContextHandlerWrapper::lcl_endFastElement
-(Token_t Element)
-{
- if (mxWrappedContext.is())
- mxWrappedContext->endFastElement(Element);
-}
-
-uno::Reference< xml::sax::XFastContextHandler >
-OOXMLFastContextHandlerWrapper::lcl_createFastChildContext
-(Token_t Element,
- const uno::Reference< xml::sax::XFastAttributeList > & Attribs)
-{
- uno::Reference< xml::sax::XFastContextHandler > xResult;
-
- bool bInNamespaces = mMyNamespaces.find(oox::getNamespace(Element)) != mMyNamespaces.end();
- bool bInTokens = mMyTokens.find( Element ) != mMyTokens.end( );
-
- // We have methods to _add_ individual tokens or whole namespaces to be
- // processed by writerfilter (instead of oox), but we have no method to
- // filter out a single token. Just hardwire the 'wrap' and 'signatureline' tokens
- // here until we need a more generic solution.
- bool bIsWrap = Element == static_cast<sal_Int32>(NMSP_vmlWord | XML_wrap);
- bool bIsSignatureLine = Element == static_cast<sal_Int32>(NMSP_vmlOffice | XML_signatureline);
- bool bSkipImages = getDocument()->IsSkipImages() && oox::getNamespace(Element) == NMSP_dml &&
- (oox::getBaseToken(Element) != XML_linkedTxbx) && (oox::getBaseToken(Element) != XML_txbx);
-
- if ( bInNamespaces && ((!bIsWrap && !bIsSignatureLine)
- || mxShapeHandler->isShapeSent()) )
- {
- xResult.set(OOXMLFactory::createFastChildContextFromStart(this, Element));
- }
- else if (mxWrappedContext.is() && !bSkipImages)
- {
- OOXMLFastContextHandlerWrapper * pWrapper =
- new OOXMLFastContextHandlerWrapper
- (this, mxWrappedContext->createFastChildContext(Element, Attribs),
- mxShapeHandler);
- pWrapper->mMyNamespaces = mMyNamespaces;
- pWrapper->mMyTokens = mMyTokens;
- pWrapper->setPropertySet(getPropertySet());
- xResult.set(pWrapper);
- }
- else
- {
- xResult.set(this);
- }
-
- if ( bInTokens )
- mxShapeHandler->sendShape( Element );
-
- return xResult;
-}
-
-void OOXMLFastContextHandlerWrapper::lcl_characters
-(const OUString & aChars)
-{
- if (mxWrappedContext.is())
- mxWrappedContext->characters(aChars);
-}
-
-OOXMLFastContextHandler *
-OOXMLFastContextHandlerWrapper::getFastContextHandler() const
-{
- if (mxWrappedContext.is())
- return dynamic_cast<OOXMLFastContextHandler *>(mxWrappedContext.get());
-
- return nullptr;
-}
-
-void OOXMLFastContextHandlerWrapper::newProperty
-(Id nId, const OOXMLValue::Pointer_t& pVal)
-{
- if (mxWrappedContext.is())
- {
- OOXMLFastContextHandler * pHandler = getFastContextHandler();
- if (pHandler != nullptr)
- pHandler->newProperty(nId, pVal);
- }
-}
-
-void OOXMLFastContextHandlerWrapper::setPropertySet
-(const OOXMLPropertySet::Pointer_t& pPropertySet)
-{
- if (mxWrappedContext.is())
- {
- OOXMLFastContextHandler * pHandler = getFastContextHandler();
- if (pHandler != nullptr)
- pHandler->setPropertySet(pPropertySet);
- }
-
- mpPropertySet = pPropertySet;
-}
-
-OOXMLPropertySet::Pointer_t OOXMLFastContextHandlerWrapper::getPropertySet()
- const
-{
- OOXMLPropertySet::Pointer_t pResult(mpPropertySet);
-
- if (mxWrappedContext.is())
- {
- OOXMLFastContextHandler * pHandler = getFastContextHandler();
- if (pHandler != nullptr)
- pResult = pHandler->getPropertySet();
- }
-
- return pResult;
-}
-
-string OOXMLFastContextHandlerWrapper::getType() const
-{
- string sResult = "Wrapper(";
-
- if (mxWrappedContext.is())
- {
- OOXMLFastContextHandler * pHandler = getFastContextHandler();
- if (pHandler != nullptr)
- sResult += pHandler->getType();
- }
-
- sResult += ")";
-
- return sResult;
-}
-
-void OOXMLFastContextHandlerWrapper::setId(Id rId)
-{
- OOXMLFastContextHandler::setId(rId);
-
- if (mxWrappedContext.is())
- {
- OOXMLFastContextHandler * pHandler = getFastContextHandler();
- if (pHandler != nullptr)
- pHandler->setId(rId);
- }
-}
-
-Id OOXMLFastContextHandlerWrapper::getId() const
-{
- Id nResult = OOXMLFastContextHandler::getId();
-
- if (mxWrappedContext.is())
- {
- OOXMLFastContextHandler * pHandler = getFastContextHandler();
- if (pHandler != nullptr && pHandler->getId() != 0)
- nResult = pHandler->getId();
- }
-
- return nResult;
-}
-
-void OOXMLFastContextHandlerWrapper::setToken(Token_t nToken)
-{
- OOXMLFastContextHandler::setToken(nToken);
-
- if (mxWrappedContext.is())
- {
- OOXMLFastContextHandler * pHandler = getFastContextHandler();
- if (pHandler != nullptr)
- pHandler->setToken(nToken);
- }
-}
-
-Token_t OOXMLFastContextHandlerWrapper::getToken() const
-{
- Token_t nResult = OOXMLFastContextHandler::getToken();
-
- if (mxWrappedContext.is())
- {
- OOXMLFastContextHandler * pHandler = getFastContextHandler();
- if (pHandler != nullptr)
- nResult = pHandler->getToken();
- }
-
- return nResult;
-}
-
-
-/*
- class OOXMLFastContextHandlerLinear
- */
-
-OOXMLFastContextHandlerLinear::OOXMLFastContextHandlerLinear(OOXMLFastContextHandler* pContext)
- : OOXMLFastContextHandlerProperties(pContext)
- , depthCount( 0 )
-{
-}
-
-void OOXMLFastContextHandlerLinear::lcl_startFastElement(Token_t Element,
- const uno::Reference< xml::sax::XFastAttributeList >& Attribs)
-{
- buffer.appendOpeningTag( Element, Attribs );
- ++depthCount;
-}
-
-void OOXMLFastContextHandlerLinear::lcl_endFastElement(Token_t Element)
-{
- buffer.appendClosingTag( Element );
- if( --depthCount == 0 )
- process();
-}
-
-uno::Reference< xml::sax::XFastContextHandler >
-OOXMLFastContextHandlerLinear::lcl_createFastChildContext(Token_t,
- const uno::Reference< xml::sax::XFastAttributeList >&)
-{
- uno::Reference< xml::sax::XFastContextHandler > xContextHandler;
- xContextHandler.set( this );
- return xContextHandler;
-}
-
-void OOXMLFastContextHandlerLinear::lcl_characters(const OUString& aChars)
-{
- buffer.appendCharacters( aChars );
-}
-
-/*
- class OOXMLFastContextHandlerLinear
- */
-
-OOXMLFastContextHandlerMath::OOXMLFastContextHandlerMath(OOXMLFastContextHandler* pContext)
- : OOXMLFastContextHandlerLinear(pContext)
-{
-}
-
-void OOXMLFastContextHandlerMath::process()
-{
- SvGlobalName name( SO3_SM_CLASSID );
- comphelper::EmbeddedObjectContainer container;
- OUString aName;
- uno::Sequence<beans::PropertyValue> objArgs(1);
- objArgs[0].Name = "DefaultParentBaseURL";
- objArgs[0].Value <<= getDocument()->GetDocumentBaseURL();
- uno::Reference<embed::XEmbeddedObject> ref =
- container.CreateEmbeddedObject(name.GetByteSequence(), objArgs, aName);
- assert(ref.is());
- if (!ref.is())
- return;
- uno::Reference< uno::XInterface > component(ref->getComponent(), uno::UNO_QUERY_THROW);
-// gcc4.4 (and 4.3 and possibly older) have a problem with dynamic_cast directly to the target class,
-// so help it with an intermediate cast. I'm not sure what exactly the problem is, seems to be unrelated
-// to RTLD_GLOBAL, so most probably a gcc bug.
- oox::FormulaImportBase& import = dynamic_cast<oox::FormulaImportBase&>(dynamic_cast<SfxBaseModel&>(*component));
- import.readFormulaOoxml(buffer);
- if (!isForwardEvents())
- return;
-
- OOXMLPropertySet::Pointer_t pProps(new OOXMLPropertySet);
- OOXMLValue::Pointer_t pVal( new OOXMLStarMathValue( ref ));
- if (mbIsMathPara)
- {
- switch (mnMathJcVal)
- {
- case eMathParaJc::CENTER:
- pProps->add(NS_ooxml::LN_Value_math_ST_Jc_centerGroup, pVal,
- OOXMLProperty::ATTRIBUTE);
- break;
- case eMathParaJc::LEFT:
- pProps->add(NS_ooxml::LN_Value_math_ST_Jc_left, pVal,
- OOXMLProperty::ATTRIBUTE);
- break;
- case eMathParaJc::RIGHT:
- pProps->add(NS_ooxml::LN_Value_math_ST_Jc_right, pVal,
- OOXMLProperty::ATTRIBUTE);
- break;
- default:
- break;
- }
- }
- else
- pProps->add(NS_ooxml::LN_starmath, pVal, OOXMLProperty::ATTRIBUTE);
- mpStream->props( pProps.get() );
-}
-
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/ooxml/OOXMLFastContextHandler.hxx b/writerfilter/source/ooxml/OOXMLFastContextHandler.hxx
deleted file mode 100644
index ac8346d3dad2..000000000000
--- a/writerfilter/source/ooxml/OOXMLFastContextHandler.hxx
+++ /dev/null
@@ -1,606 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * 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 .
- */
-
-#ifndef INCLUDED_WRITERFILTER_SOURCE_OOXML_OOXMLFASTCONTEXTHANDLER_HXX
-#define INCLUDED_WRITERFILTER_SOURCE_OOXML_OOXMLFASTCONTEXTHANDLER_HXX
-
-#include <set>
-#include <cppuhelper/implbase.hxx>
-#include <com/sun/star/uno/XComponentContext.hpp>
-#include <com/sun/star/xml/sax/XFastContextHandler.hpp>
-#include <com/sun/star/xml/sax/XFastShapeContextHandler.hpp>
-#include <oox/mathml/importutils.hxx>
-#include <rtl/ref.hxx>
-#include "OOXMLParserState.hxx"
-#include "OOXMLPropertySet.hxx"
-
-namespace writerfilter::ooxml
-{
-class OOXMLDocumentImpl;
-
-class OOXMLFastContextHandler: public ::cppu::WeakImplHelper<css::xml::sax::XFastContextHandler>
-{
-public:
- typedef tools::SvRef<OOXMLFastContextHandler> Pointer_t;
-
- enum ResourceEnum_t { UNKNOWN, STREAM, PROPERTIES, TABLE, SHAPE };
-
- explicit OOXMLFastContextHandler(css::uno::Reference< css::uno::XComponentContext > const & context);
-
- explicit OOXMLFastContextHandler(OOXMLFastContextHandler * pContext);
-
- OOXMLFastContextHandler(OOXMLFastContextHandler const &) = default;
-
- virtual ~OOXMLFastContextHandler() override;
-
- // css::xml::sax::XFastContextHandler:
- virtual void SAL_CALL startFastElement (sal_Int32 Element, const css::uno::Reference< css::xml::sax::XFastAttributeList >& Attribs) override final;
-
- virtual void SAL_CALL startUnknownElement(const OUString & Namespace, const OUString & Name, const css::uno::Reference< css::xml::sax::XFastAttributeList > & Attribs) override;
-
- virtual void SAL_CALL endFastElement(sal_Int32 Element) override;
-
- virtual void SAL_CALL endUnknownElement(const OUString & Namespace, const OUString & Name) override;
-
- virtual css::uno::Reference<css::xml::sax::XFastContextHandler> SAL_CALL createFastChildContext(sal_Int32 Element,
- const css::uno::Reference<css::xml::sax::XFastAttributeList>& Attribs) override;
-
- virtual css::uno::Reference< css::xml::sax::XFastContextHandler > SAL_CALL createUnknownChildContext(const OUString & Namespace, const OUString & Name,
- const css::uno::Reference< css::xml::sax::XFastAttributeList > & Attribs) override;
-
- virtual void SAL_CALL characters(const OUString & aChars) override;
-
- // local
-
- void setStream(Stream * pStream);
-
- /**
- Return value of this context(element).
-
- @return the value
- */
- virtual OOXMLValue::Pointer_t getValue() const;
-
- /**
- Returns a string describing the type of the context.
-
- This is the name of the define normally.
-
- @return type string
- */
- virtual std::string getType() const { return "??"; }
-
- virtual ResourceEnum_t getResource() const { return STREAM; }
-
- /// @throws css::uno::RuntimeException
- /// @throws css::xml::sax::SAXException
- virtual void attributes(const css::uno::Reference< css::xml::sax::XFastAttributeList > & Attribs);
-
- virtual void newProperty(Id aId, const OOXMLValue::Pointer_t& pVal);
- virtual void setPropertySet(const OOXMLPropertySet::Pointer_t& pPropertySet);
- virtual OOXMLPropertySet::Pointer_t getPropertySet() const;
-
- virtual void setToken(Token_t nToken);
- virtual Token_t getToken() const;
-
- void resolveFootnote(const sal_Int32 nId);
- void resolveEndnote(const sal_Int32 nId);
- void resolveComment(const sal_Int32 nId);
- void resolvePicture(const OUString & rId);
- void resolveHeader(const sal_Int32 type,
- const OUString & rId);
- void resolveFooter(const sal_Int32 type,
- const OUString & rId);
- void resolveData(const OUString & rId);
-
- OUString getTargetForId(const OUString & rId);
-
- void setDocument(OOXMLDocumentImpl* pDocument);
- OOXMLDocumentImpl* getDocument();
- void setXNoteId(const OOXMLValue::Pointer_t& pValue);
- void setXNoteId(const sal_Int32 nId);
- sal_Int32 getXNoteId() const;
- void setForwardEvents(bool bForwardEvents);
- bool isForwardEvents() const;
- virtual void setId(Id nId);
- virtual Id getId() const;
-
- void setDefine(Id nDefine);
- Id getDefine() const { return mnDefine;}
-
- const OOXMLParserState::Pointer_t& getParserState() const { return mpParserState;}
-
- void sendTableDepth() const;
- void setHandle();
-
- void startSectionGroup();
- void setLastParagraphInSection();
- void setLastSectionGroup();
- void endSectionGroup();
- void startParagraphGroup();
- void endParagraphGroup();
- void startCharacterGroup();
- void endCharacterGroup();
- virtual void pushBiDiEmbedLevel();
- virtual void popBiDiEmbedLevel();
- void startSdt();
- void endSdt();
-
- void startField();
- void fieldSeparator();
- void endField();
- void lockField();
- void ftnednref();
- void ftnedncont();
- void ftnednsep();
- void pgNum();
- void tab();
- void symbol();
- void cr();
- void noBreakHyphen();
- void softHyphen();
- void handleLastParagraphInSection();
- void endOfParagraph();
- void text(const OUString & sText);
- void positionOffset(const OUString & sText);
- static void ignore();
- void alignH(const OUString & sText);
- void alignV(const OUString & sText);
- void positivePercentage(const OUString& rText);
- void startGlossaryEntry();
- void endGlossaryEntry();
- void startTxbxContent();
- void endTxbxContent();
- void propagateCharacterProperties();
- void propagateTableProperties();
- void propagateRowProperties();
- void propagateCellProperties();
- void sendPropertiesWithId(Id nId);
- void sendPropertiesToParent();
- void sendCellProperties();
- void sendRowProperties();
- void sendTableProperties();
- void clearTableProps();
- void clearProps();
-
- virtual void setDefaultBooleanValue();
- virtual void setDefaultIntegerValue();
- virtual void setDefaultHexValue();
- virtual void setDefaultStringValue();
-
- void sendPropertyToParent();
- OOXMLFastContextHandler* getParent() const { return mpParent; }
- void setGridAfter(const OOXMLValue::Pointer_t& pGridAfter) { mpGridAfter = pGridAfter; }
-
-protected:
- OOXMLFastContextHandler * mpParent;
- Id mId;
- Id mnDefine;
- Token_t mnToken;
-
- // the formula insertion mode: inline/newline(left, center, right)
- sal_Int8 mnMathJcVal;
- bool mbIsMathPara;
- enum eMathParaJc
- {
- INLINE, //The equation is anchored as inline to the text
- CENTER, //The equation is center aligned
- LEFT, //The equation is left aligned
- RIGHT //The equation is right aligned
- };
- // the stream to send the stream events to.
- Stream * mpStream;
-
- // the current global parser state
- OOXMLParserState::Pointer_t mpParserState;
-
- // the table depth of this context
- unsigned int mnTableDepth;
-
- /// @throws css::uno::RuntimeException
- /// @throws css::xml::sax::SAXException
- virtual void lcl_startFastElement(Token_t Element, const css::uno::Reference< css::xml::sax::XFastAttributeList > & Attribs);
-
- /// @throws css::uno::RuntimeException
- /// @throws css::xml::sax::SAXException
- virtual void lcl_endFastElement(Token_t Element);
-
- /// @throws css::uno::RuntimeException
- /// @throws css::xml::sax::SAXException
- virtual css::uno::Reference< css::xml::sax::XFastContextHandler > lcl_createFastChildContext(Token_t Element, const css::uno::Reference< css::xml::sax::XFastAttributeList > & Attribs);
-
- /// @throws css::uno::RuntimeException
- /// @throws css::xml::sax::SAXException
- virtual void lcl_characters(const OUString & aChars);
-
- void startAction();
- void endAction();
-
- const css::uno::Reference< css::uno::XComponentContext >& getComponentContext() const { return m_xContext;}
-
- bool inPositionV;
- bool mbAllowInCell; // o:allowincell
- bool mbIsVMLfound;
- OOXMLValue::Pointer_t mpGridAfter;
-
-private:
- void operator =(OOXMLFastContextHandler const &) = delete;
- /// Handles AlternateContent. Returns true, if children of the current element should be ignored.
- bool prepareMceContext(Token_t nElement, const css::uno::Reference<css::xml::sax::XFastAttributeList>& Attribs);
-
- // 2.10 of XML 1.0 specification
- bool IsPreserveSpace() const;
-
- css::uno::Reference< css::uno::XComponentContext > m_xContext;
- bool m_bDiscardChildren;
- bool m_bTookChoice; ///< Did we take the Choice or want Fallback instead?
- bool mbPreserveSpace = false;
- bool mbPreserveSpaceSet = false;
-
-};
-
-class OOXMLFastContextHandlerStream : public OOXMLFastContextHandler
-{
-public:
- explicit OOXMLFastContextHandlerStream(OOXMLFastContextHandler * pContext);
- virtual ~OOXMLFastContextHandlerStream() override;
-
- virtual ResourceEnum_t getResource() const override { return STREAM; }
-
- const OOXMLPropertySet::Pointer_t& getPropertySetAttrs() const { return mpPropertySetAttrs;}
-
- virtual void newProperty(Id aId, const OOXMLValue::Pointer_t& pVal) override;
- void sendProperty(Id nId);
- virtual OOXMLPropertySet::Pointer_t getPropertySet() const override;
-
- void handleHyperlink();
-
-private:
- mutable OOXMLPropertySet::Pointer_t mpPropertySetAttrs;
-};
-
-class OOXMLFastContextHandlerProperties : public OOXMLFastContextHandler
-{
-public:
- explicit OOXMLFastContextHandlerProperties(OOXMLFastContextHandler * pContext);
- virtual ~OOXMLFastContextHandlerProperties() override;
-
- virtual OOXMLValue::Pointer_t getValue() const override;
- virtual ResourceEnum_t getResource() const override { return PROPERTIES; }
-
- virtual void newProperty(Id nId, const OOXMLValue::Pointer_t& pVal) override;
-
- void handleXNotes();
- void handleHdrFtr();
- void handleComment();
- void handlePicture();
- void handleBreak();
- void handleOutOfOrderBreak();
- void handleOLE();
- void handleFontRel();
- void handleHyperlinkURL();
- void handleAltChunk();
-
- virtual void setPropertySet(const OOXMLPropertySet::Pointer_t& pPropertySet) override;
- virtual OOXMLPropertySet::Pointer_t getPropertySet() const override;
-
-protected:
- /// the properties
- OOXMLPropertySet::Pointer_t mpPropertySet;
-
- virtual void lcl_endFastElement(Token_t Element) override;
-
-private:
-
- bool mbResolve;
-};
-
-class OOXMLFastContextHandlerPropertyTable :
- public OOXMLFastContextHandlerProperties
-{
-public:
- explicit OOXMLFastContextHandlerPropertyTable(OOXMLFastContextHandler * pContext);
- virtual ~OOXMLFastContextHandlerPropertyTable() override;
-
-private:
- OOXMLTable mTable;
-
- virtual void lcl_endFastElement(Token_t Element) override;
-};
-
-class OOXMLFastContextHandlerValue :
- public OOXMLFastContextHandler
-{
-public:
- explicit OOXMLFastContextHandlerValue(OOXMLFastContextHandler * pContext);
- virtual ~OOXMLFastContextHandlerValue() override;
-
- void setValue(const OOXMLValue::Pointer_t& pValue);
- virtual OOXMLValue::Pointer_t getValue() const override;
-
- virtual void lcl_endFastElement(Token_t Element) override;
-
- virtual std::string getType() const override { return "Value"; }
-
- virtual void setDefaultBooleanValue() override;
- virtual void setDefaultIntegerValue() override;
- virtual void setDefaultHexValue() override;
- virtual void setDefaultStringValue() override;
-
- virtual void pushBiDiEmbedLevel() override;
- virtual void popBiDiEmbedLevel() override;
-
- void handleGridAfter();
-
-private:
- OOXMLValue::Pointer_t mpValue;
-};
-
-class OOXMLFastContextHandlerTable : public OOXMLFastContextHandler
-{
-public:
- explicit OOXMLFastContextHandlerTable(OOXMLFastContextHandler * pContext);
- virtual ~OOXMLFastContextHandlerTable() override;
-
- virtual css::uno::Reference< css::xml::sax::XFastContextHandler > SAL_CALL createFastChildContext (sal_Int32 Element,
- const css::uno::Reference< css::xml::sax::XFastAttributeList > & Attribs) override;
-
-private:
- OOXMLTable mTable;
-
- css::uno::Reference<css::xml::sax::XFastContextHandler> mCurrentChild;
-
- virtual void lcl_endFastElement(Token_t Element) override;
-
- virtual ResourceEnum_t getResource() const override { return TABLE; }
-
- virtual std::string getType() const override { return "Table"; }
-
- void addCurrentChild();
-};
-
-class OOXMLFastContextHandlerXNote : public OOXMLFastContextHandlerProperties
-{
-public:
- explicit OOXMLFastContextHandlerXNote(OOXMLFastContextHandler * pContext);
- virtual ~OOXMLFastContextHandlerXNote() override;
-
- void checkId(const OOXMLValue::Pointer_t& pValue);
-
- void checkType(const OOXMLValue::Pointer_t& pValue);
-
- virtual std::string getType() const override { return "XNote"; }
-
-private:
- bool mbForwardEventsSaved;
- sal_Int32 mnMyXNoteId;
- sal_Int32 mnMyXNoteType;
-
- virtual void lcl_startFastElement(Token_t Element, const css::uno::Reference< css::xml::sax::XFastAttributeList > & Attribs) override;
-
- virtual void lcl_endFastElement(Token_t Element) override;
-
- virtual ResourceEnum_t getResource() const override { return STREAM; }
-};
-
-class OOXMLFastContextHandlerTextTableCell : public OOXMLFastContextHandler
-{
-public:
- explicit OOXMLFastContextHandlerTextTableCell(OOXMLFastContextHandler * pContext);
- virtual ~OOXMLFastContextHandlerTextTableCell() override;
-
- virtual std::string getType() const override { return "TextTableCell"; }
-
- void startCell();
- void endCell();
-};
-
-class OOXMLFastContextHandlerTextTableRow : public OOXMLFastContextHandler
-{
-public:
- explicit OOXMLFastContextHandlerTextTableRow(OOXMLFastContextHandler * pContext);
- virtual ~OOXMLFastContextHandlerTextTableRow() override;
-
- virtual std::string getType() const override { return "TextTableRow"; }
-
- static void startRow();
- void endRow();
- void handleGridBefore( const OOXMLValue::Pointer_t& val );
-};
-
-class OOXMLFastContextHandlerTextTable : public OOXMLFastContextHandler
-{
-public:
- explicit OOXMLFastContextHandlerTextTable(OOXMLFastContextHandler * pContext);
-
- virtual ~OOXMLFastContextHandlerTextTable() override;
-
- virtual std::string getType() const override { return "TextTable"; }
-
- // tdf#111550
- // when <w:tbl> appears as direct child of <w:p>, we need to rearrange this paragraph
- // to merge with the table's first paragraph (that's what Word does in this case)
- void start_P_Tbl();
-protected:
- virtual void lcl_startFastElement(Token_t Element, const css::uno::Reference< css::xml::sax::XFastAttributeList > & Attribs) override;
-
- virtual void lcl_endFastElement(Token_t Element) override;
-};
-
-class OOXMLFastContextHandlerShape: public OOXMLFastContextHandlerProperties
-{
- bool m_bShapeSent;
- bool m_bShapeStarted;
- /// Is it necessary to pop the stack in the dtor?
- bool m_bShapeContextPushed;
- css::uno::Reference<css::xml::sax::XFastShapeContextHandler> mrShapeContext;
-
-public:
- explicit OOXMLFastContextHandlerShape(OOXMLFastContextHandler * pContext);
- virtual ~OOXMLFastContextHandlerShape() override;
-
- virtual std::string getType() const override { return "Shape"; }
-
- // css::xml::sax::XFastContextHandler:
- virtual void SAL_CALL startUnknownElement (const OUString & Namespace, const OUString & Name, const css::uno::Reference< css::xml::sax::XFastAttributeList > & Attribs) override;
-
- virtual void SAL_CALL endUnknownElement(const OUString & Namespace, const OUString & Name) override;
-
- virtual css::uno::Reference< css::xml::sax::XFastContextHandler > SAL_CALL createUnknownChildContext(const OUString & Namespace, const OUString & Name,
- const css::uno::Reference< css::xml::sax::XFastAttributeList > & Attribs) override;
-
- virtual void setToken(Token_t nToken) override;
-
- virtual ResourceEnum_t getResource() const override { return SHAPE; }
-
- void sendShape( Token_t Element );
- bool isShapeSent( ) const { return m_bShapeSent; }
-
-protected:
- virtual void lcl_startFastElement(Token_t Element, const css::uno::Reference< css::xml::sax::XFastAttributeList > & Attribs) override;
-
- virtual void lcl_endFastElement(Token_t Element) override;
-
- virtual css::uno::Reference< css::xml::sax::XFastContextHandler > lcl_createFastChildContext (Token_t Element, const css::uno::Reference< css::xml::sax::XFastAttributeList > & Attribs) override;
-
- virtual void lcl_characters(const OUString & aChars) override;
-
-};
-
-/**
- OOXMLFastContextHandlerWrapper wraps an OOXMLFastContextHandler.
-
- The method calls for the interface css::xml::sax::XFastContextHandler are
- forwarded to the wrapped OOXMLFastContextHandler.
- */
-class OOXMLFastContextHandlerWrapper : public OOXMLFastContextHandler
-{
-public:
- OOXMLFastContextHandlerWrapper(OOXMLFastContextHandler * pParent,
- css::uno::Reference<css::xml::sax::XFastContextHandler> const & xContext,
- rtl::Reference<OOXMLFastContextHandlerShape> const & xShapeHandler);
- virtual ~OOXMLFastContextHandlerWrapper() override;
-
- // css::xml::sax::XFastContextHandler:
- virtual void SAL_CALL startUnknownElement(const OUString & Namespace, const OUString & Name, const css::uno::Reference< css::xml::sax::XFastAttributeList > & Attribs) override;
-
- virtual void SAL_CALL endUnknownElement(const OUString & Namespace, const OUString & Name) override;
-
- virtual css::uno::Reference< css::xml::sax::XFastContextHandler > SAL_CALL createUnknownChildContext (const OUString & Namespace, const OUString & Name,
- const css::uno::Reference< css::xml::sax::XFastAttributeList > & Attribs) override;
-
- virtual void attributes(const css::uno::Reference< css::xml::sax::XFastAttributeList > & Attribs) override;
-
- virtual ResourceEnum_t getResource() const override;
-
- void addNamespace(Id nId);
- void addToken( Token_t Element );
-
- virtual void newProperty(Id nId, const OOXMLValue::Pointer_t& pVal) override;
- virtual void setPropertySet(const OOXMLPropertySet::Pointer_t& pPropertySet) override;
- virtual OOXMLPropertySet::Pointer_t getPropertySet() const override;
-
- virtual std::string getType() const override;
-
-protected:
- virtual void lcl_startFastElement(Token_t Element, const css::uno::Reference< css::xml::sax::XFastAttributeList > & Attribs) override;
-
- virtual void lcl_endFastElement(Token_t Element) override;
-
- virtual css::uno::Reference< css::xml::sax::XFastContextHandler > lcl_createFastChildContext(Token_t Element, const css::uno::Reference< css::xml::sax::XFastAttributeList > & Attribs) override;
-
- virtual void lcl_characters(const OUString & aChars) override;
-
- virtual void setId(Id nId) override;
- virtual Id getId() const override;
-
- virtual void setToken(Token_t nToken) override;
- virtual Token_t getToken() const override;
-
-private:
- css::uno::Reference<css::xml::sax::XFastContextHandler> mxWrappedContext;
- rtl::Reference<OOXMLFastContextHandlerShape> mxShapeHandler;
- std::set<Id> mMyNamespaces;
- std::set<Token_t> mMyTokens;
- OOXMLPropertySet::Pointer_t mpPropertySet;
-
- OOXMLFastContextHandler * getFastContextHandler() const;
-};
-
-/**
- A class that converts from XFastParser/XFastContextHandler usage to a liner XML stream of data.
-
- The purpose of this class is to convert the rather complex XFastContextHandler-based XML
- processing that requires context subclasses, callbacks, etc. into a linear stream of XML tokens
- that can be handled simply by reading the tokens one by one and directly processing them.
- See the oox::formulaimport::XmlStream class documentation for more information.
-
- Usage: Create a subclass of OOXMLFastContextHandlerLinear, reimplemented getType() to provide
- type of the subclass and process() to actually process the XML stream. Also make sure to
- add a line like the following to model.xml (for class OOXMLFastContextHandlerMath):
-
- <resource name="CT_OMath" resource="Math"/>
-
- @since 3.5
-*/
-class OOXMLFastContextHandlerLinear: public OOXMLFastContextHandlerProperties
-{
-public:
- explicit OOXMLFastContextHandlerLinear(OOXMLFastContextHandler * pContext);
- /**
- Return the type of the class, as written in model.xml .
- */
- virtual std::string getType() const override = 0;
-
-protected:
- /**
- Called when the tokens for the element, its content and sub-elements have been linearized
- and should be processed. The data member @ref buffer contains the converted data.
- */
- virtual void process() = 0;
-
- virtual void lcl_startFastElement(Token_t Element, const css::uno::Reference< css::xml::sax::XFastAttributeList > & Attribs) override;
-
- virtual void lcl_endFastElement(Token_t Element) override;
-
- virtual css::uno::Reference< css::xml::sax::XFastContextHandler > lcl_createFastChildContext(Token_t Element,
- const css::uno::Reference< css::xml::sax::XFastAttributeList > & Attribs) override;
-
- virtual void lcl_characters(const OUString & aChars) override;
-
- // should be private, but not much point in making deep copies of it
- oox::formulaimport::XmlStreamBuilder buffer;
-
-private:
- int depthCount;
-};
-
-class OOXMLFastContextHandlerMath: public OOXMLFastContextHandlerLinear
-{
-public:
- explicit OOXMLFastContextHandlerMath(OOXMLFastContextHandler * pContext);
- virtual std::string getType() const override { return "Math"; }
-protected:
- virtual void process() override;
-};
-
-}
-#endif // INCLUDED_WRITERFILTER_SOURCE_OOXML_OOXMLFASTCONTEXTHANDLER_HXX
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/ooxml/OOXMLFastDocumentHandler.cxx b/writerfilter/source/ooxml/OOXMLFastDocumentHandler.cxx
deleted file mode 100644
index 0542f77175df..000000000000
--- a/writerfilter/source/ooxml/OOXMLFastDocumentHandler.cxx
+++ /dev/null
@@ -1,147 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * 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 .
- */
-
-#include "OOXMLFastDocumentHandler.hxx"
-#include "OOXMLFastContextHandler.hxx"
-#include "OOXMLFactory.hxx"
-#include <sal/log.hxx>
-
-namespace writerfilter::ooxml
-{
-using namespace ::com::sun::star;
-using namespace ::std;
-
-
-OOXMLFastDocumentHandler::OOXMLFastDocumentHandler(
- uno::Reference< uno::XComponentContext > const & context,
- Stream* pStream,
- OOXMLDocumentImpl* pDocument,
- sal_Int32 nXNoteId )
- : m_xContext(context)
- , mpStream( pStream )
- , mpDocument( pDocument )
- , mnXNoteId( nXNoteId )
- , mxContextHandler()
-{
-}
-
-OOXMLFastDocumentHandler::~OOXMLFastDocumentHandler() {}
-
-// css::xml::sax::XFastContextHandler:
-void SAL_CALL OOXMLFastDocumentHandler::startFastElement(sal_Int32 Element
-, const uno::Reference< xml::sax::XFastAttributeList > & /*Attribs*/)
-{
- SAL_INFO("writerfilter", "start element:" << fastTokenToId(Element));
-}
-
-void SAL_CALL OOXMLFastDocumentHandler::startUnknownElement
-(const OUString & Namespace
-, const OUString & Name
-, const uno::Reference< xml::sax::XFastAttributeList > & /*Attribs*/)
-{
- SAL_INFO("writerfilter", "start unknown element:" << Namespace << ":" << Name);
-}
-
-void SAL_CALL OOXMLFastDocumentHandler::endFastElement(sal_Int32 Element)
-{
- SAL_INFO("writerfilter", "end element:" << fastTokenToId(Element));
-}
-
-void SAL_CALL OOXMLFastDocumentHandler::endUnknownElement
-(const OUString & Namespace
-, const OUString & Name)
-{
- SAL_INFO("writerfilter", "end unknown element:" << Namespace << ":" << Name);
-}
-
-rtl::Reference< OOXMLFastContextHandler > const &
-OOXMLFastDocumentHandler::getContextHandler() const
-{
- if (!mxContextHandler.is())
- {
- mxContextHandler = new OOXMLFastContextHandler(m_xContext);
- mxContextHandler->setStream(mpStream);
- mxContextHandler->setDocument(mpDocument);
- mxContextHandler->setXNoteId(mnXNoteId);
- mxContextHandler->setForwardEvents(true);
- }
-
- return mxContextHandler;
-}
-
-uno::Reference< xml::sax::XFastContextHandler > SAL_CALL
- OOXMLFastDocumentHandler::createFastChildContext
-(::sal_Int32 Element,
- const uno::Reference< xml::sax::XFastAttributeList > & /*Attribs*/)
-{
- if ( mpStream == nullptr && mpDocument == nullptr )
- {
- // document handler has been created as unknown child - see <OOXMLFastDocumentHandler::createUnknownChildContext(..)>
- // --> do not provide a child context
- return nullptr;
- }
-
- return OOXMLFactory::createFastChildContextFromStart(getContextHandler().get(), Element);
-}
-
-uno::Reference< xml::sax::XFastContextHandler > SAL_CALL
-OOXMLFastDocumentHandler::createUnknownChildContext
-(const OUString & Namespace
-, const OUString & Name
-, const uno::Reference< xml::sax::XFastAttributeList > & /*Attribs*/)
-{
- SAL_INFO("writerfilter", "createUnknownChildContext:" << Namespace << ":"<< Name);
-
- return uno::Reference< xml::sax::XFastContextHandler >
- ( new OOXMLFastDocumentHandler( m_xContext, nullptr, nullptr, 0 ) );
-}
-
-void SAL_CALL OOXMLFastDocumentHandler::characters(const OUString & /*aChars*/)
-{
-}
-
-// css::xml::sax::XFastDocumentHandler:
-void SAL_CALL OOXMLFastDocumentHandler::startDocument()
-{
-}
-
-void SAL_CALL OOXMLFastDocumentHandler::endDocument()
-{
-}
-
-void SAL_CALL OOXMLFastDocumentHandler::processingInstruction( const OUString& /*rTarget*/, const OUString& /*rData*/ )
-{
-}
-
-void SAL_CALL OOXMLFastDocumentHandler::setDocumentLocator
-(const uno::Reference< xml::sax::XLocator > & /*xLocator*/)
-{
-}
-
-void OOXMLFastDocumentHandler::setIsSubstream( bool bSubstream )
-{
- if ( mpStream != nullptr && mpDocument != nullptr )
- {
- getContextHandler( )->getParserState( )->setInSectionGroup( bSubstream );
- }
-}
-
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/ooxml/OOXMLFastDocumentHandler.hxx b/writerfilter/source/ooxml/OOXMLFastDocumentHandler.hxx
deleted file mode 100644
index a6c3c58f3569..000000000000
--- a/writerfilter/source/ooxml/OOXMLFastDocumentHandler.hxx
+++ /dev/null
@@ -1,93 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * 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 .
- */
-
-#ifndef INCLUDED_WRITERFILTER_SOURCE_OOXML_OOXMLFASTDOCUMENTHANDLER_HXX
-#define INCLUDED_WRITERFILTER_SOURCE_OOXML_OOXMLFASTDOCUMENTHANDLER_HXX
-
-#include <com/sun/star/uno/XComponentContext.hpp>
-#include <cppuhelper/implbase.hxx>
-#include <com/sun/star/xml/sax/XFastDocumentHandler.hpp>
-#include <dmapper/resourcemodel.hxx>
-#include <ooxml/OOXMLDocumentImpl.hxx>
-#include <rtl/ref.hxx>
-
-namespace writerfilter::ooxml
-{
-
-class OOXMLFastContextHandler;
-
-class OOXMLFastDocumentHandler : public cppu::WeakImplHelper<css::xml::sax::XFastDocumentHandler>
-{
-public:
- OOXMLFastDocumentHandler(
- css::uno::Reference< css::uno::XComponentContext > const & context,
- Stream* pStream,
- OOXMLDocumentImpl* pDocument,
- sal_Int32 nXNoteId );
- virtual ~OOXMLFastDocumentHandler() override;
-
- // css::xml::sax::XFastDocumentHandler:
- virtual void SAL_CALL startDocument() override;
- virtual void SAL_CALL endDocument() override;
- virtual void SAL_CALL processingInstruction( const OUString& rTarget, const OUString& rData ) override;
- virtual void SAL_CALL setDocumentLocator
- (const css::uno::Reference< css::xml::sax::XLocator > & xLocator) override;
-
- // css::xml::sax::XFastContextHandler:
- virtual void SAL_CALL startFastElement
- (::sal_Int32 Element,
- const css::uno::Reference< css::xml::sax::XFastAttributeList > & Attribs) override;
- virtual void SAL_CALL startUnknownElement
- (const OUString & Namespace,
- const OUString & Name,
- const css::uno::Reference< css::xml::sax::XFastAttributeList > & Attribs) override;
- virtual void SAL_CALL endFastElement(::sal_Int32 Element) override;
- virtual void SAL_CALL endUnknownElement
- (const OUString & Namespace,
- const OUString & Name) override;
- virtual css::uno::Reference< css::xml::sax::XFastContextHandler > SAL_CALL
- createFastChildContext
- (::sal_Int32 Element,
- const css::uno::Reference< css::xml::sax::XFastAttributeList > & Attribs) override;
- virtual css::uno::Reference< css::xml::sax::XFastContextHandler > SAL_CALL
- createUnknownChildContext
- (const OUString & Namespace,
- const OUString & Name,
- const css::uno::Reference< css::xml::sax::XFastAttributeList > & Attribs) override;
- virtual void SAL_CALL characters(const OUString & aChars) override;
-
- void setIsSubstream( bool bSubstream );
-
-private:
- OOXMLFastDocumentHandler(OOXMLFastDocumentHandler const &) = delete;
- void operator =(OOXMLFastDocumentHandler const &) = delete;
-
- css::uno::Reference< css::uno::XComponentContext > m_xContext;
-
- Stream * mpStream;
- OOXMLDocumentImpl* mpDocument;
- sal_Int32 mnXNoteId;
- mutable rtl::Reference<OOXMLFastContextHandler> mxContextHandler;
- rtl::Reference<OOXMLFastContextHandler> const & getContextHandler() const;
-};
-}
-
-#endif // INCLUDED_WRITERFILTER_SOURCE_OOXML_OOXMLFASTDOCUMENTHANDLER_HXX
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/ooxml/OOXMLFastHelper.hxx b/writerfilter/source/ooxml/OOXMLFastHelper.hxx
deleted file mode 100644
index b68baee63b96..000000000000
--- a/writerfilter/source/ooxml/OOXMLFastHelper.hxx
+++ /dev/null
@@ -1,63 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * 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 .
- */
-#ifndef INCLUDED_WRITERFILTER_SOURCE_OOXML_OOXMLFASTHELPER_HXX
-#define INCLUDED_WRITERFILTER_SOURCE_OOXML_OOXMLFASTHELPER_HXX
-
-#include "OOXMLFastContextHandler.hxx"
-
-namespace writerfilter::ooxml
-{
-
-template <class T>
-class OOXMLFastHelper
-{
-public:
- static OOXMLFastContextHandler* createAndSetParentAndDefine
- (OOXMLFastContextHandler * pHandler, sal_uInt32 nToken, Id nId, Id nDefine);
-
- static void newProperty(OOXMLFastContextHandler * pHandler,
- Id nId, sal_Int32 nValue);
-};
-
-template <class T>
-OOXMLFastContextHandler* OOXMLFastHelper<T>::createAndSetParentAndDefine (OOXMLFastContextHandler * pHandler, sal_uInt32 nToken, Id nId, Id nDefine)
-{
- OOXMLFastContextHandler * pTmp = new T(pHandler);
-
- pTmp->setToken(nToken);
- pTmp->setId(nId);
- pTmp->setDefine(nDefine);
-
- return pTmp;
-}
-
-template <class T>
-void OOXMLFastHelper<T>::newProperty(OOXMLFastContextHandler * pHandler,
- Id nId,
- sal_Int32 nVal)
-{
- OOXMLValue::Pointer_t pVal(T::Create(nVal));
-
- pHandler->newProperty(nId, pVal);
-}
-
-}
-#endif // INCLUDED_WRITERFILTER_SOURCE_OOXML_OOXMLFASTHELPER_HXX
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/ooxml/OOXMLParserState.cxx b/writerfilter/source/ooxml/OOXMLParserState.cxx
deleted file mode 100644
index c103566d5331..000000000000
--- a/writerfilter/source/ooxml/OOXMLParserState.cxx
+++ /dev/null
@@ -1,280 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * 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 .
- */
-
-#include "OOXMLParserState.hxx"
-#include "Handler.hxx"
-
-#include <sal/log.hxx>
-
-namespace writerfilter::ooxml
-{
-/*
- class OOXMLParserState
-*/
-
-OOXMLParserState::OOXMLParserState() :
- mbInSectionGroup(false),
- mbInParagraphGroup(false),
- mbInCharacterGroup(false),
- mbLastParagraphInSection(false),
- mbForwardEvents(true),
- mnContexts(0),
- mnHandle(0),
- mpDocument(nullptr),
- inTxbxContent(false),
- savedInParagraphGroup(false),
- savedInCharacterGroup(false),
- savedLastParagraphInSection(false)
-{
-}
-
-OOXMLParserState::~OOXMLParserState()
-{
-}
-
-void OOXMLParserState::setLastParagraphInSection(bool bLastParagraphInSection)
-{
- mbLastParagraphInSection = bLastParagraphInSection;
-}
-
-
-void OOXMLParserState::setInSectionGroup(bool bInSectionGroup)
-{
- mbInSectionGroup = bInSectionGroup;
-}
-
-
-void OOXMLParserState::setInParagraphGroup(bool bInParagraphGroup)
-{
- mbInParagraphGroup = bInParagraphGroup;
-}
-
-
-void OOXMLParserState::setInCharacterGroup(bool bInCharacterGroup)
-{
- mbInCharacterGroup = bInCharacterGroup;
-}
-
-void OOXMLParserState::setForwardEvents(bool bForwardEvents)
-{
- mbForwardEvents = bForwardEvents;
-}
-
-
-std::string OOXMLParserState::getHandle() const
-{
- return std::to_string(mnHandle);
-}
-
-void OOXMLParserState::setHandle()
-{
- mnHandle = mnContexts;
-}
-
-void OOXMLParserState::setDocument(OOXMLDocumentImpl* pDocument)
-{
- mpDocument = pDocument;
-}
-
-
-void OOXMLParserState::setXNoteId(const sal_Int32 nId)
-{
- mpDocument->setXNoteId(nId);
-}
-
-sal_Int32 OOXMLParserState::getXNoteId() const
-{
- return mpDocument->getXNoteId();
-}
-
-const OUString & OOXMLParserState::getTarget() const
-{
- return mpDocument->getTarget();
-}
-
-void OOXMLParserState::resolveCharacterProperties(Stream & rStream)
-{
- if (mpCharacterProps)
- {
- rStream.props(mpCharacterProps.get());
- mpCharacterProps = new OOXMLPropertySet;
- }
-}
-
-void OOXMLParserState::setCharacterProperties(const OOXMLPropertySet::Pointer_t& pProps)
-{
- if (!mpCharacterProps)
- mpCharacterProps = pProps;
- else
- mpCharacterProps->add(pProps);
-}
-
-void OOXMLParserState::setCellProperties(const OOXMLPropertySet::Pointer_t& pProps)
-{
- if (!mCellProps.empty())
- {
- OOXMLPropertySet::Pointer_t & rCellProps = mCellProps.top();
-
- if (!rCellProps)
- rCellProps = pProps;
- else
- rCellProps->add(pProps);
- }
-}
-
-void OOXMLParserState::setRowProperties(const OOXMLPropertySet::Pointer_t& pProps)
-{
- if (!mRowProps.empty())
- {
- OOXMLPropertySet::Pointer_t & rRowProps = mRowProps.top();
-
- if (!rRowProps)
- rRowProps = pProps;
- else
- rRowProps->add(pProps);
- }
-}
-
-void OOXMLParserState::resolveCellProperties(Stream & rStream)
-{
- if (!mCellProps.empty())
- {
- OOXMLPropertySet::Pointer_t & rCellProps = mCellProps.top();
-
- if (rCellProps)
- {
- rStream.props(rCellProps.get());
- rCellProps = new OOXMLPropertySet;
- }
- }
-}
-
-void OOXMLParserState::resolveRowProperties(Stream & rStream)
-{
- if (!mRowProps.empty())
- {
- OOXMLPropertySet::Pointer_t & rRowProps = mRowProps.top();
-
- if (rRowProps)
- {
- rStream.props(rRowProps.get());
- rRowProps = new OOXMLPropertySet;
- }
- }
-}
-
-void OOXMLParserState::resolveTableProperties(Stream & rStream)
-{
- if (!mTableProps.empty())
- {
- OOXMLPropertySet::Pointer_t & rTableProps = mTableProps.top();
-
- if (rTableProps)
- {
- rStream.props(rTableProps.get());
- // Don't clean the table props to send them again for each row
- // This mimics the behaviour from RTF tokenizer.
- }
- }
-}
-
-void OOXMLParserState::setTableProperties(const OOXMLPropertySet::Pointer_t& pProps)
-{
- if (!mTableProps.empty())
- {
- OOXMLPropertySet::Pointer_t & rTableProps = mTableProps.top();
- if (!rTableProps)
- rTableProps = pProps;
- else
- rTableProps->add(pProps);
- }
-}
-
-// tdf#108714
-void OOXMLParserState::resolvePostponedBreak(Stream & rStream)
-{
- for (const auto & rBreak: mvPostponedBreaks)
- {
- OOXMLBreakHandler aBreakHandler(rStream);
- rBreak->resolve(aBreakHandler);
- }
- mvPostponedBreaks.clear();
-}
-
-void OOXMLParserState::setPostponedBreak(const OOXMLPropertySet::Pointer_t & pProps)
-{
- mvPostponedBreaks.push_back(pProps);
-}
-
-void OOXMLParserState::startTable()
-{
- OOXMLPropertySet::Pointer_t pCellProps;
- OOXMLPropertySet::Pointer_t pRowProps;
- OOXMLPropertySet::Pointer_t pTableProps;
-
- mCellProps.push(pCellProps);
- mRowProps.push(pRowProps);
- mTableProps.push(pTableProps);
-}
-
-void OOXMLParserState::endTable()
-{
- mCellProps.pop();
- mRowProps.pop();
- mTableProps.pop();
-}
-
-void OOXMLParserState::incContextCount()
-{
- mnContexts++;
-}
-
-void OOXMLParserState::startTxbxContent()
-{
- SAL_WARN_IF(inTxbxContent, "writerfilter", "Nested w:txbxContent");
-
- inTxbxContent = true;
- // Do not save and reset section group state, it'd cause a new page.
-// savedInSectionGroup = mbInSectionGroup;
- savedInParagraphGroup = mbInParagraphGroup;
- savedInCharacterGroup = mbInCharacterGroup;
- savedLastParagraphInSection = mbLastParagraphInSection;
-// mbInSectionGroup = false;
- mbInParagraphGroup = false;
- mbInCharacterGroup = false;
- mbLastParagraphInSection = false;
-}
-
-void OOXMLParserState::endTxbxContent()
-{
- if( !inTxbxContent )
- {
- SAL_WARN( "writerfilter", "Non-matching closing w:txbxContent" );
- return;
- }
-// mbInSectionGroup = savedInSectionGroup;
- mbInParagraphGroup = savedInParagraphGroup;
- mbInCharacterGroup = savedInCharacterGroup;
- mbLastParagraphInSection = savedLastParagraphInSection;
- inTxbxContent = false;
-}
-
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/ooxml/OOXMLParserState.hxx b/writerfilter/source/ooxml/OOXMLParserState.hxx
deleted file mode 100644
index 422ba0b776ef..000000000000
--- a/writerfilter/source/ooxml/OOXMLParserState.hxx
+++ /dev/null
@@ -1,120 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * 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 .
- */
-#ifndef INCLUDED_WRITERFILTER_SOURCE_OOXML_OOXMLPARSERSTATE_HXX
-#define INCLUDED_WRITERFILTER_SOURCE_OOXML_OOXMLPARSERSTATE_HXX
-
-#include <stack>
-#include "OOXMLDocumentImpl.hxx"
-#include "OOXMLPropertySet.hxx"
-
-namespace writerfilter::ooxml
-{
-/**
- * Struct to store our 'alternate state'. If multiple mc:AlternateContent
- * elements arrive, then while the inner ones are active, the original state is
- * saved away, and once they inner goes out of scope, the original state is
- * restored.
- */
-struct SavedAlternateState
-{
- bool m_bDiscardChildren;
- bool m_bTookChoice; ///< Did we take the Choice or want Fallback instead?
-};
-
-class OOXMLParserState final : public virtual SvRefBase
-{
- bool mbInSectionGroup;
- bool mbInParagraphGroup;
- bool mbInCharacterGroup;
- bool mbLastParagraphInSection;
- bool mbForwardEvents;
- unsigned int mnContexts;
- unsigned int mnHandle;
- OOXMLDocumentImpl* mpDocument;
- OOXMLPropertySet::Pointer_t mpCharacterProps;
- std::stack<OOXMLPropertySet::Pointer_t> mCellProps;
- std::stack<OOXMLPropertySet::Pointer_t> mRowProps;
- std::stack<OOXMLPropertySet::Pointer_t> mTableProps;
- bool inTxbxContent;
- // these 4 save when inTxbxContent
- bool savedInParagraphGroup;
- bool savedInCharacterGroup;
- bool savedLastParagraphInSection;
- std::vector<SavedAlternateState> maSavedAlternateStates;
- std::vector<OOXMLPropertySet::Pointer_t> mvPostponedBreaks;
-
-public:
- typedef tools::SvRef<OOXMLParserState> Pointer_t;
-
- OOXMLParserState();
- ~OOXMLParserState() override;
-
- bool isInSectionGroup() const { return mbInSectionGroup; }
- void setInSectionGroup(bool bInSectionGroup);
-
- void setLastParagraphInSection(bool bLastParagraphInSection);
- bool isLastParagraphInSection() const { return mbLastParagraphInSection; }
-
- std::vector<SavedAlternateState>& getSavedAlternateStates() { return maSavedAlternateStates; }
-
- bool isInParagraphGroup() const { return mbInParagraphGroup; }
- void setInParagraphGroup(bool bInParagraphGroup);
-
- bool isInCharacterGroup() const { return mbInCharacterGroup; }
- void setInCharacterGroup(bool bInCharacterGroup);
-
- void setForwardEvents(bool bForwardEvents);
- bool isForwardEvents() const { return mbForwardEvents; }
-
- std::string getHandle() const;
- void setHandle();
-
- void setDocument(OOXMLDocumentImpl* pDocument);
- OOXMLDocumentImpl* getDocument() const { return mpDocument; }
-
- void setXNoteId(const sal_Int32 rId);
- sal_Int32 getXNoteId() const;
-
- const OUString& getTarget() const;
-
- void resolveCharacterProperties(Stream& rStream);
- void setCharacterProperties(const OOXMLPropertySet::Pointer_t& pProps);
- void resolveCellProperties(Stream& rStream);
- void setCellProperties(const OOXMLPropertySet::Pointer_t& pProps);
- void resolveRowProperties(Stream& rStream);
- void setRowProperties(const OOXMLPropertySet::Pointer_t& pProps);
- void resolveTableProperties(Stream& rStream);
- void setTableProperties(const OOXMLPropertySet::Pointer_t& pProps);
- // tdf#108714
- void resolvePostponedBreak(Stream& rStream);
- void setPostponedBreak(const OOXMLPropertySet::Pointer_t& pProps);
-
- void startTable();
- void endTable();
-
- void incContextCount();
-
- void startTxbxContent();
- void endTxbxContent();
-};
-}
-
-#endif // INCLUDED_WRITERFILTER_SOURCE_OOXML_OOXMLPARSERSTATE_HXX
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/ooxml/OOXMLPropertySet.cxx b/writerfilter/source/ooxml/OOXMLPropertySet.cxx
deleted file mode 100644
index 1d1724c9c451..000000000000
--- a/writerfilter/source/ooxml/OOXMLPropertySet.cxx
+++ /dev/null
@@ -1,857 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * 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 .
- */
-
-#include "OOXMLPropertySet.hxx"
-#include <stdio.h>
-#include <iostream>
-#include <ooxml/QNameToString.hxx>
-#include <com/sun/star/drawing/XShape.hpp>
-#include <sax/tools/converter.hxx>
-#include <tools/color.hxx>
-
-namespace writerfilter::ooxml
-{
-using namespace ::std;
-using namespace com::sun::star;
-
-OOXMLProperty::OOXMLProperty(Id id, const OOXMLValue::Pointer_t& pValue,
- OOXMLProperty::Type_t eType)
- : mId(id), mpValue(pValue), meType(eType)
-{
-}
-
-OOXMLProperty::~OOXMLProperty()
-{
-}
-
-sal_uInt32 OOXMLProperty::getId() const
-{
- return mId;
-}
-
-Value::Pointer_t OOXMLProperty::getValue()
-{
- Value::Pointer_t pResult;
-
- if (mpValue)
- pResult = Value::Pointer_t(mpValue->clone());
- else
- pResult = Value::Pointer_t(new OOXMLValue());
-
- return pResult;
-}
-
-writerfilter::Reference<Properties>::Pointer_t OOXMLProperty::getProps()
-{
- writerfilter::Reference<Properties>::Pointer_t pResult;
-
- if (mpValue)
- pResult = mpValue->getProperties();
-
- return pResult;
-}
-
-#ifdef DBG_UTIL
-string OOXMLProperty::getName() const
-{
- string sResult(QNameToString(mId));
-
- if (sResult.length() == 0)
- sResult = fastTokenToId(mId);
-
- if (sResult.length() == 0)
- {
- static char sBuffer[256];
-
- snprintf(sBuffer, sizeof(sBuffer), "%" SAL_PRIxUINT32, mId);
- sResult = sBuffer;
- }
-
- return sResult;
-}
-#endif
-
-#ifdef DBG_UTIL
-string OOXMLProperty::toString() const
-{
- string sResult = "(";
-
- sResult += getName();
- sResult += ", ";
- if (mpValue)
- sResult += mpValue->toString();
- else
- sResult +="(null)";
- sResult +=")";
-
- return sResult;
-}
-#endif
-
-void OOXMLProperty::resolve(writerfilter::Properties & rProperties)
-{
- switch (meType)
- {
- case SPRM:
- if (mId != 0x0)
- rProperties.sprm(*this);
- break;
- case ATTRIBUTE:
- rProperties.attribute(mId, *getValue());
- break;
- }
-}
-
-/*
- class OOXMLValue
-*/
-
-OOXMLValue::OOXMLValue()
-{
-}
-
-OOXMLValue::~OOXMLValue()
-{
-}
-
-int OOXMLValue::getInt() const
-{
- return 0;
-}
-
-OUString OOXMLValue::getString() const
-{
- return OUString();
-}
-
-uno::Any OOXMLValue::getAny() const
-{
- return uno::Any();
-}
-
-writerfilter::Reference<Properties>::Pointer_t OOXMLValue::getProperties()
-{
- return writerfilter::Reference<Properties>::Pointer_t();
-}
-
-writerfilter::Reference<BinaryObj>::Pointer_t OOXMLValue::getBinary()
-{
- return writerfilter::Reference<BinaryObj>::Pointer_t();
-}
-
-#ifdef DBG_UTIL
-string OOXMLValue::toString() const
-{
- return "OOXMLValue";
-}
-#endif
-
-OOXMLValue * OOXMLValue::clone() const
-{
- return new OOXMLValue(*this);
-}
-
-/*
- class OOXMLBinaryValue
- */
-
-OOXMLBinaryValue::OOXMLBinaryValue(OOXMLBinaryObjectReference::Pointer_t const &
- pBinaryObj)
-: mpBinaryObj(pBinaryObj)
-{
-}
-
-OOXMLBinaryValue::~OOXMLBinaryValue()
-{
-}
-
-writerfilter::Reference<BinaryObj>::Pointer_t OOXMLBinaryValue::getBinary()
-{
- return mpBinaryObj;
-}
-
-#ifdef DBG_UTIL
-string OOXMLBinaryValue::toString() const
-{
- return "BinaryObj";
-}
-#endif
-
-OOXMLValue * OOXMLBinaryValue::clone() const
-{
- return new OOXMLBinaryValue(mpBinaryObj);
-}
-
-/*
- class OOXMLBooleanValue
-*/
-
-static bool GetBooleanValue(const char *pValue)
-{
- return !strcmp(pValue, "true")
- || !strcmp(pValue, "True")
- || !strcmp(pValue, "1")
- || !strcmp(pValue, "on")
- || !strcmp(pValue, "On");
-}
-
-OOXMLValue::Pointer_t const & OOXMLBooleanValue::Create(bool bValue)
-{
- static OOXMLValue::Pointer_t False(new OOXMLBooleanValue (false));
- static OOXMLValue::Pointer_t True(new OOXMLBooleanValue (true));
-
- return bValue ? True : False;
-}
-
-OOXMLValue::Pointer_t const & OOXMLBooleanValue::Create(const char *pValue)
-{
- return Create (GetBooleanValue(pValue));
-}
-
-OOXMLBooleanValue::OOXMLBooleanValue(bool bValue)
-: mbValue(bValue)
-{
-}
-
-OOXMLBooleanValue::~OOXMLBooleanValue()
-{
-}
-
-int OOXMLBooleanValue::getInt() const
-{
- return mbValue ? 1 : 0;
-}
-
-uno::Any OOXMLBooleanValue::getAny() const
-{
- return uno::Any(mbValue);
-}
-
-#ifdef DBG_UTIL
-string OOXMLBooleanValue::toString() const
-{
- return mbValue ? "true" : "false";
-}
-#endif
-
-OOXMLValue * OOXMLBooleanValue::clone() const
-{
- return new OOXMLBooleanValue(*this);
-}
-
-/*
- class OOXMLStringValue
-*/
-
-OOXMLStringValue::OOXMLStringValue(const OUString & rStr)
-: mStr(rStr)
-{
-}
-
-OOXMLStringValue::~OOXMLStringValue()
-{
-}
-
-uno::Any OOXMLStringValue::getAny() const
-{
- return uno::Any(mStr);
-}
-
-OUString OOXMLStringValue::getString() const
-{
- return mStr;
-}
-
-#ifdef DBG_UTIL
-string OOXMLStringValue::toString() const
-{
- return OUStringToOString(mStr, RTL_TEXTENCODING_ASCII_US).getStr();
-}
-#endif
-
-OOXMLValue * OOXMLStringValue::clone() const
-{
- return new OOXMLStringValue(*this);
-}
-
-/*
- class OOXMLInputStreamValue
- */
-OOXMLInputStreamValue::OOXMLInputStreamValue(uno::Reference<io::XInputStream> const & xInputStream)
-: mxInputStream(xInputStream)
-{
-}
-
-OOXMLInputStreamValue::~OOXMLInputStreamValue()
-{
-}
-
-uno::Any OOXMLInputStreamValue::getAny() const
-{
- return uno::Any(mxInputStream);
-}
-
-#ifdef DBG_UTIL
-string OOXMLInputStreamValue::toString() const
-{
- return "InputStream";
-}
-#endif
-
-OOXMLValue * OOXMLInputStreamValue::clone() const
-{
- return new OOXMLInputStreamValue(mxInputStream);
-}
-
-/**
- class OOXMLPropertySet
-*/
-
-OOXMLPropertySet::OOXMLPropertySet()
-{
-}
-
-OOXMLPropertySet::~OOXMLPropertySet()
-{
-}
-
-void OOXMLPropertySet::resolve(Properties & rHandler)
-{
- // The pProp->resolve(rHandler) call below can cause elements to
- // be appended to mProperties. I don't think it can cause elements
- // to be deleted. But let's check with < here just to be safe that
- // the indexing below works.
- for (size_t nIt = 0; nIt < mProperties.size(); ++nIt)
- {
- OOXMLProperty::Pointer_t pProp = mProperties[nIt];
-
- if (pProp)
- pProp->resolve(rHandler);
- }
-}
-
-OOXMLPropertySet::OOXMLProperties_t::iterator OOXMLPropertySet::begin()
-{
- return mProperties.begin();
-}
-
-OOXMLPropertySet::OOXMLProperties_t::iterator OOXMLPropertySet::end()
-{
- return mProperties.end();
-}
-
-OOXMLPropertySet::OOXMLProperties_t::const_iterator
-OOXMLPropertySet::begin() const
-{
- return mProperties.begin();
-}
-
-OOXMLPropertySet::OOXMLProperties_t::const_iterator
-OOXMLPropertySet::end() const
-{
- return mProperties.end();
-}
-
-void OOXMLPropertySet::add(const OOXMLProperty::Pointer_t& pProperty)
-{
- if (pProperty && pProperty->getId() != 0x0)
- {
- mProperties.push_back(pProperty);
- }
-}
-
-void OOXMLPropertySet::add(Id id, const OOXMLValue::Pointer_t& pValue, OOXMLProperty::Type_t eType)
-{
- OOXMLProperty::Pointer_t pProperty(new OOXMLProperty(id, pValue, eType));
- add(pProperty);
-}
-
-void OOXMLPropertySet::add(const OOXMLPropertySet::Pointer_t& pPropertySet)
-{
- const OOXMLPropertySet * pSet = pPropertySet.get();
-
- if (pSet != nullptr)
- {
- mProperties.insert( mProperties.end(), pSet->mProperties.begin(), pSet->mProperties.end() );
- }
-}
-
-OOXMLPropertySet * OOXMLPropertySet::clone() const
-{
- return new OOXMLPropertySet(*this);
-}
-
-#ifdef DBG_UTIL
-string OOXMLPropertySet::toString()
-{
- string sResult = "[";
- char sBuffer[256];
- snprintf(sBuffer, sizeof(sBuffer), "%p", this);
- sResult += sBuffer;
- sResult += ":";
-
- OOXMLProperties_t::iterator aItBegin = begin();
- OOXMLProperties_t::iterator aItEnd = end();
-
- for (OOXMLProperties_t::iterator aIt = aItBegin; aIt != aItEnd; ++aIt)
- {
- if (aIt != aItBegin)
- sResult += ", ";
-
- if (*aIt)
- sResult += (*aIt)->toString();
- else
- sResult += "0x0";
- }
-
- sResult += "]";
-
- return sResult;
-}
-#endif
-
-/*
- class OOXMLPropertySetValue
-*/
-
-OOXMLPropertySetValue::OOXMLPropertySetValue(const OOXMLPropertySet::Pointer_t& pPropertySet)
- : mpPropertySet(pPropertySet)
-{
-}
-
-OOXMLPropertySetValue::~OOXMLPropertySetValue()
-{
-}
-
-writerfilter::Reference<Properties>::Pointer_t OOXMLPropertySetValue::getProperties()
-{
- return writerfilter::Reference<Properties>::Pointer_t
- (mpPropertySet->clone());
-}
-
-#ifdef DBG_UTIL
-string OOXMLPropertySetValue::toString() const
-{
- char sBuffer[256];
-
- snprintf(sBuffer, sizeof(sBuffer), "t:%p, m:%p", this, mpPropertySet.get());
-
- return "OOXMLPropertySetValue(" + string(sBuffer) + ")";
-}
-#endif
-
-OOXMLValue * OOXMLPropertySetValue::clone() const
-{
- return new OOXMLPropertySetValue(*this);
-}
-
-/*
- class OOXMLIntegerValue
-*/
-
-OOXMLValue::Pointer_t OOXMLIntegerValue::Create(sal_Int32 nValue)
-{
- static OOXMLValue::Pointer_t Zero(new OOXMLIntegerValue (0));
- static OOXMLValue::Pointer_t One(new OOXMLIntegerValue (1));
- static OOXMLValue::Pointer_t Two(new OOXMLIntegerValue (2));
- static OOXMLValue::Pointer_t Three(new OOXMLIntegerValue (3));
- static OOXMLValue::Pointer_t Four(new OOXMLIntegerValue (4));
- static OOXMLValue::Pointer_t Five(new OOXMLIntegerValue (5));
- static OOXMLValue::Pointer_t Six(new OOXMLIntegerValue (6));
- static OOXMLValue::Pointer_t Seven(new OOXMLIntegerValue (7));
- static OOXMLValue::Pointer_t Eight(new OOXMLIntegerValue (8));
- static OOXMLValue::Pointer_t Nine(new OOXMLIntegerValue (9));
-
- switch (nValue) {
- case 0: return Zero;
- case 1: return One;
- case 2: return Two;
- case 3: return Three;
- case 4: return Four;
- case 5: return Five;
- case 6: return Six;
- case 7: return Seven;
- case 8: return Eight;
- case 9: return Nine;
- default: break;
- }
-
- OOXMLValue::Pointer_t value(new OOXMLIntegerValue(nValue));
-
- return value;
-}
-
-OOXMLIntegerValue::OOXMLIntegerValue(sal_Int32 nValue)
-: mnValue(nValue)
-{
-}
-
-OOXMLIntegerValue::~OOXMLIntegerValue()
-{
-}
-
-int OOXMLIntegerValue::getInt() const
-{
- return mnValue;
-}
-
-uno::Any OOXMLIntegerValue::getAny() const
-{
- return uno::Any(mnValue);
-}
-
-OOXMLValue * OOXMLIntegerValue::clone() const
-{
- return new OOXMLIntegerValue(*this);
-}
-
-#ifdef DBG_UTIL
-string OOXMLIntegerValue::toString() const
-{
- char buffer[256];
- snprintf(buffer, sizeof(buffer), "%" SAL_PRIdINT32, mnValue);
-
- return buffer;
-}
-#endif
-
-/*
- class OOXMLHexValue
-*/
-
-OOXMLHexValue::OOXMLHexValue(sal_uInt32 nValue)
-: mnValue(nValue)
-{
-}
-
-OOXMLHexValue::OOXMLHexValue(const char * pValue)
-: mnValue(rtl_str_toUInt32(pValue, 16))
-{
-}
-
-OOXMLHexValue::~OOXMLHexValue()
-{
-}
-
-int OOXMLHexValue::getInt() const
-{
- return mnValue;
-}
-
-OOXMLValue * OOXMLHexValue::clone() const
-{
- return new OOXMLHexValue(*this);
-}
-
-#ifdef DBG_UTIL
-string OOXMLHexValue::toString() const
-{
- char buffer[256];
- snprintf(buffer, sizeof(buffer), "0x%" SAL_PRIxUINT32, mnValue);
-
- return buffer;
-}
-#endif
-
-/*
- class OOXMLHexColorValue
-*/
-OOXMLHexColorValue::OOXMLHexColorValue(const char * pValue)
- : OOXMLHexValue(sal_uInt32(COL_AUTO))
-{
- if (!strcmp(pValue, "auto"))
- return;
-
- mnValue = rtl_str_toUInt32(pValue, 16);
-
- // Convert hash-encoded values (like #FF0080)
- const sal_Int32 nLen = strlen(pValue);
- if ( !mnValue && nLen > 1 && pValue[0] == '#' )
- {
- sal_Int32 nColor(COL_AUTO);
- // Word appears to require strict 6 digit length, else it ignores it
- if ( nLen == 7 )
- {
- const OUString sHashColor(pValue, nLen, RTL_TEXTENCODING_ASCII_US);
- sax::Converter::convertColor( nColor, sHashColor );
- }
- mnValue = nColor;
- }
-}
-
-// OOXMLUniversalMeasureValue
-// ECMA-376 5th ed. Part 1 , 22.9.2.15
-OOXMLUniversalMeasureValue::OOXMLUniversalMeasureValue(const char * pValue, sal_uInt32 npPt)
-{
- double val = rtl_str_toDouble(pValue); // will ignore the trailing unit
-
- int nLen = strlen(pValue);
- if (nLen > 2 &&
- pValue[nLen-2] == 'p' &&
- pValue[nLen-1] == 't')
- {
- mnValue = static_cast<int>(val * npPt);
- }
- else if (nLen > 2 &&
- pValue[nLen - 2] == 'c' &&
- pValue[nLen - 1] == 'm')
- {
- mnValue = static_cast<int>(val * npPt * 72 / 2.54);
- }
- else if (nLen > 2 &&
- pValue[nLen - 2] == 'm' &&
- pValue[nLen - 1] == 'm')
- {
- mnValue = static_cast<int>(val * npPt * 72 / 25.4);
- }
- else if (nLen > 2 &&
- pValue[nLen - 2] == 'i' &&
- pValue[nLen - 1] == 'n')
- {
- mnValue = static_cast<int>(val * npPt * 72);
- }
- else if (nLen > 2 &&
- pValue[nLen - 2] == 'p' &&
- ( pValue[nLen - 1] == 'c' || pValue[nLen - 1] == 'i' ))
- {
- mnValue = static_cast<int>(val * npPt * 12);
- }
- else
- {
- mnValue = static_cast<int>(val);
- }
-}
-
-OOXMLUniversalMeasureValue::~OOXMLUniversalMeasureValue()
-{
-}
-
-int OOXMLUniversalMeasureValue::getInt() const
-{
- return mnValue;
-}
-
-#ifdef DBG_UTIL
-string OOXMLUniversalMeasureValue::toString() const
-{
- return OString::number(mnValue).getStr();
-}
-#endif
-
-// OOXMLMeasurementOrPercentValue
-// ECMA-376 5th ed. Part 1 , 17.18.107; 17.18.11
-OOXMLMeasurementOrPercentValue::OOXMLMeasurementOrPercentValue(const char * pValue)
-{
- double val = rtl_str_toDouble(pValue); // will ignore the trailing unit
-
- int nLen = strlen(pValue);
- if (nLen > 1 &&
- pValue[nLen - 1] == '%')
- {
- mnValue = static_cast<int>(val * 50);
- }
- else
- {
- mnValue = OOXMLTwipsMeasureValue(pValue).getInt();
- }
-}
-
-int OOXMLMeasurementOrPercentValue::getInt() const
-{
- return mnValue;
-}
-
-#ifdef DBG_UTIL
-string OOXMLMeasurementOrPercentValue::toString() const
-{
- return OString::number(mnValue).getStr();
-}
-#endif
-
-/*
- class OOXMLShapeValue
- */
-
-
-OOXMLShapeValue::OOXMLShapeValue(uno::Reference<drawing::XShape> const & rShape)
-: mrShape(rShape)
-{
-}
-
-OOXMLShapeValue::~OOXMLShapeValue()
-{
-}
-
-uno::Any OOXMLShapeValue::getAny() const
-{
- return uno::Any(mrShape);
-}
-
-#ifdef DBG_UTIL
-string OOXMLShapeValue::toString() const
-{
- return "Shape";
-}
-#endif
-
-OOXMLValue * OOXMLShapeValue::clone() const
-{
- return new OOXMLShapeValue(mrShape);
-}
-
-/*
- class OOXMLStarMathValue
- */
-
-
-OOXMLStarMathValue::OOXMLStarMathValue( uno::Reference< embed::XEmbeddedObject > const & c )
-: component(c)
-{
-}
-
-OOXMLStarMathValue::~OOXMLStarMathValue()
-{
-}
-
-uno::Any OOXMLStarMathValue::getAny() const
-{
- return uno::Any(component);
-}
-
-#ifdef DBG_UTIL
-string OOXMLStarMathValue::toString() const
-{
- return "StarMath";
-}
-#endif
-
-OOXMLValue * OOXMLStarMathValue::clone() const
-{
- return new OOXMLStarMathValue( component );
-}
-
-/*
- class OOXMLTableImpl
- */
-
-OOXMLTable::OOXMLTable()
-{
-}
-
-OOXMLTable::~OOXMLTable()
-{
-}
-
-
-void OOXMLTable::resolve(Table & rTable)
-{
- Table * pTable = &rTable;
-
- int nPos = 0;
-
- for (const auto& rPropSet : mPropertySets)
- {
- writerfilter::Reference<Properties>::Pointer_t pProperties
- (rPropSet->getProperties());
-
- if (pProperties)
- pTable->entry(nPos, pProperties);
-
- ++nPos;
- }
-}
-
-void OOXMLTable::add(const ValuePointer_t& pPropertySet)
-{
- if (pPropertySet)
- mPropertySets.push_back(pPropertySet);
-}
-
-OOXMLTable * OOXMLTable::clone() const
-{
- return new OOXMLTable(*this);
-}
-
-/*
- class: OOXMLPropertySetEntryToString
-*/
-
-OOXMLPropertySetEntryToString::OOXMLPropertySetEntryToString(Id nId)
-: mnId(nId)
-{
-}
-
-OOXMLPropertySetEntryToString::~OOXMLPropertySetEntryToString()
-{
-}
-
-void OOXMLPropertySetEntryToString::sprm(Sprm & /*rSprm*/)
-{
-}
-
-void OOXMLPropertySetEntryToString::attribute(Id nId, Value & rValue)
-{
- if (nId == mnId)
- mStr = rValue.getString();
-}
-
-/*
- class: OOXMLPropertySetEntryToInteger
-*/
-
-OOXMLPropertySetEntryToInteger::OOXMLPropertySetEntryToInteger(Id nId)
-: mnId(nId), mnValue(0)
-{
-}
-
-OOXMLPropertySetEntryToInteger::~OOXMLPropertySetEntryToInteger()
-{
-}
-
-void OOXMLPropertySetEntryToInteger::sprm(Sprm & /*rSprm*/)
-{
-}
-
-void OOXMLPropertySetEntryToInteger::attribute(Id nId, Value & rValue)
-{
- if (nId == mnId)
- mnValue = rValue.getInt();
-}
-
-/*
- class: OOXMLPropertySetEntryToBool
-*/
-
-OOXMLPropertySetEntryToBool::OOXMLPropertySetEntryToBool(Id nId)
- : mnId(nId), mValue(false)
-{}
-
-OOXMLPropertySetEntryToBool::~OOXMLPropertySetEntryToBool() {}
-
-void OOXMLPropertySetEntryToBool::sprm(Sprm & /*rSprm*/) {}
-
-void OOXMLPropertySetEntryToBool::attribute(Id nId, Value & rValue)
-{
- if (nId == mnId)
- mValue = (rValue.getInt() != 0);
-}
-
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/ooxml/OOXMLPropertySet.hxx b/writerfilter/source/ooxml/OOXMLPropertySet.hxx
deleted file mode 100644
index 2df6fee85d9a..000000000000
--- a/writerfilter/source/ooxml/OOXMLPropertySet.hxx
+++ /dev/null
@@ -1,416 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * 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 .
- */
-#ifndef INCLUDED_WRITERFILTER_SOURCE_OOXML_OOXMLPROPERTYSET_HXX
-#define INCLUDED_WRITERFILTER_SOURCE_OOXML_OOXMLPROPERTYSET_HXX
-
-#include <vector>
-#include "OOXMLBinaryObjectReference.hxx"
-#include <com/sun/star/embed/XEmbeddedObject.hpp>
-#include <dmapper/resourcemodel.hxx>
-
-namespace writerfilter::ooxml
-{
-class OOXMLValue : public Value
-{
-public:
- typedef tools::SvRef<OOXMLValue> Pointer_t;
- OOXMLValue();
- virtual ~OOXMLValue() override;
-
- OOXMLValue(OOXMLValue const&) = default;
- OOXMLValue(OOXMLValue&&) = default;
- OOXMLValue& operator=(OOXMLValue const&) = default;
- OOXMLValue& operator=(OOXMLValue&&) = default;
-
- virtual int getInt() const override;
- ;
- virtual OUString getString() const override;
- virtual css::uno::Any getAny() const override;
- virtual writerfilter::Reference<Properties>::Pointer_t getProperties() override;
- virtual writerfilter::Reference<BinaryObj>::Pointer_t getBinary() override;
-#ifdef DBG_UTIL
- virtual std::string toString() const override;
-#endif
- virtual OOXMLValue* clone() const;
-};
-
-class OOXMLProperty : public Sprm
-{
-public:
- typedef tools::SvRef<OOXMLProperty> Pointer_t;
- enum Type_t
- {
- SPRM,
- ATTRIBUTE
- };
-
-private:
- Id mId;
- mutable OOXMLValue::Pointer_t mpValue;
- Type_t meType;
-
-public:
- OOXMLProperty(Id id, const OOXMLValue::Pointer_t& pValue, Type_t eType);
- OOXMLProperty(const OOXMLProperty& rSprm) = delete;
- virtual ~OOXMLProperty() override;
-
- sal_uInt32 getId() const override;
- Value::Pointer_t getValue() override;
- writerfilter::Reference<Properties>::Pointer_t getProps() override;
-#ifdef DBG_UTIL
- std::string getName() const override;
- std::string toString() const override;
-#endif
- void resolve(Properties& rProperties);
-};
-
-class OOXMLBinaryValue : public OOXMLValue
-{
- mutable OOXMLBinaryObjectReference::Pointer_t mpBinaryObj;
-
-public:
- explicit OOXMLBinaryValue(OOXMLBinaryObjectReference::Pointer_t const& pBinaryObj);
- virtual ~OOXMLBinaryValue() override;
-
- virtual writerfilter::Reference<BinaryObj>::Pointer_t getBinary() override;
-#ifdef DBG_UTIL
- virtual std::string toString() const override;
-#endif
- virtual OOXMLValue* clone() const override;
-};
-
-class OOXMLBooleanValue : public OOXMLValue
-{
- bool mbValue;
- explicit OOXMLBooleanValue(bool bValue);
-
-public:
- static OOXMLValue::Pointer_t const& Create(bool bValue);
- static OOXMLValue::Pointer_t const& Create(const char* pValue);
-
- virtual ~OOXMLBooleanValue() override;
-
- OOXMLBooleanValue(OOXMLBooleanValue const&) = default;
- OOXMLBooleanValue(OOXMLBooleanValue&&) = default;
- OOXMLBooleanValue& operator=(OOXMLBooleanValue const&) = delete; // due to const mbValue
- OOXMLBooleanValue& operator=(OOXMLBooleanValue&&) = delete; // due to const mbValue
-
- virtual int getInt() const override;
- virtual css::uno::Any getAny() const override;
-#ifdef DBG_UTIL
- virtual std::string toString() const override;
-#endif
- virtual OOXMLValue* clone() const override;
-};
-
-class OOXMLStringValue : public OOXMLValue
-{
- OUString mStr;
-
-public:
- explicit OOXMLStringValue(const OUString& rStr);
- virtual ~OOXMLStringValue() override;
-
- OOXMLStringValue(OOXMLStringValue const&) = default;
- OOXMLStringValue(OOXMLStringValue&&) = default;
- OOXMLStringValue& operator=(OOXMLStringValue const&) = delete; // due to const mStr
- OOXMLStringValue& operator=(OOXMLStringValue&&) = delete; // due to const mStr
-
- virtual css::uno::Any getAny() const override;
- virtual OUString getString() const override;
-#ifdef DBG_UTIL
- virtual std::string toString() const override;
-#endif
- virtual OOXMLValue* clone() const override;
-};
-
-class OOXMLInputStreamValue : public OOXMLValue
-{
- css::uno::Reference<css::io::XInputStream> mxInputStream;
-
-public:
- explicit OOXMLInputStreamValue(css::uno::Reference<css::io::XInputStream> const& xInputStream);
- virtual ~OOXMLInputStreamValue() override;
-
- virtual css::uno::Any getAny() const override;
-#ifdef DBG_UTIL
- virtual std::string toString() const override;
-#endif
- virtual OOXMLValue* clone() const override;
-};
-
-class OOXMLPropertySet : public writerfilter::Reference<Properties>
-{
-public:
- typedef std::vector<OOXMLProperty::Pointer_t> OOXMLProperties_t;
- typedef tools::SvRef<OOXMLPropertySet> Pointer_t;
-
-private:
- OOXMLProperties_t mProperties;
- void add(const OOXMLProperty::Pointer_t& pProperty);
-
-public:
- OOXMLPropertySet();
- virtual ~OOXMLPropertySet() override;
-
- OOXMLPropertySet(OOXMLPropertySet const&) = default;
- OOXMLPropertySet(OOXMLPropertySet&&) = default;
- OOXMLPropertySet& operator=(OOXMLPropertySet const&) = default;
- OOXMLPropertySet& operator=(OOXMLPropertySet&&) = default;
-
- void resolve(Properties& rHandler) override;
- void add(Id id, const OOXMLValue::Pointer_t& pValue, OOXMLProperty::Type_t eType);
- void add(const OOXMLPropertySet::Pointer_t& pPropertySet);
- OOXMLPropertySet* clone() const;
-
- OOXMLProperties_t::iterator begin();
- OOXMLProperties_t::iterator end();
- OOXMLProperties_t::const_iterator begin() const;
- OOXMLProperties_t::const_iterator end() const;
-
-#ifdef DBG_UTIL
- std::string toString();
-#endif
-};
-
-class OOXMLValue;
-
-class OOXMLTable : public writerfilter::Reference<Table>
-{
-public:
- typedef tools::SvRef<OOXMLValue> ValuePointer_t;
- OOXMLTable();
- virtual ~OOXMLTable() override;
-
- OOXMLTable(OOXMLTable const&) = default;
- OOXMLTable(OOXMLTable&&) = default;
- OOXMLTable& operator=(OOXMLTable const&) = default;
- OOXMLTable& operator=(OOXMLTable&&) = default;
-
- void resolve(Table& rTable) override;
- void add(const ValuePointer_t& pPropertySet);
- OOXMLTable* clone() const;
-
-private:
- typedef std::vector<ValuePointer_t> PropertySets_t;
- PropertySets_t mPropertySets;
-};
-
-class OOXMLPropertySetValue : public OOXMLValue
-{
- OOXMLPropertySet::Pointer_t mpPropertySet;
-
-public:
- explicit OOXMLPropertySetValue(const OOXMLPropertySet::Pointer_t& pPropertySet);
- virtual ~OOXMLPropertySetValue() override;
-
- OOXMLPropertySetValue(OOXMLPropertySetValue const&) = default;
- OOXMLPropertySetValue(OOXMLPropertySetValue&&) = default;
- OOXMLPropertySetValue& operator=(OOXMLPropertySetValue const&)
- = delete; // due to const mpPropertySet
- OOXMLPropertySetValue& operator=(OOXMLPropertySetValue&&)
- = delete; // due to const mpPropertySet
-
- virtual writerfilter::Reference<Properties>::Pointer_t getProperties() override;
-#ifdef DBG_UTIL
- virtual std::string toString() const override;
-#endif
- virtual OOXMLValue* clone() const override;
-};
-
-class OOXMLIntegerValue : public OOXMLValue
-{
- sal_Int32 mnValue;
- explicit OOXMLIntegerValue(sal_Int32 nValue);
-
-public:
- static OOXMLValue::Pointer_t Create(sal_Int32 nValue);
- virtual ~OOXMLIntegerValue() override;
-
- OOXMLIntegerValue(OOXMLIntegerValue const&) = default;
- OOXMLIntegerValue(OOXMLIntegerValue&&) = default;
- OOXMLIntegerValue& operator=(OOXMLIntegerValue const&) = delete; // due to const mnValue
- OOXMLIntegerValue& operator=(OOXMLIntegerValue&&) = delete; // due to const mnValue
-
- virtual int getInt() const override;
- virtual css::uno::Any getAny() const override;
-#ifdef DBG_UTIL
- virtual std::string toString() const override;
-#endif
- virtual OOXMLValue* clone() const override;
-};
-
-class OOXMLHexValue : public OOXMLValue
-{
-protected:
- sal_uInt32 mnValue;
-
-public:
- explicit OOXMLHexValue(sal_uInt32 nValue);
- explicit OOXMLHexValue(const char* pValue);
- virtual ~OOXMLHexValue() override;
-
- OOXMLHexValue(OOXMLHexValue const&) = default;
- OOXMLHexValue(OOXMLHexValue&&) = default;
- OOXMLHexValue& operator=(OOXMLHexValue const&) = default;
- OOXMLHexValue& operator=(OOXMLHexValue&&) = default;
-
- virtual int getInt() const override;
-#ifdef DBG_UTIL
- virtual std::string toString() const override;
-#endif
- virtual OOXMLValue* clone() const override;
-};
-
-class OOXMLHexColorValue : public OOXMLHexValue
-{
-public:
- explicit OOXMLHexColorValue(const char* pValue);
-};
-
-class OOXMLUniversalMeasureValue : public OOXMLValue
-{
-private:
- int mnValue;
-
-public:
- OOXMLUniversalMeasureValue(const char* pValue, sal_uInt32 npPt);
- virtual ~OOXMLUniversalMeasureValue() override;
-
- OOXMLUniversalMeasureValue(OOXMLUniversalMeasureValue const&) = default;
- OOXMLUniversalMeasureValue(OOXMLUniversalMeasureValue&&) = default;
- OOXMLUniversalMeasureValue& operator=(OOXMLUniversalMeasureValue const&) = default;
- OOXMLUniversalMeasureValue& operator=(OOXMLUniversalMeasureValue&&) = default;
-
- virtual int getInt() const override;
-#ifdef DBG_UTIL
- virtual std::string toString() const override;
-#endif
-};
-
-/// npPt is quotient defining how much units are in 1 pt
-template <sal_uInt32 npPt> class OOXMLNthPtMeasureValue : public OOXMLUniversalMeasureValue
-{
-public:
- explicit OOXMLNthPtMeasureValue(const char* pValue)
- : OOXMLUniversalMeasureValue(pValue, npPt)
- {
- }
- virtual OOXMLValue* clone() const override { return new OOXMLNthPtMeasureValue<npPt>(*this); }
-};
-
-/// Handles OOXML's ST_TwipsMeasure value.
-typedef OOXMLNthPtMeasureValue<20> OOXMLTwipsMeasureValue;
-
-/// Handles OOXML's ST_HpsMeasure value.
-typedef OOXMLNthPtMeasureValue<2> OOXMLHpsMeasureValue;
-
-class OOXMLMeasurementOrPercentValue : public OOXMLValue
-{
- int mnValue;
-
-public:
- explicit OOXMLMeasurementOrPercentValue(const char* pValue);
-
- virtual int getInt() const override;
- virtual OOXMLValue* clone() const override { return new OOXMLMeasurementOrPercentValue(*this); }
-#ifdef DBG_UTIL
- virtual std::string toString() const override;
-#endif
-};
-
-class OOXMLShapeValue : public OOXMLValue
-{
- css::uno::Reference<css::drawing::XShape> mrShape;
-
-public:
- explicit OOXMLShapeValue(css::uno::Reference<css::drawing::XShape> const& rShape);
- virtual ~OOXMLShapeValue() override;
-
- virtual css::uno::Any getAny() const override;
-#ifdef DBG_UTIL
- virtual std::string toString() const override;
-#endif
- virtual OOXMLValue* clone() const override;
-};
-
-class OOXMLStarMathValue : public OOXMLValue
-{
- css::uno::Reference<css::embed::XEmbeddedObject> component;
-
-public:
- explicit OOXMLStarMathValue(css::uno::Reference<css::embed::XEmbeddedObject> const& component);
- virtual ~OOXMLStarMathValue() override;
-
- virtual css::uno::Any getAny() const override;
-#ifdef DBG_UTIL
- virtual std::string toString() const override;
-#endif
- virtual OOXMLValue* clone() const override;
-};
-
-class OOXMLPropertySetEntryToString : public Properties
-{
- Id mnId;
- OUString mStr;
-
-public:
- explicit OOXMLPropertySetEntryToString(Id nId);
- virtual ~OOXMLPropertySetEntryToString() override;
-
- virtual void sprm(Sprm& rSprm) override;
- virtual void attribute(Id nId, Value& rValue) override;
-
- const OUString& getString() const { return mStr; }
-};
-
-class OOXMLPropertySetEntryToInteger : public Properties
-{
- Id mnId;
- int mnValue;
-
-public:
- explicit OOXMLPropertySetEntryToInteger(Id nId);
- virtual ~OOXMLPropertySetEntryToInteger() override;
-
- virtual void sprm(Sprm& rSprm) override;
- virtual void attribute(Id nId, Value& rValue) override;
-
- int getValue() const { return mnValue; }
-};
-
-class OOXMLPropertySetEntryToBool : public Properties
-{
- Id mnId;
- bool mValue;
-
-public:
- explicit OOXMLPropertySetEntryToBool(Id nId);
- virtual ~OOXMLPropertySetEntryToBool() override;
-
- virtual void sprm(Sprm& rSprm) override;
- virtual void attribute(Id nId, Value& rValue) override;
-
- bool getValue() const { return mValue; }
-};
-}
-
-#endif // INCLUDED_WRITERFILTER_SOURCE_OOXML_OOXMLPROPERTYSET_HXX
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/ooxml/OOXMLStreamImpl.cxx b/writerfilter/source/ooxml/OOXMLStreamImpl.cxx
deleted file mode 100644
index 7d48f1c08fce..000000000000
--- a/writerfilter/source/ooxml/OOXMLStreamImpl.cxx
+++ /dev/null
@@ -1,443 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * 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 .
- */
-
-#include "OOXMLStreamImpl.hxx"
-#include <oox/core/fasttokenhandler.hxx>
-
-#include <com/sun/star/embed/XHierarchicalStorageAccess.hpp>
-#include <com/sun/star/uri/UriReferenceFactory.hpp>
-#include <comphelper/storagehelper.hxx>
-
-namespace writerfilter::ooxml
-{
-
-using namespace com::sun::star;
-
-OOXMLStreamImpl::OOXMLStreamImpl
-(uno::Reference<uno::XComponentContext> const & xContext,
- uno::Reference<io::XInputStream> const & xStorageStream,
- StreamType_t nType, bool bRepairStorage)
-: mxContext(xContext), mxStorageStream(xStorageStream), mnStreamType(nType)
-{
- mxStorage.set
- (comphelper::OStorageHelper::GetStorageOfFormatFromInputStream
- (OFOPXML_STORAGE_FORMAT_STRING, mxStorageStream, xContext, bRepairStorage));
- mxRelationshipAccess.set(mxStorage, uno::UNO_QUERY_THROW);
-
- init();
-}
-
-OOXMLStreamImpl::OOXMLStreamImpl
-(OOXMLStreamImpl const & rOOXMLStream, StreamType_t nStreamType)
-: mxContext(rOOXMLStream.mxContext),
- mxStorageStream(rOOXMLStream.mxStorageStream),
- mxStorage(rOOXMLStream.mxStorage),
- mnStreamType(nStreamType),
- msPath(rOOXMLStream.msPath)
-{
- mxRelationshipAccess.set(rOOXMLStream.mxDocumentStream, uno::UNO_QUERY_THROW);
-
- init();
-}
-
-OOXMLStreamImpl::OOXMLStreamImpl
-(OOXMLStreamImpl const & rOOXMLStream, const OUString & rId)
-: mxContext(rOOXMLStream.mxContext),
- mxStorageStream(rOOXMLStream.mxStorageStream),
- mxStorage(rOOXMLStream.mxStorage),
- mnStreamType(UNKNOWN),
- msId(rId),
- msPath(rOOXMLStream.msPath)
-{
- mxRelationshipAccess.set(rOOXMLStream.mxDocumentStream, uno::UNO_QUERY_THROW);
-
- init();
-}
-
-OOXMLStreamImpl::~OOXMLStreamImpl()
-{
-}
-
-const OUString & OOXMLStreamImpl::getTarget() const
-{
- return msTarget;
-}
-
-bool OOXMLStreamImpl::lcl_getTarget(const uno::Reference<embed::XRelationshipAccess>&
- xRelationshipAccess,
- StreamType_t nStreamType,
- const OUString & rId,
- OUString & rDocumentTarget)
-{
- static const char sId[] = "Id";
- static const char sTarget[] = "Target";
- static const char sTargetMode[] = "TargetMode";
- static const char sExternal[] = "External";
- if (maIdCache.empty())
- {
- // Cache is empty? Then let's build it!
- const uno::Sequence< uno::Sequence<beans::StringPair> >aSeqs = xRelationshipAccess->getAllRelationships();
- for (const uno::Sequence<beans::StringPair>& rSeq : aSeqs)
- {
- OUString aId;
- OUString aTarget;
- bool bExternal = false;
- for (const beans::StringPair& rPair : rSeq)
- {
- if (rPair.First == sId)
- aId = rPair.Second;
- else if (rPair.First == sTarget)
- aTarget = rPair.Second;
- else if (rPair.First == sTargetMode && rPair.Second == sExternal)
- bExternal = true;
- }
- // Only cache external targets, internal ones are more complex (see below)
- if (bExternal || aTarget.startsWith("#"))
- maIdCache[aId] = aTarget;
- }
- }
-
- if (maIdCache.find(rId) != maIdCache.end())
- {
- rDocumentTarget = maIdCache[rId];
- return true;
- }
-
- bool bFound = false;
- static uno::Reference<uri::XUriReferenceFactory> xFac = uri::UriReferenceFactory::create(mxContext);
- // use '/' to representent the root of the zip package ( and provide a 'file' scheme to
- // keep the XUriReference implementation happy )
- // add mspath to represent the 'source' of this stream
- uno::Reference<uri::XUriReference> xBase = xFac->parse("file:///" + msPath);
-
- static const char sType[] = "Type";
- static const char sDocumentType[] = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument";
- static const char sStylesType[] = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles";
- static const char sNumberingType[] = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/numbering";
- static const char sFonttableType[] = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/fontTable";
- static const char sFootnotesType[] = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/footnotes";
- static const char sEndnotesType[] = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/endnotes";
- static const char sCommentsType[] = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments";
- static const char sThemeType[] = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme";
- static const char sCustomType[] = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXml";
- static const char sCustomPropsType[] = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXmlProps";
- static const char sGlossaryType[] = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/glossaryDocument";
- static const char sWebSettings[] = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/webSettings";
- static const char sSettingsType[] = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/settings";
- static const char sChartType[] = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart";
- static const char sEmbeddingsType[] = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/package";
- static const char sFooterType[] = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/footer";
- static const char sHeaderType[] = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/header";
- static const char sOleObjectType[] = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/oleObject";
- // OOXML strict
- static const char sDocumentTypeStrict[] = "http://purl.oclc.org/ooxml/officeDocument/relationships/officeDocument";
- static const char sStylesTypeStrict[] = "http://purl.oclc.org/ooxml/officeDocument/relationships/styles";
- static const char sNumberingTypeStrict[] = "http://purl.oclc.org/ooxml/officeDocument/relationships/numbering";
- static const char sFonttableTypeStrict[] = "http://purl.oclc.org/ooxml/officeDocument/relationships/fontTable";
- static const char sFootnotesTypeStrict[] = "http://purl.oclc.org/ooxml/officeDocument/relationships/footnotes";
- static const char sEndnotesTypeStrict[] = "http://purl.oclc.org/ooxml/officeDocument/relationships/endnotes";
- static const char sCommentsTypeStrict[] = "http://purl.oclc.org/ooxml/officeDocument/relationships/comments";
- static const char sThemeTypeStrict[] = "http://purl.oclc.org/ooxml/officeDocument/relationships/theme";
- static const char sCustomTypeStrict[] = "http://purl.oclc.org/ooxml/officeDocument/relationships/customXml";
- static const char sCustomPropsTypeStrict[] = "http://purl.oclc.org/ooxml/officeDocument/relationships/customXmlProps";
- static const char sGlossaryTypeStrict[] = "http://purl.oclc.org/ooxml/officeDocument/relationships/glossaryDocument";
- static const char sWebSettingsStrict[] = "http://purl.oclc.org/ooxml/officeDocument/relationships/webSettings";
- static const char sSettingsTypeStrict[] = "http://purl.oclc.org/ooxml/officeDocument/relationships/settings";
- static const char sChartTypeStrict[] = "http://purl.oclc.org/ooxml/officeDocument/relationships/chart";
- static const char sEmbeddingsTypeStrict[] = "http://purl.oclc.org/ooxml/officeDocument/relationships/package";
- static const char sFootersTypeStrict[] = "http://purl.oclc.org/ooxml/officeDocument/relationships/footer";
- static const char sHeaderTypeStrict[] = "http://purl.oclc.org/ooxml/officeDocument/relationships/header";
- static const char sOleObjectTypeStrict[] = "http://purl.oclc.org/ooxml/officeDocument/relationships/oleObject";
- static const char sVBAProjectType[] = "http://schemas.microsoft.com/office/2006/relationships/vbaProject";
- static const char sVBADataType[] = "http://schemas.microsoft.com/office/2006/relationships/wordVbaData";
-
- OUString sStreamType;
- OUString sStreamTypeStrict;
-
- switch (nStreamType)
- {
- case VBAPROJECT:
- sStreamType = sVBAProjectType;
- sStreamTypeStrict = sVBAProjectType;
- break;
- case VBADATA:
- sStreamType = sVBADataType;
- sStreamTypeStrict = sVBADataType;
- break;
- case DOCUMENT:
- sStreamType = sDocumentType;
- sStreamTypeStrict = sDocumentTypeStrict;
- break;
- case STYLES:
- sStreamType = sStylesType;
- sStreamTypeStrict = sStylesTypeStrict;
- break;
- case NUMBERING:
- sStreamType = sNumberingType;
- sStreamTypeStrict = sNumberingTypeStrict;
- break;
- case FONTTABLE:
- sStreamType = sFonttableType;
- sStreamTypeStrict = sFonttableTypeStrict;
- break;
- case FOOTNOTES:
- sStreamType = sFootnotesType;
- sStreamTypeStrict = sFootnotesTypeStrict;
- break;
- case ENDNOTES:
- sStreamType = sEndnotesType;
- sStreamTypeStrict = sEndnotesTypeStrict;
- break;
- case COMMENTS:
- sStreamType = sCommentsType;
- sStreamTypeStrict = sCommentsTypeStrict;
- break;
- case THEME:
- sStreamType = sThemeType;
- sStreamTypeStrict = sThemeTypeStrict;
- break;
- case CUSTOMXML:
- sStreamType = sCustomType;
- sStreamTypeStrict = sCustomTypeStrict;
- break;
- case CUSTOMXMLPROPS:
- sStreamType = sCustomPropsType;
- sStreamTypeStrict = sCustomPropsTypeStrict;
- break;
- case SETTINGS:
- sStreamType = sSettingsType;
- sStreamTypeStrict = sSettingsTypeStrict;
- break;
- case GLOSSARY:
- sStreamType = sGlossaryType;
- sStreamTypeStrict = sGlossaryTypeStrict;
- break;
- case WEBSETTINGS:
- sStreamType = sWebSettings;
- sStreamTypeStrict = sWebSettingsStrict;
- break;
- case CHARTS:
- sStreamType = sChartType;
- sStreamTypeStrict = sChartTypeStrict;
- break;
- case EMBEDDINGS:
- sStreamType = sEmbeddingsType;
- sStreamTypeStrict = sEmbeddingsTypeStrict;
- break;
- case FOOTER:
- sStreamType = sFooterType;
- sStreamTypeStrict = sFootersTypeStrict;
- break;
- case HEADER:
- sStreamType = sHeaderType;
- sStreamTypeStrict = sHeaderTypeStrict;
- break;
- default:
- break;
- }
-
- if (xRelationshipAccess.is())
- {
- const uno::Sequence< uno::Sequence< beans::StringPair > >aSeqs =
- xRelationshipAccess->getAllRelationships();
-
- for (const uno::Sequence< beans::StringPair > &rSeq : aSeqs)
- {
- bool bExternalTarget = false;
- OUString sMyTarget;
- for (const beans::StringPair &rPair : rSeq)
- {
- if (rPair.First == sType &&
- ( rPair.Second == sStreamType ||
- rPair.Second == sStreamTypeStrict ))
- bFound = true;
- else if(rPair.First == sType &&
- ((rPair.Second == sOleObjectType ||
- rPair.Second == sOleObjectTypeStrict) &&
- nStreamType == EMBEDDINGS))
- {
- bFound = true;
- }
- else if (rPair.First == sId &&
- rPair.Second == rId)
- bFound = true;
- else if (rPair.First == sTarget)
- {
- // checking item[n].xml is not visited already.
- if(customTarget != rPair.Second && (sStreamType == sCustomType || sStreamType == sChartType || sStreamType == sFooterType || sStreamType == sHeaderType))
- {
- bFound = false;
- }
- else
- {
- sMyTarget = rPair.Second;
- }
- }
- else if (rPair.First == sTargetMode &&
- rPair.Second == sExternal)
- bExternalTarget = true;
- }
-
- if (bFound)
- {
- if (bExternalTarget)
- rDocumentTarget = sMyTarget;
- else
- {
- // 'Target' is a relative Uri, so a 'Target=/path'
- // with a base Uri of file://base/foo will resolve to
- // file://base/word. We need something more than some
- // simple string concatenation here to handle that.
- uno::Reference<uri::XUriReference> xPart = xFac->parse(sMyTarget);
- uno::Reference<uri::XUriReference> xAbs = xFac->makeAbsolute(xBase, xPart, true, uri::RelativeUriExcessParentSegments_RETAIN);
- if (!xAbs)
- {
- //it was invalid gibberish
- bFound = false;
- }
- else
- {
- rDocumentTarget = xAbs->getPath();
- // path will start with the fragment separator. need to
- // remove that
- rDocumentTarget = rDocumentTarget.copy( 1 );
- if(sStreamType == sEmbeddingsType)
- embeddingsTarget = rDocumentTarget;
- }
- }
-
- break;
- }
- }
- }
-
- return bFound;
-}
-
-OUString OOXMLStreamImpl::getTargetForId(const OUString & rId)
-{
- OUString sTarget;
-
- uno::Reference<embed::XRelationshipAccess> xRelationshipAccess
- (mxDocumentStream, uno::UNO_QUERY_THROW);
-
- if (lcl_getTarget(xRelationshipAccess, UNKNOWN, rId, sTarget))
- return sTarget;
-
- return OUString();
-}
-
-void OOXMLStreamImpl::init()
-{
- bool bFound = lcl_getTarget(mxRelationshipAccess,
- mnStreamType, msId, msTarget);
-
- if (!bFound)
- return;
-
- sal_Int32 nLastIndex = msTarget.lastIndexOf('/');
- if (nLastIndex >= 0)
- msPath = msTarget.copy(0, nLastIndex + 1);
-
- uno::Reference<embed::XHierarchicalStorageAccess>
- xHierarchicalStorageAccess(mxStorage, uno::UNO_QUERY);
-
- if (xHierarchicalStorageAccess.is())
- {
- uno::Any aAny(xHierarchicalStorageAccess->
- openStreamElementByHierarchicalName
- (msTarget, embed::ElementModes::SEEKABLEREAD));
- aAny >>= mxDocumentStream;
- // Non-cached ID lookup works by accessing mxDocumentStream as an embed::XRelationshipAccess.
- // So when it changes, we should empty the cache.
- maIdCache.clear();
- }
-}
-
-uno::Reference<io::XInputStream> OOXMLStreamImpl::getDocumentStream()
-{
- uno::Reference<io::XInputStream> xResult;
-
- if (mxDocumentStream.is())
- xResult = mxDocumentStream->getInputStream();
-
- return xResult;
-}
-
-uno::Reference<uno::XComponentContext> OOXMLStreamImpl::getContext()
-{
- return mxContext;
-}
-
-uno::Reference <xml::sax::XFastTokenHandler> OOXMLStreamImpl::getFastTokenHandler()
-{
- if (! mxFastTokenHandler.is())
- mxFastTokenHandler.set(new oox::core::FastTokenHandler());
-
- return mxFastTokenHandler;
-}
-
-OOXMLStream::Pointer_t
-OOXMLDocumentFactory::createStream
-(const uno::Reference<uno::XComponentContext>& xContext,
- const uno::Reference<io::XInputStream>& rStream,
- bool bRepairStorage)
-{
- OOXMLStreamImpl * pStream = new OOXMLStreamImpl(xContext, rStream,
- OOXMLStream::DOCUMENT, bRepairStorage);
- return OOXMLStream::Pointer_t(pStream);
-}
-
-OOXMLStream::Pointer_t
-OOXMLDocumentFactory::createStream
-(const OOXMLStream::Pointer_t& pStream, OOXMLStream::StreamType_t nStreamType)
-{
- OOXMLStream::Pointer_t pRet;
-
- if (nStreamType != OOXMLStream::VBADATA)
- {
- if (OOXMLStreamImpl* pImpl = dynamic_cast<OOXMLStreamImpl *>(pStream.get()))
- pRet = new OOXMLStreamImpl(*pImpl, nStreamType);
- }
- else
- {
- // VBADATA is not a relation of the document, but of the VBAPROJECT stream.
- if (OOXMLStreamImpl* pImpl = dynamic_cast<OOXMLStreamImpl *>(pStream.get()))
- {
- std::unique_ptr<OOXMLStreamImpl> pProject(new OOXMLStreamImpl(*pImpl, OOXMLStream::VBAPROJECT));
- pRet = new OOXMLStreamImpl(*pProject, OOXMLStream::VBADATA);
- }
- }
-
- return pRet;
-}
-
-OOXMLStream::Pointer_t
-OOXMLDocumentFactory::createStream
-(const OOXMLStream::Pointer_t& pStream, const OUString & rId)
-{
- OOXMLStream::Pointer_t pRet;
- if (OOXMLStreamImpl* pImpl = dynamic_cast<OOXMLStreamImpl *>(pStream.get()))
- pRet = new OOXMLStreamImpl(*pImpl, rId);
- return pRet;
-}
-
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/ooxml/OOXMLStreamImpl.hxx b/writerfilter/source/ooxml/OOXMLStreamImpl.hxx
deleted file mode 100644
index 383cec85c22a..000000000000
--- a/writerfilter/source/ooxml/OOXMLStreamImpl.hxx
+++ /dev/null
@@ -1,85 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * 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 .
- */
-#ifndef INCLUDED_WRITERFILTER_SOURCE_OOXML_OOXMLSTREAMIMPL_HXX
-#define INCLUDED_WRITERFILTER_SOURCE_OOXML_OOXMLSTREAMIMPL_HXX
-
-#include <map>
-
-#include <ooxml/OOXMLDocument.hxx>
-#include <com/sun/star/embed/XRelationshipAccess.hpp>
-
-extern OUString customTarget;
-extern OUString embeddingsTarget;
-
-namespace writerfilter::ooxml
-{
-
-class OOXMLStreamImpl : public OOXMLStream
-{
- void init();
-
- css::uno::Reference<css::uno::XComponentContext> mxContext;
- css::uno::Reference<css::io::XInputStream> mxStorageStream;
- css::uno::Reference<css::embed::XStorage> mxStorage;
- css::uno::Reference<css::embed::XRelationshipAccess> mxRelationshipAccess;
- css::uno::Reference<css::io::XStream> mxDocumentStream;
- css::uno::Reference<css::xml::sax::XFastParser> mxFastParser;
- css::uno::Reference<css::xml::sax::XFastTokenHandler> mxFastTokenHandler;
-
- StreamType_t mnStreamType;
-
- OUString msId;
- OUString msPath;
- OUString msTarget;
-
- /// Cache holding an Id <-> Target map of external relations.
- std::map<OUString, OUString> maIdCache;
-
- bool lcl_getTarget(const css::uno::Reference<css::embed::XRelationshipAccess>& xRelationshipAccess,
- StreamType_t nStreamType,
- const OUString & rId,
- OUString & rDocumentTarget);
-public:
- typedef tools::SvRef<OOXMLStreamImpl> Pointer_t;
-
- OOXMLStreamImpl
- (OOXMLStreamImpl const & rStream, StreamType_t nType);
- OOXMLStreamImpl
- (css::uno::Reference<css::uno::XComponentContext> const & xContext,
- css::uno::Reference<css::io::XInputStream> const & xStorageStream,
- StreamType_t nType, bool bRepairStorage);
- OOXMLStreamImpl(OOXMLStreamImpl const & rStream, const OUString & rId);
-
- virtual ~OOXMLStreamImpl() override;
-
- virtual css::uno::Reference<css::xml::sax::XFastParser> getFastParser() override;
- virtual css::uno::Reference<css::io::XInputStream> getDocumentStream() override;
- virtual css::uno::Reference<css::uno::XComponentContext> getContext() override;
- virtual OUString getTargetForId(const OUString & rId) override;
- virtual const OUString & getTarget() const override;
-
- virtual css::uno::Reference<css::xml::sax::XFastTokenHandler> getFastTokenHandler() override;
-
- // Giving access to mxDocumentStream. It is needed by resolving custom xml to get list of customxml's used in document.
- const css::uno::Reference<css::io::XStream>& accessDocumentStream() { return mxDocumentStream;}
-};
-}
-#endif // INCLUDED_WRITERFILTER_SOURCE_OOXML_OOXMLSTREAMIMPL_HXX
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/ooxml/README b/writerfilter/source/ooxml/README
deleted file mode 100644
index c72b341aef65..000000000000
--- a/writerfilter/source/ooxml/README
+++ /dev/null
@@ -1,13 +0,0 @@
-= DOCX tokenizer
-
-== Coding style
-
-This directory uses the PEP 8 (see
-<http://legacy.python.org/dev/peps/pep-0008/>) coding style for Python files.
-Please run
-
-----
-pycodestyle *.py
-----
-
-before committing.
diff --git a/writerfilter/source/ooxml/factory_ns.py b/writerfilter/source/ooxml/factory_ns.py
deleted file mode 100644
index 1d9924e239c2..000000000000
--- a/writerfilter/source/ooxml/factory_ns.py
+++ /dev/null
@@ -1,76 +0,0 @@
-#!/usr/bin/env python
-#
-# This file is part of the LibreOffice project.
-#
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-#
-
-from xml.dom import minidom
-import sys
-
-
-def createHeader(model, ns):
- nsToken = ns.replace('-', '_')
- print("""
-#ifndef INCLUDED_OOXML_FACTORY_%s_HXX
-#define INCLUDED_OOXML_FACTORY_%s_HXX
-#include "ooxml/OOXMLFactory.hxx"
-#include "OOXMLFactory_generated.hxx"
-#include "oox/token/namespaces.hxx"
-#include "ooxml/resourceids.hxx"
-#include "tools/ref.hxx"
-
-namespace writerfilter {
-namespace ooxml {
-
-/// @cond GENERATED
-""" % (nsToken.upper(), nsToken.upper()))
-
- print("""class OOXMLFactory_%s : public OOXMLFactory_ns
-{
-public:
- typedef tools::SvRef<OOXMLFactory_ns> Pointer_t;
-
- static Pointer_t getInstance();
-
- virtual const AttributeInfo* getAttributeInfoArray(Id nId);
- virtual bool getElementId(Id nDefine, Id nId, ResourceType& rOutResource, Id& rOutElement);
- virtual bool getListValue(Id nId, const OUString& rValue, sal_uInt32& rOutValue);
- virtual Id getResourceId(Id nDefine, sal_Int32 nToken);
-""" % nsToken)
-
- actions = []
- for nsNode in [i for i in model.getElementsByTagName("namespace") if i.getAttribute("name") == ns]:
- for resource in nsNode.getElementsByTagName("resource"):
- for action in [i.getAttribute("name") for i in resource.childNodes if i.nodeType == minidom.Node.ELEMENT_NODE and i.tagName == "action"]:
- if action != "characters" and action not in actions:
- actions.append(action)
- for action in actions:
- print(" void %sAction(OOXMLFastContextHandler* pHandler);" % action)
-
- print("""virtual void charactersAction(OOXMLFastContextHandler* pHandler, const OUString & sText);
- virtual void attributeAction(OOXMLFastContextHandler* pHandler, Token_t nToken, const OOXMLValue::Pointer_t& pValue);
-
- virtual ~OOXMLFactory_%s();
-
-protected:
- static Pointer_t m_pInstance;
-
- OOXMLFactory_%s();
-};
-""" % (nsToken, nsToken))
-
- print("""/// @endcond
-}}
-#endif //INCLUDED_OOXML_FACTORY_%s_HXX""" % nsToken.upper())
-
-
-modelPath = sys.argv[1]
-filePath = sys.argv[2]
-model = minidom.parse(modelPath)
-ns = filePath.split('OOXMLFactory_')[1].split('.hxx')[0]
-createHeader(model, ns)
-
-# vim:set shiftwidth=4 softtabstop=4 expandtab:
diff --git a/writerfilter/source/ooxml/factoryimpl.py b/writerfilter/source/ooxml/factoryimpl.py
deleted file mode 100644
index 4fdbfda2ee4b..000000000000
--- a/writerfilter/source/ooxml/factoryimpl.py
+++ /dev/null
@@ -1,215 +0,0 @@
-#!/usr/bin/env python
-#
-# This file is part of the LibreOffice project.
-#
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-#
-
-from xml.dom import minidom
-import sys
-
-
-def getElementsByTagNamesNS(parent, ns, names, ret=minidom.NodeList()):
- for node in parent.childNodes:
- if node.nodeType == minidom.Node.ELEMENT_NODE and node.namespaceURI == ns and node.tagName in names:
- ret.append(node)
- getElementsByTagNamesNS(node, ns, names, ret)
- return ret
-
-
-def createFastChildContextFromFactory(model):
- print("""uno::Reference<xml::sax::XFastContextHandler> OOXMLFactory::createFastChildContextFromFactory
-(OOXMLFastContextHandler* pHandler, OOXMLFactory_ns::Pointer_t pFactory, Token_t Element)
-{
- uno::Reference <xml::sax::XFastContextHandler> aResult;
- const Id nDefine = pHandler->getDefine();
-
- if (pFactory.get() != NULL)
- {
- ResourceType nResource;
- Id nElementId;
- if (pFactory->getElementId(nDefine, Element, nResource, nElementId))
- {
- const Id nId = pFactory->getResourceId(nDefine, Element);
-
- switch (nResource)
- {""")
- resources = [
- "List", "Integer", "Hex", "HexColor", "String",
- "TwipsMeasure_asSigned", "TwipsMeasure_asZero",
- "HpsMeasure", "Boolean", "MeasurementOrPercent",
- ]
- for resource in [r.getAttribute("resource") for r in model.getElementsByTagName("resource")]:
- if resource not in resources:
- resources.append(resource)
- print(""" case ResourceType::%s:
- aResult.set(OOXMLFastHelper<OOXMLFastContextHandler%s>::createAndSetParentAndDefine(pHandler, Element, nId, nElementId));
- break;""" % (resource, resource))
- print(""" case ResourceType::Any:
- aResult.set(createFastChildContextFromStart(pHandler, Element));
- break;
- default:
- break;
- }
-
- }
- }
-
- return aResult;
-}
-""")
-
-
-def getFactoryForNamespace(model):
- print("""OOXMLFactory_ns::Pointer_t OOXMLFactory::getFactoryForNamespace(Id nId)
-{
- OOXMLFactory_ns::Pointer_t pResult;
-
- switch (oox::getNamespace(nId))
- {""")
-
- for namespace in [ns.getAttribute("name") for ns in model.getElementsByTagName("namespace")]:
- id = namespace.replace('-', '_')
- print(""" case NN_%s:
- pResult = OOXMLFactory_%s::getInstance();
- break;""" % (id, id))
- print(""" default:
- break;
- }
-
- return pResult;
-}
-""")
-
-
-def createFastChildContextFromStart(model):
- print("""uno::Reference<xml::sax::XFastContextHandler> OOXMLFactory::createFastChildContextFromStart
-(OOXMLFastContextHandler* pHandler, Token_t Element)
-{
- uno::Reference<xml::sax::XFastContextHandler> aResult;
- OOXMLFactory_ns::Pointer_t pFactory;
-
-""")
-
- for namespace in [ns.getAttribute("name") for ns in model.getElementsByTagName("namespace")]:
- id = namespace.replace('-', '_')
- print(""" if (!aResult.is())
- {
- pFactory = getFactoryForNamespace(NN_%s);
- aResult.set(createFastChildContextFromFactory(pHandler, pFactory, Element));
- }""" % id)
-
- print("""
- return aResult;
-}
-""")
-
-
-def fastTokenToId(model):
- print("""
-std::string fastTokenToId(sal_uInt32 nToken)
-{
- std::string sResult;
-#ifdef DBG_UTIL
-
- switch (oox::getNamespace(nToken))
- {""")
-
- aliases = []
- for alias in sorted(ooxUrlAliases.values()):
- if alias not in aliases:
- aliases.append(alias)
- print(""" case oox::NMSP_%s:
- sResult += "%s:";
- break;""" % (alias, alias))
- print(""" }
-
- switch (nToken & 0xffff)
- {""")
-
- tokens = [""]
- for token in [t.getAttribute("localname") for t in getElementsByTagNamesNS(model, "http://relaxng.org/ns/structure/1.0", ["element", "attribute"])]:
- if token not in tokens:
- tokens.append(token)
- print(""" case oox::XML_%s:
- sResult += "%s";
- break;""" % (token, token))
-
- print(""" }
-#else
- (void)nToken;
-#endif
- return sResult;
-}
-""")
-
-
-def getFastParser():
- print("""uno::Reference <xml::sax::XFastParser> OOXMLStreamImpl::getFastParser()
-{
- if (!mxFastParser.is())
- {
- mxFastParser = css::xml::sax::FastParser::create(mxContext);
- // the threaded parser is about 20% slower loading writer documents
- css::uno::Reference< css::lang::XInitialization > xInit( mxFastParser, css::uno::UNO_QUERY_THROW );
- css::uno::Sequence< css::uno::Any > args(1);
- args[0] <<= OUString("DisableThreadedParser");
- xInit->initialize(args);
-""")
- for url in sorted(ooxUrlAliases.keys()):
- print(""" mxFastParser->registerNamespace("%s", oox::NMSP_%s);""" % (url, ooxUrlAliases[url]))
- print(""" }
-
- return mxFastParser;
-}
-
-/// @endcond
-}}""")
-
-
-def createImpl(model):
- print("""
-#include <com/sun/star/xml/sax/FastParser.hpp>
-#include <com/sun/star/lang/XInitialization.hpp>
-#include "ooxml/OOXMLFactory.hxx"
-#include "ooxml/OOXMLFastHelper.hxx"
-#include "ooxml/OOXMLStreamImpl.hxx"
-""")
-
- for namespace in [ns.getAttribute("name") for ns in model.getElementsByTagName("namespace")]:
- print('#include "OOXMLFactory_%s.hxx"' % namespace)
-
- print("""namespace writerfilter {
-namespace ooxml {
-
-using namespace com::sun::star;
-
-/// @cond GENERATED
-""")
-
- createFastChildContextFromFactory(model)
- getFactoryForNamespace(model)
- createFastChildContextFromStart(model)
- fastTokenToId(model)
- getFastParser()
-
-
-def parseNamespaces(fro):
- sock = open(fro)
- for i in sock.readlines():
- line = i.strip()
- alias, url = line.split(' ')[1:] # first column is ID, not interesting for us
- ooxUrlAliases[url] = alias
- sock.close()
-
-
-namespacesPath = sys.argv[1]
-ooxUrlAliases = {}
-parseNamespaces(namespacesPath)
-modelPath = sys.argv[2]
-model = minidom.parse(modelPath)
-createImpl(model)
-
-# vim:set shiftwidth=4 softtabstop=4 expandtab:
diff --git a/writerfilter/source/ooxml/factoryimpl_ns.py b/writerfilter/source/ooxml/factoryimpl_ns.py
deleted file mode 100644
index 73d2022902d6..000000000000
--- a/writerfilter/source/ooxml/factoryimpl_ns.py
+++ /dev/null
@@ -1,759 +0,0 @@
-#!/usr/bin/env python
-#
-# This file is part of the LibreOffice project.
-#
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-#
-
-from xml.dom import minidom
-import sys
-
-
-# factoryMutexDecl
-
-
-def factoryMutexDecl(nsLabel):
- print("typedef rtl::Static<osl::Mutex, OOXMLFactory_%s> OOXMLFactory_%s_Mutex;" % (nsLabel, nsLabel))
- print()
-
-
-# factoryConstructor
-
-
-def factoryConstructor(nsLabel):
- print("""OOXMLFactory_%s::OOXMLFactory_%s()
-{
- // multi-thread-safe mutex for all platforms
-
- osl::MutexGuard aGuard(OOXMLFactory_%s_Mutex::get());
-}""" % (nsLabel, nsLabel, nsLabel))
- print()
-
-
-# factoryDestructor
-
-
-def factoryDestructor(nsLabel):
- print("""OOXMLFactory_%s::~OOXMLFactory_%s()
-{
-}""" % (nsLabel, nsLabel))
- print()
-
-
-# factoryGetInstance
-
-
-def factoryGetInstance(nsLabel):
- print("""OOXMLFactory_ns::Pointer_t OOXMLFactory_%s::m_pInstance;
-
-OOXMLFactory_ns::Pointer_t OOXMLFactory_%s::getInstance()
-{
- if (!m_pInstance)
- m_pInstance = new OOXMLFactory_%s();
-
- return m_pInstance;
-}""" % (nsLabel, nsLabel, nsLabel))
- print()
-
-
-# factoryAttributeToResourceMap
-
-
-def nsToLabel(nsNode):
- return nsNode.getAttribute("name").replace('-', '_')
-
-
-def getChildByName(parentNode, childName):
- elementNodes = [i for i in parentNode.childNodes if i.localName == childName]
- assert len(elementNodes) == 1
- return elementNodes[0]
-
-
-def resourceForAttribute(nsNode, attrNode):
- resourceName = ""
-
- for refNode in getChildrenByName(attrNode, "ref"):
- refName = refNode.getAttribute("name")
- for resourceNode in [i for i in getChildrenByName(nsNode, "resource") if i.getAttribute("name") == refName]:
- resourceName = resourceNode.getAttribute("resource")
- break
- if not len(resourceName):
- for define in [i for i in getChildrenByName(getChildByName(nsNode, "grammar"), "define") if i.getAttribute("name") == refName]:
- resourceName = resourceForAttribute(nsNode, define)
- break
- if len(resourceName):
- break
-
- if not len(resourceName):
- if len([i for i in attrNode.getElementsByTagName("data") if i.getAttribute("type") in ("base64Binary", "string")]):
- resourceName = "String"
- elif len([i for i in attrNode.getElementsByTagName("data") if i.getAttribute("type") == "boolean"]):
- resourceName = "Boolean"
- elif len([i for i in attrNode.getElementsByTagName("data") if i.getAttribute("type") in ("unsignedInt", "integer", "int")]):
- resourceName = "Integer"
- else:
- dataNodes = attrNode.getElementsByTagName("data")
- if len(dataNodes):
- t = dataNodes[0].getAttribute("type")
- # Denylist existing unexpected data types.
- if t not in ("token", "long", "decimal", "float", "byte", "ST_DecimalNumber", "positiveInteger"):
- raise Exception("unexpected data type: " + dataNodes[0].getAttribute("type"))
- return resourceName
-
-
-def idForNamespace(nsNode):
- return "NN_%s" % nsNode.getAttribute("name").replace('-', '_')
-
-
-def localIdForDefine(defineNode):
- return "DEFINE_%s" % defineNode.getAttribute("name")
-
-
-def idForDefine(nsNode, defineNode):
- return "%s|%s" % (idForNamespace(nsNode), localIdForDefine(defineNode))
-
-
-def fastNamespace(attrNode):
- return "oox::NMSP_%s" % attrNode.getAttribute("prefix")
-
-
-def fastLocalName(attrNode):
- if len(attrNode.getAttribute("localname")):
- return "oox::XML_%s" % attrNode.getAttribute("localname")
- else:
- return "oox::XML_TOKEN_COUNT"
-
-
-def fastToken(attrNode):
- ret = []
- if len(attrNode.getAttribute("prefix")):
- ret.append("%s|" % fastNamespace(attrNode))
- ret.append(fastLocalName(attrNode))
- return "".join(ret)
-
-
-def collectAttributeToResource(nsNode, defineNode):
- ret_dict = {}
- ret_order = []
- for refNode in getChildrenByName(defineNode, "ref"):
- refName = refNode.getAttribute("name")
- parent = refNode.parentNode
- if parent.localName in ("element", "attribute"):
- continue
- for define in [i for i in getChildrenByName(getChildByName(nsNode, "grammar"), "define") if i.getAttribute("name") == refName]:
- ret = collectAttributeToResource(nsNode, define)
- ret_dict.update(ret[0])
- ret_order.extend(ret[1])
-
- attrNodes = defineNode.getElementsByTagName("attribute")
- for attrNode in attrNodes:
- attrToken = fastToken(attrNode)
- resourceName = resourceForAttribute(nsNode, attrNode)
- refDefine = "0"
- if len(resourceName):
- for refNode in attrNode.getElementsByTagName("ref"):
- refName = refNode.getAttribute("name")
- for define in [i for i in getChildrenByName(getChildByName(nsNode, "grammar"), "define") if i.getAttribute("name") == refName]:
- refDefine = idForDefine(nsNode, define)
- ret_dict[attrToken] = "ResourceType::%s, %s" % (resourceName, refDefine)
- ret_order.append(attrToken)
-
- return [ret_dict, ret_order]
-
-
-def factoryAttributeToResourceMapInner(nsNode, defineNode):
- ret = []
- attributes = collectAttributeToResource(nsNode, defineNode)
- already_used = set()
- for k in attributes[1]:
- if not (k in already_used):
- ret.append(" { %s, %s }," % (k, attributes[0][k]))
- already_used.add(k)
-
- return ret
-
-
-def factoryAttributeToResourceMap(nsNode):
- print("""const AttributeInfo* OOXMLFactory_%s::getAttributeInfoArray(Id nId)
-{
- switch (nId)
- {""" % nsToLabel(nsNode))
- for defineNode in getChildrenByName(getChildByName(nsNode, "grammar"), "define"):
- inner = "\n".join(factoryAttributeToResourceMapInner(nsNode, defineNode))
- if len(inner):
- print(" case %s:" % idForDefine(nsNode, defineNode))
- print(" {")
- print(" const static AttributeInfo info[] = {")
- print(inner)
- print(" { -1, ResourceType::NoResource, 0 }")
- print(" };")
- print(" return info;")
- print(" }")
- print(" break;")
-
- print(""" default:
- break;
- }
-
- return NULL;
-}""")
- print()
-
-
-# factoryGetListValue
-
-
-def idToLabel(idName):
- ns, ln = idName.split(':')
- return "NS_%s::LN_%s" % (ns, ln)
-
-
-def appendValueData(values, name, value):
- first = name[0:1]
-
- if not (first in values):
- values[first] = []
-
- values[first].append([name, value])
-
-
-def printValueData(values):
- if "" in values:
- output_else = ""
- for i in values[""]:
- print(" %sif (rValue == \"%s\") { rOutValue = %s; return true; }" % (output_else, i[0], i[1]))
- output_else = "else "
- print(" else switch (rValue[0])")
- else:
- print(" if (rValue.isEmpty())")
- print(" return false;")
- print(" switch (rValue[0])")
-
- print(" {")
- for k in sorted(values.keys()):
- if k != "":
- print(" case '%s':" % k)
- output_else = ""
- for i in values[k]:
- print(" %sif (rValue == \"%s\") { rOutValue = %s; }" % (output_else, i[0], i[1]))
- output_else = "else "
- print(" else { return false; }")
- print(" return true;")
- print(" }")
-
-
-def factoryGetListValue(nsNode):
- print("""bool OOXMLFactory_%s::getListValue(Id nId, const OUString& rValue, sal_uInt32& rOutValue)
-{
- (void) rValue;
- (void) rOutValue;
-
- switch (nId)
- {""" % nsToLabel(nsNode))
-
- for resourceNode in [i for i in getChildrenByName(nsNode, "resource") if i.getAttribute("resource") == "List"]:
- print(" case %s:" % idForDefine(nsNode, resourceNode))
- values = {}
- for valueNode in getChildrenByName(resourceNode, "value"):
- valueData = ""
- if len(valueNode.childNodes):
- valueData = valueNode.childNodes[0].data
- appendValueData(values, valueData, idToLabel(valueNode.getAttribute("tokenid")))
- printValueData(values)
- print(" return false;")
-
- print(""" default:
- break;
- }
-
- return false;
-}
-""")
-
-
-# factoryCreateElementMap
-
-
-def contextResource(files, nsNode, refNode):
- refName = refNode.getAttribute("name")
- for resourceNode in [i for i in getChildrenByName(nsNode, "resource") if i.getAttribute("name") == refName]:
- return resourceNode.getAttribute("resource")
-
- for includeNode in getChildrenByName(getChildByName(nsNode, "grammar"), "include"):
- namespaceNode = files[includeNode.getAttribute("href")]
- for resourceNode in [i for i in getChildrenByName(namespaceNode, "resource") if i.getAttribute("name") == refName]:
- return resourceNode.getAttribute("resource")
-
- if refName == "BUILT_IN_ANY_TYPE":
- return "Any"
- else:
- for namespaceNode in getChildrenByName(nsNode.parentNode, "namespace"):
- for resourceNode in [i for i in getChildrenByName(namespaceNode, "resource") if i.getAttribute("name") == refName]:
- return resourceNode.getAttribute("resource")
- return ""
-
-
-def idForRef(nsNode, refNode):
- refName = refNode.getAttribute("name")
- result1 = ""
- for define in [i for i in getChildrenByName(getChildByName(nsNode, "grammar"), "define") if i.getAttribute("name") == refName]:
- result1 = idForDefine(nsNode, define)
- if refName == "BUILT_IN_ANY_TYPE":
- return "0"
- elif result1 == "":
- for namespaceNode in getChildrenByName(nsNode.parentNode, "namespace"):
- for define in [i for i in getChildrenByName(getChildByName(namespaceNode, "grammar"), "define") if i.getAttribute("name") == refName]:
- return idForDefine(namespaceNode, define)
- else:
- return result1
-
-
-def factoryCreateElementMapInner(files, nsNode, defineNode, resourceNamespaceNode=None):
- if not resourceNamespaceNode:
- resourceNamespaceNode = nsNode
- ret = {}
- for refNode in defineNode.getElementsByTagName("ref"):
- parent = refNode.parentNode
- if parent.localName in ("element", "attribute"):
- continue
- refName = refNode.getAttribute("name")
-
- block = {}
- for define in [i for i in getChildrenByName(getChildByName(nsNode, "grammar"), "define") if i.getAttribute("name") == refName]:
- block = factoryCreateElementMapInner(files, nsNode, define)
-
- if len(block) == 0:
- block1 = {}
- for namespaceNode in getChildrenByName(nsNode.parentNode, "namespace"):
- for define in [i for i in getChildrenByName(getChildByName(namespaceNode, "grammar"), "define") if i.getAttribute("name") == refName]:
- block1.update(factoryCreateElementMapInner(files, namespaceNode, define, nsNode))
- else:
- block1 = block
-
- if len(block1):
- ret.update(block1)
-
- for elementNode in defineNode.getElementsByTagName("element"):
- resource = ""
- for refNode in getChildrenByName(elementNode, "ref"):
- refName = refNode.getAttribute("name")
- resource = contextResource(files, resourceNamespaceNode, refNode)
- if len(resource):
- break
- if len(resource):
- ret[fastToken(elementNode)] = " case %s: rOutResource = ResourceType::%s; rOutElement = %s; break;" % (fastToken(elementNode), resource, idForRef(nsNode, getChildByName(elementNode, "ref")))
-
- return ret
-
-
-def factoryCreateElementMapFromStart(files, nsNode):
- for startNode in getChildrenByName(nsNode, "start"):
- startName = startNode.getAttribute("name")
- block = None
- for defineNode in [i for i in getChildrenByName(getChildByName(nsNode, "grammar"), "define") if i.getAttribute("name") == startName]:
- block = factoryCreateElementMapInner(files, nsNode, defineNode)
- print(" /* start: %s*/" % startName)
- if block:
- for k in block.keys():
- print(block[k])
-
-
-def factoryCreateElementMap(files, nsNode):
- print("""bool OOXMLFactory_%s::getElementId(Id nDefine, Id nId, ResourceType& rOutResource, Id& rOutElement)
-{
- (void) rOutResource;
- (void) rOutElement;
-
- switch (nDefine)
- {""" % nsToLabel(nsNode))
-
- for defineNode in getChildrenByName(getChildByName(nsNode, "grammar"), "define"):
- inner = factoryCreateElementMapInner(files, nsNode, defineNode)
- if len(inner):
- print(" case %s:" % idForDefine(nsNode, defineNode))
- print(" switch (nId)")
- print(" {")
- for k in sorted(inner.keys()):
- print(inner[k])
- print(" default: return false;")
- print(" }")
- print(" return true;")
- print(" default:")
- print(" switch (nId)")
- print(" {")
- factoryCreateElementMapFromStart(files, nsNode)
- print(""" default: return false;
- }
- return true;
- }
-}
-""")
-
-
-# factoryActions
-
-
-def charactersActionForValues(nsNode, refNode):
- ret = []
-
- refName = refNode.getAttribute("name")
- for defineNode in [i for i in getChildrenByName(getChildByName(nsNode, "grammar"), "define") if i.getAttribute("name") == refName]:
- ret.append(" {")
- ret.append(" // %s" % defineNode.getAttribute("name"))
- for dataNode in getChildrenByName(defineNode, "data"):
- if dataNode.getAttribute("type") == "int":
- ret.append(" OOXMLValue::Pointer_t pValue(new OOXMLIntegerValue(sText));")
- ret.append(" pValueHandler->setValue(pValue);")
- ret.append(" }")
-
- return ret
-
-
-def factoryChooseAction(actionNode):
- ret = []
- extra_space = ""
- if actionNode.hasAttribute("tokenid"):
- ret.append(" if (sal::static_int_cast<Id>(pHandler->getId()) == %s)" % idToLabel(actionNode.getAttribute("tokenid")))
- ret.append(" {")
- extra_space = " "
- for condNode in getChildrenByName(actionNode, "cond"):
- ret.append(" {")
- ret.append(" OOXMLPropertySetEntryToInteger aHandler(%s);" % idToLabel(condNode.getAttribute("tokenid")))
- ret.append(" if (OOXMLFastContextHandlerStream* pStream = dynamic_cast<OOXMLFastContextHandlerStream*>(pHandler))")
- ret.append(" pStream->getPropertySetAttrs()->resolve(aHandler);")
- ret.append("")
- ret.append(" if (sal::static_int_cast<Id>(aHandler.getValue()) == %s)" % idToLabel(condNode.getAttribute("value")))
- ret.append(" {")
- extra_space = " "
-
- if actionNode.getAttribute("action") in ("handleXNotes", "handleHdrFtr", "handleComment", "handlePicture", "handleBreak", "handleOutOfOrderBreak", "handleOLE", "handleFontRel", "handleHyperlinkURL", "handleAltChunk"):
- ret.append(" %sif (OOXMLFastContextHandlerProperties* pProperties = dynamic_cast<OOXMLFastContextHandlerProperties*>(pHandler))" % extra_space)
- ret.append(" %s pProperties->%s();" % (extra_space, actionNode.getAttribute("action")))
- elif actionNode.getAttribute("action") == "propagateCharacterPropertiesAsSet":
- ret.append(" %spHandler->propagateCharacterPropertiesAsSet(%s);" % (extra_space, idToLabel(actionNode.getAttribute("sendtokenid"))))
- elif actionNode.getAttribute("action") in ("startCell", "endCell"):
- ret.append(" %sif (OOXMLFastContextHandlerTextTableCell* pTextTableCell = dynamic_cast<OOXMLFastContextHandlerTextTableCell*>(pHandler))" % extra_space)
- ret.append(" %s pTextTableCell->%s();" % (extra_space, actionNode.getAttribute("action")))
- elif actionNode.getAttribute("action") in ("startRow", "endRow"):
- ret.append(" %sif (OOXMLFastContextHandlerTextTableRow* pTextTableRow = dynamic_cast<OOXMLFastContextHandlerTextTableRow*>(pHandler))" % extra_space)
- ret.append(" %s pTextTableRow->%s();" % (extra_space, actionNode.getAttribute("action")))
- elif actionNode.getAttribute("action") == "handleGridAfter":
- ret.append(" %sif (OOXMLFastContextHandlerValue* pValueHandler = dynamic_cast<OOXMLFastContextHandlerValue*>(pHandler))" % extra_space)
- ret.append(" %s pValueHandler->%s();" % (extra_space, actionNode.getAttribute("action")))
- # tdf#111550
- elif actionNode.getAttribute("action") in ("start_P_Tbl"):
- ret.append(" %sif (OOXMLFastContextHandlerTextTable* pTextTable = dynamic_cast<OOXMLFastContextHandlerTextTable*>(pHandler))" % extra_space)
- ret.append(" %s pTextTable->%s();" % (extra_space, actionNode.getAttribute("action")))
- elif actionNode.getAttribute("action") in ("sendProperty", "handleHyperlink"):
- ret.append(" %sif (OOXMLFastContextHandlerStream* pStream = dynamic_cast<OOXMLFastContextHandlerStream*>(pHandler))" % extra_space)
- ret.append(" %s pStream->%s();" % (extra_space, actionNode.getAttribute("action")))
- elif actionNode.getAttribute("action") == "fieldstart":
- ret.append(" %spHandler->startField();" % (extra_space))
- elif actionNode.getAttribute("action") == "fieldsep":
- ret.append(" %spHandler->fieldSeparator();" % (extra_space))
- elif actionNode.getAttribute("action") == "fieldend":
- ret.append(" %spHandler->endField();" % (extra_space))
- elif actionNode.getAttribute("action") == "fieldlock":
- ret.append(" %s{" % (extra_space))
- ret.append(" %sOOXMLPropertySetEntryToBool aHandler(NS_ooxml::LN_CT_FldChar_fldLock);" % (extra_space))
- ret.append(" %sif (OOXMLFastContextHandlerStream* pStream = dynamic_cast<OOXMLFastContextHandlerStream*>(pHandler))" % (extra_space))
- ret.append(" %spStream->getPropertySetAttrs()->resolve(aHandler);" % (extra_space))
- ret.append(" %sif (aHandler.getValue())" % (extra_space))
- ret.append(" %spHandler->lockField();" % (extra_space))
- ret.append(" %s}" % (extra_space))
- elif actionNode.getAttribute("action") == "printproperty":
- ret.append(" %sif (OOXMLFastContextHandlerStream* pStream = dynamic_cast<OOXMLFastContextHandlerStream*>(pHandler))" % extra_space)
- ret.append(" %s pStream->sendProperty(%s);" % (extra_space, idToLabel(actionNode.getAttribute("sendtokenid"))))
- elif actionNode.getAttribute("action") == "sendPropertiesWithId":
- ret.append(" %spHandler->sendPropertiesWithId(%s);" % (extra_space, idToLabel(actionNode.getAttribute("sendtokenid"))))
- elif actionNode.getAttribute("action") == "text":
- ret.append(" %spHandler->text(sText);" % (extra_space))
- elif actionNode.getAttribute("action") == "positionOffset":
- ret.append(" %spHandler->positionOffset(sText);" % (extra_space))
- elif actionNode.getAttribute("action") == "positivePercentage":
- ret.append(" %spHandler->positivePercentage(sText);" % (extra_space))
- elif actionNode.getAttribute("action") == "alignH":
- ret.append(" %spHandler->alignH(sText);" % (extra_space))
- elif actionNode.getAttribute("action") == "alignV":
- ret.append(" %spHandler->alignV(sText);" % (extra_space))
- elif actionNode.getAttribute("action") == "tokenproperty":
- ret.append(" %sOOXMLFastHelper<OOXMLIntegerValue>::newProperty(pHandler, %s, pHandler->getToken());" % (extra_space, idToLabel("ooxml:token")))
- else:
- ret.append(" %spHandler->%s();" % (extra_space, actionNode.getAttribute("action")))
-
- for condNode in getChildrenByName(actionNode, "cond"):
- ret.append(" }")
- ret.append(" }")
- if actionNode.hasAttribute("tokenid"):
- ret.append(" }")
-
- return ret
-
-
-def factoryAction(nsNode, action):
- switchblock1 = []
- for resourceNode in [i for i in getChildrenByName(nsNode, "resource") if len([j for j in getChildrenByName(i, "action") if j.getAttribute("name") == action])]:
- switchblock1.append("case %s:" % idForDefine(nsNode, resourceNode))
- for actionNode in [i for i in getChildrenByName(resourceNode, "action") if i.getAttribute("name") == action]:
- switchblock1.extend(factoryChooseAction(actionNode))
- switchblock1.append(" break;")
- switchblock1.append("")
-
- switchblock2 = []
- if action == "characters":
- for resourceNode in [i for i in getChildrenByName(nsNode, "resource") if i.getAttribute("resource") == "Value"]:
- if not len(getChildrenByName(resourceNode, "attribute")):
- resourceName = resourceNode.getAttribute("name")
- switchblock2.append("case %s:" % idForDefine(nsNode, resourceNode))
- ret = []
- for define in [i for i in getChildrenByName(getChildByName(nsNode, "grammar"), "define") if i.getAttribute("name") == resourceName]:
- for refNode in getChildrenByName(define, "ref"):
- ret.extend(charactersActionForValues(nsNode, refNode))
- switchblock2.extend(ret)
- switchblock2.append(" break;")
-
- sys.stdout.write("void OOXMLFactory_%s::%sAction(OOXMLFastContextHandler*" % (nsToLabel(nsNode), action))
- if len(switchblock1) or len(switchblock2):
- sys.stdout.write(" pHandler")
- if action == "characters":
- sys.stdout.write(", const OUString&")
- if "sText" in "".join(switchblock1) or "sText" in "".join(switchblock2):
- sys.stdout.write(" sText")
- print(")")
- print("{")
- if len(switchblock1) or len(switchblock2):
- print(" sal_uInt32 nDefine = pHandler->getDefine();")
- if len(switchblock1):
- print(" switch (nDefine)")
- print(" {")
- if switchblock1[-1] == "":
- switchblock1 = switchblock1[:-1]
- sys.stdout.write(" ")
- print("\n ".join(switchblock1))
- print()
- print(" default:")
- print(" break;")
- print(" }")
- if len(switchblock2):
- print(" switch (nDefine)")
- print(" {")
- print("\n ".join(switchblock2))
- print()
- print(" default:")
- print(" break;")
- print(" }")
- print("}")
-
-
-def factoryActions(nsNode):
- actions = []
- for resourceNode in getChildrenByName(nsNode, "resource"):
- for actionNode in getChildrenByName(resourceNode, "action"):
- actionName = actionNode.getAttribute("name")
- if actionName != "characters" and actionName not in actions:
- actions.append(actionName)
- for action in sorted(actions):
- factoryAction(nsNode, action)
- print()
- factoryAction(nsNode, "characters")
- print()
-
-
-# factoryGetResourceId
-
-
-def collectTokenToId(nsNode, defineNode):
- ret = {}
- for refNode in defineNode.getElementsByTagName("ref"):
- refName = refNode.getAttribute("name")
- parent = refNode.parentNode
- if parent.localName in ("element", "attribute"):
- continue
- refblock1 = {}
- for define in [i for i in getChildrenByName(getChildByName(nsNode, "grammar"), "define") if i.getAttribute("name") == refName]:
- refblock1.update(collectTokenToId(nsNode, define))
- if not len(refblock1):
- for namespaceNode in getChildrenByName(nsNode.parentNode, "namespace"):
- for define in [i for i in getChildrenByName(getChildByName(namespaceNode, "grammar"), "define") if i.getAttribute("name") == refName]:
- ret.update(collectTokenToId(namespaceNode, define))
- else:
- ret.update(refblock1)
-
- defineName = defineNode.getAttribute("name")
- for resourceNode in [i for i in getChildrenByName(nsNode, "resource") if i.getAttribute("name") == defineName]:
- for node in [i for i in resourceNode.childNodes if i.localName in ("element", "attribute")]:
- if node.hasAttribute("tokenid"):
- ret[fastToken(node)] = idToLabel(node.getAttribute("tokenid"))
-
- return ret
-
-
-def factoryTokenToIdMapInner(nsNode, defineNode):
- ids = collectTokenToId(nsNode, defineNode)
- ret = []
- for i in sorted(ids.keys()):
- ret.append(" case %s: return %s;" % (i, ids[i]))
-
- return ret
-
-
-def factoryGetResourceId(nsNode):
- print("""Id OOXMLFactory_%s::getResourceId(Id nDefine, sal_Int32 nToken)
-{
- (void) nDefine;
- (void) nToken;
-
- switch (nDefine)
- {""" % nsToLabel(nsNode))
- for defineNode in getChildrenByName(getChildByName(nsNode, "grammar"), "define"):
- inner = "\n".join(factoryTokenToIdMapInner(nsNode, defineNode))
- if len(inner):
- print(" case %s:" % idForDefine(nsNode, defineNode))
- print(" switch (nToken)")
- print(" {")
- print(inner)
- print(" }")
- print(" break;")
- print(" default:")
- print(" switch (nToken)")
- print(" {")
- for startNode in getChildrenByName(nsNode, "start"):
- startName = startNode.getAttribute("name")
- for defineNode in [i for i in getChildrenByName(getChildByName(nsNode, "grammar"), "define") if i.getAttribute("name") == startName]:
- inner = factoryTokenToIdMapInner(nsNode, defineNode)
- if len(inner):
- print("\n".join(inner))
- print(""" }
- break;
- }
- return 0;
-}
-""")
-
-
-# factoryAttributeAction
-
-
-def factoryAttributeActionDefineInner(nsNode, defineNode):
- ret = []
-
- defineName = defineNode.getAttribute("name")
- block = []
- output_else = ""
- for resourceNode in [i for i in getChildrenByName(nsNode, "resource") if i.getAttribute("name") == defineName]:
- for attributeNode in getChildrenByName(resourceNode, "attribute"):
- if attributeNode.hasAttribute("action"):
- block.append(" %sif (nToken == static_cast<Token_t>(%s))" % (output_else, fastToken(attributeNode)))
- block.append(" pHandler->%s(pValue);" % attributeNode.getAttribute("action"))
- output_else = "else "
- if len(block):
- resource = ""
- for resourceNode in [i for i in getChildrenByName(nsNode, "resource") if i.getAttribute("name") == defineName]:
- resource = resourceNode.getAttribute("resource")
- break
- ret.append(" if (OOXMLFastContextHandler%s* pHandler = dynamic_cast<OOXMLFastContextHandler%s*>(_pHandler))" % (resource, resource))
- ret.append(" {")
- ret.extend(block)
- ret.append(" }")
-
- return ret
-
-
-def factoryAttributeActionInner(nsNode):
- ret = []
-
- for defineNode in getChildrenByName(getChildByName(nsNode, "grammar"), "define"):
- inner = factoryAttributeActionDefineInner(nsNode, defineNode)
- if len(inner):
- ret.append(" case %s:" % idForDefine(nsNode, defineNode))
- ret.extend(inner)
- ret.append(" break;")
-
- return ret
-
-
-def factoryAttributeAction(nsNode):
- nsLabel = nsToLabel(nsNode)
- inner = factoryAttributeActionInner(nsNode)
- if len(inner):
- print("""void OOXMLFactory_%s::attributeAction(OOXMLFastContextHandler* _pHandler, Token_t nToken, const OOXMLValue::Pointer_t& pValue)
-{
- switch (_pHandler->getDefine())
- {""" % nsLabel)
- print("\n".join(inner))
- print(" default:")
- print(" break;")
- print(" }")
- print("}")
- print()
- else:
- print("void OOXMLFactory_%s::attributeAction(OOXMLFastContextHandler*, Token_t, const OOXMLValue::Pointer_t&)" % nsLabel)
- print("{")
- print("}")
- print()
-
-
-# createImpl
-
-
-def getChildrenByName(parentNode, childName):
- return [i for i in parentNode.childNodes if i.localName == childName]
-
-
-def createImpl(modelNode, nsName):
- print("""
-#include "ooxml/resourceids.hxx"
-#include "OOXMLFactory_%s.hxx"
-#include "ooxml/OOXMLFastHelper.hxx"
-#include "oox/token/tokens.hxx"
-
-#ifdef _MSC_VER
-#pragma warning(disable:4060) // switch statement contains no 'case' or 'default' labels
-#pragma warning(disable:4065) // switch statement contains 'default' but no 'case' labels
-#pragma warning(disable:4702) // unreachable code
-#endif
-
-namespace writerfilter {
-namespace ooxml {
-
-using namespace com::sun::star;
-
-/// @cond GENERATED""" % nsName)
- print()
-
- files = {}
- for nsNode in getChildrenByName(modelNode, "namespace"):
- files[nsNode.getAttribute("name")] = nsNode
-
- for nsNode in [i for i in getChildrenByName(modelNode, "namespace") if i.getAttribute("name") == nsName]:
- nsLabel = nsToLabel(nsNode)
-
- factoryMutexDecl(nsLabel)
- factoryConstructor(nsLabel)
- factoryDestructor(nsLabel)
- factoryGetInstance(nsLabel)
- factoryAttributeToResourceMap(nsNode)
- factoryGetListValue(nsNode)
- factoryCreateElementMap(files, nsNode)
- factoryActions(nsNode)
- factoryGetResourceId(nsNode)
- factoryAttributeAction(nsNode)
-
- print("""/// @endcond
-}}""")
-
-
-def main():
- modelPath = sys.argv[1]
- filePath = sys.argv[2]
- modelNode = getChildByName(minidom.parse(modelPath), "model")
- nsName = filePath.split('OOXMLFactory_')[1].split('.cxx')[0]
- createImpl(modelNode, nsName)
-
-
-if __name__ == "__main__":
- main()
-
-# vim:set shiftwidth=4 softtabstop=4 expandtab:
diff --git a/writerfilter/source/ooxml/factoryinc.py b/writerfilter/source/ooxml/factoryinc.py
deleted file mode 100644
index ec07f7fda1ce..000000000000
--- a/writerfilter/source/ooxml/factoryinc.py
+++ /dev/null
@@ -1,49 +0,0 @@
-#!/usr/bin/env python
-#
-# This file is part of the LibreOffice project.
-#
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-#
-
-from xml.dom import minidom
-import sys
-
-
-def createInclude(model):
- print("""
-#ifndef INCLUDED_OOXML_FACTORY_GENERATED_HXX
-#define INCLUDED_OOXML_FACTORY_GENERATED_HXX
-
-namespace writerfilter {
-namespace ooxml {
-
-/// @cond GENERATED
- """)
-
- # Create namespaces.
- counter = 1
- for namespace in sorted([ns.getAttribute("name") for ns in model.getElementsByTagName("namespace")]):
- print("const Id NN_%s = %s << 16;" % (namespace.replace('-', '_'), counter))
- counter += 1
-
- # Create defines.
- counter = 1
- defines = []
- for define in sorted([ns.getAttribute("name") for ns in model.getElementsByTagName("define")]):
- if define not in defines:
- print("const Id DEFINE_%s = %s;" % (define, counter))
- defines.append(define)
- counter += 1
- print("""/// @endcond
-}}
-
-#endif // INCLUDED_OOXML_FACTORY_GENERATED_HXX""")
-
-
-modelPath = sys.argv[1]
-model = minidom.parse(modelPath)
-createInclude(model)
-
-# vim:set shiftwidth=4 softtabstop=4 expandtab:
diff --git a/writerfilter/source/ooxml/model.xml b/writerfilter/source/ooxml/model.xml
deleted file mode 100644
index 3f45394d5d88..000000000000
--- a/writerfilter/source/ooxml/model.xml
+++ /dev/null
@@ -1,19198 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * 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 .
--->
-<model
- xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main"
- xmlns:c="http://schemas.openxmlformats.org/drawingml/2006/chart"
- xmlns:dgm="http://schemas.openxmlformats.org/drawingml/2006/diagram"
- xmlns:lc="http://schemas.openxmlformats.org/drawingml/2006/lockedCanvas"
- xmlns:o="urn:schemas-microsoft-com:office:office"
- xmlns:p="urn:schemas-microsoft-com:office:powerpoint"
- xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships"
- xmlns:v="urn:schemas-microsoft-com:vml"
- xmlns:w14="http://schemas.microsoft.com/office/word/2010/wordml"
- xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"
- xmlns:wp14="http://schemas.microsoft.com/office/word/2010/wordprocessingDrawing"
- xmlns:wpg="http://schemas.microsoft.com/office/word/2010/wordprocessingGroup"
- xmlns:wps="http://schemas.microsoft.com/office/word/2010/wordprocessingShape"
- xmlns:wvml="urn:schemas-microsoft-com:office:word"
- xmlns:x="urn:schemas-microsoft-com:office:excel"
- xmlns:xml="http://www.w3.org/XML/1998/namespace">
- <token tokenid="ooxml:shape"/>
- <token tokenid="ooxml:token"/>
- <token tokenid="ooxml:inputstream"/>
- <token tokenid="ooxml:trackchange"/>
- <token tokenid="ooxml:object"/>
- <token tokenid="ooxml:tblStart"/>
- <token tokenid="ooxml:tblEnd"/>
- <token tokenid="ooxml:tcStart"/>
- <token tokenid="ooxml:tcEnd"/>
-
- <!-- These are not directly generated from OOXML XML elements / attributes, need to clean them up in the future. -->
- <token tokenid="ooxml:tblDepth"/>
- <token tokenid="ooxml:inTbl"/>
- <token tokenid="ooxml:tblCell"/>
- <token tokenid="ooxml:tblRow"/>
-
- <token tokenid="ooxml:ffdata"/>
- <token tokenid="ooxml:starmath"/>
- <token tokenid="ooxml:blip"/>
- <token tokenid="ooxml:payload"/>
- <token tokenid="ooxml:footnote"/>
- <token tokenid="ooxml:endnote"/>
- <token tokenid="ooxml:annotation"/>
- <token tokenid="ooxml:headerl"/>
- <token tokenid="ooxml:headerr"/>
- <token tokenid="ooxml:headerf"/>
- <token tokenid="ooxml:footerl"/>
- <token tokenid="ooxml:footerr"/>
- <token tokenid="ooxml:footerf"/>
-
- <!-- Present in RTF, but not in OOXML. -->
- <token tokenid="ooxml:CT_Settings_widowControl"/>
- <token tokenid="ooxml:CT_Settings_longerSpaceSequence"/>
-
- <namespace name="dml-stylesheet">
- <start name="theme"/>
- <start name="themeOverride"/>
- <start name="themeManager"/>
- <start name="hlinkClick"/>
- <grammar xmlns="http://relaxng.org/ns/structure/1.0" ns="http://schemas.openxmlformats.org/drawingml/2006/main">
- <include href="dml-baseStylesheet"/>
- <!-- start = theme | themeOverride | themeManager | hlinkClick -->
- <define name="CT_EmptyElement">
- </define>
- <define name="CT_ColorMapping">
- <element name="extLst">
- <ref name="CT_OfficeArtExtensionList"/>
- </element>
- <attribute name="bg1">
- <ref name="ST_ColorSchemeIndex"/>
- </attribute>
- <attribute name="tx1">
- <ref name="ST_ColorSchemeIndex"/>
- </attribute>
- <attribute name="bg2">
- <ref name="ST_ColorSchemeIndex"/>
- </attribute>
- <attribute name="tx2">
- <ref name="ST_ColorSchemeIndex"/>
- </attribute>
- <attribute name="accent1">
- <ref name="ST_ColorSchemeIndex"/>
- </attribute>
- <attribute name="accent2">
- <ref name="ST_ColorSchemeIndex"/>
- </attribute>
- <attribute name="accent3">
- <ref name="ST_ColorSchemeIndex"/>
- </attribute>
- <attribute name="accent4">
- <ref name="ST_ColorSchemeIndex"/>
- </attribute>
- <attribute name="accent5">
- <ref name="ST_ColorSchemeIndex"/>
- </attribute>
- <attribute name="accent6">
- <ref name="ST_ColorSchemeIndex"/>
- </attribute>
- <attribute name="hlink">
- <ref name="ST_ColorSchemeIndex"/>
- </attribute>
- <attribute name="folHlink">
- <ref name="ST_ColorSchemeIndex"/>
- </attribute>
- </define>
- <define name="CT_ColorMappingOverride">
- <choice>
- <element name="masterClrMapping">
- <ref name="CT_EmptyElement"/>
- </element>
- <element name="overrideClrMapping">
- <ref name="CT_ColorMapping"/>
- </element>
- </choice>
- </define>
- <define name="CT_ColorSchemeAndMapping">
- <element name="clrScheme">
- <ref name="CT_ColorScheme"/>
- </element>
- <element name="clrMap">
- <ref name="CT_ColorMapping"/>
- </element>
- </define>
- <define name="CT_ColorSchemeList">
- <element name="extraClrScheme">
- <ref name="CT_ColorSchemeAndMapping"/>
- </element>
- </define>
- <define name="CT_OfficeStyleSheet">
- <element name="themeElements">
- <ref name="CT_BaseStyles"/>
- </element>
- <element name="objectDefaults">
- <ref name="CT_ObjectStyleDefaults"/>
- </element>
- <element name="extraClrSchemeLst">
- <ref name="CT_ColorSchemeList"/>
- </element>
- <element name="custClrLst">
- <ref name="CT_CustomColorList"/>
- </element>
- <element name="extLst">
- <ref name="CT_OfficeArtExtensionList"/>
- </element>
- <attribute name="name">
- <data type="string"/>
- </attribute>
- </define>
- <define name="CT_BaseStylesOverride">
- <element name="clrScheme">
- <ref name="CT_ColorScheme"/>
- </element>
- <element name="fontScheme">
- <ref name="CT_FontScheme"/>
- </element>
- <element name="fmtScheme">
- <ref name="CT_StyleMatrix"/>
- </element>
- </define>
- <define name="CT_ClipboardStyleSheet">
- <element name="themeElements">
- <ref name="CT_BaseStyles"/>
- </element>
- <element name="clrMap">
- <ref name="CT_ColorMapping"/>
- </element>
- </define>
- <define name="CT_Hyperlink">
- <attribute name="r:id">
- <data type="string"/>
- </attribute>
- </define>
- <define name="theme">
- <element name="theme">
- <ref name="CT_OfficeStyleSheet"/>
- </element>
- </define>
- <define name="themeOverride">
- <element name="themeOverride">
- <ref name="CT_BaseStylesOverride"/>
- </element>
- </define>
- <define name="themeManager">
- <element name="themeManager">
- <ref name="CT_EmptyElement"/>
- </element>
- </define>
- <define name="hlinkClick">
- <element name="hlinkClick">
- <ref name="CT_Hyperlink"/>
- </element>
- </define>
- </grammar>
- <resource name="CT_OfficeStyleSheet" resource="Table" tokenid="ooxml:THEMETABLE"/>
- <resource name="CT_Hyperlink" resource="Properties">
- <attribute name="r:id" tokenid="ooxml:CT_Hyperlink_r_id"/>
- </resource>
- <resource name="theme" resource="Stream">
- <element name="theme" tokenid="ooxml:THEMETABLE"/>
- </resource>
- <resource name="themeOverride" resource="Stream"/>
- <resource name="themeManager" resource="Stream"/>
- <resource name="hlinkClick" resource="Properties">
- <element name="hlinkClick" tokenid="ooxml:hlinkClick_hlinkClick"/>
- </resource>
- </namespace>
- <namespace name="dml-styleDefaults">
- <grammar xmlns="http://relaxng.org/ns/structure/1.0" ns="http://schemas.openxmlformats.org/drawingml/2006/main">
- <include href="dml-shapeProperties"/>
- <define name="CT_DefaultShapeDefinition">
- <element name="spPr">
- <ref name="CT_ShapeProperties"/>
- </element>
- <element name="extLst">
- <ref name="CT_OfficeArtExtensionList"/>
- </element>
- </define>
- <define name="CT_ObjectStyleDefaults">
- <element name="spDef">
- <ref name="CT_DefaultShapeDefinition"/>
- </element>
- <element name="lnDef">
- <ref name="CT_DefaultShapeDefinition"/>
- </element>
- <element name="txDef">
- <ref name="CT_DefaultShapeDefinition"/>
- </element>
- <element name="extLst">
- <ref name="CT_OfficeArtExtensionList"/>
- </element>
- </define>
- </grammar>
- </namespace>
- <namespace name="dml-shape3DLighting">
- <grammar xmlns="http://relaxng.org/ns/structure/1.0" ns="http://schemas.openxmlformats.org/drawingml/2006/main">
- <define name="ST_LightRigDirection">
- <choice>
- <!-- Top Left -->
- <value>tl</value>
- <!-- Top -->
- <value>t</value>
- <!-- Top Right -->
- <value>tr</value>
- <!-- Left -->
- <value>l</value>
- <!-- Right -->
- <value>r</value>
- <!-- Bottom Left -->
- <value>bl</value>
- <!-- Bottom -->
- <value>b</value>
- <!-- Bottom Right -->
- <value>br</value>
- </choice>
- </define>
- <define name="ST_LightRigType">
- <choice>
- <!-- Legacy Flat 1 -->
- <value>legacyFlat1</value>
- <!-- Legacy Flat 2 -->
- <value>legacyFlat2</value>
- <!-- Legacy Flat 3 -->
- <value>legacyFlat3</value>
- <!-- Legacy Flat 4 -->
- <value>legacyFlat4</value>
- <!-- Legacy Normal 1 -->
- <value>legacyNormal1</value>
- <!-- Legacy Normal 2 -->
- <value>legacyNormal2</value>
- <!-- Legacy Normal 3 -->
- <value>legacyNormal3</value>
- <!-- Legacy Normal 4 -->
- <value>legacyNormal4</value>
- <!-- Legacy Harsh 1 -->
- <value>legacyHarsh1</value>
- <!-- Legacy Harsh 2 -->
- <value>legacyHarsh2</value>
- <!-- Legacy Harsh 3 -->
- <value>legacyHarsh3</value>
- <!-- Legacy Harsh 4 -->
- <value>legacyHarsh4</value>
- <!-- Three Point -->
- <value>threePt</value>
- <!-- Light Rig Enum ( Balanced ) -->
- <value>balanced</value>
- <!-- Soft -->
- <value>soft</value>
- <!-- Harsh -->
- <value>harsh</value>
- <!-- Flood -->
- <value>flood</value>
- <!-- Contrasting -->
- <value>contrasting</value>
- <!-- Morning -->
- <value>morning</value>
- <!-- Sunrise -->
- <value>sunrise</value>
- <!-- Sunset -->
- <value>sunset</value>
- <!-- Chilly -->
- <value>chilly</value>
- <!-- Freezing -->
- <value>freezing</value>
- <!-- Flat -->
- <value>flat</value>
- <!-- Two Point -->
- <value>twoPt</value>
- <!-- Glow -->
- <value>glow</value>
- <!-- Bright Room -->
- <value>brightRoom</value>
- </choice>
- </define>
- <define name="CT_LightRig">
- <element name="rot">
- <ref name="CT_SphereCoords"/>
- </element>
- <attribute name="rig">
- <ref name="ST_LightRigType"/>
- </attribute>
- <attribute name="dir">
- <ref name="ST_LightRigDirection"/>
- </attribute>
- </define>
- </grammar>
- <resource name="ST_LightRigDirection" resource="List">
- <value tokenid="ooxml:Value_drawingml_ST_LightRigDirection_tl">tl</value>
- <value tokenid="ooxml:Value_drawingml_ST_LightRigDirection_t">t</value>
- <value tokenid="ooxml:Value_drawingml_ST_LightRigDirection_tr">tr</value>
- <value tokenid="ooxml:Value_drawingml_ST_LightRigDirection_l">l</value>
- <value tokenid="ooxml:Value_drawingml_ST_LightRigDirection_r">r</value>
- <value tokenid="ooxml:Value_drawingml_ST_LightRigDirection_bl">bl</value>
- <value tokenid="ooxml:Value_drawingml_ST_LightRigDirection_b">b</value>
- <value tokenid="ooxml:Value_drawingml_ST_LightRigDirection_br">br</value>
- </resource>
- <resource name="ST_LightRigType" resource="List">
- <value tokenid="ooxml:Value_drawingml_ST_LightRigType_legacyFlat1">legacyFlat1</value>
- <value tokenid="ooxml:Value_drawingml_ST_LightRigType_legacyFlat2">legacyFlat2</value>
- <value tokenid="ooxml:Value_drawingml_ST_LightRigType_legacyFlat3">legacyFlat3</value>
- <value tokenid="ooxml:Value_drawingml_ST_LightRigType_legacyFlat4">legacyFlat4</value>
- <value tokenid="ooxml:Value_drawingml_ST_LightRigType_legacyNormal1">legacyNormal1</value>
- <value tokenid="ooxml:Value_drawingml_ST_LightRigType_legacyNormal2">legacyNormal2</value>
- <value tokenid="ooxml:Value_drawingml_ST_LightRigType_legacyNormal3">legacyNormal3</value>
- <value tokenid="ooxml:Value_drawingml_ST_LightRigType_legacyNormal4">legacyNormal4</value>
- <value tokenid="ooxml:Value_drawingml_ST_LightRigType_legacyHarsh1">legacyHarsh1</value>
- <value tokenid="ooxml:Value_drawingml_ST_LightRigType_legacyHarsh2">legacyHarsh2</value>
- <value tokenid="ooxml:Value_drawingml_ST_LightRigType_legacyHarsh3">legacyHarsh3</value>
- <value tokenid="ooxml:Value_drawingml_ST_LightRigType_legacyHarsh4">legacyHarsh4</value>
- <value tokenid="ooxml:Value_drawingml_ST_LightRigType_threePt">threePt</value>
- <value tokenid="ooxml:Value_drawingml_ST_LightRigType_balanced">balanced</value>
- <value tokenid="ooxml:Value_drawingml_ST_LightRigType_soft">soft</value>
- <value tokenid="ooxml:Value_drawingml_ST_LightRigType_harsh">harsh</value>
- <value tokenid="ooxml:Value_drawingml_ST_LightRigType_flood">flood</value>
- <value tokenid="ooxml:Value_drawingml_ST_LightRigType_contrasting">contrasting</value>
- <value tokenid="ooxml:Value_drawingml_ST_LightRigType_morning">morning</value>
- <value tokenid="ooxml:Value_drawingml_ST_LightRigType_sunrise">sunrise</value>
- <value tokenid="ooxml:Value_drawingml_ST_LightRigType_sunset">sunset</value>
- <value tokenid="ooxml:Value_drawingml_ST_LightRigType_chilly">chilly</value>
- <value tokenid="ooxml:Value_drawingml_ST_LightRigType_freezing">freezing</value>
- <value tokenid="ooxml:Value_drawingml_ST_LightRigType_flat">flat</value>
- <value tokenid="ooxml:Value_drawingml_ST_LightRigType_twoPt">twoPt</value>
- <value tokenid="ooxml:Value_drawingml_ST_LightRigType_glow">glow</value>
- <value tokenid="ooxml:Value_drawingml_ST_LightRigType_brightRoom">brightRoom</value>
- </resource>
- </namespace>
- <namespace name="dml-shape3DScene">
- <grammar xmlns="http://relaxng.org/ns/structure/1.0" ns="http://schemas.openxmlformats.org/drawingml/2006/main">
- <include href="dml-shape3DCamera"/>
- <include href="dml-shape3DLighting"/>
- <define name="CT_Scene3D">
- <element name="camera">
- <ref name="CT_Camera"/>
- </element>
- <element name="lightRig">
- <ref name="CT_LightRig"/>
- </element>
- <element name="extLst">
- <ref name="CT_OfficeArtExtensionList"/>
- </element>
- </define>
- </grammar>
- </namespace>
- <namespace name="dml-shape3DStyles">
- <grammar xmlns="http://relaxng.org/ns/structure/1.0" ns="http://schemas.openxmlformats.org/drawingml/2006/main">
- <include href="dml-shapeGeometry"/>
- <define name="ST_BevelPresetType">
- <choice>
- <!-- Relaxed Inset -->
- <value>relaxedInset</value>
- <!-- Circle -->
- <value>circle</value>
- <!-- Slope -->
- <value>slope</value>
- <!-- Cross -->
- <value>cross</value>
- <!-- Angle -->
- <value>angle</value>
- <!-- Soft Round -->
- <value>softRound</value>
- <!-- Convex -->
- <value>convex</value>
- <!-- Cool Slant -->
- <value>coolSlant</value>
- <!-- Divot -->
- <value>divot</value>
- <!-- Riblet -->
- <value>riblet</value>
- <!-- Hard Edge -->
- <value>hardEdge</value>
- <!-- Art Deco -->
- <value>artDeco</value>
- </choice>
- </define>
- <define name="CT_Bevel">
- <attribute name="w">
- <ref name="ST_PositiveCoordinate"/>
- </attribute>
- <attribute name="h">
- <ref name="ST_PositiveCoordinate"/>
- </attribute>
- <attribute name="prst">
- <ref name="ST_BevelPresetType"/>
- </attribute>
- </define>
- <define name="ST_PresetMaterialType">
- <choice>
- <!-- Legacy Matte -->
- <value>legacyMatte</value>
- <!-- Legacy Plastic -->
- <value>legacyPlastic</value>
- <!-- Legacy Metal -->
- <value>legacyMetal</value>
- <!-- Legacy Wireframe -->
- <value>legacyWireframe</value>
- <!-- Matte -->
- <value>matte</value>
- <!-- Plastic -->
- <value>plastic</value>
- <!-- Metal -->
- <value>metal</value>
- <!-- Warm Matte -->
- <value>warmMatte</value>
- <!-- Translucent Powder -->
- <value>translucentPowder</value>
- <!-- Powder -->
- <value>powder</value>
- <!-- Dark Edge -->
- <value>dkEdge</value>
- <!-- Soft Edge -->
- <value>softEdge</value>
- <!-- Clear -->
- <value>clear</value>
- <!-- Flat -->
- <value>flat</value>
- <!-- Soft Metal -->
- <value>softmetal</value>
- </choice>
- </define>
- <define name="CT_Shape3D">
- <element name="bevelT">
- <ref name="CT_Bevel"/>
- </element>
- <element name="bevelB">
- <ref name="CT_Bevel"/>
- </element>
- <element name="extrusionClr">
- <ref name="CT_Color"/>
- </element>
- <element name="contourClr">
- <ref name="CT_Color"/>
- </element>
- <element name="extLst">
- <ref name="CT_OfficeArtExtensionList"/>
- </element>
- <attribute name="z">
- <ref name="ST_Coordinate"/>
- </attribute>
- <attribute name="extrusionH">
- <ref name="ST_PositiveCoordinate"/>
- </attribute>
- <attribute name="contourW">
- <ref name="ST_PositiveCoordinate"/>
- </attribute>
- <attribute name="prstMaterial">
- <ref name="ST_PresetMaterialType"/>
- </attribute>
- </define>
- <define name="CT_FlatText">
- <attribute name="z">
- <ref name="ST_Coordinate"/>
- </attribute>
- </define>
- <define name="EG_Text3D">
- <choice>
- <element name="sp3d">
- <ref name="CT_Shape3D"/>
- </element>
- <element name="flatTx">
- <ref name="CT_FlatText"/>
- </element>
- </choice>
- </define>
- </grammar>
- <resource name="ST_BevelPresetType" resource="List">
- <value tokenid="ooxml:Value_drawingml_ST_BevelPresetType_relaxedInset">relaxedInset</value>
- <value tokenid="ooxml:Value_drawingml_ST_BevelPresetType_circle">circle</value>
- <value tokenid="ooxml:Value_drawingml_ST_BevelPresetType_slope">slope</value>
- <value tokenid="ooxml:Value_drawingml_ST_BevelPresetType_cross">cross</value>
- <value tokenid="ooxml:Value_drawingml_ST_BevelPresetType_angle">angle</value>
- <value tokenid="ooxml:Value_drawingml_ST_BevelPresetType_softRound">softRound</value>
- <value tokenid="ooxml:Value_drawingml_ST_BevelPresetType_convex">convex</value>
- <value tokenid="ooxml:Value_drawingml_ST_BevelPresetType_coolSlant">coolSlant</value>
- <value tokenid="ooxml:Value_drawingml_ST_BevelPresetType_divot">divot</value>
- <value tokenid="ooxml:Value_drawingml_ST_BevelPresetType_riblet">riblet</value>
- <value tokenid="ooxml:Value_drawingml_ST_BevelPresetType_hardEdge">hardEdge</value>
- <value tokenid="ooxml:Value_drawingml_ST_BevelPresetType_artDeco">artDeco</value>
- </resource>
- <resource name="ST_PresetMaterialType" resource="List">
- <value tokenid="ooxml:Value_drawingml_ST_PresetMaterialType_legacyMatte">legacyMatte</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetMaterialType_legacyPlastic">legacyPlastic</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetMaterialType_legacyMetal">legacyMetal</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetMaterialType_legacyWireframe">legacyWireframe</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetMaterialType_matte">matte</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetMaterialType_plastic">plastic</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetMaterialType_metal">metal</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetMaterialType_warmMatte">warmMatte</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetMaterialType_translucentPowder">translucentPowder</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetMaterialType_powder">powder</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetMaterialType_dkEdge">dkEdge</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetMaterialType_softEdge">softEdge</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetMaterialType_clear">clear</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetMaterialType_flat">flat</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetMaterialType_softmetal">softmetal</value>
- </resource>
- </namespace>
- <namespace name="dml-shape3DCamera">
- <grammar xmlns="http://relaxng.org/ns/structure/1.0" ns="http://schemas.openxmlformats.org/drawingml/2006/main">
- <define name="ST_PresetCameraType">
- <choice>
- <!-- Legacy Oblique Top Left -->
- <value>legacyObliqueTopLeft</value>
- <!-- Legacy Oblique Top -->
- <value>legacyObliqueTop</value>
- <!-- Legacy Oblique Top Right -->
- <value>legacyObliqueTopRight</value>
- <!-- Legacy Oblique Left -->
- <value>legacyObliqueLeft</value>
- <!-- Legacy Oblique Front -->
- <value>legacyObliqueFront</value>
- <!-- Legacy Oblique Right -->
- <value>legacyObliqueRight</value>
- <!-- Legacy Oblique Bottom Left -->
- <value>legacyObliqueBottomLeft</value>
- <!-- Legacy Oblique Bottom -->
- <value>legacyObliqueBottom</value>
- <!-- Legacy Oblique Bottom Right -->
- <value>legacyObliqueBottomRight</value>
- <!-- Legacy Perspective Top Left -->
- <value>legacyPerspectiveTopLeft</value>
- <!-- Legacy Perspective Top -->
- <value>legacyPerspectiveTop</value>
- <!-- Legacy Perspective Top Right -->
- <value>legacyPerspectiveTopRight</value>
- <!-- Legacy Perspective Left -->
- <value>legacyPerspectiveLeft</value>
- <!-- Legacy Perspective Front -->
- <value>legacyPerspectiveFront</value>
- <!-- Legacy Perspective Right -->
- <value>legacyPerspectiveRight</value>
- <!-- Legacy Perspective Bottom Left -->
- <value>legacyPerspectiveBottomLeft</value>
- <!-- Legacy Perspective Bottom -->
- <value>legacyPerspectiveBottom</value>
- <!-- Legacy Perspective Bottom Right -->
- <value>legacyPerspectiveBottomRight</value>
- <!-- Orthographic Front -->
- <value>orthographicFront</value>
- <!-- Isometric Top Up -->
- <value>isometricTopUp</value>
- <!-- Isometric Top Down -->
- <value>isometricTopDown</value>
- <!-- Isometric Bottom Up -->
- <value>isometricBottomUp</value>
- <!-- Isometric Bottom Down -->
- <value>isometricBottomDown</value>
- <!-- Isometric Left Up -->
- <value>isometricLeftUp</value>
- <!-- Isometric Left Down -->
- <value>isometricLeftDown</value>
- <!-- Isometric Right Up -->
- <value>isometricRightUp</value>
- <!-- Isometric Right Down -->
- <value>isometricRightDown</value>
- <!-- Isometric Off Axis 1 Left -->
- <value>isometricOffAxis1Left</value>
- <!-- Isometric Off Axis 1 Right -->
- <value>isometricOffAxis1Right</value>
- <!-- Isometric Off Axis 1 Top -->
- <value>isometricOffAxis1Top</value>
- <!-- Isometric Off Axis 2 Left -->
- <value>isometricOffAxis2Left</value>
- <!-- Isometric Off Axis 2 Right -->
- <value>isometricOffAxis2Right</value>
- <!-- Isometric Off Axis 2 Top -->
- <value>isometricOffAxis2Top</value>
- <!-- Isometric Off Axis 3 Left -->
- <value>isometricOffAxis3Left</value>
- <!-- Isometric Off Axis 3 Right -->
- <value>isometricOffAxis3Right</value>
- <!-- Isometric Off Axis 3 Bottom -->
- <value>isometricOffAxis3Bottom</value>
- <!-- Isometric Off Axis 4 Left -->
- <value>isometricOffAxis4Left</value>
- <!-- Isometric Off Axis 4 Right -->
- <value>isometricOffAxis4Right</value>
- <!-- Isometric Off Axis 4 Bottom -->
- <value>isometricOffAxis4Bottom</value>
- <!-- Oblique Top Left -->
- <value>obliqueTopLeft</value>
- <!-- Oblique Top -->
- <value>obliqueTop</value>
- <!-- Oblique Top Right -->
- <value>obliqueTopRight</value>
- <!-- Oblique Left -->
- <value>obliqueLeft</value>
- <!-- Oblique Right -->
- <value>obliqueRight</value>
- <!-- Oblique Bottom Left -->
- <value>obliqueBottomLeft</value>
- <!-- Oblique Bottom -->
- <value>obliqueBottom</value>
- <!-- Oblique Bottom Right -->
- <value>obliqueBottomRight</value>
- <!-- Perspective Front -->
- <value>perspectiveFront</value>
- <!-- Perspective Left -->
- <value>perspectiveLeft</value>
- <!-- Perspective Right -->
- <value>perspectiveRight</value>
- <!-- Orthographic Above -->
- <value>perspectiveAbove</value>
- <!-- Perspective Below -->
- <value>perspectiveBelow</value>
- <!-- Perspective Above Left Facing -->
- <value>perspectiveAboveLeftFacing</value>
- <!-- Perspective Above Right Facing -->
- <value>perspectiveAboveRightFacing</value>
- <!-- Perspective Contrasting Left Facing -->
- <value>perspectiveContrastingLeftFacing</value>
- <!-- Perspective Contrasting Right Facing -->
- <value>perspectiveContrastingRightFacing</value>
- <!-- Perspective Heroic Left Facing -->
- <value>perspectiveHeroicLeftFacing</value>
- <!-- Perspective Heroic Right Facing -->
- <value>perspectiveHeroicRightFacing</value>
- <!-- Perspective Heroic Extreme Left Facing -->
- <value>perspectiveHeroicExtremeLeftFacing</value>
- <!-- Perspective Heroic Extreme Right Facing -->
- <value>perspectiveHeroicExtremeRightFacing</value>
- <!-- Perspective Relaxed -->
- <value>perspectiveRelaxed</value>
- <!-- Perspective Relaxed Moderately -->
- <value>perspectiveRelaxedModerately</value>
- </choice>
- </define>
- <define name="ST_FOVAngle">
- </define>
- <define name="CT_Camera">
- <element name="rot">
- <ref name="CT_SphereCoords"/>
- </element>
- <attribute name="prst">
- <ref name="ST_PresetCameraType"/>
- </attribute>
- <attribute name="fov">
- <ref name="ST_FOVAngle"/>
- </attribute>
- <attribute name="zoom">
- <ref name="ST_PositivePercentage"/>
- </attribute>
- </define>
- </grammar>
- <resource name="ST_PresetCameraType" resource="List">
- <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_legacyObliqueTopLeft">legacyObliqueTopLeft</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_legacyObliqueTop">legacyObliqueTop</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_legacyObliqueTopRight">legacyObliqueTopRight</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_legacyObliqueLeft">legacyObliqueLeft</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_legacyObliqueFront">legacyObliqueFront</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_legacyObliqueRight">legacyObliqueRight</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_legacyObliqueBottomLeft">legacyObliqueBottomLeft</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_legacyObliqueBottom">legacyObliqueBottom</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_legacyObliqueBottomRight">legacyObliqueBottomRight</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_legacyPerspectiveTopLeft">legacyPerspectiveTopLeft</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_legacyPerspectiveTop">legacyPerspectiveTop</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_legacyPerspectiveTopRight">legacyPerspectiveTopRight</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_legacyPerspectiveLeft">legacyPerspectiveLeft</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_legacyPerspectiveFront">legacyPerspectiveFront</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_legacyPerspectiveRight">legacyPerspectiveRight</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_legacyPerspectiveBottomLeft">legacyPerspectiveBottomLeft</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_legacyPerspectiveBottom">legacyPerspectiveBottom</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_legacyPerspectiveBottomRight">legacyPerspectiveBottomRight</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_orthographicFront">orthographicFront</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_isometricTopUp">isometricTopUp</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_isometricTopDown">isometricTopDown</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_isometricBottomUp">isometricBottomUp</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_isometricBottomDown">isometricBottomDown</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_isometricLeftUp">isometricLeftUp</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_isometricLeftDown">isometricLeftDown</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_isometricRightUp">isometricRightUp</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_isometricRightDown">isometricRightDown</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_isometricOffAxis1Left">isometricOffAxis1Left</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_isometricOffAxis1Right">isometricOffAxis1Right</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_isometricOffAxis1Top">isometricOffAxis1Top</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_isometricOffAxis2Left">isometricOffAxis2Left</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_isometricOffAxis2Right">isometricOffAxis2Right</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_isometricOffAxis2Top">isometricOffAxis2Top</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_isometricOffAxis3Left">isometricOffAxis3Left</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_isometricOffAxis3Right">isometricOffAxis3Right</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_isometricOffAxis3Bottom">isometricOffAxis3Bottom</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_isometricOffAxis4Left">isometricOffAxis4Left</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_isometricOffAxis4Right">isometricOffAxis4Right</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_isometricOffAxis4Bottom">isometricOffAxis4Bottom</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_obliqueTopLeft">obliqueTopLeft</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_obliqueTop">obliqueTop</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_obliqueTopRight">obliqueTopRight</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_obliqueLeft">obliqueLeft</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_obliqueRight">obliqueRight</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_obliqueBottomLeft">obliqueBottomLeft</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_obliqueBottom">obliqueBottom</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_obliqueBottomRight">obliqueBottomRight</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_perspectiveFront">perspectiveFront</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_perspectiveLeft">perspectiveLeft</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_perspectiveRight">perspectiveRight</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_perspectiveAbove">perspectiveAbove</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_perspectiveBelow">perspectiveBelow</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_perspectiveAboveLeftFacing">perspectiveAboveLeftFacing</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_perspectiveAboveRightFacing">perspectiveAboveRightFacing</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_perspectiveContrastingLeftFacing">perspectiveContrastingLeftFacing</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_perspectiveContrastingRightFacing">perspectiveContrastingRightFacing</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_perspectiveHeroicLeftFacing">perspectiveHeroicLeftFacing</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_perspectiveHeroicRightFacing">perspectiveHeroicRightFacing</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_perspectiveHeroicExtremeLeftFacing">perspectiveHeroicExtremeLeftFacing</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_perspectiveHeroicExtremeRightFacing">perspectiveHeroicExtremeRightFacing</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_perspectiveRelaxed">perspectiveRelaxed</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetCameraType_perspectiveRelaxedModerately">perspectiveRelaxedModerately</value>
- </resource>
- </namespace>
- <namespace name="dml-baseStylesheet">
- <grammar xmlns="http://relaxng.org/ns/structure/1.0" ns="http://schemas.openxmlformats.org/drawingml/2006/main">
- <!-- ISO RELAX NG Schema -->
- <define name="ST_ColorSchemeIndex">
- <choice>
- <!-- Dark 1 -->
- <value>dk1</value>
- <!-- Light 1 -->
- <value>lt1</value>
- <!-- Dark 2 -->
- <value>dk2</value>
- <!-- Light 2 -->
- <value>lt2</value>
- <!-- Accent 1 -->
- <value>accent1</value>
- <!-- Accent 2 -->
- <value>accent2</value>
- <!-- Accent 3 -->
- <value>accent3</value>
- <!-- Accent 4 -->
- <value>accent4</value>
- <!-- Accent 5 -->
- <value>accent5</value>
- <!-- Accent 6 -->
- <value>accent6</value>
- <!-- Hyperlink -->
- <value>hlink</value>
- <!-- Followed Hyperlink -->
- <value>folHlink</value>
- </choice>
- </define>
- <define name="CT_ColorScheme">
- <element name="dk1">
- <ref name="CT_Color"/>
- </element>
- <element name="lt1">
- <ref name="CT_Color"/>
- </element>
- <element name="dk2">
- <ref name="CT_Color"/>
- </element>
- <element name="lt2">
- <ref name="CT_Color"/>
- </element>
- <element name="accent1">
- <ref name="CT_Color"/>
- </element>
- <element name="accent2">
- <ref name="CT_Color"/>
- </element>
- <element name="accent3">
- <ref name="CT_Color"/>
- </element>
- <element name="accent4">
- <ref name="CT_Color"/>
- </element>
- <element name="accent5">
- <ref name="CT_Color"/>
- </element>
- <element name="accent6">
- <ref name="CT_Color"/>
- </element>
- <element name="hlink">
- <ref name="CT_Color"/>
- </element>
- <element name="folHlink">
- <ref name="CT_Color"/>
- </element>
- <element name="extLst">
- <ref name="CT_OfficeArtExtensionList"/>
- </element>
- <attribute name="name">
- <data type="string">
- </data>
- </attribute>
- </define>
- <define name="CT_CustomColor">
- <ref name="EG_ColorChoice"/>
- <attribute name="name">
- <data type="string">
- </data>
- </attribute>
- </define>
- <define name="CT_SupplementalFont">
- <attribute name="script">
- <data type="string">
- </data>
- </attribute>
- <attribute name="typeface">
- <ref name="ST_TextTypeface"/>
- <data type="string">
- </data>
- </attribute>
- </define>
- <define name="CT_CustomColorList">
- <element name="custClr">
- <ref name="CT_CustomColor"/>
- </element>
- </define>
- <define name="CT_FontCollection">
- <element name="latin">
- <ref name="CT_TextFont"/>
- </element>
- <element name="ea">
- <ref name="CT_TextFont"/>
- </element>
- <element name="cs">
- <ref name="CT_TextFont"/>
- </element>
- <element name="font">
- <ref name="CT_SupplementalFont"/>
- </element>
- <element name="extLst">
- <ref name="CT_OfficeArtExtensionList"/>
- </element>
- </define>
- <define name="CT_EffectStyleItem">
- <ref name="EG_EffectProperties"/>
- <element name="scene3d">
- <ref name="CT_Scene3D"/>
- </element>
- <element name="sp3d">
- <ref name="CT_Shape3D"/>
- </element>
- </define>
- <define name="CT_FontScheme">
- <element name="majorFont">
- <ref name="CT_FontCollection"/>
- </element>
- <element name="minorFont">
- <ref name="CT_FontCollection"/>
- </element>
- <element name="extLst">
- <ref name="CT_OfficeArtExtensionList"/>
- </element>
- <attribute name="name">
- <data type="string"/>
- </attribute>
- </define>
- <define name="CT_FillStyleList">
- <ref name="EG_FillProperties"/>
- </define>
- <define name="CT_LineStyleList">
- <element name="ln">
- <ref name="CT_LineProperties"/>
- </element>
- </define>
- <define name="CT_EffectStyleList">
- <element name="effectStyle">
- <ref name="CT_EffectStyleItem"/>
- </element>
- </define>
- <define name="CT_BackgroundFillStyleList">
- <ref name="EG_FillProperties"/>
- </define>
- <define name="CT_StyleMatrix">
- <element name="fillStyleLst">
- <ref name="CT_FillStyleList"/>
- </element>
- <element name="lnStyleLst">
- <ref name="CT_LineStyleList"/>
- </element>
- <element name="effectStyleLst">
- <ref name="CT_EffectStyleList"/>
- </element>
- <element name="bgFillStyleLst">
- <ref name="CT_BackgroundFillStyleList"/>
- </element>
- <attribute name="name">
- <data type="string"/>
- </attribute>
- </define>
- <define name="CT_BaseStyles">
- <element name="clrScheme">
- <ref name="CT_ColorScheme"/>
- </element>
- <element name="fontScheme">
- <ref name="CT_FontScheme"/>
- </element>
- <element name="fmtScheme">
- <ref name="CT_StyleMatrix"/>
- </element>
- <element name="extLst">
- <ref name="CT_OfficeArtExtensionList"/>
- </element>
- </define>
- </grammar>
- <resource name="ST_ColorSchemeIndex" resource="List">
- <value tokenid="ooxml:Value_drawingml_ST_ColorSchemeIndex_dk1">dk1</value>
- <value tokenid="ooxml:Value_drawingml_ST_ColorSchemeIndex_lt1">lt1</value>
- <value tokenid="ooxml:Value_drawingml_ST_ColorSchemeIndex_dk2">dk2</value>
- <value tokenid="ooxml:Value_drawingml_ST_ColorSchemeIndex_lt2">lt2</value>
- <value tokenid="ooxml:Value_drawingml_ST_ColorSchemeIndex_accent1">accent1</value>
- <value tokenid="ooxml:Value_drawingml_ST_ColorSchemeIndex_accent2">accent2</value>
- <value tokenid="ooxml:Value_drawingml_ST_ColorSchemeIndex_accent3">accent3</value>
- <value tokenid="ooxml:Value_drawingml_ST_ColorSchemeIndex_accent4">accent4</value>
- <value tokenid="ooxml:Value_drawingml_ST_ColorSchemeIndex_accent5">accent5</value>
- <value tokenid="ooxml:Value_drawingml_ST_ColorSchemeIndex_accent6">accent6</value>
- <value tokenid="ooxml:Value_drawingml_ST_ColorSchemeIndex_hlink">hlink</value>
- <value tokenid="ooxml:Value_drawingml_ST_ColorSchemeIndex_folHlink">folHlink</value>
- </resource>
- <resource name="CT_ColorScheme" resource="Properties">
- <element name="dk1" tokenid="ooxml:CT_ColorScheme_dk1"/>
- <element name="lt1" tokenid="ooxml:CT_ColorScheme_lt1"/>
- <element name="dk2" tokenid="ooxml:CT_ColorScheme_dk2"/>
- <element name="lt2" tokenid="ooxml:CT_ColorScheme_lt2"/>
- <element name="accent1" tokenid="ooxml:CT_ColorScheme_accent1"/>
- <element name="accent2" tokenid="ooxml:CT_ColorScheme_accent2"/>
- <element name="accent3" tokenid="ooxml:CT_ColorScheme_accent3"/>
- <element name="accent4" tokenid="ooxml:CT_ColorScheme_accent4"/>
- <element name="accent5" tokenid="ooxml:CT_ColorScheme_accent5"/>
- <element name="accent6" tokenid="ooxml:CT_ColorScheme_accent6"/>
- <element name="hlink" tokenid="ooxml:CT_ColorScheme_hlink"/>
- <element name="folHlink" tokenid="ooxml:CT_ColorScheme_folHlink"/>
- <element name="extLst" tokenid="ooxml:CT_ColorScheme_extLst"/>
- <attribute name="name" tokenid="ooxml:CT_ColorScheme_name"/>
- </resource>
- <resource name="CT_SupplementalFont" resource="Properties">
- <attribute name="script" tokenid="ooxml:CT_SupplementalFont_script"/>
- <attribute name="typeface" tokenid="ooxml:CT_SupplementalFont_typeface"/>
- </resource>
- <resource name="CT_FontCollection" resource="Properties">
- <element name="latin" tokenid="ooxml:CT_FontCollection_latin"/>
- <element name="ea" tokenid="ooxml:CT_FontCollection_ea"/>
- <element name="cs" tokenid="ooxml:CT_FontCollection_cs"/>
- <element name="font" tokenid="ooxml:CT_FontCollection_font"/>
- <element name="extLst" tokenid="ooxml:CT_FontCollection_extLst"/>
- </resource>
- <resource name="CT_FontScheme" resource="Properties">
- <element name="majorFont" tokenid="ooxml:CT_FontScheme_majorFont"/>
- <element name="minorFont" tokenid="ooxml:CT_FontScheme_minorFont"/>
- <element name="extLst" tokenid="ooxml:CT_FontScheme_extLst"/>
- <attribute name="name" tokenid="ooxml:CT_FontScheme_name"/>
- </resource>
- <resource name="CT_FillStyleList" resource="Properties"/>
- <resource name="CT_LineStyleList" resource="Properties">
- <element name="ln" tokenid="ooxml:CT_LineStyleList_ln"/>
- </resource>
- <resource name="CT_EffectStyleList" resource="Properties">
- <element name="effectStyle" tokenid="ooxml:CT_EffectStyleList_effectStyle"/>
- </resource>
- <resource name="CT_BackgroundFillStyleList" resource="Properties"/>
- <resource name="CT_StyleMatrix" resource="Properties">
- <element name="fillStyleLst" tokenid="ooxml:CT_StyleMatrix_fillStyleLst"/>
- <element name="lnStyleLst" tokenid="ooxml:CT_StyleMatrix_lnStyleLst"/>
- <element name="effectStyleLst" tokenid="ooxml:CT_StyleMatrix_effectStyleLst"/>
- <element name="bgFillStyleLst" tokenid="ooxml:CT_StyleMatrix_bgFillStyleLst"/>
- <attribute name="name" tokenid="ooxml:CT_StyleMatrix_name"/>
- </resource>
- <resource name="CT_BaseStyles" resource="Properties">
- <element name="clrScheme" tokenid="ooxml:CT_BaseStyles_clrScheme"/>
- <element name="fontScheme" tokenid="ooxml:CT_BaseStyles_fontScheme"/>
- <element name="fmtScheme" tokenid="ooxml:CT_BaseStyles_fmtScheme"/>
- <element name="extLst" tokenid="ooxml:CT_BaseStyles_extLst"/>
- </resource>
- </namespace>
- <namespace name="dml-textCharacter">
- <grammar xmlns="http://relaxng.org/ns/structure/1.0" ns="http://schemas.openxmlformats.org/drawingml/2006/main">
- <include href="dml-shapeEffects"/>
- <include href="dml-shapeLineProperties"/>
- <define name="ST_TextPoint">
- <data type="int"/>
- </define>
- <define name="ST_TextNonNegativePoint">
- <data type="int"/>
- </define>
- <define name="ST_TextFontSize">
- <data type="int"/>
- </define>
- <define name="ST_Panose">
- <data type="hexBinary"/>
- </define>
- <define name="ST_TextTypeface">
- <data type="string"/>
- </define>
- <define name="CT_TextFont">
- <attribute name="typeface">
- <ref name="ST_TextTypeface"/>
- </attribute>
- <attribute name="panose">
- <ref name="ST_Panose"/>
- </attribute>
- <attribute name="pitchFamily">
- <data type="byte"/>
- </attribute>
- <attribute name="charset">
- <data type="byte"/>
- </attribute>
- </define>
- <define name="ST_TextLanguageID">
- <data type="string"/>
- </define>
- <define name="ST_TextUnderlineType">
- <choice>
- <!-- Text Underline Enum ( None ) -->
- <value>none</value>
- <!-- Text Underline Enum ( Words ) -->
- <value>words</value>
- <!-- Text Underline Enum ( Single ) -->
- <value>sng</value>
- <!-- Text Underline Enum ( Double ) -->
- <value>dbl</value>
- <!-- Text Underline Enum ( Heavy ) -->
- <value>heavy</value>
- <!-- Text Underline Enum ( Dotted ) -->
- <value>dotted</value>
- <!-- Text Underline Enum ( Heavy Dotted ) -->
- <value>dottedHeavy</value>
- <!-- Text Underline Enum ( Dashed ) -->
- <value>dash</value>
- <!-- Text Underline Enum ( Heavy Dashed ) -->
- <value>dashHeavy</value>
- <!-- Text Underline Enum ( Long Dashed ) -->
- <value>dashLong</value>
- <!-- Text Underline Enum ( Heavy Long Dashed ) -->
- <value>dashLongHeavy</value>
- <!-- Text Underline Enum ( Dot Dash ) -->
- <value>dotDash</value>
- <!-- Text Underline Enum ( Heavy Dot Dash ) -->
- <value>dotDashHeavy</value>
- <!-- Text Underline Enum ( Dot Dot Dash ) -->
- <value>dotDotDash</value>
- <!-- Text Underline Enum ( Heavy Dot Dot Dash ) -->
- <value>dotDotDashHeavy</value>
- <!-- Text Underline Enum ( Wavy ) -->
- <value>wavy</value>
- <!-- Text Underline Enum ( Heavy Wavy ) -->
- <value>wavyHeavy</value>
- <!-- Text Underline Enum ( Double Wavy ) -->
- <value>wavyDbl</value>
- </choice>
- </define>
- <define name="CT_TextUnderlineLineFollowText">
- </define>
- <define name="CT_TextUnderlineFillFollowText">
- </define>
- <define name="CT_TextUnderlineFillGroupWrapper">
- <ref name="EG_FillProperties"/>
- </define>
- <define name="EG_TextUnderlineLine">
- <choice>
- <element name="uLnTx">
- <ref name="CT_TextUnderlineLineFollowText"/>
- </element>
- <element name="uLn">
- <ref name="CT_LineProperties"/>
- </element>
- </choice>
- </define>
- <define name="EG_TextUnderlineFill">
- <choice>
- <element name="uFillTx">
- <ref name="CT_TextUnderlineFillFollowText"/>
- </element>
- <element name="uFill">
- <ref name="CT_TextUnderlineFillGroupWrapper"/>
- </element>
- </choice>
- </define>
- <define name="ST_TextStrikeType">
- <choice>
- <!-- Text Strike Enum ( No Strike ) -->
- <value>noStrike</value>
- <!-- Text Strike Enum ( Single Strike ) -->
- <value>sngStrike</value>
- <!-- Text Strike Enum ( Double Strike ) -->
- <value>dblStrike</value>
- </choice>
- </define>
- <define name="ST_TextCapsType">
- <choice>
- <!-- Text Caps Enum ( None ) -->
- <value>none</value>
- <!-- Text Caps Enum ( Small ) -->
- <value>small</value>
- <!-- Text Caps Enum ( All ) -->
- <value>all</value>
- </choice>
- </define>
- <define name="CT_TextCharacterProperties">
- <element name="ln">
- <ref name="CT_LineProperties"/>
- </element>
- <ref name="EG_FillProperties"/>
- <ref name="EG_EffectProperties"/>
- <element name="highlight">
- <ref name="CT_Color"/>
- </element>
- <ref name="EG_TextUnderlineLine"/>
- <ref name="EG_TextUnderlineFill"/>
- <element name="latin">
- <ref name="CT_TextFont"/>
- </element>
- <element name="ea">
- <ref name="CT_TextFont"/>
- </element>
- <element name="cs">
- <ref name="CT_TextFont"/>
- </element>
- <element name="sym">
- <ref name="CT_TextFont"/>
- </element>
- <element name="hlinkClick">
- <ref name="CT_Hyperlink"/>
- </element>
- <element name="hlinkMouseOver">
- <ref name="CT_Hyperlink"/>
- </element>
- <element name="extLst">
- <ref name="CT_OfficeArtExtensionList"/>
- </element>
- <attribute name="kumimoji">
- <data type="boolean"/>
- </attribute>
- <attribute name="lang">
- <ref name="ST_TextLanguageID"/>
- </attribute>
- <attribute name="altLang">
- <ref name="ST_TextLanguageID"/>
- </attribute>
- <attribute name="sz">
- <ref name="ST_TextFontSize"/>
- </attribute>
- <attribute name="b">
- <data type="boolean"/>
- </attribute>
- <attribute name="i">
- <data type="boolean"/>
- </attribute>
- <attribute name="u">
- <ref name="ST_TextUnderlineType"/>
- </attribute>
- <attribute name="strike">
- <ref name="ST_TextStrikeType"/>
- </attribute>
- <attribute name="kern">
- <ref name="ST_TextNonNegativePoint"/>
- </attribute>
- <attribute name="cap">
- <ref name="ST_TextCapsType"/>
- </attribute>
- <attribute name="spc">
- <ref name="ST_TextPoint"/>
- </attribute>
- <attribute name="normalizeH">
- <data type="boolean"/>
- </attribute>
- <attribute name="baseline">
- <ref name="ST_Percentage"/>
- </attribute>
- <attribute name="noProof">
- <data type="boolean"/>
- </attribute>
- <attribute name="dirty">
- <data type="boolean"/>
- </attribute>
- <attribute name="err">
- <data type="boolean"/>
- </attribute>
- <attribute name="smtClean">
- <data type="boolean"/>
- </attribute>
- <attribute name="smtId">
- <data type="unsignedInt"/>
- </attribute>
- <attribute name="bmk">
- <data type="string"/>
- </attribute>
- </define>
- </grammar>
- <resource name="ST_TextPoint" resource="Integer"/>
- <resource name="ST_TextNonNegativePoint" resource="Integer"/>
- <resource name="ST_TextFontSize" resource="Integer"/>
- <resource name="ST_Panose" resource="Hex"/>
- <resource name="ST_TextTypeface" resource="String"/>
- <resource name="CT_TextFont" resource="Properties">
- <attribute name="typeface" tokenid="ooxml:CT_TextFont_typeface"/>
- <attribute name="panose" tokenid="ooxml:CT_TextFont_panose"/>
- <attribute name="pitchFamily" tokenid="ooxml:CT_TextFont_pitchFamily"/>
- <attribute name="charset" tokenid="ooxml:CT_TextFont_charset"/>
- </resource>
- <resource name="ST_TextLanguageID" resource="String"/>
- <resource name="ST_TextUnderlineType" resource="List">
- <value tokenid="ooxml:Value_drawingml_ST_TextUnderlineType_none">none</value>
- <value tokenid="ooxml:Value_drawingml_ST_TextUnderlineType_words">words</value>
- <value tokenid="ooxml:Value_drawingml_ST_TextUnderlineType_sng">sng</value>
- <value tokenid="ooxml:Value_drawingml_ST_TextUnderlineType_dbl">dbl</value>
- <value tokenid="ooxml:Value_drawingml_ST_TextUnderlineType_heavy">heavy</value>
- <value tokenid="ooxml:Value_drawingml_ST_TextUnderlineType_dotted">dotted</value>
- <value tokenid="ooxml:Value_drawingml_ST_TextUnderlineType_dottedHeavy">dottedHeavy</value>
- <value tokenid="ooxml:Value_drawingml_ST_TextUnderlineType_dash">dash</value>
- <value tokenid="ooxml:Value_drawingml_ST_TextUnderlineType_dashHeavy">dashHeavy</value>
- <value tokenid="ooxml:Value_drawingml_ST_TextUnderlineType_dashLong">dashLong</value>
- <value tokenid="ooxml:Value_drawingml_ST_TextUnderlineType_dashLongHeavy">dashLongHeavy</value>
- <value tokenid="ooxml:Value_drawingml_ST_TextUnderlineType_dotDash">dotDash</value>
- <value tokenid="ooxml:Value_drawingml_ST_TextUnderlineType_dotDashHeavy">dotDashHeavy</value>
- <value tokenid="ooxml:Value_drawingml_ST_TextUnderlineType_dotDotDash">dotDotDash</value>
- <value tokenid="ooxml:Value_drawingml_ST_TextUnderlineType_dotDotDashHeavy">dotDotDashHeavy</value>
- <value tokenid="ooxml:Value_drawingml_ST_TextUnderlineType_wavy">wavy</value>
- <value tokenid="ooxml:Value_drawingml_ST_TextUnderlineType_wavyHeavy">wavyHeavy</value>
- <value tokenid="ooxml:Value_drawingml_ST_TextUnderlineType_wavyDbl">wavyDbl</value>
- </resource>
- <resource name="ST_TextStrikeType" resource="List">
- <value tokenid="ooxml:Value_drawingml_ST_TextStrikeType_noStrike">noStrike</value>
- <value tokenid="ooxml:Value_drawingml_ST_TextStrikeType_sngStrike">sngStrike</value>
- <value tokenid="ooxml:Value_drawingml_ST_TextStrikeType_dblStrike">dblStrike</value>
- </resource>
- <resource name="ST_TextCapsType" resource="List">
- <value tokenid="ooxml:Value_drawingml_ST_TextCapsType_none">none</value>
- <value tokenid="ooxml:Value_drawingml_ST_TextCapsType_small">small</value>
- <value tokenid="ooxml:Value_drawingml_ST_TextCapsType_all">all</value>
- </resource>
- </namespace>
- <namespace name="dml-shapeEffects">
- <grammar xmlns="http://relaxng.org/ns/structure/1.0" ns="http://schemas.openxmlformats.org/drawingml/2006/main">
- <!-- start = blip -->
- <define name="CT_AlphaBiLevelEffect">
- <attribute name="thresh">
- <ref name="ST_PositiveFixedPercentage"/>
- </attribute>
- </define>
- <define name="CT_AlphaCeilingEffect">
- </define>
- <define name="CT_AlphaFloorEffect">
- </define>
- <define name="CT_AlphaInverseEffect">
- <ref name="EG_ColorChoice"/>
- </define>
- <define name="CT_AlphaModulateFixedEffect">
- <attribute name="amt">
- <ref name="ST_PositivePercentage"/>
- </attribute>
- </define>
- <define name="CT_AlphaOutsetEffect">
- <attribute name="rad">
- <ref name="ST_Coordinate"/>
- </attribute>
- </define>
- <define name="CT_AlphaReplaceEffect">
- <attribute name="a">
- <ref name="ST_PositiveFixedPercentage"/>
- </attribute>
- </define>
- <define name="CT_BiLevelEffect">
- <attribute name="thresh">
- <ref name="ST_PositiveFixedPercentage"/>
- </attribute>
- </define>
- <define name="CT_BlurEffect">
- <attribute name="rad">
- <ref name="ST_PositiveCoordinate"/>
- </attribute>
- <attribute name="grow">
- <data type="boolean"/>
- </attribute>
- </define>
- <define name="CT_ColorChangeEffect">
- <element name="clrFrom">
- <ref name="CT_Color"/>
- </element>
- <element name="clrTo">
- <ref name="CT_Color"/>
- </element>
- <attribute name="useA">
- <data type="boolean"/>
- </attribute>
- </define>
- <define name="CT_ColorReplaceEffect">
- <ref name="EG_ColorChoice"/>
- </define>
- <define name="CT_DuotoneEffect">
- <ref name="EG_ColorChoice"/>
- </define>
- <define name="CT_GlowEffect">
- <ref name="EG_ColorChoice"/>
- <attribute name="rad">
- <ref name="ST_PositiveCoordinate"/>
- </attribute>
- </define>
- <define name="CT_GrayscaleEffect">
- </define>
- <define name="CT_HSLEffect">
- <attribute name="hue">
- <ref name="ST_PositiveFixedAngle"/>
- </attribute>
- <attribute name="sat">
- <ref name="ST_FixedPercentage"/>
- </attribute>
- <attribute name="lum">
- <ref name="ST_FixedPercentage"/>
- </attribute>
- </define>
- <define name="CT_InnerShadowEffect">
- <ref name="EG_ColorChoice"/>
- <attribute name="blurRad">
- <ref name="ST_PositiveCoordinate"/>
- </attribute>
- <attribute name="dist">
- <ref name="ST_PositiveCoordinate"/>
- </attribute>
- <attribute name="dir">
- <ref name="ST_PositiveFixedAngle"/>
- </attribute>
- </define>
- <define name="CT_LuminanceEffect">
- <attribute name="bright">
- <ref name="ST_FixedPercentage"/>
- </attribute>
- <attribute name="contrast">
- <ref name="ST_FixedPercentage"/>
- </attribute>
- </define>
- <define name="CT_OuterShadowEffect">
- <ref name="EG_ColorChoice"/>
- <attribute name="blurRad">
- <ref name="ST_PositiveCoordinate"/>
- </attribute>
- <attribute name="dist">
- <ref name="ST_PositiveCoordinate"/>
- </attribute>
- <attribute name="dir">
- <ref name="ST_PositiveFixedAngle"/>
- </attribute>
- <attribute name="sx">
- <ref name="ST_Percentage"/>
- </attribute>
- <attribute name="sy">
- <ref name="ST_Percentage"/>
- </attribute>
- <attribute name="kx">
- <ref name="ST_FixedAngle"/>
- </attribute>
- <attribute name="ky">
- <ref name="ST_FixedAngle"/>
- </attribute>
- <attribute name="algn">
- <ref name="ST_RectAlignment"/>
- </attribute>
- <attribute name="rotWithShape">
- <data type="boolean"/>
- </attribute>
- </define>
- <define name="ST_PresetShadowVal">
- <choice>
- <!-- Top Left Drop Shadow -->
- <value>shdw1</value>
- <!-- Top Right Drop Shadow -->
- <value>shdw2</value>
- <!-- Back Left Perspective Shadow -->
- <value>shdw3</value>
- <!-- Back Right Perspective Shadow -->
- <value>shdw4</value>
- <!-- Bottom Left Drop Shadow -->
- <value>shdw5</value>
- <!-- Bottom Right Drop Shadow -->
- <value>shdw6</value>
- <!-- Front Left Perspective Shadow -->
- <value>shdw7</value>
- <!-- Front Right Perspective Shadow -->
- <value>shdw8</value>
- <!-- Top Left Small Drop Shadow -->
- <value>shdw9</value>
- <!-- Top Left Large Drop Shadow -->
- <value>shdw10</value>
- <!-- Back Left Long Perspective Shadow -->
- <value>shdw11</value>
- <!-- Back Right Long Perspective Shadow -->
- <value>shdw12</value>
- <!-- Top Left Double Drop Shadow -->
- <value>shdw13</value>
- <!-- Bottom Right Small Drop Shadow -->
- <value>shdw14</value>
- <!-- Front Left Long Perspective Shadow -->
- <value>shdw15</value>
- <!-- Front Right LongPerspective Shadow -->
- <value>shdw16</value>
- <!-- 3D Outer Box Shadow -->
- <value>shdw17</value>
- <!-- 3D Inner Box Shadow -->
- <value>shdw18</value>
- <!-- Back Center Perspective Shadow -->
- <value>shdw19</value>
- <!-- Front Bottom Shadow -->
- <value>shdw20</value>
- </choice>
- </define>
- <define name="CT_PresetShadowEffect">
- <ref name="EG_ColorChoice"/>
- <attribute name="prst">
- <ref name="ST_PresetShadowVal"/>
- </attribute>
- <attribute name="dist">
- <ref name="ST_PositiveCoordinate"/>
- </attribute>
- <attribute name="dir">
- <ref name="ST_PositiveFixedAngle"/>
- </attribute>
- </define>
- <define name="CT_ReflectionEffect">
- <attribute name="blurRad">
- <ref name="ST_PositiveCoordinate"/>
- </attribute>
- <attribute name="stA">
- <ref name="ST_PositiveFixedPercentage"/>
- </attribute>
- <attribute name="stPos">
- <ref name="ST_PositiveFixedPercentage"/>
- </attribute>
- <attribute name="endA">
- <ref name="ST_PositiveFixedPercentage"/>
- </attribute>
- <attribute name="endPos">
- <ref name="ST_PositiveFixedPercentage"/>
- </attribute>
- <attribute name="dist">
- <ref name="ST_PositiveCoordinate"/>
- </attribute>
- <attribute name="dir">
- <ref name="ST_PositiveFixedAngle"/>
- </attribute>
- <attribute name="fadeDir">
- <ref name="ST_PositiveFixedAngle"/>
- </attribute>
- <attribute name="sx">
- <ref name="ST_Percentage"/>
- </attribute>
- <attribute name="sy">
- <ref name="ST_Percentage"/>
- </attribute>
- <attribute name="kx">
- <ref name="ST_FixedAngle"/>
- </attribute>
- <attribute name="ky">
- <ref name="ST_FixedAngle"/>
- </attribute>
- <attribute name="algn">
- <ref name="ST_RectAlignment"/>
- </attribute>
- <attribute name="rotWithShape">
- <data type="boolean"/>
- </attribute>
- </define>
- <define name="CT_RelativeOffsetEffect">
- <attribute name="tx">
- <ref name="ST_Percentage"/>
- </attribute>
- <attribute name="ty">
- <ref name="ST_Percentage"/>
- </attribute>
- </define>
- <define name="CT_SoftEdgesEffect">
- <attribute name="rad">
- <ref name="ST_PositiveCoordinate"/>
- </attribute>
- </define>
- <define name="CT_TintEffect">
- <attribute name="hue">
- <ref name="ST_PositiveFixedAngle"/>
- </attribute>
- <attribute name="amt">
- <ref name="ST_FixedPercentage"/>
- </attribute>
- </define>
- <define name="CT_TransformEffect">
- <attribute name="sx">
- <ref name="ST_Percentage"/>
- </attribute>
- <attribute name="sy">
- <ref name="ST_Percentage"/>
- </attribute>
- <attribute name="kx">
- <ref name="ST_FixedAngle"/>
- </attribute>
- <attribute name="ky">
- <ref name="ST_FixedAngle"/>
- </attribute>
- <attribute name="tx">
- <ref name="ST_Percentage"/>
- </attribute>
- <attribute name="ty">
- <ref name="ST_Percentage"/>
- </attribute>
- </define>
- <define name="CT_NoFillProperties">
- </define>
- <define name="CT_SolidColorFillProperties">
- <ref name="EG_ColorChoice"/>
- </define>
- <define name="CT_LinearShadeProperties">
- <attribute name="ang">
- <ref name="ST_PositiveFixedAngle"/>
- </attribute>
- <attribute name="scaled">
- <data type="boolean"/>
- </attribute>
- </define>
- <define name="ST_PathShadeType">
- <choice>
- <!-- Shape -->
- <value>shape</value>
- <!-- Circle -->
- <value>circle</value>
- <!-- Rectangle -->
- <value>rect</value>
- </choice>
- </define>
- <define name="CT_PathShadeProperties">
- <element name="fillToRect">
- <ref name="CT_RelativeRect"/>
- </element>
- <attribute name="path">
- <ref name="ST_PathShadeType"/>
- </attribute>
- </define>
- <define name="EG_ShadeProperties">
- <choice>
- <element name="lin">
- <ref name="CT_LinearShadeProperties"/>
- </element>
- <element name="path">
- <ref name="CT_PathShadeProperties"/>
- </element>
- </choice>
- </define>
- <define name="ST_TileFlipMode">
- <choice>
- <!-- None -->
- <value>none</value>
- <!-- Horizontal -->
- <value>x</value>
- <!-- Vertical -->
- <value>y</value>
- <!-- Horizontal and Vertical -->
- <value>xy</value>
- </choice>
- </define>
- <define name="CT_GradientStop">
- <ref name="EG_ColorChoice"/>
- <attribute name="pos">
- <ref name="ST_PositiveFixedPercentage"/>
- </attribute>
- </define>
- <define name="CT_GradientStopList">
- <element name="gs">
- <ref name="CT_GradientStop"/>
- </element>
- </define>
- <define name="CT_GradientFillProperties">
- <element name="gsLst">
- <ref name="CT_GradientStopList"/>
- </element>
- <ref name="EG_ShadeProperties"/>
- <element name="tileRect">
- <ref name="CT_RelativeRect"/>
- </element>
- <attribute name="flip">
- <ref name="ST_TileFlipMode"/>
- </attribute>
- <attribute name="rotWithShape">
- <data type="boolean"/>
- </attribute>
- </define>
- <define name="CT_TileInfoProperties">
- <attribute name="tx">
- <ref name="ST_Coordinate"/>
- </attribute>
- <attribute name="ty">
- <ref name="ST_Coordinate"/>
- </attribute>
- <attribute name="sx">
- <ref name="ST_Percentage"/>
- </attribute>
- <attribute name="sy">
- <ref name="ST_Percentage"/>
- </attribute>
- <attribute name="flip">
- <ref name="ST_TileFlipMode"/>
- </attribute>
- <attribute name="algn">
- <ref name="ST_RectAlignment"/>
- </attribute>
- </define>
- <define name="CT_StretchInfoProperties">
- <element name="fillRect">
- <ref name="CT_RelativeRect"/>
- </element>
- </define>
- <define name="EG_FillModeProperties">
- <choice>
- <element name="tile">
- <ref name="CT_TileInfoProperties"/>
- </element>
- <element name="stretch">
- <ref name="CT_StretchInfoProperties"/>
- </element>
- </choice>
- </define>
- <define name="ST_BlipCompression">
- <choice>
- <!-- Email Compression -->
- <value>email</value>
- <!-- Screen Viewing Compression -->
- <value>screen</value>
- <!-- Printing Compression -->
- <value>print</value>
- <!-- High Quality Printing Compression -->
- <value>hqprint</value>
- <!-- No Compression -->
- <value>none</value>
- </choice>
- </define>
- <define name="CT_Blip">
- <choice>
- <element name="alphaBiLevel">
- <ref name="CT_AlphaBiLevelEffect"/>
- </element>
- <element name="alphaCeiling">
- <ref name="CT_AlphaCeilingEffect"/>
- </element>
- <element name="alphaFloor">
- <ref name="CT_AlphaFloorEffect"/>
- </element>
- <element name="alphaInv">
- <ref name="CT_AlphaInverseEffect"/>
- </element>
- <element name="alphaMod">
- <ref name="CT_AlphaModulateEffect"/>
- </element>
- <element name="alphaModFix">
- <ref name="CT_AlphaModulateFixedEffect"/>
- </element>
- <element name="alphaRepl">
- <ref name="CT_AlphaReplaceEffect"/>
- </element>
- <element name="biLevel">
- <ref name="CT_BiLevelEffect"/>
- </element>
- <element name="blur">
- <ref name="CT_BlurEffect"/>
- </element>
- <element name="clrChange">
- <ref name="CT_ColorChangeEffect"/>
- </element>
- <element name="clrRepl">
- <ref name="CT_ColorReplaceEffect"/>
- </element>
- <element name="duotone">
- <ref name="CT_DuotoneEffect"/>
- </element>
- <element name="fillOverlay">
- <ref name="CT_FillOverlayEffect"/>
- </element>
- <element name="grayscl">
- <ref name="CT_GrayscaleEffect"/>
- </element>
- <element name="hsl">
- <ref name="CT_HSLEffect"/>
- </element>
- <element name="lum">
- <ref name="CT_LuminanceEffect"/>
- </element>
- <element name="tint">
- <ref name="CT_TintEffect"/>
- </element>
- </choice>
- <element name="extLst">
- <ref name="CT_OfficeArtExtensionList"/>
- </element>
- <ref name="AG_Blob"/>
- <attribute name="cstate">
- <ref name="ST_BlipCompression"/>
- </attribute>
- </define>
- <define name="CT_BlipFillProperties">
- <element name="blip">
- <ref name="CT_Blip"/>
- </element>
- <element name="srcRect">
- <ref name="CT_RelativeRect"/>
- </element>
- <ref name="EG_FillModeProperties"/>
- <attribute name="dpi">
- <data type="unsignedInt"/>
- </attribute>
- <attribute name="rotWithShape">
- <data type="boolean"/>
- </attribute>
- </define>
- <define name="ST_PresetPatternVal">
- <choice>
- <!-- 5% -->
- <value>pct5</value>
- <!-- 10% -->
- <value>pct10</value>
- <!-- 20% -->
- <value>pct20</value>
- <!-- 25% -->
- <value>pct25</value>
- <!-- 30% -->
- <value>pct30</value>
- <!-- 40% -->
- <value>pct40</value>
- <!-- 50% -->
- <value>pct50</value>
- <!-- 60% -->
- <value>pct60</value>
- <!-- 70% -->
- <value>pct70</value>
- <!-- 75% -->
- <value>pct75</value>
- <!-- 80% -->
- <value>pct80</value>
- <!-- 90% -->
- <value>pct90</value>
- <!-- Horizontal -->
- <value>horz</value>
- <!-- Vertical -->
- <value>vert</value>
- <!-- Light Horizontal -->
- <value>ltHorz</value>
- <!-- Light Vertical -->
- <value>ltVert</value>
- <!-- Dark Horizontal -->
- <value>dkHorz</value>
- <!-- Dark Vertical -->
- <value>dkVert</value>
- <!-- Narrow Horizontal -->
- <value>narHorz</value>
- <!-- Narrow Vertical -->
- <value>narVert</value>
- <!-- Dashed Horizontal -->
- <value>dashHorz</value>
- <!-- Dashed Vertical -->
- <value>dashVert</value>
- <!-- Cross -->
- <value>cross</value>
- <!-- Downward Diagonal -->
- <value>dnDiag</value>
- <!-- Upward Diagonal -->
- <value>upDiag</value>
- <!-- Light Downward Diagonal -->
- <value>ltDnDiag</value>
- <!-- Light Upward Diagonal -->
- <value>ltUpDiag</value>
- <!-- Dark Downward Diagonal -->
- <value>dkDnDiag</value>
- <!-- Dark Upward Diagonal -->
- <value>dkUpDiag</value>
- <!-- Wide Downward Diagonal -->
- <value>wdDnDiag</value>
- <!-- Wide Upward Diagonal -->
- <value>wdUpDiag</value>
- <!-- Dashed Downward Diagonal -->
- <value>dashDnDiag</value>
- <!-- Dashed Upward Diagonal -->
- <value>dashUpDiag</value>
- <!-- Diagonal Cross -->
- <value>diagCross</value>
- <!-- Small Checker Board -->
- <value>smCheck</value>
- <!-- Large Checker Board -->
- <value>lgCheck</value>
- <!-- Small Grid -->
- <value>smGrid</value>
- <!-- Large Grid -->
- <value>lgGrid</value>
- <!-- Dotted Grid -->
- <value>dotGrid</value>
- <!-- Small Confetti -->
- <value>smConfetti</value>
- <!-- Large Confetti -->
- <value>lgConfetti</value>
- <!-- Horizontal Brick -->
- <value>horzBrick</value>
- <!-- Diagonal Brick -->
- <value>diagBrick</value>
- <!-- Solid Diamond -->
- <value>solidDmnd</value>
- <!-- Open Diamond -->
- <value>openDmnd</value>
- <!-- Dotted Diamond -->
- <value>dotDmnd</value>
- <!-- Plaid -->
- <value>plaid</value>
- <!-- Sphere -->
- <value>sphere</value>
- <!-- Weave -->
- <value>weave</value>
- <!-- Divot -->
- <value>divot</value>
- <!-- Shingle -->
- <value>shingle</value>
- <!-- Wave -->
- <value>wave</value>
- <!-- Trellis -->
- <value>trellis</value>
- <!-- Zig Zag -->
- <value>zigZag</value>
- <!-- Dashed Dotted -->
- <value>dashDot</value>
- <!-- Dashed Dotted Upward Diagonal -->
- <value>dashdotUpDiag</value>
- <!-- Solid Dotted -->
- <value>lsolidDoted</value>
- </choice>
- </define>
- <define name="CT_PatternFillProperties">
- <element name="fgClr">
- <ref name="CT_Color"/>
- </element>
- <element name="bgClr">
- <ref name="CT_Color"/>
- </element>
- <attribute name="prst">
- <ref name="ST_PresetPatternVal"/>
- </attribute>
- </define>
- <define name="CT_GroupFillProperties">
- </define>
- <define name="EG_FillProperties">
- <choice>
- <element name="noFill">
- <ref name="CT_NoFillProperties"/>
- </element>
- <element name="solidFill">
- <ref name="CT_SolidColorFillProperties"/>
- </element>
- <element name="gradFill">
- <ref name="CT_GradientFillProperties"/>
- </element>
- <element name="blipFill">
- <ref name="CT_BlipFillProperties"/>
- </element>
- <element name="pattFill">
- <ref name="CT_PatternFillProperties"/>
- </element>
- <element name="grpFill">
- <ref name="CT_GroupFillProperties"/>
- </element>
- </choice>
- </define>
- <define name="CT_FillProperties">
- <ref name="EG_FillProperties"/>
- </define>
- <define name="CT_FillEffect">
- <ref name="EG_FillProperties"/>
- </define>
- <define name="ST_BlendMode">
- <choice>
- <!-- Overlay -->
- <value>over</value>
- <!-- Multiply -->
- <value>mult</value>
- <!-- Screen -->
- <value>screen</value>
- <!-- Darken -->
- <value>darken</value>
- <!-- Lighten -->
- <value>lighten</value>
- </choice>
- </define>
- <define name="CT_FillOverlayEffect">
- <ref name="EG_FillProperties"/>
- <attribute name="blend">
- <ref name="ST_BlendMode"/>
- </attribute>
- </define>
- <define name="CT_EffectReference">
- <attribute name="ref">
- <data type="token"/>
- </attribute>
- </define>
- <define name="EG_Effect">
- <choice>
- <element name="cont">
- <ref name="CT_EffectContainer"/>
- </element>
- <element name="effect">
- <ref name="CT_EffectReference"/>
- </element>
- <element name="alphaBiLevel">
- <ref name="CT_AlphaBiLevelEffect"/>
- </element>
- <element name="alphaCeiling">
- <ref name="CT_AlphaCeilingEffect"/>
- </element>
- <element name="alphaFloor">
- <ref name="CT_AlphaFloorEffect"/>
- </element>
- <element name="alphaInv">
- <ref name="CT_AlphaInverseEffect"/>
- </element>
- <element name="alphaMod">
- <ref name="CT_AlphaModulateEffect"/>
- </element>
- <element name="alphaModFix">
- <ref name="CT_AlphaModulateFixedEffect"/>
- </element>
- <element name="alphaOutset">
- <ref name="CT_AlphaOutsetEffect"/>
- </element>
- <element name="alphaRepl">
- <ref name="CT_AlphaReplaceEffect"/>
- </element>
- <element name="biLevel">
- <ref name="CT_BiLevelEffect"/>
- </element>
- <element name="blend">
- <ref name="CT_BlendEffect"/>
- </element>
- <element name="blur">
- <ref name="CT_BlurEffect"/>
- </element>
- <element name="clrChange">
- <ref name="CT_ColorChangeEffect"/>
- </element>
- <element name="clrRepl">
- <ref name="CT_ColorReplaceEffect"/>
- </element>
- <element name="duotone">
- <ref name="CT_DuotoneEffect"/>
- </element>
- <element name="fill">
- <ref name="CT_FillEffect"/>
- </element>
- <element name="fillOverlay">
- <ref name="CT_FillOverlayEffect"/>
- </element>
- <element name="glow">
- <ref name="CT_GlowEffect"/>
- </element>
- <element name="grayscl">
- <ref name="CT_GrayscaleEffect"/>
- </element>
- <element name="hsl">
- <ref name="CT_HSLEffect"/>
- </element>
- <element name="innerShdw">
- <ref name="CT_InnerShadowEffect"/>
- </element>
- <element name="lum">
- <ref name="CT_LuminanceEffect"/>
- </element>
- <element name="outerShdw">
- <ref name="CT_OuterShadowEffect"/>
- </element>
- <element name="prstShdw">
- <ref name="CT_PresetShadowEffect"/>
- </element>
- <element name="reflection">
- <ref name="CT_ReflectionEffect"/>
- </element>
- <element name="relOff">
- <ref name="CT_RelativeOffsetEffect"/>
- </element>
- <element name="softEdge">
- <ref name="CT_SoftEdgesEffect"/>
- </element>
- <element name="tint">
- <ref name="CT_TintEffect"/>
- </element>
- <element name="xfrm">
- <ref name="CT_TransformEffect"/>
- </element>
- </choice>
- </define>
- <define name="ST_EffectContainerType">
- <choice>
- <!-- Sibling -->
- <value>sib</value>
- <!-- Tree -->
- <value>tree</value>
- </choice>
- </define>
- <define name="CT_EffectContainer">
- <ref name="EG_Effect"/>
- <attribute name="type">
- <ref name="ST_EffectContainerType"/>
- </attribute>
- <attribute name="name">
- <data type="token"/>
- </attribute>
- </define>
- <define name="CT_AlphaModulateEffect">
- <element name="cont">
- <ref name="CT_EffectContainer"/>
- </element>
- </define>
- <define name="CT_BlendEffect">
- <element name="cont">
- <ref name="CT_EffectContainer"/>
- </element>
- <attribute name="blend">
- <ref name="ST_BlendMode"/>
- </attribute>
- </define>
- <define name="CT_EffectList">
- <element name="blur">
- <ref name="CT_BlurEffect"/>
- </element>
- <element name="fillOverlay">
- <ref name="CT_FillOverlayEffect"/>
- </element>
- <element name="glow">
- <ref name="CT_GlowEffect"/>
- </element>
- <element name="innerShdw">
- <ref name="CT_InnerShadowEffect"/>
- </element>
- <element name="outerShdw">
- <ref name="CT_OuterShadowEffect"/>
- </element>
- <element name="prstShdw">
- <ref name="CT_PresetShadowEffect"/>
- </element>
- <element name="reflection">
- <ref name="CT_ReflectionEffect"/>
- </element>
- <element name="softEdge">
- <ref name="CT_SoftEdgesEffect"/>
- </element>
- </define>
- <define name="EG_EffectProperties">
- <choice>
- <element name="effectLst">
- <ref name="CT_EffectList"/>
- </element>
- <element name="effectDag">
- <ref name="CT_EffectContainer"/>
- </element>
- </choice>
- </define>
- <define name="CT_EffectProperties">
- <ref name="EG_EffectProperties"/>
- </define>
- <define name="blip">
- <element name="blip">
- <ref name="CT_Blip"/>
- </element>
- </define>
- </grammar>
- <resource name="ST_PresetShadowVal" resource="List">
- <value tokenid="ooxml:Value_drawingml_ST_PresetShadowVal_shdw1">shdw1</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetShadowVal_shdw2">shdw2</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetShadowVal_shdw3">shdw3</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetShadowVal_shdw4">shdw4</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetShadowVal_shdw5">shdw5</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetShadowVal_shdw6">shdw6</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetShadowVal_shdw7">shdw7</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetShadowVal_shdw8">shdw8</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetShadowVal_shdw9">shdw9</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetShadowVal_shdw10">shdw10</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetShadowVal_shdw11">shdw11</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetShadowVal_shdw12">shdw12</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetShadowVal_shdw13">shdw13</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetShadowVal_shdw14">shdw14</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetShadowVal_shdw15">shdw15</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetShadowVal_shdw16">shdw16</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetShadowVal_shdw17">shdw17</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetShadowVal_shdw18">shdw18</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetShadowVal_shdw19">shdw19</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetShadowVal_shdw20">shdw20</value>
- </resource>
- <resource name="CT_SolidColorFillProperties" resource="Properties"/>
- <resource name="ST_PathShadeType" resource="List">
- <value tokenid="ooxml:Value_drawingml_ST_PathShadeType_shape">shape</value>
- <value tokenid="ooxml:Value_drawingml_ST_PathShadeType_circle">circle</value>
- <value tokenid="ooxml:Value_drawingml_ST_PathShadeType_rect">rect</value>
- </resource>
- <resource name="ST_TileFlipMode" resource="List">
- <value tokenid="ooxml:Value_drawingml_ST_TileFlipMode_none">none</value>
- <value tokenid="ooxml:Value_drawingml_ST_TileFlipMode_x">x</value>
- <value tokenid="ooxml:Value_drawingml_ST_TileFlipMode_y">y</value>
- <value tokenid="ooxml:Value_drawingml_ST_TileFlipMode_xy">xy</value>
- </resource>
- <resource name="CT_GradientStop" resource="Properties">
- <attribute name="pos" tokenid="ooxml:CT_GradientStop_pos"/>
- </resource>
- <resource name="CT_TileInfoProperties" resource="Properties">
- <attribute name="tx" tokenid="ooxml:CT_TileInfoProperties_tx"/>
- <attribute name="ty" tokenid="ooxml:CT_TileInfoProperties_ty"/>
- <attribute name="sx" tokenid="ooxml:CT_TileInfoProperties_sx"/>
- <attribute name="sy" tokenid="ooxml:CT_TileInfoProperties_sy"/>
- <attribute name="flip" tokenid="ooxml:CT_TileInfoProperties_flip"/>
- <attribute name="algn" tokenid="ooxml:CT_TileInfoProperties_algn"/>
- </resource>
- <resource name="CT_StretchInfoProperties" resource="Properties">
- <element name="fillRect" tokenid="ooxml:CT_StretchInfoProperties_fillRect"/>
- </resource>
- <resource name="EG_FillModeProperties" resource="Properties">
- <element name="tile" tokenid="ooxml:EG_FillModeProperties_tile"/>
- <element name="stretch" tokenid="ooxml:EG_FillModeProperties_stretch"/>
- </resource>
- <resource name="ST_BlipCompression" resource="List">
- <value tokenid="ooxml:Value_drawingml_ST_BlipCompression_email">email</value>
- <value tokenid="ooxml:Value_drawingml_ST_BlipCompression_screen">screen</value>
- <value tokenid="ooxml:Value_drawingml_ST_BlipCompression_print">print</value>
- <value tokenid="ooxml:Value_drawingml_ST_BlipCompression_hqprint">hqprint</value>
- <value tokenid="ooxml:Value_drawingml_ST_BlipCompression_none">none</value>
- </resource>
- <resource name="CT_Blip" resource="Properties">
- <element name="alphaBiLevel" tokenid="ooxml:CT_Blip_alphaBiLevel"/>
- <element name="alphaCeiling" tokenid="ooxml:CT_Blip_alphaCeiling"/>
- <element name="alphaFloor" tokenid="ooxml:CT_Blip_alphaFloor"/>
- <element name="alphaInv" tokenid="ooxml:CT_Blip_alphaInv"/>
- <element name="alphaMod" tokenid="ooxml:CT_Blip_alphaMod"/>
- <element name="alphaModFix" tokenid="ooxml:CT_Blip_alphaModFix"/>
- <element name="alphaRepl" tokenid="ooxml:CT_Blip_alphaRepl"/>
- <element name="biLevel" tokenid="ooxml:CT_Blip_biLevel"/>
- <element name="blur" tokenid="ooxml:CT_Blip_blur"/>
- <element name="clrChange" tokenid="ooxml:CT_Blip_clrChange"/>
- <element name="clrRepl" tokenid="ooxml:CT_Blip_clrRepl"/>
- <element name="duotone" tokenid="ooxml:CT_Blip_duotone"/>
- <element name="fillOverlay" tokenid="ooxml:CT_Blip_fillOverlay"/>
- <element name="grayscl" tokenid="ooxml:CT_Blip_grayscl"/>
- <element name="hsl" tokenid="ooxml:CT_Blip_hsl"/>
- <element name="lum" tokenid="ooxml:CT_Blip_lum"/>
- <element name="tint" tokenid="ooxml:CT_Blip_tint"/>
- <element name="extLst" tokenid="ooxml:CT_Blip_extLst"/>
- <attribute name="cstate" tokenid="ooxml:CT_Blip_cstate"/>
- </resource>
- <resource name="CT_BlipFillProperties" resource="Properties">
- <element name="blip" tokenid="ooxml:CT_BlipFillProperties_blip"/>
- <element name="srcRect" tokenid="ooxml:CT_BlipFillProperties_srcRect"/>
- <attribute name="dpi" tokenid="ooxml:CT_BlipFillProperties_dpi"/>
- <attribute name="rotWithShape" tokenid="ooxml:CT_BlipFillProperties_rotWithShape"/>
- </resource>
- <resource name="ST_PresetPatternVal" resource="List">
- <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_pct5">pct5</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_pct10">pct10</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_pct20">pct20</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_pct25">pct25</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_pct30">pct30</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_pct40">pct40</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_pct50">pct50</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_pct60">pct60</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_pct70">pct70</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_pct75">pct75</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_pct80">pct80</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_pct90">pct90</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_horz">horz</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_vert">vert</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_ltHorz">ltHorz</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_ltVert">ltVert</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_dkHorz">dkHorz</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_dkVert">dkVert</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_narHorz">narHorz</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_narVert">narVert</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_dashHorz">dashHorz</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_dashVert">dashVert</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_cross">cross</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_dnDiag">dnDiag</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_upDiag">upDiag</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_ltDnDiag">ltDnDiag</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_ltUpDiag">ltUpDiag</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_dkDnDiag">dkDnDiag</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_dkUpDiag">dkUpDiag</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_wdDnDiag">wdDnDiag</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_wdUpDiag">wdUpDiag</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_dashDnDiag">dashDnDiag</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_dashUpDiag">dashUpDiag</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_diagCross">diagCross</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_smCheck">smCheck</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_lgCheck">lgCheck</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_smGrid">smGrid</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_lgGrid">lgGrid</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_dotGrid">dotGrid</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_smConfetti">smConfetti</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_lgConfetti">lgConfetti</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_horzBrick">horzBrick</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_diagBrick">diagBrick</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_solidDmnd">solidDmnd</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_openDmnd">openDmnd</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_dotDmnd">dotDmnd</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_plaid">plaid</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_sphere">sphere</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_weave">weave</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_divot">divot</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_shingle">shingle</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_wave">wave</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_trellis">trellis</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_zigZag">zigZag</value>
- </resource>
- <resource name="ST_BlendMode" resource="List">
- <value tokenid="ooxml:Value_drawingml_ST_BlendMode_over">over</value>
- <value tokenid="ooxml:Value_drawingml_ST_BlendMode_mult">mult</value>
- <value tokenid="ooxml:Value_drawingml_ST_BlendMode_screen">screen</value>
- <value tokenid="ooxml:Value_drawingml_ST_BlendMode_darken">darken</value>
- <value tokenid="ooxml:Value_drawingml_ST_BlendMode_lighten">lighten</value>
- </resource>
- <resource name="EG_Effect" resource="Properties">
- <element name="cont" tokenid="ooxml:EG_Effect_cont"/>
- <element name="effect" tokenid="ooxml:EG_Effect_effect"/>
- <element name="alphaBiLevel" tokenid="ooxml:EG_Effect_alphaBiLevel"/>
- <element name="alphaCeiling" tokenid="ooxml:EG_Effect_alphaCeiling"/>
- <element name="alphaFloor" tokenid="ooxml:EG_Effect_alphaFloor"/>
- <element name="alphaInv" tokenid="ooxml:EG_Effect_alphaInv"/>
- <element name="alphaMod" tokenid="ooxml:EG_Effect_alphaMod"/>
- <element name="alphaModFix" tokenid="ooxml:EG_Effect_alphaModFix"/>
- <element name="alphaOutset" tokenid="ooxml:EG_Effect_alphaOutset"/>
- <element name="alphaRepl" tokenid="ooxml:EG_Effect_alphaRepl"/>
- <element name="biLevel" tokenid="ooxml:EG_Effect_biLevel"/>
- <element name="blend" tokenid="ooxml:EG_Effect_blend"/>
- <element name="blur" tokenid="ooxml:EG_Effect_blur"/>
- <element name="clrChange" tokenid="ooxml:EG_Effect_clrChange"/>
- <element name="clrRepl" tokenid="ooxml:EG_Effect_clrRepl"/>
- <element name="duotone" tokenid="ooxml:EG_Effect_duotone"/>
- <element name="fill" tokenid="ooxml:EG_Effect_fill"/>
- <element name="fillOverlay" tokenid="ooxml:EG_Effect_fillOverlay"/>
- <element name="glow" tokenid="ooxml:EG_Effect_glow"/>
- <element name="grayscl" tokenid="ooxml:EG_Effect_grayscl"/>
- <element name="hsl" tokenid="ooxml:EG_Effect_hsl"/>
- <element name="innerShdw" tokenid="ooxml:EG_Effect_innerShdw"/>
- <element name="lum" tokenid="ooxml:EG_Effect_lum"/>
- <element name="outerShdw" tokenid="ooxml:EG_Effect_outerShdw"/>
- <element name="prstShdw" tokenid="ooxml:EG_Effect_prstShdw"/>
- <element name="reflection" tokenid="ooxml:EG_Effect_reflection"/>
- <element name="relOff" tokenid="ooxml:EG_Effect_relOff"/>
- <element name="softEdge" tokenid="ooxml:EG_Effect_softEdge"/>
- <element name="tint" tokenid="ooxml:EG_Effect_tint"/>
- <element name="xfrm" tokenid="ooxml:EG_Effect_xfrm"/>
- </resource>
- <resource name="ST_EffectContainerType" resource="List">
- <value tokenid="ooxml:Value_drawingml_ST_EffectContainerType_sib">sib</value>
- <value tokenid="ooxml:Value_drawingml_ST_EffectContainerType_tree">tree</value>
- </resource>
- <resource name="CT_EffectContainer" resource="Properties">
- <attribute name="type" tokenid="ooxml:CT_EffectContainer_type"/>
- <attribute name="name" tokenid="ooxml:CT_EffectContainer_name"/>
- </resource>
- </namespace>
- <namespace name="dml-shapeLineProperties">
- <grammar xmlns="http://relaxng.org/ns/structure/1.0" ns="http://schemas.openxmlformats.org/drawingml/2006/main">
- <include href="dml-shapeEffects"/>
- <define name="ST_LineEndType">
- <choice>
- <!-- None -->
- <value>none</value>
- <!-- Triangle Arrow Head -->
- <value>triangle</value>
- <!-- Stealth Arrow -->
- <value>stealth</value>
- <!-- Diamond -->
- <value>diamond</value>
- <!-- Oval -->
- <value>oval</value>
- <!-- Arrow Head -->
- <value>arrow</value>
- </choice>
- </define>
- <define name="ST_LineEndWidth">
- <choice>
- <!-- Small -->
- <value>sm</value>
- <!-- Medium -->
- <value>med</value>
- <!-- Large -->
- <value>lg</value>
- </choice>
- </define>
- <define name="ST_LineEndLength">
- <choice>
- <!-- Small -->
- <value>sm</value>
- <!-- Medium -->
- <value>med</value>
- <!-- Large -->
- <value>lg</value>
- </choice>
- </define>
- <define name="CT_LineEndProperties">
- <attribute name="type">
- <ref name="ST_LineEndType"/>
- </attribute>
- <attribute name="w">
- <ref name="ST_LineEndWidth"/>
- </attribute>
- <attribute name="len">
- <ref name="ST_LineEndLength"/>
- </attribute>
- </define>
- <define name="EG_LineFillProperties">
- <choice>
- <element name="noFill">
- <ref name="CT_NoFillProperties"/>
- </element>
- <element name="solidFill">
- <ref name="CT_SolidColorFillProperties"/>
- </element>
- <element name="gradFill">
- <ref name="CT_GradientFillProperties"/>
- </element>
- <element name="pattFill">
- <ref name="CT_PatternFillProperties"/>
- </element>
- </choice>
- </define>
- <define name="CT_LineJoinBevel">
- </define>
- <define name="CT_LineJoinRound">
- </define>
- <define name="CT_LineJoinMiterProperties">
- <attribute name="lim">
- <ref name="ST_PositivePercentage"/>
- </attribute>
- </define>
- <define name="EG_LineJoinProperties">
- <choice>
- <element name="round">
- <ref name="CT_LineJoinRound"/>
- </element>
- <element name="bevel">
- <ref name="CT_LineJoinBevel"/>
- </element>
- <element name="miter">
- <ref name="CT_LineJoinMiterProperties"/>
- </element>
- </choice>
- </define>
- <define name="ST_PresetLineDashVal">
- <choice>
- <!-- Solid -->
- <value>solid</value>
- <!-- Dot -->
- <value>dot</value>
- <!-- Dash -->
- <value>dash</value>
- <!-- Large Dash -->
- <value>lgDash</value>
- <!-- Dash Dot -->
- <value>dashDot</value>
- <!-- Large Dash Dot -->
- <value>lgDashDot</value>
- <!-- Large Dash Dot Dot -->
- <value>lgDashDotDot</value>
- <!-- System Dash -->
- <value>sysDash</value>
- <!-- System Dot -->
- <value>sysDot</value>
- <!-- System Dash Dot -->
- <value>sysDashDot</value>
- <!-- System Dash Dot Dot -->
- <value>sysDashDotDot</value>
- </choice>
- </define>
- <define name="CT_PresetLineDashProperties">
- <attribute name="val">
- <ref name="ST_PresetLineDashVal"/>
- </attribute>
- </define>
- <define name="CT_DashStop">
- <attribute name="d">
- <ref name="ST_PositivePercentage"/>
- </attribute>
- <attribute name="sp">
- <ref name="ST_PositivePercentage"/>
- </attribute>
- </define>
- <define name="CT_DashStopList">
- <element name="ds">
- <ref name="CT_DashStop"/>
- </element>
- </define>
- <define name="EG_LineDashProperties">
- <choice>
- <element name="prstDash">
- <ref name="CT_PresetLineDashProperties"/>
- </element>
- <element name="custDash">
- <ref name="CT_DashStopList"/>
- </element>
- </choice>
- </define>
- <define name="ST_LineCap">
- <choice>
- <!-- Round Line Cap -->
- <value>rnd</value>
- <!-- Square Line Cap -->
- <value>sq</value>
- <!-- Flat Line Cap -->
- <value>flat</value>
- </choice>
- </define>
- <define name="ST_LineWidth">
- </define>
- <define name="ST_PenAlignment">
- <choice>
- <!-- Center Alignment -->
- <value>ctr</value>
- <!-- Inset Alignment -->
- <value>in</value>
- </choice>
- </define>
- <define name="ST_CompoundLine">
- <choice>
- <!-- Single Line -->
- <value>sng</value>
- <!-- Double Lines -->
- <value>dbl</value>
- <!-- Thick Thin Double Lines -->
- <value>thickThin</value>
- <!-- Thin Thick Double Lines -->
- <value>thinThick</value>
- <!-- Thin Thick Thin Triple Lines -->
- <value>tri</value>
- </choice>
- </define>
- <define name="CT_LineProperties">
- <ref name="EG_LineFillProperties"/>
- <ref name="EG_LineDashProperties"/>
- <ref name="EG_LineJoinProperties"/>
- <element name="headEnd">
- <ref name="CT_LineEndProperties"/>
- </element>
- <element name="tailEnd">
- <ref name="CT_LineEndProperties"/>
- </element>
- <element name="extLst">
- <ref name="CT_OfficeArtExtensionList"/>
- </element>
- <attribute name="w">
- <ref name="ST_LineWidth"/>
- </attribute>
- <attribute name="cap">
- <ref name="ST_LineCap"/>
- </attribute>
- <attribute name="cmpd">
- <ref name="ST_CompoundLine"/>
- </attribute>
- <attribute name="algn">
- <ref name="ST_PenAlignment"/>
- </attribute>
- </define>
- </grammar>
- <resource name="ST_LineEndType" resource="List">
- <value tokenid="ooxml:Value_drawingml_ST_LineEndType_none">none</value>
- <value tokenid="ooxml:Value_drawingml_ST_LineEndType_triangle">triangle</value>
- <value tokenid="ooxml:Value_drawingml_ST_LineEndType_stealth">stealth</value>
- <value tokenid="ooxml:Value_drawingml_ST_LineEndType_diamond">diamond</value>
- <value tokenid="ooxml:Value_drawingml_ST_LineEndType_oval">oval</value>
- <value tokenid="ooxml:Value_drawingml_ST_LineEndType_arrow">arrow</value>
- </resource>
- <resource name="ST_LineEndWidth" resource="List">
- <value tokenid="ooxml:Value_drawingml_ST_LineEndWidth_sm">sm</value>
- <value tokenid="ooxml:Value_drawingml_ST_LineEndWidth_med">med</value>
- <value tokenid="ooxml:Value_drawingml_ST_LineEndWidth_lg">lg</value>
- </resource>
- <resource name="ST_LineEndLength" resource="List">
- <value tokenid="ooxml:Value_drawingml_ST_LineEndLength_sm">sm</value>
- <value tokenid="ooxml:Value_drawingml_ST_LineEndLength_med">med</value>
- <value tokenid="ooxml:Value_drawingml_ST_LineEndLength_lg">lg</value>
- </resource>
- <resource name="CT_LineEndProperties" resource="Properties">
- <attribute name="type" tokenid="ooxml:CT_LineEndProperties_type"/>
- <attribute name="w" tokenid="ooxml:CT_LineEndProperties_w"/>
- <attribute name="len" tokenid="ooxml:CT_LineEndProperties_len"/>
- </resource>
- <resource name="EG_LineFillProperties" resource="Properties">
- <element name="noFill" tokenid="ooxml:EG_LineFillProperties_noFill"/>
- <element name="solidFill" tokenid="ooxml:EG_LineFillProperties_solidFill"/>
- <element name="gradFill" tokenid="ooxml:EG_LineFillProperties_gradFill"/>
- <element name="pattFill" tokenid="ooxml:EG_LineFillProperties_pattFill"/>
- </resource>
- <resource name="ST_PresetLineDashVal" resource="List">
- <value tokenid="ooxml:Value_drawingml_ST_PresetLineDashVal_solid">solid</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetLineDashVal_dot">dot</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetLineDashVal_dash">dash</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetLineDashVal_lgDash">lgDash</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetLineDashVal_dashDot">dashDot</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetLineDashVal_lgDashDot">lgDashDot</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetLineDashVal_lgDashDotDot">lgDashDotDot</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetLineDashVal_sysDash">sysDash</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetLineDashVal_sysDot">sysDot</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetLineDashVal_sysDashDot">sysDashDot</value>
- <value tokenid="ooxml:Value_drawingml_ST_PresetLineDashVal_sysDashDotDot">sysDashDotDot</value>
- </resource>
- <resource name="ST_LineCap" resource="List">
- <value tokenid="ooxml:Value_drawingml_ST_LineCap_rnd">rnd</value>
- <value tokenid="ooxml:Value_drawingml_ST_LineCap_sq">sq</value>
- <value tokenid="ooxml:Value_drawingml_ST_LineCap_flat">flat</value>
- </resource>
- <resource name="ST_PenAlignment" resource="List">
- <value tokenid="ooxml:Value_drawingml_ST_PenAlignment_ctr">ctr</value>
- <value tokenid="ooxml:Value_drawingml_ST_PenAlignment_in">in</value>
- </resource>
- <resource name="ST_CompoundLine" resource="List">
- <value tokenid="ooxml:Value_drawingml_ST_CompoundLine_sng">sng</value>
- <value tokenid="ooxml:Value_drawingml_ST_CompoundLine_dbl">dbl</value>
- <value tokenid="ooxml:Value_drawingml_ST_CompoundLine_thickThin">thickThin</value>
- <value tokenid="ooxml:Value_drawingml_ST_CompoundLine_thinThick">thinThick</value>
- <value tokenid="ooxml:Value_drawingml_ST_CompoundLine_tri">tri</value>
- </resource>
- <resource name="CT_LineProperties" resource="Properties">
- <element name="headEnd" tokenid="ooxml:CT_LineProperties_headEnd"/>
- <element name="tailEnd" tokenid="ooxml:CT_LineProperties_tailEnd"/>
- <element name="extLst" tokenid="ooxml:CT_LineProperties_extLst"/>
- <attribute name="w" tokenid="ooxml:CT_LineProperties_w"/>
- <attribute name="cap" tokenid="ooxml:CT_LineProperties_cap"/>
- <attribute name="cmpd" tokenid="ooxml:CT_LineProperties_cmpd"/>
- <attribute name="algn" tokenid="ooxml:CT_LineProperties_algn"/>
- </resource>
- </namespace>
- <namespace name="dml-shapeProperties">
- <grammar xmlns="http://relaxng.org/ns/structure/1.0" ns="http://schemas.openxmlformats.org/drawingml/2006/main">
- <include href="dml-shape3DStyles"/>
- <include href="dml-shape3DScene"/>
- <include href="dml-shapeGeometry"/>
- <include href="dml-shapeEffects"/>
- <include href="dml-shapeLineProperties"/>
- <define name="CT_ShapeProperties">
- <element name="xfrm">
- <ref name="CT_Transform2D"/>
- </element>
- <ref name="EG_Geometry"/>
- <ref name="EG_FillProperties"/>
- <element name="ln">
- <ref name="CT_LineProperties"/>
- </element>
- <ref name="EG_EffectProperties"/>
- <element name="scene3d">
- <ref name="CT_Scene3D"/>
- </element>
- <element name="sp3d">
- <ref name="CT_Shape3D"/>
- </element>
- <element name="extLst">
- <ref name="CT_OfficeArtExtensionList"/>
- </element>
- <attribute name="bwMode">
- <ref name="ST_BlackWhiteMode"/>
- </attribute>
- </define>
- <define name="CT_GroupShapeProperties">
- <element name="xfrm">
- <ref name="CT_GroupTransform2D"/>
- </element>
- <ref name="EG_FillProperties"/>
- <ref name="EG_EffectProperties"/>
- <element name="scene3d">
- <ref name="CT_Scene3D"/>
- </element>
- <element name="extLst">
- <ref name="CT_OfficeArtExtensionList"/>
- </element>
- <attribute name="bwMode">
- <ref name="ST_BlackWhiteMode"/>
- </attribute>
- </define>
- </grammar>
- <resource name="CT_ShapeProperties" resource="Properties">
- <element name="xfrm" tokenid="ooxml:CT_ShapeProperties_xfrm"/>
- <element name="ln" tokenid="ooxml:CT_ShapeProperties_ln"/>
- <element name="scene3d" tokenid="ooxml:CT_ShapeProperties_scene3d"/>
- <element name="sp3d" tokenid="ooxml:CT_ShapeProperties_sp3d"/>
- <element name="extLst" tokenid="ooxml:CT_ShapeProperties_extLst"/>
- <attribute name="bwMode" tokenid="ooxml:CT_ShapeProperties_bwMode"/>
- </resource>
- </namespace>
- <namespace name="dml-baseTypes">
- <grammar xmlns="http://relaxng.org/ns/structure/1.0" ns="http://schemas.openxmlformats.org/drawingml/2006/main">
- <include href="shared-relationshipReference"/>
- <define name="CT_OfficeArtExtension">
- <element>
- <ref name="BUILT_IN_ANY_TYPE"/>
- </element>
- <attribute name="uri">
- <data type="token"/>
- </attribute>
- </define>
- <define name="ST_Coordinate">
- <data type="long"/>
- </define>
- <define name="ST_PositiveCoordinate">
- <data type="long"/>
- </define>
- <define name="ST_Angle">
- <data type="int"/>
- </define>
- <define name="CT_Angle">
- <attribute name="val">
- <ref name="ST_Angle"/>
- </attribute>
- </define>
- <define name="ST_FixedAngle">
- </define>
- <define name="ST_PositiveFixedAngle">
- </define>
- <define name="CT_PositiveFixedAngle">
- <attribute name="val">
- <ref name="ST_PositiveFixedAngle"/>
- </attribute>
- </define>
- <define name="ST_Percentage">
- <data type="int"/>
- </define>
- <define name="CT_Percentage">
- <attribute name="val">
- <ref name="ST_Percentage"/>
- </attribute>
- </define>
- <define name="ST_PositivePercentage">
- </define>
- <define name="CT_PositivePercentage">
- <attribute name="val">
- <ref name="ST_PositivePercentage"/>
- </attribute>
- </define>
- <define name="ST_FixedPercentage">
- </define>
- <define name="CT_FixedPercentage">
- <attribute name="val">
- <ref name="ST_FixedPercentage"/>
- </attribute>
- </define>
- <define name="ST_PositiveFixedPercentage">
- </define>
- <define name="CT_PositiveFixedPercentage">
- <attribute name="val">
- <ref name="ST_PositiveFixedPercentage"/>
- </attribute>
- </define>
- <define name="CT_Ratio">
- <attribute name="n">
- <data type="long"/>
- </attribute>
- <attribute name="d">
- <data type="long"/>
- </attribute>
- </define>
- <define name="CT_Point2D">
- <attribute name="x">
- <ref name="ST_Coordinate"/>
- </attribute>
- <attribute name="y">
- <ref name="ST_Coordinate"/>
- </attribute>
- </define>
- <define name="CT_PositiveSize2D">
- <attribute name="cx">
- <ref name="ST_PositiveCoordinate"/>
- </attribute>
- <attribute name="cy">
- <ref name="ST_PositiveCoordinate"/>
- </attribute>
- </define>
- <define name="CT_ComplementTransform">
- </define>
- <define name="CT_InverseTransform">
- </define>
- <define name="CT_GrayscaleTransform">
- </define>
- <define name="CT_GammaTransform">
- </define>
- <define name="CT_InverseGammaTransform">
- </define>
- <define name="EG_ColorTransform">
- <choice>
- <element name="tint">
- <ref name="CT_PositiveFixedPercentage"/>
- </element>
- <element name="shade">
- <ref name="CT_PositiveFixedPercentage"/>
- </element>
- <element name="comp">
- <ref name="CT_ComplementTransform"/>
- </element>
- <element name="inv">
- <ref name="CT_InverseTransform"/>
- </element>
- <element name="gray">
- <ref name="CT_GrayscaleTransform"/>
- </element>
- <element name="alpha">
- <ref name="CT_PositiveFixedPercentage"/>
- </element>
- <element name="alphaOff">
- <ref name="CT_FixedPercentage"/>
- </element>
- <element name="alphaMod">
- <ref name="CT_PositivePercentage"/>
- </element>
- <element name="hue">
- <ref name="CT_PositiveFixedAngle"/>
- </element>
- <element name="hueOff">
- <ref name="CT_Angle"/>
- </element>
- <element name="hueMod">
- <ref name="CT_PositivePercentage"/>
- </element>
- <element name="sat">
- <ref name="CT_Percentage"/>
- </element>
- <element name="satOff">
- <ref name="CT_Percentage"/>
- </element>
- <element name="satMod">
- <ref name="CT_Percentage"/>
- </element>
- <element name="lum">
- <ref name="CT_Percentage"/>
- </element>
- <element name="lumOff">
- <ref name="CT_Percentage"/>
- </element>
- <element name="lumMod">
- <ref name="CT_Percentage"/>
- </element>
- <element name="red">
- <ref name="CT_Percentage"/>
- </element>
- <element name="redOff">
- <ref name="CT_Percentage"/>
- </element>
- <element name="redMod">
- <ref name="CT_Percentage"/>
- </element>
- <element name="green">
- <ref name="CT_Percentage"/>
- </element>
- <element name="greenOff">
- <ref name="CT_Percentage"/>
- </element>
- <element name="greenMod">
- <ref name="CT_Percentage"/>
- </element>
- <element name="blue">
- <ref name="CT_Percentage"/>
- </element>
- <element name="blueOff">
- <ref name="CT_Percentage"/>
- </element>
- <element name="blueMod">
- <ref name="CT_Percentage"/>
- </element>
- <element name="gamma">
- <ref name="CT_GammaTransform"/>
- </element>
- <element name="invGamma">
- <ref name="CT_InverseGammaTransform"/>
- </element>
- </choice>
- </define>
- <define name="CT_ScRgbColor">
- <ref name="EG_ColorTransform"/>
- <attribute name="r">
- <ref name="ST_Percentage"/>
- </attribute>
- <attribute name="g">
- <ref name="ST_Percentage"/>
- </attribute>
- <attribute name="b">
- <ref name="ST_Percentage"/>
- </attribute>
- </define>
- <define name="ST_HexBinary3">
- <data type="hexBinary"/>
- </define>
- <define name="CT_SRgbColor">
- <ref name="EG_ColorTransform"/>
- <attribute name="val">
- <ref name="ST_HexBinary3"/>
- </attribute>
- </define>
- <define name="CT_HslColor">
- <ref name="EG_ColorTransform"/>
- <attribute name="hue">
- <ref name="ST_PositiveFixedAngle"/>
- </attribute>
- <attribute name="sat">
- <ref name="ST_Percentage"/>
- </attribute>
- <attribute name="lum">
- <ref name="ST_Percentage"/>
- </attribute>
- </define>
- <define name="ST_SystemColorVal">
- <choice>
- <!-- Scroll Bar System Color -->
- <value>scrollBar</value>
- <!-- Background System Color -->
- <value>background</value>
- <!-- Active Caption System Color -->
- <value>activeCaption</value>
- <!-- Inactive Caption System Color -->
- <value>inactiveCaption</value>
- <!-- Menu System Color -->
- <value>menu</value>
- <!-- Window System Color -->
- <value>window</value>
- <!-- Window Frame System Color -->
- <value>windowFrame</value>
- <!-- Menu Text System Color -->
- <value>menuText</value>
- <!-- Window Text System Color -->
- <value>windowText</value>
- <!-- Caption Text System Color -->
- <value>captionText</value>
- <!-- Active Border System Color -->
- <value>activeBorder</value>
- <!-- Inactive Border System Color -->
- <value>inactiveBorder</value>
- <!-- Application Workspace System Color -->
- <value>appWorkspace</value>
- <!-- Highlight System Color -->
- <value>highlight</value>
- <!-- Highlight Text System Color -->
- <value>highlightText</value>
- <!-- Button Face System Color -->
- <value>btnFace</value>
- <!-- Button Shadow System Color -->
- <value>btnShadow</value>
- <!-- Gray Text System Color -->
- <value>grayText</value>
- <!-- Button Text System Color -->
- <value>btnText</value>
- <!-- Inactive Caption Text System Color -->
- <value>inactiveCaptionText</value>
- <!-- Button Highlight System Color -->
- <value>btnHighlight</value>
- <!-- 3D Dark System Color -->
- <value>3dDkShadow</value>
- <!-- 3D Light System Color -->
- <value>3dLight</value>
- <!-- Info Text System Color -->
- <value>infoText</value>
- <!-- Info Back System Color -->
- <value>infoBk</value>
- <!-- Hot Light System Color -->
- <value>hotLight</value>
- <!-- Gradient Active Caption System Color -->
- <value>gradientActiveCaption</value>
- <!-- Gradient Inactive Caption System Color -->
- <value>gradientInactiveCaption</value>
- <!-- Menu Highlight System Color -->
- <value>menuHighlight</value>
- <!-- Menu Bar System Color -->
- <value>menuBar</value>
- </choice>
- </define>
- <define name="CT_SystemColor">
- <ref name="EG_ColorTransform"/>
- <attribute name="val">
- <ref name="ST_SystemColorVal"/>
- </attribute>
- <attribute name="lastClr">
- <ref name="ST_HexBinary3"/>
- </attribute>
- </define>
- <define name="ST_SchemeColorVal">
- <choice>
- <!-- Background Color 1 -->
- <value>bg1</value>
- <!-- Text Color 1 -->
- <value>tx1</value>
- <!-- Background Color 2 -->
- <value>bg2</value>
- <!-- Text Color 2 -->
- <value>tx2</value>
- <!-- Accent Color 1 -->
- <value>accent1</value>
- <!-- Accent Color 2 -->
- <value>accent2</value>
- <!-- Accent Color 3 -->
- <value>accent3</value>
- <!-- Accent Color 4 -->
- <value>accent4</value>
- <!-- Accent Color 5 -->
- <value>accent5</value>
- <!-- Accent Color 6 -->
- <value>accent6</value>
- <!-- Hyperlink Color -->
- <value>hlink</value>
- <!-- Followed Hyperlink Color -->
- <value>folHlink</value>
- <!-- Style Color -->
- <value>phClr</value>
- <!-- Dark Color 1 -->
- <value>dk1</value>
- <!-- Light Color 1 -->
- <value>lt1</value>
- <!-- Dark Color 2 -->
- <value>dk2</value>
- <!-- Light Color 2 -->
- <value>lt2</value>
- </choice>
- </define>
- <define name="CT_SchemeColor">
- <ref name="EG_ColorTransform"/>
- <attribute name="val">
- <ref name="ST_SchemeColorVal"/>
- </attribute>
- </define>
- <define name="ST_PresetColorVal">
- <choice>
- <!-- Alice Blue Preset Color -->
- <value>aliceBlue</value>
- <!-- Antique White Preset Color -->
- <value>antiqueWhite</value>
- <!-- Aqua Preset Color -->
- <value>aqua</value>
- <!-- Aquamarine Preset Color -->
- <value>aquamarine</value>
- <!-- Azure Preset Color -->
- <value>azure</value>
- <!-- Beige Preset Color -->
- <value>beige</value>
- <!-- Bisque Preset Color -->
- <value>bisque</value>
- <!-- Black Preset Color -->
- <value>black</value>
- <!-- Blanched Almond Preset Color -->
- <value>blanchedAlmond</value>
- <!-- Blue Preset Color -->
- <value>blue</value>
- <!-- Blue Violet Preset Color -->
- <value>blueViolet</value>
- <!-- Brown Preset Color -->
- <value>brown</value>
- <!-- Burly Wood Preset Color -->
- <value>burlyWood</value>
- <!-- Cadet Blue Preset Color -->
- <value>cadetBlue</value>
- <!-- Chartreuse Preset Color -->
- <value>chartreuse</value>
- <!-- Chocolate Preset Color -->
- <value>chocolate</value>
- <!-- Coral Preset Color -->
- <value>coral</value>
- <!-- Cornflower Blue Preset Color -->
- <value>cornflowerBlue</value>
- <!-- Cornsilk Preset Color -->
- <value>cornsilk</value>
- <!-- Crimson Preset Color -->
- <value>crimson</value>
- <!-- Cyan Preset Color -->
- <value>cyan</value>
- <!-- Dark Blue Preset Color -->
- <value>dkBlue</value>
- <!-- Dark Cyan Preset Color -->
- <value>dkCyan</value>
- <!-- Dark Goldenrod Preset Color -->
- <value>dkGoldenrod</value>
- <!-- Dark Gray Preset Color -->
- <value>dkGray</value>
- <!-- Dark Green Preset Color -->
- <value>dkGreen</value>
- <!-- Dark Khaki Preset Color -->
- <value>dkKhaki</value>
- <!-- Dark Magenta Preset Color -->
- <value>dkMagenta</value>
- <!-- Dark Olive Green Preset Color -->
- <value>dkOliveGreen</value>
- <!-- Dark Orange Preset Color -->
- <value>dkOrange</value>
- <!-- Dark Orchid Preset Color -->
- <value>dkOrchid</value>
- <!-- Dark Red Preset Color -->
- <value>dkRed</value>
- <!-- Dark Salmon Preset Color -->
- <value>dkSalmon</value>
- <!-- Dark Sea Green Preset Color -->
- <value>dkSeaGreen</value>
- <!-- Dark Slate Blue Preset Color -->
- <value>dkSlateBlue</value>
- <!-- Dark Slate Gray Preset Color -->
- <value>dkSlateGray</value>
- <!-- Dark Turquoise Preset Color -->
- <value>dkTurquoise</value>
- <!-- Dark Violet Preset Color -->
- <value>dkViolet</value>
- <!-- Deep Pink Preset Color -->
- <value>deepPink</value>
- <!-- Deep Sky Blue Preset Color -->
- <value>deepSkyBlue</value>
- <!-- Dim Gray Preset Color -->
- <value>dimGray</value>
- <!-- Dodger Blue Preset Color -->
- <value>dodgerBlue</value>
- <!-- Firebrick Preset Color -->
- <value>firebrick</value>
- <!-- Floral White Preset Color -->
- <value>floralWhite</value>
- <!-- Forest Green Preset Color -->
- <value>forestGreen</value>
- <!-- Fuchsia Preset Color -->
- <value>fuchsia</value>
- <!-- Gainsboro Preset Color -->
- <value>gainsboro</value>
- <!-- Ghost White Preset Color -->
- <value>ghostWhite</value>
- <!-- Gold Preset Color -->
- <value>gold</value>
- <!-- Goldenrod Preset Color -->
- <value>goldenrod</value>
- <!-- Gray Preset Color -->
- <value>gray</value>
- <!-- Green Preset Color -->
- <value>green</value>
- <!-- Green Yellow Preset Color -->
- <value>greenYellow</value>
- <!-- Honeydew Preset Color -->
- <value>honeydew</value>
- <!-- Hot Pink Preset Color -->
- <value>hotPink</value>
- <!-- Indian Red Preset Color -->
- <value>indianRed</value>
- <!-- Indigo Preset Color -->
- <value>indigo</value>
- <!-- Ivory Preset Color -->
- <value>ivory</value>
- <!-- Khaki Preset Color -->
- <value>khaki</value>
- <!-- Lavender Preset Color -->
- <value>lavender</value>
- <!-- Lavender Blush Preset Color -->
- <value>lavenderBlush</value>
- <!-- Lawn Green Preset Color -->
- <value>lawnGreen</value>
- <!-- Lemon Chiffon Preset Color -->
- <value>lemonChiffon</value>
- <!-- Light Blue Preset Color -->
- <value>ltBlue</value>
- <!-- Light Coral Preset Color -->
- <value>ltCoral</value>
- <!-- Light Cyan Preset Color -->
- <value>ltCyan</value>
- <!-- Light Goldenrod Yellow Preset Color -->
- <value>ltGoldenrodYellow</value>
- <!-- Light Gray Preset Color -->
- <value>ltGray</value>
- <!-- Light Green Preset Color -->
- <value>ltGreen</value>
- <!-- Light Pink Preset Color -->
- <value>ltPink</value>
- <!-- Light Salmon Preset Color -->
- <value>ltSalmon</value>
- <!-- Light Sea Green Preset Color -->
- <value>ltSeaGreen</value>
- <!-- Light Sky Blue Preset Color -->
- <value>ltSkyBlue</value>
- <!-- Light Slate Gray Preset Color -->
- <value>ltSlateGray</value>
- <!-- Light Steel Blue Preset Color -->
- <value>ltSteelBlue</value>
- <!-- Light Yellow Preset Color -->
- <value>ltYellow</value>
- <!-- Lime Preset Color -->
- <value>lime</value>
- <!-- Lime Green Preset Color -->
- <value>limeGreen</value>
- <!-- Linen Preset Color -->
- <value>linen</value>
- <!-- Magenta Preset Color -->
- <value>magenta</value>
- <!-- Maroon Preset Color -->
- <value>maroon</value>
- <!-- Medium Aquamarine Preset Color -->
- <value>medAquamarine</value>
- <!-- Medium Blue Preset Color -->
- <value>medBlue</value>
- <!-- Medium Orchid Preset Color -->
- <value>medOrchid</value>
- <!-- Medium Purple Preset Color -->
- <value>medPurple</value>
- <!-- Medium Sea Green Preset Color -->
- <value>medSeaGreen</value>
- <!-- Medium Slate Blue Preset Color -->
- <value>medSlateBlue</value>
- <!-- Medium Spring Green Preset Color -->
- <value>medSpringGreen</value>
- <!-- Medium Turquoise Preset Color -->
- <value>medTurquoise</value>
- <!-- Medium Violet Red Preset Color -->
- <value>medVioletRed</value>
- <!-- Midnight Blue Preset Color -->
- <value>midnightBlue</value>
- <!-- Mint Cream Preset Color -->
- <value>mintCream</value>
- <!-- Misty Rose Preset Color -->
- <value>mistyRose</value>
- <!-- Moccasin Preset Color -->
- <value>moccasin</value>
- <!-- Navajo White Preset Color -->
- <value>navajoWhite</value>
- <!-- Navy Preset Color -->
- <value>navy</value>
- <!-- Old Lace Preset Color -->
- <value>oldLace</value>
- <!-- Olive Preset Color -->
- <value>olive</value>
- <!-- Olive Drab Preset Color -->
- <value>oliveDrab</value>
- <!-- Orange Preset Color -->
- <value>orange</value>
- <!-- Orange Red Preset Color -->
- <value>orangeRed</value>
- <!-- Orchid Preset Color -->
- <value>orchid</value>
- <!-- Pale Goldenrod Preset Color -->
- <value>paleGoldenrod</value>
- <!-- Pale Green Preset Color -->
- <value>paleGreen</value>
- <!-- Pale Turquoise Preset Color -->
- <value>paleTurquoise</value>
- <!-- Pale Violet Red Preset Color -->
- <value>paleVioletRed</value>
- <!-- Papaya Whip Preset Color -->
- <value>papayaWhip</value>
- <!-- Peach Puff Preset Color -->
- <value>peachPuff</value>
- <!-- Peru Preset Color -->
- <value>peru</value>
- <!-- Pink Preset Color -->
- <value>pink</value>
- <!-- Plum Preset Color -->
- <value>plum</value>
- <!-- Powder Blue Preset Color -->
- <value>powderBlue</value>
- <!-- Purple Preset Color -->
- <value>purple</value>
- <!-- Red Preset Color -->
- <value>red</value>
- <!-- Rosy Brown Preset Color -->
- <value>rosyBrown</value>
- <!-- Royal Blue Preset Color -->
- <value>royalBlue</value>
- <!-- Saddle Brown Preset Color -->
- <value>saddleBrown</value>
- <!-- Salmon Preset Color -->
- <value>salmon</value>
- <!-- Sandy Brown Preset Color -->
- <value>sandyBrown</value>
- <!-- Sea Green Preset Color -->
- <value>seaGreen</value>
- <!-- Sea Shell Preset Color -->
- <value>seaShell</value>
- <!-- Sienna Preset Color -->
- <value>sienna</value>
- <!-- Silver Preset Color -->
- <value>silver</value>
- <!-- Sky Blue Preset Color -->
- <value>skyBlue</value>
- <!-- Slate Blue Preset Color -->
- <value>slateBlue</value>
- <!-- Slate Gray Preset Color -->
- <value>slateGray</value>
- <!-- Snow Preset Color -->
- <value>snow</value>
- <!-- Spring Green Preset Color -->
- <value>springGreen</value>
- <!-- Steel Blue Preset Color -->
- <value>steelBlue</value>
- <!-- Tan Preset Color -->
- <value>tan</value>
- <!-- Teal Preset Color -->
- <value>teal</value>
- <!-- Thistle Preset Color -->
- <value>thistle</value>
- <!-- Tomato Preset Color -->
- <value>tomato</value>
- <!-- Turquoise Preset Color -->
- <value>turquoise</value>
- <!-- Violet Preset Color -->
- <value>violet</value>
- <!-- Wheat Preset Color -->
- <value>wheat</value>
- <!-- White Preset Color -->
- <value>white</value>
- <!-- White Smoke Preset Color -->
- <value>whiteSmoke</value>
- <!-- Yellow Preset Color -->
- <value>yellow</value>
- <!-- Yellow Green Preset Color -->
- <value>yellowGreen</value>
- </choice>
- </define>
- <define name="CT_PresetColor">
- <ref name="EG_ColorTransform"/>
- <attribute name="val">
- <ref name="ST_PresetColorVal"/>
- </attribute>
- </define>
- <define name="EG_OfficeArtExtensionList">
- <element name="ext">
- <ref name="CT_OfficeArtExtension"/>
- </element>
- </define>
- <define name="CT_OfficeArtExtensionList">
- <ref name="EG_OfficeArtExtensionList"/>
- </define>
- <define name="CT_Scale2D">
- <element name="sx">
- <ref name="CT_Ratio"/>
- </element>
- <element name="sy">
- <ref name="CT_Ratio"/>
- </element>
- </define>
- <define name="CT_Transform2D">
- <element name="off">
- <ref name="CT_Point2D"/>
- </element>
- <element name="ext">
- <ref name="CT_PositiveSize2D"/>
- </element>
- <attribute name="rot">
- <ref name="ST_Angle"/>
- </attribute>
- <attribute name="flipH">
- <data type="boolean"/>
- </attribute>
- <attribute name="flipV">
- <data type="boolean"/>
- </attribute>
- </define>
- <define name="CT_GroupTransform2D">
- <element name="off">
- <ref name="CT_Point2D"/>
- </element>
- <element name="ext">
- <ref name="CT_PositiveSize2D"/>
- </element>
- <element name="chOff">
- <ref name="CT_Point2D"/>
- </element>
- <element name="chExt">
- <ref name="CT_PositiveSize2D"/>
- </element>
- <attribute name="rot">
- <ref name="ST_Angle"/>
- </attribute>
- <attribute name="flipH">
- <data type="boolean"/>
- </attribute>
- <attribute name="flipV">
- <data type="boolean"/>
- </attribute>
- </define>
- <define name="CT_Point3D">
- <attribute name="x">
- <ref name="ST_Coordinate"/>
- </attribute>
- <attribute name="y">
- <ref name="ST_Coordinate"/>
- </attribute>
- <attribute name="z">
- <ref name="ST_Coordinate"/>
- </attribute>
- </define>
- <define name="CT_Vector3D">
- <attribute name="dx">
- <ref name="ST_Coordinate"/>
- </attribute>
- <attribute name="dy">
- <ref name="ST_Coordinate"/>
- </attribute>
- <attribute name="dz">
- <ref name="ST_Coordinate"/>
- </attribute>
- </define>
- <define name="CT_SphereCoords">
- <attribute name="lat">
- <ref name="ST_PositiveFixedAngle"/>
- </attribute>
- <attribute name="lon">
- <ref name="ST_PositiveFixedAngle"/>
- </attribute>
- <attribute name="rev">
- <ref name="ST_PositiveFixedAngle"/>
- </attribute>
- </define>
- <define name="CT_RelativeRect">
- <attribute name="l">
- <ref name="ST_Percentage"/>
- </attribute>
- <attribute name="t">
- <ref name="ST_Percentage"/>
- </attribute>
- <attribute name="r">
- <ref name="ST_Percentage"/>
- </attribute>
- <attribute name="b">
- <ref name="ST_Percentage"/>
- </attribute>
- </define>
- <define name="ST_RectAlignment">
- <choice>
- <!-- Rectangle Alignment Enum ( Top Left ) -->
- <value>tl</value>
- <!-- Rectangle Alignment Enum ( Top ) -->
- <value>t</value>
- <!-- Rectangle Alignment Enum ( Top Right ) -->
- <value>tr</value>
- <!-- Rectangle Alignment Enum ( Left ) -->
- <value>l</value>
- <!-- Rectangle Alignment Enum ( Center ) -->
- <value>ctr</value>
- <!-- Rectangle Alignment Enum ( Right ) -->
- <value>r</value>
- <!-- Rectangle Alignment Enum ( Bottom Left ) -->
- <value>bl</value>
- <!-- Rectangle Alignment Enum ( Bottom ) -->
- <value>b</value>
- <!-- Rectangle Alignment Enum ( Bottom Right ) -->
- <value>br</value>
- </choice>
- </define>
- <define name="EG_ColorChoice">
- <choice>
- <element name="scrgbClr">
- <ref name="CT_ScRgbColor"/>
- </element>
- <element name="srgbClr">
- <ref name="CT_SRgbColor"/>
- </element>
- <element name="hslClr">
- <ref name="CT_HslColor"/>
- </element>
- <element name="sysClr">
- <ref name="CT_SystemColor"/>
- </element>
- <element name="schemeClr">
- <ref name="CT_SchemeColor"/>
- </element>
- <element name="prstClr">
- <ref name="CT_PresetColor"/>
- </element>
- </choice>
- </define>
- <define name="CT_Color">
- <ref name="EG_ColorChoice"/>
- </define>
- <define name="CT_ColorMRU">
- <ref name="EG_ColorChoice"/>
- </define>
- <define name="ST_BlackWhiteMode">
- <choice>
- <!-- Color -->
- <value>clr</value>
- <!-- Automatic -->
- <value>auto</value>
- <!-- Gray -->
- <value>gray</value>
- <!-- Light Gray -->
- <value>ltGray</value>
- <!-- Inverse Gray -->
- <value>invGray</value>
- <!-- Gray and White -->
- <value>grayWhite</value>
- <!-- Black and Gray -->
- <value>blackGray</value>
- <!-- Black and White -->
- <value>blackWhite</value>
- <!-- Black -->
- <value>black</value>
- <!-- White -->
- <value>white</value>
- <!-- Hidden -->
- <value>hidden</value>
- </choice>
- </define>
- <define name="AG_Blob">
- <attribute name="r:embed">
- <data type="string"/>
- </attribute>
- <attribute name="r:link">
- <data type="string"/>
- </attribute>
- </define>
- <define name="CT_EmbeddedWAVAudioFile">
- <attribute name="r:embed"/>
- <attribute name="name">
- <data type="string"/>
- </attribute>
- <attribute name="builtIn">
- <data type="boolean"/>
- </attribute>
- </define>
- <define name="CT_Hyperlink">
- <element name="snd">
- <ref name="CT_EmbeddedWAVAudioFile"/>
- </element>
- <element name="extLst">
- <ref name="CT_OfficeArtExtensionList"/>
- </element>
- <attribute name="r:id"/>
- <attribute name="invalidUrl">
- <data type="string"/>
- </attribute>
- <attribute name="action">
- <data type="string"/>
- </attribute>
- <attribute name="tgtFrame">
- <data type="string"/>
- </attribute>
- <attribute name="tooltip">
- <data type="string"/>
- </attribute>
- <attribute name="history">
- <data type="boolean"/>
- </attribute>
- <attribute name="highlightClick">
- <data type="boolean"/>
- </attribute>
- <attribute name="endSnd">
- <data type="boolean"/>
- </attribute>
- </define>
- <define name="ST_DrawingElementId">
- <data type="unsignedInt"/>
- </define>
- </grammar>
- <resource name="ST_Coordinate" resource="Integer"/>
- <resource name="ST_PositiveCoordinate" resource="Integer"/>
- <resource name="ST_Angle" resource="Integer"/>
- <resource name="CT_Angle" resource="Value">
- <attribute name="val" tokenid="ooxml:CT_Angle_val" action="setValue"/>
- <action name="start" action="setDefaultIntegerValue"/>
- </resource>
- <resource name="CT_PositiveFixedAngle" resource="Value">
- <attribute name="val" tokenid="ooxml:CT_PositiveFixedAngle_val" action="setValue"/>
- </resource>
- <resource name="ST_Percentage" resource="Integer"/>
- <resource name="CT_Percentage" resource="Value">
- <attribute name="val" tokenid="ooxml:CT_Percentage_val" action="setValue"/>
- <action name="start" action="setDefaultIntegerValue"/>
- </resource>
- <resource name="ST_PositivePercentage" resource="Value">
- <action name="characters" action="positivePercentage"/>
- </resource>
- <resource name="CT_PositivePercentage" resource="Value">
- <attribute name="val" tokenid="ooxml:CT_PositivePercentage_val" action="setValue"/>
- </resource>
- <resource name="CT_FixedPercentage" resource="Value">
- <attribute name="val" tokenid="ooxml:CT_FixedPercentage_val" action="setValue"/>
- </resource>
- <resource name="CT_PositiveFixedPercentage" resource="Value">
- <attribute name="val" tokenid="ooxml:CT_PositiveFixedPercentage_val" action="setValue"/>
- </resource>
- <resource name="CT_Point2D" resource="Properties">
- <attribute name="x" tokenid="ooxml:CT_Point2D_x"/>
- <attribute name="y" tokenid="ooxml:CT_Point2D_y"/>
- </resource>
- <resource name="CT_PositiveSize2D" resource="Properties">
- <attribute name="cx" tokenid="ooxml:CT_PositiveSize2D_cx"/>
- <attribute name="cy" tokenid="ooxml:CT_PositiveSize2D_cy"/>
- </resource>
- <resource name="CT_ScRgbColor" resource="Properties">
- <attribute name="r" tokenid="ooxml:CT_ScRgbColor_r"/>
- <attribute name="g" tokenid="ooxml:CT_ScRgbColor_g"/>
- <attribute name="b" tokenid="ooxml:CT_ScRgbColor_b"/>
- </resource>
- <resource name="ST_HexBinary3" resource="Hex"/>
- <resource name="CT_SRgbColor" resource="Properties">
- <attribute name="val" tokenid="ooxml:CT_SRgbColor_val"/>
- </resource>
- <resource name="CT_HslColor" resource="Properties">
- <attribute name="hue" tokenid="ooxml:CT_HslColor_hue"/>
- <attribute name="sat" tokenid="ooxml:CT_HslColor_sat"/>
- <attribute name="lum" tokenid="ooxml:CT_HslColor_lum"/>
- </resource>
- <resource name="ST_SystemColorVal" resource="List">
- <value tokenid="ooxml:Value_drawingml_ST_SystemColorVal_scrollBar">scrollBar</value>
- <value tokenid="ooxml:Value_drawingml_ST_SystemColorVal_background">background</value>
- <value tokenid="ooxml:Value_drawingml_ST_SystemColorVal_activeCaption">activeCaption</value>
- <value tokenid="ooxml:Value_drawingml_ST_SystemColorVal_inactiveCaption">inactiveCaption</value>
- <value tokenid="ooxml:Value_drawingml_ST_SystemColorVal_menu">menu</value>
- <value tokenid="ooxml:Value_drawingml_ST_SystemColorVal_window">window</value>
- <value tokenid="ooxml:Value_drawingml_ST_SystemColorVal_windowFrame">windowFrame</value>
- <value tokenid="ooxml:Value_drawingml_ST_SystemColorVal_menuText">menuText</value>
- <value tokenid="ooxml:Value_drawingml_ST_SystemColorVal_windowText">windowText</value>
- <value tokenid="ooxml:Value_drawingml_ST_SystemColorVal_captionText">captionText</value>
- <value tokenid="ooxml:Value_drawingml_ST_SystemColorVal_activeBorder">activeBorder</value>
- <value tokenid="ooxml:Value_drawingml_ST_SystemColorVal_inactiveBorder">inactiveBorder</value>
- <value tokenid="ooxml:Value_drawingml_ST_SystemColorVal_appWorkspace">appWorkspace</value>
- <value tokenid="ooxml:Value_drawingml_ST_SystemColorVal_highlight">highlight</value>
- <value tokenid="ooxml:Value_drawingml_ST_SystemColorVal_highlightText">highlightText</value>
- <value tokenid="ooxml:Value_drawingml_ST_SystemColorVal_btnFace">btnFace</value>
- <value tokenid="ooxml:Value_drawingml_ST_SystemColorVal_btnShadow">btnShadow</value>
- <value tokenid="ooxml:Value_drawingml_ST_SystemColorVal_grayText">grayText</value>
- <value tokenid="ooxml:Value_drawingml_ST_SystemColorVal_btnText">btnText</value>
- <value tokenid="ooxml:Value_drawingml_ST_SystemColorVal_inactiveCaptionText">inactiveCaptionText</value>
- <value tokenid="ooxml:Value_drawingml_ST_SystemColorVal_btnHighlight">btnHighlight</value>
- <value tokenid="ooxml:Value_drawingml_ST_SystemColorVal_3dDkShadow">3dDkShadow</value>
- <value tokenid="ooxml:Value_drawingml_ST_SystemColorVal_3dLight">3dLight</value>
- <value tokenid="ooxml:Value_drawingml_ST_SystemColorVal_infoText">infoText</value>
- <value tokenid="ooxml:Value_drawingml_ST_SystemColorVal_infoBk">infoBk</value>
- <value tokenid="ooxml:Value_drawingml_ST_SystemColorVal_hotLight">hotLight</value>
- <value tokenid="ooxml:Value_drawingml_ST_SystemColorVal_gradientActiveCaption">gradientActiveCaption</value>
- <value tokenid="ooxml:Value_drawingml_ST_SystemColorVal_gradientInactiveCaption">gradientInactiveCaption</value>
- <value tokenid="ooxml:Value_drawingml_ST_SystemColorVal_menuHighlight">menuHighlight</value>
- <value tokenid="ooxml:Value_drawingml_ST_SystemColorVal_menuBar">menuBar</value>
- </resource>
- <resource name="CT_SystemColor" resource="Properties">
- <attribute name="val" tokenid="ooxml:CT_SystemColor_val"/>
- <attribute name="lastClr" tokenid="ooxml:CT_SytemColor_lastClr"/>
- </resource>
- <resource name="ST_SchemeColorVal" resource="List">
- <value tokenid="ooxml:Value_drawingml_ST_SchemeColorVal_bg1">bg1</value>
- <value tokenid="ooxml:Value_drawingml_ST_SchemeColorVal_tx1">tx1</value>
- <value tokenid="ooxml:Value_drawingml_ST_SchemeColorVal_bg2">bg2</value>
- <value tokenid="ooxml:Value_drawingml_ST_SchemeColorVal_tx2">tx2</value>
- <value tokenid="ooxml:Value_drawingml_ST_SchemeColorVal_accent1">accent1</value>
- <value tokenid="ooxml:Value_drawingml_ST_SchemeColorVal_accent2">accent2</value>
- <value tokenid="ooxml:Value_drawingml_ST_SchemeColorVal_accent3">accent3</value>
- <value tokenid="ooxml:Value_drawingml_ST_SchemeColorVal_accent4">accent4</value>
- <value tokenid="ooxml:Value_drawingml_ST_SchemeColorVal_accent5">accent5</value>
- <value tokenid="ooxml:Value_drawingml_ST_SchemeColorVal_accent6">accent6</value>
- <value tokenid="ooxml:Value_drawingml_ST_SchemeColorVal_hlink">hlink</value>
- <value tokenid="ooxml:Value_drawingml_ST_SchemeColorVal_folHlink">folHlink</value>
- <value tokenid="ooxml:Value_drawingml_ST_SchemeColorVal_phClr">phClr</value>
- <value tokenid="ooxml:Value_drawingml_ST_SchemeColorVal_dk1">dk1</value>
- <value tokenid="ooxml:Value_drawingml_ST_SchemeColorVal_lt1">lt1</value>
- <value tokenid="ooxml:Value_drawingml_ST_SchemeColorVal_dk2">dk2</value>
- <value tokenid="ooxml:Value_drawingml_ST_SchemeColorVal_lt2">lt2</value>
- </resource>
- <resource name="CT_SchemeColor" resource="Properties">
- <attribute name="val" tokenid="ooxml:CT_SchemeColor_val"/>
- </resource>
- <resource name="ST_PresetColorVal" resource="List">
- <value tokenid="ooxml:Value_ST_PresetColorVal_aliceBlue">aliceBlue</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_antiqueWhite">antiqueWhite</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_aqua">aqua</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_aquamarine">aquamarine</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_azure">azure</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_beige">beige</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_bisque">bisque</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_black">black</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_blanchedAlmond">blanchedAlmond</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_blue">blue</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_blueViolet">blueViolet</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_brown">brown</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_burlyWood">burlyWood</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_cadetBlue">cadetBlue</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_chartreuse">chartreuse</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_chocolate">chocolate</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_coral">coral</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_cornflowerBlue">cornflowerBlue</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_cornsilk">cornsilk</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_crimson">crimson</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_cyan">cyan</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_deepPink">deepPink</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_deepSkyBlue">deepSkyBlue</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_dimGray">dimGray</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_dkBlue">dkBlue</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_dkCyan">dkCyan</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_dkGoldenrod">dkGoldenrod</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_dkGray">dkGray</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_dkGreen">dkGreen</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_dkKhaki">dkKhaki</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_dkMagenta">dkMagenta</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_dkOliveGreen">dkOliveGreen</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_dkOrange">dkOrange</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_dkOrchid">dkOrchid</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_dkRed">dkRed</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_dkSalmon">dkSalmon</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_dkSeaGreen">dkSeaGreen</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_dkSlateBlue">dkSlateBlue</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_dkSlateGray">dkSlateGray</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_dkTurquoise">dkTurquoise</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_dkViolet">dkViolet</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_dodgerBlue">dodgerBlue</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_firebrick">firebrick</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_floralWhite">floralWhite</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_forestGreen">forestGreen</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_fuchsia">fuchsia</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_gainsboro">gainsboro</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_ghostWhite">ghostWhite</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_gold">gold</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_goldenrod">goldenrod</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_gray">gray</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_green">green</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_greenYellow">greenYellow</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_honeydew">honeydew</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_hotPink">hotPink</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_indianRed">indianRed</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_indigo">indigo</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_ivory">ivory</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_khaki">khaki</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_lavender">lavender</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_lavenderBlush">lavenderBlush</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_lawnGreen">lawnGreen</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_lemonChiffon">lemonChiffon</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_lime">lime</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_limeGreen">limeGreen</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_linen">linen</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_ltBlue">ltBlue</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_ltCoral">ltCoral</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_ltCyan">ltCyan</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_ltGoldenrodYellow">ltGoldenrodYellow</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_ltGray">ltGray</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_ltGreen">ltGreen</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_ltPink">ltPink</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_ltSalmon">ltSalmon</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_ltSeaGreen">ltSeaGreen</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_ltSkyBlue">ltSkyBlue</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_ltSlateGray">ltSlateGray</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_ltSteelBlue">ltSteelBlue</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_ltYellow">ltYellow</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_magenta">magenta</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_maroon">maroon</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_medAquamarine">medAquamarine</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_medBlue">medBlue</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_medOrchid">medOrchid</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_medPurple">medPurple</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_medSeaGreen">medSeaGreen</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_medSlateBlue">medSlateBlue</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_medSpringGreen">medSpringGreen</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_medTurquoise">medTurquoise</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_medVioletRed">medVioletRed</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_midnightBlue">midnightBlue</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_mintCream">mintCream</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_mistyRose">mistyRose</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_moccasin">moccasin</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_navajoWhite">navajoWhite</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_navy">navy</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_oldLace">oldLace</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_olive">olive</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_oliveDrab">oliveDrab</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_orange">orange</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_orangeRed">orangeRed</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_orchid">orchid</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_paleGoldenrod">paleGoldenrod</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_paleGreen">paleGreen</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_paleTurquoise">paleTurquoise</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_paleVioletRed">paleVioletRed</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_papayaWhip">papayaWhip</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_peachPuff">peachPuff</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_peru">peru</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_pink">pink</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_plum">plum</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_powderBlue">powderBlue</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_purple">purple</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_red">red</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_rosyBrown">rosyBrown</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_royalBlue">royalBlue</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_saddleBrown">saddleBrown</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_salmon">salmon</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_sandyBrown">sandyBrown</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_seaGreen">seaGreen</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_seaShell">seaShell</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_sienna">sienna</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_silver">silver</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_skyBlue">skyBlue</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_slateBlue">slateBlue</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_slateGray">slateGray</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_snow">snow</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_springGreen">springGreen</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_steelBlue">steelBlue</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_tan">tan</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_teal">teal</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_thistle">thistle</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_tomato">tomato</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_turquoise">turquoise</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_violet">violet</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_wheat">wheat</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_white">white</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_whiteSmoke">whiteSmoke</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_yellow">yellow</value>
- <value tokenid="ooxml:Value_ST_PresetColorVal_yellowGreen">yellowGreen</value>
- </resource>
- <resource name="CT_PresetColor" resource="Properties">
- <attribute name="val" tokenid="ooxml:CT_PresetColor_val"/>
- </resource>
- <resource name="CT_Transform2D" resource="Properties">
- <element name="off" tokenid="ooxml:CT_Transform2D_off"/>
- <element name="ext" tokenid="ooxml:CT_Transform2D_ext"/>
- <attribute name="rot" tokenid="ooxml:CT_Transform2D_rot"/>
- <attribute name="flipH" tokenid="ooxml:CT_Transform2D_flipH"/>
- <attribute name="flipV" tokenid="ooxml:CT_Transform2D_flipV"/>
- </resource>
- <resource name="ST_RectAlignment" resource="List">
- <value tokenid="ooxml:Value_drawingml_ST_RectAlignment_tl">tl</value>
- <value tokenid="ooxml:Value_drawingml_ST_RectAlignment_t">t</value>
- <value tokenid="ooxml:Value_drawingml_ST_RectAlignment_tr">tr</value>
- <value tokenid="ooxml:Value_drawingml_ST_RectAlignment_l">l</value>
- <value tokenid="ooxml:Value_drawingml_ST_RectAlignment_ctr">ctr</value>
- <value tokenid="ooxml:Value_drawingml_ST_RectAlignment_r">r</value>
- <value tokenid="ooxml:Value_drawingml_ST_RectAlignment_bl">bl</value>
- <value tokenid="ooxml:Value_drawingml_ST_RectAlignment_b">b</value>
- <value tokenid="ooxml:Value_drawingml_ST_RectAlignment_br">br</value>
- </resource>
- <resource name="EG_ColorChoice" resource="Properties">
- <element name="scrgbClr" tokenid="ooxml:EG_ColorChoice_scrgbClr"/>
- <element name="srgbClr" tokenid="ooxml:EG_ColorChoice_srgbClr"/>
- <element name="hslClr" tokenid="ooxml:EG_ColorChoice_hslClr"/>
- <element name="sysClr" tokenid="ooxml:EG_ColorChoice_sysClr"/>
- <element name="schemeClr" tokenid="ooxml:EG_ColorChoice_schemeClr"/>
- <element name="prstClr" tokenid="ooxml:EG_ColorChoice_prstClr"/>
- </resource>
- <resource name="CT_Color" resource="Properties"/>
- <resource name="CT_ColorMRU" resource="Properties"/>
- <resource name="ST_BlackWhiteMode" resource="List">
- <value tokenid="ooxml:Value_drawingml_ST_BlackWhiteMode_clr">clr</value>
- <value tokenid="ooxml:Value_drawingml_ST_BlackWhiteMode_auto">auto</value>
- <value tokenid="ooxml:Value_drawingml_ST_BlackWhiteMode_gray">gray</value>
- <value tokenid="ooxml:Value_drawingml_ST_BlackWhiteMode_ltGray">ltGray</value>
- <value tokenid="ooxml:Value_drawingml_ST_BlackWhiteMode_invGray">invGray</value>
- <value tokenid="ooxml:Value_drawingml_ST_BlackWhiteMode_grayWhite">grayWhite</value>
- <value tokenid="ooxml:Value_drawingml_ST_BlackWhiteMode_blackGray">blackGray</value>
- <value tokenid="ooxml:Value_drawingml_ST_BlackWhiteMode_blackWhite">blackWhite</value>
- <value tokenid="ooxml:Value_drawingml_ST_BlackWhiteMode_black">black</value>
- <value tokenid="ooxml:Value_drawingml_ST_BlackWhiteMode_white">white</value>
- <value tokenid="ooxml:Value_drawingml_ST_BlackWhiteMode_hidden">hidden</value>
- </resource>
- <resource name="AG_Blob" resource="Properties">
- <attribute name="r:embed" tokenid="ooxml:AG_Blob_r_embed"/>
- <attribute name="r:link" tokenid="ooxml:AG_Blob_r_link"/>
- </resource>
- <resource name="ST_DrawingElementId" resource="Integer"/>
- </namespace>
- <namespace name="dml-documentProperties">
- <grammar xmlns="http://relaxng.org/ns/structure/1.0" ns="http://schemas.openxmlformats.org/drawingml/2006/main">
- <include href="dml-shapeGeometry"/>
- <define name="AG_Locking">
- <attribute name="noGrp">
- <data type="boolean"/>
- </attribute>
- <attribute name="noSelect">
- <data type="boolean"/>
- </attribute>
- <attribute name="noRot">
- <data type="boolean"/>
- </attribute>
- <attribute name="noChangeAspect">
- <data type="boolean"/>
- </attribute>
- <attribute name="noMove">
- <data type="boolean"/>
- </attribute>
- <attribute name="noResize">
- <data type="boolean"/>
- </attribute>
- <attribute name="noEditPoints">
- <data type="boolean"/>
- </attribute>
- <attribute name="noAdjustHandles">
- <data type="boolean"/>
- </attribute>
- <attribute name="noChangeArrowheads">
- <data type="boolean"/>
- </attribute>
- <attribute name="noChangeShapeType">
- <data type="boolean"/>
- </attribute>
- </define>
- <define name="CT_ConnectorLocking">
- <element name="extLst">
- <ref name="CT_OfficeArtExtensionList"/>
- </element>
- <ref name="AG_Locking"/>
- </define>
- <define name="CT_ShapeLocking">
- <element name="extLst">
- <ref name="CT_OfficeArtExtensionList"/>
- </element>
- <ref name="AG_Locking"/>
- <attribute name="noTextEdit">
- <data type="boolean"/>
- </attribute>
- </define>
- <define name="CT_PictureLocking">
- <element name="extLst">
- <ref name="CT_OfficeArtExtensionList"/>
- </element>
- <ref name="AG_Locking"/>
- <attribute name="noCrop">
- <data type="boolean"/>
- </attribute>
- </define>
- <define name="CT_GroupLocking">
- <element name="extLst">
- <ref name="CT_OfficeArtExtensionList"/>
- </element>
- <attribute name="noGrp">
- <data type="boolean"/>
- </attribute>
- <attribute name="noUngrp">
- <data type="boolean"/>
- </attribute>
- <attribute name="noSelect">
- <data type="boolean"/>
- </attribute>
- <attribute name="noRot">
- <data type="boolean"/>
- </attribute>
- <attribute name="noChangeAspect">
- <data type="boolean"/>
- </attribute>
- <attribute name="noMove">
- <data type="boolean"/>
- </attribute>
- <attribute name="noResize">
- <data type="boolean"/>
- </attribute>
- </define>
- <define name="CT_GraphicalObjectFrameLocking">
- <element name="extLst">
- <ref name="CT_OfficeArtExtensionList"/>
- </element>
- <attribute name="noGrp">
- <data type="boolean"/>
- </attribute>
- <attribute name="noDrilldown">
- <data type="boolean"/>
- </attribute>
- <attribute name="noSelect">
- <data type="boolean"/>
- </attribute>
- <attribute name="noChangeAspect">
- <data type="boolean"/>
- </attribute>
- <attribute name="noMove">
- <data type="boolean"/>
- </attribute>
- <attribute name="noResize">
- <data type="boolean"/>
- </attribute>
- </define>
- <define name="CT_NonVisualDrawingProps">
- <element name="a:hlinkClick">
- <ref name="CT_Hyperlink_URL"/>
- </element>
- <element name="hlinkHover">
- <ref name="CT_Hyperlink"/>
- </element>
- <element name="extLst">
- <ref name="CT_OfficeArtExtensionList"/>
- </element>
- <attribute name="id">
- <ref name="ST_DrawingElementId"/>
- </attribute>
- <attribute name="name">
- <data type="string"/>
- </attribute>
- <attribute name="descr">
- <data type="string"/>
- </attribute>
- <attribute name="hidden">
- <data type="boolean"/>
- </attribute>
- <attribute name="title">
- <data type="string"/>
- </attribute>
- </define>
- <define name="CT_Hyperlink_URL">
- <attribute name="r:id">
- <data type="string"/>
- </attribute>
- </define>
- <define name="CT_NonVisualDrawingShapeProps">
- <element name="spLocks">
- <ref name="CT_ShapeLocking"/>
- </element>
- <element name="extLst">
- <ref name="CT_OfficeArtExtensionList"/>
- </element>
- <attribute name="txBox">
- <data type="boolean"/>
- </attribute>
- </define>
- <define name="CT_NonVisualConnectorProperties">
- <element name="cxnSpLocks">
- <ref name="CT_ConnectorLocking"/>
- </element>
- <element name="stCxn">
- <ref name="CT_Connection"/>
- </element>
- <element name="endCxn">
- <ref name="CT_Connection"/>
- </element>
- <element name="extLst">
- <ref name="CT_OfficeArtExtensionList"/>
- </element>
- </define>
- <define name="CT_NonVisualPictureProperties">
- <element name="picLocks">
- <ref name="CT_PictureLocking"/>
- </element>
- <element name="extLst">
- <ref name="CT_OfficeArtExtensionList"/>
- </element>
- <attribute name="preferRelativeResize">
- <data type="boolean"/>
- </attribute>
- </define>
- <define name="CT_NonVisualGroupDrawingShapeProps">
- <element name="grpSpLocks">
- <ref name="CT_GroupLocking"/>
- </element>
- <element name="extLst">
- <ref name="CT_OfficeArtExtensionList"/>
- </element>
- </define>
- <define name="CT_NonVisualGraphicFrameProperties">
- <element name="graphicFrameLocks">
- <ref name="CT_GraphicalObjectFrameLocking"/>
- </element>
- <element name="extLst">
- <ref name="CT_OfficeArtExtensionList"/>
- </element>
- </define>
- </grammar>
- <resource name="CT_Hyperlink_URL" resource="Properties">
- <attribute name="r:id" tokenid="ooxml:CT_Hyperlink_URL"/>
- <action name="start" action="handleHyperlinkURL"/>
- </resource>
- <resource name="CT_GraphicalObjectFrameLocking" resource="Properties">
- <element name="extLst" tokenid="ooxml:CT_GraphicalObjectFrameLocking_extLst"/>
- <attribute name="noGrp" tokenid="ooxml:CT_GraphicalObjectFrameLocking_noGrp"/>
- <attribute name="noDrilldown" tokenid="ooxml:CT_GraphicalObjectFrameLocking_noDrilldown"/>
- <attribute name="noSelect" tokenid="ooxml:CT_GraphicalObjectFrameLocking_noSelect"/>
- <attribute name="noChangeAspect" tokenid="ooxml:CT_GraphicalObjectFrameLocking_noChangeAspect"/>
- <attribute name="noMove" tokenid="ooxml:CT_GraphicalObjectFrameLocking_noMove"/>
- <attribute name="noResize" tokenid="ooxml:CT_GraphicalObjectFrameLocking_noResize"/>
- </resource>
- <resource name="CT_NonVisualDrawingProps" resource="Properties">
- <element name="a:hlinkClick" tokenid="ooxml:CT_NonVisualDrawingProps_a_hlinkClick"/>
- <element name="hlinkHover" tokenid="ooxml:CT_NonVisualDrawingProps_hlinkHover"/>
- <element name="extLst" tokenid="ooxml:CT_NonVisualDrawingProps_extLst"/>
- <attribute name="id" tokenid="ooxml:CT_NonVisualDrawingProps_id"/>
- <attribute name="name" tokenid="ooxml:CT_NonVisualDrawingProps_name"/>
- <attribute name="descr" tokenid="ooxml:CT_NonVisualDrawingProps_descr"/>
- <attribute name="hidden" tokenid="ooxml:CT_NonVisualDrawingProps_hidden"/>
- <attribute name="title" tokenid="ooxml:CT_NonVisualDrawingProps_title"/>
- </resource>
- <resource name="CT_NonVisualPictureProperties" resource="Properties">
- <element name="picLocks" tokenid="ooxml:CT_NonVisualPictureProperties_picLocks"/>
- <element name="extLst" tokenid="ooxml:CT_NonVisualPictureProperties_extLst"/>
- <attribute name="preferRelativeResize" tokenid="ooxml:CT_NonVisualPictureProperties_preferRelativeResize"/>
- </resource>
- <resource name="CT_NonVisualGraphicFrameProperties" resource="Properties">
- <element name="graphicFrameLocks" tokenid="ooxml:CT_NonVisualGraphicFrameProperties_graphicFrameLocks"/>
- <element name="extLst" tokenid="ooxml:CT_NonVisualGraphicFrameProperties_extLst"/>
- </resource>
- </namespace>
- <namespace name="dml-graphicalObject">
- <start name="graphic"/>
- <grammar xmlns="http://relaxng.org/ns/structure/1.0" ns="http://schemas.openxmlformats.org/drawingml/2006/main">
- <!-- ISO RELAX NG Schema -->
- <!-- start = graphic -->
- <define name="CT_GraphicalObjectData">
- <ref name="pic"/>
- <ref name="relIds"/>
- <ref name="lockedCanvas"/>
- <ref name="chart"/>
- <ref name="wsp"/>
- <ref name="wgp"/>
- <element>
- <ref name="BUILT_IN_ANY_TYPE"/>
- </element>
- <attribute name="uri">
- <data type="token"/>
- </attribute>
- </define>
- <define name="CT_GraphicalObject">
- <element name="graphicData">
- <ref name="CT_GraphicalObjectData"/>
- </element>
- </define>
- <define name="graphic">
- <element name="graphic">
- <ref name="CT_GraphicalObject"/>
- </element>
- </define>
- </grammar>
- <resource name="CT_GraphicalObjectData" resource="Properties">
- <element name="pic" tokenid="ooxml:CT_GraphicalObjectData_pic"/>
- <element name="relIds" tokenid="ooxml:CT_GraphicalObjectData_relIds"/>
- <element name="lockedCanvas" tokenid="ooxml:CT_GraphicalObjectData_lockedCanvas"/>
- <element name="chart" tokenid="ooxml:CT_GraphicalObjectData_chart"/>
- <element name="wsp" tokenid="ooxml:CT_GraphicalObjectData_wsp"/>
- <element name="wgp" tokenid="ooxml:CT_GraphicalObjectData_wgp"/>
- <attribute name="uri" tokenid="ooxml:CT_GraphicalObjectData_uri"/>
- </resource>
- <resource name="CT_GraphicalObject" resource="Properties">
- <element name="graphicData" tokenid="ooxml:CT_GraphicalObject_graphicData"/>
- </resource>
- <resource name="graphic" resource="Properties">
- <element name="graphic" tokenid="ooxml:graphic_graphic"/>
- </resource>
- </namespace>
- <namespace name="wp14">
- <start name="sizeRelH"/>
- <start name="sizeRelV"/>
- <grammar xmlns="http://relaxng.org/ns/structure/1.0" ns="http://schemas.microsoft.com/office/word/2010/wordprocessingDrawing">
- <define name="ST_SizeRelFromH">
- <choice>
- <value>margin</value>
- <value>page</value>
- <value>leftMargin</value>
- <value>rightMargin</value>
- <value>insideMargin</value>
- <value>outsideMargin</value>
- </choice>
- </define>
- <define name="ST_SizeRelFromV">
- <choice>
- <value>margin</value>
- <value>page</value>
- <value>topMargin</value>
- <value>bottomMargin</value>
- <value>insideMargin</value>
- <value>outsideMargin</value>
- </choice>
- </define>
- <define name="CT_SizeRelH">
- <element name="pctWidth">
- <ref name="ST_PositivePercentage"/>
- </element>
- <attribute name="relativeFrom">
- <ref name="ST_SizeRelFromH"/>
- </attribute>
- </define>
- <define name="CT_SizeRelV">
- <element name="pctHeight">
- <ref name="ST_PositivePercentage"/>
- </element>
- <attribute name="relativeFrom">
- <ref name="ST_SizeRelFromV"/>
- </attribute>
- </define>
- <define name="sizeRelH">
- <element name="sizeRelH">
- <ref name="CT_SizeRelH"/>
- </element>
- </define>
- <define name="sizeRelV">
- <element name="sizeRelV">
- <ref name="CT_SizeRelV"/>
- </element>
- </define>
- </grammar>
- <resource name="ST_SizeRelFromH" resource="List">
- <value tokenid="ooxml:ST_SizeRelFromH_margin">margin</value>
- <value tokenid="ooxml:ST_SizeRelFromH_page">page</value>
- <value tokenid="ooxml:ST_SizeRelFromH_leftMargin">leftMargin</value>
- <value tokenid="ooxml:ST_SizeRelFromH_rightMargin">rightMargin</value>
- <value tokenid="ooxml:ST_SizeRelFromH_insideMargin">insideMargin</value>
- <value tokenid="ooxml:ST_SizeRelFromH_outsideMargin">outsideMargin</value>
- </resource>
- <resource name="ST_SizeRelFromV" resource="List">
- <value tokenid="ooxml:ST_SizeRelFromV_margin">margin</value>
- <value tokenid="ooxml:ST_SizeRelFromV_page">page</value>
- <value tokenid="ooxml:ST_SizeRelFromV_topMargin">topMargin</value>
- <value tokenid="ooxml:ST_SizeRelFromV_bottomMargin">bottomMargin</value>
- <value tokenid="ooxml:ST_SizeRelFromV_insideMargin">insideMargin</value>
- <value tokenid="ooxml:ST_SizeRelFromV_outsideMargin">outsideMargin</value>
- </resource>
- <resource name="CT_SizeRelH" resource="Properties">
- <element name="pctWidth" tokenid="ooxml:CT_SizeRelH_pctWidth"/>
- <attribute name="relativeFrom" tokenid="ooxml:CT_SizeRelH_relativeFrom"/>
- </resource>
- <resource name="CT_SizeRelV" resource="Properties">
- <element name="pctHeight" tokenid="ooxml:CT_SizeRelV_pctHeight"/>
- <attribute name="relativeFrom" tokenid="ooxml:CT_SizeRelV_relativeFrom"/>
- </resource>
- <resource name="sizeRelH" resource="Properties">
- <element name="sizeRelH" tokenid="ooxml:sizeRelH_sizeRelH"/>
- </resource>
- <resource name="sizeRelV" resource="Properties">
- <element name="sizeRelV" tokenid="ooxml:sizeRelV_sizeRelV"/>
- </resource>
- </namespace>
- <namespace name="w14">
- <start name="glow"/>
- <start name="shadow"/>
- <start name="reflection"/>
- <start name="textOutline"/>
- <start name="textFill"/>
- <start name="scene3d"/>
- <start name="props3d"/>
- <start name="ligatures"/>
- <start name="numForm"/>
- <start name="numSpacing"/>
- <start name="stylisticSets"/>
- <start name="cntxtAlts"/>
- <grammar xmlns="http://relaxng.org/ns/structure/1.0" ns="http://schemas.microsoft.com/office/word/2010/wordml" attributeFormDefault="qualified">
- <define name="ST_SchemeColorVal">
- <choice>
- <value>bg1</value>
- <value>tx1</value>
- <value>bg2</value>
- <value>tx2</value>
- <value>accent1</value>
- <value>accent2</value>
- <value>accent3</value>
- <value>accent4</value>
- <value>accent5</value>
- <value>accent6</value>
- <value>hlink</value>
- <value>folHlink</value>
- <value>dk1</value>
- <value>lt1</value>
- <value>dk2</value>
- <value>lt2</value>
- <value>phClr</value>
- </choice>
- </define>
- <define name="ST_RectAlignment">
- <choice>
- <value>none</value>
- <value>tl</value>
- <value>t</value>
- <value>tr</value>
- <value>l</value>
- <value>ctr</value>
- <value>r</value>
- <value>bl</value>
- <value>b</value>
- <value>br</value>
- </choice>
- </define>
- <define name="ST_LineCap">
- <choice>
- <value>rnd</value>
- <value>sq</value>
- <value>flat</value>
- </choice>
- </define>
- <define name="ST_CompoundLine">
- <choice>
- <value>sng</value>
- <value>dbl</value>
- <value>thickThin</value>
- <value>thinThick</value>
- <value>tri</value>
- </choice>
- </define>
- <define name="ST_PenAlignment">
- <choice>
- <value>ctr</value>
- <value>in</value>
- </choice>
- </define>
- <define name="ST_OnOff">
- <choice>
- <value>true</value>
- <value>false</value>
- <value>0</value>
- <value>1</value>
- </choice>
- </define>
- <define name="ST_PathShadeType">
- <choice>
- <value>shape</value>
- <value>circle</value>
- <value>rect</value>
- </choice>
- </define>
- <define name="ST_PresetLineDashVal">
- <choice>
- <value>solid</value>
- <value>dot</value>
- <value>sysDot</value>
- <value>dash</value>
- <value>sysDash</value>
- <value>lgDash</value>
- <value>dashDot</value>
- <value>sysDashDot</value>
- <value>lgDashDot</value>
- <value>lgDashDotDot</value>
- <value>sysDashDotDot</value>
- </choice>
- </define>
- <define name="ST_PresetCameraType">
- <choice>
- <value>legacyObliqueTopLeft</value>
- <value>legacyObliqueTop</value>
- <value>legacyObliqueTopRight</value>
- <value>legacyObliqueLeft</value>
- <value>legacyObliqueFront</value>
- <value>legacyObliqueRight</value>
- <value>legacyObliqueBottomLeft</value>
- <value>legacyObliqueBottom</value>
- <value>legacyObliqueBottomRight</value>
- <value>legacyPerspectiveTopLeft</value>
- <value>legacyPerspectiveTop</value>
- <value>legacyPerspectiveTopRight</value>
- <value>legacyPerspectiveLeft</value>
- <value>legacyPerspectiveFront</value>
- <value>legacyPerspectiveRight</value>
- <value>legacyPerspectiveBottomLeft</value>
- <value>legacyPerspectiveBottom</value>
- <value>legacyPerspectiveBottomRight</value>
- <value>orthographicFront</value>
- <value>isometricTopUp</value>
- <value>isometricTopDown</value>
- <value>isometricBottomUp</value>
- <value>isometricBottomDown</value>
- <value>isometricLeftUp</value>
- <value>isometricLeftDown</value>
- <value>isometricRightUp</value>
- <value>isometricRightDown</value>
- <value>isometricOffAxis1Left</value>
- <value>isometricOffAxis1Right</value>
- <value>isometricOffAxis1Top</value>
- <value>isometricOffAxis2Left</value>
- <value>isometricOffAxis2Right</value>
- <value>isometricOffAxis2Top</value>
- <value>isometricOffAxis3Left</value>
- <value>isometricOffAxis3Right</value>
- <value>isometricOffAxis3Bottom</value>
- <value>isometricOffAxis4Left</value>
- <value>isometricOffAxis4Right</value>
- <value>isometricOffAxis4Bottom</value>
- <value>obliqueTopLeft</value>
- <value>obliqueTop</value>
- <value>obliqueTopRight</value>
- <value>obliqueLeft</value>
- <value>obliqueRight</value>
- <value>obliqueBottomLeft</value>
- <value>obliqueBottom</value>
- <value>obliqueBottomRight</value>
- <value>perspectiveFront</value>
- <value>perspectiveLeft</value>
- <value>perspectiveRight</value>
- <value>perspectiveAbove</value>
- <value>perspectiveBelow</value>
- <value>perspectiveAboveLeftFacing</value>
- <value>perspectiveAboveRightFacing</value>
- <value>perspectiveContrastingLeftFacing</value>
- <value>perspectiveContrastingRightFacing</value>
- <value>perspectiveHeroicLeftFacing</value>
- <value>perspectiveHeroicRightFacing</value>
- <value>perspectiveHeroicExtremeLeftFacing</value>
- <value>perspectiveHeroicExtremeRightFacing</value>
- <value>perspectiveRelaxed</value>
- <value>perspectiveRelaxedModerately</value>
- </choice>
- </define>
- <define name="ST_LightRigType">
- <choice>
- <value>legacyFlat1</value>
- <value>legacyFlat2</value>
- <value>legacyFlat3</value>
- <value>legacyFlat4</value>
- <value>legacyNormal1</value>
- <value>legacyNormal2</value>
- <value>legacyNormal3</value>
- <value>legacyNormal4</value>
- <value>legacyHarsh1</value>
- <value>legacyHarsh2</value>
- <value>legacyHarsh3</value>
- <value>legacyHarsh4</value>
- <value>threePt</value>
- <value>balanced</value>
- <value>soft</value>
- <value>harsh</value>
- <value>flood</value>
- <value>contrasting</value>
- <value>morning</value>
- <value>sunrise</value>
- <value>sunset</value>
- <value>chilly</value>
- <value>freezing</value>
- <value>flat</value>
- <value>twoPt</value>
- <value>glow</value>
- <value>brightRoom</value>
- </choice>
- </define>
- <define name="ST_LightRigDirection">
- <choice>
- <value>tl</value>
- <value>t</value>
- <value>tr</value>
- <value>l</value>
- <value>r</value>
- <value>bl</value>
- <value>b</value>
- <value>br</value>
- </choice>
- </define>
- <define name="ST_BevelPresetType">
- <choice>
- <value>relaxedInset</value>
- <value>circle</value>
- <value>slope</value>
- <value>cross</value>
- <value>angle</value>
- <value>softRound</value>
- <value>convex</value>
- <value>coolSlant</value>
- <value>divot</value>
- <value>riblet</value>
- <value>hardEdge</value>
- <value>artDeco</value>
- </choice>
- </define>
- <define name="ST_PresetMaterialType">
- <choice>
- <value>legacyMatte</value>
- <value>legacyPlastic</value>
- <value>legacyMetal</value>
- <value>legacyWireframe</value>
- <value>matte</value>
- <value>plastic</value>
- <value>metal</value>
- <value>warmMatte</value>
- <value>translucentPowder</value>
- <value>powder</value>
- <value>dkEdge</value>
- <value>softEdge</value>
- <value>clear</value>
- <value>flat</value>
- <value>softmetal</value>
- <value>none</value>
- </choice>
- </define>
- <define name="ST_Ligatures">
- <choice>
- <value>none</value>
- <value>standard</value>
- <value>contextual</value>
- <value>historical</value>
- <value>discretional</value>
- <value>standardContextual</value>
- <value>standardHistorical</value>
- <value>contextualHistorical</value>
- <value>standardDiscretional</value>
- <value>contextualDiscretional</value>
- <value>historicalDiscretional</value>
- <value>standardContextualHistorical</value>
- <value>standardContextualDiscretional</value>
- <value>standardHistoricalDiscretional</value>
- <value>contextualHistoricalDiscretional</value>
- <value>all</value>
- </choice>
- </define>
- <define name="ST_NumForm">
- <choice>
- <value>default</value>
- <value>lining</value>
- <value>oldStyle</value>
- </choice>
- </define>
- <define name="ST_NumSpacing">
- <choice>
- <value>default</value>
- <value>proportional</value>
- <value>tabular</value>
- </choice>
- </define>
-
- <define name="ST_PositiveCoordinate">
- <data type="long"/>
- </define>
- <define name="ST_HexColorRGB">
- <data type="hexBinary"/>
- </define>
- <define name="ST_PositiveFixedPercentage">
- <data type="long"/>
- </define>
- <define name="ST_PositivePercentage">
- <data type="long"/>
- </define>
- <define name="ST_Percentage">
- <data type="long"/>
- </define>
- <define name="ST_PositiveFixedAngle">
- <data type="int"/>
- </define>
- <define name="ST_FixedAngle">
- <data type="int"/>
- </define>
- <define name="ST_LineWidth">
- <data type="int"/>
- </define>
- <define name="ST_UnsignedDecimalNumber">
- <data type="unsignedLong"/>
- </define>
-
- <define name="EG_ColorChoice">
- <choice>
- <element name="srgbClr">
- <ref name="CT_SRgbColor"/>
- </element>
- <element name="schemeClr">
- <ref name="CT_SchemeColor"/>
- </element>
- </choice>
- </define>
- <define name="EG_ColorTransform">
- <choice>
- <element name="tint">
- <ref name="CT_PositiveFixedPercentage"/>
- </element>
- <element name="shade">
- <ref name="CT_PositiveFixedPercentage"/>
- </element>
- <element name="alpha">
- <ref name="CT_PositiveFixedPercentage"/>
- </element>
- <element name="hueMod">
- <ref name="CT_PositivePercentage"/>
- </element>
- <element name="sat">
- <ref name="CT_Percentage"/>
- </element>
- <element name="satOff">
- <ref name="CT_Percentage"/>
- </element>
- <element name="satMod">
- <ref name="CT_Percentage"/>
- </element>
- <element name="lum">
- <ref name="CT_Percentage"/>
- </element>
- <element name="lumOff">
- <ref name="CT_Percentage"/>
- </element>
- <element name="lumMod">
- <ref name="CT_Percentage"/>
- </element>
- </choice>
- </define>
- <define name="EG_FillProperties">
- <choice>
- <element name="noFill">
- <ref name="CT_Empty"/>
- </element>
- <element name="solidFill">
- <ref name="CT_SolidColorFillProperties"/>
- </element>
- <element name="gradFill">
- <ref name="CT_GradientFillProperties"/>
- </element>
- </choice>
- </define>
- <define name="EG_ShadeProperties">
- <choice>
- <element name="lin">
- <ref name="CT_LinearShadeProperties"/>
- </element>
- <element name="path">
- <ref name="CT_PathShadeProperties"/>
- </element>
- </choice>
- </define>
- <define name="EG_LineDashProperties">
- <choice>
- <element name="prstDash">
- <ref name="CT_PresetLineDashProperties"/>
- </element>
- </choice>
- </define>
- <define name="EG_LineJoinProperties">
- <choice>
- <element name="round">
- <ref name="CT_Empty"/>
- </element>
- <element name="bevel">
- <ref name="CT_Empty"/>
- </element>
- <element name="miter">
- <ref name="CT_LineJoinMiterProperties"/>
- </element>
- </choice>
- </define>
-
- <define name="CT_SRgbColor">
- <ref name="EG_ColorTransform"/>
- <attribute name="val">
- <ref name="ST_HexColorRGB"/>
- </attribute>
- </define>
- <define name="CT_SchemeColor">
- <ref name="EG_ColorTransform"/>
- <attribute name="val">
- <ref name="ST_SchemeColorVal"/>
- </attribute>
- </define>
- <define name="CT_PositiveFixedPercentage">
- <attribute name="val">
- <ref name="ST_PositiveFixedPercentage"/>
- </attribute>
- </define>
- <define name="CT_PositivePercentage">
- <attribute name="val">
- <ref name="ST_PositivePercentage"/>
- </attribute>
- </define>
- <define name="CT_Percentage">
- <attribute name="val">
- <ref name="ST_Percentage"/>
- </attribute>
- </define>
- <define name="CT_Empty">
- </define>
- <define name="CT_SolidColorFillProperties">
- <ref name="EG_ColorChoice"/>
- </define>
- <define name="CT_GradientFillProperties">
- <element name="gsLst">
- <ref name="CT_GradientStopList"/>
- </element>
- <ref name="EG_ShadeProperties"/>
- </define>
- <define name="CT_LinearShadeProperties">
- <attribute name="ang">
- <ref name="ST_PositiveFixedAngle"/>
- </attribute>
- <attribute name="scaled">
- <ref name="ST_OnOff"/>
- </attribute>
- </define>
- <define name="CT_PathShadeProperties">
- <element name="fillToRect">
- <ref name="CT_RelativeRect"/>
- </element>
- <attribute name="path">
- <ref name="ST_PathShadeType"/>
- </attribute>
- </define>
- <define name="CT_GradientStopList">
- <element name="gs">
- <ref name="CT_GradientStop"/>
- </element>
- </define>
- <define name="CT_GradientStop">
- <ref name="EG_ColorChoice"/>
- <attribute name="pos">
- <ref name="ST_PositiveFixedPercentage"/>
- </attribute>
- </define>
- <define name="CT_RelativeRect">
- <attribute name="l">
- <ref name="ST_Percentage"/>
- </attribute>
- <attribute name="t">
- <ref name="ST_Percentage"/>
- </attribute>
- <attribute name="r">
- <ref name="ST_Percentage"/>
- </attribute>
- <attribute name="b">
- <ref name="ST_Percentage"/>
- </attribute>
- </define>
- <define name="CT_PresetLineDashProperties">
- <attribute name="val">
- <ref name="ST_PresetLineDashVal"/>
- </attribute>
- </define>
- <define name="CT_LineJoinMiterProperties">
- <attribute name="lim">
- <ref name="ST_PositivePercentage"/>
- </attribute>
- </define>
- <define name="CT_Camera">
- <attribute name="prst">
- <ref name="ST_PresetCameraType"/>
- </attribute>
- </define>
- <define name="CT_LightRig">
- <element name="rot">
- <ref name="CT_SphereCoords"/>
- </element>
- <attribute name="rig">
- <ref name="ST_LightRigType"/>
- </attribute>
- <attribute name="dir">
- <ref name="ST_LightRigDirection"/>
- </attribute>
- </define>
- <define name="CT_SphereCoords">
- <attribute name="lat">
- <ref name="ST_PositiveFixedAngle"/>
- </attribute>
- <attribute name="lon">
- <ref name="ST_PositiveFixedAngle"/>
- </attribute>
- <attribute name="rev">
- <ref name="ST_PositiveFixedAngle"/>
- </attribute>
- </define>
- <define name="CT_Bevel">
- <attribute name="w">
- <ref name="ST_PositiveCoordinate"/>
- </attribute>
- <attribute name="h">
- <ref name="ST_PositiveCoordinate"/>
- </attribute>
- <attribute name="prst">
- <ref name="ST_BevelPresetType"/>
- </attribute>
- </define>
- <define name="CT_Color">
- <ref name="EG_ColorChoice"/>
- </define>
- <define name="CT_StyleSet">
- <attribute name="id">
- <ref name="ST_UnsignedDecimalNumber"/>
- </attribute>
- <attribute name="val">
- <ref name="ST_OnOff"/>
- </attribute>
- </define>
- <define name="CT_OnOff">
- <attribute name="val">
- <ref name="ST_OnOff"/>
- </attribute>
- </define>
-
-
- <!-- Main Elements-->
- <define name="CT_Glow">
- <ref name="EG_ColorChoice"/>
- <attribute name="rad">
- <ref name="ST_PositiveCoordinate"/>
- </attribute>
- </define>
- <define name="CT_Shadow">
- <ref name="EG_ColorChoice"/>
- <attribute name="blurRad">
- <ref name="ST_PositiveCoordinate"/>
- </attribute>
- <attribute name="dist">
- <ref name="ST_PositiveCoordinate"/>
- </attribute>
- <attribute name="dir">
- <ref name="ST_PositiveFixedAngle"/>
- </attribute>
- <attribute name="sx">
- <ref name="ST_Percentage"/>
- </attribute>
- <attribute name="sy">
- <ref name="ST_Percentage"/>
- </attribute>
- <attribute name="kx">
- <ref name="ST_FixedAngle"/>
- </attribute>
- <attribute name="ky">
- <ref name="ST_FixedAngle"/>
- </attribute>
- <attribute name="algn">
- <ref name="ST_RectAlignment"/>
- </attribute>
- </define>
- <define name="CT_Reflection">
- <attribute name="blurRad">
- <ref name="ST_PositiveCoordinate"/>
- </attribute>
- <attribute name="stA">
- <ref name="ST_PositiveFixedPercentage"/>
- </attribute>
- <attribute name="stPos">
- <ref name="ST_PositiveFixedPercentage"/>
- </attribute>
- <attribute name="endA">
- <ref name="ST_PositiveFixedPercentage"/>
- </attribute>
- <attribute name="endPos">
- <ref name="ST_PositiveFixedPercentage"/>
- </attribute>
- <attribute name="dist">
- <ref name="ST_PositiveCoordinate"/>
- </attribute>
- <attribute name="dir">
- <ref name="ST_PositiveFixedAngle"/>
- </attribute>
- <attribute name="fadeDir">
- <ref name="ST_PositiveFixedAngle"/>
- </attribute>
- <attribute name="sx">
- <ref name="ST_Percentage"/>
- </attribute>
- <attribute name="sy">
- <ref name="ST_Percentage"/>
- </attribute>
- <attribute name="kx">
- <ref name="ST_FixedAngle"/>
- </attribute>
- <attribute name="ky">
- <ref name="ST_FixedAngle"/>
- </attribute>
- <attribute name="algn">
- <ref name="ST_RectAlignment"/>
- </attribute>
- </define>
- <define name="CT_TextOutlineEffect">
- <ref name="EG_FillProperties"/>
- <ref name="EG_LineDashProperties"/>
- <ref name="EG_LineJoinProperties"/>
- <attribute name="w">
- <ref name="ST_LineWidth"/>
- </attribute>
- <attribute name="cap">
- <ref name="ST_LineCap"/>
- </attribute>
- <attribute name="cmpd">
- <ref name="ST_CompoundLine"/>
- </attribute>
- <attribute name="algn">
- <ref name="ST_PenAlignment"/>
- </attribute>
- </define>
- <define name="CT_FillTextEffect">
- <ref name="EG_FillProperties"/>
- </define>
- <define name="CT_Scene3D">
- <element name="camera">
- <ref name="CT_Camera"/>
- </element>
- <element name="lightRig">
- <ref name="CT_LightRig"/>
- </element>
- </define>
- <define name="CT_Props3D">
- <element name="bevelT">
- <ref name="CT_Bevel"/>
- </element>
- <element name="bevelB">
- <ref name="CT_Bevel"/>
- </element>
- <element name="extrusionClr">
- <ref name="CT_Color"/>
- </element>
- <element name="contourClr">
- <ref name="CT_Color"/>
- </element>
- <attribute name="extrusionH">
- <ref name="ST_PositiveCoordinate"/>
- </attribute>
- <attribute name="contourW">
- <ref name="ST_PositiveCoordinate"/>
- </attribute>
- <attribute name="prstMaterial">
- <ref name="ST_PresetMaterialType"/>
- </attribute>
- </define>
- <define name="CT_Ligatures">
- <attribute name="val">
- <ref name="ST_Ligatures"/>
- </attribute>
- </define>
- <define name="CT_NumForm">
- <attribute name="val">
- <ref name="ST_NumForm"/>
- </attribute>
- </define>
- <define name="CT_NumSpacing">
- <attribute name="val">
- <ref name="ST_NumSpacing"/>
- </attribute>
- </define>
- <define name="CT_StylisticSets">
- <element name="styleSet">
- <ref name="CT_StyleSet"/>
- </element>
- </define>
-
- <define name="glow">
- <element name="glow">
- <ref name="CT_Glow"/>
- </element>
- </define>
- <define name="shadow">
- <element name="shadow">
- <ref name="CT_Shadow"/>
- </element>
- </define>
- <define name="reflection">
- <element name="reflection">
- <ref name="CT_Reflection"/>
- </element>
- </define>
- <define name="textOutline">
- <element name="textOutline">
- <ref name="CT_TextOutlineEffect"/>
- </element>
- </define>
- <define name="textFill">
- <element name="textFill">
- <ref name="CT_FillTextEffect"/>
- </element>
- </define>
- <define name="scene3d">
- <element name="scene3d">
- <ref name="CT_Scene3D"/>
- </element>
- </define>
- <define name="props3d">
- <element name="props3d">
- <ref name="CT_Props3D"/>
- </element>
- </define>
- <define name="ligatures">
- <element name="ligatures">
- <ref name="CT_Ligatures"/>
- </element>
- </define>
- <define name="numForm">
- <element name="numForm">
- <ref name="CT_NumForm"/>
- </element>
- </define>
- <define name="numSpacing">
- <element name="numSpacing">
- <ref name="CT_NumSpacing"/>
- </element>
- </define>
- <define name="stylisticSets">
- <element name="stylisticSets">
- <ref name="CT_StylisticSets"/>
- </element>
- </define>
- <define name="cntxtAlts">
- <element name="cntxtAlts">
- <ref name="CT_OnOff"/>
- </element>
- </define>
-
- <define name="ST_String">
- <data type="string"/>
- </define>
- <define name="CT_String">
- <attribute name="val">
- <ref name="ST_String"/>
- </attribute>
- </define>
- <define name="CT_SdtCheckbox">
- <element name="checked">
- <ref name="CT_String"/>
- </element>
- <element name="checkedState">
- <ref name="CT_String"/>
- </element>
- <element name="uncheckedState">
- <ref name="CT_String"/>
- </element>
- </define>
- </grammar>
-
- <!-- Simple Types Resource Definitions -->
- <resource name="CT_String" resource="Value">
- <attribute name="val" tokenid="ooxml:CT_String_val" action="setValue"/>
- <action name="start" action="setDefaultStringValue"/>
- </resource>
- <resource name="CT_SdtCheckbox" resource="Properties">
- <element name="checked" tokenid="ooxml:CT_SdtCheckbox_checked"/>
- <element name="checkedState" tokenid="ooxml:CT_SdtCheckbox_checkedState"/>
- <element name="uncheckedState" tokenid="ooxml:CT_SdtCheckbox_uncheckedState"/>
- </resource>
- <resource name="ST_SchemeColorVal" resource="List">
- <value tokenid="ooxml:ST_SchemeColorVal_bg1">bg1</value>
- <value tokenid="ooxml:ST_SchemeColorVal_tx1">tx1</value>
- <value tokenid="ooxml:ST_SchemeColorVal_bg2">bg2</value>
- <value tokenid="ooxml:ST_SchemeColorVal_tx2">tx2</value>
- <value tokenid="ooxml:ST_SchemeColorVal_accent1">accent1</value>
- <value tokenid="ooxml:ST_SchemeColorVal_accent2">accent2</value>
- <value tokenid="ooxml:ST_SchemeColorVal_accent3">accent3</value>
- <value tokenid="ooxml:ST_SchemeColorVal_accent4">accent4</value>
- <value tokenid="ooxml:ST_SchemeColorVal_accent5">accent5</value>
- <value tokenid="ooxml:ST_SchemeColorVal_accent6">accent6</value>
- <value tokenid="ooxml:ST_SchemeColorVal_hlink">hlink</value>
- <value tokenid="ooxml:ST_SchemeColorVal_folHlink">folHlink</value>
- <value tokenid="ooxml:ST_SchemeColorVal_dk1">dk1</value>
- <value tokenid="ooxml:ST_SchemeColorVal_lt1">lt1</value>
- <value tokenid="ooxml:ST_SchemeColorVal_dk2">dk2</value>
- <value tokenid="ooxml:ST_SchemeColorVal_lt2">lt2</value>
- <value tokenid="ooxml:ST_SchemeColorVal_phClr">phClr</value>
- </resource>
- <resource name="ST_RectAlignment" resource="List">
- <value tokenid="ooxml:ST_RectAlignment_none">none</value>
- <value tokenid="ooxml:ST_RectAlignment_tl">tl</value>
- <value tokenid="ooxml:ST_RectAlignment_t">t</value>
- <value tokenid="ooxml:ST_RectAlignment_tr">tr</value>
- <value tokenid="ooxml:ST_RectAlignment_l">l</value>
- <value tokenid="ooxml:ST_RectAlignment_ctr">ctr</value>
- <value tokenid="ooxml:ST_RectAlignment_r">r</value>
- <value tokenid="ooxml:ST_RectAlignment_bl">bl</value>
- <value tokenid="ooxml:ST_RectAlignment_b">b</value>
- <value tokenid="ooxml:ST_RectAlignment_br">br</value>
- </resource>
- <resource name="ST_LineCap" resource="List">
- <value tokenid="ooxml:ST_LineCap_rnd">rnd</value>
- <value tokenid="ooxml:ST_LineCap_sq">sq</value>
- <value tokenid="ooxml:ST_LineCap_flat">flat</value>
- </resource>
- <resource name="ST_CompoundLine" resource="List">
- <value tokenid="ooxml:ST_CompoundLine_sng">sng</value>
- <value tokenid="ooxml:ST_CompoundLine_dbl">dbl</value>
- <value tokenid="ooxml:ST_CompoundLine_thickThin">thickThin</value>
- <value tokenid="ooxml:ST_CompoundLine_thinThick">thinThick</value>
- <value tokenid="ooxml:ST_CompoundLine_tri">tri</value>
- </resource>
- <resource name="ST_PenAlignment" resource="List">
- <value tokenid="ooxml:ST_PenAlignment_ctr">ctr</value>
- <value tokenid="ooxml:ST_PenAlignment_in">in</value>
- </resource>
- <resource name="ST_OnOff" resource="List">
- <value tokenid="ooxml:ST_OnOff_true">true</value>
- <value tokenid="ooxml:ST_OnOff_false">false</value>
- <value tokenid="ooxml:ST_OnOff_0">0</value>
- <value tokenid="ooxml:ST_OnOff_1">1</value>
- </resource>
- <resource name="ST_PathShadeType" resource="List">
- <value tokenid="ooxml:ST_PathShadeType_shape">shape</value>
- <value tokenid="ooxml:ST_PathShadeType_circle">circle</value>
- <value tokenid="ooxml:ST_PathShadeType_rect">rect</value>
- </resource>
- <resource name="ST_PresetLineDashVal" resource="List">
- <value tokenid="ooxml:ST_PresetLineDashVal_solid">solid</value>
- <value tokenid="ooxml:ST_PresetLineDashVal_dot">dot</value>
- <value tokenid="ooxml:ST_PresetLineDashVal_sysDot">sysDot</value>
- <value tokenid="ooxml:ST_PresetLineDashVal_dash">dash</value>
- <value tokenid="ooxml:ST_PresetLineDashVal_sysDash">sysDash</value>
- <value tokenid="ooxml:ST_PresetLineDashVal_lgDash">lgDash</value>
- <value tokenid="ooxml:ST_PresetLineDashVal_dashDot">dashDot</value>
- <value tokenid="ooxml:ST_PresetLineDashVal_sysDashDot">sysDashDot</value>
- <value tokenid="ooxml:ST_PresetLineDashVal_lgDashDot">lgDashDot</value>
- <value tokenid="ooxml:ST_PresetLineDashVal_lgDashDotDot">lgDashDotDot</value>
- <value tokenid="ooxml:ST_PresetLineDashVal_sysDashDotDot">sysDashDotDot</value>
- </resource>
- <resource name="ST_PresetCameraType" resource="List">
- <value tokenid="ooxml:ST_PresetCameraType_legacyObliqueTopLeft">legacyObliqueTopLeft</value>
- <value tokenid="ooxml:ST_PresetCameraType_legacyObliqueTop">legacyObliqueTop</value>
- <value tokenid="ooxml:ST_PresetCameraType_legacyObliqueTopRight">legacyObliqueTopRight</value>
- <value tokenid="ooxml:ST_PresetCameraType_legacyObliqueLeft">legacyObliqueLeft</value>
- <value tokenid="ooxml:ST_PresetCameraType_legacyObliqueFront">legacyObliqueFront</value>
- <value tokenid="ooxml:ST_PresetCameraType_legacyObliqueRight">legacyObliqueRight</value>
- <value tokenid="ooxml:ST_PresetCameraType_legacyObliqueBottomLeft">legacyObliqueBottomLeft</value>
- <value tokenid="ooxml:ST_PresetCameraType_legacyObliqueBottom">legacyObliqueBottom</value>
- <value tokenid="ooxml:ST_PresetCameraType_legacyObliqueBottomRight">legacyObliqueBottomRight</value>
- <value tokenid="ooxml:ST_PresetCameraType_legacyPerspectiveTopLeft">legacyPerspectiveTopLeft</value>
- <value tokenid="ooxml:ST_PresetCameraType_legacyPerspectiveTop">legacyPerspectiveTop</value>
- <value tokenid="ooxml:ST_PresetCameraType_legacyPerspectiveTopRight">legacyPerspectiveTopRight</value>
- <value tokenid="ooxml:ST_PresetCameraType_legacyPerspectiveLeft">legacyPerspectiveLeft</value>
- <value tokenid="ooxml:ST_PresetCameraType_legacyPerspectiveFront">legacyPerspectiveFront</value>
- <value tokenid="ooxml:ST_PresetCameraType_legacyPerspectiveRight">legacyPerspectiveRight</value>
- <value tokenid="ooxml:ST_PresetCameraType_legacyPerspectiveBottomLeft">legacyPerspectiveBottomLeft</value>
- <value tokenid="ooxml:ST_PresetCameraType_legacyPerspectiveBottom">legacyPerspectiveBottom</value>
- <value tokenid="ooxml:ST_PresetCameraType_legacyPerspectiveBottomRight">legacyPerspectiveBottomRight</value>
- <value tokenid="ooxml:ST_PresetCameraType_orthographicFront">orthographicFront</value>
- <value tokenid="ooxml:ST_PresetCameraType_isometricTopUp">isometricTopUp</value>
- <value tokenid="ooxml:ST_PresetCameraType_isometricTopDown">isometricTopDown</value>
- <value tokenid="ooxml:ST_PresetCameraType_isometricBottomUp">isometricBottomUp</value>
- <value tokenid="ooxml:ST_PresetCameraType_isometricBottomDown">isometricBottomDown</value>
- <value tokenid="ooxml:ST_PresetCameraType_isometricLeftUp">isometricLeftUp</value>
- <value tokenid="ooxml:ST_PresetCameraType_isometricLeftDown">isometricLeftDown</value>
- <value tokenid="ooxml:ST_PresetCameraType_isometricRightUp">isometricRightUp</value>
- <value tokenid="ooxml:ST_PresetCameraType_isometricRightDown">isometricRightDown</value>
- <value tokenid="ooxml:ST_PresetCameraType_isometricOffAxis1Left">isometricOffAxis1Left</value>
- <value tokenid="ooxml:ST_PresetCameraType_isometricOffAxis1Right">isometricOffAxis1Right</value>
- <value tokenid="ooxml:ST_PresetCameraType_isometricOffAxis1Top">isometricOffAxis1Top</value>
- <value tokenid="ooxml:ST_PresetCameraType_isometricOffAxis2Left">isometricOffAxis2Left</value>
- <value tokenid="ooxml:ST_PresetCameraType_isometricOffAxis2Right">isometricOffAxis2Right</value>
- <value tokenid="ooxml:ST_PresetCameraType_isometricOffAxis2Top">isometricOffAxis2Top</value>
- <value tokenid="ooxml:ST_PresetCameraType_isometricOffAxis3Left">isometricOffAxis3Left</value>
- <value tokenid="ooxml:ST_PresetCameraType_isometricOffAxis3Right">isometricOffAxis3Right</value>
- <value tokenid="ooxml:ST_PresetCameraType_isometricOffAxis3Bottom">isometricOffAxis3Bottom</value>
- <value tokenid="ooxml:ST_PresetCameraType_isometricOffAxis4Left">isometricOffAxis4Left</value>
- <value tokenid="ooxml:ST_PresetCameraType_isometricOffAxis4Right">isometricOffAxis4Right</value>
- <value tokenid="ooxml:ST_PresetCameraType_isometricOffAxis4Bottom">isometricOffAxis4Bottom</value>
- <value tokenid="ooxml:ST_PresetCameraType_obliqueTopLeft">obliqueTopLeft</value>
- <value tokenid="ooxml:ST_PresetCameraType_obliqueTop">obliqueTop</value>
- <value tokenid="ooxml:ST_PresetCameraType_obliqueTopRight">obliqueTopRight</value>
- <value tokenid="ooxml:ST_PresetCameraType_obliqueLeft">obliqueLeft</value>
- <value tokenid="ooxml:ST_PresetCameraType_obliqueRight">obliqueRight</value>
- <value tokenid="ooxml:ST_PresetCameraType_obliqueBottomLeft">obliqueBottomLeft</value>
- <value tokenid="ooxml:ST_PresetCameraType_obliqueBottom">obliqueBottom</value>
- <value tokenid="ooxml:ST_PresetCameraType_obliqueBottomRight">obliqueBottomRight</value>
- <value tokenid="ooxml:ST_PresetCameraType_perspectiveFront">perspectiveFront</value>
- <value tokenid="ooxml:ST_PresetCameraType_perspectiveLeft">perspectiveLeft</value>
- <value tokenid="ooxml:ST_PresetCameraType_perspectiveRight">perspectiveRight</value>
- <value tokenid="ooxml:ST_PresetCameraType_perspectiveAbove">perspectiveAbove</value>
- <value tokenid="ooxml:ST_PresetCameraType_perspectiveBelow">perspectiveBelow</value>
- <value tokenid="ooxml:ST_PresetCameraType_perspectiveAboveLeftFacing">perspectiveAboveLeftFacing</value>
- <value tokenid="ooxml:ST_PresetCameraType_perspectiveAboveRightFacing">perspectiveAboveRightFacing</value>
- <value tokenid="ooxml:ST_PresetCameraType_perspectiveContrastingLeftFacing">perspectiveContrastingLeftFacing</value>
- <value tokenid="ooxml:ST_PresetCameraType_perspectiveContrastingRightFacing">perspectiveContrastingRightFacing</value>
- <value tokenid="ooxml:ST_PresetCameraType_perspectiveHeroicLeftFacing">perspectiveHeroicLeftFacing</value>
- <value tokenid="ooxml:ST_PresetCameraType_perspectiveHeroicRightFacing">perspectiveHeroicRightFacing</value>
- <value tokenid="ooxml:ST_PresetCameraType_perspectiveHeroicExtremeLeftFacing">perspectiveHeroicExtremeLeftFacing</value>
- <value tokenid="ooxml:ST_PresetCameraType_perspectiveHeroicExtremeRightFacing">perspectiveHeroicExtremeRightFacing</value>
- <value tokenid="ooxml:ST_PresetCameraType_perspectiveRelaxed">perspectiveRelaxed</value>
- <value tokenid="ooxml:ST_PresetCameraType_perspectiveRelaxedModerately">perspectiveRelaxedModerately</value>
- </resource>
- <resource name="ST_LightRigType" resource="List">
- <value tokenid="ooxml:ST_LightRigType_legacyFlat1">legacyFlat1</value>
- <value tokenid="ooxml:ST_LightRigType_legacyFlat2">legacyFlat2</value>
- <value tokenid="ooxml:ST_LightRigType_legacyFlat3">legacyFlat3</value>
- <value tokenid="ooxml:ST_LightRigType_legacyFlat4">legacyFlat4</value>
- <value tokenid="ooxml:ST_LightRigType_legacyNormal1">legacyNormal1</value>
- <value tokenid="ooxml:ST_LightRigType_legacyNormal2">legacyNormal2</value>
- <value tokenid="ooxml:ST_LightRigType_legacyNormal3">legacyNormal3</value>
- <value tokenid="ooxml:ST_LightRigType_legacyNormal4">legacyNormal4</value>
- <value tokenid="ooxml:ST_LightRigType_legacyHarsh1">legacyHarsh1</value>
- <value tokenid="ooxml:ST_LightRigType_legacyHarsh2">legacyHarsh2</value>
- <value tokenid="ooxml:ST_LightRigType_legacyHarsh3">legacyHarsh3</value>
- <value tokenid="ooxml:ST_LightRigType_legacyHarsh4">legacyHarsh4</value>
- <value tokenid="ooxml:ST_LightRigType_threePt">threePt</value>
- <value tokenid="ooxml:ST_LightRigType_balanced">balanced</value>
- <value tokenid="ooxml:ST_LightRigType_soft">soft</value>
- <value tokenid="ooxml:ST_LightRigType_harsh">harsh</value>
- <value tokenid="ooxml:ST_LightRigType_flood">flood</value>
- <value tokenid="ooxml:ST_LightRigType_contrasting">contrasting</value>
- <value tokenid="ooxml:ST_LightRigType_morning">morning</value>
- <value tokenid="ooxml:ST_LightRigType_sunrise">sunrise</value>
- <value tokenid="ooxml:ST_LightRigType_sunset">sunset</value>
- <value tokenid="ooxml:ST_LightRigType_chilly">chilly</value>
- <value tokenid="ooxml:ST_LightRigType_freezing">freezing</value>
- <value tokenid="ooxml:ST_LightRigType_flat">flat</value>
- <value tokenid="ooxml:ST_LightRigType_twoPt">twoPt</value>
- <value tokenid="ooxml:ST_LightRigType_glow">glow</value>
- <value tokenid="ooxml:ST_LightRigType_brightRoom">brightRoom</value>
- </resource>
- <resource name="ST_LightRigDirection" resource="List">
- <value tokenid="ooxml:ST_LightRigDirection_tl">tl</value>
- <value tokenid="ooxml:ST_LightRigDirection_t">t</value>
- <value tokenid="ooxml:ST_LightRigDirection_tr">tr</value>
- <value tokenid="ooxml:ST_LightRigDirection_l">l</value>
- <value tokenid="ooxml:ST_LightRigDirection_r">r</value>
- <value tokenid="ooxml:ST_LightRigDirection_bl">bl</value>
- <value tokenid="ooxml:ST_LightRigDirection_b">b</value>
- <value tokenid="ooxml:ST_LightRigDirection_br">br</value>
- </resource>
- <resource name="ST_BevelPresetType" resource="List">
- <value tokenid="ooxml:ST_BevelPresetType_relaxedInset">relaxedInset</value>
- <value tokenid="ooxml:ST_BevelPresetType_circle">circle</value>
- <value tokenid="ooxml:ST_BevelPresetType_slope">slope</value>
- <value tokenid="ooxml:ST_BevelPresetType_cross">cross</value>
- <value tokenid="ooxml:ST_BevelPresetType_angle">angle</value>
- <value tokenid="ooxml:ST_BevelPresetType_softRound">softRound</value>
- <value tokenid="ooxml:ST_BevelPresetType_convex">convex</value>
- <value tokenid="ooxml:ST_BevelPresetType_coolSlant">coolSlant</value>
- <value tokenid="ooxml:ST_BevelPresetType_divot">divot</value>
- <value tokenid="ooxml:ST_BevelPresetType_riblet">riblet</value>
- <value tokenid="ooxml:ST_BevelPresetType_hardEdge">hardEdge</value>
- <value tokenid="ooxml:ST_BevelPresetType_artDeco">artDeco</value>
- </resource>
- <resource name="ST_PresetMaterialType" resource="List">
- <value tokenid="ooxml:ST_PresetMaterialType_legacyMatte">legacyMatte</value>
- <value tokenid="ooxml:ST_PresetMaterialType_legacyPlastic">legacyPlastic</value>
- <value tokenid="ooxml:ST_PresetMaterialType_legacyMetal">legacyMetal</value>
- <value tokenid="ooxml:ST_PresetMaterialType_legacyWireframe">legacyWireframe</value>
- <value tokenid="ooxml:ST_PresetMaterialType_matte">matte</value>
- <value tokenid="ooxml:ST_PresetMaterialType_plastic">plastic</value>
- <value tokenid="ooxml:ST_PresetMaterialType_metal">metal</value>
- <value tokenid="ooxml:ST_PresetMaterialType_warmMatte">warmMatte</value>
- <value tokenid="ooxml:ST_PresetMaterialType_translucentPowder">translucentPowder</value>
- <value tokenid="ooxml:ST_PresetMaterialType_powder">powder</value>
- <value tokenid="ooxml:ST_PresetMaterialType_dkEdge">dkEdge</value>
- <value tokenid="ooxml:ST_PresetMaterialType_softEdge">softEdge</value>
- <value tokenid="ooxml:ST_PresetMaterialType_clear">clear</value>
- <value tokenid="ooxml:ST_PresetMaterialType_flat">flat</value>
- <value tokenid="ooxml:ST_PresetMaterialType_softmetal">softmetal</value>
- <value tokenid="ooxml:ST_PresetMaterialType_none">none</value>
- </resource>
- <resource name="ST_Ligatures" resource="List">
- <value tokenid="ooxml:ST_Ligatures_none">none</value>
- <value tokenid="ooxml:ST_Ligatures_standard">standard</value>
- <value tokenid="ooxml:ST_Ligatures_contextual">contextual</value>
- <value tokenid="ooxml:ST_Ligatures_historical">historical</value>
- <value tokenid="ooxml:ST_Ligatures_discretional">discretional</value>
- <value tokenid="ooxml:ST_Ligatures_standardContextual">standardContextual</value>
- <value tokenid="ooxml:ST_Ligatures_standardHistorical">standardHistorical</value>
- <value tokenid="ooxml:ST_Ligatures_contextualHistorical">contextualHistorical</value>
- <value tokenid="ooxml:ST_Ligatures_standardDiscretional">standardDiscretional</value>
- <value tokenid="ooxml:ST_Ligatures_contextualDiscretional">contextualDiscretional</value>
- <value tokenid="ooxml:ST_Ligatures_historicalDiscretional">historicalDiscretional</value>
- <value tokenid="ooxml:ST_Ligatures_standardContextualHistorical">standardContextualHistorical</value>
- <value tokenid="ooxml:ST_Ligatures_standardContextualDiscretional">standardContextualDiscretional</value>
- <value tokenid="ooxml:ST_Ligatures_standardHistoricalDiscretional">standardHistoricalDiscretional</value>
- <value tokenid="ooxml:ST_Ligatures_contextualHistoricalDiscretional">contextualHistoricalDiscretional</value>
- <value tokenid="ooxml:ST_Ligatures_all">all</value>
- </resource>
- <resource name="ST_NumForm" resource="List">
- <value tokenid="ooxml:ST_NumForm_default">default</value>
- <value tokenid="ooxml:ST_NumForm_lining">lining</value>
- <value tokenid="ooxml:ST_NumForm_oldStyle">oldStyle</value>
- </resource>
- <resource name="ST_NumSpacing" resource="List">
- <value tokenid="ooxml:ST_NumSpacing_default">default</value>
- <value tokenid="ooxml:ST_NumSpacing_proportional">proportional</value>
- <value tokenid="ooxml:ST_NumSpacing_tabular">tabular</value>
- </resource>
-
- <resource name="ST_PositiveCoordinate" resource="Integer"/>
- <resource name="ST_HexColorRGB" resource="Hex"/>
- <resource name="ST_PositivePercentage" resource="Integer"/>
- <resource name="ST_PositiveFixedPercentage" resource="Integer"/>
- <resource name="ST_Percentage" resource="Integer"/>
- <resource name="ST_PositiveFixedAngle" resource="Integer"/>
- <resource name="ST_FixedAngle" resource="Integer"/>
- <resource name="ST_LineWidth" resource="Integer"/>
- <resource name="ST_UnsignedDecimalNumber" resource="Integer"/>
-
- <!-- Groups Resource Definitions -->
- <resource name="EG_ColorTransform" resource="Properties">
- <element name="tint" tokenid="ooxml:EG_ColorTransform_tint"/>
- <element name="shade" tokenid="ooxml:EG_ColorTransform_shade"/>
- <element name="alpha" tokenid="ooxml:EG_ColorTransform_alpha"/>
- <element name="hueMod" tokenid="ooxml:EG_ColorTransform_hueMod"/>
- <element name="sat" tokenid="ooxml:EG_ColorTransform_sat"/>
- <element name="satOff" tokenid="ooxml:EG_ColorTransform_satOff"/>
- <element name="satMod" tokenid="ooxml:EG_ColorTransform_satMod"/>
- <element name="lum" tokenid="ooxml:EG_ColorTransform_lum"/>
- <element name="lumOff" tokenid="ooxml:EG_ColorTransform_lumOff"/>
- <element name="lumMod" tokenid="ooxml:EG_ColorTransform_lumMod"/>
- </resource>
- <resource name="EG_ColorChoice" resource="Properties">
- <element name="srgbClr" tokenid="ooxml:EG_ColorChoice_srgbClr"/>
- <element name="schemeClr" tokenid="ooxml:EG_ColorChoice_schemeClr"/>
- </resource>
- <resource name="EG_FillProperties" resource="Properties">
- <element name="noFill" tokenid="ooxml:EG_FillProperties_noFill"/>
- <element name="solidFill" tokenid="ooxml:EG_FillProperties_solidFill"/>
- <element name="gradFill" tokenid="ooxml:EG_FillProperties_gradFill"/>
- </resource>
- <resource name="EG_ShadeProperties" resource="Properties">
- <element name="lin" tokenid="ooxml:EG_ShadeProperties_lin"/>
- <element name="path" tokenid="ooxml:EG_ShadeProperties_path"/>
- </resource>
- <resource name="EG_LineDashProperties" resource="Properties">
- <element name="prstDash" tokenid="ooxml:EG_LineDashProperties_prstDash"/>
- </resource>
- <resource name="EG_LineJoinProperties" resource="Properties">
- <element name="round" tokenid="ooxml:EG_LineJoinProperties_round"/>
- <element name="bevel" tokenid="ooxml:EG_LineJoinProperties_bevel"/>
- <element name="miter" tokenid="ooxml:EG_LineJoinProperties_miter"/>
- </resource>
-
- <!-- Complex Types Resource Definitions -->
- <resource name="CT_Glow" resource="Properties">
- <attribute name="rad" tokenid="ooxml:CT_Glow_rad"/>
- </resource>
- <resource name="CT_SRgbColor" resource="Properties">
- <attribute name="val" tokenid="ooxml:CT_SRgbColor_val"/>
- </resource>
- <resource name="CT_SchemeColor" resource="Properties">
- <attribute name="val" tokenid="ooxml:CT_SchemeColor_val"/>
- </resource>
- <resource name="CT_PositiveFixedPercentage" resource="Properties">
- <attribute name="val" tokenid="ooxml:CT_PositiveFixedPercentage_val"/>
- </resource>
- <resource name="CT_PositivePercentage" resource="Properties">
- <attribute name="val" tokenid="ooxml:CT_PositivePercentage_val"/>
- </resource>
- <resource name="CT_Percentage" resource="Properties">
- <attribute name="val" tokenid="ooxml:CT_Percentage_val"/>
- </resource>
- <resource name="CT_Empty" resource="Properties"/>
- <resource name="CT_SolidColorFillProperties" resource="Properties"/>
- <resource name="CT_GradientFillProperties" resource="Properties">
- <element name="gsLst" tokenid="ooxml:CT_GradientFillProperties_gsLst"/>
- </resource>
- <resource name="CT_GradientStopList" resource="Properties">
- <element name="gs" tokenid="ooxml:CT_GradientStopList_gs"/>
- </resource>
- <resource name="CT_GradientStop" resource="Properties">
- <attribute name="pos" tokenid="ooxml:CT_GradientStop_pos"/>
- </resource>
- <resource name="CT_LinearShadeProperties" resource="Properties">
- <attribute name="ang" tokenid="ooxml:CT_LinearShadeProperties_ang"/>
- <attribute name="scaled" tokenid="ooxml:CT_LinearShadeProperties_scaled"/>
- </resource>
- <resource name="CT_PathShadeProperties" resource="Properties">
- <element name="fillToRect" tokenid="ooxml:CT_PathShadeProperties_fillToRect"/>
- <attribute name="path" tokenid="ooxml:CT_PathShadeProperties_path"/>
- </resource>
- <resource name="CT_RelativeRect" resource="Properties">
- <attribute name="l" tokenid="ooxml:CT_RelativeRect_l"/>
- <attribute name="t" tokenid="ooxml:CT_RelativeRect_t"/>
- <attribute name="r" tokenid="ooxml:CT_RelativeRect_r"/>
- <attribute name="b" tokenid="ooxml:CT_RelativeRect_b"/>
- </resource>
- <resource name="CT_PresetLineDashProperties" resource="Properties">
- <attribute name="val" tokenid="ooxml:CT_PresetLineDashProperties_val"/>
- </resource>
- <resource name="CT_LineJoinMiterProperties" resource="Properties">
- <attribute name="lim" tokenid="ooxml:CT_LineJoinMiterProperties_lim"/>
- </resource>
- <resource name="CT_Camera" resource="Properties">
- <attribute name="prst" tokenid="ooxml:CT_Camera_prst"/>
- </resource>
- <resource name="CT_LightRig" resource="Properties">
- <element name="rot" tokenid="ooxml:CT_LightRig_rot"/>
- <attribute name="rig" tokenid="ooxml:CT_LightRig_rig"/>
- <attribute name="dir" tokenid="ooxml:CT_LightRig_dir"/>
- </resource>
- <resource name="CT_SphereCoords" resource="Properties">
- <attribute name="lat" tokenid="ooxml:CT_SphereCoords_lat"/>
- <attribute name="lon" tokenid="ooxml:CT_SphereCoords_lon"/>
- <attribute name="rev" tokenid="ooxml:CT_SphereCoords_rev"/>
- </resource>
- <resource name="CT_Bevel" resource="Properties">
- <attribute name="w" tokenid="ooxml:CT_Bevel_w"/>
- <attribute name="h" tokenid="ooxml:CT_Bevel_h"/>
- <attribute name="prst" tokenid="ooxml:CT_Bevel_prst"/>
- </resource>
- <resource name="CT_Color" resource="Properties"/>
- <resource name="CT_StyleSet" resource="Properties">
- <attribute name="id" tokenid="ooxml:CT_StyleSet_id"/>
- <attribute name="val" tokenid="ooxml:CT_StyleSet_val"/>
- </resource>
- <resource name="CT_OnOff" resource="Properties">
- <attribute name="val" tokenid="ooxml:CT_OnOff_val"/>
- </resource>
-
- <!-- Main element content -->
- <resource name="CT_Shadow" resource="Properties">
- <attribute name="blurRad" tokenid="ooxml:CT_Shadow_blurRad"/>
- <attribute name="dist" tokenid="ooxml:CT_Shadow_dist"/>
- <attribute name="dir" tokenid="ooxml:CT_Shadow_dir"/>
- <attribute name="sx" tokenid="ooxml:CT_Shadow_sx"/>
- <attribute name="sy" tokenid="ooxml:CT_Shadow_sy"/>
- <attribute name="kx" tokenid="ooxml:CT_Shadow_kx"/>
- <attribute name="ky" tokenid="ooxml:CT_Shadow_ky"/>
- <attribute name="algn" tokenid="ooxml:CT_Shadow_algn"/>
- </resource>
- <resource name="CT_Reflection" resource="Properties">
- <attribute name="blurRad" tokenid="ooxml:CT_Reflection_blurRad"/>
- <attribute name="stA" tokenid="ooxml:CT_Reflection_stA"/>
- <attribute name="stPos" tokenid="ooxml:CT_Reflection_stPos"/>
- <attribute name="endA" tokenid="ooxml:CT_Reflection_endA"/>
- <attribute name="endPos" tokenid="ooxml:CT_Reflection_endPos"/>
- <attribute name="dist" tokenid="ooxml:CT_Reflection_dist"/>
- <attribute name="dir" tokenid="ooxml:CT_Reflection_dir"/>
- <attribute name="fadeDir" tokenid="ooxml:CT_Reflection_fadeDir"/>
- <attribute name="sx" tokenid="ooxml:CT_Reflection_sx"/>
- <attribute name="sy" tokenid="ooxml:CT_Reflection_sy"/>
- <attribute name="kx" tokenid="ooxml:CT_Reflection_kx"/>
- <attribute name="ky" tokenid="ooxml:CT_Reflection_ky"/>
- <attribute name="algn" tokenid="ooxml:CT_Reflection_algn"/>
- </resource>
- <resource name="CT_TextOutlineEffect" resource="Properties">
- <attribute name="w" tokenid="ooxml:CT_TextOutlineEffect_w"/>
- <attribute name="cap" tokenid="ooxml:CT_TextOutlineEffect_cap"/>
- <attribute name="cmpd" tokenid="ooxml:CT_TextOutlineEffect_cmpd"/>
- <attribute name="algn" tokenid="ooxml:CT_TextOutlineEffect_algn"/>
- </resource>
- <resource name="CT_FillTextEffect" resource="Properties"/>
- <resource name="CT_Scene3D" resource="Properties">
- <element name="camera" tokenid="ooxml:CT_Scene3D_camera"/>
- <element name="lightRig" tokenid="ooxml:CT_Scene3D_lightRig"/>
- </resource>
- <resource name="CT_Props3D" resource="Properties">
- <element name="bevelT" tokenid="ooxml:CT_Props3D_bevelT"/>
- <element name="bevelB" tokenid="ooxml:CT_Props3D_bevelB"/>
- <element name="extrusionClr" tokenid="ooxml:CT_Props3D_extrusionClr"/>
- <element name="contourClr" tokenid="ooxml:CT_Props3D_contourClr"/>
- <attribute name="extrusionH" tokenid="ooxml:CT_Props3D_extrusionH"/>
- <attribute name="contourW" tokenid="ooxml:CT_Props3D_contourW"/>
- <attribute name="prstMaterial" tokenid="ooxml:CT_Props3D_prstMaterial"/>
- </resource>
- <resource name="CT_Ligatures" resource="Properties">
- <attribute name="val" tokenid="ooxml:CT_Ligatures_val"/>
- </resource>
- <resource name="CT_NumForm" resource="Properties">
- <attribute name="val" tokenid="ooxml:CT_NumForm_val"/>
- </resource>
- <resource name="CT_NumSpacing" resource="Properties">
- <attribute name="val" tokenid="ooxml:CT_NumSpacing_val"/>
- </resource>
- <resource name="CT_StylisticSets" resource="Properties">
- <attribute name="styleSet" tokenid="ooxml:CT_StylisticSets_styleSet"/>
- </resource>
-
- <resource name="glow" resource="Properties">
- <element name="glow" tokenid="ooxml:glow_glow"/>
- </resource>
- <resource name="shadow" resource="Properties">
- <element name="shadow" tokenid="ooxml:shadow_shadow"/>
- </resource>
- <resource name="reflection" resource="Properties">
- <element name="reflection" tokenid="ooxml:reflection_reflection"/>
- </resource>
- <resource name="textOutline" resource="Properties">
- <element name="textOutline" tokenid="ooxml:textOutline_textOutline"/>
- </resource>
- <resource name="textFill" resource="Properties">
- <element name="textFill" tokenid="ooxml:textFill_textFill"/>
- </resource>
- <resource name="scene3d" resource="Properties">
- <element name="scene3d" tokenid="ooxml:scene3d_scene3d"/>
- </resource>
- <resource name="props3d" resource="Properties">
- <element name="props3d" tokenid="ooxml:props3d_props3d"/>
- </resource>
- <resource name="ligatures" resource="Properties">
- <element name="ligatures" tokenid="ooxml:ligatures_ligatures"/>
- </resource>
- <resource name="numForm" resource="Properties">
- <element name="numForm" tokenid="ooxml:numForm_numForm"/>
- </resource>
- <resource name="numSpacing" resource="Properties">
- <element name="numSpacing" tokenid="ooxml:numSpacing_numSpacing"/>
- </resource>
- <resource name="stylisticSets" resource="Properties">
- <element name="stylisticSets" tokenid="ooxml:stylisticSets_stylisticSets"/>
- </resource>
- <resource name="cntxtAlts" resource="Properties">
- <element name="cntxtAlts" tokenid="ooxml:cntxtAlts_cntxtAlts"/>
- </resource>
- </namespace>
- <namespace name="a14">
- <grammar xmlns="http://relaxng.org/ns/structure/1.0" ns="http://schemas.microsoft.com/office/drawing/2010/main">
- <!-- Simple types -->
- <define name="ST_ArtisticEffectParam10">
- <data type="integer"/>
- </define>
- <define name="ST_ArtisticEffectParam100">
- <data type="integer"/>
- </define>
- <define name="ST_ArtisticEffectParam4">
- <data type="integer"/>
- </define>
- <define name="ST_ArtisticEffectParam6">
- <data type="integer"/>
- </define>
- <define name="ST_ColorTemperature">
- <data type="integer"/>
- </define>
- <define name="ST_SaturationAmount">
- <data type="integer"/>
- </define>
-
- <!-- Complex types for effects -->
- <define name="CT_PictureEffectBlur">
- <attribute name="visible">
- <ref name="ST_ArtisticEffectParam100"/>
- </attribute>
- </define>
- <define name="CT_PictureEffectCement">
- <attribute name="trans">
- <ref name="ST_PositiveFixedPercentage"/>
- </attribute>
- <attribute name="crackSpacing">
- <ref name="ST_ArtisticEffectParam100"/>
- </attribute>
- </define>
- <define name="CT_PictureEffectChalkSketch">
- <attribute name="trans">
- <ref name="ST_PositiveFixedPercentage"/>
- </attribute>
- <attribute name="pressure">
- <ref name="ST_ArtisticEffectParam4"/>
- </attribute>
- </define>
- <define name="CT_PictureEffectCrisscrossEtching">
- <attribute name="trans">
- <ref name="ST_PositiveFixedPercentage"/>
- </attribute>
- <attribute name="pressure">
- <ref name="ST_ArtisticEffectParam4"/>
- </attribute>
- </define>
- <define name="CT_PictureEffectCutout">
- <attribute name="trans">
- <ref name="ST_PositiveFixedPercentage"/>
- </attribute>
- <attribute name="numberOfShades">
- <ref name="ST_ArtisticEffectParam6"/>
- </attribute>
- </define>
- <define name="CT_PictureEffectFilmGrain">
- <attribute name="trans">
- <ref name="ST_PositiveFixedPercentage"/>
- </attribute>
- <attribute name="grainSize">
- <ref name="ST_ArtisticEffectParam100"/>
- </attribute>
- </define>
- <define name="CT_PictureEffectGlass">
- <attribute name="trans">
- <ref name="ST_PositiveFixedPercentage"/>
- </attribute>
- <attribute name="scaling">
- <ref name="ST_ArtisticEffectParam100"/>
- </attribute>
- </define>
- <define name="CT_PictureEffectGlowDiffused">
- <attribute name="trans">
- <ref name="ST_PositiveFixedPercentage"/>
- </attribute>
- <attribute name="intensity">
- <ref name="ST_ArtisticEffectParam10"/>
- </attribute>
- </define>
- <define name="CT_PictureEffectGlowEdges">
- <attribute name="trans">
- <ref name="ST_PositiveFixedPercentage"/>
- </attribute>
- <attribute name="smoothness">
- <ref name="ST_ArtisticEffectParam10"/>
- </attribute>
- </define>
- <define name="CT_PictureEffectLightScreen">
- <attribute name="trans">
- <ref name="ST_PositiveFixedPercentage"/>
- </attribute>
- <attribute name="gridSize">
- <ref name="ST_ArtisticEffectParam10"/>
- </attribute>
- </define>
- <define name="CT_PictureEffectLineDrawing">
- <attribute name="trans">
- <ref name="ST_PositiveFixedPercentage"/>
- </attribute>
- <attribute name="pencilSize">
- <ref name="ST_ArtisticEffectParam100"/>
- </attribute>
- </define>
- <define name="CT_PictureEffectMarker">
- <attribute name="trans">
- <ref name="ST_PositiveFixedPercentage"/>
- </attribute>
- <attribute name="size">
- <ref name="ST_ArtisticEffectParam100"/>
- </attribute>
- </define>
- <define name="CT_PictureEffectMosiaicBubbles">
- <attribute name="trans">
- <ref name="ST_PositiveFixedPercentage"/>
- </attribute>
- <attribute name="pressure">
- <ref name="ST_ArtisticEffectParam100"/>
- </attribute>
- </define>
- <define name="CT_PictureEffectPaintStrokes">
- <attribute name="trans">
- <ref name="ST_PositiveFixedPercentage"/>
- </attribute>
- <attribute name="intensity">
- <ref name="ST_ArtisticEffectParam10"/>
- </attribute>
- </define>
- <define name="CT_PictureEffectPaintBrush">
- <attribute name="trans">
- <ref name="ST_PositiveFixedPercentage"/>
- </attribute>
- <attribute name="brushSize">
- <ref name="ST_ArtisticEffectParam10"/>
- </attribute>
- </define>
- <define name="CT_PictureEffectPastelsSmooth">
- <attribute name="trans">
- <ref name="ST_PositiveFixedPercentage"/>
- </attribute>
- <attribute name="scaling">
- <ref name="ST_ArtisticEffectParam100"/>
- </attribute>
- </define>
- <define name="CT_PictureEffectPencilGrayscale">
- <attribute name="trans">
- <ref name="ST_PositiveFixedPercentage"/>
- </attribute>
- <attribute name="pencilSize">
- <ref name="ST_ArtisticEffectParam100"/>
- </attribute>
- </define>
- <define name="CT_PictureEffectPencilSketch">
- <attribute name="trans">
- <ref name="ST_PositiveFixedPercentage"/>
- </attribute>
- <attribute name="pressure">
- <ref name="ST_ArtisticEffectParam100"/>
- </attribute>
- </define>
- <define name="CT_PictureEffectPhotocopy">
- <attribute name="trans">
- <ref name="ST_PositiveFixedPercentage"/>
- </attribute>
- <attribute name="detail">
- <ref name="ST_ArtisticEffectParam10"/>
- </attribute>
- </define>
- <define name="CT_PictureEffectPlasticWrap">
- <attribute name="trans">
- <ref name="ST_PositiveFixedPercentage"/>
- </attribute>
- <attribute name="smoothness">
- <ref name="ST_ArtisticEffectParam10"/>
- </attribute>
- </define>
- <define name="CT_PictureEffectTexturizer">
- <attribute name="trans">
- <ref name="ST_PositiveFixedPercentage"/>
- </attribute>
- <attribute name="scaling">
- <ref name="ST_ArtisticEffectParam100"/>
- </attribute>
- </define>
- <define name="CT_PictureEffectWatercolorSponge">
- <attribute name="trans">
- <ref name="ST_PositiveFixedPercentage"/>
- </attribute>
- <attribute name="brushSize">
- <ref name="ST_ArtisticEffectParam10"/>
- </attribute>
- </define>
- <define name="CT_PictureEffectBrightnessContrast">
- <attribute name="bright">
- <ref name="ST_FixedPercentage"/>
- </attribute>
- <attribute name="contrast">
- <ref name="ST_FixedPercentage"/>
- </attribute>
- </define>
- <define name="CT_PictureEffectColorTemperature">
- <attribute name="colorTemp">
- <ref name="ST_ColorTemperature"/>
- </attribute>
- </define>
- <define name="CT_PictureEffectSaturation">
- <attribute name="sat">
- <ref name="ST_SaturationAmount"/>
- </attribute>
- </define>
- <define name="CT_PictureEffectSharpenSoften">
- <attribute name="amount">
- <ref name="ST_FixedPercentage"/>
- </attribute>
- </define>
-
- <!-- Complex types for containers -->
- <define name="CT_PictureEffect">
- <choice>
- <element name="artisticBlur">
- <ref name="CT_PictureEffectBlur"/>
- </element>
- <element name="artisticCement">
- <ref name="CT_PictureEffectCement"/>
- </element>
- <element name="artisticChalkSketch">
- <ref name="CT_PictureEffectChalkSketch"/>
- </element>
- <element name="artisticCrisscrossEtching">
- <ref name="CT_PictureEffectCrisscrossEtching"/>
- </element>
- <element name="artisticCutout">
- <ref name="CT_PictureEffectCutout"/>
- </element>
- <element name="artisticFilmGrain">
- <ref name="CT_PictureEffectFilmGrain"/>
- </element>
- <element name="artisticGlass">
- <ref name="CT_PictureEffectGlass"/>
- </element>
- <element name="artisticGlowDiffused">
- <ref name="CT_PictureEffectGlowDiffused"/>
- </element>
- <element name="artisticGlowEdges">
- <ref name="CT_PictureEffectGlowEdges"/>
- </element>
- <element name="artisticLightScreen">
- <ref name="CT_PictureEffectLightScreen"/>
- </element>
- <element name="artisticLineDrawing">
- <ref name="CT_PictureEffectLineDrawing"/>
- </element>
- <element name="artisticMarker">
- <ref name="CT_PictureEffectMarker"/>
- </element>
- <element name="artisticMosiaicBubbles">
- <ref name="CT_PictureEffectMosiaicBubbles"/>
- </element>
- <element name="artisticPaintStrokes">
- <ref name="CT_PictureEffectPaintStrokes"/>
- </element>
- <element name="artisticPaintBrush">
- <ref name="CT_PictureEffectPaintBrush"/>
- </element>
- <element name="artisticPastelsSmooth">
- <ref name="CT_PictureEffectPastelsSmooth"/>
- </element>
- <element name="artisticPencilGrayscale">
- <ref name="CT_PictureEffectPencilGrayscale"/>
- </element>
- <element name="artisticPencilSketch">
- <ref name="CT_PictureEffectPencilSketch"/>
- </element>
- <element name="artisticPhotocopy">
- <ref name="CT_PictureEffectPhotocopy"/>
- </element>
- <element name="artisticPlasticWrap">
- <ref name="CT_PictureEffectPlasticWrap"/>
- </element>
- <element name="artisticTexturizer">
- <ref name="CT_PictureEffectTexturizer"/>
- </element>
- <element name="artisticWatercolorSponge">
- <ref name="CT_PictureEffectWatercolorSponge"/>
- </element>
- <element name="brightnessContrast">
- <ref name="CT_PictureEffectBrightnessContrast"/>
- </element>
- <element name="colorTemperature">
- <ref name="CT_PictureEffectColorTemperature"/>
- </element>
- <element name="saturation">
- <ref name="CT_PictureEffectSaturation"/>
- </element>
- <element name="sharpenSoften">
- <ref name="CT_PictureEffectSharpenSoften"/>
- </element>
- </choice>
- <attribute name="visible">
- <data type="boolean"/>
- </attribute>
- </define>
- <define name="CT_PictureLayer">
- <element name="imgEffect">
- <ref name="CT_PictureEffect"/>
- </element>
- <attribute name="r:embed">
- <data type="string"/>
- </attribute>
- </define>
- <define name="CT_Photo">
- <element name="imgLayer">
- <ref name="CT_PictureLayer"/>
- </element>
- </define>
- </grammar>
- </namespace>
- <namespace name="dml-shapeGeometry">
- <grammar xmlns="http://relaxng.org/ns/structure/1.0" ns="http://schemas.openxmlformats.org/drawingml/2006/main">
- <define name="ST_ShapeType">
- <choice>
- <!-- Line Shape -->
- <value>line</value>
- <!-- Line Inverse Shape -->
- <value>lineInv</value>
- <!-- Triangle Shape -->
- <value>triangle</value>
- <!-- Right Triangle Shape -->
- <value>rtTriangle</value>
- <!-- Rectangle Shape -->
- <value>rect</value>
- <!-- Diamond Shape -->
- <value>diamond</value>
- <!-- Parallelogram Shape -->
- <value>parallelogram</value>
- <!-- Trapezoid Shape -->
- <value>trapezoid</value>
- <!-- Non-Isosceles Trapezoid Shape -->
- <value>nonIsoscelesTrapezoid</value>
- <!-- Pentagon Shape -->
- <value>pentagon</value>
- <!-- Hexagon Shape -->
- <value>hexagon</value>
- <!-- Heptagon Shape -->
- <value>heptagon</value>
- <!-- Octagon Shape -->
- <value>octagon</value>
- <!-- Decagon Shape -->
- <value>decagon</value>
- <!-- Dodecagon Shape -->
- <value>dodecagon</value>
- <!-- Four Pointed Star Shape -->
- <value>star4</value>
- <!-- Five Pointed Star Shape -->
- <value>star5</value>
- <!-- Six Pointed Star Shape -->
- <value>star6</value>
- <!-- Seven Pointed Star Shape -->
- <value>star7</value>
- <!-- Eight Pointed Star Shape -->
- <value>star8</value>
- <!-- Ten Pointed Star Shape -->
- <value>star10</value>
- <!-- Twelve Pointed Star Shape -->
- <value>star12</value>
- <!-- Sixteen Pointed Star Shape -->
- <value>star16</value>
- <!-- Twenty Four Pointed Star Shape -->
- <value>star24</value>
- <!-- Thirty Two Pointed Star Shape -->
- <value>star32</value>
- <!-- Round Corner Rectangle Shape -->
- <value>roundRect</value>
- <!-- One Round Corner Rectangle Shape -->
- <value>round1Rect</value>
- <!-- Two Same-side Round Corner Rectangle Shape -->
- <value>round2SameRect</value>
- <!-- Two Diagonal Round Corner Rectangle Shape -->
- <value>round2DiagRect</value>
- <!-- One Snip One Round Corner Rectangle Shape -->
- <value>snipRoundRect</value>
- <!-- One Snip Corner Rectangle Shape -->
- <value>snip1Rect</value>
- <!-- Two Same-side Snip Corner Rectangle Shape -->
- <value>snip2SameRect</value>
- <!-- Two Diagonal Snip Corner Rectangle Shape -->
- <value>snip2DiagRect</value>
- <!-- Plaque Shape -->
- <value>plaque</value>
- <!-- Ellipse Shape -->
- <value>ellipse</value>
- <!-- Teardrop Shape -->
- <value>teardrop</value>
- <!-- Home Plate Shape -->
- <value>homePlate</value>
- <!-- Chevron Shape -->
- <value>chevron</value>
- <!-- Pie Wedge Shape -->
- <value>pieWedge</value>
- <!-- Pie Shape -->
- <value>pie</value>
- <!-- Block Arc Shape -->
- <value>blockArc</value>
- <!-- Donut Shape -->
- <value>donut</value>
- <!-- No Smoking Shape -->
- <value>noSmoking</value>
- <!-- Right Arrow Shape -->
- <value>rightArrow</value>
- <!-- Left Arrow Shape -->
- <value>leftArrow</value>
- <!-- Up Arrow Shape -->
- <value>upArrow</value>
- <!-- Down Arrow Shape -->
- <value>downArrow</value>
- <!-- Striped Right Arrow Shape -->
- <value>stripedRightArrow</value>
- <!-- Notched Right Arrow Shape -->
- <value>notchedRightArrow</value>
- <!-- Bent Up Arrow Shape -->
- <value>bentUpArrow</value>
- <!-- Left Right Arrow Shape -->
- <value>leftRightArrow</value>
- <!-- Up Down Arrow Shape -->
- <value>upDownArrow</value>
- <!-- Left Up Arrow Shape -->
- <value>leftUpArrow</value>
- <!-- Left Right Up Arrow Shape -->
- <value>leftRightUpArrow</value>
- <!-- Quad-Arrow Shape -->
- <value>quadArrow</value>
- <!-- Callout Left Arrow Shape -->
- <value>leftArrowCallout</value>
- <!-- Callout Right Arrow Shape -->
- <value>rightArrowCallout</value>
- <!-- Callout Up Arrow Shape -->
- <value>upArrowCallout</value>
- <!-- Callout Down Arrow Shape -->
- <value>downArrowCallout</value>
- <!-- Callout Left Right Arrow Shape -->
- <value>leftRightArrowCallout</value>
- <!-- Callout Up Down Arrow Shape -->
- <value>upDownArrowCallout</value>
- <!-- Callout Quad-Arrow Shape -->
- <value>quadArrowCallout</value>
- <!-- Bent Arrow Shape -->
- <value>bentArrow</value>
- <!-- U-Turn Arrow Shape -->
- <value>uturnArrow</value>
- <!-- Circular Arrow Shape -->
- <value>circularArrow</value>
- <!-- Left Circular Arrow Shape -->
- <value>leftCircularArrow</value>
- <!-- Left Right Circular Arrow Shape -->
- <value>leftRightCircularArrow</value>
- <!-- Curved Right Arrow Shape -->
- <value>curvedRightArrow</value>
- <!-- Curved Left Arrow Shape -->
- <value>curvedLeftArrow</value>
- <!-- Curved Up Arrow Shape -->
- <value>curvedUpArrow</value>
- <!-- Curved Down Arrow Shape -->
- <value>curvedDownArrow</value>
- <!-- Swoosh Arrow Shape -->
- <value>swooshArrow</value>
- <!-- Cube Shape -->
- <value>cube</value>
- <!-- Can Shape -->
- <value>can</value>
- <!-- Lightning Bolt Shape -->
- <value>lightningBolt</value>
- <!-- Heart Shape -->
- <value>heart</value>
- <!-- Sun Shape -->
- <value>sun</value>
- <!-- Moon Shape -->
- <value>moon</value>
- <!-- Smiley Face Shape -->
- <value>smileyFace</value>
- <!-- Irregular Seal 1 Shape -->
- <value>irregularSeal1</value>
- <!-- Irregular Seal 2 Shape -->
- <value>irregularSeal2</value>
- <!-- Folded Corner Shape -->
- <value>foldedCorner</value>
- <!-- Bevel Shape -->
- <value>bevel</value>
- <!-- Frame Shape -->
- <value>frame</value>
- <!-- Half Frame Shape -->
- <value>halfFrame</value>
- <!-- Corner Shape -->
- <value>corner</value>
- <!-- Diagonal Stripe Shape -->
- <value>diagStripe</value>
- <!-- Chord Shape -->
- <value>chord</value>
- <!-- Curved Arc Shape -->
- <value>arc</value>
- <!-- Left Bracket Shape -->
- <value>leftBracket</value>
- <!-- Right Bracket Shape -->
- <value>rightBracket</value>
- <!-- Left Brace Shape -->
- <value>leftBrace</value>
- <!-- Right Brace Shape -->
- <value>rightBrace</value>
- <!-- Bracket Pair Shape -->
- <value>bracketPair</value>
- <!-- Brace Pair Shape -->
- <value>bracePair</value>
- <!-- Straight Connector 1 Shape -->
- <value>straightConnector1</value>
- <!-- Bent Connector 2 Shape -->
- <value>bentConnector2</value>
- <!-- Bent Connector 3 Shape -->
- <value>bentConnector3</value>
- <!-- Bent Connector 4 Shape -->
- <value>bentConnector4</value>
- <!-- Bent Connector 5 Shape -->
- <value>bentConnector5</value>
- <!-- Curved Connector 2 Shape -->
- <value>curvedConnector2</value>
- <!-- Curved Connector 3 Shape -->
- <value>curvedConnector3</value>
- <!-- Curved Connector 4 Shape -->
- <value>curvedConnector4</value>
- <!-- Curved Connector 5 Shape -->
- <value>curvedConnector5</value>
- <!-- Callout 1 Shape -->
- <value>callout1</value>
- <!-- Callout 2 Shape -->
- <value>callout2</value>
- <!-- Callout 3 Shape -->
- <value>callout3</value>
- <!-- Callout 1 Shape -->
- <value>accentCallout1</value>
- <!-- Callout 2 Shape -->
- <value>accentCallout2</value>
- <!-- Callout 3 Shape -->
- <value>accentCallout3</value>
- <!-- Callout 1 with Border Shape -->
- <value>borderCallout1</value>
- <!-- Callout 2 with Border Shape -->
- <value>borderCallout2</value>
- <!-- Callout 3 with Border Shape -->
- <value>borderCallout3</value>
- <!-- Callout 1 with Border and Accent Shape -->
- <value>accentBorderCallout1</value>
- <!-- Callout 2 with Border and Accent Shape -->
- <value>accentBorderCallout2</value>
- <!-- Callout 3 with Border and Accent Shape -->
- <value>accentBorderCallout3</value>
- <!-- Callout Wedge Rectangle Shape -->
- <value>wedgeRectCallout</value>
- <!-- Callout Wedge Round Rectangle Shape -->
- <value>wedgeRoundRectCallout</value>
- <!-- Callout Wedge Ellipse Shape -->
- <value>wedgeEllipseCallout</value>
- <!-- Callout Cloud Shape -->
- <value>cloudCallout</value>
- <!-- Cloud Shape -->
- <value>cloud</value>
- <!-- Ribbon Shape -->
- <value>ribbon</value>
- <!-- Ribbon 2 Shape -->
- <value>ribbon2</value>
- <!-- Ellipse Ribbon Shape -->
- <value>ellipseRibbon</value>
- <!-- Ellipse Ribbon 2 Shape -->
- <value>ellipseRibbon2</value>
- <!-- Left Right Ribbon Shape -->
- <value>leftRightRibbon</value>
- <!-- Vertical Scroll Shape -->
- <value>verticalScroll</value>
- <!-- Horizontal Scroll Shape -->
- <value>horizontalScroll</value>
- <!-- Wave Shape -->
- <value>wave</value>
- <!-- Double Wave Shape -->
- <value>doubleWave</value>
- <!-- Plus Shape -->
- <value>plus</value>
- <!-- Process Flow Shape -->
- <value>flowChartProcess</value>
- <!-- Decision Flow Shape -->
- <value>flowChartDecision</value>
- <!-- Input Output Flow Shape -->
- <value>flowChartInputOutput</value>
- <!-- Predefined Process Flow Shape -->
- <value>flowChartPredefinedProcess</value>
- <!-- Internal Storage Flow Shape -->
- <value>flowChartInternalStorage</value>
- <!-- Document Flow Shape -->
- <value>flowChartDocument</value>
- <!-- Multi-Document Flow Shape -->
- <value>flowChartMultidocument</value>
- <!-- Terminator Flow Shape -->
- <value>flowChartTerminator</value>
- <!-- Preparation Flow Shape -->
- <value>flowChartPreparation</value>
- <!-- Manual Input Flow Shape -->
- <value>flowChartManualInput</value>
- <!-- Manual Operation Flow Shape -->
- <value>flowChartManualOperation</value>
- <!-- Connector Flow Shape -->
- <value>flowChartConnector</value>
- <!-- Punched Card Flow Shape -->
- <value>flowChartPunchedCard</value>
- <!-- Punched Tape Flow Shape -->
- <value>flowChartPunchedTape</value>
- <!-- Summing Junction Flow Shape -->
- <value>flowChartSummingJunction</value>
- <!-- Or Flow Shape -->
- <value>flowChartOr</value>
- <!-- Collate Flow Shape -->
- <value>flowChartCollate</value>
- <!-- Sort Flow Shape -->
- <value>flowChartSort</value>
- <!-- Extract Flow Shape -->
- <value>flowChartExtract</value>
- <!-- Merge Flow Shape -->
- <value>flowChartMerge</value>
- <!-- Offline Storage Flow Shape -->
- <value>flowChartOfflineStorage</value>
- <!-- Online Storage Flow Shape -->
- <value>flowChartOnlineStorage</value>
- <!-- Magnetic Tape Flow Shape -->
- <value>flowChartMagneticTape</value>
- <!-- Magnetic Disk Flow Shape -->
- <value>flowChartMagneticDisk</value>
- <!-- Magnetic Drum Flow Shape -->
- <value>flowChartMagneticDrum</value>
- <!-- Display Flow Shape -->
- <value>flowChartDisplay</value>
- <!-- Delay Flow Shape -->
- <value>flowChartDelay</value>
- <!-- Alternate Process Flow Shape -->
- <value>flowChartAlternateProcess</value>
- <!-- Off-Page Connector Flow Shape -->
- <value>flowChartOffpageConnector</value>
- <!-- Blank Button Shape -->
- <value>actionButtonBlank</value>
- <!-- Home Button Shape -->
- <value>actionButtonHome</value>
- <!-- Help Button Shape -->
- <value>actionButtonHelp</value>
- <!-- Information Button Shape -->
- <value>actionButtonInformation</value>
- <!-- Forward or Next Button Shape -->
- <value>actionButtonForwardNext</value>
- <!-- Back or Previous Button Shape -->
- <value>actionButtonBackPrevious</value>
- <!-- End Button Shape -->
- <value>actionButtonEnd</value>
- <!-- Beginning Button Shape -->
- <value>actionButtonBeginning</value>
- <!-- Return Button Shape -->
- <value>actionButtonReturn</value>
- <!-- Document Button Shape -->
- <value>actionButtonDocument</value>
- <!-- Sound Button Shape -->
- <value>actionButtonSound</value>
- <!-- Movie Button Shape -->
- <value>actionButtonMovie</value>
- <!-- Gear 6 Shape -->
- <value>gear6</value>
- <!-- Gear 9 Shape -->
- <value>gear9</value>
- <!-- Funnel Shape -->
- <value>funnel</value>
- <!-- Plus Math Shape -->
- <value>mathPlus</value>
- <!-- Minus Math Shape -->
- <value>mathMinus</value>
- <!-- Multiply Math Shape -->
- <value>mathMultiply</value>
- <!-- Divide Math Shape -->
- <value>mathDivide</value>
- <!-- Equal Math Shape -->
- <value>mathEqual</value>
- <!-- Not Equal Math Shape -->
- <value>mathNotEqual</value>
- <!-- Corner Tabs Shape -->
- <value>cornerTabs</value>
- <!-- Square Tabs Shape -->
- <value>squareTabs</value>
- <!-- Plaque Tabs Shape -->
- <value>plaqueTabs</value>
- <!-- Chart X Shape -->
- <value>chartX</value>
- <!-- Chart Star Shape -->
- <value>chartStar</value>
- <!-- Chart Plus Shape -->
- <value>chartPlus</value>
- </choice>
- </define>
- <define name="ST_TextShapeType">
- <choice>
- <!-- No Text Shape -->
- <value>textNoShape</value>
- <!-- Plain Text Shape -->
- <value>textPlain</value>
- <!-- Stop Sign Text Shape -->
- <value>textStop</value>
- <!-- Triangle Text Shape -->
- <value>textTriangle</value>
- <!-- Inverted Triangle Text Shape -->
- <value>textTriangleInverted</value>
- <!-- Chevron Text Shape -->
- <value>textChevron</value>
- <!-- Inverted Chevron Text Shape -->
- <value>textChevronInverted</value>
- <!-- Inside Ring Text Shape -->
- <value>textRingInside</value>
- <!-- Outside Ring Text Shape -->
- <value>textRingOutside</value>
- <!-- Upward Arch Text Shape -->
- <value>textArchUp</value>
- <!-- Downward Arch Text Shape -->
- <value>textArchDown</value>
- <!-- Circle Text Shape -->
- <value>textCircle</value>
- <!-- Button Text Shape -->
- <value>textButton</value>
- <!-- Upward Pour Arch Text Shape -->
- <value>textArchUpPour</value>
- <!-- Downward Pour Arch Text Shape -->
- <value>textArchDownPour</value>
- <!-- Circle Pour Text Shape -->
- <value>textCirclePour</value>
- <!-- Button Pour Text Shape -->
- <value>textButtonPour</value>
- <!-- Upward Curve Text Shape -->
- <value>textCurveUp</value>
- <!-- Downward Curve Text Shape -->
- <value>textCurveDown</value>
- <!-- Upward Can Text Shape -->
- <value>textCanUp</value>
- <!-- Downward Can Text Shape -->
- <value>textCanDown</value>
- <!-- Wave 1 Text Shape -->
- <value>textWave1</value>
- <!-- Wave 2 Text Shape -->
- <value>textWave2</value>
- <!-- Double Wave 1 Text Shape -->
- <value>textDoubleWave1</value>
- <!-- Wave 4 Text Shape -->
- <value>textWave4</value>
- <!-- Inflate Text Shape -->
- <value>textInflate</value>
- <!-- Deflate Text Shape -->
- <value>textDeflate</value>
- <!-- Bottom Inflate Text Shape -->
- <value>textInflateBottom</value>
- <!-- Bottom Deflate Text Shape -->
- <value>textDeflateBottom</value>
- <!-- Top Inflate Text Shape -->
- <value>textInflateTop</value>
- <!-- Top Deflate Text Shape -->
- <value>textDeflateTop</value>
- <!-- Deflate-Inflate Text Shape -->
- <value>textDeflateInflate</value>
- <!-- Deflate-Inflate-Deflate Text Shape -->
- <value>textDeflateInflateDeflate</value>
- <!-- Right Fade Text Shape -->
- <value>textFadeRight</value>
- <!-- Left Fade Text Shape -->
- <value>textFadeLeft</value>
- <!-- Upward Fade Text Shape -->
- <value>textFadeUp</value>
- <!-- Downward Fade Text Shape -->
- <value>textFadeDown</value>
- <!-- Upward Slant Text Shape -->
- <value>textSlantUp</value>
- <!-- Downward Slant Text Shape -->
- <value>textSlantDown</value>
- <!-- Upward Cascade Text Shape -->
- <value>textCascadeUp</value>
- <!-- Downward Cascade Text Shape -->
- <value>textCascadeDown</value>
- </choice>
- </define>
- <define name="ST_GeomGuideName">
- <data type="token"/>
- </define>
- <define name="ST_GeomGuideFormula">
- <data type="string"/>
- </define>
- <define name="CT_GeomGuide">
- <attribute name="name">
- <ref name="ST_GeomGuideName"/>
- </attribute>
- <attribute name="fmla">
- <ref name="ST_GeomGuideFormula"/>
- </attribute>
- </define>
- <define name="CT_GeomGuideList">
- <element name="gd">
- <ref name="CT_GeomGuide"/>
- </element>
- </define>
- <define name="ST_AdjCoordinate">
- <choice>
- <ref name="ST_Coordinate"/>
- <ref name="ST_GeomGuideName"/>
- </choice>
- </define>
- <!-- Union -->
- <define name="ST_AdjAngle">
- <choice>
- <ref name="ST_Angle"/>
- <ref name="ST_GeomGuideName"/>
- </choice>
- </define>
- <!-- Union -->
- <define name="CT_AdjPoint2D">
- <attribute name="x">
- <ref name="ST_AdjCoordinate"/>
- </attribute>
- <attribute name="y">
- <ref name="ST_AdjCoordinate"/>
- </attribute>
- </define>
- <define name="CT_GeomRect">
- <attribute name="l">
- <ref name="ST_AdjCoordinate"/>
- </attribute>
- <attribute name="t">
- <ref name="ST_AdjCoordinate"/>
- </attribute>
- <attribute name="r">
- <ref name="ST_AdjCoordinate"/>
- </attribute>
- <attribute name="b">
- <ref name="ST_AdjCoordinate"/>
- </attribute>
- </define>
- <define name="CT_XYAdjustHandle">
- <element name="pos">
- <ref name="CT_AdjPoint2D"/>
- </element>
- <attribute name="gdRefX">
- <ref name="ST_GeomGuideName"/>
- </attribute>
- <attribute name="minX">
- <ref name="ST_AdjCoordinate"/>
- </attribute>
- <attribute name="maxX">
- <ref name="ST_AdjCoordinate"/>
- </attribute>
- <attribute name="gdRefY">
- <ref name="ST_GeomGuideName"/>
- </attribute>
- <attribute name="minY">
- <ref name="ST_AdjCoordinate"/>
- </attribute>
- <attribute name="maxY">
- <ref name="ST_AdjCoordinate"/>
- </attribute>
- </define>
- <define name="CT_PolarAdjustHandle">
- <element name="pos">
- <ref name="CT_AdjPoint2D"/>
- </element>
- <attribute name="gdRefR">
- <ref name="ST_GeomGuideName"/>
- </attribute>
- <attribute name="minR">
- <ref name="ST_AdjCoordinate"/>
- </attribute>
- <attribute name="maxR">
- <ref name="ST_AdjCoordinate"/>
- </attribute>
- <attribute name="gdRefAng">
- <ref name="ST_GeomGuideName"/>
- </attribute>
- <attribute name="minAng">
- <ref name="ST_AdjCoordinate"/>
- </attribute>
- <attribute name="maxAng">
- <ref name="ST_AdjCoordinate"/>
- </attribute>
- </define>
- <define name="CT_ConnectionSite">
- <element name="pos">
- <ref name="CT_AdjPoint2D"/>
- </element>
- <attribute name="ang">
- <ref name="ST_AdjAngle"/>
- </attribute>
- </define>
- <define name="CT_AdjustHandleList">
- <choice>
- <element name="ahXY">
- <ref name="CT_XYAdjustHandle"/>
- </element>
- <element name="ahPolar">
- <ref name="CT_PolarAdjustHandle"/>
- </element>
- </choice>
- </define>
- <define name="CT_ConnectionSiteList">
- <element name="cxn">
- <ref name="CT_ConnectionSite"/>
- </element>
- </define>
- <define name="CT_Connection">
- <attribute name="id">
- <ref name="ST_DrawingElementId"/>
- </attribute>
- <attribute name="idx">
- <data type="unsignedInt"/>
- </attribute>
- </define>
- <define name="CT_Path2DMoveTo">
- <element name="pt">
- <ref name="CT_AdjPoint2D"/>
- </element>
- </define>
- <define name="CT_Path2DLineTo">
- <element name="pt">
- <ref name="CT_AdjPoint2D"/>
- </element>
- </define>
- <define name="CT_Path2DArcTo">
- <attribute name="wR">
- <ref name="ST_AdjCoordinate"/>
- </attribute>
- <attribute name="hR">
- <ref name="ST_AdjCoordinate"/>
- </attribute>
- <attribute name="stAng">
- <ref name="ST_AdjAngle"/>
- </attribute>
- <attribute name="swAng">
- <ref name="ST_AdjAngle"/>
- </attribute>
- </define>
- <define name="CT_Path2DQuadBezierTo">
- <element name="pt">
- <ref name="CT_AdjPoint2D"/>
- </element>
- </define>
- <define name="CT_Path2DCubicBezierTo">
- <element name="pt">
- <ref name="CT_AdjPoint2D"/>
- </element>
- </define>
- <define name="CT_Path2DClose">
- </define>
- <define name="ST_PathFillMode">
- <choice>
- <!-- No Path Fill -->
- <value>none</value>
- <!-- Normal Path Fill -->
- <value>norm</value>
- <!-- Lighten Path Fill -->
- <value>lighten</value>
- <!-- Lighten Path Fill Less -->
- <value>lightenLess</value>
- <!-- Darken Path Fill -->
- <value>darken</value>
- <!-- Darken Path Fill Less -->
- <value>darkenLess</value>
- </choice>
- </define>
- <define name="CT_Path2D">
- <choice>
- <element name="close">
- <ref name="CT_Path2DClose"/>
- </element>
- <element name="moveTo">
- <ref name="CT_Path2DMoveTo"/>
- </element>
- <element name="lnTo">
- <ref name="CT_Path2DLineTo"/>
- </element>
- <element name="arcTo">
- <ref name="CT_Path2DArcTo"/>
- </element>
- <element name="quadBezTo">
- <ref name="CT_Path2DQuadBezierTo"/>
- </element>
- <element name="cubicBezTo">
- <ref name="CT_Path2DCubicBezierTo"/>
- </element>
- </choice>
- <attribute name="w">
- <ref name="ST_PositiveCoordinate"/>
- </attribute>
- <attribute name="h">
- <ref name="ST_PositiveCoordinate"/>
- </attribute>
- <attribute name="fill">
- <ref name="ST_PathFillMode"/>
- </attribute>
- <attribute name="stroke">
- <data type="boolean"/>
- </attribute>
- <attribute name="extrusionOk">
- <data type="boolean"/>
- </attribute>
- </define>
- <define name="CT_Path2DList">
- <element name="path">
- <ref name="CT_Path2D"/>
- </element>
- </define>
- <define name="CT_PresetGeometry2D">
- <element name="avLst">
- <ref name="CT_GeomGuideList"/>
- </element>
- <attribute name="prst">
- <ref name="ST_ShapeType"/>
- </attribute>
- </define>
- <define name="CT_PresetTextShape">
- <element name="avLst">
- <ref name="CT_GeomGuideList"/>
- </element>
- <attribute name="prst">
- <ref name="ST_TextShapeType"/>
- </attribute>
- </define>
- <define name="CT_CustomGeometry2D">
- <element name="avLst">
- <ref name="CT_GeomGuideList"/>
- </element>
- <element name="gdLst">
- <ref name="CT_GeomGuideList"/>
- </element>
- <element name="ahLst">
- <ref name="CT_AdjustHandleList"/>
- </element>
- <element name="cxnLst">
- <ref name="CT_ConnectionSiteList"/>
- </element>
- <element name="rect">
- <ref name="CT_GeomRect"/>
- </element>
- <element name="pathLst">
- <ref name="CT_Path2DList"/>
- </element>
- </define>
- <define name="EG_Geometry">
- <choice>
- <element name="custGeom">
- <ref name="CT_CustomGeometry2D"/>
- </element>
- <element name="prstGeom">
- <ref name="CT_PresetGeometry2D"/>
- </element>
- </choice>
- </define>
- <define name="EG_TextGeometry">
- <choice>
- <element name="custGeom">
- <ref name="CT_CustomGeometry2D"/>
- </element>
- <element name="prstTxWarp">
- <ref name="CT_PresetTextShape"/>
- </element>
- </choice>
- </define>
- </grammar>
- <resource name="ST_ShapeType" resource="List">
- <value tokenid="ooxml:Value_ST_ShapeType_line">line</value>
- <value tokenid="ooxml:Value_ST_ShapeType_lineInv">lineInv</value>
- <value tokenid="ooxml:Value_ST_ShapeType_triangle">triangle</value>
- <value tokenid="ooxml:Value_ST_ShapeType_rtTriangle">rtTriangle</value>
- <value tokenid="ooxml:Value_ST_ShapeType_rect">rect</value>
- <value tokenid="ooxml:Value_ST_ShapeType_diamond">diamond</value>
- <value tokenid="ooxml:Value_ST_ShapeType_parallelogram">parallelogram</value>
- <value tokenid="ooxml:Value_ST_ShapeType_trapezoid">trapezoid</value>
- <value tokenid="ooxml:Value_ST_ShapeType_nonIsoscelesTrapezoid">nonIsoscelesTrapezoid</value>
- <value tokenid="ooxml:Value_ST_ShapeType_pentagon">pentagon</value>
- <value tokenid="ooxml:Value_ST_ShapeType_hexagon">hexagon</value>
- <value tokenid="ooxml:Value_ST_ShapeType_heptagon">heptagon</value>
- <value tokenid="ooxml:Value_ST_ShapeType_octagon">octagon</value>
- <value tokenid="ooxml:Value_ST_ShapeType_decagon">decagon</value>
- <value tokenid="ooxml:Value_ST_ShapeType_dodecagon">dodecagon</value>
- <value tokenid="ooxml:Value_ST_ShapeType_star4">star4</value>
- <value tokenid="ooxml:Value_ST_ShapeType_star5">star5</value>
- <value tokenid="ooxml:Value_ST_ShapeType_star6">star6</value>
- <value tokenid="ooxml:Value_ST_ShapeType_star7">star7</value>
- <value tokenid="ooxml:Value_ST_ShapeType_star8">star8</value>
- <value tokenid="ooxml:Value_ST_ShapeType_star10">star10</value>
- <value tokenid="ooxml:Value_ST_ShapeType_star12">star12</value>
- <value tokenid="ooxml:Value_ST_ShapeType_star16">star16</value>
- <value tokenid="ooxml:Value_ST_ShapeType_star24">star24</value>
- <value tokenid="ooxml:Value_ST_ShapeType_star32">star32</value>
- <value tokenid="ooxml:Value_ST_ShapeType_roundRect">roundRect</value>
- <value tokenid="ooxml:Value_ST_ShapeType_round1Rect">round1Rect</value>
- <value tokenid="ooxml:Value_ST_ShapeType_round2SameRect">round2SameRect</value>
- <value tokenid="ooxml:Value_ST_ShapeType_round2DiagRect">round2DiagRect</value>
- <value tokenid="ooxml:Value_ST_ShapeType_snipRoundRect">snipRoundRect</value>
- <value tokenid="ooxml:Value_ST_ShapeType_snip1Rect">snip1Rect</value>
- <value tokenid="ooxml:Value_ST_ShapeType_snip2SameRect">snip2SameRect</value>
- <value tokenid="ooxml:Value_ST_ShapeType_snip2DiagRect">snip2DiagRect</value>
- <value tokenid="ooxml:Value_ST_ShapeType_plaque">plaque</value>
- <value tokenid="ooxml:Value_ST_ShapeType_ellipse">ellipse</value>
- <value tokenid="ooxml:Value_ST_ShapeType_teardrop">teardrop</value>
- <value tokenid="ooxml:Value_ST_ShapeType_homePlate">homePlate</value>
- <value tokenid="ooxml:Value_ST_ShapeType_chevron">chevron</value>
- <value tokenid="ooxml:Value_ST_ShapeType_pieWedge">pieWedge</value>
- <value tokenid="ooxml:Value_ST_ShapeType_pie">pie</value>
- <value tokenid="ooxml:Value_ST_ShapeType_blockArc">blockArc</value>
- <value tokenid="ooxml:Value_ST_ShapeType_donut">donut</value>
- <value tokenid="ooxml:Value_ST_ShapeType_noSmoking">noSmoking</value>
- <value tokenid="ooxml:Value_ST_ShapeType_rightArrow">rightArrow</value>
- <value tokenid="ooxml:Value_ST_ShapeType_leftArrow">leftArrow</value>
- <value tokenid="ooxml:Value_ST_ShapeType_upArrow">upArrow</value>
- <value tokenid="ooxml:Value_ST_ShapeType_downArrow">downArrow</value>
- <value tokenid="ooxml:Value_ST_ShapeType_stripedRightArrow">stripedRightArrow</value>
- <value tokenid="ooxml:Value_ST_ShapeType_notchedRightArrow">notchedRightArrow</value>
- <value tokenid="ooxml:Value_ST_ShapeType_bentUpArrow">bentUpArrow</value>
- <value tokenid="ooxml:Value_ST_ShapeType_leftRightArrow">leftRightArrow</value>
- <value tokenid="ooxml:Value_ST_ShapeType_upDownArrow">upDownArrow</value>
- <value tokenid="ooxml:Value_ST_ShapeType_leftUpArrow">leftUpArrow</value>
- <value tokenid="ooxml:Value_ST_ShapeType_leftRightUpArrow">leftRightUpArrow</value>
- <value tokenid="ooxml:Value_ST_ShapeType_quadArrow">quadArrow</value>
- <value tokenid="ooxml:Value_ST_ShapeType_leftArrowCallout">leftArrowCallout</value>
- <value tokenid="ooxml:Value_ST_ShapeType_rightArrowCallout">rightArrowCallout</value>
- <value tokenid="ooxml:Value_ST_ShapeType_upArrowCallout">upArrowCallout</value>
- <value tokenid="ooxml:Value_ST_ShapeType_downArrowCallout">downArrowCallout</value>
- <value tokenid="ooxml:Value_ST_ShapeType_leftRightArrowCallout">leftRightArrowCallout</value>
- <value tokenid="ooxml:Value_ST_ShapeType_upDownArrowCallout">upDownArrowCallout</value>
- <value tokenid="ooxml:Value_ST_ShapeType_quadArrowCallout">quadArrowCallout</value>
- <value tokenid="ooxml:Value_ST_ShapeType_bentArrow">bentArrow</value>
- <value tokenid="ooxml:Value_ST_ShapeType_uturnArrow">uturnArrow</value>
- <value tokenid="ooxml:Value_ST_ShapeType_circularArrow">circularArrow</value>
- <value tokenid="ooxml:Value_ST_ShapeType_leftCircularArrow">leftCircularArrow</value>
- <value tokenid="ooxml:Value_ST_ShapeType_leftRightCircularArrow">leftRightCircularArrow</value>
- <value tokenid="ooxml:Value_ST_ShapeType_curvedRightArrow">curvedRightArrow</value>
- <value tokenid="ooxml:Value_ST_ShapeType_curvedLeftArrow">curvedLeftArrow</value>
- <value tokenid="ooxml:Value_ST_ShapeType_curvedUpArrow">curvedUpArrow</value>
- <value tokenid="ooxml:Value_ST_ShapeType_curvedDownArrow">curvedDownArrow</value>
- <value tokenid="ooxml:Value_ST_ShapeType_swooshArrow">swooshArrow</value>
- <value tokenid="ooxml:Value_ST_ShapeType_cube">cube</value>
- <value tokenid="ooxml:Value_ST_ShapeType_can">can</value>
- <value tokenid="ooxml:Value_ST_ShapeType_lightningBolt">lightningBolt</value>
- <value tokenid="ooxml:Value_ST_ShapeType_heart">heart</value>
- <value tokenid="ooxml:Value_ST_ShapeType_sun">sun</value>
- <value tokenid="ooxml:Value_ST_ShapeType_moon">moon</value>
- <value tokenid="ooxml:Value_ST_ShapeType_smileyFace">smileyFace</value>
- <value tokenid="ooxml:Value_ST_ShapeType_irregularSeal1">irregularSeal1</value>
- <value tokenid="ooxml:Value_ST_ShapeType_irregularSeal2">irregularSeal2</value>
- <value tokenid="ooxml:Value_ST_ShapeType_foldedCorner">foldedCorner</value>
- <value tokenid="ooxml:Value_ST_ShapeType_bevel">bevel</value>
- <value tokenid="ooxml:Value_ST_ShapeType_frame">frame</value>
- <value tokenid="ooxml:Value_ST_ShapeType_halfFrame">halfFrame</value>
- <value tokenid="ooxml:Value_ST_ShapeType_corner">corner</value>
- <value tokenid="ooxml:Value_ST_ShapeType_diagStripe">diagStripe</value>
- <value tokenid="ooxml:Value_ST_ShapeType_chord">chord</value>
- <value tokenid="ooxml:Value_ST_ShapeType_arc">arc</value>
- <value tokenid="ooxml:Value_ST_ShapeType_leftBracket">leftBracket</value>
- <value tokenid="ooxml:Value_ST_ShapeType_rightBracket">rightBracket</value>
- <value tokenid="ooxml:Value_ST_ShapeType_leftBrace">leftBrace</value>
- <value tokenid="ooxml:Value_ST_ShapeType_rightBrace">rightBrace</value>
- <value tokenid="ooxml:Value_ST_ShapeType_bracketPair">bracketPair</value>
- <value tokenid="ooxml:Value_ST_ShapeType_bracePair">bracePair</value>
- <value tokenid="ooxml:Value_ST_ShapeType_straightConnector1">straightConnector1</value>
- <value tokenid="ooxml:Value_ST_ShapeType_bentConnector2">bentConnector2</value>
- <value tokenid="ooxml:Value_ST_ShapeType_bentConnector3">bentConnector3</value>
- <value tokenid="ooxml:Value_ST_ShapeType_bentConnector4">bentConnector4</value>
- <value tokenid="ooxml:Value_ST_ShapeType_bentConnector5">bentConnector5</value>
- <value tokenid="ooxml:Value_ST_ShapeType_curvedConnector2">curvedConnector2</value>
- <value tokenid="ooxml:Value_ST_ShapeType_curvedConnector3">curvedConnector3</value>
- <value tokenid="ooxml:Value_ST_ShapeType_curvedConnector4">curvedConnector4</value>
- <value tokenid="ooxml:Value_ST_ShapeType_curvedConnector5">curvedConnector5</value>
- <value tokenid="ooxml:Value_ST_ShapeType_callout1">callout1</value>
- <value tokenid="ooxml:Value_ST_ShapeType_callout2">callout2</value>
- <value tokenid="ooxml:Value_ST_ShapeType_callout3">callout3</value>
- <value tokenid="ooxml:Value_ST_ShapeType_accentCallout1">accentCallout1</value>
- <value tokenid="ooxml:Value_ST_ShapeType_accentCallout2">accentCallout2</value>
- <value tokenid="ooxml:Value_ST_ShapeType_accentCallout3">accentCallout3</value>
- <value tokenid="ooxml:Value_ST_ShapeType_borderCallout1">borderCallout1</value>
- <value tokenid="ooxml:Value_ST_ShapeType_borderCallout2">borderCallout2</value>
- <value tokenid="ooxml:Value_ST_ShapeType_borderCallout3">borderCallout3</value>
- <value tokenid="ooxml:Value_ST_ShapeType_accentBorderCallout1">accentBorderCallout1</value>
- <value tokenid="ooxml:Value_ST_ShapeType_accentBorderCallout2">accentBorderCallout2</value>
- <value tokenid="ooxml:Value_ST_ShapeType_accentBorderCallout3">accentBorderCallout3</value>
- <value tokenid="ooxml:Value_ST_ShapeType_wedgeRectCallout">wedgeRectCallout</value>
- <value tokenid="ooxml:Value_ST_ShapeType_wedgeRoundRectCallout">wedgeRoundRectCallout</value>
- <value tokenid="ooxml:Value_ST_ShapeType_wedgeEllipseCallout">wedgeEllipseCallout</value>
- <value tokenid="ooxml:Value_ST_ShapeType_cloudCallout">cloudCallout</value>
- <value tokenid="ooxml:Value_ST_ShapeType_cloud">cloud</value>
- <value tokenid="ooxml:Value_ST_ShapeType_ribbon">ribbon</value>
- <value tokenid="ooxml:Value_ST_ShapeType_ribbon2">ribbon2</value>
- <value tokenid="ooxml:Value_ST_ShapeType_ellipseRibbon">ellipseRibbon</value>
- <value tokenid="ooxml:Value_ST_ShapeType_ellipseRibbon2">ellipseRibbon2</value>
- <value tokenid="ooxml:Value_ST_ShapeType_leftRightRibbon">leftRightRibbon</value>
- <value tokenid="ooxml:Value_ST_ShapeType_verticalScroll">verticalScroll</value>
- <value tokenid="ooxml:Value_ST_ShapeType_horizontalScroll">horizontalScroll</value>
- <value tokenid="ooxml:Value_ST_ShapeType_wave">wave</value>
- <value tokenid="ooxml:Value_ST_ShapeType_doubleWave">doubleWave</value>
- <value tokenid="ooxml:Value_ST_ShapeType_plus">plus</value>
- <value tokenid="ooxml:Value_ST_ShapeType_flowChartProcess">flowChartProcess</value>
- <value tokenid="ooxml:Value_ST_ShapeType_flowChartDecision">flowChartDecision</value>
- <value tokenid="ooxml:Value_ST_ShapeType_flowChartInputOutput">flowChartInputOutput</value>
- <value tokenid="ooxml:Value_ST_ShapeType_flowChartPredefinedProcess">flowChartPredefinedProcess</value>
- <value tokenid="ooxml:Value_ST_ShapeType_flowChartInternalStorage">flowChartInternalStorage</value>
- <value tokenid="ooxml:Value_ST_ShapeType_flowChartDocument">flowChartDocument</value>
- <value tokenid="ooxml:Value_ST_ShapeType_flowChartMultidocument">flowChartMultidocument</value>
- <value tokenid="ooxml:Value_ST_ShapeType_flowChartTerminator">flowChartTerminator</value>
- <value tokenid="ooxml:Value_ST_ShapeType_flowChartPreparation">flowChartPreparation</value>
- <value tokenid="ooxml:Value_ST_ShapeType_flowChartManualInput">flowChartManualInput</value>
- <value tokenid="ooxml:Value_ST_ShapeType_flowChartManualOperation">flowChartManualOperation</value>
- <value tokenid="ooxml:Value_ST_ShapeType_flowChartConnector">flowChartConnector</value>
- <value tokenid="ooxml:Value_ST_ShapeType_flowChartPunchedCard">flowChartPunchedCard</value>
- <value tokenid="ooxml:Value_ST_ShapeType_flowChartPunchedTape">flowChartPunchedTape</value>
- <value tokenid="ooxml:Value_ST_ShapeType_flowChartSummingJunction">flowChartSummingJunction</value>
- <value tokenid="ooxml:Value_ST_ShapeType_flowChartOr">flowChartOr</value>
- <value tokenid="ooxml:Value_ST_ShapeType_flowChartCollate">flowChartCollate</value>
- <value tokenid="ooxml:Value_ST_ShapeType_flowChartSort">flowChartSort</value>
- <value tokenid="ooxml:Value_ST_ShapeType_flowChartExtract">flowChartExtract</value>
- <value tokenid="ooxml:Value_ST_ShapeType_flowChartMerge">flowChartMerge</value>
- <value tokenid="ooxml:Value_ST_ShapeType_flowChartOfflineStorage">flowChartOfflineStorage</value>
- <value tokenid="ooxml:Value_ST_ShapeType_flowChartOnlineStorage">flowChartOnlineStorage</value>
- <value tokenid="ooxml:Value_ST_ShapeType_flowChartMagneticTape">flowChartMagneticTape</value>
- <value tokenid="ooxml:Value_ST_ShapeType_flowChartMagneticDisk">flowChartMagneticDisk</value>
- <value tokenid="ooxml:Value_ST_ShapeType_flowChartMagneticDrum">flowChartMagneticDrum</value>
- <value tokenid="ooxml:Value_ST_ShapeType_flowChartDisplay">flowChartDisplay</value>
- <value tokenid="ooxml:Value_ST_ShapeType_flowChartDelay">flowChartDelay</value>
- <value tokenid="ooxml:Value_ST_ShapeType_flowChartAlternateProcess">flowChartAlternateProcess</value>
- <value tokenid="ooxml:Value_ST_ShapeType_flowChartOffpageConnector">flowChartOffpageConnector</value>
- <value tokenid="ooxml:Value_ST_ShapeType_actionButtonBlank">actionButtonBlank</value>
- <value tokenid="ooxml:Value_ST_ShapeType_actionButtonHome">actionButtonHome</value>
- <value tokenid="ooxml:Value_ST_ShapeType_actionButtonHelp">actionButtonHelp</value>
- <value tokenid="ooxml:Value_ST_ShapeType_actionButtonInformation">actionButtonInformation</value>
- <value tokenid="ooxml:Value_ST_ShapeType_actionButtonForwardNext">actionButtonForwardNext</value>
- <value tokenid="ooxml:Value_ST_ShapeType_actionButtonBackPrevious">actionButtonBackPrevious</value>
- <value tokenid="ooxml:Value_ST_ShapeType_actionButtonEnd">actionButtonEnd</value>
- <value tokenid="ooxml:Value_ST_ShapeType_actionButtonBeginning">actionButtonBeginning</value>
- <value tokenid="ooxml:Value_ST_ShapeType_actionButtonReturn">actionButtonReturn</value>
- <value tokenid="ooxml:Value_ST_ShapeType_actionButtonDocument">actionButtonDocument</value>
- <value tokenid="ooxml:Value_ST_ShapeType_actionButtonSound">actionButtonSound</value>
- <value tokenid="ooxml:Value_ST_ShapeType_actionButtonMovie">actionButtonMovie</value>
- <value tokenid="ooxml:Value_ST_ShapeType_gear6">gear6</value>
- <value tokenid="ooxml:Value_ST_ShapeType_gear9">gear9</value>
- <value tokenid="ooxml:Value_ST_ShapeType_funnel">funnel</value>
- <value tokenid="ooxml:Value_ST_ShapeType_mathPlus">mathPlus</value>
- <value tokenid="ooxml:Value_ST_ShapeType_mathMinus">mathMinus</value>
- <value tokenid="ooxml:Value_ST_ShapeType_mathMultiply">mathMultiply</value>
- <value tokenid="ooxml:Value_ST_ShapeType_mathDivide">mathDivide</value>
- <value tokenid="ooxml:Value_ST_ShapeType_mathEqual">mathEqual</value>
- <value tokenid="ooxml:Value_ST_ShapeType_mathNotEqual">mathNotEqual</value>
- <value tokenid="ooxml:Value_ST_ShapeType_cornerTabs">cornerTabs</value>
- <value tokenid="ooxml:Value_ST_ShapeType_squareTabs">squareTabs</value>
- <value tokenid="ooxml:Value_ST_ShapeType_plaqueTabs">plaqueTabs</value>
- <value tokenid="ooxml:Value_ST_ShapeType_chartX">chartX</value>
- <value tokenid="ooxml:Value_ST_ShapeType_chartStar">chartStar</value>
- <value tokenid="ooxml:Value_ST_ShapeType_chartPlus">chartPlus</value>
- </resource>
- <resource name="ST_TextShapeType" resource="List">
- <value tokenid="ooxml:Value_drawingml_ST_TextShapeType_textNoShape">textNoShape</value>
- <value tokenid="ooxml:Value_drawingml_ST_TextShapeType_textPlain">textPlain</value>
- <value tokenid="ooxml:Value_drawingml_ST_TextShapeType_textStop">textStop</value>
- <value tokenid="ooxml:Value_drawingml_ST_TextShapeType_textTriangle">textTriangle</value>
- <value tokenid="ooxml:Value_drawingml_ST_TextShapeType_textTriangleInverted">textTriangleInverted</value>
- <value tokenid="ooxml:Value_drawingml_ST_TextShapeType_textChevron">textChevron</value>
- <value tokenid="ooxml:Value_drawingml_ST_TextShapeType_textChevronInverted">textChevronInverted</value>
- <value tokenid="ooxml:Value_drawingml_ST_TextShapeType_textRingInside">textRingInside</value>
- <value tokenid="ooxml:Value_drawingml_ST_TextShapeType_textRingOutside">textRingOutside</value>
- <value tokenid="ooxml:Value_drawingml_ST_TextShapeType_textArchUp">textArchUp</value>
- <value tokenid="ooxml:Value_drawingml_ST_TextShapeType_textArchDown">textArchDown</value>
- <value tokenid="ooxml:Value_drawingml_ST_TextShapeType_textCircle">textCircle</value>
- <value tokenid="ooxml:Value_drawingml_ST_TextShapeType_textButton">textButton</value>
- <value tokenid="ooxml:Value_drawingml_ST_TextShapeType_textArchUpPour">textArchUpPour</value>
- <value tokenid="ooxml:Value_drawingml_ST_TextShapeType_textArchDownPour">textArchDownPour</value>
- <value tokenid="ooxml:Value_drawingml_ST_TextShapeType_textCirclePour">textCirclePour</value>
- <value tokenid="ooxml:Value_drawingml_ST_TextShapeType_textButtonPour">textButtonPour</value>
- <value tokenid="ooxml:Value_drawingml_ST_TextShapeType_textCurveUp">textCurveUp</value>
- <value tokenid="ooxml:Value_drawingml_ST_TextShapeType_textCurveDown">textCurveDown</value>
- <value tokenid="ooxml:Value_drawingml_ST_TextShapeType_textCanUp">textCanUp</value>
- <value tokenid="ooxml:Value_drawingml_ST_TextShapeType_textCanDown">textCanDown</value>
- <value tokenid="ooxml:Value_drawingml_ST_TextShapeType_textWave1">textWave1</value>
- <value tokenid="ooxml:Value_drawingml_ST_TextShapeType_textWave2">textWave2</value>
- <value tokenid="ooxml:Value_drawingml_ST_TextShapeType_textDoubleWave1">textDoubleWave1</value>
- <value tokenid="ooxml:Value_drawingml_ST_TextShapeType_textWave4">textWave4</value>
- <value tokenid="ooxml:Value_drawingml_ST_TextShapeType_textInflate">textInflate</value>
- <value tokenid="ooxml:Value_drawingml_ST_TextShapeType_textDeflate">textDeflate</value>
- <value tokenid="ooxml:Value_drawingml_ST_TextShapeType_textInflateBottom">textInflateBottom</value>
- <value tokenid="ooxml:Value_drawingml_ST_TextShapeType_textDeflateBottom">textDeflateBottom</value>
- <value tokenid="ooxml:Value_drawingml_ST_TextShapeType_textInflateTop">textInflateTop</value>
- <value tokenid="ooxml:Value_drawingml_ST_TextShapeType_textDeflateTop">textDeflateTop</value>
- <value tokenid="ooxml:Value_drawingml_ST_TextShapeType_textDeflateInflate">textDeflateInflate</value>
- <value tokenid="ooxml:Value_drawingml_ST_TextShapeType_textDeflateInflateDeflate">textDeflateInflateDeflate</value>
- <value tokenid="ooxml:Value_drawingml_ST_TextShapeType_textFadeRight">textFadeRight</value>
- <value tokenid="ooxml:Value_drawingml_ST_TextShapeType_textFadeLeft">textFadeLeft</value>
- <value tokenid="ooxml:Value_drawingml_ST_TextShapeType_textFadeUp">textFadeUp</value>
- <value tokenid="ooxml:Value_drawingml_ST_TextShapeType_textFadeDown">textFadeDown</value>
- <value tokenid="ooxml:Value_drawingml_ST_TextShapeType_textSlantUp">textSlantUp</value>
- <value tokenid="ooxml:Value_drawingml_ST_TextShapeType_textSlantDown">textSlantDown</value>
- <value tokenid="ooxml:Value_drawingml_ST_TextShapeType_textCascadeUp">textCascadeUp</value>
- <value tokenid="ooxml:Value_drawingml_ST_TextShapeType_textCascadeDown">textCascadeDown</value>
- </resource>
- <resource name="ST_GeomGuideName" resource="String"/>
- <resource name="ST_GeomGuideFormula" resource="String"/>
- <resource name="CT_GeomGuideList" resource="Properties">
- <element name="gd" tokenid="ooxml:CT_GeomGuideList_gd"/>
- </resource>
- <resource name="ST_PathFillMode" resource="List">
- <value tokenid="ooxml:Value_drawingml_ST_PathFillMode_none">none</value>
- <value tokenid="ooxml:Value_drawingml_ST_PathFillMode_norm">norm</value>
- <value tokenid="ooxml:Value_drawingml_ST_PathFillMode_lighten">lighten</value>
- <value tokenid="ooxml:Value_drawingml_ST_PathFillMode_lightenLess">lightenLess</value>
- <value tokenid="ooxml:Value_drawingml_ST_PathFillMode_darken">darken</value>
- <value tokenid="ooxml:Value_drawingml_ST_PathFillMode_darkenLess">darkenLess</value>
- </resource>
- <resource name="CT_PresetGeometry2D" resource="Properties">
- <element name="avLst" tokenid="ooxml:CT_PresetGeometry2D_avLst"/>
- <attribute name="prst" tokenid="ooxml:CT_PresetGeometry2D_prst"/>
- </resource>
- <resource name="CT_CustomGeometry2D" resource="Properties">
- <element name="avLst" tokenid="ooxml:CT_CustomGeometry2D_avLst"/>
- <element name="gdLst" tokenid="ooxml:CT_CustomGeometry2D_gdLst"/>
- <element name="ahLst" tokenid="ooxml:CT_CustomGeometry2D_ahLst"/>
- <element name="cxnLst" tokenid="ooxml:CT_CustomGeometry2D_cxnLst"/>
- <element name="rect" tokenid="ooxml:CT_CustomGeometry2D_rect"/>
- <element name="pathLst" tokenid="ooxml:CT_CustomGeometry2D_pathLst"/>
- </resource>
- <resource name="EG_Geometry" resource="Properties">
- <element name="custGeom" tokenid="ooxml:EG_Geometry_custGeom"/>
- <element name="prstGeom" tokenid="ooxml:EG_Geometry_prstGeom"/>
- </resource>
- </namespace>
- <namespace name="dml-wordprocessingDrawing">
- <start name="inline"/>
- <start name="anchor"/>
- <grammar xmlns="http://relaxng.org/ns/structure/1.0" ns="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing">
- <include href="dml-graphicalObject"/>
- <include href="dml-documentProperties"/>
- <!-- start = inline | anchor -->
- <define name="ST_Coordinate">
- <data type="long"/>
- </define>
- <define name="CT_EffectExtent">
- <attribute name="l">
- <ref name="ST_Coordinate"/>
- </attribute>
- <attribute name="t">
- <ref name="ST_Coordinate"/>
- </attribute>
- <attribute name="r">
- <ref name="ST_Coordinate"/>
- </attribute>
- <attribute name="b">
- <ref name="ST_Coordinate"/>
- </attribute>
- </define>
- <define name="ST_WrapDistance">
- <data type="unsignedInt"/>
- </define>
- <define name="ST_EditId">
- <data type="hexBinary"/>
- </define>
- <define name="CT_Inline">
- <element name="extent">
- <ref name="CT_PositiveSize2D"/>
- </element>
- <element name="effectExtent">
- <ref name="CT_EffectExtent"/>
- </element>
- <element name="docPr">
- <ref name="CT_NonVisualDrawingProps"/>
- </element>
- <element name="cNvGraphicFramePr">
- <ref name="CT_NonVisualGraphicFrameProperties"/>
- </element>
- <element name="a:graphic">
- <ref name="BUILT_IN_ANY_TYPE"/>
- </element>
- <element name="wp14:sizeRelH">
- <ref name="BUILT_IN_ANY_TYPE"/>
- </element>
- <element name="wp14:sizeRelV">
- <ref name="BUILT_IN_ANY_TYPE"/>
- </element>
- <attribute name="distT">
- <ref name="ST_WrapDistance"/>
- </attribute>
- <attribute name="distB">
- <ref name="ST_WrapDistance"/>
- </attribute>
- <attribute name="distL">
- <ref name="ST_WrapDistance"/>
- </attribute>
- <attribute name="distR">
- <ref name="ST_WrapDistance"/>
- </attribute>
- <attribute name="wp14:anchorId">
- <ref name="ST_EditId"/>
- </attribute>
- </define>
- <define name="ST_WrapText">
- <choice>
- <!-- Both Sides -->
- <value>bothSides</value>
- <!-- Left Side Only -->
- <value>left</value>
- <!-- Right Side Only -->
- <value>right</value>
- <!-- Largest Side Only -->
- <value>largest</value>
- </choice>
- </define>
- <define name="CT_WrapPath">
- <element name="start">
- <ref name="CT_Point2D"/>
- </element>
- <element name="lineTo">
- <ref name="CT_Point2D"/>
- </element>
- <attribute name="edited">
- <data type="boolean"/>
- </attribute>
- </define>
- <define name="CT_WrapNone">
- </define>
- <define name="CT_WrapSquare">
- <element name="effectExtent">
- <ref name="CT_EffectExtent"/>
- </element>
- <attribute name="wrapText">
- <ref name="ST_WrapText"/>
- </attribute>
- <attribute name="distT">
- <ref name="ST_WrapDistance"/>
- </attribute>
- <attribute name="distB">
- <ref name="ST_WrapDistance"/>
- </attribute>
- <attribute name="distL">
- <ref name="ST_WrapDistance"/>
- </attribute>
- <attribute name="distR">
- <ref name="ST_WrapDistance"/>
- </attribute>
- </define>
- <define name="CT_WrapTight">
- <element name="wrapPolygon">
- <ref name="CT_WrapPath"/>
- </element>
- <attribute name="wrapText">
- <ref name="ST_WrapText"/>
- </attribute>
- <attribute name="distL">
- <ref name="ST_WrapDistance"/>
- </attribute>
- <attribute name="distR">
- <ref name="ST_WrapDistance"/>
- </attribute>
- </define>
- <define name="CT_WrapThrough">
- <element name="wrapPolygon">
- <ref name="CT_WrapPath"/>
- </element>
- <attribute name="wrapText">
- <ref name="ST_WrapText"/>
- </attribute>
- <attribute name="distL">
- <ref name="ST_WrapDistance"/>
- </attribute>
- <attribute name="distR">
- <ref name="ST_WrapDistance"/>
- </attribute>
- </define>
- <define name="CT_WrapTopBottom">
- <element name="effectExtent">
- <ref name="CT_EffectExtent"/>
- </element>
- <attribute name="distT">
- <ref name="ST_WrapDistance"/>
- </attribute>
- <attribute name="distB">
- <ref name="ST_WrapDistance"/>
- </attribute>
- </define>
- <define name="EG_WrapType">
- <choice>
- <element name="wrapNone">
- <ref name="CT_WrapNone"/>
- </element>
- <element name="wrapSquare">
- <ref name="CT_WrapSquare"/>
- </element>
- <element name="wrapTight">
- <ref name="CT_WrapTight"/>
- </element>
- <element name="wrapThrough">
- <ref name="CT_WrapThrough"/>
- </element>
- <element name="wrapTopAndBottom">
- <ref name="CT_WrapTopBottom"/>
- </element>
- </choice>
- </define>
- <define name="ST_PositionOffset">
- <data type="int"/>
- </define>
- <define name="ST_AlignH">
- <choice>
- <!-- Left Alignment -->
- <value>left</value>
- <!-- Right Alignment -->
- <value>right</value>
- <!-- Center Alignment -->
- <value>center</value>
- <!-- Inside -->
- <value>inside</value>
- <!-- Outside -->
- <value>outside</value>
- </choice>
- </define>
- <define name="ST_RelFromH">
- <choice>
- <!-- Page Margin -->
- <value>margin</value>
- <!-- Page Edge -->
- <value>page</value>
- <!-- Column -->
- <value>column</value>
- <!-- Character -->
- <value>character</value>
- <!-- Left Margin -->
- <value>leftMargin</value>
- <!-- Right Margin -->
- <value>rightMargin</value>
- <!-- Inside Margin -->
- <value>insideMargin</value>
- <!-- Outside Margin -->
- <value>outsideMargin</value>
- </choice>
- </define>
- <define name="CT_PosH">
- <choice>
- <element name="align">
- <ref name="ST_AlignH"/>
- </element>
- <element name="posOffset">
- <ref name="ST_PositionOffset"/>
- </element>
- </choice>
- <attribute name="relativeFrom">
- <ref name="ST_RelFromH"/>
- </attribute>
- </define>
- <define name="ST_AlignV">
- <choice>
- <!-- Top -->
- <value>top</value>
- <!-- Bottom -->
- <value>bottom</value>
- <!-- Center Alignment -->
- <value>center</value>
- <!-- Inside -->
- <value>inside</value>
- <!-- Outside -->
- <value>outside</value>
- </choice>
- </define>
- <define name="ST_RelFromV">
- <choice>
- <!-- Page Margin -->
- <value>margin</value>
- <!-- Page Edge -->
- <value>page</value>
- <!-- Paragraph -->
- <value>paragraph</value>
- <!-- Line -->
- <value>line</value>
- <!-- Top Margin -->
- <value>topMargin</value>
- <!-- Bottom Margin -->
- <value>bottomMargin</value>
- <!-- Inside Margin -->
- <value>insideMargin</value>
- <!-- Outside Margin -->
- <value>outsideMargin</value>
- </choice>
- </define>
- <define name="CT_PosV">
- <choice>
- <element name="align">
- <ref name="ST_AlignV"/>
- </element>
- <element name="posOffset">
- <ref name="ST_PositionOffset"/>
- </element>
- </choice>
- <attribute name="relativeFrom">
- <ref name="ST_RelFromV"/>
- </attribute>
- </define>
- <define name="CT_Anchor">
- <element name="simplePos">
- <ref name="CT_Point2D"/>
- </element>
- <element name="positionH">
- <ref name="CT_PosH"/>
- </element>
- <element name="positionV">
- <ref name="CT_PosV"/>
- </element>
- <element name="extent">
- <ref name="CT_PositiveSize2D"/>
- </element>
- <element name="effectExtent">
- <ref name="CT_EffectExtent"/>
- </element>
- <ref name="EG_WrapType"/>
- <element name="docPr">
- <ref name="CT_NonVisualDrawingProps"/>
- </element>
- <element name="cNvGraphicFramePr">
- <ref name="CT_NonVisualGraphicFrameProperties"/>
- </element>
- <element name="a:graphic">
- <ref name="BUILT_IN_ANY_TYPE"/>
- </element>
- <element name="wp14:sizeRelH">
- <ref name="BUILT_IN_ANY_TYPE"/>
- </element>
- <element name="wp14:sizeRelV">
- <ref name="BUILT_IN_ANY_TYPE"/>
- </element>
- <attribute name="distT">
- <ref name="ST_WrapDistance"/>
- </attribute>
- <attribute name="distB">
- <ref name="ST_WrapDistance"/>
- </attribute>
- <attribute name="distL">
- <ref name="ST_WrapDistance"/>
- </attribute>
- <attribute name="distR">
- <ref name="ST_WrapDistance"/>
- </attribute>
- <attribute name="simplePos">
- <data type="boolean"/>
- </attribute>
- <attribute name="relativeHeight">
- <data type="unsignedInt"/>
- </attribute>
- <attribute name="behindDoc">
- <data type="boolean"/>
- </attribute>
- <attribute name="locked">
- <data type="boolean"/>
- </attribute>
- <attribute name="layoutInCell">
- <data type="boolean"/>
- </attribute>
- <attribute name="hidden">
- <data type="boolean"/>
- </attribute>
- <attribute name="allowOverlap">
- <data type="boolean"/>
- </attribute>
- <attribute name="wp14:anchorId">
- <ref name="ST_EditId"/>
- </attribute>
- </define>
- <define name="inline">
- <element name="inline">
- <ref name="CT_Inline"/>
- </element>
- </define>
- <define name="anchor">
- <element name="anchor">
- <ref name="CT_Anchor"/>
- </element>
- </define>
- </grammar>
- <resource name="ST_Coordinate" resource="Integer"/>
- <resource name="CT_EffectExtent" resource="Properties">
- <attribute name="l" tokenid="ooxml:CT_EffectExtent_l"/>
- <attribute name="t" tokenid="ooxml:CT_EffectExtent_t"/>
- <attribute name="r" tokenid="ooxml:CT_EffectExtent_r"/>
- <attribute name="b" tokenid="ooxml:CT_EffectExtent_b"/>
- </resource>
- <resource name="ST_WrapDistance" resource="Integer"/>
- <resource name="CT_Inline" resource="Properties">
- <element name="extent" tokenid="ooxml:CT_Inline_extent"/>
- <element name="effectExtent" tokenid="ooxml:CT_Inline_effectExtent"/>
- <element name="docPr" tokenid="ooxml:CT_Inline_docPr"/>
- <element name="cNvGraphicFramePr" tokenid="ooxml:CT_Inline_cNvGraphicFramePr"/>
- <element name="a:graphic" tokenid="ooxml:CT_Inline_a_graphic"/>
- <element name="wp14:sizeRelH" tokenid="ooxml:CT_Inline_wp14_sizeRelH"/>
- <element name="wp14:sizeRelV" tokenid="ooxml:CT_Inline_wp14_sizeRelV"/>
- <attribute name="distT" tokenid="ooxml:CT_Inline_distT"/>
- <attribute name="distB" tokenid="ooxml:CT_Inline_distB"/>
- <attribute name="distL" tokenid="ooxml:CT_Inline_distL"/>
- <attribute name="distR" tokenid="ooxml:CT_Inline_distR"/>
- <attribute name="wp14:anchorId" tokenid="ooxml:CT_Inline_wp14_anchorId"/>
- </resource>
- <resource name="ST_WrapText" resource="List">
- <value tokenid="ooxml:Value_wordprocessingDrawing_ST_WrapText_bothSides">bothSides</value>
- <value tokenid="ooxml:Value_wordprocessingDrawing_ST_WrapText_left">left</value>
- <value tokenid="ooxml:Value_wordprocessingDrawing_ST_WrapText_right">right</value>
- <value tokenid="ooxml:Value_wordprocessingDrawing_ST_WrapText_largest">largest</value>
- </resource>
- <resource name="CT_WrapPath" resource="Properties">
- <element name="start" tokenid="ooxml:CT_WrapPath_start"/>
- <element name="lineTo" tokenid="ooxml:CT_WrapPath_lineTo"/>
- <attribute name="edited" tokenid="ooxml:CT_WrapPath_edited"/>
- </resource>
- <resource name="CT_WrapNone" resource="Properties"/>
- <resource name="CT_WrapSquare" resource="Properties">
- <element name="effectExtent" tokenid="ooxml:CT_WrapSquare_effectExtent"/>
- <attribute name="wrapText" tokenid="ooxml:CT_WrapSquare_wrapText"/>
- <attribute name="distT" tokenid="ooxml:CT_WrapSquare_distT"/>
- <attribute name="distB" tokenid="ooxml:CT_WrapSquare_distB"/>
- <attribute name="distL" tokenid="ooxml:CT_WrapSquare_distL"/>
- <attribute name="distR" tokenid="ooxml:CT_WrapSquare_distR"/>
- </resource>
- <resource name="CT_WrapTight" resource="Properties">
- <element name="wrapPolygon" tokenid="ooxml:CT_WrapTight_wrapPolygon"/>
- <attribute name="wrapText" tokenid="ooxml:CT_WrapTight_wrapText"/>
- <attribute name="distL" tokenid="ooxml:CT_WrapTight_distL"/>
- <attribute name="distR" tokenid="ooxml:CT_WrapTight_distR"/>
- </resource>
- <resource name="CT_WrapThrough" resource="Properties">
- <element name="wrapPolygon" tokenid="ooxml:CT_WrapThrough_wrapPolygon"/>
- <attribute name="wrapText" tokenid="ooxml:CT_WrapThrough_wrapText"/>
- <attribute name="distL" tokenid="ooxml:CT_WrapThrough_distL"/>
- <attribute name="distR" tokenid="ooxml:CT_WrapThrough_distR"/>
- </resource>
- <resource name="CT_WrapTopBottom" resource="Properties">
- <element name="effectExtent" tokenid="ooxml:CT_WrapTopBottom_effectExtent"/>
- <attribute name="distT" tokenid="ooxml:CT_WrapTopBottom_distT"/>
- <attribute name="distB" tokenid="ooxml:CT_WrapTopBottom_distB"/>
- </resource>
- <resource name="EG_WrapType" resource="Properties">
- <element name="wrapNone" tokenid="ooxml:EG_WrapType_wrapNone"/>
- <element name="wrapSquare" tokenid="ooxml:EG_WrapType_wrapSquare"/>
- <element name="wrapTight" tokenid="ooxml:EG_WrapType_wrapTight"/>
- <element name="wrapThrough" tokenid="ooxml:EG_WrapType_wrapThrough"/>
- <element name="wrapTopAndBottom" tokenid="ooxml:EG_WrapType_wrapTopAndBottom"/>
- </resource>
- <resource name="ST_PositionOffset" resource="Value">
- <action name="characters" action="positionOffset"/>
- </resource>
- <resource name="ST_AlignH" resource="Value">
- <action name="characters" action="alignH"/>
- </resource>
- <resource name="ST_RelFromH" resource="List">
- <value tokenid="ooxml:Value_wordprocessingDrawing_ST_RelFromH_margin">margin</value>
- <value tokenid="ooxml:Value_wordprocessingDrawing_ST_RelFromH_page">page</value>
- <value tokenid="ooxml:Value_wordprocessingDrawing_ST_RelFromH_column">column</value>
- <value tokenid="ooxml:Value_wordprocessingDrawing_ST_RelFromH_character">character</value>
- <value tokenid="ooxml:Value_wordprocessingDrawing_ST_RelFromH_leftMargin">leftMargin</value>
- <value tokenid="ooxml:Value_wordprocessingDrawing_ST_RelFromH_rightMargin">rightMargin</value>
- <value tokenid="ooxml:Value_wordprocessingDrawing_ST_RelFromH_insideMargin">insideMargin</value>
- <value tokenid="ooxml:Value_wordprocessingDrawing_ST_RelFromH_outsideMargin">outsideMargin</value>
- </resource>
- <resource name="CT_PosH" resource="Properties">
- <element name="align" tokenid="ooxml:CT_PosH_align"/>
- <element name="posOffset" tokenid="ooxml:CT_PosH_posOffset"/>
- <attribute name="relativeFrom" tokenid="ooxml:CT_PosH_relativeFrom"/>
- </resource>
- <resource name="ST_AlignV" resource="Value">
- <action name="characters" action="alignV"/>
- </resource>
- <resource name="ST_RelFromV" resource="List">
- <value tokenid="ooxml:Value_wordprocessingDrawing_ST_RelFromV_margin">margin</value>
- <value tokenid="ooxml:Value_wordprocessingDrawing_ST_RelFromV_page">page</value>
- <value tokenid="ooxml:Value_wordprocessingDrawing_ST_RelFromV_paragraph">paragraph</value>
- <value tokenid="ooxml:Value_wordprocessingDrawing_ST_RelFromV_line">line</value>
- <value tokenid="ooxml:Value_wordprocessingDrawing_ST_RelFromV_topMargin">topMargin</value>
- <value tokenid="ooxml:Value_wordprocessingDrawing_ST_RelFromV_bottomMargin">bottomMargin</value>
- <value tokenid="ooxml:Value_wordprocessingDrawing_ST_RelFromV_insideMargin">insideMargin</value>
- <value tokenid="ooxml:Value_wordprocessingDrawing_ST_RelFromV_outsideMargin">outsideMargin</value>
- </resource>
- <resource name="CT_PosV" resource="Properties">
- <element name="align" tokenid="ooxml:CT_PosV_align"/>
- <element name="posOffset" tokenid="ooxml:CT_PosV_posOffset"/>
- <attribute name="relativeFrom" tokenid="ooxml:CT_PosV_relativeFrom"/>
- </resource>
- <resource name="ST_EditId" resource="Hex"/>
- <resource name="CT_Anchor" resource="Properties">
- <element name="simplePos" tokenid="ooxml:CT_Anchor_simplePos_elem"/>
- <element name="positionH" tokenid="ooxml:CT_Anchor_positionH"/>
- <element name="positionV" tokenid="ooxml:CT_Anchor_positionV"/>
- <element name="extent" tokenid="ooxml:CT_Anchor_extent"/>
- <element name="effectExtent" tokenid="ooxml:CT_Anchor_effectExtent"/>
- <element name="docPr" tokenid="ooxml:CT_Anchor_docPr"/>
- <element name="cNvGraphicFramePr" tokenid="ooxml:CT_Anchor_cNvGraphicFramePr"/>
- <element name="a:graphic" tokenid="ooxml:CT_Anchor_a_graphic"/>
- <element name="wp14:sizeRelV" tokenid="ooxml:CT_Anchor_wp14_sizeRelV"/>
- <attribute name="distT" tokenid="ooxml:CT_Anchor_distT"/>
- <attribute name="distB" tokenid="ooxml:CT_Anchor_distB"/>
- <attribute name="distL" tokenid="ooxml:CT_Anchor_distL"/>
- <attribute name="distR" tokenid="ooxml:CT_Anchor_distR"/>
- <attribute name="simplePos" tokenid="ooxml:CT_Anchor_simplePos_attr"/>
- <attribute name="relativeHeight" tokenid="ooxml:CT_Anchor_relativeHeight"/>
- <attribute name="behindDoc" tokenid="ooxml:CT_Anchor_behindDoc"/>
- <attribute name="locked" tokenid="ooxml:CT_Anchor_locked"/>
- <attribute name="layoutInCell" tokenid="ooxml:CT_Anchor_layoutInCell"/>
- <attribute name="hidden" tokenid="ooxml:CT_Anchor_hidden"/>
- <attribute name="allowOverlap" tokenid="ooxml:CT_Anchor_allowOverlap"/>
- <attribute name="wp14:anchorId" tokenid="ooxml:CT_Anchor_wp14_anchorId"/>
- </resource>
- <resource name="inline" resource="Properties">
- <element name="inline" tokenid="ooxml:inline_inline"/>
- </resource>
- <resource name="anchor" resource="Properties">
- <element name="anchor" tokenid="ooxml:anchor_anchor"/>
- </resource>
- </namespace>
- <namespace name="sml-customXmlMappings">
- <start name="schemaLibrary"/>
- <grammar xmlns="http://relaxng.org/ns/structure/1.0" ns="http://schemas.openxmlformats.org/schemaLibrary/2006/main">
- <!-- ISO RELAX NG Schema -->
- <!-- start = schemaLibrary -->
- <define name="CT_Schema">
- <attribute name="uri">
- <data type="string"/>
- </attribute>
- <attribute name="manifestLocation">
- <data type="string"/>
- </attribute>
- <attribute name="schemaLocation">
- <data type="string"/>
- </attribute>
- </define>
- <define name="CT_SchemaLibrary">
- <element name="schema">
- <ref name="CT_Schema"/>
- </element>
- </define>
- <define name="schemaLibrary">
- <element name="schemaLibrary">
- <ref name="CT_SchemaLibrary"/>
- </element>
- </define>
- </grammar>
- </namespace>
- <namespace name="shared-math">
- <start name="oMathPara"/>
- <start name="oMath"/>
- <grammar xmlns="http://relaxng.org/ns/structure/1.0" ns="http://schemas.openxmlformats.org/officeDocument/2006/math" attributeFormDefault="qualified">
- <include href="wml"/>
- <!-- start = mathPr | oMathPara | oMath -->
- <define name="ST_Integer255">
- <data type="integer"/>
- </define>
- <define name="CT_Integer255">
- <attribute name="val">
- <ref name="ST_Integer255"/>
- </attribute>
- </define>
- <define name="ST_Integer2">
- <data type="integer"/>
- </define>
- <define name="CT_Integer2">
- <attribute name="val">
- <ref name="ST_Integer2"/>
- </attribute>
- </define>
- <define name="ST_SpacingRule">
- <data type="integer"/>
- </define>
- <define name="CT_SpacingRule">
- <attribute name="val">
- <ref name="ST_SpacingRule"/>
- </attribute>
- </define>
- <define name="ST_UnSignedInteger">
- <data type="unsignedInt"/>
- </define>
- <define name="CT_UnSignedInteger">
- <attribute name="val">
- <ref name="ST_UnSignedInteger"/>
- </attribute>
- </define>
- <define name="ST_Char">
- <data type="string"/>
- </define>
- <define name="CT_Char">
- <attribute name="val">
- <ref name="ST_Char"/>
- </attribute>
- </define>
- <define name="ST_OnOff">
- <choice>
- <!-- On -->
- <value>on</value>
- <!-- Off -->
- <value>off</value>
- </choice>
- </define>
- <define name="CT_OnOff">
- <attribute name="val">
- <ref name="ST_OnOff"/>
- </attribute>
- </define>
- <define name="ST_String">
- <data type="string"/>
- </define>
- <define name="CT_String">
- <attribute name="val">
- <ref name="ST_String"/>
- </attribute>
- </define>
- <define name="ST_XAlign">
- <choice>
- <!-- Left Justification -->
- <value>left</value>
- <!-- Center -->
- <value>center</value>
- <!-- Right -->
- <value>right</value>
- </choice>
- </define>
- <define name="CT_XAlign">
- <attribute name="val">
- <ref name="ST_XAlign"/>
- </attribute>
- </define>
- <define name="ST_YAlign">
- <choice>
- <!-- Top -->
- <value>top</value>
- <!-- Center (Function) -->
- <value>center</value>
- <!-- Bottom Alignment -->
- <value>bot</value>
- </choice>
- </define>
- <define name="CT_YAlign">
- <attribute name="val">
- <ref name="ST_YAlign"/>
- </attribute>
- </define>
- <define name="ST_Shp">
- <choice>
- <!-- Centered (Delimiters) -->
- <value>centered</value>
- <!-- Match -->
- <value>match</value>
- </choice>
- </define>
- <define name="CT_Shp">
- <attribute name="val">
- <ref name="ST_Shp"/>
- </attribute>
- </define>
- <define name="ST_FType">
- <choice>
- <!-- Bar Fraction -->
- <value>bar</value>
- <!-- Skewed -->
- <value>skw</value>
- <!-- Linear Fraction -->
- <value>lin</value>
- <!-- No-Bar Fraction (Stack) -->
- <value>noBar</value>
- </choice>
- </define>
- <define name="CT_FType">
- <attribute name="val">
- <ref name="ST_FType"/>
- </attribute>
- </define>
- <define name="ST_LimLoc">
- <choice>
- <!-- Under-Over location -->
- <value>undOvr</value>
- <!-- Subscript-Superscript location -->
- <value>subSup</value>
- </choice>
- </define>
- <define name="CT_LimLoc">
- <attribute name="val">
- <ref name="ST_LimLoc"/>
- </attribute>
- </define>
- <define name="ST_TopBot">
- <choice>
- <!-- Top -->
- <value>top</value>
- <!-- Bottom Alignment -->
- <value>bot</value>
- </choice>
- </define>
- <define name="CT_TopBot">
- <attribute name="val">
- <ref name="ST_TopBot"/>
- </attribute>
- </define>
- <define name="ST_Script">
- <choice>
- <!-- Roman -->
- <value>roman</value>
- <!-- Script -->
- <value>script</value>
- <!-- Fraktur -->
- <value>fraktur</value>
- <!-- double-struck -->
- <value>double-struck</value>
- <!-- Sans-Serif -->
- <value>sans-serif</value>
- <!-- Monospace -->
- <value>monospace</value>
- </choice>
- </define>
- <define name="CT_Script">
- <attribute name="val">
- <ref name="ST_Script"/>
- </attribute>
- </define>
- <define name="ST_Style">
- <choice>
- <!-- Plain -->
- <value>p</value>
- <!-- Bold -->
- <value>b</value>
- <!-- Italic -->
- <value>i</value>
- <!-- Bold-Italic -->
- <value>bi</value>
- </choice>
- </define>
- <define name="CT_Style">
- <attribute name="val">
- <ref name="ST_Style"/>
- </attribute>
- </define>
- <define name="CT_ManualBreak">
- <attribute name="alnAt">
- <ref name="ST_Integer255"/>
- </attribute>
- </define>
- <define name="EG_ScriptStyle">
- <element name="scr">
- <ref name="CT_Script"/>
- </element>
- <element name="sty">
- <ref name="CT_Style"/>
- </element>
- </define>
- <define name="CT_RPR">
- <element name="lit">
- <ref name="CT_OnOff"/>
- </element>
- <choice>
- <element name="nor">
- <ref name="CT_OnOff"/>
- </element>
- <ref name="EG_ScriptStyle"/>
- </choice>
- <element name="brk">
- <ref name="CT_ManualBreak"/>
- </element>
- <element name="aln">
- <ref name="CT_OnOff"/>
- </element>
- </define>
- <define name="CT_Text">
- <ref name="ST_String"/>
- <attribute name="xml:space">
- <data type="string"/>
- </attribute>
- </define>
- <define name="CT_R">
- <element name="rPr">
- <ref name="CT_RPR"/>
- </element>
- <ref name="EG_RPr"/>
- <choice>
- <ref name="EG_RunInnerContent"/>
- <element name="t">
- <ref name="CT_Text"/>
- </element>
- </choice>
- </define>
- <define name="CT_CtrlPr">
- <ref name="EG_RPrMath"/>
- </define>
- <define name="CT_AccPr">
- <element name="chr">
- <ref name="CT_Char"/>
- </element>
- <element name="ctrlPr">
- <ref name="CT_CtrlPr"/>
- </element>
- </define>
- <define name="CT_Acc">
- <element name="accPr">
- <ref name="CT_AccPr"/>
- </element>
- <element name="e">
- <ref name="CT_OMathArg"/>
- </element>
- </define>
- <define name="CT_BarPr">
- <element name="pos">
- <ref name="CT_TopBot"/>
- </element>
- <element name="ctrlPr">
- <ref name="CT_CtrlPr"/>
- </element>
- </define>
- <define name="CT_Bar">
- <element name="barPr">
- <ref name="CT_BarPr"/>
- </element>
- <element name="e">
- <ref name="CT_OMathArg"/>
- </element>
- </define>
- <define name="CT_BoxPr">
- <element name="opEmu">
- <ref name="CT_OnOff"/>
- </element>
- <element name="noBreak">
- <ref name="CT_OnOff"/>
- </element>
- <element name="diff">
- <ref name="CT_OnOff"/>
- </element>
- <element name="brk">
- <ref name="CT_ManualBreak"/>
- </element>
- <element name="aln">
- <ref name="CT_OnOff"/>
- </element>
- <element name="ctrlPr">
- <ref name="CT_CtrlPr"/>
- </element>
- </define>
- <define name="CT_Box">
- <element name="boxPr">
- <ref name="CT_BoxPr"/>
- </element>
- <element name="e">
- <ref name="CT_OMathArg"/>
- </element>
- </define>
- <define name="CT_BorderBoxPr">
- <element name="hideTop">
- <ref name="CT_OnOff"/>
- </element>
- <element name="hideBot">
- <ref name="CT_OnOff"/>
- </element>
- <element name="hideLeft">
- <ref name="CT_OnOff"/>
- </element>
- <element name="hideRight">
- <ref name="CT_OnOff"/>
- </element>
- <element name="strikeH">
- <ref name="CT_OnOff"/>
- </element>
- <element name="strikeV">
- <ref name="CT_OnOff"/>
- </element>
- <element name="strikeBLTR">
- <ref name="CT_OnOff"/>
- </element>
- <element name="strikeTLBR">
- <ref name="CT_OnOff"/>
- </element>
- <element name="ctrlPr">
- <ref name="CT_CtrlPr"/>
- </element>
- </define>
- <define name="CT_BorderBox">
- <element name="borderBoxPr">
- <ref name="CT_BorderBoxPr"/>
- </element>
- <element name="e">
- <ref name="CT_OMathArg"/>
- </element>
- </define>
- <define name="CT_DPr">
- <element name="begChr">
- <ref name="CT_Char"/>
- </element>
- <element name="sepChr">
- <ref name="CT_Char"/>
- </element>
- <element name="endChr">
- <ref name="CT_Char"/>
- </element>
- <element name="grow">
- <ref name="CT_OnOff"/>
- </element>
- <element name="shp">
- <ref name="CT_Shp"/>
- </element>
- <element name="ctrlPr">
- <ref name="CT_CtrlPr"/>
- </element>
- </define>
- <define name="CT_D">
- <element name="dPr">
- <ref name="CT_DPr"/>
- </element>
- <element name="e">
- <ref name="CT_OMathArg"/>
- </element>
- </define>
- <define name="CT_EqArrPr">
- <element name="baseJc">
- <ref name="CT_YAlign"/>
- </element>
- <element name="maxDist">
- <ref name="CT_OnOff"/>
- </element>
- <element name="objDist">
- <ref name="CT_OnOff"/>
- </element>
- <element name="rSpRule">
- <ref name="CT_SpacingRule"/>
- </element>
- <element name="rSp">
- <ref name="CT_UnSignedInteger"/>
- </element>
- <element name="ctrlPr">
- <ref name="CT_CtrlPr"/>
- </element>
- </define>
- <define name="CT_EqArr">
- <element name="eqArrPr">
- <ref name="CT_EqArrPr"/>
- </element>
- <element name="e">
- <ref name="CT_OMathArg"/>
- </element>
- </define>
- <define name="CT_FPr">
- <element name="type">
- <ref name="CT_FType"/>
- </element>
- <element name="ctrlPr">
- <ref name="CT_CtrlPr"/>
- </element>
- </define>
- <define name="CT_F">
- <element name="fPr">
- <ref name="CT_FPr"/>
- </element>
- <element name="num">
- <ref name="CT_OMathArg"/>
- </element>
- <element name="den">
- <ref name="CT_OMathArg"/>
- </element>
- </define>
- <define name="CT_FuncPr">
- <element name="ctrlPr">
- <ref name="CT_CtrlPr"/>
- </element>
- </define>
- <define name="CT_Func">
- <element name="funcPr">
- <ref name="CT_FuncPr"/>
- </element>
- <element name="fName">
- <ref name="CT_OMathArg"/>
- </element>
- <element name="e">
- <ref name="CT_OMathArg"/>
- </element>
- </define>
- <define name="CT_GroupChrPr">
- <element name="chr">
- <ref name="CT_Char"/>
- </element>
- <element name="pos">
- <ref name="CT_TopBot"/>
- </element>
- <element name="vertJc">
- <ref name="CT_TopBot"/>
- </element>
- <element name="ctrlPr">
- <ref name="CT_CtrlPr"/>
- </element>
- </define>
- <define name="CT_GroupChr">
- <element name="groupChrPr">
- <ref name="CT_GroupChrPr"/>
- </element>
- <element name="e">
- <ref name="CT_OMathArg"/>
- </element>
- </define>
- <define name="CT_LimLowPr">
- <element name="ctrlPr">
- <ref name="CT_CtrlPr"/>
- </element>
- </define>
- <define name="CT_LimLow">
- <element name="limLowPr">
- <ref name="CT_LimLowPr"/>
- </element>
- <element name="e">
- <ref name="CT_OMathArg"/>
- </element>
- <element name="lim">
- <ref name="CT_OMathArg"/>
- </element>
- </define>
- <define name="CT_LimUppPr">
- <element name="ctrlPr">
- <ref name="CT_CtrlPr"/>
- </element>
- </define>
- <define name="CT_LimUpp">
- <element name="limUppPr">
- <ref name="CT_LimUppPr"/>
- </element>
- <element name="e">
- <ref name="CT_OMathArg"/>
- </element>
- <element name="lim">
- <ref name="CT_OMathArg"/>
- </element>
- </define>
- <define name="CT_MCPr">
- <element name="count">
- <ref name="CT_Integer255"/>
- </element>
- <element name="mcJc">
- <ref name="CT_XAlign"/>
- </element>
- </define>
- <define name="CT_MC">
- <element name="mcPr">
- <ref name="CT_MCPr"/>
- </element>
- </define>
- <define name="CT_MCS">
- <element name="mc">
- <ref name="CT_MC"/>
- </element>
- </define>
- <define name="CT_MPr">
- <element name="baseJc">
- <ref name="CT_YAlign"/>
- </element>
- <element name="plcHide">
- <ref name="CT_OnOff"/>
- </element>
- <element name="rSpRule">
- <ref name="CT_SpacingRule"/>
- </element>
- <element name="cGpRule">
- <ref name="CT_SpacingRule"/>
- </element>
- <element name="rSp">
- <ref name="CT_UnSignedInteger"/>
- </element>
- <element name="cSp">
- <ref name="CT_UnSignedInteger"/>
- </element>
- <element name="cGp">
- <ref name="CT_UnSignedInteger"/>
- </element>
- <element name="mcs">
- <ref name="CT_MCS"/>
- </element>
- <element name="ctrlPr">
- <ref name="CT_CtrlPr"/>
- </element>
- </define>
- <define name="CT_MR">
- <element name="e">
- <ref name="CT_OMathArg"/>
- </element>
- </define>
- <define name="CT_M">
- <element name="mPr">
- <ref name="CT_MPr"/>
- </element>
- <element name="mr">
- <ref name="CT_MR"/>
- </element>
- </define>
- <define name="CT_NaryPr">
- <element name="chr">
- <ref name="CT_Char"/>
- </element>
- <element name="limLoc">
- <ref name="CT_LimLoc"/>
- </element>
- <element name="grow">
- <ref name="CT_OnOff"/>
- </element>
- <element name="subHide">
- <ref name="CT_OnOff"/>
- </element>
- <element name="supHide">
- <ref name="CT_OnOff"/>
- </element>
- <element name="ctrlPr">
- <ref name="CT_CtrlPr"/>
- </element>
- </define>
- <define name="CT_Nary">
- <element name="naryPr">
- <ref name="CT_NaryPr"/>
- </element>
- <element name="sub">
- <ref name="CT_OMathArg"/>
- </element>
- <element name="sup">
- <ref name="CT_OMathArg"/>
- </element>
- <element name="e">
- <ref name="CT_OMathArg"/>
- </element>
- </define>
- <define name="CT_PhantPr">
- <element name="show">
- <ref name="CT_OnOff"/>
- </element>
- <element name="zeroWid">
- <ref name="CT_OnOff"/>
- </element>
- <element name="zeroAsc">
- <ref name="CT_OnOff"/>
- </element>
- <element name="zeroDesc">
- <ref name="CT_OnOff"/>
- </element>
- <element name="transp">
- <ref name="CT_OnOff"/>
- </element>
- <element name="ctrlPr">
- <ref name="CT_CtrlPr"/>
- </element>
- </define>
- <define name="CT_Phant">
- <element name="phantPr">
- <ref name="CT_PhantPr"/>
- </element>
- <element name="e">
- <ref name="CT_OMathArg"/>
- </element>
- </define>
- <define name="CT_RadPr">
- <element name="degHide">
- <ref name="CT_OnOff"/>
- </element>
- <element name="ctrlPr">
- <ref name="CT_CtrlPr"/>
- </element>
- </define>
- <define name="CT_Rad">
- <element name="radPr">
- <ref name="CT_RadPr"/>
- </element>
- <element name="deg">
- <ref name="CT_OMathArg"/>
- </element>
- <element name="e">
- <ref name="CT_OMathArg"/>
- </element>
- </define>
- <define name="CT_SPrePr">
- <element name="ctrlPr">
- <ref name="CT_CtrlPr"/>
- </element>
- </define>
- <define name="CT_SPre">
- <element name="sPrePr">
- <ref name="CT_SPrePr"/>
- </element>
- <element name="sub">
- <ref name="CT_OMathArg"/>
- </element>
- <element name="sup">
- <ref name="CT_OMathArg"/>
- </element>
- <element name="e">
- <ref name="CT_OMathArg"/>
- </element>
- </define>
- <define name="CT_SSubPr">
- <element name="ctrlPr">
- <ref name="CT_CtrlPr"/>
- </element>
- </define>
- <define name="CT_SSub">
- <element name="sSubPr">
- <ref name="CT_SSubPr"/>
- </element>
- <element name="e">
- <ref name="CT_OMathArg"/>
- </element>
- <element name="sub">
- <ref name="CT_OMathArg"/>
- </element>
- </define>
- <define name="CT_SSubSupPr">
- <element name="alnScr">
- <ref name="CT_OnOff"/>
- </element>
- <element name="ctrlPr">
- <ref name="CT_CtrlPr"/>
- </element>
- </define>
- <define name="CT_SSubSup">
- <element name="sSubSupPr">
- <ref name="CT_SSubSupPr"/>
- </element>
- <element name="e">
- <ref name="CT_OMathArg"/>
- </element>
- <element name="sub">
- <ref name="CT_OMathArg"/>
- </element>
- <element name="sup">
- <ref name="CT_OMathArg"/>
- </element>
- </define>
- <define name="CT_SSupPr">
- <element name="ctrlPr">
- <ref name="CT_CtrlPr"/>
- </element>
- </define>
- <define name="CT_SSup">
- <element name="sSupPr">
- <ref name="CT_SSupPr"/>
- </element>
- <element name="e">
- <ref name="CT_OMathArg"/>
- </element>
- <element name="sup">
- <ref name="CT_OMathArg"/>
- </element>
- </define>
- <define name="EG_OMathMathElements">
- <choice>
- <element name="acc">
- <ref name="CT_Acc"/>
- </element>
- <element name="bar">
- <ref name="CT_Bar"/>
- </element>
- <element name="box">
- <ref name="CT_Box"/>
- </element>
- <element name="borderBox">
- <ref name="CT_BorderBox"/>
- </element>
- <element name="d">
- <ref name="CT_D"/>
- </element>
- <element name="eqArr">
- <ref name="CT_EqArr"/>
- </element>
- <element name="f">
- <ref name="CT_F"/>
- </element>
- <element name="func">
- <ref name="CT_Func"/>
- </element>
- <element name="groupChr">
- <ref name="CT_GroupChr"/>
- </element>
- <element name="limLow">
- <ref name="CT_LimLow"/>
- </element>
- <element name="limUpp">
- <ref name="CT_LimUpp"/>
- </element>
- <element name="m">
- <ref name="CT_M"/>
- </element>
- <element name="nary">
- <ref name="CT_Nary"/>
- </element>
- <element name="phant">
- <ref name="CT_Phant"/>
- </element>
- <element name="rad">
- <ref name="CT_Rad"/>
- </element>
- <element name="sPre">
- <ref name="CT_SPre"/>
- </element>
- <element name="sSub">
- <ref name="CT_SSub"/>
- </element>
- <element name="sSubSup">
- <ref name="CT_SSubSup"/>
- </element>
- <element name="sSup">
- <ref name="CT_SSup"/>
- </element>
- <element name="r">
- <ref name="CT_R"/>
- </element>
- </choice>
- </define>
- <define name="EG_OMathElements">
- <choice>
- <ref name="EG_OMathMathElements"/>
- <ref name="EG_RunLevelElts"/>
- </choice>
- </define>
- <define name="CT_OMathArgPr">
- <element name="argSz">
- <ref name="CT_Integer2"/>
- </element>
- </define>
- <define name="CT_OMathArg">
- <element name="argPr">
- <ref name="CT_OMathArgPr"/>
- </element>
- <ref name="EG_OMathElements"/>
- <element name="ctrlPr">
- <ref name="CT_CtrlPr"/>
- </element>
- </define>
- <define name="ST_Jc">
- <choice>
- <!-- Align To Leading Edge -->
- <value>start</value>
- <!-- Align To Trailing Edge -->
- <value>end</value>
- <!-- Left Justification (ecma) -->
- <value>left</value>
- <!-- Right (ecma) -->
- <value>right</value>
- <!-- Center (Equation) -->
- <value>center</value>
- <!-- Centered as Group (Equations) -->
- <value>centerGroup</value>
- </choice>
- </define>
- <define name="CT_OMathJc">
- <attribute name="val">
- <ref name="ST_Jc"/>
- </attribute>
- </define>
- <define name="CT_OMathParaPr">
- <element name="jc">
- <ref name="CT_OMathJc"/>
- </element>
- </define>
- <define name="ST_TwipsMeasure">
- <data type="unsignedInt"/>
- </define>
- <define name="CT_TwipsMeasure">
- <attribute name="val">
- <ref name="ST_TwipsMeasure"/>
- </attribute>
- </define>
- <define name="ST_BreakBin">
- <choice>
- <!-- Before -->
- <value>before</value>
- <!-- After -->
- <value>after</value>
- <!-- Repeat -->
- <value>repeat</value>
- </choice>
- </define>
- <define name="CT_BreakBin">
- <attribute name="val">
- <ref name="ST_BreakBin"/>
- </attribute>
- </define>
- <define name="ST_BreakBinSub">
- <choice>
- <!-- Minus Minus -->
- <value>--</value>
- <!-- Minus Plus -->
- <value>-+</value>
- <!-- Plus Minus -->
- <value>+-</value>
- </choice>
- </define>
- <define name="CT_BreakBinSub">
- <attribute name="val">
- <ref name="ST_BreakBinSub"/>
- </attribute>
- </define>
- <define name="CT_MathPr">
- <element name="mathFont">
- <ref name="CT_String"/>
- </element>
- <element name="brkBin">
- <ref name="CT_BreakBin"/>
- </element>
- <element name="brkBinSub">
- <ref name="CT_BreakBinSub"/>
- </element>
- <element name="smallFrac">
- <ref name="CT_OnOff"/>
- </element>
- <element name="dispDef">
- <ref name="CT_OnOff"/>
- </element>
- <element name="lMargin">
- <ref name="CT_TwipsMeasure"/>
- </element>
- <element name="rMargin">
- <ref name="CT_TwipsMeasure"/>
- </element>
- <element name="defJc">
- <ref name="CT_OMathJc"/>
- </element>
- <element name="preSp">
- <ref name="CT_TwipsMeasure"/>
- </element>
- <element name="postSp">
- <ref name="CT_TwipsMeasure"/>
- </element>
- <element name="interSp">
- <ref name="CT_TwipsMeasure"/>
- </element>
- <element name="intraSp">
- <ref name="CT_TwipsMeasure"/>
- </element>
- <choice>
- <element name="wrapIndent">
- <ref name="CT_TwipsMeasure"/>
- </element>
- <element name="wrapRight">
- <ref name="CT_OnOff"/>
- </element>
- </choice>
- <element name="intLim">
- <ref name="CT_LimLoc"/>
- </element>
- <element name="naryLim">
- <ref name="CT_LimLoc"/>
- </element>
- </define>
- <define name="mathPr">
- <element name="mathPr">
- <ref name="CT_MathPr"/>
- </element>
- </define>
- <define name="CT_OMathPara">
- <element name="oMathParaPr">
- <ref name="CT_OMathParaPr"/>
- </element>
- <element name="oMath">
- <ref name="CT_OMath"/>
- </element>
- </define>
- <define name="CT_OMath">
- <ref name="EG_OMathElements"/>
- </define>
- <define name="oMathPara">
- <element name="oMathPara">
- <ref name="CT_OMathPara"/>
- </element>
- </define>
- <define name="oMath">
- <element name="oMath">
- <ref name="CT_OMath"/>
- </element>
- </define>
- <define name="oMathParaPr">
- <element name="oMathParaPr">
- <ref name="CT_OMathParaPr"/>
- </element>
- </define>
- </grammar>
- <resource name="ST_Integer255" resource="Integer"/>
- <resource name="CT_Integer255" resource="Value">
- <attribute name="val" tokenid="ooxml:CT_Integer255_val" action="setValue"/>
- <action name="start" action="setDefaultIntegerValue"/>
- </resource>
- <resource name="ST_Integer2" resource="Integer"/>
- <resource name="CT_Integer2" resource="Value">
- <attribute name="val" tokenid="ooxml:CT_Integer2_val" action="setValue"/>
- <action name="start" action="setDefaultIntegerValue"/>
- </resource>
- <resource name="ST_SpacingRule" resource="Integer"/>
- <resource name="CT_SpacingRule" resource="Value">
- <attribute name="val" tokenid="ooxml:CT_SpacingRule_val" action="setValue"/>
- <action name="start" action="setDefaultIntegerValue"/>
- </resource>
- <resource name="ST_UnSignedInteger" resource="Integer"/>
- <resource name="CT_UnSignedInteger" resource="Value">
- <attribute name="val" tokenid="ooxml:CT_UnSignedInteger_val" action="setValue"/>
- <action name="start" action="setDefaultIntegerValue"/>
- </resource>
- <resource name="ST_Char" resource="String"/>
- <resource name="CT_Char" resource="Value">
- <attribute name="val" tokenid="ooxml:CT_Char_val" action="setValue"/>
- <action name="start" action="setDefaultStringValue"/>
- </resource>
- <resource name="ST_OnOff" resource="List">
- <value tokenid="ooxml:Value_math_ST_OnOff_on">on</value>
- <value tokenid="ooxml:Value_math_ST_OnOff_off">off</value>
- </resource>
- <resource name="CT_OnOff" resource="Value">
- <attribute name="val" tokenid="ooxml:CT_OnOff_val" action="setValue"/>
- <action name="start" action="setDefaultBooleanValue"/>
- </resource>
- <resource name="ST_String" resource="String"/>
- <resource name="CT_String" resource="Value">
- <attribute name="val" tokenid="ooxml:CT_String_val" action="setValue"/>
- <action name="start" action="setDefaultStringValue"/>
- </resource>
- <resource name="ST_XAlign" resource="List">
- <value tokenid="ooxml:Value_math_ST_XAlign_left">left</value>
- <value tokenid="ooxml:Value_math_ST_XAlign_center">center</value>
- <value tokenid="ooxml:Value_math_ST_XAlign_right">right</value>
- </resource>
- <resource name="CT_XAlign" resource="Value">
- <attribute name="val" tokenid="ooxml:CT_XAlign_val" action="setValue"/>
- </resource>
- <resource name="ST_YAlign" resource="List">
- <value tokenid="ooxml:Value_math_ST_YAlign_top">top</value>
- <value tokenid="ooxml:Value_math_ST_YAlign_center">center</value>
- <value tokenid="ooxml:Value_math_ST_YAlign_bot">bot</value>
- </resource>
- <resource name="CT_YAlign" resource="Value">
- <attribute name="val" tokenid="ooxml:CT_YAlign_val" action="setValue"/>
- </resource>
- <resource name="ST_Shp" resource="List">
- <value tokenid="ooxml:Value_math_ST_Shp_centered">centered</value>
- <value tokenid="ooxml:Value_math_ST_Shp_match">match</value>
- </resource>
- <resource name="CT_Shp" resource="Value">
- <attribute name="val" tokenid="ooxml:CT_Shp_val" action="setValue"/>
- </resource>
- <resource name="ST_FType" resource="List">
- <value tokenid="ooxml:Value_math_ST_FType_bar">bar</value>
- <value tokenid="ooxml:Value_math_ST_FType_skw">skw</value>
- <value tokenid="ooxml:Value_math_ST_FType_lin">lin</value>
- <value tokenid="ooxml:Value_math_ST_FType_noBar">noBar</value>
- </resource>
- <resource name="CT_FType" resource="Value">
- <attribute name="val" tokenid="ooxml:CT_FType_val" action="setValue"/>
- </resource>
- <resource name="ST_LimLoc" resource="List">
- <value tokenid="ooxml:Value_math_ST_LimLoc_undOvr">undOvr</value>
- <value tokenid="ooxml:Value_math_ST_LimLoc_subSup">subSup</value>
- </resource>
- <resource name="CT_LimLoc" resource="Value">
- <attribute name="val" tokenid="ooxml:CT_LimLoc_val" action="setValue"/>
- </resource>
- <resource name="ST_TopBot" resource="List">
- <value tokenid="ooxml:Value_math_ST_TopBot_top">top</value>
- <value tokenid="ooxml:Value_math_ST_TopBot_bot">bot</value>
- </resource>
- <resource name="CT_TopBot" resource="Value">
- <attribute name="val" tokenid="ooxml:CT_TopBot_val" action="setValue"/>
- </resource>
- <resource name="ST_Script" resource="List">
- <value tokenid="ooxml:Value_math_ST_Script_roman">roman</value>
- <value tokenid="ooxml:Value_math_ST_Script_script">script</value>
- <value tokenid="ooxml:Value_math_ST_Script_fraktur">fraktur</value>
- <value tokenid="ooxml:Value_math_ST_Script_doublemstruck">double-struck</value>
- <value tokenid="ooxml:Value_math_ST_Script_sansmserif">sans-serif</value>
- <value tokenid="ooxml:Value_math_ST_Script_monospace">monospace</value>
- </resource>
- <resource name="CT_Script" resource="Value">
- <attribute name="val" tokenid="ooxml:CT_Script_val" action="setValue"/>
- </resource>
- <resource name="ST_Style" resource="List">
- <value tokenid="ooxml:Value_ST_Style_b">b</value>
- <value tokenid="ooxml:Value_ST_Style_bi">bi</value>
- <value tokenid="ooxml:Value_ST_Style_i">i</value>
- <value tokenid="ooxml:Value_ST_Style_p">p</value>
- </resource>
- <resource name="CT_Style" resource="Value">
- <attribute name="val" tokenid="ooxml:CT_Style_val" action="setValue"/>
- </resource>
- <resource name="ST_Jc" resource="String">
- <value tokenid="ooxml:Value_math_ST_Jc_start">left</value>
- <value tokenid="ooxml:Value_math_ST_Jc_end">right</value>
- <value tokenid="ooxml:Value_math_ST_Jc_left">left</value>
- <value tokenid="ooxml:Value_math_ST_Jc_right">right</value>
- <value tokenid="ooxml:Value_math_ST_Jc_center">center</value>
- <value tokenid="ooxml:Value_math_ST_Jc_centerGroup">centerGroup</value>
- </resource>
- <resource name="CT_OMathJc" resource="Value">
- <attribute name="val" tokenid="ooxml:CT_OMathJc_val" action="setValue"/>
- </resource>
- <resource name="ST_TwipsMeasure" resource="TwipsMeasure_asSigned"/>
- <resource name="CT_TwipsMeasure" resource="Value">
- <attribute name="val" tokenid="ooxml:CT_TwipsMeasure_val" action="setValue"/>
- <action name="start" action="setDefaultIntegerValue"/>
- </resource>
- <resource name="ST_BreakBin" resource="List">
- <value tokenid="ooxml:Value_math_ST_BreakBin_before">before</value>
- <value tokenid="ooxml:Value_math_ST_BreakBin_after">after</value>
- <value tokenid="ooxml:Value_math_ST_BreakBin_repeat">repeat</value>
- </resource>
- <resource name="CT_BreakBin" resource="Value">
- <attribute name="val" tokenid="ooxml:CT_BreakBin_val" action="setValue"/>
- </resource>
- <resource name="ST_BreakBinSub" resource="List">
- <value tokenid="ooxml:Value_math_ST_BreakBinSub_mm">--</value>
- <value tokenid="ooxml:Value_math_ST_BreakBinSub_mp">-+</value>
- <value tokenid="ooxml:Value_math_ST_BreakBinSub_pm">+-</value>
- </resource>
- <resource name="CT_BreakBinSub" resource="Value">
- <attribute name="val" tokenid="ooxml:CT_BreakBinSub_val" action="setValue"/>
- </resource>
- </namespace>
- <namespace name="shared-relationshipReference">
- <grammar xmlns="http://relaxng.org/ns/structure/1.0" ns="http://schemas.openxmlformats.org/officeDocument/2006/relationships">
- <!-- ISO RELAX NG Schema -->
- <define name="id">
- <attribute name="id">
- <data type="string"/>
- </attribute>
- </define>
- <define name="embed">
- <attribute name="embed">
- <data type="string"/>
- </attribute>
- </define>
- <define name="link">
- <attribute name="link"/>
- </define>
- <define name="dm">
- <attribute name="dm"/>
- </define>
- <define name="lo">
- <attribute name="lo"/>
- </define>
- <define name="qs">
- <attribute name="qs"/>
- </define>
- <define name="cs">
- <attribute name="cs"/>
- </define>
- <define name="blip">
- <attribute name="blip"/>
- </define>
- <define name="pict">
- <attribute name="pict"/>
- </define>
- <define name="href">
- <attribute name="href">
- <data type="string"/>
- </attribute>
- </define>
- </grammar>
- </namespace>
- <namespace name="dml-chartDrawing">
- <start name="pic"/>
- <grammar xmlns="http://relaxng.org/ns/structure/1.0" ns="http://schemas.openxmlformats.org/drawingml/2006/picture">
- <include href="dml-shapeProperties"/>
- <include href="dml-documentProperties"/>
- <!-- start = pic -->
- <define name="CT_PictureNonVisual">
- <element name="cNvPr">
- <ref name="CT_NonVisualDrawingProps"/>
- </element>
- <element name="cNvPicPr">
- <ref name="CT_NonVisualPictureProperties"/>
- </element>
- </define>
- <define name="CT_Picture">
- <element name="nvPicPr">
- <ref name="CT_PictureNonVisual"/>
- </element>
- <element name="blipFill">
- <ref name="CT_BlipFillProperties"/>
- </element>
- <element name="spPr">
- <ref name="CT_ShapeProperties"/>
- </element>
- </define>
- <define name="pic">
- <element name="pic">
- <ref name="CT_Picture"/>
- </element>
- </define>
- <define name="CT_RelIds">
- <attribute name="r:dm">
- <data type="string"/>
- </attribute>
- <attribute name="r:lo">
- <data type="string"/>
- </attribute>
- <attribute name="r:qs">
- <data type="string"/>
- </attribute>
- <attribute name="r:cs">
- <data type="string"/>
- </attribute>
- </define>
- <define name="relIds">
- <element name="dgm:relIds">
- <ref name="CT_RelIds"/>
- </element>
- </define>
- <define name="CT_GvmlGroupShape">
- <element name="nvGrpSpPr">
- <ref name="CT_NonVisualGroupDrawingShapeProps"/>
- </element>
- <element name="grpSpPr">
- <ref name="CT_GroupShapeProperties"/>
- </element>
- </define>
- <define name="lockedCanvas">
- <element name="lc:lockedCanvas">
- <ref name="CT_GvmlGroupShape"/>
- </element>
- </define>
- <define name="CT_Chart">
- <attribute name="r:id">
- <data type="string"/>
- </attribute>
- </define>
- <define name="chart">
- <element name="c:chart">
- <ref name="CT_Chart"/>
- </element>
- </define>
- <define name="CT_WordprocessingShape">
- <element name="cNvSpPr">
- <ref name="CT_NonVisualDrawingShapeProps"/>
- </element>
- <element name="spPr">
- <ref name="CT_ShapeProperties"/>
- </element>
- </define>
- <define name="wsp">
- <element name="wps:wsp">
- <ref name="CT_WordprocessingShape"/>
- </element>
- </define>
- <define name="CT_WordprocessingGroup">
- <element name="cNvGrpSpPr">
- <ref name="CT_NonVisualGroupDrawingShapeProps"/>
- </element>
- <element name="grpSpPr">
- <ref name="CT_WordprocessingGroup"/>
- </element>
- </define>
- <define name="wgp">
- <element name="wpg:wgp">
- <ref name="CT_WordprocessingGroup"/>
- </element>
- </define>
- </grammar>
- <resource name="CT_PictureNonVisual" resource="Properties">
- <element name="cNvPr" tokenid="ooxml:CT_PictureNonVisual_cNvPr"/>
- <element name="cNvPicPr" tokenid="ooxml:CT_PictureNonVisual_cNvPicPr"/>
- </resource>
- <resource name="CT_Picture" resource="Shape">
- <element name="nvPicPr" tokenid="ooxml:CT_Picture_nvPicPr"/>
- <element name="blipFill" tokenid="ooxml:CT_Picture_blipFill"/>
- <element name="spPr" tokenid="ooxml:CT_Picture_spPr"/>
- </resource>
- <resource name="pic" resource="Properties">
- <element name="pic" tokenid="ooxml:pic_pic"/>
- </resource>
- <resource name="CT_RelIds" resource="Shape">
- <attribute name="r:dm" tokenid="ooxml:CT_RelIds_dm"/>
- <attribute name="r:lo" tokenid="ooxml:CT_RelIds_lo"/>
- <attribute name="r:qs" tokenid="ooxml:CT_RelIds_qs"/>
- <attribute name="r:cs" tokenid="ooxml:CT_RelIds_cs"/>
- </resource>
- <resource name="relIds" resource="Shape">
- <element name="dgm:relIds" tokenid="ooxml:dgm_relIds"/>
- </resource>
- <resource name="CT_GvmlGroupShape" resource="Shape">
- <element name="a:nvGrpSpPr" tokenid="ooxml:CT_GvmlGroupShape_nvGrpSpPr"/>
- <element name="a:grpSpPr" tokenid="ooxml:CT_GvmlGroupShape_grpSpPr"/>
- </resource>
- <resource name="lockedCanvas" resource="Shape">
- <element name="lc:lockedCanvas" tokenid="ooxml:lc_lockedCanvas"/>
- </resource>
- <resource name="CT_Chart" resource="Shape">
- <attribute name="r:id" tokenid="ooxml:CT_RelId_chart"/>
- </resource>
- <resource name="chart" resource="Shape">
- <element name="c:chart" tokenid="ooxml:c_chart"/>
- </resource>
- <resource name="CT_WordprocessingShape" resource="Shape">
- <element name="wps:cNvSpPr" tokenid="ooxml:CT_WordprocessingShape_cNvSpPr"/>
- <element name="wps:spPr" tokenid="ooxml:CT_WordprocessingShape_spPr"/>
- </resource>
- <resource name="wsp" resource="Shape">
- <element name="wps:wsp" tokenid="ooxml:wps_wsp"/>
- </resource>
- <resource name="CT_WordprocessingGroup" resource="Shape">
- <element name="wpg:cNvGrpSpPr" tokenid="ooxml:CT_WordprocessingGroup_cNvGrpSpPr"/>
- <element name="wpg:grpSpPr" tokenid="ooxml:CT_WordprocessingGroup_grpSpPr"/>
- </resource>
- <resource name="wgp" resource="Shape">
- <element name="wpg:wgp" tokenid="ooxml:wpg_wgp"/>
- </resource>
-
- </namespace>
- <namespace name="vml-main">
- <start name="shape"/>
- <start name="shapetype"/>
- <start name="group"/>
- <start name="background"/>
- <start name="fill"/>
- <start name="formulas"/>
- <start name="handles"/>
- <start name="imagedata"/>
- <start name="path"/>
- <start name="textbox"/>
- <start name="shadow"/>
- <start name="stroke"/>
- <start name="textpath"/>
- <start name="arc"/>
- <start name="curve"/>
- <start name="image"/>
- <start name="line"/>
- <start name="oval"/>
- <start name="polyline"/>
- <start name="rect"/>
- <start name="roundrect"/>
- <grammar xmlns="http://relaxng.org/ns/structure/1.0" ns="urn:schemas-microsoft-com:vml">
- <include href="vml-officeDrawing"/>
- <include href="vml-wordprocessingDrawing"/>
- <!-- start = shape | shapetype | group | background | fill | formulas | handles | imagedata | path | textbox | shadow | stroke | textpath | arc | curve | image | line | oval | polyline | rect | roundrect -->
- <define name="AG_Id">
- <attribute name="id">
- <data type="string"/>
- </attribute>
- </define>
- <define name="AG_Style">
- <attribute name="style">
- <data type="string"/>
- </attribute>
- </define>
- <define name="AG_Type">
- <attribute name="type">
- <data type="string"/>
- </attribute>
- </define>
- <define name="AG_Adj">
- <attribute name="adj">
- <data type="string"/>
- </attribute>
- </define>
- <define name="AG_Path">
- <attribute name="path">
- <data type="string"/>
- </attribute>
- </define>
- <define name="AG_Fill">
- <attribute name="filled">
- <data type="string"/>
- </attribute>
- <attribute name="fillcolor">
- <data type="string"/>
- </attribute>
- </define>
- <define name="AG_Chromakey">
- <attribute name="chromakey">
- <data type="string"/>
- </attribute>
- </define>
- <define name="AG_Ext">
- <attribute name="ext">
- <data type="string"/>
- </attribute>
- </define>
- <define name="AG_CoreAttributes">
- <ref name="AG_Id"/>
- <ref name="AG_Style"/>
- <attribute name="href">
- <data type="string"/>
- </attribute>
- <attribute name="target">
- <data type="string"/>
- </attribute>
- <attribute name="class">
- <data type="string"/>
- </attribute>
- <attribute name="title">
- <data type="string"/>
- </attribute>
- <attribute name="alt">
- <data type="string"/>
- </attribute>
- <attribute name="coordsize">
- <data type="string"/>
- </attribute>
- <attribute name="coordorigin">
- <data type="string"/>
- </attribute>
- <attribute name="wrapcoords">
- <data type="string"/>
- </attribute>
- <attribute name="print">
- <data type="string"/>
- </attribute>
- </define>
- <define name="AG_ShapeAttributes">
- <ref name="AG_Chromakey"/>
- <ref name="AG_Fill"/>
- <attribute name="opacity">
- <data type="string"/>
- </attribute>
- <attribute name="stroked">
- <data type="string"/>
- </attribute>
- <attribute name="strokecolor">
- <data type="string"/>
- </attribute>
- <attribute name="strokeweight">
- <data type="string"/>
- </attribute>
- <attribute name="insetpen">
- <data type="string"/>
- </attribute>
- </define>
- <define name="AG_OfficeCoreAttributes">
- <attribute name="o:spid"/>
- <attribute name="o:oned"/>
- <attribute name="o:regroupid"/>
- <attribute name="o:doubleclicknotify"/>
- <attribute name="o:button"/>
- <attribute name="o:userhidden"/>
- <attribute name="o:bullet"/>
- <attribute name="o:hr"/>
- <attribute name="o:hrstd"/>
- <attribute name="o:hrnoshade"/>
- <attribute name="o:hrpct"/>
- <attribute name="o:hralign"/>
- <attribute name="o:allowincell"/>
- <attribute name="o:allowoverlap"/>
- <attribute name="o:userdrawn"/>
- <attribute name="o:bordertopcolor"/>
- <attribute name="o:borderleftcolor"/>
- <attribute name="o:borderbottomcolor"/>
- <attribute name="o:borderrightcolor"/>
- <attribute name="o:dgmlayout"/>
- <attribute name="o:dgmnodekind"/>
- <attribute name="o:dgmlayoutmru"/>
- <attribute name="o:insetmode"/>
- </define>
- <define name="AG_OfficeShapeAttributes">
- <attribute name="o:spt"/>
- <attribute name="o:connectortype"/>
- <attribute name="o:bwmode"/>
- <attribute name="o:bwpure"/>
- <attribute name="o:bwnormal"/>
- <attribute name="o:forcedash"/>
- <attribute name="o:oleicon"/>
- <attribute name="o:ole"/>
- <attribute name="o:preferrelative"/>
- <attribute name="o:cliptowrap"/>
- <attribute name="o:clip"/>
- </define>
- <define name="AG_AllCoreAttributes">
- <ref name="AG_CoreAttributes"/>
- <ref name="AG_OfficeCoreAttributes"/>
- </define>
- <define name="AG_AllShapeAttributes">
- <ref name="AG_ShapeAttributes"/>
- <ref name="AG_OfficeShapeAttributes"/>
- </define>
- <define name="AG_ImageAttributes">
- <attribute name="src">
- <data type="string"/>
- </attribute>
- <attribute name="cropleft">
- <data type="string"/>
- </attribute>
- <attribute name="croptop">
- <data type="string"/>
- </attribute>
- <attribute name="cropright">
- <data type="string"/>
- </attribute>
- <attribute name="cropbottom">
- <data type="string"/>
- </attribute>
- <attribute name="gain">
- <data type="string"/>
- </attribute>
- <attribute name="blacklevel">
- <data type="string"/>
- </attribute>
- <attribute name="gamma">
- <data type="string"/>
- </attribute>
- <attribute name="grayscale">
- <data type="string"/>
- </attribute>
- <attribute name="bilevel">
- <data type="string"/>
- </attribute>
- </define>
- <define name="AG_StrokeAttributes">
- <attribute name="on">
- <data type="string"/>
- </attribute>
- <attribute name="weight">
- <data type="string"/>
- </attribute>
- <attribute name="color">
- <data type="string"/>
- </attribute>
- <attribute name="opacity">
- <data type="string"/>
- </attribute>
- <attribute name="linestyle">
- <data type="string"/>
- </attribute>
- <attribute name="miterlimit">
- <data type="decimal"/>
- </attribute>
- <attribute name="joinstyle">
- <data type="string"/>
- </attribute>
- <attribute name="endcap">
- <data type="string"/>
- </attribute>
- <attribute name="dashstyle">
- <data type="string"/>
- </attribute>
- <attribute name="filltype">
- <data type="string"/>
- </attribute>
- <attribute name="src">
- <data type="string"/>
- </attribute>
- <attribute name="imageaspect">
- <data type="string"/>
- </attribute>
- <attribute name="imagesize">
- <data type="string"/>
- </attribute>
- <attribute name="imagealignshape">
- <data type="string"/>
- </attribute>
- <attribute name="color2">
- <data type="string"/>
- </attribute>
- <attribute name="startarrow">
- <data type="string"/>
- </attribute>
- <attribute name="startarrowwidth">
- <data type="string"/>
- </attribute>
- <attribute name="startarrowlength">
- <data type="string"/>
- </attribute>
- <attribute name="endarrow">
- <data type="string"/>
- </attribute>
- <attribute name="endarrowwidth">
- <data type="string"/>
- </attribute>
- <attribute name="endarrowlength">
- <data type="string"/>
- </attribute>
- <attribute name="o:href"/>
- <attribute name="o:althref"/>
- <attribute name="o:title"/>
- <attribute name="o:forcedash"/>
- <attribute name="r:id"/>
- <attribute name="insetpen">
- <data type="string"/>
- </attribute>
- <attribute name="o:relid"/>
- </define>
- <define name="EG_ShapeElements">
- <choice>
- <ref name="path"/>
- <ref name="formulas"/>
- <ref name="handles"/>
- <ref name="fill"/>
- <ref name="stroke"/>
- <ref name="shadow"/>
- <ref name="textbox"/>
- <ref name="textpath"/>
- <ref name="imagedata"/>
- <element name="o:skew">
- <ref name="BUILT_IN_ANY_TYPE"/>
- </element>
- <element name="o:extrusion">
- <ref name="BUILT_IN_ANY_TYPE"/>
- </element>
- <element name="o:callout">
- <ref name="BUILT_IN_ANY_TYPE"/>
- </element>
- <element name="o:lock">
- <ref name="BUILT_IN_ANY_TYPE"/>
- </element>
- <element name="o:clippath">
- <ref name="BUILT_IN_ANY_TYPE"/>
- </element>
- <element name="o:signatureline">
- <ref name="BUILT_IN_ANY_TYPE"/>
- </element>
- <element name="wvml:wrap">
- <ref name="BUILT_IN_ANY_TYPE"/>
- </element>
- <element name="wvml:anchorlock">
- <ref name="BUILT_IN_ANY_TYPE"/>
- </element>
- <element name="wvml:bordertop">
- <ref name="BUILT_IN_ANY_TYPE"/>
- </element>
- <element name="wvml:borderbottom">
- <ref name="BUILT_IN_ANY_TYPE"/>
- </element>
- <element name="wvml:borderleft">
- <ref name="BUILT_IN_ANY_TYPE"/>
- </element>
- <element name="wvml:borderright">
- <ref name="BUILT_IN_ANY_TYPE"/>
- </element>
- <element name="x:ClientData">
- <ref name="BUILT_IN_ANY_TYPE"/>
- </element>
- <element name="p:textdata">
- <ref name="BUILT_IN_ANY_TYPE"/>
- </element>
- </choice>
- </define>
- <define name="shape">
- <element name="shape">
- <ref name="CT_Shape"/>
- </element>
- </define>
- <define name="shapetype">
- <element name="shapetype">
- <ref name="CT_Shapetype"/>
- </element>
- </define>
- <define name="group">
- <element name="group">
- <ref name="CT_Group"/>
- </element>
- </define>
- <define name="background">
- <element name="background">
- <ref name="CT_Background"/>
- </element>
- </define>
- <define name="CT_Shape">
- <choice>
- <ref name="EG_ShapeElements"/>
- <element name="o:ink">
- <ref name="BUILT_IN_ANY_TYPE"/>
- </element>
- <element name="p:iscomment">
- <ref name="BUILT_IN_ANY_TYPE"/>
- </element>
- </choice>
- <ref name="AG_AllCoreAttributes"/>
- <ref name="AG_AllShapeAttributes"/>
- <ref name="AG_Type"/>
- <ref name="AG_Adj"/>
- <ref name="AG_Path"/>
- <attribute name="o:gfxdata"/>
- <attribute name="equationxml">
- <data type="string"/>
- </attribute>
- </define>
- <define name="CT_Shapetype">
- <ref name="EG_ShapeElements"/>
- <element name="o:complex">
- <ref name="BUILT_IN_ANY_TYPE"/>
- </element>
- <ref name="AG_AllCoreAttributes"/>
- <ref name="AG_AllShapeAttributes"/>
- <ref name="AG_Adj"/>
- <ref name="AG_Path"/>
- <attribute name="o:master"/>
- </define>
- <define name="CT_Group">
- <choice>
- <ref name="EG_ShapeElements"/>
- <ref name="group"/>
- <ref name="shape"/>
- <ref name="shapetype"/>
- <ref name="arc"/>
- <ref name="curve"/>
- <ref name="image"/>
- <ref name="line"/>
- <ref name="oval"/>
- <ref name="polyline"/>
- <ref name="rect"/>
- <ref name="roundrect"/>
- <element name="o:diagram">
- <ref name="BUILT_IN_ANY_TYPE"/>
- </element>
- </choice>
- <ref name="AG_AllCoreAttributes"/>
- <ref name="AG_Fill"/>
- <attribute name="editas">
- <data type="string"/>
- </attribute>
- <attribute name="o:tableproperties"/>
- <attribute name="o:tablelimits"/>
- </define>
- <define name="CT_Background">
- <ref name="fill"/>
- <ref name="AG_Id"/>
- <ref name="AG_Fill"/>
- <attribute name="o:bwmode"/>
- <attribute name="o:bwpure"/>
- <attribute name="o:bwnormal"/>
- <attribute name="o:targetscreensize"/>
- </define>
- <define name="fill">
- <element name="fill">
- <ref name="CT_Fill"/>
- </element>
- </define>
- <define name="formulas">
- <element name="formulas">
- <ref name="CT_Formulas"/>
- </element>
- </define>
- <define name="handles">
- <element name="handles">
- <ref name="CT_Handles"/>
- </element>
- </define>
- <define name="imagedata">
- <element name="imagedata">
- <ref name="CT_ImageData"/>
- </element>
- </define>
- <define name="path">
- <element name="path">
- <ref name="CT_Path"/>
- </element>
- </define>
- <define name="textbox">
- <element name="textbox">
- <ref name="CT_Textbox"/>
- </element>
- </define>
- <define name="shadow">
- <element name="shadow">
- <ref name="CT_Shadow"/>
- </element>
- </define>
- <define name="stroke">
- <element name="stroke">
- <ref name="CT_Stroke"/>
- </element>
- </define>
- <define name="textpath">
- <element name="textpath">
- <ref name="CT_TextPath"/>
- </element>
- </define>
- <define name="CT_Fill">
- <element name="o:fill">
- <ref name="BUILT_IN_ANY_TYPE"/>
- </element>
- <ref name="AG_Id"/>
- <attribute name="type">
- <data type="string"/>
- </attribute>
- <attribute name="on">
- <data type="string"/>
- </attribute>
- <attribute name="color">
- <data type="string"/>
- </attribute>
- <attribute name="opacity">
- <data type="string"/>
- </attribute>
- <attribute name="color2">
- <data type="string"/>
- </attribute>
- <attribute name="src">
- <data type="string"/>
- </attribute>
- <attribute name="o:href"/>
- <attribute name="o:althref"/>
- <attribute name="size">
- <data type="string"/>
- </attribute>
- <attribute name="origin">
- <data type="string"/>
- </attribute>
- <attribute name="position">
- <data type="string"/>
- </attribute>
- <attribute name="aspect">
- <data type="string"/>
- </attribute>
- <attribute name="colors">
- <data type="string"/>
- </attribute>
- <attribute name="angle">
- <data type="decimal"/>
- </attribute>
- <attribute name="alignshape">
- <data type="string"/>
- </attribute>
- <attribute name="focus">
- <data type="string"/>
- </attribute>
- <attribute name="focussize">
- <data type="string"/>
- </attribute>
- <attribute name="focusposition">
- <data type="string"/>
- </attribute>
- <attribute name="method">
- <data type="string"/>
- </attribute>
- <attribute name="o:detectmouseclick"/>
- <attribute name="o:title"/>
- <attribute name="o:opacity2"/>
- <attribute name="recolor">
- <data type="string"/>
- </attribute>
- <attribute name="rotate">
- <data type="string"/>
- </attribute>
- <attribute name="r:id"/>
- <attribute name="o:relid"/>
- </define>
- <define name="CT_Formulas">
- <element name="f">
- <ref name="CT_F"/>
- </element>
- </define>
- <define name="CT_F">
- <attribute name="eqn">
- <data type="string"/>
- </attribute>
- </define>
- <define name="CT_Handles">
- <element name="h">
- <ref name="CT_H"/>
- </element>
- </define>
- <define name="CT_H">
- <attribute name="position">
- <data type="string"/>
- </attribute>
- <attribute name="polar">
- <data type="string"/>
- </attribute>
- <attribute name="map">
- <data type="string"/>
- </attribute>
- <attribute name="invx">
- <data type="string"/>
- </attribute>
- <attribute name="invy">
- <data type="string"/>
- </attribute>
- <attribute name="switch">
- <data type="string"/>
- </attribute>
- <attribute name="xrange">
- <data type="string"/>
- </attribute>
- <attribute name="yrange">
- <data type="string"/>
- </attribute>
- <attribute name="radiusrange">
- <data type="string"/>
- </attribute>
- </define>
- <define name="CT_ImageData">
- <ref name="AG_Id"/>
- <ref name="AG_ImageAttributes"/>
- <ref name="AG_Chromakey"/>
- <attribute name="embosscolor">
- <data type="string"/>
- </attribute>
- <attribute name="recolortarget">
- <data type="string"/>
- </attribute>
- <attribute name="o:href"/>
- <attribute name="o:althref"/>
- <attribute name="o:title"/>
- <attribute name="o:oleid"/>
- <attribute name="o:detectmouseclick"/>
- <attribute name="o:movie"/>
- <attribute name="o:relid"/>
- <attribute name="r:id"/>
- <attribute name="r:pict"/>
- <attribute name="r:href"/>
- </define>
- <define name="CT_Path">
- <ref name="AG_Id"/>
- <attribute name="v">
- <data type="string"/>
- </attribute>
- <attribute name="limo">
- <data type="string"/>
- </attribute>
- <attribute name="textboxrect">
- <data type="string"/>
- </attribute>
- <attribute name="fillok">
- <data type="string"/>
- </attribute>
- <attribute name="strokeok">
- <data type="string"/>
- </attribute>
- <attribute name="shadowok">
- <data type="string"/>
- </attribute>
- <attribute name="arrowok">
- <data type="string"/>
- </attribute>
- <attribute name="gradientshapeok">
- <data type="string"/>
- </attribute>
- <attribute name="textpathok">
- <data type="string"/>
- </attribute>
- <attribute name="insetpenok">
- <data type="string"/>
- </attribute>
- <attribute name="o:connecttype"/>
- <attribute name="o:connectlocs"/>
- <attribute name="o:connectangles"/>
- <attribute name="o:extrusionok"/>
- </define>
- <define name="CT_Shadow">
- <ref name="AG_Id"/>
- <attribute name="on">
- <data type="string"/>
- </attribute>
- <attribute name="type">
- <data type="string"/>
- </attribute>
- <attribute name="obscured">
- <data type="string"/>
- </attribute>
- <attribute name="color">
- <data type="string"/>
- </attribute>
- <attribute name="opacity">
- <data type="string"/>
- </attribute>
- <attribute name="offset">
- <data type="string"/>
- </attribute>
- <attribute name="color2">
- <data type="string"/>
- </attribute>
- <attribute name="offset2">
- <data type="string"/>
- </attribute>
- <attribute name="origin">
- <data type="string"/>
- </attribute>
- <attribute name="matrix">
- <data type="string"/>
- </attribute>
- </define>
- <define name="CT_Stroke">
- <element name="o:left">
- <ref name="BUILT_IN_ANY_TYPE"/>
- </element>
- <element name="o:top">
- <ref name="BUILT_IN_ANY_TYPE"/>
- </element>
- <element name="o:right">
- <ref name="BUILT_IN_ANY_TYPE"/>
- </element>
- <element name="o:bottom">
- <ref name="BUILT_IN_ANY_TYPE"/>
- </element>
- <element name="o:column">
- <ref name="BUILT_IN_ANY_TYPE"/>
- </element>
- <ref name="AG_Id"/>
- <ref name="AG_StrokeAttributes"/>
- </define>
- <define name="CT_Textbox">
- <choice>
- <element name="w:txbxContent">
- <ref name="BUILT_IN_ANY_TYPE"/>
- </element>
- <element>
- <ref name="BUILT_IN_ANY_TYPE"/>
- </element>
- </choice>
- <ref name="AG_Id"/>
- <ref name="AG_Style"/>
- <attribute name="inset">
- <data type="string"/>
- </attribute>
- <attribute name="o:singleclick"/>
- <attribute name="o:insetmode"/>
- </define>
- <define name="CT_TextPath">
- <ref name="AG_Id"/>
- <ref name="AG_Style"/>
- <attribute name="on">
- <data type="string"/>
- </attribute>
- <attribute name="fitshape">
- <data type="string"/>
- </attribute>
- <attribute name="fitpath">
- <data type="string"/>
- </attribute>
- <attribute name="trim">
- <data type="string"/>
- </attribute>
- <attribute name="xscale">
- <data type="string"/>
- </attribute>
- <attribute name="string">
- <data type="string"/>
- </attribute>
- </define>
- <define name="arc">
- <element name="arc">
- <ref name="CT_Arc"/>
- </element>
- </define>
- <define name="curve">
- <element name="curve">
- <ref name="CT_Curve"/>
- </element>
- </define>
- <define name="image">
- <element name="image">
- <ref name="CT_Image"/>
- </element>
- </define>
- <define name="line">
- <element name="line">
- <ref name="CT_Line"/>
- </element>
- </define>
- <define name="oval">
- <element name="oval">
- <ref name="CT_Oval"/>
- </element>
- </define>
- <define name="polyline">
- <element name="polyline">
- <ref name="CT_PolyLine"/>
- </element>
- </define>
- <define name="rect">
- <element name="rect">
- <ref name="CT_Rect"/>
- </element>
- </define>
- <define name="roundrect">
- <element name="roundrect">
- <ref name="CT_RoundRect"/>
- </element>
- </define>
- <define name="CT_Arc">
- <ref name="EG_ShapeElements"/>
- <ref name="AG_AllCoreAttributes"/>
- <ref name="AG_AllShapeAttributes"/>
- <attribute name="startAngle">
- <data type="decimal"/>
- </attribute>
- <attribute name="endAngle">
- <data type="decimal"/>
- </attribute>
- </define>
- <define name="CT_Curve">
- <ref name="EG_ShapeElements"/>
- <ref name="AG_AllCoreAttributes"/>
- <ref name="AG_AllShapeAttributes"/>
- <attribute name="from">
- <data type="string"/>
- </attribute>
- <attribute name="control1">
- <data type="string"/>
- </attribute>
- <attribute name="control2">
- <data type="string"/>
- </attribute>
- <attribute name="to">
- <data type="string"/>
- </attribute>
- </define>
- <define name="CT_Image">
- <ref name="EG_ShapeElements"/>
- <ref name="AG_AllCoreAttributes"/>
- <ref name="AG_AllShapeAttributes"/>
- <ref name="AG_ImageAttributes"/>
- </define>
- <define name="CT_Line">
- <ref name="EG_ShapeElements"/>
- <ref name="AG_AllCoreAttributes"/>
- <ref name="AG_AllShapeAttributes"/>
- <attribute name="from">
- <data type="string"/>
- </attribute>
- <attribute name="to">
- <data type="string"/>
- </attribute>
- </define>
- <define name="CT_Oval">
- <ref name="EG_ShapeElements"/>
- <ref name="AG_AllCoreAttributes"/>
- <ref name="AG_AllShapeAttributes"/>
- </define>
- <define name="CT_PolyLine">
- <choice>
- <ref name="EG_ShapeElements"/>
- <element name="o:ink">
- <ref name="BUILT_IN_ANY_TYPE"/>
- </element>
- </choice>
- <ref name="AG_AllCoreAttributes"/>
- <ref name="AG_AllShapeAttributes"/>
- <attribute name="points">
- <data type="string"/>
- </attribute>
- </define>
- <define name="CT_Rect">
- <ref name="EG_ShapeElements"/>
- <ref name="AG_AllCoreAttributes"/>
- <ref name="AG_AllShapeAttributes"/>
- </define>
- <define name="CT_RoundRect">
- <ref name="EG_ShapeElements"/>
- <ref name="AG_AllCoreAttributes"/>
- <ref name="AG_AllShapeAttributes"/>
- <attribute name="arcsize">
- <data type="string"/>
- </attribute>
- </define>
- <define name="ST_FillType">
- <choice>
- <!-- Solid Fill -->
- <value>solid</value>
- <!-- Linear Gradient -->
- <value>gradient</value>
- <!-- Radial Gradient -->
- <value>gradientRadial</value>
- <!-- Tiled Image -->
- <value>tile</value>
- <!-- Image Pattern -->
- <value>pattern</value>
- <!-- Stretch Image to Fit -->
- <value>frame</value>
- </choice>
- </define>
- <define name="ST_StrokeLineStyle">
- <choice>
- <!-- Single Line -->
- <value>single</value>
- <!-- Two Thin Lines -->
- <value>thinThin</value>
- <!-- Thin Line Outside Thick Line -->
- <value>thinThick</value>
- <!-- Thick Line Outside Thin Line -->
- <value>thickThin</value>
- <!-- Thick Line Between Thin Lines -->
- <value>thickBetweenThin</value>
- </choice>
- </define>
- <define name="ST_StrokeJoinStyle">
- <choice>
- <!-- Round Joint -->
- <value>round</value>
- <!-- Bevel Joint -->
- <value>bevel</value>
- <!-- Miter Joint -->
- <value>miter</value>
- </choice>
- </define>
- <define name="ST_StrokeEndCap">
- <choice>
- <!-- Flat End -->
- <value>flat</value>
- <!-- Square End -->
- <value>square</value>
- <!-- Round End -->
- <value>round</value>
- </choice>
- </define>
- <define name="ST_StrokeArrowLength">
- <choice>
- <!-- Short Arrowhead -->
- <value>short</value>
- <!-- Medium Arrowhead -->
- <value>medium</value>
- <!-- Long Arrowhead -->
- <value>long</value>
- </choice>
- </define>
- <define name="ST_StrokeArrowWidth">
- <choice>
- <!-- Narrow Arrowhead -->
- <value>narrow</value>
- <!-- Medium Arrowhead -->
- <value>medium</value>
- <!-- Wide Arrowhead -->
- <value>wide</value>
- </choice>
- </define>
- <define name="ST_StrokeArrowType">
- <choice>
- <!-- No Arrowhead -->
- <value>none</value>
- <!-- Block Arrowhead -->
- <value>block</value>
- <!-- Classic Arrowhead -->
- <value>classic</value>
- <!-- Oval Arrowhead -->
- <value>oval</value>
- <!-- Diamond Arrowhead -->
- <value>diamond</value>
- <!-- Open Arrowhead -->
- <value>open</value>
- </choice>
- </define>
- <define name="ST_ImageAspect">
- <choice>
- <!-- Ignore Aspect Ratio -->
- <value>ignore</value>
- <!-- At Most -->
- <value>atMost</value>
- <!-- At Least -->
- <value>atLeast</value>
- </choice>
- </define>
- <define name="ST_TrueFalseBlank">
- <choice>
- <!-- Logical True -->
- <value>t</value>
- <!-- Logical False -->
- <value>f</value>
- <!-- Logical True -->
- <value>true</value>
- <!-- Logical False -->
- <value>false</value>
- <!-- Blank - Logical False -->
- <value/>
- </choice>
- </define>
- <define name="BUILT_IN_ANY_TYPE">
- <choice>
- <element>
- <ref name="BUILT_IN_ANY_TYPE"/>
- </element>
- <data type="string"/>
- </choice>
- </define>
- </grammar>
- <resource name="ST_FillType" resource="List">
- <value tokenid="ooxml:Value_vml_ST_FillType_solid">solid</value>
- <value tokenid="ooxml:Value_vml_ST_FillType_gradient">gradient</value>
- <value tokenid="ooxml:Value_vml_ST_FillType_gradientRadial">gradientRadial</value>
- <value tokenid="ooxml:Value_vml_ST_FillType_tile">tile</value>
- <value tokenid="ooxml:Value_vml_ST_FillType_pattern">pattern</value>
- <value tokenid="ooxml:Value_vml_ST_FillType_frame">frame</value>
- </resource>
- <resource name="ST_StrokeLineStyle" resource="List">
- <value tokenid="ooxml:Value_vml_ST_StrokeLineStyle_single">single</value>
- <value tokenid="ooxml:Value_vml_ST_StrokeLineStyle_thinThin">thinThin</value>
- <value tokenid="ooxml:Value_vml_ST_StrokeLineStyle_thinThick">thinThick</value>
- <value tokenid="ooxml:Value_vml_ST_StrokeLineStyle_thickThin">thickThin</value>
- <value tokenid="ooxml:Value_vml_ST_StrokeLineStyle_thickBetweenThin">thickBetweenThin</value>
- </resource>
- <resource name="ST_StrokeJoinStyle" resource="List">
- <value tokenid="ooxml:Value_vml_ST_StrokeJoinStyle_round">round</value>
- <value tokenid="ooxml:Value_vml_ST_StrokeJoinStyle_bevel">bevel</value>
- <value tokenid="ooxml:Value_vml_ST_StrokeJoinStyle_miter">miter</value>
- </resource>
- <resource name="ST_StrokeEndCap" resource="List">
- <value tokenid="ooxml:Value_vml_ST_StrokeEndCap_flat">flat</value>
- <value tokenid="ooxml:Value_vml_ST_StrokeEndCap_square">square</value>
- <value tokenid="ooxml:Value_vml_ST_StrokeEndCap_round">round</value>
- </resource>
- <resource name="ST_StrokeArrowLength" resource="List">
- <value tokenid="ooxml:Value_vml_ST_StrokeArrowLength_short">short</value>
- <value tokenid="ooxml:Value_vml_ST_StrokeArrowLength_medium">medium</value>
- <value tokenid="ooxml:Value_vml_ST_StrokeArrowLength_long">long</value>
- </resource>
- <resource name="ST_StrokeArrowWidth" resource="List">
- <value tokenid="ooxml:Value_vml_ST_StrokeArrowWidth_narrow">narrow</value>
- <value tokenid="ooxml:Value_vml_ST_StrokeArrowWidth_medium">medium</value>
- <value tokenid="ooxml:Value_vml_ST_StrokeArrowWidth_wide">wide</value>
- </resource>
- <resource name="ST_StrokeArrowType" resource="List">
- <value tokenid="ooxml:Value_vml_ST_StrokeArrowType_none">none</value>
- <value tokenid="ooxml:Value_vml_ST_StrokeArrowType_block">block</value>
- <value tokenid="ooxml:Value_vml_ST_StrokeArrowType_classic">classic</value>
- <value tokenid="ooxml:Value_vml_ST_StrokeArrowType_oval">oval</value>
- <value tokenid="ooxml:Value_vml_ST_StrokeArrowType_diamond">diamond</value>
- <value tokenid="ooxml:Value_vml_ST_StrokeArrowType_open">open</value>
- </resource>
- <resource name="ST_ImageAspect" resource="List">
- <value tokenid="ooxml:Value_vml_ST_ImageAspect_ignore">ignore</value>
- <value tokenid="ooxml:Value_vml_ST_ImageAspect_atMost">atMost</value>
- <value tokenid="ooxml:Value_vml_ST_ImageAspect_atLeast">atLeast</value>
- </resource>
- <resource name="ST_TrueFalseBlank" resource="List">
- <value tokenid="ooxml:Value_vml_ST_TrueFalseBlank_t">t</value>
- <value tokenid="ooxml:Value_vml_ST_TrueFalseBlank_f">f</value>
- <value tokenid="ooxml:Value_vml_ST_TrueFalseBlank_true">true</value>
- <value tokenid="ooxml:Value_vml_ST_TrueFalseBlank_false">false</value>
- <value tokenid="ooxml:Value_vml_ST_TrueFalseBlank_"/>
- </resource>
- <resource name="CT_Background" resource="Properties">
- <attribute name="id" tokenid="ooxml:CT_Background_id"/>
- </resource>
- <resource name="background" resource="Properties">
- <element name="background" tokenid="ooxml:background_background"/>
- </resource>
- </namespace>
- <namespace name="vml-officeDrawing">
- <start name="shapedefaults"/>
- <start name="shapelayout"/>
- <start name="signatureline"/>
- <start name="ink"/>
- <start name="diagram"/>
- <start name="skew"/>
- <start name="extrusion"/>
- <start name="callout"/>
- <start name="lock"/>
- <start name="OLEObject"/>
- <start name="complex"/>
- <start name="left"/>
- <start name="top"/>
- <start name="right"/>
- <start name="bottom"/>
- <start name="column"/>
- <start name="clippath"/>
- <start name="fill"/>
- <grammar xmlns="http://relaxng.org/ns/structure/1.0" ns="urn:schemas-microsoft-com:office:office" >
- <include href="vml-main"/>
- <!-- External schema: http://schemas.openxmlformats.org/officeDocument/2006/relationships -->
- <!-- start = shapedefaults | shapelayout | signatureline | ink | diagram | skew | extrusion | callout | lock | OLEObject | complex | left | top | right | bottom | column | clippath | fill -->
- <define name="bwmode">
- <attribute name="bwmode"/>
- </define>
- <define name="bwpure">
- <attribute name="bwpure"/>
- </define>
- <define name="bwnormal">
- <attribute name="bwnormal"/>
- </define>
- <define name="targetscreensize">
- <attribute name="targetscreensize"/>
- </define>
- <define name="insetmode">
- <attribute name="insetmode"/>
- </define>
- <define name="spt">
- <attribute name="spt">
- <data type="float"/>
- </attribute>
- </define>
- <define name="wrapcoords">
- <attribute name="wrapcoords">
- <data type="string"/>
- </attribute>
- </define>
- <define name="oned">
- <attribute name="oned"/>
- </define>
- <define name="regroupid">
- <attribute name="regroupid">
- <data type="integer"/>
- </attribute>
- </define>
- <define name="doubleclicknotify">
- <attribute name="doubleclicknotify"/>
- </define>
- <define name="connectortype">
- <attribute name="connectortype"/>
- </define>
- <define name="button">
- <attribute name="button"/>
- </define>
- <define name="userhidden">
- <attribute name="userhidden"/>
- </define>
- <define name="forcedash">
- <attribute name="forcedash"/>
- </define>
- <define name="oleicon">
- <attribute name="oleicon"/>
- </define>
- <define name="ole">
- <attribute name="ole"/>
- </define>
- <define name="preferrelative">
- <attribute name="preferrelative"/>
- </define>
- <define name="cliptowrap">
- <attribute name="cliptowrap"/>
- </define>
- <define name="clip">
- <attribute name="clip"/>
- </define>
- <define name="bullet">
- <attribute name="bullet"/>
- </define>
- <define name="hr">
- <attribute name="hr"/>
- </define>
- <define name="hrstd">
- <attribute name="hrstd"/>
- </define>
- <define name="hrnoshade">
- <attribute name="hrnoshade"/>
- </define>
- <define name="hrpct">
- <attribute name="hrpct">
- <data type="float"/>
- </attribute>
- </define>
- <define name="hralign">
- <attribute name="hralign"/>
- </define>
- <define name="allowincell">
- <attribute name="allowincell"/>
- </define>
- <define name="allowoverlap">
- <attribute name="allowoverlap"/>
- </define>
- <define name="userdrawn">
- <attribute name="userdrawn"/>
- </define>
- <define name="bordertopcolor">
- <attribute name="bordertopcolor">
- <data type="string"/>
- </attribute>
- </define>
- <define name="borderleftcolor">
- <attribute name="borderleftcolor">
- <data type="string"/>
- </attribute>
- </define>
- <define name="borderbottomcolor">
- <attribute name="borderbottomcolor">
- <data type="string"/>
- </attribute>
- </define>
- <define name="borderrightcolor">
- <attribute name="borderrightcolor">
- <data type="string"/>
- </attribute>
- </define>
- <define name="connecttype">
- <attribute name="connecttype"/>
- </define>
- <define name="connectlocs">
- <attribute name="connectlocs">
- <data type="string"/>
- </attribute>
- </define>
- <define name="connectangles">
- <attribute name="connectangles">
- <data type="string"/>
- </attribute>
- </define>
- <define name="master">
- <attribute name="master">
- <data type="string"/>
- </attribute>
- </define>
- <define name="extrusionok">
- <attribute name="extrusionok"/>
- </define>
- <define name="href">
- <attribute name="href">
- <data type="string"/>
- </attribute>
- </define>
- <define name="althref">
- <attribute name="althref">
- <data type="string"/>
- </attribute>
- </define>
- <define name="title">
- <attribute name="title">
- <data type="string"/>
- </attribute>
- </define>
- <define name="singleclick">
- <attribute name="singleclick"/>
- </define>
- <define name="oleid">
- <attribute name="oleid">
- <data type="float"/>
- </attribute>
- </define>
- <define name="detectmouseclick">
- <attribute name="detectmouseclick"/>
- </define>
- <define name="movie">
- <attribute name="movie">
- <data type="float"/>
- </attribute>
- </define>
- <define name="spid">
- <attribute name="spid">
- <data type="string"/>
- </attribute>
- </define>
- <define name="opacity2">
- <attribute name="opacity2">
- <data type="string"/>
- </attribute>
- </define>
- <define name="relid">
- <attribute name="relid"/>
- </define>
- <define name="dgmlayout">
- <attribute name="dgmlayout">
- <data type="integer"/>
- </attribute>
- </define>
- <define name="dgmnodekind">
- <attribute name="dgmnodekind">
- <data type="integer"/>
- </attribute>
- </define>
- <define name="dgmlayoutmru">
- <attribute name="dgmlayoutmru">
- <data type="integer"/>
- </attribute>
- </define>
- <define name="gfxdata">
- <attribute name="gfxdata">
- <data type="base64Binary"/>
- </attribute>
- </define>
- <define name="tableproperties">
- <attribute name="tableproperties">
- <data type="string"/>
- </attribute>
- </define>
- <define name="tablelimits">
- <attribute name="tablelimits">
- <data type="string"/>
- </attribute>
- </define>
- <define name="shapedefaults">
- <element name="shapedefaults">
- <ref name="CT_ShapeDefaults"/>
- </element>
- </define>
- <define name="shapelayout">
- <element name="shapelayout">
- <ref name="CT_ShapeLayout"/>
- </element>
- </define>
- <define name="signatureline">
- <element name="signatureline">
- <ref name="CT_SignatureLine"/>
- </element>
- </define>
- <define name="ink">
- <element name="ink">
- <ref name="CT_Ink"/>
- </element>
- </define>
- <define name="diagram">
- <element name="diagram">
- <ref name="CT_Diagram"/>
- </element>
- </define>
- <define name="CT_ShapeDefaults">
- <element name="v:fill">
- <ref name="BUILT_IN_ANY_TYPE"/>
- </element>
- <element name="v:stroke">
- <ref name="BUILT_IN_ANY_TYPE"/>
- </element>
- <element name="v:textbox">
- <ref name="BUILT_IN_ANY_TYPE"/>
- </element>
- <element name="v:shadow">
- <ref name="BUILT_IN_ANY_TYPE"/>
- </element>
- <ref name="skew"/>
- <ref name="extrusion"/>
- <ref name="callout"/>
- <ref name="lock"/>
- <element name="colormru">
- <ref name="CT_ColorMru"/>
- </element>
- <element name="colormenu">
- <ref name="CT_ColorMenu"/>
- </element>
- <ref name="BUILT_IN_ANY_TYPE"/>
- <attribute name="spidmax">
- <data type="integer"/>
- </attribute>
- <attribute name="style">
- <data type="string"/>
- </attribute>
- <attribute name="fill">
- <data type="string"/>
- </attribute>
- <attribute name="fillcolor">
- <data type="string"/>
- </attribute>
- <attribute name="stroke">
- <data type="string"/>
- </attribute>
- <attribute name="strokecolor">
- <data type="string"/>
- </attribute>
- <attribute name="allowincell">
- <data type="string"/>
- </attribute>
- </define>
- <define name="CT_Ink">
- <attribute name="i">
- <data type="base64Binary"/>
- </attribute>
- <attribute name="annotation">
- <data type="string"/>
- </attribute>
- </define>
- <define name="CT_SignatureLine">
- <ref name="BUILT_IN_ANY_TYPE"/>
- <attribute name="issignatureline">
- <data type="string"/>
- </attribute>
- <attribute name="id">
- <data type="string"/>
- </attribute>
- <attribute name="provid">
- <data type="string"/>
- </attribute>
- <attribute name="signinginstructionsset">
- <data type="string"/>
- </attribute>
- <attribute name="allowcomments">
- <data type="string"/>
- </attribute>
- <attribute name="showsigndate">
- <data type="string"/>
- </attribute>
- <attribute name="suggestedsigner">
- <data type="string"/>
- </attribute>
- <attribute name="suggestedsigner2">
- <data type="string"/>
- </attribute>
- <attribute name="suggestedsigneremail">
- <data type="string"/>
- </attribute>
- <attribute name="signinginstructions">
- <data type="string"/>
- </attribute>
- <attribute name="addlxml">
- <data type="string"/>
- </attribute>
- <attribute name="sigprovurl">
- <data type="string"/>
- </attribute>
- </define>
- <define name="CT_ShapeLayout">
- <element name="idmap">
- <ref name="CT_IdMap"/>
- </element>
- <element name="regrouptable">
- <ref name="CT_RegroupTable"/>
- </element>
- <element name="rules">
- <ref name="CT_Rules"/>
- </element>
- <ref name="BUILT_IN_ANY_TYPE"/>
- </define>
- <define name="CT_IdMap">
- <ref name="BUILT_IN_ANY_TYPE"/>
- <attribute name="data">
- <data type="string"/>
- </attribute>
- </define>
- <define name="CT_RegroupTable">
- <element name="entry">
- <ref name="CT_Entry"/>
- </element>
- <ref name="BUILT_IN_ANY_TYPE"/>
- </define>
- <define name="CT_Entry">
- <attribute name="new">
- <data type="int"/>
- </attribute>
- <attribute name="old">
- <data type="int"/>
- </attribute>
- </define>
- <define name="CT_Rules">
- <element name="r">
- <ref name="CT_R"/>
- </element>
- <ref name="BUILT_IN_ANY_TYPE"/>
- </define>
- <define name="CT_R">
- <element name="proxy">
- <ref name="CT_Proxy"/>
- </element>
- <attribute name="id">
- <data type="string"/>
- </attribute>
- <attribute name="type">
- <data type="string"/>
- </attribute>
- <attribute name="how">
- <data type="string"/>
- </attribute>
- <attribute name="idref">
- <data type="string"/>
- </attribute>
- </define>
- <define name="CT_Proxy">
- <attribute name="start">
- <data type="string"/>
- </attribute>
- <attribute name="end">
- <data type="string"/>
- </attribute>
- <attribute name="idref">
- <data type="string"/>
- </attribute>
- <attribute name="connectloc">
- <data type="int"/>
- </attribute>
- </define>
- <define name="CT_Diagram">
- <element name="relationtable">
- <ref name="CT_RelationTable"/>
- </element>
- <ref name="BUILT_IN_ANY_TYPE"/>
- <attribute name="dgmstyle">
- <data type="integer"/>
- </attribute>
- <attribute name="autoformat">
- <data type="string"/>
- </attribute>
- <attribute name="reverse">
- <data type="string"/>
- </attribute>
- <attribute name="autolayout">
- <data type="string"/>
- </attribute>
- <attribute name="dgmscalex">
- <data type="integer"/>
- </attribute>
- <attribute name="dgmscaley">
- <data type="integer"/>
- </attribute>
- <attribute name="dgmfontsize">
- <data type="integer"/>
- </attribute>
- <attribute name="constrainbounds">
- <data type="string"/>
- </attribute>
- <attribute name="dgmbasetextscale">
- <data type="integer"/>
- </attribute>
- </define>
- <define name="CT_RelationTable">
- <element name="rel">
- <ref name="CT_Relation"/>
- </element>
- <ref name="BUILT_IN_ANY_TYPE"/>
- </define>
- <define name="CT_Relation">
- <ref name="BUILT_IN_ANY_TYPE"/>
- <attribute name="idsrc">
- <data type="string"/>
- </attribute>
- <attribute name="iddest">
- <data type="string"/>
- </attribute>
- <attribute name="idcntr">
- <data type="string"/>
- </attribute>
- </define>
- <define name="CT_ColorMru">
- <ref name="BUILT_IN_ANY_TYPE"/>
- <attribute name="colors">
- <data type="string"/>
- </attribute>
- </define>
- <define name="CT_ColorMenu">
- <ref name="BUILT_IN_ANY_TYPE"/>
- <attribute name="strokecolor">
- <data type="string"/>
- </attribute>
- <attribute name="fillcolor">
- <data type="string"/>
- </attribute>
- <attribute name="shadowcolor">
- <data type="string"/>
- </attribute>
- <attribute name="extrusioncolor">
- <data type="string"/>
- </attribute>
- </define>
- <define name="skew">
- <element name="skew">
- <ref name="CT_Skew"/>
- </element>
- </define>
- <define name="extrusion">
- <element name="extrusion">
- <ref name="CT_Extrusion"/>
- </element>
- </define>
- <define name="callout">
- <element name="callout">
- <ref name="CT_Callout"/>
- </element>
- </define>
- <define name="lock">
- <element name="lock">
- <ref name="CT_Lock"/>
- </element>
- </define>
- <define name="OLEObject">
- <element name="OLEObject">
- <ref name="CT_OLEObject"/>
- </element>
- </define>
- <define name="complex">
- <element name="complex">
- <ref name="CT_Complex"/>
- </element>
- </define>
- <define name="left">
- <element name="left">
- <ref name="CT_StrokeChild"/>
- </element>
- </define>
- <define name="top">
- <element name="top">
- <ref name="CT_StrokeChild"/>
- </element>
- </define>
- <define name="right">
- <element name="right">
- <ref name="CT_StrokeChild"/>
- </element>
- </define>
- <define name="bottom">
- <element name="bottom">
- <ref name="CT_StrokeChild"/>
- </element>
- </define>
- <define name="column">
- <element name="column">
- <ref name="CT_StrokeChild"/>
- </element>
- </define>
- <define name="clippath">
- <element name="clippath">
- <ref name="CT_ClipPath"/>
- </element>
- </define>
- <define name="fill">
- <element name="fill">
- <ref name="CT_Fill"/>
- </element>
- </define>
- <define name="CT_Skew">
- <ref name="BUILT_IN_ANY_TYPE"/>
- <attribute name="id">
- <data type="string"/>
- </attribute>
- <attribute name="on">
- <data type="string"/>
- </attribute>
- <attribute name="offset">
- <data type="string"/>
- </attribute>
- <attribute name="origin">
- <data type="string"/>
- </attribute>
- <attribute name="matrix">
- <data type="string"/>
- </attribute>
- </define>
- <define name="CT_Extrusion">
- <ref name="BUILT_IN_ANY_TYPE"/>
- <attribute name="on">
- <data type="string"/>
- </attribute>
- <attribute name="type">
- <data type="string"/>
- </attribute>
- <attribute name="render">
- <data type="string"/>
- </attribute>
- <attribute name="viewpointorigin">
- <data type="string"/>
- </attribute>
- <attribute name="viewpoint">
- <data type="string"/>
- </attribute>
- <attribute name="plane">
- <data type="string"/>
- </attribute>
- <attribute name="skewangle">
- <data type="float"/>
- </attribute>
- <attribute name="skewamt">
- <data type="string"/>
- </attribute>
- <attribute name="foredepth">
- <data type="string"/>
- </attribute>
- <attribute name="backdepth">
- <data type="string"/>
- </attribute>
- <attribute name="orientation">
- <data type="string"/>
- </attribute>
- <attribute name="orientationangle">
- <data type="float"/>
- </attribute>
- <attribute name="lockrotationcenter">
- <data type="string"/>
- </attribute>
- <attribute name="autorotationcenter">
- <data type="string"/>
- </attribute>
- <attribute name="rotationcenter">
- <data type="string"/>
- </attribute>
- <attribute name="rotationangle">
- <data type="string"/>
- </attribute>
- <attribute name="colormode">
- <data type="string"/>
- </attribute>
- <attribute name="color">
- <data type="string"/>
- </attribute>
- <attribute name="shininess">
- <data type="float"/>
- </attribute>
- <attribute name="specularity">
- <data type="string"/>
- </attribute>
- <attribute name="diffusity">
- <data type="string"/>
- </attribute>
- <attribute name="metal">
- <data type="string"/>
- </attribute>
- <attribute name="edge">
- <data type="string"/>
- </attribute>
- <attribute name="facet">
- <data type="string"/>
- </attribute>
- <attribute name="lightface">
- <data type="string"/>
- </attribute>
- <attribute name="brightness">
- <data type="string"/>
- </attribute>
- <attribute name="lightposition">
- <data type="string"/>
- </attribute>
- <attribute name="lightlevel">
- <data type="string"/>
- </attribute>
- <attribute name="lightharsh">
- <data type="string"/>
- </attribute>
- <attribute name="lightposition2">
- <data type="string"/>
- </attribute>
- <attribute name="lightlevel2">
- <data type="string"/>
- </attribute>
- <attribute name="lightharsh2">
- <data type="string"/>
- </attribute>
- </define>
- <define name="CT_Callout">
- <ref name="BUILT_IN_ANY_TYPE"/>
- <attribute name="on">
- <data type="string"/>
- </attribute>
- <attribute name="type">
- <data type="string"/>
- </attribute>
- <attribute name="gap">
- <data type="string"/>
- </attribute>
- <attribute name="angle">
- <data type="string"/>
- </attribute>
- <attribute name="dropauto">
- <data type="string"/>
- </attribute>
- <attribute name="drop">
- <data type="string"/>
- </attribute>
- <attribute name="distance">
- <data type="string"/>
- </attribute>
- <attribute name="lengthspecified">
- <data type="string"/>
- </attribute>
- <attribute name="length">
- <data type="string"/>
- </attribute>
- <attribute name="accentbar">
- <data type="string"/>
- </attribute>
- <attribute name="textborder">
- <data type="string"/>
- </attribute>
- <attribute name="minusx">
- <data type="string"/>
- </attribute>
- <attribute name="minusy">
- <data type="string"/>
- </attribute>
- </define>
- <define name="CT_Lock">
- <ref name="BUILT_IN_ANY_TYPE"/>
- <attribute name="position">
- <data type="string"/>
- </attribute>
- <attribute name="selection">
- <data type="string"/>
- </attribute>
- <attribute name="grouping">
- <data type="string"/>
- </attribute>
- <attribute name="ungrouping">
- <data type="string"/>
- </attribute>
- <attribute name="rotation">
- <data type="string"/>
- </attribute>
- <attribute name="cropping">
- <data type="string"/>
- </attribute>
- <attribute name="verticies">
- <data type="string"/>
- </attribute>
- <attribute name="adjusthandles">
- <data type="string"/>
- </attribute>
- <attribute name="text">
- <data type="string"/>
- </attribute>
- <attribute name="aspectratio">
- <data type="string"/>
- </attribute>
- <attribute name="shapetype">
- <data type="string"/>
- </attribute>
- </define>
- <define name="CT_OLEObject">
- <element name="LinkType">
- <ref name="ST_OLELinkType"/>
- </element>
- <element name="LockedField">
- <ref name="ST_TrueFalseBlank"/>
- </element>
- <element name="FieldCodes">
- <data type="string"/>
- </element>
- <attribute name="Type">
- <data type="string"/>
- </attribute>
- <attribute name="ProgID">
- <data type="string"/>
- </attribute>
- <attribute name="ShapeID">
- <data type="string"/>
- </attribute>
- <attribute name="DrawAspect">
- <data type="string"/>
- </attribute>
- <attribute name="ObjectID">
- <data type="string"/>
- </attribute>
- <attribute name="r:id">
- <data type="string"/>
- </attribute>
- <attribute name="UpdateMode">
- <data type="string"/>
- </attribute>
- </define>
- <define name="CT_Complex">
- <ref name="BUILT_IN_ANY_TYPE"/>
- </define>
- <define name="CT_StrokeChild">
- <ref name="BUILT_IN_ANY_TYPE"/>
- <attribute name="on">
- <data type="string"/>
- </attribute>
- <attribute name="weight">
- <data type="string"/>
- </attribute>
- <attribute name="color">
- <data type="string"/>
- </attribute>
- <attribute name="color2">
- <data type="string"/>
- </attribute>
- <attribute name="opacity">
- <data type="string"/>
- </attribute>
- <attribute name="linestyle">
- <ref name="ST_StrokeLineStyle"/>
- </attribute>
- <attribute name="miterlimit">
- <data type="decimal"/>
- </attribute>
- <attribute name="joinstyle">
- <ref name="ST_StrokeJoinStyle"/>
- </attribute>
- <attribute name="endcap">
- <ref name="ST_StrokeEndCap"/>
- </attribute>
- <attribute name="dashstyle">
- <data type="string"/>
- </attribute>
- <attribute name="insetpen">
- <data type="string"/>
- </attribute>
- <attribute name="filltype">
- <ref name="ST_FillType"/>
- </attribute>
- <attribute name="src">
- <data type="string"/>
- </attribute>
- <attribute name="imageaspect">
- <ref name="ST_ImageAspect"/>
- </attribute>
- <attribute name="imagesize">
- <data type="string"/>
- </attribute>
- <attribute name="imagealignshape">
- <data type="string"/>
- </attribute>
- <attribute name="startarrow">
- <ref name="ST_StrokeArrowType"/>
- </attribute>
- <attribute name="startarrowwidth">
- <ref name="ST_StrokeArrowWidth"/>
- </attribute>
- <attribute name="startarrowlength">
- <ref name="ST_StrokeArrowLength"/>
- </attribute>
- <attribute name="endarrow">
- <ref name="ST_StrokeArrowType"/>
- </attribute>
- <attribute name="endarrowwidth">
- <ref name="ST_StrokeArrowWidth"/>
- </attribute>
- <attribute name="endarrowlength">
- <ref name="ST_StrokeArrowLength"/>
- </attribute>
- <ref name="href"/>
- <ref name="althref"/>
- <ref name="title"/>
- <ref name="forcedash"/>
- </define>
- <define name="CT_ClipPath">
- <attribute name="v">
- <data type="string"/>
- </attribute>
- </define>
- <define name="CT_Fill">
- <ref name="BUILT_IN_ANY_TYPE"/>
- <attribute name="type">
- <data type="string"/>
- </attribute>
- </define>
- <define name="ST_Angle">
- <choice>
- <!-- Any Angle -->
- <value>any</value>
- <!-- 30 degrees -->
- <value>30</value>
- <!-- 45 degrees -->
- <value>45</value>
- <!-- 60 degrees -->
- <value>60</value>
- <!-- 90 degrees -->
- <value>90</value>
- <!-- Automatic Angle -->
- <value>auto</value>
- </choice>
- </define>
- <define name="ST_OLELinkType">
- <choice>
- <!-- Other Image -->
- <value>Picture</value>
- <!-- Bitmap Image -->
- <value>Bitmap</value>
- <!-- Enhanced Metafile Image -->
- <value>EnhancedMetaFile</value>
- </choice>
- </define>
- <define name="ST_TrueFalseBlank">
- <choice>
- <!-- Blank - Logical False -->
- <value/>
- <!-- Logical True -->
- <value>t</value>
- <!-- Logical False -->
- <value>f</value>
- <!-- Logical True -->
- <value>true</value>
- <!-- Logical False -->
- <value>false</value>
- </choice>
- </define>
- <define name="ST_FillType">
- <choice>
- <!-- Centered Radial Gradient -->
- <value>gradientCenter</value>
- <!-- Solid Fill -->
- <value>solid</value>
- <!-- Image Pattern -->
- <value>pattern</value>
- <!-- Tiled Image -->
- <value>tile</value>
- <!-- Stretch Image to Fit -->
- <value>frame</value>
- <!-- Unscaled Gradient -->
- <value>gradientUnscaled</value>
- <!-- Radial Gradient -->
- <value>gradientRadial</value>
- <!-- Linear Gradient -->
- <value>gradient</value>
- <!-- Use Background Fill -->
- <value>background</value>
- </choice>
- </define>
- <define name="BUILT_IN_ANY_TYPE">
- <choice>
- <element>
- <ref name="BUILT_IN_ANY_TYPE"/>
- </element>
- <data type="string"/>
- </choice>
- </define>
- </grammar>
- <resource name="OLEObject" resource="Properties">
- <element name="OLEObject" tokenid="ooxml:OLEObject_OLEObject"/>
- </resource>
- <resource name="CT_OLEObject" resource="Properties">
- <element name="LinkType" tokenid="ooxml:CT_OLEObject_LinkType"/>
- <element name="LockedField" tokenid="ooxml:CT_OLEObject_LockedField"/>
- <element name="FieldCodes" tokenid="ooxml:CT_OLEObject_FieldCodes"/>
- <attribute name="Type" tokenid="ooxml:CT_OLEObject_Type"/>
- <attribute name="ProgID" tokenid="ooxml:CT_OLEObject_ProgID"/>
- <attribute name="ShapeID" tokenid="ooxml:CT_OLEObject_ShapeID"/>
- <attribute name="DrawAspect" tokenid="ooxml:CT_OLEObject_DrawAspect"/>
- <attribute name="ObjectID" tokenid="ooxml:CT_OLEObject_ObjectID"/>
- <attribute name="r:id" tokenid="ooxml:CT_OLEObject_r_id"/>
- <attribute name="UpdateMode" tokenid="ooxml:CT_OLEObject_UpdateMode"/>
- <action name="end" action="handleOLE"/>
- </resource>
- <resource name="ST_Angle" resource="List">
- <value tokenid="ooxml:Value_vmlOffice_ST_Angle_any">any</value>
- <value tokenid="ooxml:Value_vmlOffice_ST_Angle_30">30</value>
- <value tokenid="ooxml:Value_vmlOffice_ST_Angle_45">45</value>
- <value tokenid="ooxml:Value_vmlOffice_ST_Angle_60">60</value>
- <value tokenid="ooxml:Value_vmlOffice_ST_Angle_90">90</value>
- <value tokenid="ooxml:Value_vmlOffice_ST_Angle_auto">auto</value>
- </resource>
- <resource name="ST_OLELinkType" resource="List">
- <value tokenid="ooxml:Value_vmlOffice_ST_OLELinkType_Picture">Picture</value>
- <value tokenid="ooxml:Value_vmlOffice_ST_OLELinkType_Bitmap">Bitmap</value>
- <value tokenid="ooxml:Value_vmlOffice_ST_OLELinkType_EnhancedMetaFile">EnhancedMetaFile</value>
- </resource>
- <resource name="ST_TrueFalseBlank" resource="List">
- <value tokenid="ooxml:Value_vmlOffice_ST_TrueFalseBlank_"/>
- <value tokenid="ooxml:Value_vmlOffice_ST_TrueFalseBlank_t">t</value>
- <value tokenid="ooxml:Value_vmlOffice_ST_TrueFalseBlank_f">f</value>
- <value tokenid="ooxml:Value_vmlOffice_ST_TrueFalseBlank_true">true</value>
- <value tokenid="ooxml:Value_vmlOffice_ST_TrueFalseBlank_false">false</value>
- </resource>
- <resource name="ST_FillType" resource="List">
- <value tokenid="ooxml:Value_vmlOffice_ST_FillType_gradientCenter">gradientCenter</value>
- <value tokenid="ooxml:Value_vmlOffice_ST_FillType_solid">solid</value>
- <value tokenid="ooxml:Value_vmlOffice_ST_FillType_pattern">pattern</value>
- <value tokenid="ooxml:Value_vmlOffice_ST_FillType_tile">tile</value>
- <value tokenid="ooxml:Value_vmlOffice_ST_FillType_frame">frame</value>
- <value tokenid="ooxml:Value_vmlOffice_ST_FillType_gradientUnscaled">gradientUnscaled</value>
- <value tokenid="ooxml:Value_vmlOffice_ST_FillType_gradientRadial">gradientRadial</value>
- <value tokenid="ooxml:Value_vmlOffice_ST_FillType_gradient">gradient</value>
- <value tokenid="ooxml:Value_vmlOffice_ST_FillType_background">background</value>
- </resource>
- </namespace>
- <namespace name="vml-wordprocessingDrawing">
- <start name="bordertop"/>
- <start name="borderleft"/>
- <start name="borderright"/>
- <start name="borderbottom"/>
- <start name="wrap"/>
- <start name="anchorlock"/>
- <grammar xmlns="http://relaxng.org/ns/structure/1.0" ns="urn:schemas-microsoft-com:office:word">
- <!-- ISO RELAX NG Schema -->
- <!-- start = bordertop | borderleft | borderright | borderbottom | wrap | anchorlock -->
- <define name="bordertop">
- <element name="bordertop">
- <ref name="CT_Border"/>
- </element>
- </define>
- <define name="borderleft">
- <element name="borderleft">
- <ref name="CT_Border"/>
- </element>
- </define>
- <define name="borderright">
- <element name="borderright">
- <ref name="CT_Border"/>
- </element>
- </define>
- <define name="borderbottom">
- <element name="borderbottom">
- <ref name="CT_Border"/>
- </element>
- </define>
- <define name="CT_Border">
- <attribute name="type">
- <data type="string"/>
- </attribute>
- <attribute name="width">
- <data type="positiveInteger"/>
- </attribute>
- <attribute name="shadow">
- <data type="string"/>
- </attribute>
- </define>
- <define name="wrap">
- <element name="wrap">
- <ref name="CT_Wrap"/>
- </element>
- </define>
- <define name="CT_Wrap">
- <attribute name="type">
- <ref name="ST_WrapType"/>
- </attribute>
- <attribute name="side">
- <ref name="ST_WrapSide"/>
- </attribute>
- <attribute name="anchorx">
- <ref name="ST_HorizontalAnchor"/>
- </attribute>
- <attribute name="anchory">
- <ref name="ST_VerticalAnchor"/>
- </attribute>
- </define>
- <define name="anchorlock">
- <element name="anchorlock">
- <ref name="CT_AnchorLock"/>
- </element>
- </define>
- <define name="CT_AnchorLock">
- </define>
- <define name="ST_WrapType">
- <choice>
- <!-- Top and bottom wrapping -->
- <value>topAndBottom</value>
- <!-- Square wrapping -->
- <value>square</value>
- <!-- No wrapping -->
- <value>none</value>
- <!-- Tight wrapping -->
- <value>tight</value>
- <!-- Through wrapping -->
- <value>through</value>
- </choice>
- </define>
- <define name="ST_WrapSide">
- <choice>
- <!-- Both sides -->
- <value>both</value>
- <!-- Left side -->
- <value>left</value>
- <!-- Right side -->
- <value>right</value>
- <!-- Largest side -->
- <value>largest</value>
- </choice>
- </define>
- <define name="ST_HorizontalAnchor">
- <choice>
- <!-- Margin -->
- <value>margin</value>
- <!-- Page -->
- <value>page</value>
- <!-- Text -->
- <value>text</value>
- <!-- Character -->
- <value>char</value>
- </choice>
- </define>
- <define name="ST_VerticalAnchor">
- <choice>
- <!-- Margin -->
- <value>margin</value>
- <!-- Page -->
- <value>page</value>
- <!-- Text -->
- <value>text</value>
- <!-- Line -->
- <value>line</value>
- </choice>
- </define>
- </grammar>
- <resource name="wrap" resource="Properties">
- <element name="wrap" tokenid="ooxml:wrap_wrap"/>
- </resource>
- <resource name="CT_Wrap" resource="Properties">
- <attribute name="type" tokenid="ooxml:CT_Wrap_type"/>
- <attribute name="side" tokenid="ooxml:CT_Wrap_side"/>
- <attribute name="anchorx" tokenid="ooxml:CT_Wrap_anchorx"/>
- <attribute name="anchory" tokenid="ooxml:CT_Wrap_anchory"/>
- </resource>
- <resource name="ST_WrapType" resource="List">
- <value tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_WrapType_topAndBottom">topAndBottom</value>
- <value tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_WrapType_square">square</value>
- <value tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_WrapType_none">none</value>
- <value tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_WrapType_tight">tight</value>
- <value tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_WrapType_through">through</value>
- </resource>
- <resource name="ST_WrapSide" resource="List">
- <value tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_WrapSide_both">both</value>
- <value tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_WrapSide_left">left</value>
- <value tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_WrapSide_right">right</value>
- <value tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_WrapSide_largest">largest</value>
- </resource>
- <resource name="ST_HorizontalAnchor" resource="List">
- <value tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_HorizontalAnchor_margin">margin</value>
- <value tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_HorizontalAnchor_page">page</value>
- <value tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_HorizontalAnchor_text">text</value>
- <value tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_HorizontalAnchor_char">char</value>
- </resource>
- <resource name="ST_VerticalAnchor" resource="List">
- <value tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_VerticalAnchor_margin">margin</value>
- <value tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_VerticalAnchor_page">page</value>
- <value tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_VerticalAnchor_text">text</value>
- <value tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_VerticalAnchor_line">line</value>
- </resource>
- </namespace>
- <namespace name="wml">
- <start name="recipients"/>
- <start name="txbxContent"/>
- <start name="comments"/>
- <start name="footnotes"/>
- <start name="endnotes"/>
- <start name="hdr"/>
- <start name="ftr"/>
- <start name="settings"/>
- <start name="webSettings"/>
- <start name="fonts"/>
- <start name="numbering"/>
- <start name="styles"/>
- <start name="document"/>
- <start name="glossaryDocument"/>
- <grammar xmlns="http://relaxng.org/ns/structure/1.0" ns="http://schemas.openxmlformats.org/wordprocessingml/2006/main" attributeFormDefault="qualified">
- <include href="shared-math"/>
- <include href="dml-wordprocessingDrawing"/>
- <include href="shared-relationshipReference"/>
- <!-- start = recipients | txbxContent | comments | footnotes | endnotes | hdr | ftr | settings | webSettings | fonts | numbering | styles | document | glossaryDocument -->
- <define name="CT_Empty">
- </define>
- <define name="ST_OnOff">
- <choice>
- <!-- True -->
- <value>true</value>
- <!-- False -->
- <value>false</value>
- <!-- True -->
- <value>on</value>
- <!-- False -->
- <value>off</value>
- <!-- False -->
- <value>0</value>
- <!-- True -->
- <value>1</value>
- </choice>
- </define>
- <define name="CT_OnOff">
- <attribute name="val">
- <ref name="ST_OnOff"/>
- </attribute>
- </define>
- <define name="ST_LongHexNumber">
- <data type="hexBinary"/>
- </define>
- <define name="CT_LongHexNumber">
- <attribute name="val">
- <ref name="ST_LongHexNumber"/>
- </attribute>
- </define>
- <define name="ST_ShortHexNumber">
- <data type="hexBinary"/>
- </define>
- <define name="CT_ShortHexNumber">
- <attribute name="val">
- <ref name="ST_ShortHexNumber"/>
- </attribute>
- </define>
- <define name="ST_UcharHexNumber">
- <data type="hexBinary"/>
- </define>
- <define name="CT_UcharHexNumber">
- <attribute name="val">
- <ref name="ST_UcharHexNumber"/>
- </attribute>
- </define>
- <define name="ST_DecimalNumber">
- <data type="integer"/>
- </define>
- <define name="CT_DecimalNumber">
- <attribute name="val">
- <ref name="ST_DecimalNumber"/>
- </attribute>
- </define>
- <define name="ST_UnsignedDecimalNumber">
- <data type="unsignedLong"/>
- </define>
-<!-- MS documentation states that TwipsMeasure is a positive value
- but it doesn't indicate how to handle an invalid negative
- value. So, ST_TwipsMeasure matches the documented type,
- and the extension (_asSigned, _asZero, or perhaps _asAbsolute)
- indicates how MS handles it in practice.
-
- Historically, LO has treated TwipsMeasure as signed,
- i.e. that negative numbers are allowed and treated as negative,
- so that is the default handling.
--->
- <define name="ST_TwipsMeasure">
- <data type="unsignedLong"/>
- </define>
- <define name="ST_TwipsMeasure_asSigned">
- <data type="unsignedLong"/>
- </define>
- <define name="ST_TwipsMeasure_asZero">
- <data type="unsignedLong"/>
- </define>
- <define name="CT_TwipsMeasure">
- <attribute name="val">
- <ref name="ST_TwipsMeasure"/>
- </attribute>
- </define>
- <define name="ST_SignedTwipsMeasure">
- <data type="integer"/>
- </define>
- <define name="CT_SignedTwipsMeasure">
- <attribute name="val">
- <ref name="ST_SignedTwipsMeasure"/>
- </attribute>
- </define>
- <define name="ST_PixelsMeasure">
- <data type="unsignedLong"/>
- </define>
- <define name="CT_PixelsMeasure">
- <attribute name="val">
- <ref name="ST_PixelsMeasure"/>
- </attribute>
- </define>
- <define name="ST_HpsMeasure">
- <data type="unsignedLong"/>
- </define>
- <define name="CT_HpsMeasure">
- <attribute name="val">
- <ref name="ST_HpsMeasure"/>
- </attribute>
- </define>
- <define name="ST_SignedHpsMeasure">
- <data type="integer"/>
- </define>
- <define name="CT_SignedHpsMeasure">
- <attribute name="val">
- <ref name="ST_SignedHpsMeasure"/>
- </attribute>
- </define>
- <define name="ST_DateTime">
- <data type="dateTime"/>
- </define>
- <define name="CT_MacroName">
- <attribute name="val">
- <data type="string"/>
- </attribute>
- </define>
- <define name="ST_EighthPointMeasure">
- <data type="unsignedLong"/>
- </define>
- <define name="ST_PointMeasure">
- <data type="unsignedLong"/>
- </define>
- <define name="ST_String">
- <data type="string"/>
- </define>
- <define name="CT_String">
- <attribute name="val">
- <data type="string"/>
- </attribute>
- </define>
- <define name="ST_TextScale">
- <data type="integer"/>
- </define>
- <define name="CT_TextScale">
- <attribute name="val">
- <ref name="ST_TextScale"/>
- </attribute>
- </define>
- <define name="ST_HighlightColor">
- <choice>
- <!-- Black Highlighting Color -->
- <value>black</value>
- <!-- Blue Highlighting Color -->
- <value>blue</value>
- <!-- Cyan Highlighting Color -->
- <value>cyan</value>
- <!-- Green Highlighting Color -->
- <value>green</value>
- <!-- Magenta Highlighting Color -->
- <value>magenta</value>
- <!-- Red Highlighting Color -->
- <value>red</value>
- <!-- Yellow Highlighting Color -->
- <value>yellow</value>
- <!-- White Highlighting Color -->
- <value>white</value>
- <!-- Dark Blue Highlighting Color -->
- <value>darkBlue</value>
- <!-- Dark Cyan Highlighting Color -->
- <value>darkCyan</value>
- <!-- Dark Green Highlighting Color -->
- <value>darkGreen</value>
- <!-- Dark Magenta Highlighting Color -->
- <value>darkMagenta</value>
- <!-- Dark Red Highlighting Color -->
- <value>darkRed</value>
- <!-- Dark Yellow Highlighting Color -->
- <value>darkYellow</value>
- <!-- Dark Gray Highlighting Color -->
- <value>darkGray</value>
- <!-- Light Gray Highlighting Color -->
- <value>lightGray</value>
- <!-- No Text Highlighting -->
- <value>none</value>
- </choice>
- </define>
- <define name="CT_Highlight">
- <attribute name="val">
- <ref name="ST_HighlightColor"/>
- </attribute>
- </define>
- <define name="ST_HexColorAuto">
- <choice>
- <!-- Automatically Determined Color -->
- <value>auto</value>
- </choice>
- </define>
- <define name="ST_HexColorRGB">
- <data type="hexBinary"/>
- </define>
- <define name="ST_HexColor">
- <choice>
- <ref name="ST_HexColorAuto"/>
- <ref name="ST_HexColorRGB"/>
- </choice>
- </define>
- <!-- Union -->
- <define name="CT_Color">
- <attribute name="val">
- <ref name="ST_HexColor"/>
- </attribute>
- <attribute name="themeColor">
- <ref name="ST_ThemeColor"/>
- </attribute>
- <attribute name="themeTint">
- <ref name="ST_UcharHexNumber"/>
- </attribute>
- <attribute name="themeShade">
- <ref name="ST_UcharHexNumber"/>
- </attribute>
- </define>
- <define name="ST_LangCode">
- <data type="hexBinary"/>
- </define>
- <define name="ST_Lang">
- <choice>
- <ref name="ST_LangCode"/>
- <ref name="ST_String"/>
- </choice>
- </define>
- <!-- Union -->
- <define name="CT_Lang">
- <attribute name="val">
- <ref name="ST_Lang"/>
- </attribute>
- </define>
- <define name="CT_Guid">
- <attribute name="val">
- <data type="string"/>
- </attribute>
- </define>
- <define name="ST_Underline">
- <choice>
- <!-- Single Underline -->
- <value>single</value>
- <!-- Underline Non-Space Characters Only -->
- <value>words</value>
- <!-- Double Underline -->
- <value>double</value>
- <!-- Thick Underline -->
- <value>thick</value>
- <!-- Dotted Underline -->
- <value>dotted</value>
- <!-- Thick Dotted Underline -->
- <value>dottedHeavy</value>
- <!-- Dashed Underline -->
- <value>dash</value>
- <!-- Thick Dashed Underline -->
- <value>dashedHeavy</value>
- <!-- Long Dashed Underline -->
- <value>dashLong</value>
- <!-- Thick Long Dashed Underline -->
- <value>dashLongHeavy</value>
- <!-- Dash-Dot Underline -->
- <value>dotDash</value>
- <!-- Thick Dash-Dot Underline -->
- <value>dashDotHeavy</value>
- <!-- Dash-Dot-Dot Underline -->
- <value>dotDotDash</value>
- <!-- Thick Dash-Dot-Dot Underline -->
- <value>dashDotDotHeavy</value>
- <!-- Wave Underline -->
- <value>wave</value>
- <!-- Heavy Wave Underline -->
- <value>wavyHeavy</value>
- <!-- Double Wave Underline -->
- <value>wavyDouble</value>
- <!-- No Underline -->
- <value>none</value>
- </choice>
- </define>
- <define name="CT_Underline">
- <attribute name="val">
- <ref name="ST_Underline"/>
- </attribute>
- <attribute name="color">
- <ref name="ST_HexColor"/>
- </attribute>
- <attribute name="themeColor">
- <data type="string"/>
- </attribute>
- <attribute name="themeTint">
- <data type="string"/>
- </attribute>
- <attribute name="themeShade">
- <data type="string"/>
- </attribute>
- </define>
- <define name="ST_TextEffect">
- <choice>
- <!-- Blinking Background Animation -->
- <value>blinkBackground</value>
- <!-- Colored Lights Animation -->
- <value>lights</value>
- <!-- Black Dashed Line Animation -->
- <value>antsBlack</value>
- <!-- Marching Red Ants -->
- <value>antsRed</value>
- <!-- Shimmer Animation -->
- <value>shimmer</value>
- <!-- Sparkling Lights Animation -->
- <value>sparkle</value>
- <!-- No Animation -->
- <value>none</value>
- </choice>
- </define>
- <define name="CT_TextEffect">
- <attribute name="val">
- <ref name="ST_TextEffect"/>
- </attribute>
- </define>
- <define name="ST_Border">
- <choice>
- <!-- No Border -->
- <value>nil</value>
- <!-- No Border -->
- <value>none</value>
- <!-- Single Line Border -->
- <value>single</value>
- <!-- Single Line Border -->
- <value>thick</value>
- <!-- Double Line Border -->
- <value>double</value>
- <!-- Dotted Line Border -->
- <value>dotted</value>
- <!-- Dashed Line Border -->
- <value>dashed</value>
- <!-- Dot Dash Line Border -->
- <value>dotDash</value>
- <!-- Dot Dot Dash Line Border -->
- <value>dotDotDash</value>
- <!-- Triple Line Border -->
- <value>triple</value>
- <!-- Thin, Thick Line Border -->
- <value>thinThickSmallGap</value>
- <!-- Thick, Thin Line Border -->
- <value>thickThinSmallGap</value>
- <!-- Thin, Thick, Thin Line Border -->
- <value>thinThickThinSmallGap</value>
- <!-- Thin, Thick Line Border -->
- <value>thinThickMediumGap</value>
- <!-- Thick, Thin Line Border -->
- <value>thickThinMediumGap</value>
- <!-- Thin, Thick, Thin Line Border -->
- <value>thinThickThinMediumGap</value>
- <!-- Thin, Thick Line Border -->
- <value>thinThickLargeGap</value>
- <!-- Thick, Thin Line Border -->
- <value>thickThinLargeGap</value>
- <!-- Thin, Thick, Thin Line Border -->
- <value>thinThickThinLargeGap</value>
- <!-- Wavy Line Border -->
- <value>wave</value>
- <!-- Double Wave Line Border -->
- <value>doubleWave</value>
- <!-- Dashed Line Border -->
- <value>dashSmallGap</value>
- <!-- Dash Dot Strokes Line Border -->
- <value>dashDotStroked</value>
- <!-- 3D Embossed Line Border -->
- <value>threeDEmboss</value>
- <!-- 3D Engraved Line Border -->
- <value>threeDEngrave</value>
- <!-- Outset Line Border -->
- <value>outset</value>
- <!-- Inset Line Border -->
- <value>inset</value>
- <!-- Apples Art Border -->
- <value>apples</value>
- <!-- Arched Scallops Art Border -->
- <value>archedScallops</value>
- <!-- Baby Pacifier Art Border -->
- <value>babyPacifier</value>
- <!-- Baby Rattle Art Border -->
- <value>babyRattle</value>
- <!-- Three Color Balloons Art Border -->
- <value>balloons3Colors</value>
- <!-- Hot Air Balloons Art Border -->
- <value>balloonsHotAir</value>
- <!-- Black Dash Art Border -->
- <value>basicBlackDashes</value>
- <!-- Black Dot Art Border -->
- <value>basicBlackDots</value>
- <!-- Black Square Art Border -->
- <value>basicBlackSquares</value>
- <!-- Thin Line Art Border -->
- <value>basicThinLines</value>
- <!-- White Dash Art Border -->
- <value>basicWhiteDashes</value>
- <!-- White Dot Art Border -->
- <value>basicWhiteDots</value>
- <!-- White Square Art Border -->
- <value>basicWhiteSquares</value>
- <!-- Wide Inline Art Border -->
- <value>basicWideInline</value>
- <!-- Wide Midline Art Border -->
- <value>basicWideMidline</value>
- <!-- Wide Outline Art Border -->
- <value>basicWideOutline</value>
- <!-- Bats Art Border -->
- <value>bats</value>
- <!-- Birds Art Border -->
- <value>birds</value>
- <!-- Birds Flying Art Border -->
- <value>birdsFlight</value>
- <!-- Cabin Art Border -->
- <value>cabins</value>
- <!-- Cake Art Border -->
- <value>cakeSlice</value>
- <!-- Candy Corn Art Border -->
- <value>candyCorn</value>
- <!-- Knot Work Art Border -->
- <value>celticKnotwork</value>
- <!-- Certificate Banner Art Border -->
- <value>certificateBanner</value>
- <!-- Chain Link Art Border -->
- <value>chainLink</value>
- <!-- Champagne Bottle Art Border -->
- <value>champagneBottle</value>
- <!-- Black and White Bar Art Border -->
- <value>checkedBarBlack</value>
- <!-- Color Checked Bar Art Border -->
- <value>checkedBarColor</value>
- <!-- Checkerboard Art Border -->
- <value>checkered</value>
- <!-- Christmas Tree Art Border -->
- <value>christmasTree</value>
- <!-- Circles And Lines Art Border -->
- <value>circlesLines</value>
- <!-- Circles and Rectangles Art Border -->
- <value>circlesRectangles</value>
- <!-- Wave Art Border -->
- <value>classicalWave</value>
- <!-- Clocks Art Border -->
- <value>clocks</value>
- <!-- Compass Art Border -->
- <value>compass</value>
- <!-- Confetti Art Border -->
- <value>confetti</value>
- <!-- Confetti Art Border -->
- <value>confettiGrays</value>
- <!-- Confetti Art Border -->
- <value>confettiOutline</value>
- <!-- Confetti Streamers Art Border -->
- <value>confettiStreamers</value>
- <!-- Confetti Art Border -->
- <value>confettiWhite</value>
- <!-- Corner Triangle Art Border -->
- <value>cornerTriangles</value>
- <!-- Dashed Line Art Border -->
- <value>couponCutoutDashes</value>
- <!-- Dotted Line Art Border -->
- <value>couponCutoutDots</value>
- <!-- Maze Art Border -->
- <value>crazyMaze</value>
- <!-- Butterfly Art Border -->
- <value>creaturesButterfly</value>
- <!-- Fish Art Border -->
- <value>creaturesFish</value>
- <!-- Insects Art Border -->
- <value>creaturesInsects</value>
- <!-- Ladybug Art Border -->
- <value>creaturesLadyBug</value>
- <!-- Cross-stitch Art Border -->
- <value>crossStitch</value>
- <!-- Cupid Art Border -->
- <value>cup</value>
- <!-- Archway Art Border -->
- <value>decoArch</value>
- <!-- Color Archway Art Border -->
- <value>decoArchColor</value>
- <!-- Blocks Art Border -->
- <value>decoBlocks</value>
- <!-- Gray Diamond Art Border -->
- <value>diamondsGray</value>
- <!-- Double D Art Border -->
- <value>doubleD</value>
- <!-- Diamond Art Border -->
- <value>doubleDiamonds</value>
- <!-- Earth Art Border -->
- <value>earth1</value>
- <!-- Earth Art Border -->
- <value>earth2</value>
- <!-- Shadowed Square Art Border -->
- <value>eclipsingSquares1</value>
- <!-- Shadowed Square Art Border -->
- <value>eclipsingSquares2</value>
- <!-- Painted Egg Art Border -->
- <value>eggsBlack</value>
- <!-- Fans Art Border -->
- <value>fans</value>
- <!-- Film Reel Art Border -->
- <value>film</value>
- <!-- Firecracker Art Border -->
- <value>firecrackers</value>
- <!-- Flowers Art Border -->
- <value>flowersBlockPrint</value>
- <!-- Daisy Art Border -->
- <value>flowersDaisies</value>
- <!-- Flowers Art Border -->
- <value>flowersModern1</value>
- <!-- Flowers Art Border -->
- <value>flowersModern2</value>
- <!-- Pansy Art Border -->
- <value>flowersPansy</value>
- <!-- Red Rose Art Border -->
- <value>flowersRedRose</value>
- <!-- Roses Art Border -->
- <value>flowersRoses</value>
- <!-- Flowers in a Teacup Art Border -->
- <value>flowersTeacup</value>
- <!-- Small Flower Art Border -->
- <value>flowersTiny</value>
- <!-- Gems Art Border -->
- <value>gems</value>
- <!-- Gingerbread Man Art Border -->
- <value>gingerbreadMan</value>
- <!-- Triangle Gradient Art Border -->
- <value>gradient</value>
- <!-- Handmade Art Border -->
- <value>handmade1</value>
- <!-- Handmade Art Border -->
- <value>handmade2</value>
- <!-- Heart-Shaped Balloon Art Border -->
- <value>heartBalloon</value>
- <!-- Gray Heart Art Border -->
- <value>heartGray</value>
- <!-- Hearts Art Border -->
- <value>hearts</value>
- <!-- Pattern Art Border -->
- <value>heebieJeebies</value>
- <!-- Holly Art Border -->
- <value>holly</value>
- <!-- House Art Border -->
- <value>houseFunky</value>
- <!-- Circular Art Border -->
- <value>hypnotic</value>
- <!-- Ice Cream Cone Art Border -->
- <value>iceCreamCones</value>
- <!-- Light Bulb Art Border -->
- <value>lightBulb</value>
- <!-- Lightning Art Border -->
- <value>lightning1</value>
- <!-- Lightning Art Border -->
- <value>lightning2</value>
- <!-- Map Pins Art Border -->
- <value>mapPins</value>
- <!-- Maple Leaf Art Border -->
- <value>mapleLeaf</value>
- <!-- Muffin Art Border -->
- <value>mapleMuffins</value>
- <!-- Marquee Art Border -->
- <value>marquee</value>
- <!-- Marquee Art Border -->
- <value>marqueeToothed</value>
- <!-- Moon Art Border -->
- <value>moons</value>
- <!-- Mosaic Art Border -->
- <value>mosaic</value>
- <!-- Musical Note Art Border -->
- <value>musicNotes</value>
- <!-- Patterned Art Border -->
- <value>northwest</value>
- <!-- Oval Art Border -->
- <value>ovals</value>
- <!-- Package Art Border -->
- <value>packages</value>
- <!-- Black Palm Tree Art Border -->
- <value>palmsBlack</value>
- <!-- Color Palm Tree Art Border -->
- <value>palmsColor</value>
- <!-- Paper Clip Art Border -->
- <value>paperClips</value>
- <!-- Papyrus Art Border -->
- <value>papyrus</value>
- <!-- Party Favor Art Border -->
- <value>partyFavor</value>
- <!-- Party Glass Art Border -->
- <value>partyGlass</value>
- <!-- Pencils Art Border -->
- <value>pencils</value>
- <!-- Character Art Border -->
- <value>people</value>
- <!-- Waving Character Border -->
- <value>peopleWaving</value>
- <!-- Character With Hat Art Border -->
- <value>peopleHats</value>
- <!-- Poinsettia Art Border -->
- <value>poinsettias</value>
- <!-- Postage Stamp Art Border -->
- <value>postageStamp</value>
- <!-- Pumpkin Art Border -->
- <value>pumpkin1</value>
- <!-- Push Pin Art Border -->
- <value>pushPinNote2</value>
- <!-- Push Pin Art Border -->
- <value>pushPinNote1</value>
- <!-- Pyramid Art Border -->
- <value>pyramids</value>
- <!-- Pyramid Art Border -->
- <value>pyramidsAbove</value>
- <!-- Quadrants Art Border -->
- <value>quadrants</value>
- <!-- Rings Art Border -->
- <value>rings</value>
- <!-- Safari Art Border -->
- <value>safari</value>
- <!-- Saw tooth Art Border -->
- <value>sawtooth</value>
- <!-- Gray Saw tooth Art Border -->
- <value>sawtoothGray</value>
- <!-- Scared Cat Art Border -->
- <value>scaredCat</value>
- <!-- Umbrella Art Border -->
- <value>seattle</value>
- <!-- Shadowed Squares Art Border -->
- <value>shadowedSquares</value>
- <!-- Shark Tooth Art Border -->
- <value>sharksTeeth</value>
- <!-- Bird Tracks Art Border -->
- <value>shorebirdTracks</value>
- <!-- Rocket Art Border -->
- <value>skyrocket</value>
- <!-- Snowflake Art Border -->
- <value>snowflakeFancy</value>
- <!-- Snowflake Art Border -->
- <value>snowflakes</value>
- <!-- Sombrero Art Border -->
- <value>sombrero</value>
- <!-- Southwest-themed Art Border -->
- <value>southwest</value>
- <!-- Stars Art Border -->
- <value>stars</value>
- <!-- Stars On Top Art Border -->
- <value>starsTop</value>
- <!-- 3-D Stars Art Border -->
- <value>stars3d</value>
- <!-- Stars Art Border -->
- <value>starsBlack</value>
- <!-- Stars With Shadows Art Border -->
- <value>starsShadowed</value>
- <!-- Sun Art Border -->
- <value>sun</value>
- <!-- Whirligig Art Border -->
- <value>swirligig</value>
- <!-- Torn Paper Art Border -->
- <value>tornPaper</value>
- <!-- Black Torn Paper Art Border -->
- <value>tornPaperBlack</value>
- <!-- Tree Art Border -->
- <value>trees</value>
- <!-- Triangle Art Border -->
- <value>triangleParty</value>
- <!-- Triangles Art Border -->
- <value>triangles</value>
- <!-- Tribal Art Border One -->
- <value>tribal1</value>
- <!-- Tribal Art Border Two -->
- <value>tribal2</value>
- <!-- Tribal Art Border Three -->
- <value>tribal3</value>
- <!-- Tribal Art Border Four -->
- <value>tribal4</value>
- <!-- Tribal Art Border Five -->
- <value>tribal5</value>
- <!-- Tribal Art Border Six -->
- <value>tribal6</value>
- <!-- Twisted Lines Art Border -->
- <value>twistedLines1</value>
- <!-- Twisted Lines Art Border -->
- <value>twistedLines2</value>
- <!-- Vine Art Border -->
- <value>vine</value>
- <!-- Wavy Line Art Border -->
- <value>waveline</value>
- <!-- Weaving Angles Art Border -->
- <value>weavingAngles</value>
- <!-- Weaving Braid Art Border -->
- <value>weavingBraid</value>
- <!-- Weaving Ribbon Art Border -->
- <value>weavingRibbon</value>
- <!-- Weaving Strips Art Border -->
- <value>weavingStrips</value>
- <!-- White Flowers Art Border -->
- <value>whiteFlowers</value>
- <!-- Woodwork Art Border -->
- <value>woodwork</value>
- <!-- Crisscross Art Border -->
- <value>xIllusions</value>
- <!-- Triangle Art Border -->
- <value>zanyTriangles</value>
- <!-- Zigzag Art Border -->
- <value>zigZag</value>
- <!-- Zigzag stitch -->
- <value>zigZagStitch</value>
- </choice>
- </define>
- <define name="CT_Border">
- <attribute name="val">
- <ref name="ST_Border"/>
- </attribute>
- <attribute name="color">
- <ref name="ST_HexColor"/>
- </attribute>
- <attribute name="themeColor">
- <ref name="ST_ThemeColor"/>
- </attribute>
- <attribute name="themeTint">
- <ref name="ST_UcharHexNumber"/>
- </attribute>
- <attribute name="themeShade">
- <ref name="ST_UcharHexNumber"/>
- </attribute>
- <attribute name="sz">
- <ref name="ST_EighthPointMeasure"/>
- </attribute>
- <attribute name="space">
- <ref name="ST_PointMeasure"/>
- </attribute>
- <attribute name="shadow">
- <ref name="ST_OnOff"/>
- </attribute>
- <attribute name="frame">
- <ref name="ST_OnOff"/>
- </attribute>
- </define>
- <define name="ST_Shd">
- <choice>
- <!-- No Pattern -->
- <value>nil</value>
- <!-- No Pattern -->
- <value>clear</value>
- <!-- 100% Fill Pattern -->
- <value>solid</value>
- <!-- Horizontal Stripe Pattern -->
- <value>horzStripe</value>
- <!-- Vertical Stripe Pattern -->
- <value>vertStripe</value>
- <!-- Reverse Diagonal Stripe Pattern -->
- <value>reverseDiagStripe</value>
- <!-- Diagonal Stripe Pattern -->
- <value>diagStripe</value>
- <!-- Horizontal Cross Pattern -->
- <value>horzCross</value>
- <!-- Diagonal Cross Pattern -->
- <value>diagCross</value>
- <!-- Thin Horizontal Stripe Pattern -->
- <value>thinHorzStripe</value>
- <!-- Thin Vertical Stripe Pattern -->
- <value>thinVertStripe</value>
- <!-- Thin Reverse Diagonal Stripe Pattern -->
- <value>thinReverseDiagStripe</value>
- <!-- Thin Diagonal Stripe Pattern -->
- <value>thinDiagStripe</value>
- <!-- Thin Horizontal Cross Pattern -->
- <value>thinHorzCross</value>
- <!-- Thin Diagonal Cross Pattern -->
- <value>thinDiagCross</value>
- <!-- 5% Fill Pattern -->
- <value>pct5</value>
- <!-- 10% Fill Pattern -->
- <value>pct10</value>
- <!-- 12.5% Fill Pattern -->
- <value>pct12</value>
- <!-- 15% Fill Pattern -->
- <value>pct15</value>
- <!-- 20% Fill Pattern -->
- <value>pct20</value>
- <!-- 25% Fill Pattern -->
- <value>pct25</value>
- <!-- 30% Fill Pattern -->
- <value>pct30</value>
- <!-- 35% Fill Pattern -->
- <value>pct35</value>
- <!-- 37.5% Fill Pattern -->
- <value>pct37</value>
- <!-- 40% Fill Pattern -->
- <value>pct40</value>
- <!-- 45% Fill Pattern -->
- <value>pct45</value>
- <!-- 50% Fill Pattern -->
- <value>pct50</value>
- <!-- 55% Fill Pattern -->
- <value>pct55</value>
- <!-- 60% Fill Pattern -->
- <value>pct60</value>
- <!-- 62.5% Fill Pattern -->
- <value>pct62</value>
- <!-- 65% Fill Pattern -->
- <value>pct65</value>
- <!-- 70% Fill Pattern -->
- <value>pct70</value>
- <!-- 75% Fill Pattern -->
- <value>pct75</value>
- <!-- 80% Fill Pattern -->
- <value>pct80</value>
- <!-- 85% Fill Pattern -->
- <value>pct85</value>
- <!-- 87.5% Fill Pattern -->
- <value>pct87</value>
- <!-- 90% Fill Pattern -->
- <value>pct90</value>
- <!-- 95% Fill Pattern -->
- <value>pct95</value>
- </choice>
- </define>
- <define name="CT_Shd">
- <attribute name="val">
- <ref name="ST_Shd"/>
- </attribute>
- <attribute name="color">
- <ref name="ST_HexColor"/>
- </attribute>
- <attribute name="themeColor">
- <ref name="ST_ThemeColor"/>
- </attribute>
- <attribute name="themeTint">
- <ref name="ST_UcharHexNumber"/>
- </attribute>
- <attribute name="themeShade">
- <ref name="ST_UcharHexNumber"/>
- </attribute>
- <attribute name="fill">
- <ref name="ST_HexColor"/>
- </attribute>
- <attribute name="themeFill">
- <ref name="ST_ThemeColor"/>
- </attribute>
- <attribute name="themeFillTint">
- <ref name="ST_UcharHexNumber"/>
- </attribute>
- <attribute name="themeFillShade">
- <ref name="ST_UcharHexNumber"/>
- </attribute>
- </define>
- <define name="CT_VerticalAlignRun">
- <attribute name="val">
- <data type="string"/>
- </attribute>
- </define>
- <define name="CT_FitText">
- <attribute name="val">
- <data type="string"/>
- </attribute>
- <attribute name="id">
- <data type="string"/>
- </attribute>
- </define>
- <define name="ST_Em">
- <choice>
- <!-- No Emphasis Mark -->
- <value>none</value>
- <!-- Dot Emphasis Mark Above Characters -->
- <value>dot</value>
- <!-- Comma Emphasis Mark Above Characters -->
- <value>comma</value>
- <!-- Circle Emphasis Mark Above Characters -->
- <value>circle</value>
- <!-- Dot Emphasis Mark Below Characters -->
- <value>underDot</value>
- </choice>
- </define>
- <define name="CT_Em">
- <attribute name="val">
- <ref name="ST_Em"/>
- </attribute>
- </define>
- <define name="CT_Language">
- <attribute name="val">
- <ref name="ST_Lang"/>
- </attribute>
- <attribute name="eastAsia">
- <ref name="ST_Lang"/>
- </attribute>
- <attribute name="bidi">
- <ref name="ST_Lang"/>
- </attribute>
- </define>
- <define name="ST_CombineBrackets">
- <choice>
- <!-- No Enclosing Brackets -->
- <value>none</value>
- <!-- Round Brackets -->
- <value>round</value>
- <!-- Square Brackets -->
- <value>square</value>
- <!-- Angle Brackets -->
- <value>angle</value>
- <!-- Curly Brackets -->
- <value>curly</value>
- </choice>
- </define>
- <define name="CT_EastAsianLayout">
- <attribute name="id">
- <ref name="ST_DecimalNumber"/>
- </attribute>
- <attribute name="combine">
- <ref name="ST_OnOff"/>
- </attribute>
- <attribute name="combineBrackets">
- <ref name="ST_CombineBrackets"/>
- </attribute>
- <attribute name="vert">
- <ref name="ST_OnOff"/>
- </attribute>
- <attribute name="vertCompress">
- <ref name="ST_OnOff"/>
- </attribute>
- </define>
- <define name="ST_XAlign">
- <choice>
- <!-- Left Aligned Horizontally -->
- <value>left</value>
- <!-- Centered Horizontally -->
- <value>center</value>
- <!-- Right Aligned Horizontally -->
- <value>right</value>
- <!-- Inside -->
- <value>inside</value>
- <!-- Outside -->
- <value>outside</value>
- </choice>
- </define>
- <define name="ST_YAlign">
- <choice>
- <!-- In line With Text -->
- <value>inline</value>
- <!-- Top -->
- <value>top</value>
- <!-- Centered Vertically -->
- <value>center</value>
- <!-- Bottom -->
- <value>bottom</value>
- <!-- Inside Anchor Extents -->
- <value>inside</value>
- <!-- Outside Anchor Extents -->
- <value>outside</value>
- </choice>
- </define>
- <define name="ST_HeightRule">
- <choice>
- <!-- Determine Height Based On Contents -->
- <value>auto</value>
- <!-- Exact Height -->
- <value>exact</value>
- <!-- Minimum Height -->
- <value>atLeast</value>
- </choice>
- </define>
- <define name="ST_Wrap">
- <choice>
- <!-- Default Text Wrapping Around Frame -->
- <value>auto</value>
- <!-- No Text Wrapping Beside Frame -->
- <value>notBeside</value>
- <!-- Allow Text Wrapping Around Frame -->
- <value>around</value>
- <!-- Tight Text Wrapping Around Frame -->
- <value>tight</value>
- <!-- Through Text Wrapping Around Frame -->
- <value>through</value>
- <!-- No Text Wrapping Around Frame -->
- <value>none</value>
- </choice>
- </define>
- <define name="ST_VAnchor">
- <choice>
- <!-- Relative To Vertical Text Extents -->
- <value>text</value>
- <!-- Relative To Margin -->
- <value>margin</value>
- <!-- Relative To Page -->
- <value>page</value>
- </choice>
- </define>
- <define name="ST_HAnchor">
- <choice>
- <!-- Relative to Text Extents -->
- <value>text</value>
- <!-- Relative To Margin -->
- <value>margin</value>
- <!-- Relative to Page -->
- <value>page</value>
- </choice>
- </define>
- <define name="ST_DropCap">
- <choice>
- <!-- Not Drop Cap -->
- <value>none</value>
- <!-- Drop Cap Inside Margin -->
- <value>drop</value>
- <!-- Drop Cap Outside Margin -->
- <value>margin</value>
- </choice>
- </define>
- <define name="CT_FramePr">
- <attribute name="dropCap">
- <ref name="ST_DropCap"/>
- </attribute>
- <attribute name="lines">
- <ref name="ST_DecimalNumber"/>
- </attribute>
- <attribute name="w">
- <ref name="ST_TwipsMeasure"/>
- </attribute>
- <attribute name="h">
- <ref name="ST_TwipsMeasure"/>
- </attribute>
- <attribute name="vSpace">
- <ref name="ST_TwipsMeasure"/>
- </attribute>
- <attribute name="hSpace">
- <ref name="ST_TwipsMeasure"/>
- </attribute>
- <attribute name="wrap">
- <ref name="ST_Wrap"/>
- </attribute>
- <attribute name="hAnchor">
- <ref name="ST_HAnchor"/>
- </attribute>
- <attribute name="vAnchor">
- <ref name="ST_VAnchor"/>
- </attribute>
- <attribute name="x">
- <ref name="ST_SignedTwipsMeasure"/>
- </attribute>
- <attribute name="xAlign">
- <ref name="ST_XAlign"/>
- </attribute>
- <attribute name="y">
- <ref name="ST_SignedTwipsMeasure"/>
- </attribute>
- <attribute name="yAlign">
- <ref name="ST_YAlign"/>
- </attribute>
- <attribute name="hRule">
- <ref name="ST_HeightRule"/>
- </attribute>
- <attribute name="anchorLock">
- <ref name="ST_OnOff"/>
- </attribute>
- </define>
- <define name="ST_TabJc">
- <choice>
- <!-- No Tab Stop -->
- <value>clear</value>
- <!-- Leading Tab -->
- <value>start</value>
- <!-- Left Tab (ecma) -->
- <value>left</value>
- <!-- Centered Tab -->
- <value>center</value>
- <!-- Trailing Tab -->
- <value>end</value>
- <!-- Right Tab (ecma) -->
- <value>right</value>
- <!-- Decimal Tab -->
- <value>decimal</value>
- <!-- Bar Tab -->
- <value>bar</value>
- <!-- List Tab -->
- <value>num</value>
- </choice>
- </define>
- <define name="ST_TabTlc">
- <choice>
- <!-- No tab stop leader -->
- <value>none</value>
- <!-- Dotted leader line -->
- <value>dot</value>
- <!-- Dashed tab stop leader line -->
- <value>hyphen</value>
- <!-- Solid leader line -->
- <value>underscore</value>
- <!-- Heavy solid leader line -->
- <value>heavy</value>
- <!-- Middle dot leader line -->
- <value>middleDot</value>
- </choice>
- </define>
- <define name="CT_TabStop">
- <attribute name="val">
- <ref name="ST_TabJc"/>
- </attribute>
- <attribute name="leader">
- <ref name="ST_TabTlc"/>
- </attribute>
- <attribute name="pos">
- <ref name="ST_SignedTwipsMeasure"/>
- </attribute>
- </define>
- <define name="ST_LineSpacingRule">
- <choice>
- <!-- Automatically Determined Line Height -->
- <value>auto</value>
- <!-- Exact Line Height -->
- <value>exact</value>
- <!-- Minimum Line Height -->
- <value>atLeast</value>
- </choice>
- </define>
- <define name="CT_Spacing">
- <attribute name="before">
- <ref name="ST_TwipsMeasure"/>
- </attribute>
- <attribute name="beforeLines">
- <ref name="ST_DecimalNumber"/>
- </attribute>
- <attribute name="beforeAutospacing">
- <ref name="ST_OnOff"/>
- </attribute>
- <attribute name="after">
- <ref name="ST_TwipsMeasure"/>
- </attribute>
- <attribute name="afterLines">
- <ref name="ST_DecimalNumber"/>
- </attribute>
- <attribute name="afterAutospacing">
- <ref name="ST_OnOff"/>
- </attribute>
- <attribute name="line">
- <ref name="ST_SignedTwipsMeasure"/>
- </attribute>
- <attribute name="lineRule">
- <ref name="ST_LineSpacingRule"/>
- </attribute>
- </define>
- <define name="CT_Ind">
- <attribute name="end">
- <ref name="ST_SignedTwipsMeasure"/>
- </attribute>
- <attribute name="endChars">
- <ref name="ST_DecimalNumber"/>
- </attribute>
- <attribute name="start">
- <ref name="ST_SignedTwipsMeasure"/>
- </attribute>
- <attribute name="startChars">
- <ref name="ST_DecimalNumber"/>
- </attribute>
- <attribute name="left">
- <ref name="ST_SignedTwipsMeasure"/>
- </attribute>
- <attribute name="leftChars">
- <ref name="ST_DecimalNumber"/>
- </attribute>
- <attribute name="right">
- <ref name="ST_SignedTwipsMeasure"/>
- </attribute>
- <attribute name="rightChars">
- <ref name="ST_DecimalNumber"/>
- </attribute>
- <attribute name="hanging">
- <ref name="ST_TwipsMeasure_asSigned"/>
- </attribute>
- <attribute name="hangingChars">
- <ref name="ST_DecimalNumber"/>
- </attribute>
- <attribute name="firstLine">
- <ref name="ST_TwipsMeasure"/>
- </attribute>
- <attribute name="firstLineChars">
- <ref name="ST_DecimalNumber"/>
- </attribute>
- </define>
- <define name="ST_Jc">
- <choice>
- <!-- Align To Leading Edge -->
- <value>start</value>
- <!-- Align To Trailing Edge -->
- <value>end</value>
- <!-- Align Left (ecma) -->
- <value>left</value>
- <!-- Align Center -->
- <value>center</value>
- <!-- Align Right (ecma) -->
- <value>right</value>
- <!-- Justified -->
- <value>both</value>
- <!-- Medium Kashida Length -->
- <value>mediumKashida</value>
- <!-- Distribute All Characters Equally -->
- <value>distribute</value>
- <!-- Align to List Tab -->
- <value>numTab</value>
- <!-- Widest Kashida Length -->
- <value>highKashida</value>
- <!-- Low Kashida Length -->
- <value>lowKashida</value>
- <!-- Thai Language Justification -->
- <value>thaiDistribute</value>
- </choice>
- </define>
- <define name="CT_Jc">
- <attribute name="val">
- <ref name="ST_Jc"/>
- </attribute>
- </define>
- <define name="ST_View">
- <choice>
- <!-- Default View -->
- <value>none</value>
- <!-- Print Layout View -->
- <value>print</value>
- <!-- Outline View -->
- <value>outline</value>
- <!-- Master Document View -->
- <value>masterPages</value>
- <!-- Draft View -->
- <value>normal</value>
- <!-- Web Page View -->
- <value>web</value>
- </choice>
- </define>
- <define name="CT_View">
- <attribute name="val">
- <ref name="ST_View"/>
- </attribute>
- </define>
- <define name="ST_Zoom">
- <choice>
- <!-- No Preset Magnification -->
- <value>none</value>
- <!-- Display One Full Page -->
- <value>fullPage</value>
- <!-- Display Page Width -->
- <value>bestFit</value>
- <!-- Display Text Width -->
- <value>textFit</value>
- </choice>
- </define>
- <define name="ST_Percentage">
- <data type="int"/>
- </define>
- <define name="CT_Zoom">
- <attribute name="val">
- <ref name="ST_Zoom"/>
- </attribute>
- <attribute name="percent">
- <ref name="ST_Percentage"/>
- </attribute>
- </define>
- <define name="CT_WritingStyle">
- <attribute name="lang">
- <data type="string"/>
- </attribute>
- <attribute name="vendorID">
- <data type="string"/>
- </attribute>
- <attribute name="dllVersion">
- <data type="string"/>
- </attribute>
- <attribute name="nlCheck">
- <data type="string"/>
- </attribute>
- <attribute name="checkStyle">
- <data type="string"/>
- </attribute>
- <attribute name="appName">
- <data type="string"/>
- </attribute>
- </define>
- <define name="CT_Proof">
- <attribute name="spelling">
- <data type="string"/>
- </attribute>
- <attribute name="grammar">
- <data type="string"/>
- </attribute>
- </define>
- <define name="ST_DocType">
- <choice>
- <!-- Default Document -->
- <value>notSpecified</value>
- <!-- Letter -->
- <value>letter</value>
- <!-- E-Mail Message -->
- <value>eMail</value>
- </choice>
- </define>
- <define name="CT_DocType">
- <attribute name="val">
- <ref name="ST_DocType"/>
- </attribute>
- </define>
- <define name="ST_DocProtect">
- <choice>
- <!-- No Editing Restrictions -->
- <value>none</value>
- <!-- Allow No Editing -->
- <value>readOnly</value>
- <!-- Allow Editing of Comments -->
- <value>comments</value>
- <!-- Allow Editing With Revision Tracking -->
- <value>trackedChanges</value>
- <!-- Allow Editing of Form Fields -->
- <value>forms</value>
- </choice>
- </define>
- <define name="ST_CryptProv">
- <choice>
- <!-- AES Provider -->
- <value>rsaAES</value>
- <!-- Any Provider -->
- <value>rsaFull</value>
- </choice>
- </define>
- <define name="ST_AlgClass">
- <choice>
- <!-- Hashing -->
- <value>hash</value>
- </choice>
- </define>
- <define name="ST_AlgType">
- <choice>
- <!-- Any Type -->
- <value>typeAny</value>
- </choice>
- </define>
- <define name="AG_Password">
- <attribute name="cryptProviderType">
- <ref name="ST_CryptProv"/>
- </attribute>
- <attribute name="cryptAlgorithmClass">
- <ref name="ST_AlgClass"/>
- </attribute>
- <attribute name="cryptAlgorithmType">
- <ref name="ST_AlgType"/>
- </attribute>
- <attribute name="cryptAlgorithmSid">
- <data type="string"/>
- </attribute>
- <attribute name="cryptSpinCount">
- <ref name="ST_DecimalNumber"/>
- </attribute>
- <attribute name="cryptProvider">
- <data type="string"/>
- </attribute>
- <attribute name="algIdExt">
- <data type="string"/>
- </attribute>
- <attribute name="algIdExtSource">
- <data type="string"/>
- </attribute>
- <attribute name="cryptProviderTypeExt">
- <data type="string"/>
- </attribute>
- <attribute name="cryptProviderTypeExtSource">
- <data type="string"/>
- </attribute>
- <attribute name="hash">
- <data type="base64Binary"/>
- </attribute>
- <attribute name="salt">
- <data type="base64Binary"/>
- </attribute>
- </define>
- <define name="CT_DocProtect">
- <attribute name="edit">
- <ref name="ST_DocProtect"/>
- </attribute>
- <attribute name="formatting">
- <ref name="ST_OnOff"/>
- </attribute>
- <attribute name="enforcement">
- <ref name="ST_OnOff"/>
- </attribute>
- <ref name="AG_Password"/>
- </define>
- <define name="CT_MailMergeDocType">
- <attribute name="val">
- <data type="string"/>
- </attribute>
- </define>
- <define name="CT_MailMergeDataType">
- <attribute name="val">
- <data type="string"/>
- </attribute>
- </define>
- <define name="CT_MailMergeDest">
- <attribute name="val">
- <data type="string"/>
- </attribute>
- </define>
- <define name="CT_MailMergeOdsoFMDFieldType">
- <attribute name="val">
- <data type="string"/>
- </attribute>
- </define>
- <define name="CT_TrackChangesView">
- <attribute name="markup">
- <ref name="ST_OnOff"/>
- </attribute>
- <attribute name="comments">
- <ref name="ST_OnOff"/>
- </attribute>
- <attribute name="insDel">
- <ref name="ST_OnOff"/>
- </attribute>
- <attribute name="formatting">
- <ref name="ST_OnOff"/>
- </attribute>
- <attribute name="inkAnnotations">
- <ref name="ST_OnOff"/>
- </attribute>
- </define>
- <define name="CT_Kinsoku">
- <attribute name="lang">
- <ref name="ST_Lang"/>
- </attribute>
- <attribute name="val">
- <ref name="ST_String"/>
- </attribute>
- </define>
- <define name="ST_TextDirection">
- <choice>
- <!-- Left to Right, Top to Bottom -->
- <value>lrTb</value>
- <!-- Top to Bottom, Right to Left -->
- <value>tbRl</value>
- <!-- Bottom to Top, Left to Right -->
- <value>btLr</value>
- <!-- Left to Right, Top to Bottom Rotated -->
- <value>lrTbV</value>
- <!-- Top to Bottom, Right to Left Rotated -->
- <value>tbRlV</value>
- <!-- Top to Bottom, Left to Right Rotated -->
- <value>tbLrV</value>
- </choice>
- </define>
- <define name="CT_TextDirection">
- <attribute name="val">
- <ref name="ST_TextDirection"/>
- </attribute>
- </define>
- <define name="ST_TextAlignment">
- <choice>
- <!-- Align Text at Top -->
- <value>top</value>
- <!-- Align Text at Center -->
- <value>center</value>
- <!-- Align Text at Baseline -->
- <value>baseline</value>
- <!-- Align Text at Bottom -->
- <value>bottom</value>
- <!-- Automatically Determine Alignment -->
- <value>auto</value>
- </choice>
- </define>
- <define name="CT_TextAlignment">
- <attribute name="val">
- <ref name="ST_TextAlignment"/>
- </attribute>
- </define>
- <define name="ST_DisplacedByCustomXml">
- <choice>
- <!-- Displaced by Next Custom XML Markup Tag -->
- <value>next</value>
- <!-- Displaced by Previous Custom XML Markup Tag -->
- <value>prev</value>
- </choice>
- </define>
- <define name="ST_AnnotationVMerge">
- <choice>
- <!-- Vertically Merged Cell -->
- <value>cont</value>
- <!-- Vertically Split Cell -->
- <value>rest</value>
- </choice>
- </define>
- <define name="CT_Markup">
- <attribute name="id">
- <ref name="ST_DecimalNumber"/>
- </attribute>
- </define>
- <define name="CT_TrackChange">
- <ref name="CT_Markup"/>
- <attribute name="author">
- <ref name="ST_String"/>
- </attribute>
- <attribute name="date">
- <ref name="ST_DateTime"/>
- </attribute>
- </define>
- <define name="CT_CellMergeTrackChange">
- <ref name="CT_TrackChange"/>
- <attribute name="vMerge">
- <ref name="ST_AnnotationVMerge"/>
- </attribute>
- <attribute name="vMergeOrig">
- <ref name="ST_AnnotationVMerge"/>
- </attribute>
- </define>
- <define name="CT_TrackChangeRange">
- <ref name="CT_TrackChange"/>
- <attribute name="displacedByCustomXml">
- <ref name="ST_DisplacedByCustomXml"/>
- </attribute>
- </define>
- <define name="CT_MarkupRange">
- <ref name="CT_Markup"/>
- <attribute name="displacedByCustomXml">
- <ref name="ST_DisplacedByCustomXml"/>
- </attribute>
- </define>
- <define name="CT_MarkupRangeBookmark">
- <attribute name="id">
- <data type="string"/>
- </attribute>
- <ref name="CT_MarkupRange"/>
- </define>
- <define name="CT_MarkupRangePerm">
- <ref name="CT_MarkupRange"/>
- </define>
- <define name="CT_MarkupRangeCommentStart">
- <ref name="CT_Markup"/>
- </define>
- <define name="CT_MarkupRangeCommentEnd">
- <ref name="CT_Markup"/>
- </define>
- <define name="CT_BookmarkRange">
- <ref name="CT_MarkupRangeBookmark"/>
- <attribute name="colFirst">
- <data type="string"/>
- </attribute>
- <attribute name="colLast">
- <data type="string"/>
- </attribute>
- </define>
- <define name="CT_Bookmark">
- <ref name="CT_BookmarkRange"/>
- <attribute name="name">
- <data type="string"/>
- </attribute>
- </define>
- <define name="CT_MoveBookmark">
- <ref name="CT_Bookmark"/>
- <attribute name="author">
- <data type="string"/>
- </attribute>
- <attribute name="date">
- <data type="string"/>
- </attribute>
- </define>
- <define name="CT_Comment">
- <attribute name="id">
- <ref name="ST_DecimalNumber"/>
- </attribute>
- <ref name="CT_TrackChange"/>
- <ref name="EG_BlockLevelElts"/>
- <attribute name="initials">
- <ref name="ST_String"/>
- </attribute>
- </define>
- <define name="CT_PermStart">
- <ref name="CT_MarkupRangePerm"/>
- <attribute name="ed">
- <data type="string"/>
- </attribute>
- <attribute name="edGrp">
- <data type="string"/>
- </attribute>
- <attribute name="colFirst">
- <data type="ST_DecimalNumber"/>
- </attribute>
- <attribute name="colLast">
- <data type="ST_DecimalNumber"/>
- </attribute>
- </define>
- <define name="CT_PermEnd">
- <ref name="CT_MarkupRangePerm"/>
- </define>
- <define name="CT_TrackChangeNumbering">
- <ref name="CT_TrackChange"/>
- <attribute name="original">
- <data type="string"/>
- </attribute>
- </define>
- <define name="CT_TblPrExChange">
- <ref name="CT_TrackChange"/>
- <element name="tblPrEx">
- <ref name="CT_TblPrExBase"/>
- </element>
- </define>
- <define name="CT_TcPrChange">
- <ref name="CT_TrackChange"/>
- <element name="tcPr">
- <ref name="CT_TcPrInner"/>
- </element>
- </define>
- <define name="CT_TrPrChange">
- <ref name="CT_TrackChange"/>
- <element name="trPr">
- <ref name="CT_TrPrBase"/>
- </element>
- </define>
- <define name="CT_TblGridChange">
- <ref name="CT_Markup"/>
- <element name="tblGrid">
- <ref name="CT_TblGridBase"/>
- </element>
- </define>
- <define name="CT_TblPrChange">
- <ref name="CT_TrackChange"/>
- <element name="tblPr">
- <ref name="CT_TblPrBase"/>
- </element>
- </define>
- <define name="CT_SectPrChange">
- <ref name="CT_TrackChange"/>
- <element name="sectPr">
- <ref name="CT_SectPrBase"/>
- </element>
- </define>
- <define name="CT_PPrChange">
- <ref name="CT_TrackChange"/>
- <element name="pPr">
- <ref name="CT_PPrBase"/>
- </element>
- </define>
- <define name="CT_RPrChange">
- <ref name="CT_TrackChange"/>
- <element name="rPr">
- <ref name="CT_RPrOriginal"/>
- </element>
- </define>
- <define name="CT_ParaRPrChange">
- <ref name="CT_TrackChange"/>
- <element name="rPr">
- <ref name="CT_ParaRPrOriginal"/>
- </element>
- </define>
- <define name="CT_RunTrackChange">
- <ref name="CT_TrackChange"/>
- <choice>
- <ref name="EG_ContentRunContent"/>
- <ref name="EG_OMathMathElements"/>
- </choice>
- </define>
- <define name="EG_CellMarkupElements">
- <choice>
- <element name="cellIns">
- <ref name="CT_TrackChange"/>
- </element>
- <element name="cellDel">
- <ref name="CT_TrackChange"/>
- </element>
- <element name="cellMerge">
- <ref name="CT_CellMergeTrackChange"/>
- </element>
- </choice>
- </define>
- <define name="EG_RangeMarkupElements">
- <choice>
- <element name="bookmarkStart">
- <ref name="CT_Bookmark"/>
- </element>
- <element name="bookmarkEnd">
- <ref name="CT_MarkupRangeBookmark"/>
- </element>
- <element name="permStart">
- <ref name="CT_PermStart"/>
- </element>
- <element name="permEnd">
- <ref name="CT_PermEnd"/>
- </element>
- <element name="moveFromRangeStart">
- <ref name="CT_MoveBookmark"/>
- </element>
- <element name="moveFromRangeEnd">
- <ref name="CT_MarkupRangeBookmark"/>
- </element>
- <element name="moveToRangeStart">
- <ref name="CT_MoveBookmark"/>
- </element>
- <element name="moveToRangeEnd">
- <ref name="CT_MarkupRangeBookmark"/>
- </element>
- <element name="commentRangeStart">
- <ref name="CT_MarkupRangeCommentStart"/>
- </element>
- <element name="commentRangeEnd">
- <ref name="CT_MarkupRangeCommentEnd"/>
- </element>
- <element name="customXmlInsRangeStart">
- <ref name="CT_TrackChange"/>
- </element>
- <element name="customXmlInsRangeEnd">
- <ref name="CT_Markup"/>
- </element>
- <element name="customXmlDelRangeStart">
- <ref name="CT_TrackChange"/>
- </element>
- <element name="customXmlDelRangeEnd">
- <ref name="CT_Markup"/>
- </element>
- <element name="customXmlMoveFromRangeStart">
- <ref name="CT_TrackChange"/>
- </element>
- <element name="customXmlMoveFromRangeEnd">
- <ref name="CT_Markup"/>
- </element>
- <element name="customXmlMoveToRangeStart">
- <ref name="CT_TrackChange"/>
- </element>
- <element name="customXmlMoveToRangeEnd">
- <ref name="CT_Markup"/>
- </element>
- </choice>
- </define>
- <define name="CT_NumPr">
- <element name="ilvl">
- <ref name="CT_DecimalNumber"/>
- </element>
- <element name="numId">
- <ref name="CT_DecimalNumber"/>
- </element>
- <element name="numberingChange">
- <ref name="CT_TrackChangeNumbering"/>
- </element>
- <element name="ins">
- <ref name="CT_TrackChange"/>
- </element>
- </define>
- <define name="CT_PBdr">
- <element name="top">
- <ref name="CT_Border"/>
- </element>
- <element name="left">
- <ref name="CT_Border"/>
- </element>
- <element name="bottom">
- <ref name="CT_Border"/>
- </element>
- <element name="right">
- <ref name="CT_Border"/>
- </element>
- <element name="between">
- <ref name="CT_Border"/>
- </element>
- <element name="bar">
- <ref name="CT_Border"/>
- </element>
- </define>
- <define name="CT_Tabs">
- <element name="tab">
- <ref name="CT_TabStop"/>
- </element>
- </define>
- <define name="CT_TextboxTightWrap">
- <attribute name="val">
- <data type="string"/>
- </attribute>
- </define>
- <define name="CT_PPrBase">
- <element name="pStyle">
- <ref name="CT_String"/>
- </element>
- <element name="keepNext">
- <ref name="CT_OnOff"/>
- </element>
- <element name="keepLines">
- <ref name="CT_OnOff"/>
- </element>
- <element name="pageBreakBefore">
- <ref name="CT_OnOff"/>
- </element>
- <element name="framePr">
- <ref name="CT_FramePr"/>
- </element>
- <element name="widowControl">
- <ref name="CT_OnOff"/>
- </element>
- <element name="numPr">
- <ref name="CT_NumPr"/>
- </element>
- <element name="suppressLineNumbers">
- <ref name="CT_OnOff"/>
- </element>
- <element name="pBdr">
- <ref name="CT_PBdr"/>
- </element>
- <element name="shd">
- <ref name="CT_Shd"/>
- </element>
- <element name="tabs">
- <ref name="CT_Tabs"/>
- </element>
- <element name="suppressAutoHyphens">
- <ref name="CT_OnOff"/>
- </element>
- <element name="kinsoku">
- <ref name="CT_OnOff"/>
- </element>
- <element name="wordWrap">
- <ref name="CT_OnOff"/>
- </element>
- <element name="overflowPunct">
- <ref name="CT_OnOff"/>
- </element>
- <element name="topLinePunct">
- <ref name="CT_OnOff"/>
- </element>
- <element name="autoSpaceDE">
- <ref name="CT_OnOff"/>
- </element>
- <element name="autoSpaceDN">
- <ref name="CT_OnOff"/>
- </element>
- <element name="bidi">
- <ref name="CT_OnOff"/>
- </element>
- <element name="adjustRightInd">
- <ref name="CT_OnOff"/>
- </element>
- <element name="snapToGrid">
- <ref name="CT_OnOff"/>
- </element>
- <element name="spacing">
- <ref name="CT_Spacing"/>
- </element>
- <element name="ind">
- <ref name="CT_Ind"/>
- </element>
- <element name="contextualSpacing">
- <ref name="CT_OnOff"/>
- </element>
- <element name="mirrorIndents">
- <ref name="CT_OnOff"/>
- </element>
- <element name="suppressOverlap">
- <ref name="CT_OnOff"/>
- </element>
- <element name="jc">
- <ref name="CT_Jc"/>
- </element>
- <element name="textDirection">
- <ref name="CT_TextDirection"/>
- </element>
- <element name="textAlignment">
- <ref name="CT_TextAlignment"/>
- </element>
- <element name="textboxTightWrap">
- <ref name="CT_TextboxTightWrap"/>
- </element>
- <element name="outlineLvl">
- <ref name="CT_DecimalNumber"/>
- </element>
- <element name="divId">
- <ref name="CT_DecimalNumber"/>
- </element>
- <element name="cnfStyle">
- <ref name="CT_Cnf"/>
- </element>
- </define>
- <define name="CT_PPr">
- <ref name="CT_PPrBase"/>
- <element name="rPr">
- <ref name="CT_ParaRPr"/>
- </element>
- <element name="sectPr">
- <ref name="CT_SectPr"/>
- </element>
- <element name="pPrChange">
- <ref name="CT_PPrChange"/>
- </element>
- </define>
- <define name="CT_Background">
- <ref name="CT_PictureBase"/>
- <attribute name="color">
- <ref name="ST_HexColor"/>
- </attribute>
- <attribute name="themeColor">
- <data type="string"/>
- </attribute>
- <attribute name="themeTint">
- <data type="string"/>
- </attribute>
- <attribute name="themeShade">
- <data type="string"/>
- </attribute>
- <element name="v:background">
- <ref name="BUILT_IN_ANY_TYPE"/>
- </element>
- </define>
- <define name="CT_Rel">
- <attribute name="r:id">
- <ref name="ST_String"/>
- </attribute>
- </define>
- <define name="CT_PictureBase">
- <element>
- <ref name="BUILT_IN_ANY_TYPE"/>
- </element>
- </define>
- <define name="CT_Object">
- <ref name="CT_PictureBase"/>
- <attribute name="dxaOrig">
- <data type="string"/>
- </attribute>
- <attribute name="dyaOrig">
- <data type="string"/>
- </attribute>
- </define>
- <define name="CT_Picture">
- <ref name="CT_PictureBase"/>
- <element name="movie">
- <ref name="CT_Rel"/>
- </element>
- </define>
- <define name="CT_Drawing">
- <choice>
- <ref name="anchor"/>
- <ref name="inline"/>
- </choice>
- </define>
- <define name="CT_SimpleField">
- <element name="fldData">
- <ref name="CT_FLDData"/>
- </element>
- <ref name="EG_PContent"/>
- <attribute name="instr">
- <data type="string"/>
- </attribute>
- <attribute name="fldLock">
- <ref name="ST_OnOff"/>
- </attribute>
- <attribute name="dirty">
- <data type="string"/>
- </attribute>
- </define>
- <define name="ST_FldCharType">
- <choice>
- <!-- Start Character -->
- <value>begin</value>
- <!-- Separator Character -->
- <value>separate</value>
- <!-- End Character -->
- <value>end</value>
- </choice>
- </define>
- <define name="ST_InfoTextType">
- <choice>
- <!-- Literal Text -->
- <value>text</value>
- <!-- Glossary Document Entry -->
- <value>autoText</value>
- </choice>
- </define>
- <define name="ST_FFName">
- <data type="string"/>
- </define>
- <define name="CT_FFTextType">
- <attribute name="val">
- <ref name="ST_FFName"/>
- </attribute>
- </define>
- <define name="CT_FFName">
- <attribute name="val">
- <data type="string"/>
- </attribute>
- </define>
- <define name="CT_FldChar">
- <choice>
- <element name="fldData">
- <ref name="CT_FLDData"/>
- </element>
- <element name="ffData">
- <ref name="CT_FFData"/>
- </element>
- <element name="numberingChange">
- <ref name="CT_TrackChangeNumbering"/>
- </element>
- </choice>
- <attribute name="fldCharType">
- <ref name="ST_FldCharType"/>
- </attribute>
- <attribute name="fldLock">
- <ref name="ST_OnOff"/>
- </attribute>
- <attribute name="dirty">
- <data type="string"/>
- </attribute>
- </define>
- <define name="CT_Hyperlink">
- <ref name="EG_PContent"/>
- <attribute name="tgtFrame">
- <data type="string"/>
- </attribute>
- <attribute name="tooltip">
- <data type="string"/>
- </attribute>
- <attribute name="docLocation">
- <data type="string"/>
- </attribute>
- <attribute name="history">
- <ref name="ST_OnOff"/>
- </attribute>
- <attribute name="anchor">
- <data type="string"/>
- </attribute>
- <attribute name="r:id">
- <ref name="ST_String"/>
- </attribute>
- </define>
- <define name="CT_FLDData">
- <ref name="ST_String"/>
- </define>
- <define name="CT_FFData">
- <choice>
- <element name="name">
- <ref name="CT_FFName"/>
- </element>
- <element name="enabled">
- <ref name="CT_OnOff"/>
- </element>
- <element name="calcOnExit">
- <ref name="CT_OnOff"/>
- </element>
- <element name="entryMacro">
- <ref name="CT_MacroName"/>
- </element>
- <element name="exitMacro">
- <ref name="CT_MacroName"/>
- </element>
- <element name="helpText">
- <ref name="CT_FFHelpText"/>
- </element>
- <element name="statusText">
- <ref name="CT_FFStatusText"/>
- </element>
- <element name="checkBox">
- <ref name="CT_FFCheckBox"/>
- </element>
- <element name="ddList">
- <ref name="CT_FFDDList"/>
- </element>
- <element name="textInput">
- <ref name="CT_FFTextInput"/>
- </element>
- </choice>
- </define>
- <define name="CT_FFHelpText">
- <attribute name="type">
- <ref name="ST_InfoTextType"/>
- </attribute>
- <attribute name="val">
- <data type="string"/>
- </attribute>
- </define>
- <define name="CT_FFStatusText">
- <attribute name="type">
- <ref name="ST_InfoTextType"/>
- </attribute>
- <attribute name="val">
- <data type="string"/>
- </attribute>
- </define>
- <define name="CT_FFCheckBox">
- <choice>
- <element name="size">
- <ref name="CT_HpsMeasure"/>
- </element>
- <element name="sizeAuto">
- <ref name="CT_OnOff"/>
- </element>
- </choice>
- <element name="default">
- <ref name="CT_OnOff"/>
- </element>
- <element name="checked">
- <ref name="CT_OnOff"/>
- </element>
- </define>
- <define name="CT_FFDDList">
- <element name="result">
- <ref name="CT_String"/>
- </element>
- <element name="default">
- <ref name="CT_DecimalNumber"/>
- </element>
- <element name="listEntry">
- <ref name="CT_String"/>
- </element>
- </define>
- <define name="CT_FFTextInput">
- <element name="type">
- <ref name="CT_FFTextType"/>
- </element>
- <element name="default">
- <ref name="CT_String"/>
- </element>
- <element name="maxLength">
- <ref name="CT_DecimalNumber"/>
- </element>
- <element name="format">
- <ref name="CT_String"/>
- </element>
- </define>
- <define name="ST_SectionMark">
- <choice>
- <!-- Next Page Section Break -->
- <value>nextPage</value>
- <!-- Column Section Break -->
- <value>nextColumn</value>
- <!-- Continuous Section Break -->
- <value>continuous</value>
- <!-- Even Page Section Break -->
- <value>evenPage</value>
- <!-- Odd Page Section Break -->
- <value>oddPage</value>
- </choice>
- </define>
- <define name="CT_SectType">
- <attribute name="val">
- <ref name="ST_SectionMark"/>
- </attribute>
- </define>
- <define name="CT_PaperSource">
- <attribute name="first">
- <data type="string"/>
- </attribute>
- <attribute name="other">
- <data type="string"/>
- </attribute>
- </define>
- <define name="ST_NumberFormat">
- <choice>
- <!-- Decimal Numbers -->
- <value>decimal</value>
- <!-- Uppercase Roman Numerals -->
- <value>upperRoman</value>
- <!-- Lowercase Roman Numerals -->
- <value>lowerRoman</value>
- <!-- Uppercase Latin Alphabet -->
- <value>upperLetter</value>
- <!-- Lowercase Latin Alphabet -->
- <value>lowerLetter</value>
- <!-- Ordinal -->
- <value>ordinal</value>
- <!-- Cardinal Text -->
- <value>cardinalText</value>
- <!-- Ordinal Text -->
- <value>ordinalText</value>
- <!-- Hexadecimal Numbering -->
- <value>hex</value>
- <!-- Chicago Manual of Style -->
- <value>chicago</value>
- <!-- Ideographs -->
- <value>ideographDigital</value>
- <!-- Japanese Counting System -->
- <value>japaneseCounting</value>
- <!-- AIUEO Order Hiragana -->
- <value>aiueo</value>
- <!-- Iroha Ordered Katakana -->
- <value>iroha</value>
- <!-- Double Byte Arabic Numerals -->
- <value>decimalFullWidth</value>
- <!-- Single Byte Arabic Numerals -->
- <value>decimalHalfWidth</value>
- <!-- Japanese Legal Numbering -->
- <value>japaneseLegal</value>
- <!-- Japanese Digital Ten Thousand Counting System -->
- <value>japaneseDigitalTenThousand</value>
- <!-- Decimal Numbers Enclosed in a Circle -->
- <value>decimalEnclosedCircle</value>
- <!-- Double Byte Arabic Numerals Alternate -->
- <value>decimalFullWidth2</value>
- <!-- Full-Width AIUEO Order Hiragana -->
- <value>aiueoFullWidth</value>
- <!-- Full-Width Iroha Ordered Katakana -->
- <value>irohaFullWidth</value>
- <!-- Initial Zero Arabic Numerals -->
- <value>decimalZero</value>
- <!-- Bullet -->
- <value>bullet</value>
- <!-- Korean Ganada Numbering -->
- <value>ganada</value>
- <!-- Korean Chosung Numbering -->
- <value>chosung</value>
- <!-- Decimal Numbers Followed by a Period -->
- <value>decimalEnclosedFullstop</value>
- <!-- Decimal Numbers Enclosed in Parenthesis -->
- <value>decimalEnclosedParen</value>
- <!-- Decimal Numbers Enclosed in a Circle -->
- <value>decimalEnclosedCircleChinese</value>
- <!-- Ideographs Enclosed in a Circle -->
- <value>ideographEnclosedCircle</value>
- <!-- Traditional Ideograph Format -->
- <value>ideographTraditional</value>
- <!-- Zodiac Ideograph Format -->
- <value>ideographZodiac</value>
- <!-- Traditional Zodiac Ideograph Format -->
- <value>ideographZodiacTraditional</value>
- <!-- Taiwanese Counting System -->
- <value>taiwaneseCounting</value>
- <!-- Traditional Legal Ideograph Format -->
- <value>ideographLegalTraditional</value>
- <!-- Taiwanese Counting Thousand System -->
- <value>taiwaneseCountingThousand</value>
- <!-- Taiwanese Digital Counting System -->
- <value>taiwaneseDigital</value>
- <!-- Chinese Counting System -->
- <value>chineseCounting</value>
- <!-- Chinese Legal Simplified Format -->
- <value>chineseLegalSimplified</value>
- <!-- Chinese Counting Thousand System -->
- <value>chineseCountingThousand</value>
- <!-- Korean Digital Counting System -->
- <value>koreanDigital</value>
- <!-- Korean Counting System -->
- <value>koreanCounting</value>
- <!-- Korean Legal Numbering -->
- <value>koreanLegal</value>
- <!-- Korean Digital Counting System Alternate -->
- <value>koreanDigital2</value>
- <!-- Vietnamese Numerals -->
- <value>vietnameseCounting</value>
- <!-- Lowercase Russian Alphabet -->
- <value>russianLower</value>
- <!-- Uppercase Russian Alphabet -->
- <value>russianUpper</value>
- <!-- No Numbering -->
- <value>none</value>
- <!-- Number With Dashes -->
- <value>numberInDash</value>
- <!-- Hebrew Numerals -->
- <value>hebrew1</value>
- <!-- Hebrew Alphabet -->
- <value>hebrew2</value>
- <!-- Arabic Alphabet -->
- <value>arabicAlpha</value>
- <!-- Arabic Abjad Numerals -->
- <value>arabicAbjad</value>
- <!-- Hindi Vowels -->
- <value>hindiVowels</value>
- <!-- Hindi Consonants -->
- <value>hindiConsonants</value>
- <!-- Hindi Numbers -->
- <value>hindiNumbers</value>
- <!-- Hindi Counting System -->
- <value>hindiCounting</value>
- <!-- Thai Letters -->
- <value>thaiLetters</value>
- <!-- Thai Numerals -->
- <value>thaiNumbers</value>
- <!-- Thai Counting System -->
- <value>thaiCounting</value>
- <value>custom</value>
- </choice>
- </define>
- <define name="ST_PageOrientation">
- <choice>
- <!-- Portrait Mode -->
- <value>portrait</value>
- <!-- Landscape Mode -->
- <value>landscape</value>
- </choice>
- </define>
- <define name="CT_PageSz">
- <attribute name="w">
- <ref name="ST_TwipsMeasure"/>
- </attribute>
- <attribute name="h">
- <ref name="ST_TwipsMeasure"/>
- </attribute>
- <attribute name="orient">
- <ref name="ST_PageOrientation"/>
- </attribute>
- <attribute name="code">
- <ref name="ST_DecimalNumber"/>
- </attribute>
- </define>
- <define name="CT_PageMar">
- <attribute name="top">
- <ref name="ST_SignedTwipsMeasure"/>
- </attribute>
- <attribute name="right">
- <ref name="ST_TwipsMeasure"/>
- </attribute>
- <attribute name="bottom">
- <ref name="ST_SignedTwipsMeasure"/>
- </attribute>
- <attribute name="left">
- <ref name="ST_TwipsMeasure"/>
- </attribute>
- <attribute name="header">
- <ref name="ST_TwipsMeasure"/>
- </attribute>
- <attribute name="footer">
- <ref name="ST_TwipsMeasure"/>
- </attribute>
- <attribute name="gutter">
- <ref name="ST_TwipsMeasure"/>
- </attribute>
- </define>
- <define name="ST_PageBorderZOrder">
- <choice>
- <!-- Page Border Ahead of Text -->
- <value>front</value>
- <!-- Page Border Behind Text -->
- <value>back</value>
- </choice>
- </define>
- <define name="ST_PageBorderDisplay">
- <choice>
- <!-- Display Page Border on All Pages -->
- <value>allPages</value>
- <!-- Display Page Border on First Page -->
- <value>firstPage</value>
- <!-- Display Page Border on All Pages Except First -->
- <value>notFirstPage</value>
- </choice>
- </define>
- <define name="ST_PageBorderOffset">
- <choice>
- <!-- Page Border Is Positioned Relative to Page Edges -->
- <value>page</value>
- <!-- Page Border Is Positioned Relative to Text Extents -->
- <value>text</value>
- </choice>
- </define>
- <define name="CT_PageBorders">
- <element name="top">
- <ref name="CT_Border"/>
- </element>
- <element name="left">
- <ref name="CT_Border"/>
- </element>
- <element name="bottom">
- <ref name="CT_Border"/>
- </element>
- <element name="right">
- <ref name="CT_Border"/>
- </element>
- <attribute name="zOrder">
- <ref name="ST_PageBorderZOrder"/>
- </attribute>
- <attribute name="display">
- <ref name="ST_PageBorderDisplay"/>
- </attribute>
- <attribute name="offsetFrom">
- <ref name="ST_PageBorderOffset"/>
- </attribute>
- </define>
- <define name="ST_ChapterSep">
- <choice>
- <!-- Hyphen Chapter Separator -->
- <value>hyphen</value>
- <!-- Period Chapter Separator -->
- <value>period</value>
- <!-- Colon Chapter Separator -->
- <value>colon</value>
- <!-- Em Dash Chapter Separator -->
- <value>emDash</value>
- <!-- En Dash Chapter Separator -->
- <value>enDash</value>
- </choice>
- </define>
- <define name="ST_LineNumberRestart">
- <choice>
- <!-- Restart Line Numbering on Each Page -->
- <value>newPage</value>
- <!-- Restart Line Numbering for Each Section -->
- <value>newSection</value>
- <!-- Continue Line Numbering From Previous Section -->
- <value>continuous</value>
- </choice>
- </define>
- <define name="CT_LineNumber">
- <attribute name="countBy">
- <ref name="ST_DecimalNumber"/>
- </attribute>
- <attribute name="start">
- <ref name="ST_DecimalNumber"/>
- </attribute>
- <attribute name="distance">
- <ref name="ST_TwipsMeasure"/>
- </attribute>
- <attribute name="restart">
- <ref name="ST_LineNumberRestart"/>
- </attribute>
- </define>
- <define name="CT_PageNumber">
- <attribute name="fmt">
- <ref name="ST_NumberFormat"/>
- </attribute>
- <attribute name="start">
- <ref name="ST_DecimalNumber"/>
- </attribute>
- <attribute name="chapStyle">
- <ref name="ST_DecimalNumber"/>
- </attribute>
- <attribute name="chapSep">
- <ref name="ST_ChapterSep"/>
- </attribute>
- </define>
- <define name="CT_Column">
- <attribute name="w">
- <ref name="ST_TwipsMeasure_asZero"/>
- </attribute>
- <attribute name="space">
- <ref name="ST_TwipsMeasure_asZero"/>
- </attribute>
- </define>
- <define name="CT_Columns">
- <element name="col">
- <ref name="CT_Column"/>
- </element>
- <attribute name="equalWidth">
- <ref name="ST_OnOff"/>
- </attribute>
- <attribute name="space">
- <ref name="ST_TwipsMeasure"/>
- </attribute>
- <attribute name="num">
- <ref name="ST_DecimalNumber"/>
- </attribute>
- <attribute name="sep">
- <ref name="ST_OnOff"/>
- </attribute>
- </define>
- <define name="ST_VerticalJc">
- <choice>
- <!-- Align Top -->
- <value>top</value>
- <!-- Align Center -->
- <value>center</value>
- <!-- Vertical Justification -->
- <value>both</value>
- <!-- Align Bottom -->
- <value>bottom</value>
- </choice>
- </define>
- <define name="CT_VerticalJc">
- <attribute name="val">
- <ref name="ST_VerticalJc"/>
- </attribute>
- </define>
- <define name="ST_DocGrid">
- <choice>
- <!-- No Document Grid -->
- <value>default</value>
- <!-- Line Grid Only -->
- <value>lines</value>
- <!-- Line and Character Grid -->
- <value>linesAndChars</value>
- <!-- Character Grid Only -->
- <value>snapToChars</value>
- </choice>
- </define>
- <define name="CT_DocGrid">
- <attribute name="type">
- <ref name="ST_DocGrid"/>
- </attribute>
- <attribute name="linePitch">
- <ref name="ST_DecimalNumber"/>
- </attribute>
- <attribute name="charSpace">
- <ref name="ST_DecimalNumber"/>
- </attribute>
- </define>
- <define name="ST_HdrFtr">
- <choice>
- <!-- Even Numbered Pages Only -->
- <value>even</value>
- <!-- Default Header or Footer -->
- <value>default</value>
- <!-- First Page Only -->
- <value>first</value>
- </choice>
- </define>
- <define name="ST_FtnEdn">
- <choice>
- <!-- Normal Footnote/Endnote -->
- <value>normal</value>
- <!-- Separator -->
- <value>separator</value>
- <!-- Continuation Separator -->
- <value>continuationSeparator</value>
- <!-- Continuation Notice Separator -->
- <value>continuationNotice</value>
- </choice>
- </define>
- <define name="CT_HdrFtrRef">
- <attribute name="type">
- <ref name="ST_HdrFtr"/>
- </attribute>
- <attribute name="r:id">
- <ref name="ST_String"/>
- </attribute>
- </define>
- <define name="EG_HdrFtrReferences">
- <choice>
- <element name="headerReference">
- <ref name="CT_HdrFtrRef"/>
- </element>
- <element name="footerReference">
- <ref name="CT_HdrFtrRef"/>
- </element>
- </choice>
- </define>
- <define name="CT_HdrFtr">
- <ref name="EG_BlockLevelElts"/>
- </define>
- <define name="EG_SectPrContents">
- <element name="footnotePr">
- <ref name="CT_FtnProps"/>
- </element>
- <element name="endnotePr">
- <ref name="CT_EdnProps"/>
- </element>
- <element name="type">
- <ref name="CT_SectType"/>
- </element>
- <element name="pgSz">
- <ref name="CT_PageSz"/>
- </element>
- <element name="pgMar">
- <ref name="CT_PageMar"/>
- </element>
- <element name="paperSrc">
- <ref name="CT_PaperSource"/>
- </element>
- <element name="pgBorders">
- <ref name="CT_PageBorders"/>
- </element>
- <element name="lnNumType">
- <ref name="CT_LineNumber"/>
- </element>
- <element name="pgNumType">
- <ref name="CT_PageNumber"/>
- </element>
- <element name="cols">
- <ref name="CT_Columns"/>
- </element>
- <element name="formProt">
- <ref name="CT_OnOff"/>
- </element>
- <element name="vAlign">
- <ref name="CT_VerticalJc"/>
- </element>
- <element name="noEndnote">
- <ref name="CT_OnOff"/>
- </element>
- <element name="titlePg">
- <ref name="CT_OnOff"/>
- </element>
- <element name="textDirection">
- <ref name="CT_TextDirection"/>
- </element>
- <element name="bidi">
- <ref name="CT_OnOff"/>
- </element>
- <element name="rtlGutter">
- <ref name="CT_OnOff"/>
- </element>
- <element name="docGrid">
- <ref name="CT_DocGrid"/>
- </element>
- <element name="printerSettings">
- <ref name="CT_Rel"/>
- </element>
- </define>
- <define name="AG_SectPrAttributes">
- <attribute name="rsidRPr">
- <data type="string"/>
- </attribute>
- <attribute name="rsidDel">
- <data type="string"/>
- </attribute>
- <attribute name="rsidR">
- <data type="string"/>
- </attribute>
- <attribute name="rsidSect">
- <data type="string"/>
- </attribute>
- </define>
- <define name="CT_SectPrBase">
- <ref name="EG_SectPrContents"/>
- <ref name="AG_SectPrAttributes"/>
- </define>
- <define name="CT_SectPr">
- <ref name="EG_HdrFtrReferences"/>
- <ref name="EG_SectPrContents"/>
- <element name="sectPrChange">
- <ref name="CT_SectPrChange"/>
- </element>
- <ref name="AG_SectPrAttributes"/>
- </define>
- <define name="CT_finalSectPr">
- <ref name="EG_HdrFtrReferences"/>
- <ref name="EG_SectPrContents"/>
- <element name="sectPrChange">
- <ref name="CT_SectPrChange"/>
- </element>
- <ref name="AG_SectPrAttributes"/>
- </define>
- <define name="ST_BrType">
- <choice>
- <!-- Page Break -->
- <value>page</value>
- <!-- Column Break -->
- <value>column</value>
- <!-- Line Break -->
- <value>textWrapping</value>
- </choice>
- </define>
- <define name="ST_BrClear">
- <choice>
- <!-- Restart On Next Line -->
- <value>none</value>
- <!-- Restart In Next Text Region When In Leftmost Position -->
- <value>left</value>
- <!-- Restart In Next Text Region When In Rightmost Position -->
- <value>right</value>
- <!-- Restart On Next Full Line -->
- <value>all</value>
- </choice>
- </define>
- <define name="CT_Br">
- <attribute name="type">
- <ref name="ST_BrType"/>
- </attribute>
- <attribute name="clear">
- <ref name="ST_BrClear"/>
- </attribute>
- </define>
- <define name="CT_Br_OutOfOrder">
- <attribute name="type">
- <ref name="ST_BrType"/>
- </attribute>
- <attribute name="clear">
- <ref name="ST_BrClear"/>
- </attribute>
- </define>
- <define name="ST_PTabAlignment">
- <choice>
- <!-- Left -->
- <value>left</value>
- <!-- Center -->
- <value>center</value>
- <!-- Right -->
- <value>right</value>
- </choice>
- </define>
- <define name="ST_PTabRelativeTo">
- <choice>
- <!-- Relative To Text Margins -->
- <value>margin</value>
- <!-- Relative To Indents -->
- <value>indent</value>
- </choice>
- </define>
- <define name="ST_PTabLeader">
- <choice>
- <!-- No Leader Character -->
- <value>none</value>
- <!-- Dot Leader Character -->
- <value>dot</value>
- <!-- Hyphen Leader Character -->
- <value>hyphen</value>
- <!-- Underscore Leader Character -->
- <value>underscore</value>
- <!-- Centered Dot Leader Character -->
- <value>middleDot</value>
- </choice>
- </define>
- <define name="CT_PTab">
- <attribute name="alignment">
- <ref name="ST_PTabAlignment"/>
- </attribute>
- <attribute name="relativeTo">
- <ref name="ST_PTabRelativeTo"/>
- </attribute>
- <attribute name="leader">
- <ref name="ST_PTabLeader"/>
- </attribute>
- </define>
- <define name="CT_Sym">
- <attribute name="font">
- <data type="string"/>
- </attribute>
- <attribute name="char">
- <ref name="ST_ShortHexNumber"/>
- </attribute>
- </define>
- <define name="CT_ProofErr">
- <attribute name="type">
- <data type="string"/>
- </attribute>
- </define>
- <define name="CT_Text">
- <ref name="ST_String"/>
- <attribute name="xml:space">
- <data type="string"/>
- </attribute>
- </define>
- <define name="CT_FtnEdnRefChar">
- </define>
- <define name="CT_FtnEdnSep">
- </define>
- <define name="CT_FtnEdnCont">
- </define>
- <define name="CT_PgNum">
- </define>
- <define name="CT_Cr">
- </define>
- <define name="CT_Tab">
- </define>
- <define name="EG_RunInnerContent">
- <choice>
- <element name="br">
- <ref name="CT_Br"/>
- </element>
- <element name="t">
- <ref name="CT_Text"/>
- </element>
- <element name="delText">
- <ref name="CT_Text"/>
- </element>
- <element name="instrText">
- <ref name="CT_Text"/>
- </element>
- <element name="delInstrText">
- <ref name="CT_Text"/>
- </element>
- <element name="noBreakHyphen">
- <ref name="CT_Empty"/>
- </element>
- <element name="softHyphen">
- <ref name="CT_Empty"/>
- </element>
- <element name="dayShort">
- <ref name="CT_Empty"/>
- </element>
- <element name="monthShort">
- <ref name="CT_Empty"/>
- </element>
- <element name="yearShort">
- <ref name="CT_Empty"/>
- </element>
- <element name="dayLong">
- <ref name="CT_Empty"/>
- </element>
- <element name="monthLong">
- <ref name="CT_Empty"/>
- </element>
- <element name="yearLong">
- <ref name="CT_Empty"/>
- </element>
- <element name="annotationRef">
- <ref name="CT_Empty"/>
- </element>
- <element name="footnoteRef">
- <ref name="CT_FtnEdnRefChar"/>
- </element>
- <element name="endnoteRef">
- <ref name="CT_FtnEdnRefChar"/>
- </element>
- <element name="separator">
- <ref name="CT_FtnEdnSep"/>
- </element>
- <element name="continuationSeparator">
- <ref name="CT_FtnEdnCont"/>
- </element>
- <element name="sym">
- <ref name="CT_Sym"/>
- </element>
- <element name="pgNum">
- <ref name="CT_PgNum"/>
- </element>
- <element name="cr">
- <ref name="CT_Cr"/>
- </element>
- <element name="tab">
- <ref name="CT_Tab"/>
- </element>
- <element name="object">
- <ref name="CT_Object"/>
- </element>
- <element name="pict">
- <ref name="CT_Picture"/>
- </element>
- <element name="fldChar">
- <ref name="CT_FldChar"/>
- </element>
- <element name="ruby">
- <ref name="CT_Ruby"/>
- </element>
- <element name="footnoteReference">
- <ref name="CT_FtnEdnRef"/>
- </element>
- <element name="endnoteReference">
- <ref name="CT_FtnEdnRef"/>
- </element>
- <element name="commentReference">
- <ref name="CT_CommentRef"/>
- </element>
- <element name="drawing">
- <ref name="CT_Drawing"/>
- </element>
- <element name="ptab">
- <ref name="CT_PTab"/>
- </element>
- <element name="lastRenderedPageBreak">
- <ref name="CT_Empty"/>
- </element>
- </choice>
- </define>
- <define name="CT_R">
- <ref name="EG_RPr"/>
- <ref name="EG_RunInnerContent"/>
- <attribute name="rsidRPr">
- <data type="string"/>
- </attribute>
- <attribute name="rsidDel">
- <data type="string"/>
- </attribute>
- <attribute name="rsidR">
- <data type="string"/>
- </attribute>
- </define>
- <define name="ST_Hint">
- <choice>
- <!-- High ANSI Font -->
- <value>default</value>
- <!-- East Asian Font -->
- <value>eastAsia</value>
- <!-- Complex Script Font -->
- <value>cs</value>
- </choice>
- </define>
- <define name="ST_Theme">
- <choice>
- <!-- Major East Asian Theme Font -->
- <value>majorEastAsia</value>
- <!-- Major Complex Script Theme Font -->
- <value>majorBidi</value>
- <!-- Major ASCII Theme Font -->
- <value>majorAscii</value>
- <!-- Major High ANSI Theme Font -->
- <value>majorHAnsi</value>
- <!-- Minor East Asian Theme Font -->
- <value>minorEastAsia</value>
- <!-- Minor Complex Script Theme Font -->
- <value>minorBidi</value>
- <!-- Minor ASCII Theme Font -->
- <value>minorAscii</value>
- <!-- Minor High ANSI Theme Font -->
- <value>minorHAnsi</value>
- </choice>
- </define>
- <define name="CT_Fonts">
- <attribute name="hint">
- <ref name="ST_Hint"/>
- </attribute>
- <attribute name="ascii">
- <ref name="ST_String"/>
- </attribute>
- <attribute name="hAnsi">
- <ref name="ST_String"/>
- </attribute>
- <attribute name="eastAsia">
- <ref name="ST_String"/>
- </attribute>
- <attribute name="cs">
- <ref name="ST_String"/>
- </attribute>
- <attribute name="asciiTheme">
- <ref name="ST_Theme"/>
- </attribute>
- <attribute name="hAnsiTheme">
- <ref name="ST_Theme"/>
- </attribute>
- <attribute name="eastAsiaTheme">
- <ref name="ST_Theme"/>
- </attribute>
- <attribute name="cstheme">
- <ref name="ST_Theme"/>
- </attribute>
- </define>
- <define name="EG_RPrBase">
- <element name="rStyle">
- <ref name="CT_String"/>
- </element>
- <element name="rFonts">
- <ref name="CT_Fonts"/>
- </element>
- <element name="b">
- <ref name="CT_OnOff"/>
- </element>
- <element name="bCs">
- <ref name="CT_OnOff"/>
- </element>
- <element name="i">
- <ref name="CT_OnOff"/>
- </element>
- <element name="iCs">
- <ref name="CT_OnOff"/>
- </element>
- <element name="caps">
- <ref name="CT_OnOff"/>
- </element>
- <element name="smallCaps">
- <ref name="CT_OnOff"/>
- </element>
- <element name="strike">
- <ref name="CT_OnOff"/>
- </element>
- <element name="dstrike">
- <ref name="CT_OnOff"/>
- </element>
- <element name="outline">
- <ref name="CT_OnOff"/>
- </element>
- <element name="shadow">
- <ref name="CT_OnOff"/>
- </element>
- <element name="emboss">
- <ref name="CT_OnOff"/>
- </element>
- <element name="imprint">
- <ref name="CT_OnOff"/>
- </element>
- <element name="noProof">
- <ref name="CT_OnOff"/>
- </element>
- <element name="snapToGrid">
- <ref name="CT_OnOff"/>
- </element>
- <element name="vanish">
- <ref name="CT_OnOff"/>
- </element>
- <element name="webHidden">
- <ref name="CT_OnOff"/>
- </element>
- <element name="color">
- <ref name="CT_Color"/>
- </element>
- <element name="spacing">
- <ref name="CT_SignedTwipsMeasure"/>
- </element>
- <element name="w">
- <ref name="CT_TextScale"/>
- </element>
- <element name="kern">
- <ref name="CT_HpsMeasure"/>
- </element>
- <element name="position">
- <ref name="CT_SignedHpsMeasure"/>
- </element>
- <element name="sz">
- <ref name="CT_HpsMeasure"/>
- </element>
- <element name="szCs">
- <ref name="CT_HpsMeasure"/>
- </element>
- <element name="highlight">
- <ref name="CT_Highlight"/>
- </element>
- <element name="u">
- <ref name="CT_Underline"/>
- </element>
- <element name="effect">
- <ref name="CT_TextEffect"/>
- </element>
- <element name="bdr">
- <ref name="CT_Border"/>
- </element>
- <element name="shd">
- <ref name="CT_Shd"/>
- </element>
- <element name="fitText">
- <ref name="CT_FitText"/>
- </element>
- <element name="vertAlign">
- <ref name="CT_VerticalAlignRun"/>
- </element>
- <element name="rtl">
- <ref name="CT_OnOff"/>
- </element>
- <element name="cs">
- <ref name="CT_OnOff"/>
- </element>
- <element name="em">
- <ref name="CT_Em"/>
- </element>
- <element name="lang">
- <ref name="CT_Language"/>
- </element>
- <element name="eastAsianLayout">
- <ref name="CT_EastAsianLayout"/>
- </element>
- <element name="specVanish">
- <ref name="CT_OnOff"/>
- </element>
- <element name="oMath">
- <ref name="CT_OnOff"/>
- </element>
- <element name="w14:glow">
- <ref name="BUILT_IN_ANY_TYPE"/>
- </element>
- <element name="w14:shadow">
- <ref name="BUILT_IN_ANY_TYPE"/>
- </element>
- <element name="w14:reflection">
- <ref name="BUILT_IN_ANY_TYPE"/>
- </element>
- <element name="w14:textOutline">
- <ref name="BUILT_IN_ANY_TYPE"/>
- </element>
- <element name="w14:textFill">
- <ref name="BUILT_IN_ANY_TYPE"/>
- </element>
- <element name="w14:scene3d">
- <ref name="BUILT_IN_ANY_TYPE"/>
- </element>
- <element name="w14:props3d">
- <ref name="BUILT_IN_ANY_TYPE"/>
- </element>
- <element name="w14:ligatures">
- <ref name="BUILT_IN_ANY_TYPE"/>
- </element>
- <element name="w14:numForm">
- <ref name="BUILT_IN_ANY_TYPE"/>
- </element>
- <element name="w14:numSpacing">
- <ref name="BUILT_IN_ANY_TYPE"/>
- </element>
- <element name="w14:stylisticSets">
- <ref name="BUILT_IN_ANY_TYPE"/>
- </element>
- <element name="w14:cntxtAlts">
- <ref name="BUILT_IN_ANY_TYPE"/>
- </element>
- </define>
- <define name="EG_RPrContent">
- <ref name="EG_RPrBase"/>
- <element name="rPrChange">
- <ref name="CT_RPrChange"/>
- </element>
- </define>
- <define name="CT_RPr">
- <ref name="EG_RPrContent"/>
- </define>
- <define name="EG_RPr">
- <element name="rPr">
- <ref name="CT_RPr"/>
- </element>
- </define>
- <define name="EG_RPrMath">
- <choice>
- <ref name="EG_RPr"/>
- <element name="ins">
- <ref name="CT_RPrChange"/>
- </element>
- <element name="del">
- <ref name="CT_RPrChange"/>
- </element>
- </choice>
- </define>
- <define name="CT_RPrOriginal">
- <ref name="EG_RPrBase"/>
- </define>
- <define name="CT_ParaRPrOriginal">
- <ref name="EG_ParaRPrTrackChanges"/>
- <ref name="EG_RPrBase"/>
- </define>
- <define name="CT_ParaRPr">
- <ref name="EG_ParaRPrTrackChanges"/>
- <ref name="EG_RPrBase"/>
- <element name="rPrChange">
- <ref name="CT_ParaRPrChange"/>
- </element>
- </define>
- <define name="CT_ParaTrackChange">
- <ref name="CT_TrackChange"/>
- </define>
- <define name="EG_ParaRPrTrackChanges">
- <element name="ins">
- <ref name="CT_ParaTrackChange"/>
- </element>
- <element name="del">
- <ref name="CT_ParaTrackChange"/>
- </element>
- <element name="moveFrom">
- <ref name="CT_TrackChange"/>
- </element>
- <element name="moveTo">
- <ref name="CT_TrackChange"/>
- </element>
- </define>
- <define name="CT_AltChunk">
- <element name="altChunkPr">
- <ref name="CT_AltChunkPr"/>
- </element>
- <attribute name="r:id">
- <ref name="ST_String"/>
- </attribute>
- </define>
- <define name="CT_AltChunkPr">
- <element name="matchSrc">
- <ref name="CT_OnOff"/>
- </element>
- </define>
- <define name="ST_RubyAlign">
- <choice>
- <value>center</value>
- <value>distributeLetter</value>
- <value>distributeSpace</value>
- <value>left</value>
- <value>right</value>
- <value>rightVertical</value>
- </choice>
- </define>
- <define name="CT_RubyAlign">
- <attribute name="val">
- <ref name="ST_RubyAlign"/>
- </attribute>
- </define>
- <define name="CT_RubyPr">
- <element name="rubyAlign">
- <ref name="CT_RubyAlign"/>
- </element>
- <element name="hps">
- <ref name="CT_HpsMeasure"/>
- </element>
- <element name="hpsRaise">
- <ref name="CT_HpsMeasure"/>
- </element>
- <element name="hpsBaseText">
- <ref name="CT_HpsMeasure"/>
- </element>
- <element name="lid">
- <ref name="CT_Lang"/>
- </element>
- <element name="dirty">
- <ref name="CT_OnOff"/>
- </element>
- </define>
- <define name="EG_RubyContent">
- <choice>
- <element name="r">
- <ref name="CT_R"/>
- </element>
- <ref name="EG_RunLevelElts"/>
- </choice>
- </define>
- <define name="CT_RubyContent">
- <ref name="EG_RubyContent"/>
- </define>
- <define name="CT_Ruby">
- <element name="rubyPr">
- <ref name="CT_RubyPr"/>
- </element>
- <element name="rt">
- <ref name="CT_RubyContent"/>
- </element>
- <element name="rubyBase">
- <ref name="CT_RubyContent"/>
- </element>
- </define>
- <define name="CT_Lock">
- <attribute name="val">
- <data type="string"/>
- </attribute>
- </define>
- <define name="CT_SdtListItem">
- <attribute name="displayText">
- <data type="string"/>
- </attribute>
- <attribute name="value">
- <data type="string"/>
- </attribute>
- </define>
- <define name="CT_SdtDateMappingType">
- <attribute name="val">
- <data type="string"/>
- </attribute>
- </define>
- <define name="CT_CalendarType">
- <attribute name="val">
- <data type="string"/>
- </attribute>
- </define>
- <define name="CT_SdtDate">
- <element name="dateFormat">
- <ref name="CT_String"/>
- </element>
- <element name="lid">
- <ref name="CT_Lang"/>
- </element>
- <element name="storeMappedDataAs">
- <ref name="CT_SdtDateMappingType"/>
- </element>
- <element name="calendar">
- <ref name="CT_CalendarType"/>
- </element>
- <attribute name="fullDate">
- <data type="string"/>
- </attribute>
- </define>
- <define name="CT_SdtDocPart">
- <element name="docPartGallery">
- <ref name="CT_String"/>
- </element>
- <element name="docPartCategory">
- <ref name="CT_String"/>
- </element>
- <element name="docPartUnique">
- <ref name="CT_OnOff"/>
- </element>
- </define>
- <define name="CT_SdtDropDownList">
- <element name="listItem">
- <ref name="CT_SdtListItem"/>
- </element>
- <attribute name="lastValue">
- <data type="string"/>
- </attribute>
- </define>
- <define name="CT_Placeholder">
- <element name="docPart">
- <ref name="CT_String"/>
- </element>
- </define>
- <define name="CT_SdtText">
- <attribute name="multiLine">
- <data type="string"/>
- </attribute>
- </define>
- <define name="CT_DataBinding">
- <attribute name="prefixMappings">
- <data type="string"/>
- </attribute>
- <attribute name="xpath">
- <data type="string"/>
- </attribute>
- <attribute name="storeItemID">
- <data type="string"/>
- </attribute>
- </define>
- <define name="CT_SdtPr">
- <choice>
- <element name="rPr">
- <ref name="CT_RPr"/>
- </element>
- <element name="alias">
- <ref name="CT_String"/>
- </element>
- <element name="lock">
- <ref name="CT_Lock"/>
- </element>
- <element name="placeholder">
- <ref name="CT_Placeholder"/>
- </element>
- <element name="showingPlcHdr">
- <ref name="CT_OnOff"/>
- </element>
- <element name="dataBinding">
- <ref name="CT_DataBinding"/>
- </element>
- <element name="temporary">
- <ref name="CT_OnOff"/>
- </element>
- <element name="id">
- <ref name="CT_DecimalNumber"/>
- </element>
- <element name="tag">
- <ref name="CT_String"/>
- </element>
- <element name="equation">
- <ref name="CT_OnOff"/>
- </element>
- <element name="comboBox">
- <ref name="CT_SdtDropDownList"/>
- </element>
- <element name="w14:checkbox">
- <ref name="CT_SdtCheckbox"/>
- </element>
- <element name="date">
- <ref name="CT_SdtDate"/>
- </element>
- <element name="docPartObj">
- <ref name="CT_SdtDocPart"/>
- </element>
- <element name="docPartList">
- <ref name="CT_SdtDocPart"/>
- </element>
- <element name="dropDownList">
- <ref name="CT_SdtDropDownList"/>
- </element>
- <element name="picture">
- <ref name="CT_OnOff"/>
- </element>
- <element name="richText">
- <ref name="CT_Empty"/>
- </element>
- <element name="text">
- <ref name="CT_OnOff"/>
- </element>
- <element name="citation">
- <ref name="CT_OnOff"/>
- </element>
- <element name="group">
- <ref name="CT_OnOff"/>
- </element>
- <element name="bibliography">
- <ref name="CT_Empty"/>
- </element>
- </choice>
- </define>
- <define name="CT_SdtEndPr">
- <element name="rPr">
- <ref name="CT_RPr"/>
- </element>
- </define>
- <define name="EG_ContentRunContent">
- <choice>
- <element name="customXml">
- <ref name="CT_CustomXmlRun"/>
- </element>
- <element name="smartTag">
- <ref name="CT_SmartTagRun"/>
- </element>
- <element name="sdt">
- <ref name="CT_SdtRun"/>
- </element>
- <element name="dir">
- <ref name="CT_DirContentRun"/>
- </element>
- <element name="r">
- <ref name="CT_R"/>
- </element>
- <ref name="EG_RunLevelElts"/>
- </choice>
- </define>
- <define name="CT_DirContentRun">
- <ref name="EG_PContent"/>
- <attribute name="val">
- <ref name="ST_Direction"/>
- </attribute>
- </define>
- <define name="ST_Direction">
- <choice>
- <value>ltr</value>
- <value>rtl</value>
- </choice>
- </define>
- <define name="CT_SdtContentRun">
- <ref name="EG_PContent"/>
- </define>
- <define name="EG_ContentBlockContent">
- <choice>
- <element name="customXml">
- <ref name="CT_CustomXmlBlock"/>
- </element>
- <element name="sdt">
- <ref name="CT_SdtBlock"/>
- </element>
- <element name="p">
- <ref name="CT_P"/>
- </element>
- <element name="tbl">
- <ref name="CT_Tbl"/>
- </element>
- <!-- tdf#108714 : allow <w:br> at block level (despite this is illegal according to ECMA-376-1:2016) - bug-to-bug compatibility with Word -->
- <element name="br">
- <ref name="CT_Br_OutOfOrder"/>
- </element>
- <!-- end tdf#108714 -->
- <ref name="EG_RunLevelElts"/>
- </choice>
- </define>
- <define name="CT_SdtContentBlock">
- <ref name="EG_ContentBlockContent"/>
- </define>
- <define name="EG_ContentRowContent">
- <choice>
- <element name="tr">
- <ref name="CT_Row"/>
- </element>
- <element name="customXml">
- <ref name="CT_CustomXmlRow"/>
- </element>
- <element name="sdt">
- <ref name="CT_SdtRow"/>
- </element>
- <ref name="EG_RunLevelElts"/>
- </choice>
- </define>
- <define name="CT_SdtContentRow">
- <ref name="EG_ContentRowContent"/>
- </define>
- <define name="EG_ContentCellContent">
- <choice>
- <element name="tc">
- <ref name="CT_Tc"/>
- </element>
- <element name="customXml">
- <ref name="CT_CustomXmlCell"/>
- </element>
- <element name="sdt">
- <ref name="CT_SdtCell"/>
- </element>
- <ref name="EG_RunLevelElts"/>
- </choice>
- </define>
- <define name="CT_SdtContentCell">
- <ref name="EG_ContentCellContent"/>
- </define>
- <define name="CT_SdtBlock">
- <element name="sdtPr">
- <ref name="CT_SdtPr"/>
- </element>
- <element name="sdtEndPr">
- <ref name="CT_SdtEndPr"/>
- </element>
- <element name="sdtContent">
- <ref name="CT_SdtContentBlock"/>
- </element>
- </define>
- <define name="CT_SdtRun">
- <element name="sdtPr">
- <ref name="CT_SdtPr"/>
- </element>
- <element name="sdtEndPr">
- <ref name="CT_SdtEndPr"/>
- </element>
- <element name="sdtContent">
- <ref name="CT_SdtContentRun"/>
- </element>
- </define>
- <define name="CT_SdtCell">
- <element name="sdtPr">
- <ref name="CT_SdtPr"/>
- </element>
- <element name="sdtEndPr">
- <ref name="CT_SdtEndPr"/>
- </element>
- <element name="sdtContent">
- <ref name="CT_SdtContentCell"/>
- </element>
- </define>
- <define name="CT_SdtRow">
- <element name="sdtPr">
- <ref name="CT_SdtPr"/>
- </element>
- <element name="sdtEndPr">
- <ref name="CT_SdtEndPr"/>
- </element>
- <element name="sdtContent">
- <ref name="CT_SdtContentRow"/>
- </element>
- </define>
- <define name="CT_Attr">
- <attribute name="uri">
- <data type="string"/>
- </attribute>
- <attribute name="name">
- <data type="string"/>
- </attribute>
- <attribute name="val">
- <data type="string"/>
- </attribute>
- </define>
- <define name="CT_CustomXmlRun">
- <element name="customXmlPr">
- <ref name="CT_CustomXmlPr"/>
- </element>
- <ref name="EG_PContent"/>
- <attribute name="uri">
- <data type="string"/>
- </attribute>
- <attribute name="element">
- <data type="string"/>
- </attribute>
- </define>
- <define name="CT_SmartTagRun">
- <element name="smartTagPr">
- <ref name="CT_SmartTagPr"/>
- </element>
- <ref name="EG_PContent"/>
- <attribute name="uri">
- <data type="string"/>
- </attribute>
- <attribute name="element">
- <data type="string"/>
- </attribute>
- </define>
- <define name="CT_CustomXmlBlock">
- <element name="customXmlPr">
- <ref name="CT_CustomXmlPr"/>
- </element>
- <ref name="EG_ContentBlockContent"/>
- <attribute name="uri">
- <data type="string"/>
- </attribute>
- <attribute name="element">
- <data type="string"/>
- </attribute>
- </define>
- <define name="CT_CustomXmlPr">
- <element name="placeholder">
- <ref name="CT_String"/>
- </element>
- <element name="attr">
- <ref name="CT_Attr"/>
- </element>
- </define>
- <define name="CT_CustomXmlRow">
- <element name="customXmlPr">
- <ref name="CT_CustomXmlPr"/>
- </element>
- <ref name="EG_ContentRowContent"/>
- <attribute name="uri">
- <data type="string"/>
- </attribute>
- <attribute name="element">
- <data type="string"/>
- </attribute>
- </define>
- <define name="CT_CustomXmlCell">
- <element name="customXmlPr">
- <ref name="CT_CustomXmlPr"/>
- </element>
- <ref name="EG_ContentCellContent"/>
- <attribute name="uri">
- <data type="string"/>
- </attribute>
- <attribute name="element">
- <data type="string"/>
- </attribute>
- </define>
- <define name="CT_SmartTagPr">
- <element name="attr">
- <ref name="CT_Attr"/>
- </element>
- </define>
- <define name="EG_PContent">
- <choice>
- <ref name="EG_ContentRunContent"/>
- <element name="fldSimple">
- <ref name="CT_SimpleField"/>
- </element>
- <element name="hyperlink">
- <ref name="CT_Hyperlink"/>
- </element>
- <element name="subDoc">
- <ref name="CT_Rel"/>
- </element>
- </choice>
- </define>
- <define name="CT_P">
- <element name="pPr">
- <ref name="CT_PPr"/>
- </element>
- <ref name="EG_PContent"/>
- <attribute name="rsidRPr">
- <data type="string"/>
- </attribute>
- <attribute name="rsidR">
- <data type="string"/>
- </attribute>
- <attribute name="rsidDel">
- <data type="string"/>
- </attribute>
- <attribute name="rsidP">
- <data type="string"/>
- </attribute>
- <attribute name="rsidRDefault">
- <data type="string"/>
- </attribute>
- <!-- tdf#108714 : allow <w:br> at paragraph level (despite this is illegal according to ECMA-376-1:2016) - bug-to-bug compatibility with Word -->
- <element name="br">
- <ref name="CT_Br_OutOfOrder"/>
- </element>
- <!-- end tdf#108714 -->
- <!-- tdf#111550 : allow <w:tbl> at paragraph level (despite this is illegal according to ECMA-376-1:2016) - bug-to-bug compatibility with Word -->
- <element name="tbl">
- <ref name="CT_P_Tbl"/>
- </element>
- </define>
- <define name="ST_TblWidth">
- <choice>
- <!-- No Width -->
- <value>nil</value>
- <!-- Width in Fiftieths of a Percent -->
- <value>pct</value>
- <!-- Width in Twentieths of a Point -->
- <value>dxa</value>
- <!-- Automatically Determined Width -->
- <value>auto</value>
- </choice>
- </define>
- <define name="ST_MeasurementOrPercent">
- <data type="string"/>
- </define>
- <define name="CT_Height">
- <attribute name="val">
- <data type="string"/>
- </attribute>
- <attribute name="hRule">
- <data type="string"/>
- </attribute>
- </define>
- <define name="CT_TblWidth">
- <attribute name="w">
- <ref name="ST_MeasurementOrPercent"/>
- </attribute>
- <attribute name="type">
- <ref name="ST_TblWidth"/>
- </attribute>
- </define>
- <define name="CT_TblGridCol">
- <attribute name="w">
- <ref name="ST_TwipsMeasure"/>
- </attribute>
- </define>
- <define name="CT_TblGridBase">
- <element name="gridCol">
- <ref name="CT_TblGridCol"/>
- </element>
- </define>
- <define name="CT_TblGrid">
- <ref name="CT_TblGridBase"/>
- <element name="tblGridChange">
- <ref name="CT_TblGridChange"/>
- </element>
- </define>
- <define name="CT_TcBorders">
- <element name="top">
- <ref name="CT_Border"/>
- </element>
- <element name="start">
- <ref name="CT_Border"/>
- </element>
- <element name="left">
- <ref name="CT_Border"/>
- </element>
- <element name="bottom">
- <ref name="CT_Border"/>
- </element>
- <element name="end">
- <ref name="CT_Border"/>
- </element>
- <element name="right">
- <ref name="CT_Border"/>
- </element>
- <element name="insideH">
- <ref name="CT_Border"/>
- </element>
- <element name="insideV">
- <ref name="CT_Border"/>
- </element>
- <element name="tl2br">
- <ref name="CT_Border"/>
- </element>
- <element name="tr2bl">
- <ref name="CT_Border"/>
- </element>
- </define>
- <define name="CT_TcMar">
- <element name="top">
- <ref name="CT_TblWidth"/>
- </element>
- <element name="start">
- <ref name="CT_TblWidth"/>
- </element>
- <element name="left">
- <ref name="CT_TblWidth"/>
- </element>
- <element name="bottom">
- <ref name="CT_TblWidth"/>
- </element>
- <element name="right">
- <ref name="CT_TblWidth"/>
- </element>
- <element name="end">
- <ref name="CT_TblWidth"/>
- </element>
- </define>
- <define name="ST_Merge">
- <choice>
- <!-- Continue Merged Region -->
- <value>continue</value>
- <!-- Start/Restart Merged Region -->
- <value>restart</value>
- </choice>
- </define>
- <define name="CT_VMerge">
- <attribute name="val">
- <ref name="ST_Merge"/>
- </attribute>
- </define>
- <define name="CT_HMerge">
- <attribute name="val">
- <ref name="ST_Merge"/>
- </attribute>
- </define>
- <define name="CT_TcPrBase">
- <element name="cnfStyle">
- <ref name="CT_Cnf"/>
- </element>
- <element name="tcW">
- <ref name="CT_TblWidth"/>
- </element>
- <element name="gridSpan">
- <ref name="CT_DecimalNumber"/>
- </element>
- <element name="hMerge">
- <ref name="CT_HMerge"/>
- </element>
- <element name="vMerge">
- <ref name="CT_VMerge"/>
- </element>
- <element name="tcBorders">
- <ref name="CT_TcBorders"/>
- </element>
- <element name="shd">
- <ref name="CT_Shd"/>
- </element>
- <element name="noWrap">
- <ref name="CT_OnOff"/>
- </element>
- <element name="tcMar">
- <ref name="CT_TcMar"/>
- </element>
- <element name="textDirection">
- <ref name="CT_TextDirection"/>
- </element>
- <element name="tcFitText">
- <ref name="CT_OnOff"/>
- </element>
- <element name="vAlign">
- <ref name="CT_VerticalJc"/>
- </element>
- <element name="hideMark">
- <ref name="CT_OnOff"/>
- </element>
- </define>
- <define name="CT_TcPr">
- <ref name="CT_TcPrInner"/>
- <element name="tcPrChange">
- <ref name="CT_TcPrChange"/>
- </element>
- </define>
- <define name="CT_TcPrInner">
- <ref name="CT_TcPrBase"/>
- <ref name="EG_CellMarkupElements"/>
- </define>
- <define name="CT_Tc">
- <element name="tcPr">
- <ref name="CT_TcPr"/>
- </element>
- <ref name="EG_BlockLevelElts"/>
- </define>
- <define name="ST_Cnf">
- <data type="string"/>
- </define>
- <define name="CT_Cnf">
- <attribute name="val">
- <ref name="ST_Cnf"/>
- </attribute>
- <attribute name="firstRow">
- <ref name="ST_OnOff"/>
- </attribute>
- <attribute name="lastRow">
- <ref name="ST_OnOff"/>
- </attribute>
- <attribute name="firstColumn">
- <ref name="ST_OnOff"/>
- </attribute>
- <attribute name="lastColumn">
- <ref name="ST_OnOff"/>
- </attribute>
- <attribute name="oddVBand">
- <ref name="ST_OnOff"/>
- </attribute>
- <attribute name="evenVBand">
- <ref name="ST_OnOff"/>
- </attribute>
- <attribute name="oddHBand">
- <ref name="ST_OnOff"/>
- </attribute>
- <attribute name="evenHBand">
- <ref name="ST_OnOff"/>
- </attribute>
- <attribute name="firstRowFirstColumn">
- <ref name="ST_OnOff"/>
- </attribute>
- <attribute name="firstRowLastColumn">
- <ref name="ST_OnOff"/>
- </attribute>
- <attribute name="lastRowFirstColumn">
- <ref name="ST_OnOff"/>
- </attribute>
- <attribute name="lastRowLastColumn">
- <ref name="ST_OnOff"/>
- </attribute>
- </define>
- <define name="CT_TrPrBase">
- <choice>
- <element name="cnfStyle">
- <ref name="CT_Cnf"/>
- </element>
- <element name="divId">
- <ref name="CT_DecimalNumber"/>
- </element>
- <element name="gridBefore">
- <ref name="CT_DecimalNumber"/>
- </element>
- <element name="gridAfter">
- <ref name="CT_TrPrBaseGridAfter"/>
- </element>
- <element name="wBefore">
- <ref name="CT_TblWidth"/>
- </element>
- <element name="wAfter">
- <ref name="CT_TblWidth"/>
- </element>
- <element name="cantSplit">
- <ref name="CT_OnOff"/>
- </element>
- <element name="trHeight">
- <ref name="CT_Height"/>
- </element>
- <element name="tblHeader">
- <ref name="CT_OnOff"/>
- </element>
- <element name="tblCellSpacing">
- <ref name="CT_TblWidth"/>
- </element>
- <element name="jc">
- <ref name="CT_Jc"/>
- </element>
- <element name="hidden">
- <ref name="CT_OnOff"/>
- </element>
- </choice>
- </define>
- <define name="CT_TrPrBaseGridAfter">
- <attribute name="val">
- <ref name="ST_DecimalNumber"/>
- </attribute>
- </define>
- <define name="CT_TrPr">
- <ref name="CT_TrPrBase"/>
- <element name="ins">
- <ref name="CT_TrackChange"/>
- </element>
- <element name="del">
- <ref name="CT_TrackChange"/>
- </element>
- <element name="trPrChange">
- <ref name="CT_TrPrChange"/>
- </element>
- </define>
- <define name="CT_Row">
- <element name="tblPrEx">
- <ref name="CT_TblPrEx"/>
- </element>
- <element name="trPr">
- <ref name="CT_TrPr"/>
- </element>
- <ref name="EG_ContentCellContent"/>
- <attribute name="rsidRPr">
- <data type="string"/>
- </attribute>
- <attribute name="rsidR">
- <data type="string"/>
- </attribute>
- <attribute name="rsidDel">
- <data type="string"/>
- </attribute>
- <attribute name="rsidTr">
- <data type="string"/>
- </attribute>
- </define>
- <define name="ST_TblLayout">
- <choice>
- <!-- Fixed Width Table Layout -->
- <value>fixed</value>
- <!-- AutoFit Table Layout -->
- <value>autofit</value>
- </choice>
- </define>
- <define name="CT_TblLayoutType">
- <attribute name="type">
- <ref name="ST_TblLayout"/>
- </attribute>
- </define>
- <define name="ST_TblOverlap">
- <choice>
- <!-- Floating Table Cannot Overlap -->
- <value>never</value>
- <!-- Floating Table Can Overlap -->
- <value>overlap</value>
- </choice>
- </define>
- <define name="CT_TblOverlap">
- <attribute name="val">
- <ref name="ST_TblOverlap"/>
- </attribute>
- </define>
- <define name="CT_TblPPr">
- <attribute name="leftFromText">
- <ref name="ST_SignedTwipsMeasure"/>
- </attribute>
- <attribute name="rightFromText">
- <ref name="ST_SignedTwipsMeasure"/>
- </attribute>
- <attribute name="topFromText">
- <ref name="ST_SignedTwipsMeasure"/>
- </attribute>
- <attribute name="bottomFromText">
- <ref name="ST_SignedTwipsMeasure"/>
- </attribute>
- <attribute name="vertAnchor">
- <data type="string"/>
- </attribute>
- <attribute name="horzAnchor">
- <data type="string"/>
- </attribute>
- <attribute name="tblpXSpec">
- <data type="string"/>
- </attribute>
- <attribute name="tblpX">
- <ref name="ST_SignedTwipsMeasure"/>
- </attribute>
- <attribute name="tblpYSpec">
- <data type="string"/>
- </attribute>
- <attribute name="tblpY">
- <ref name="ST_SignedTwipsMeasure"/>
- </attribute>
- </define>
- <define name="CT_TblCellMar">
- <element name="top">
- <ref name="CT_TblWidth"/>
- </element>
- <element name="start">
- <ref name="CT_TblWidth"/>
- </element>
- <element name="left">
- <ref name="CT_TblWidth"/>
- </element>
- <element name="bottom">
- <ref name="CT_TblWidth"/>
- </element>
- <element name="right">
- <ref name="CT_TblWidth"/>
- </element>
- <element name="end">
- <ref name="CT_TblWidth"/>
- </element>
- </define>
- <define name="CT_TblBorders">
- <element name="top">
- <ref name="CT_Border"/>
- </element>
- <element name="start">
- <ref name="CT_Border"/>
- </element>
- <element name="left">
- <ref name="CT_Border"/>
- </element>
- <element name="bottom">
- <ref name="CT_Border"/>
- </element>
- <element name="end">
- <ref name="CT_Border"/>
- </element>
- <element name="right">
- <ref name="CT_Border"/>
- </element>
- <element name="insideH">
- <ref name="CT_Border"/>
- </element>
- <element name="insideV">
- <ref name="CT_Border"/>
- </element>
- </define>
- <define name="CT_TblPrBase">
- <element name="tblStyle">
- <ref name="CT_String"/>
- </element>
- <element name="tblpPr">
- <ref name="CT_TblPPr"/>
- </element>
- <element name="tblOverlap">
- <ref name="CT_TblOverlap"/>
- </element>
- <element name="bidiVisual">
- <ref name="CT_OnOff"/>
- </element>
- <element name="tblStyleRowBandSize">
- <ref name="CT_DecimalNumber"/>
- </element>
- <element name="tblStyleColBandSize">
- <ref name="CT_DecimalNumber"/>
- </element>
- <element name="tblW">
- <ref name="CT_TblWidth"/>
- </element>
- <element name="jc">
- <ref name="CT_Jc"/>
- </element>
- <element name="tblCellSpacing">
- <ref name="CT_TblWidth"/>
- </element>
- <element name="tblInd">
- <ref name="CT_TblWidth"/>
- </element>
- <element name="tblBorders">
- <ref name="CT_TblBorders"/>
- </element>
- <element name="shd">
- <ref name="CT_Shd"/>
- </element>
- <element name="tblLayout">
- <ref name="CT_TblLayoutType"/>
- </element>
- <element name="tblCellMar">
- <ref name="CT_TblCellMar"/>
- </element>
- <element name="tblLook">
- <ref name="CT_TblLook"/>
- </element>
- <element name="tblCaption">
- <ref name="CT_String"/>
- </element>
- <element name="tblDescription">
- <ref name="CT_String"/>
- </element>
- </define>
- <define name="CT_TblPr">
- <ref name="CT_TblPrBase"/>
- <element name="tblPrChange">
- <ref name="CT_TblPrChange"/>
- </element>
- </define>
- <define name="CT_TblPrExBase">
- <element name="tblW">
- <ref name="CT_TblWidth"/>
- </element>
- <element name="jc">
- <ref name="CT_Jc"/>
- </element>
- <element name="tblCellSpacing">
- <ref name="CT_TblWidth"/>
- </element>
- <element name="tblInd">
- <ref name="CT_TblWidth"/>
- </element>
- <element name="tblBorders">
- <ref name="CT_TblBorders"/>
- </element>
- <element name="shd">
- <ref name="CT_Shd"/>
- </element>
- <element name="tblLayout">
- <ref name="CT_TblLayoutType"/>
- </element>
- <element name="tblCellMar">
- <ref name="CT_TblCellMar"/>
- </element>
- <element name="tblLook">
- <ref name="CT_TblLook"/>
- </element>
- <element name="tblCaption">
- <ref name="CT_String"/>
- </element>
- <element name="tblDescription">
- <ref name="CT_String"/>
- </element>
- </define>
- <define name="CT_TblPrEx">
- <ref name="CT_TblPrExBase"/>
- <element name="tblPrExChange">
- <ref name="CT_TblPrExChange"/>
- </element>
- </define>
- <define name="CT_Tbl">
- <ref name="EG_RangeMarkupElements"/>
- <element name="tblPr">
- <ref name="CT_TblPr"/>
- </element>
- <element name="tblGrid">
- <ref name="CT_TblGrid"/>
- </element>
- <ref name="EG_ContentRowContent"/>
- </define>
- <!-- tdf#111550 : Special element - copy of usual CT_Tbl, but only used as direct child of CT_P -->
- <define name="CT_P_Tbl">
- <ref name="EG_RangeMarkupElements"/>
- <element name="tblPr">
- <ref name="CT_TblPr"/>
- </element>
- <element name="tblGrid">
- <ref name="CT_TblGrid"/>
- </element>
- <ref name="EG_ContentRowContent"/>
- </define>
- <define name="CT_TblLook">
- <attribute name="firstRow">
- <ref name="ST_OnOff"/>
- </attribute>
- <attribute name="lastRow">
- <ref name="ST_OnOff"/>
- </attribute>
- <attribute name="firstColumn">
- <ref name="ST_OnOff"/>
- </attribute>
- <attribute name="lastColumn">
- <ref name="ST_OnOff"/>
- </attribute>
- <attribute name="noHBand">
- <ref name="ST_OnOff"/>
- </attribute>
- <attribute name="noVBand">
- <ref name="ST_OnOff"/>
- </attribute>
- <attribute name="val">
- <ref name="ST_ShortHexNumber"/>
- </attribute>
- </define>
- <define name="ST_FtnPos">
- <choice>
- <!-- Footnotes Positioned at Page Bottom -->
- <value>pageBottom</value>
- <!-- Footnotes Positioned Beneath Text -->
- <value>beneathText</value>
- <!-- Footnotes Positioned At End of Section -->
- <value>sectEnd</value>
- <!-- Footnotes Positioned At End of Document -->
- <value>docEnd</value>
- </choice>
- </define>
- <define name="CT_FtnPos">
- <attribute name="val">
- <ref name="ST_FtnPos"/>
- </attribute>
- </define>
- <define name="ST_EdnPos">
- <choice>
- <!-- Endnotes Positioned at End of Section -->
- <value>sectEnd</value>
- <!-- Endnotes Positioned at End of Document -->
- <value>docEnd</value>
- </choice>
- </define>
- <define name="CT_EdnPos">
- <attribute name="val">
- <ref name="ST_EdnPos"/>
- </attribute>
- </define>
- <define name="CT_NumFmt">
- <attribute name="format">
- <data type="string"/>
- </attribute>
- <attribute name="val">
- <ref name="ST_NumberFormat"/>
- </attribute>
- </define>
- <define name="ST_RestartNumber">
- <choice>
- <!-- Continue Numbering From Previous Section -->
- <value>continuous</value>
- <!-- Restart Numbering For Each Section -->
- <value>eachSect</value>
- <!-- Restart Numbering On Each Page -->
- <value>eachPage</value>
- </choice>
- </define>
- <define name="CT_NumRestart">
- <attribute name="val">
- <ref name="ST_RestartNumber"/>
- </attribute>
- </define>
- <define name="CT_FtnEdnRef">
- <attribute name="customMarkFollows">
- <ref name="ST_OnOff"/>
- </attribute>
- <attribute name="id">
- <ref name="ST_DecimalNumber"/>
- </attribute>
- </define>
- <define name="CT_FtnEdnSepRef">
- <attribute name="id">
- <ref name="ST_DecimalNumber"/>
- </attribute>
- </define>
- <define name="CT_FtnEdn">
- <ref name="EG_BlockLevelElts"/>
- <attribute name="type">
- <ref name="ST_FtnEdn"/>
- </attribute>
- <attribute name="id">
- <ref name="ST_DecimalNumber"/>
- </attribute>
- </define>
- <define name="CT_CommentRef">
- <ref name="CT_Markup"/>
- </define>
- <define name="EG_FtnEdnNumProps">
- <element name="numStart">
- <ref name="CT_DecimalNumber"/>
- </element>
- <element name="numRestart">
- <ref name="CT_NumRestart"/>
- </element>
- </define>
- <define name="CT_FtnProps">
- <element name="pos">
- <ref name="CT_FtnPos"/>
- </element>
- <element name="numFmt">
- <ref name="CT_NumFmt"/>
- </element>
- <ref name="EG_FtnEdnNumProps"/>
- </define>
- <define name="CT_EdnProps">
- <element name="pos">
- <ref name="CT_EdnPos"/>
- </element>
- <element name="numFmt">
- <ref name="CT_NumFmt"/>
- </element>
- <ref name="EG_FtnEdnNumProps"/>
- </define>
- <define name="CT_FtnDocProps">
- <ref name="CT_FtnProps"/>
- <element name="footnote">
- <ref name="CT_FtnEdnSepRef"/>
- </element>
- </define>
- <define name="CT_EdnDocProps">
- <ref name="CT_EdnProps"/>
- <element name="endnote">
- <ref name="CT_FtnEdnSepRef"/>
- </element>
- </define>
- <define name="CT_RecipientData">
- <element name="active">
- <ref name="CT_OnOff"/>
- </element>
- <element name="column">
- <ref name="CT_DecimalNumber"/>
- </element>
- <element name="uniqueTag">
- <data type="base64Binary"/>
- </element>
- </define>
- <define name="CT_Recipients">
- <element name="recipientData">
- <ref name="CT_RecipientData"/>
- </element>
- </define>
- <define name="recipients">
- <element name="recipients">
- <ref name="CT_Recipients"/>
- </element>
- </define>
- <define name="CT_OdsoFieldMapData">
- <element name="type">
- <ref name="CT_MailMergeOdsoFMDFieldType"/>
- </element>
- <element name="name">
- <ref name="CT_String"/>
- </element>
- <element name="mappedName">
- <ref name="CT_String"/>
- </element>
- <element name="column">
- <ref name="CT_DecimalNumber"/>
- </element>
- <element name="lid">
- <ref name="CT_Lang"/>
- </element>
- <element name="dynamicAddress">
- <ref name="CT_OnOff"/>
- </element>
- </define>
- <define name="CT_MailMergeSourceType">
- <attribute name="val">
- <data type="string"/>
- </attribute>
- </define>
- <define name="CT_Odso">
- <element name="udl">
- <ref name="CT_String"/>
- </element>
- <element name="table">
- <ref name="CT_String"/>
- </element>
- <element name="src">
- <ref name="CT_Rel"/>
- </element>
- <element name="colDelim">
- <ref name="CT_DecimalNumber"/>
- </element>
- <element name="type">
- <ref name="CT_MailMergeSourceType"/>
- </element>
- <element name="fHdr">
- <ref name="CT_OnOff"/>
- </element>
- <element name="fieldMapData">
- <ref name="CT_OdsoFieldMapData"/>
- </element>
- <element name="recipientData">
- <ref name="CT_Rel"/>
- </element>
- </define>
- <define name="CT_MailMerge">
- <element name="mainDocumentType">
- <ref name="CT_MailMergeDocType"/>
- </element>
- <element name="linkToQuery">
- <ref name="CT_OnOff"/>
- </element>
- <element name="dataType">
- <ref name="CT_MailMergeDataType"/>
- </element>
- <element name="connectString">
- <ref name="CT_String"/>
- </element>
- <element name="query">
- <ref name="CT_String"/>
- </element>
- <element name="dataSource">
- <ref name="CT_Rel"/>
- </element>
- <element name="headerSource">
- <ref name="CT_Rel"/>
- </element>
- <element name="doNotSuppressBlankLines">
- <ref name="CT_OnOff"/>
- </element>
- <element name="destination">
- <ref name="CT_MailMergeDest"/>
- </element>
- <element name="addressFieldName">
- <ref name="CT_String"/>
- </element>
- <element name="mailSubject">
- <ref name="CT_String"/>
- </element>
- <element name="mailAsAttachment">
- <ref name="CT_OnOff"/>
- </element>
- <element name="viewMergedData">
- <ref name="CT_OnOff"/>
- </element>
- <element name="activeRecord">
- <ref name="CT_DecimalNumber"/>
- </element>
- <element name="checkErrors">
- <ref name="CT_DecimalNumber"/>
- </element>
- <element name="odso">
- <ref name="CT_Odso"/>
- </element>
- </define>
- <define name="CT_TargetScreenSz">
- <attribute name="val">
- <data type="string"/>
- </attribute>
- </define>
- <define name="CT_Compat">
- <element name="useSingleBorderforContiguousCells">
- <ref name="CT_OnOff"/>
- </element>
- <element name="wpJustification">
- <ref name="CT_OnOff"/>
- </element>
- <element name="noTabHangInd">
- <ref name="CT_OnOff"/>
- </element>
- <element name="noLeading">
- <ref name="CT_OnOff"/>
- </element>
- <element name="spaceForUL">
- <ref name="CT_OnOff"/>
- </element>
- <element name="noColumnBalance">
- <ref name="CT_OnOff"/>
- </element>
- <element name="balanceSingleByteDoubleByteWidth">
- <ref name="CT_OnOff"/>
- </element>
- <element name="noExtraLineSpacing">
- <ref name="CT_OnOff"/>
- </element>
- <element name="doNotLeaveBackslashAlone">
- <ref name="CT_OnOff"/>
- </element>
- <element name="ulTrailSpace">
- <ref name="CT_OnOff"/>
- </element>
- <element name="doNotExpandShiftReturn">
- <ref name="CT_OnOff"/>
- </element>
- <element name="spacingInWholePoints">
- <ref name="CT_OnOff"/>
- </element>
- <element name="lineWrapLikeWord6">
- <ref name="CT_OnOff"/>
- </element>
- <element name="printBodyTextBeforeHeader">
- <ref name="CT_OnOff"/>
- </element>
- <element name="printColBlack">
- <ref name="CT_OnOff"/>
- </element>
- <element name="wpSpaceWidth">
- <ref name="CT_OnOff"/>
- </element>
- <element name="showBreaksInFrames">
- <ref name="CT_OnOff"/>
- </element>
- <element name="subFontBySize">
- <ref name="CT_OnOff"/>
- </element>
- <element name="suppressBottomSpacing">
- <ref name="CT_OnOff"/>
- </element>
- <element name="suppressTopSpacing">
- <ref name="CT_OnOff"/>
- </element>
- <element name="suppressSpacingAtTopOfPage">
- <ref name="CT_OnOff"/>
- </element>
- <element name="suppressTopSpacingWP">
- <ref name="CT_OnOff"/>
- </element>
- <element name="suppressSpBfAfterPgBrk">
- <ref name="CT_OnOff"/>
- </element>
- <element name="swapBordersFacingPages">
- <ref name="CT_OnOff"/>
- </element>
- <element name="convMailMergeEsc">
- <ref name="CT_OnOff"/>
- </element>
- <element name="truncateFontHeightsLikeWP6">
- <ref name="CT_OnOff"/>
- </element>
- <element name="mwSmallCaps">
- <ref name="CT_OnOff"/>
- </element>
- <element name="usePrinterMetrics">
- <ref name="CT_OnOff"/>
- </element>
- <element name="doNotSuppressParagraphBorders">
- <ref name="CT_OnOff"/>
- </element>
- <element name="wrapTrailSpaces">
- <ref name="CT_OnOff"/>
- </element>
- <element name="footnoteLayoutLikeWW8">
- <ref name="CT_OnOff"/>
- </element>
- <element name="shapeLayoutLikeWW8">
- <ref name="CT_OnOff"/>
- </element>
- <element name="alignTablesRowByRow">
- <ref name="CT_OnOff"/>
- </element>
- <element name="forgetLastTabAlignment">
- <ref name="CT_OnOff"/>
- </element>
- <element name="adjustLineHeightInTable">
- <ref name="CT_OnOff"/>
- </element>
- <element name="autoSpaceLikeWord95">
- <ref name="CT_OnOff"/>
- </element>
- <element name="noSpaceRaiseLower">
- <ref name="CT_OnOff"/>
- </element>
- <element name="doNotUseHTMLParagraphAutoSpacing">
- <ref name="CT_OnOff"/>
- </element>
- <element name="layoutRawTableWidth">
- <ref name="CT_OnOff"/>
- </element>
- <element name="layoutTableRowsApart">
- <ref name="CT_OnOff"/>
- </element>
- <element name="useWord97LineBreakRules">
- <ref name="CT_OnOff"/>
- </element>
- <element name="doNotBreakWrappedTables">
- <ref name="CT_OnOff"/>
- </element>
- <element name="doNotSnapToGridInCell">
- <ref name="CT_OnOff"/>
- </element>
- <element name="selectFldWithFirstOrLastChar">
- <ref name="CT_OnOff"/>
- </element>
- <element name="applyBreakingRules">
- <ref name="CT_OnOff"/>
- </element>
- <element name="doNotWrapTextWithPunct">
- <ref name="CT_OnOff"/>
- </element>
- <element name="doNotUseEastAsianBreakRules">
- <ref name="CT_OnOff"/>
- </element>
- <element name="useWord2002TableStyleRules">
- <ref name="CT_OnOff"/>
- </element>
- <element name="growAutofit">
- <ref name="CT_OnOff"/>
- </element>
- <element name="useFELayout">
- <ref name="CT_OnOff"/>
- </element>
- <element name="useNormalStyleForList">
- <ref name="CT_OnOff"/>
- </element>
- <element name="doNotUseIndentAsNumberingTabStop">
- <ref name="CT_OnOff"/>
- </element>
- <element name="useAltKinsokuLineBreakRules">
- <ref name="CT_OnOff"/>
- </element>
- <element name="allowSpaceOfSameStyleInTable">
- <ref name="CT_OnOff"/>
- </element>
- <element name="doNotSuppressIndentation">
- <ref name="CT_OnOff"/>
- </element>
- <element name="doNotAutofitConstrainedTables">
- <ref name="CT_OnOff"/>
- </element>
- <element name="autofitToFirstFixedWidthCell">
- <ref name="CT_OnOff"/>
- </element>
- <element name="underlineTabInNumList">
- <ref name="CT_OnOff"/>
- </element>
- <element name="displayHangulFixedWidth">
- <ref name="CT_OnOff"/>
- </element>
- <element name="splitPgBreakAndParaMark">
- <ref name="CT_OnOff"/>
- </element>
- <element name="doNotVertAlignCellWithSp">
- <ref name="CT_OnOff"/>
- </element>
- <element name="doNotBreakConstrainedForcedTable">
- <ref name="CT_OnOff"/>
- </element>
- <element name="doNotVertAlignInTxbx">
- <ref name="CT_OnOff"/>
- </element>
- <element name="useAnsiKerningPairs">
- <ref name="CT_OnOff"/>
- </element>
- <element name="cachedColBalance">
- <ref name="CT_OnOff"/>
- </element>
- <element name="compatSetting">
- <ref name="CT_CompatSetting"/>
- </element>
- </define>
- <define name="CT_CompatSetting">
- <attribute name="name">
- <ref name="ST_String"/>
- </attribute>
- <attribute name="uri">
- <ref name="ST_String"/>
- </attribute>
- <attribute name="val">
- <ref name="ST_String"/>
- </attribute>
- </define>
- <define name="CT_DocVar">
- <attribute name="name">
- <data type="string"/>
- </attribute>
- <attribute name="val">
- <data type="string"/>
- </attribute>
- </define>
- <define name="CT_DocVars">
- <element name="docVar">
- <ref name="CT_DocVar"/>
- </element>
- </define>
- <define name="CT_DocRsids">
- <element name="rsidRoot">
- <ref name="CT_LongHexNumber"/>
- </element>
- <element name="rsid">
- <ref name="CT_LongHexNumber"/>
- </element>
- </define>
- <define name="CT_CharacterSpacing">
- <attribute name="val">
- <data type="string"/>
- </attribute>
- </define>
- <define name="CT_SaveThroughXslt">
- <attribute name="r:id">
- <ref name="ST_String"/>
- </attribute>
- <attribute name="solutionID">
- <data type="string"/>
- </attribute>
- </define>
- <define name="CT_RPrDefault">
- <element name="rPr">
- <ref name="CT_RPr"/>
- </element>
- </define>
- <define name="CT_PPrDefault">
- <element name="pPr">
- <ref name="CT_PPr"/>
- </element>
- </define>
- <define name="CT_DocDefaults">
- <element name="rPrDefault">
- <ref name="CT_RPrDefault"/>
- </element>
- <element name="pPrDefault">
- <ref name="CT_PPrDefault"/>
- </element>
- </define>
- <define name="ST_ColorSchemeIndex">
- <choice>
- <!-- Dark 1 Theme Color Reference -->
- <value>dark1</value>
- <!-- Light 1 Theme Color Reference -->
- <value>light1</value>
- <!-- Dark 2 Theme Color Reference -->
- <value>dark2</value>
- <!-- Light 2 Theme Color Reference -->
- <value>light2</value>
- <!-- Accent 1 Theme Color Reference -->
- <value>accent1</value>
- <!-- Accent 2 Theme Color Reference -->
- <value>accent2</value>
- <!-- Accent 3 Theme Color Reference -->
- <value>accent3</value>
- <!-- Accent4 Theme Color Reference -->
- <value>accent4</value>
- <!-- Accent5 Theme Color Reference -->
- <value>accent5</value>
- <!-- Accent 6 Theme Color Reference -->
- <value>accent6</value>
- <!-- Hyperlink Theme Color Reference -->
- <value>hyperlink</value>
- <!-- Followed Hyperlink Theme Color Reference -->
- <value>followedHyperlink</value>
- </choice>
- </define>
- <define name="CT_ColorSchemeMapping">
- <attribute name="bg1">
- <data type="string"/>
- </attribute>
- <attribute name="t1">
- <data type="string"/>
- </attribute>
- <attribute name="bg2">
- <data type="string"/>
- </attribute>
- <attribute name="t2">
- <data type="string"/>
- </attribute>
- <attribute name="accent1">
- <data type="string"/>
- </attribute>
- <attribute name="accent2">
- <data type="string"/>
- </attribute>
- <attribute name="accent3">
- <data type="string"/>
- </attribute>
- <attribute name="accent4">
- <data type="string"/>
- </attribute>
- <attribute name="accent5">
- <data type="string"/>
- </attribute>
- <attribute name="accent6">
- <data type="string"/>
- </attribute>
- <attribute name="hyperlink">
- <data type="string"/>
- </attribute>
- <attribute name="followedHyperlink">
- <data type="string"/>
- </attribute>
- </define>
- <define name="CT_ReadingModeInkLockDown">
- <attribute name="actualPg">
- <data type="string"/>
- </attribute>
- <attribute name="w">
- <data type="string"/>
- </attribute>
- <attribute name="h">
- <data type="string"/>
- </attribute>
- <attribute name="fontSz">
- <data type="string"/>
- </attribute>
- </define>
- <define name="CT_WriteProtection">
- <attribute name="recommended">
- <ref name="ST_OnOff"/>
- </attribute>
- <ref name="AG_Password"/>
- </define>
- <define name="CT_Settings">
- <element name="writeProtection">
- <ref name="CT_WriteProtection"/>
- </element>
- <element name="view">
- <ref name="CT_View"/>
- </element>
- <element name="zoom">
- <ref name="CT_Zoom"/>
- </element>
- <element name="linkStyles">
- <ref name="CT_OnOff"/>
- </element>
- <element name="removePersonalInformation">
- <ref name="CT_OnOff"/>
- </element>
- <element name="removeDateAndTime">
- <ref name="CT_OnOff"/>
- </element>
- <element name="doNotDisplayPageBoundaries">
- <ref name="CT_OnOff"/>
- </element>
- <element name="displayBackgroundShape">
- <ref name="CT_OnOff"/>
- </element>
- <element name="printPostScriptOverText">
- <ref name="CT_OnOff"/>
- </element>
- <element name="printFractionalCharacterWidth">
- <ref name="CT_OnOff"/>
- </element>
- <element name="printFormsData">
- <ref name="CT_OnOff"/>
- </element>
- <element name="embedTrueTypeFonts">
- <ref name="CT_OnOff"/>
- </element>
- <element name="embedSystemFonts">
- <ref name="CT_OnOff"/>
- </element>
- <element name="saveSubsetFonts">
- <ref name="CT_OnOff"/>
- </element>
- <element name="saveFormsData">
- <ref name="CT_OnOff"/>
- </element>
- <element name="mirrorMargins">
- <ref name="CT_OnOff"/>
- </element>
- <element name="alignBordersAndEdges">
- <ref name="CT_OnOff"/>
- </element>
- <element name="bordersDoNotSurroundHeader">
- <ref name="CT_OnOff"/>
- </element>
- <element name="bordersDoNotSurroundFooter">
- <ref name="CT_OnOff"/>
- </element>
- <element name="gutterAtTop">
- <ref name="CT_OnOff"/>
- </element>
- <element name="hideSpellingErrors">
- <ref name="CT_OnOff"/>
- </element>
- <element name="hideGrammaticalErrors">
- <ref name="CT_OnOff"/>
- </element>
- <element name="activeWritingStyle">
- <ref name="CT_WritingStyle"/>
- </element>
- <element name="proofState">
- <ref name="CT_Proof"/>
- </element>
- <element name="formsDesign">
- <ref name="CT_OnOff"/>
- </element>
- <element name="attachedTemplate">
- <ref name="CT_Rel"/>
- </element>
- <element name="linkStyles">
- <ref name="CT_OnOff"/>
- </element>
- <element name="stylePaneFormatFilter">
- <ref name="CT_ShortHexNumber"/>
- </element>
- <element name="stylePaneSortMethod">
- <ref name="CT_ShortHexNumber"/>
- </element>
- <element name="documentType">
- <ref name="CT_DocType"/>
- </element>
- <element name="mailMerge">
- <ref name="CT_MailMerge"/>
- </element>
- <element name="revisionView">
- <ref name="CT_TrackChangesView"/>
- </element>
- <element name="trackRevisions">
- <ref name="CT_OnOff"/>
- </element>
- <element name="doNotTrackMoves">
- <ref name="CT_OnOff"/>
- </element>
- <element name="doNotTrackFormatting">
- <ref name="CT_OnOff"/>
- </element>
- <element name="documentProtection">
- <ref name="CT_DocProtect"/>
- </element>
- <element name="autoFormatOverride">
- <ref name="CT_OnOff"/>
- </element>
- <element name="styleLockTheme">
- <ref name="CT_OnOff"/>
- </element>
- <element name="styleLockQFSet">
- <ref name="CT_OnOff"/>
- </element>
- <element name="defaultTabStop">
- <ref name="CT_TwipsMeasure"/>
- </element>
- <element name="autoHyphenation">
- <ref name="CT_OnOff"/>
- </element>
- <element name="consecutiveHyphenLimit">
- <ref name="CT_DecimalNumber"/>
- </element>
- <element name="hyphenationZone">
- <ref name="CT_TwipsMeasure"/>
- </element>
- <element name="doNotHyphenateCaps">
- <ref name="CT_OnOff"/>
- </element>
- <element name="showEnvelope">
- <ref name="CT_OnOff"/>
- </element>
- <element name="summaryLength">
- <ref name="CT_DecimalNumber"/>
- </element>
- <element name="clickAndTypeStyle">
- <ref name="CT_String"/>
- </element>
- <element name="defaultTableStyle">
- <ref name="CT_String"/>
- </element>
- <element name="evenAndOddHeaders">
- <ref name="CT_OnOff"/>
- </element>
- <element name="bookFoldRevPrinting">
- <ref name="CT_OnOff"/>
- </element>
- <element name="bookFoldPrinting">
- <ref name="CT_OnOff"/>
- </element>
- <element name="bookFoldPrintingSheets">
- <ref name="CT_DecimalNumber"/>
- </element>
- <element name="drawingGridHorizontalSpacing">
- <ref name="CT_TwipsMeasure"/>
- </element>
- <element name="drawingGridVerticalSpacing">
- <ref name="CT_TwipsMeasure"/>
- </element>
- <element name="displayHorizontalDrawingGridEvery">
- <ref name="CT_DecimalNumber"/>
- </element>
- <element name="displayVerticalDrawingGridEvery">
- <ref name="CT_DecimalNumber"/>
- </element>
- <element name="doNotUseMarginsForDrawingGridOrigin">
- <ref name="CT_OnOff"/>
- </element>
- <element name="drawingGridHorizontalOrigin">
- <ref name="CT_TwipsMeasure"/>
- </element>
- <element name="drawingGridVerticalOrigin">
- <ref name="CT_TwipsMeasure"/>
- </element>
- <element name="doNotShadeFormData">
- <ref name="CT_OnOff"/>
- </element>
- <element name="noPunctuationKerning">
- <ref name="CT_OnOff"/>
- </element>
- <element name="characterSpacingControl">
- <ref name="CT_CharacterSpacing"/>
- </element>
- <element name="printTwoOnOne">
- <ref name="CT_OnOff"/>
- </element>
- <element name="strictFirstAndLastChars">
- <ref name="CT_OnOff"/>
- </element>
- <element name="noLineBreaksAfter">
- <ref name="CT_Kinsoku"/>
- </element>
- <element name="noLineBreaksBefore">
- <ref name="CT_Kinsoku"/>
- </element>
- <element name="savePreviewPicture">
- <ref name="CT_OnOff"/>
- </element>
- <element name="doNotValidateAgainstSchema">
- <ref name="CT_OnOff"/>
- </element>
- <element name="saveInvalidXml">
- <ref name="CT_OnOff"/>
- </element>
- <element name="ignoreMixedContent">
- <ref name="CT_OnOff"/>
- </element>
- <element name="alwaysShowPlaceholderText">
- <ref name="CT_OnOff"/>
- </element>
- <element name="doNotDemarcateInvalidXml">
- <ref name="CT_OnOff"/>
- </element>
- <element name="saveXmlDataOnly">
- <ref name="CT_OnOff"/>
- </element>
- <element name="useXSLTWhenSaving">
- <ref name="CT_OnOff"/>
- </element>
- <element name="saveThroughXslt">
- <ref name="CT_SaveThroughXslt"/>
- </element>
- <element name="showXMLTags">
- <ref name="CT_OnOff"/>
- </element>
- <element name="alwaysMergeEmptyNamespace">
- <ref name="CT_OnOff"/>
- </element>
- <element name="updateFields">
- <ref name="CT_OnOff"/>
- </element>
- <element name="hdrShapeDefaults">
- <ref name="CT_ShapeDefaults"/>
- </element>
- <element name="footnotePr">
- <ref name="CT_FtnDocProps"/>
- </element>
- <element name="endnotePr">
- <ref name="CT_EdnDocProps"/>
- </element>
- <element name="compat">
- <ref name="CT_Compat"/>
- </element>
- <element name="docVars">
- <ref name="CT_DocVars"/>
- </element>
- <element name="rsids">
- <ref name="CT_DocRsids"/>
- </element>
- <ref name="mathPr"/>
- <element name="uiCompat97To2003">
- <ref name="CT_OnOff"/>
- </element>
- <element name="attachedSchema">
- <ref name="CT_String"/>
- </element>
- <element name="themeFontLang">
- <ref name="CT_Language"/>
- </element>
- <element name="clrSchemeMapping">
- <ref name="CT_ColorSchemeMapping"/>
- </element>
- <element name="doNotIncludeSubdocsInStats">
- <ref name="CT_OnOff"/>
- </element>
- <element name="doNotAutoCompressPictures">
- <ref name="CT_OnOff"/>
- </element>
- <element name="forceUpgrade">
- <ref name="CT_Empty"/>
- </element>
- <element name="captions">
- <ref name="CT_Captions"/>
- </element>
- <element name="readModeInkLockDown">
- <ref name="CT_ReadingModeInkLockDown"/>
- </element>
- <element name="smartTagType">
- <ref name="CT_SmartTagType"/>
- </element>
- <ref name="schemaLibrary"/>
- <element name="shapeDefaults">
- <ref name="CT_ShapeDefaults"/>
- </element>
- <element name="doNotEmbedSmartTags">
- <ref name="CT_OnOff"/>
- </element>
- <element name="decimalSymbol">
- <ref name="CT_String"/>
- </element>
- <element name="listSeparator">
- <ref name="CT_String"/>
- </element>
- </define>
- <define name="CT_WebSettings">
- <element name="frameset">
- <ref name="CT_Frameset"/>
- </element>
- <element name="divs">
- <ref name="CT_Divs"/>
- </element>
- <element name="encoding">
- <ref name="CT_String"/>
- </element>
- <element name="optimizeForBrowser">
- <ref name="CT_OnOff"/>
- </element>
- <element name="relyOnVML">
- <ref name="CT_OnOff"/>
- </element>
- <element name="allowPNG">
- <ref name="CT_OnOff"/>
- </element>
- <element name="doNotRelyOnCSS">
- <ref name="CT_OnOff"/>
- </element>
- <element name="doNotSaveAsSingleFile">
- <ref name="CT_OnOff"/>
- </element>
- <element name="doNotOrganizeInFolder">
- <ref name="CT_OnOff"/>
- </element>
- <element name="doNotUseLongFileNames">
- <ref name="CT_OnOff"/>
- </element>
- <element name="pixelsPerInch">
- <ref name="CT_DecimalNumber"/>
- </element>
- <element name="targetScreenSz">
- <ref name="CT_TargetScreenSz"/>
- </element>
- <element name="saveSmartTagsAsXml">
- <ref name="CT_OnOff"/>
- </element>
- </define>
- <define name="CT_FrameScrollbar">
- <attribute name="val">
- <data type="string"/>
- </attribute>
- </define>
- <define name="CT_Frame">
- <element name="sz">
- <ref name="CT_String"/>
- </element>
- <element name="name">
- <ref name="CT_String"/>
- </element>
- <element name="sourceFileName">
- <ref name="CT_Rel"/>
- </element>
- <element name="marW">
- <ref name="CT_PixelsMeasure"/>
- </element>
- <element name="marH">
- <ref name="CT_PixelsMeasure"/>
- </element>
- <element name="scrollbar">
- <ref name="CT_FrameScrollbar"/>
- </element>
- <element name="noResizeAllowed">
- <ref name="CT_OnOff"/>
- </element>
- <element name="linkedToFile">
- <ref name="CT_OnOff"/>
- </element>
- </define>
- <define name="CT_FrameLayout">
- <attribute name="val">
- <data type="string"/>
- </attribute>
- </define>
- <define name="CT_FramesetSplitbar">
- <element name="w">
- <ref name="CT_TwipsMeasure"/>
- </element>
- <element name="color">
- <ref name="CT_Color"/>
- </element>
- <element name="noBorder">
- <ref name="CT_OnOff"/>
- </element>
- <element name="flatBorders">
- <ref name="CT_OnOff"/>
- </element>
- </define>
- <define name="CT_Frameset">
- <element name="sz">
- <ref name="CT_String"/>
- </element>
- <element name="framesetSplitbar">
- <ref name="CT_FramesetSplitbar"/>
- </element>
- <element name="frameLayout">
- <ref name="CT_FrameLayout"/>
- </element>
- <choice>
- <element name="frameset">
- <ref name="CT_Frameset"/>
- </element>
- <element name="frame">
- <ref name="CT_Frame"/>
- </element>
- </choice>
- </define>
- <define name="CT_NumPicBullet">
- <element name="pict">
- <ref name="CT_Picture"/>
- </element>
- <attribute name="numPicBulletId">
- <data type="string"/>
- </attribute>
- </define>
- <define name="CT_LevelSuffix">
- <attribute name="val">
- <data type="string"/>
- </attribute>
- </define>
- <define name="CT_LevelText">
- <attribute name="val">
- <data type="string"/>
- </attribute>
- <attribute name="null">
- <data type="string"/>
- </attribute>
- </define>
- <define name="CT_LvlLegacy">
- <attribute name="legacy">
- <data type="string"/>
- </attribute>
- <attribute name="legacySpace">
- <data type="string"/>
- </attribute>
- <attribute name="legacyIndent">
- <data type="string"/>
- </attribute>
- </define>
- <define name="CT_Lvl">
- <element name="start">
- <ref name="CT_DecimalNumber"/>
- </element>
- <element name="numFmt">
- <ref name="CT_NumFmt"/>
- </element>
- <element name="lvlRestart">
- <ref name="CT_DecimalNumber"/>
- </element>
- <element name="pStyle">
- <ref name="CT_String"/>
- </element>
- <element name="isLgl">
- <ref name="CT_OnOff"/>
- </element>
- <element name="suff">
- <ref name="CT_LevelSuffix"/>
- </element>
- <element name="lvlText">
- <ref name="CT_LevelText"/>
- </element>
- <element name="lvlPicBulletId">
- <ref name="CT_DecimalNumber"/>
- </element>
- <element name="legacy">
- <ref name="CT_LvlLegacy"/>
- </element>
- <element name="lvlJc">
- <ref name="CT_Jc"/>
- </element>
- <element name="pPr">
- <ref name="CT_PPr"/>
- </element>
- <element name="rPr">
- <ref name="CT_RPr"/>
- </element>
- <attribute name="ilvl">
- <data type="string"/>
- </attribute>
- <attribute name="tplc">
- <data type="string"/>
- </attribute>
- <attribute name="tentative">
- <data type="string"/>
- </attribute>
- </define>
- <define name="ST_MultiLevelType">
- <choice>
- <!-- Single Level Numbering Definition -->
- <value>singleLevel</value>
- <!-- Multilevel Numbering Definition -->
- <value>multilevel</value>
- <!-- Hybrid Multilevel Numbering Definition -->
- <value>hybridMultilevel</value>
- </choice>
- </define>
- <define name="CT_MultiLevelType">
- <attribute name="val">
- <ref name="ST_MultiLevelType"/>
- </attribute>
- </define>
- <define name="CT_AbstractNum">
- <element name="nsid">
- <ref name="CT_LongHexNumber"/>
- </element>
- <element name="multiLevelType">
- <ref name="CT_MultiLevelType"/>
- </element>
- <element name="tmpl">
- <ref name="CT_LongHexNumber"/>
- </element>
- <element name="name">
- <ref name="CT_String"/>
- </element>
- <element name="styleLink">
- <ref name="CT_String"/>
- </element>
- <element name="numStyleLink">
- <ref name="CT_String"/>
- </element>
- <element name="lvl">
- <ref name="CT_Lvl"/>
- </element>
- <attribute name="abstractNumId">
- <data type="string"/>
- </attribute>
- </define>
- <define name="CT_NumLvl">
- <element name="startOverride">
- <ref name="CT_DecimalNumber"/>
- </element>
- <element name="lvl">
- <ref name="CT_Lvl"/>
- </element>
- <attribute name="ilvl">
- <data type="string"/>
- </attribute>
- </define>
- <define name="CT_Num">
- <element name="abstractNumId">
- <ref name="CT_DecimalNumber"/>
- </element>
- <element name="lvlOverride">
- <ref name="CT_NumLvl"/>
- </element>
- <attribute name="numId">
- <data type="string"/>
- </attribute>
- </define>
- <define name="CT_Numbering">
- <element name="numPicBullet">
- <ref name="CT_NumPicBullet"/>
- </element>
- <element name="abstractNum">
- <ref name="CT_AbstractNum"/>
- </element>
- <element name="num">
- <ref name="CT_Num"/>
- </element>
- <element name="numIdMacAtCleanup">
- <ref name="CT_DecimalNumber"/>
- </element>
- </define>
- <define name="ST_TblStyleOverrideType">
- <choice>
- <!-- Whole table formatting -->
- <value>wholeTable</value>
- <!-- First Row Conditional Formatting -->
- <value>firstRow</value>
- <!-- Last table row formatting -->
- <value>lastRow</value>
- <!-- First Column Conditional Formatting -->
- <value>firstCol</value>
- <!-- Last table column formatting -->
- <value>lastCol</value>
- <!-- Banded Column Conditional Formatting -->
- <value>band1Vert</value>
- <!-- Even Column Stripe Conditional Formatting -->
- <value>band2Vert</value>
- <!-- Banded Row Conditional Formatting -->
- <value>band1Horz</value>
- <!-- Even Row Stripe Conditional Formatting -->
- <value>band2Horz</value>
- <!-- Top right table cell formatting -->
- <value>neCell</value>
- <!-- Top left table cell formatting -->
- <value>nwCell</value>
- <!-- Bottom right table cell formatting -->
- <value>seCell</value>
- <!-- Bottom left table cell formatting -->
- <value>swCell</value>
- </choice>
- </define>
- <define name="CT_Style_tblStylePr">
- <element name="pPr">
- <ref name="CT_PPrBase"/>
- </element>
- <element name="rPr">
- <ref name="EG_RPrBase"/>
- </element>
- <element name="tblPr">
- <ref name="CT_TblPrBase"/>
- </element>
- <element name="trPr">
- <ref name="CT_TrPrBase"/>
- </element>
- <element name="tcPr">
- <ref name="CT_TcPrBase"/>
- </element>
- <attribute name="type">
- <ref name="ST_TblStyleOverrideType"/>
- </attribute>
- </define>
- <define name="CT_Style_TblPr">
- <ref name="CT_TblPrBase"/>
- </define>
- <define name="CT_Style_TrPr">
- <ref name="CT_TrPrBase"/>
- </define>
- <define name="CT_Style_TcPr">
- <ref name="CT_TcPrBase"/>
- </define>
- <define name="ST_StyleType">
- <choice>
- <!-- Paragraph Style -->
- <value>paragraph</value>
- <!-- Character Style -->
- <value>character</value>
- <!-- Table Style -->
- <value>table</value>
- <!-- Numbering Style -->
- <value>numbering</value>
- </choice>
- </define>
- <define name="CT_Style">
- <element name="name">
- <ref name="CT_String"/>
- </element>
- <element name="aliases">
- <ref name="CT_String"/>
- </element>
- <element name="basedOn">
- <ref name="CT_String"/>
- </element>
- <element name="next">
- <ref name="CT_String"/>
- </element>
- <element name="link">
- <ref name="CT_String"/>
- </element>
- <element name="autoRedefine">
- <ref name="CT_OnOff"/>
- </element>
- <element name="hidden">
- <ref name="CT_OnOff"/>
- </element>
- <element name="uiPriority">
- <ref name="CT_DecimalNumber"/>
- </element>
- <element name="semiHidden">
- <ref name="CT_OnOff"/>
- </element>
- <element name="unhideWhenUsed">
- <ref name="CT_OnOff"/>
- </element>
- <element name="qFormat">
- <ref name="CT_OnOff"/>
- </element>
- <element name="locked">
- <ref name="CT_OnOff"/>
- </element>
- <element name="personal">
- <ref name="CT_OnOff"/>
- </element>
- <element name="personalCompose">
- <ref name="CT_OnOff"/>
- </element>
- <element name="personalReply">
- <ref name="CT_OnOff"/>
- </element>
- <element name="rsid">
- <ref name="CT_LongHexNumber"/>
- </element>
- <element name="pPr">
- <ref name="CT_PPrBase"/>
- </element>
- <element name="rPr">
- <ref name="EG_RPrBase"/>
- </element>
- <element name="tblPr">
- <ref name="CT_TblPrBase"/>
- </element>
- <element name="trPr">
- <ref name="CT_TrPrBase"/>
- </element>
- <element name="tcPr">
- <ref name="CT_TcPrBase"/>
- </element>
- <element name="tblStylePr">
- <ref name="CT_Style_tblStylePr"/>
- </element>
- <attribute name="type">
- <ref name="ST_StyleType"/>
- </attribute>
- <attribute name="styleId">
- <ref name="ST_String"/>
- </attribute>
- <attribute name="default">
- <ref name="ST_OnOff"/>
- </attribute>
- <attribute name="customStyle">
- <ref name="ST_OnOff"/>
- </attribute>
- </define>
- <define name="CT_LsdException">
- <attribute name="name">
- <data type="string"/>
- </attribute>
- <attribute name="locked">
- <data type="string"/>
- </attribute>
- <attribute name="uiPriority">
- <data type="string"/>
- </attribute>
- <attribute name="semiHidden">
- <data type="string"/>
- </attribute>
- <attribute name="unhideWhenUsed">
- <data type="string"/>
- </attribute>
- <attribute name="qFormat">
- <data type="string"/>
- </attribute>
- </define>
- <define name="CT_LatentStyles">
- <element name="lsdException">
- <ref name="CT_LsdException"/>
- </element>
- <attribute name="defLockedState">
- <data type="string"/>
- </attribute>
- <attribute name="defUIPriority">
- <data type="string"/>
- </attribute>
- <attribute name="defSemiHidden">
- <data type="string"/>
- </attribute>
- <attribute name="defUnhideWhenUsed">
- <data type="string"/>
- </attribute>
- <attribute name="defQFormat">
- <data type="string"/>
- </attribute>
- <attribute name="count">
- <data type="string"/>
- </attribute>
- </define>
- <define name="CT_Styles">
- <element name="docDefaults">
- <ref name="CT_DocDefaults"/>
- </element>
- <element name="latentStyles">
- <ref name="CT_LatentStyles"/>
- </element>
- <element name="style">
- <ref name="CT_Style"/>
- </element>
- </define>
- <define name="ST_Panose">
- <data type="hexBinary"/>
- </define>
- <define name="CT_Panose">
- <attribute name="val">
- <ref name="ST_Panose"/>
- </attribute>
- </define>
- <define name="ST_FontFamily">
- <choice>
- <!-- Novelty Font -->
- <value>decorative</value>
- <!-- Monospace Font -->
- <value>modern</value>
- <!-- Proportional Font With Serifs -->
- <value>roman</value>
- <!-- Script Font -->
- <value>script</value>
- <!-- Proportional Font Without Serifs -->
- <value>swiss</value>
- <!-- No Font Family -->
- <value>auto</value>
- </choice>
- </define>
- <define name="CT_FontFamily">
- <attribute name="val">
- <ref name="ST_FontFamily"/>
- </attribute>
- </define>
- <define name="ST_Pitch">
- <choice>
- <!-- Fixed Width -->
- <value>fixed</value>
- <!-- Proportional Width -->
- <value>variable</value>
- <!-- Default -->
- <value>default</value>
- </choice>
- </define>
- <define name="CT_Pitch">
- <attribute name="val">
- <ref name="ST_Pitch"/>
- </attribute>
- </define>
- <define name="CT_FontSig">
- <attribute name="usb0">
- <ref name="ST_UcharHexNumber"/>
- </attribute>
- <attribute name="usb1">
- <ref name="ST_UcharHexNumber"/>
- </attribute>
- <attribute name="usb2">
- <ref name="ST_UcharHexNumber"/>
- </attribute>
- <attribute name="usb3">
- <ref name="ST_UcharHexNumber"/>
- </attribute>
- <attribute name="csb0">
- <ref name="ST_UcharHexNumber"/>
- </attribute>
- <attribute name="csb1">
- <ref name="ST_UcharHexNumber"/>
- </attribute>
- </define>
- <define name="CT_FontRel">
- <ref name="CT_Rel"/>
- <attribute name="fontKey">
- <data type="string"/>
- </attribute>
- <attribute name="subsetted">
- <data type="string"/>
- </attribute>
- </define>
- <define name="CT_Font">
- <element name="altName">
- <ref name="CT_String"/>
- </element>
- <element name="panose1">
- <ref name="CT_Panose"/>
- </element>
- <element name="charset">
- <ref name="CT_Charset"/>
- </element>
- <element name="characterSet">
- <ref name="CT_String"/>
- </element>
- <element name="family">
- <ref name="CT_FontFamily"/>
- </element>
- <element name="notTrueType">
- <ref name="CT_OnOff"/>
- </element>
- <element name="pitch">
- <ref name="CT_Pitch"/>
- </element>
- <element name="sig">
- <ref name="CT_FontSig"/>
- </element>
- <element name="embedRegular">
- <ref name="CT_FontRel"/>
- </element>
- <element name="embedBold">
- <ref name="CT_FontRel"/>
- </element>
- <element name="embedItalic">
- <ref name="CT_FontRel"/>
- </element>
- <element name="embedBoldItalic">
- <ref name="CT_FontRel"/>
- </element>
- <attribute name="name">
- <data type="string"/>
- </attribute>
- </define>
- <define name="CT_FontsList">
- <element name="font">
- <ref name="CT_Font"/>
- </element>
- </define>
- <define name="CT_Charset">
- <attribute name="val">
- <ref name="ST_UcharHexNumber"/>
- </attribute>
- <attribute name="characterSet">
- <ref name="ST_String"/>
- </attribute>
- </define>
- <define name="CT_DivBdr">
- <element name="top">
- <ref name="CT_Border"/>
- </element>
- <element name="left">
- <ref name="CT_Border"/>
- </element>
- <element name="bottom">
- <ref name="CT_Border"/>
- </element>
- <element name="right">
- <ref name="CT_Border"/>
- </element>
- </define>
- <define name="CT_Div">
- <element name="blockQuote">
- <ref name="CT_OnOff"/>
- </element>
- <element name="bodyDiv">
- <ref name="CT_OnOff"/>
- </element>
- <element name="marLeft">
- <ref name="CT_SignedTwipsMeasure"/>
- </element>
- <element name="marRight">
- <ref name="CT_SignedTwipsMeasure"/>
- </element>
- <element name="marTop">
- <ref name="CT_SignedTwipsMeasure"/>
- </element>
- <element name="marBottom">
- <ref name="CT_SignedTwipsMeasure"/>
- </element>
- <element name="divBdr">
- <ref name="CT_DivBdr"/>
- </element>
- <element name="divsChild">
- <ref name="CT_Divs"/>
- </element>
- <attribute name="id">
- <data type="string"/>
- </attribute>
- </define>
- <define name="CT_Divs">
- <element name="div">
- <ref name="CT_Div"/>
- </element>
- </define>
- <define name="CT_TxbxContent">
- <ref name="EG_BlockLevelElts"/>
- </define>
- <define name="txbxContent">
- <element name="txbxContent">
- <ref name="CT_TxbxContent"/>
- </element>
- </define>
- <define name="EG_MathContent">
- <choice>
- <ref name="oMathPara"/>
- <ref name="oMath"/>
- </choice>
- </define>
- <define name="EG_BlockLevelChunkElts">
- <ref name="EG_ContentBlockContent"/>
- </define>
- <define name="EG_BlockLevelElts">
- <choice>
- <ref name="EG_BlockLevelChunkElts"/>
- <element name="altChunk">
- <ref name="CT_AltChunk"/>
- </element>
- </choice>
- </define>
- <define name="EG_RunLevelElts">
- <choice>
- <element name="proofErr">
- <ref name="CT_ProofErr"/>
- </element>
- <ref name="EG_RangeMarkupElements"/>
- <element name="ins">
- <ref name="CT_RunTrackChange"/>
- </element>
- <element name="del">
- <ref name="CT_RunTrackChange"/>
- </element>
- <element name="moveFrom">
- <ref name="CT_RunTrackChange"/>
- </element>
- <element name="moveTo">
- <ref name="CT_RunTrackChange"/>
- </element>
- <ref name="EG_MathContent"/>
- </choice>
- </define>
- <define name="CT_Body">
- <ref name="EG_BlockLevelElts"/>
- <element name="sectPr">
- <ref name="CT_finalSectPr"/>
- </element>
- </define>
- <define name="CT_ShapeDefaults">
- <element>
- <ref name="BUILT_IN_ANY_TYPE"/>
- </element>
- </define>
- <define name="CT_Comments">
- <element name="comment">
- <ref name="CT_Comment"/>
- </element>
- </define>
- <define name="comments">
- <element name="comments">
- <ref name="CT_Comments"/>
- </element>
- </define>
- <define name="CT_Footnotes">
- <element name="footnote">
- <ref name="CT_FtnEdn"/>
- </element>
- </define>
- <define name="footnotes">
- <element name="footnotes">
- <ref name="CT_Footnotes"/>
- </element>
- </define>
- <define name="CT_Endnotes">
- <element name="endnote">
- <ref name="CT_FtnEdn"/>
- </element>
- </define>
- <define name="endnotes">
- <element name="endnotes">
- <ref name="CT_Endnotes"/>
- </element>
- </define>
- <define name="hdr">
- <element name="hdr">
- <ref name="CT_HdrFtr"/>
- </element>
- </define>
- <define name="ftr">
- <element name="ftr">
- <ref name="CT_HdrFtr"/>
- </element>
- </define>
- <define name="CT_SmartTagType">
- <attribute name="namespaceuri">
- <data type="string"/>
- </attribute>
- <attribute name="name">
- <data type="string"/>
- </attribute>
- <attribute name="url">
- <data type="string"/>
- </attribute>
- </define>
- <define name="ST_ThemeColor">
- <choice>
- <!-- Dark 1 Theme Color -->
- <value>dark1</value>
- <!-- Light 1 Theme Color -->
- <value>light1</value>
- <!-- Dark 2 Theme Color -->
- <value>dark2</value>
- <!-- Light 2 Theme Color -->
- <value>light2</value>
- <!-- Accent 1 Theme Color -->
- <value>accent1</value>
- <!-- Accent 2 Theme Color -->
- <value>accent2</value>
- <!-- Accent 3 Theme Color -->
- <value>accent3</value>
- <!-- Accent 4 Theme Color -->
- <value>accent4</value>
- <!-- Accent 5 Theme Color -->
- <value>accent5</value>
- <!-- Accent 6 Theme Color -->
- <value>accent6</value>
- <!-- Hyperlink Theme Color -->
- <value>hyperlink</value>
- <!-- Followed Hyperlink Theme Color -->
- <value>followedHyperlink</value>
- <!-- No Theme Color -->
- <value>none</value>
- <!-- Background 1 Theme Color -->
- <value>background1</value>
- <!-- Text 1 Theme Color -->
- <value>text1</value>
- <!-- Background 2 Theme Color -->
- <value>background2</value>
- <!-- Text 2 Theme Color -->
- <value>text2</value>
- </choice>
- </define>
- <define name="CT_DocPartBehavior">
- <attribute name="val">
- <data type="string"/>
- </attribute>
- </define>
- <define name="CT_DocPartBehaviors">
- <element name="behavior">
- <ref name="CT_DocPartBehavior"/>
- </element>
- </define>
- <define name="CT_DocPartType">
- <attribute name="val">
- <data type="string"/>
- </attribute>
- </define>
- <define name="CT_DocPartTypes">
- <element name="type">
- <ref name="CT_DocPartType"/>
- </element>
- <attribute name="all">
- <data type="string"/>
- </attribute>
- </define>
- <define name="CT_DocPartGallery">
- <attribute name="val">
- <data type="string"/>
- </attribute>
- </define>
- <define name="CT_DocPartCategory">
- <element name="name">
- <ref name="CT_String"/>
- </element>
- <element name="gallery">
- <ref name="CT_DocPartGallery"/>
- </element>
- </define>
- <define name="CT_DocPartName">
- <attribute name="val">
- <data type="string"/>
- </attribute>
- <attribute name="decorated">
- <data type="string"/>
- </attribute>
- </define>
- <define name="CT_DocPartPr">
- <choice>
- <element name="name">
- <ref name="CT_DocPartName"/>
- </element>
- <element name="style">
- <ref name="CT_String"/>
- </element>
- <element name="category">
- <ref name="CT_DocPartCategory"/>
- </element>
- <element name="types">
- <ref name="CT_DocPartTypes"/>
- </element>
- <element name="behaviors">
- <ref name="CT_DocPartBehaviors"/>
- </element>
- <element name="description">
- <ref name="CT_String"/>
- </element>
- <element name="guid">
- <ref name="CT_Guid"/>
- </element>
- </choice>
- </define>
- <define name="CT_DocPart">
- <element name="docPartPr">
- <ref name="CT_DocPartPr"/>
- </element>
- <element name="docPartBody">
- <ref name="CT_Body"/>
- </element>
- </define>
- <define name="CT_DocParts">
- <element name="docPart">
- <ref name="CT_DocPart"/>
- </element>
- </define>
- <define name="settings">
- <element name="settings">
- <ref name="CT_Settings"/>
- </element>
- </define>
- <define name="webSettings">
- <element name="webSettings">
- <ref name="CT_WebSettings"/>
- </element>
- </define>
- <define name="fonts">
- <element name="fonts">
- <ref name="CT_FontsList"/>
- </element>
- </define>
- <define name="numbering">
- <element name="numbering">
- <ref name="CT_Numbering"/>
- </element>
- </define>
- <define name="styles">
- <element name="styles">
- <ref name="CT_Styles"/>
- </element>
- </define>
- <define name="ST_CaptionPos">
- <choice>
- <!-- Position Caption Above Object -->
- <value>above</value>
- <!-- Position Caption Below Object -->
- <value>below</value>
- <!-- Position Caption Left Of Object -->
- <value>left</value>
- <!-- Position Caption Right Of Object -->
- <value>right</value>
- </choice>
- </define>
- <define name="CT_Caption">
- <attribute name="name">
- <ref name="ST_String"/>
- </attribute>
- <attribute name="pos">
- <ref name="ST_CaptionPos"/>
- </attribute>
- <attribute name="chapNum">
- <ref name="ST_OnOff"/>
- </attribute>
- <attribute name="heading">
- <ref name="ST_DecimalNumber"/>
- </attribute>
- <attribute name="noLabel">
- <ref name="ST_OnOff"/>
- </attribute>
- <attribute name="numFmt">
- <ref name="ST_NumberFormat"/>
- </attribute>
- <attribute name="sep">
- <ref name="ST_ChapterSep"/>
- </attribute>
- </define>
- <define name="CT_AutoCaption">
- <attribute name="name">
- <ref name="ST_String"/>
- </attribute>
- <attribute name="caption">
- <ref name="ST_String"/>
- </attribute>
- </define>
- <define name="CT_AutoCaptions">
- <element name="autoCaption">
- <ref name="CT_AutoCaption"/>
- </element>
- </define>
- <define name="CT_Captions">
- <element name="caption">
- <ref name="CT_Caption"/>
- </element>
- <element name="autoCaptions">
- <ref name="CT_AutoCaptions"/>
- </element>
- </define>
- <define name="CT_DocumentBase">
- <element name="background">
- <ref name="CT_Background"/>
- </element>
- </define>
- <define name="CT_Document">
- <ref name="CT_DocumentBase"/>
- <element name="body">
- <ref name="CT_Body"/>
- </element>
- </define>
- <define name="CT_GlossaryDocument">
- <ref name="CT_DocumentBase"/>
- <element name="docParts">
- <ref name="CT_DocParts"/>
- </element>
- </define>
- <define name="document">
- <element name="document">
- <ref name="CT_Document"/>
- </element>
- </define>
- <define name="glossaryDocument">
- <element name="glossaryDocument">
- <ref name="CT_GlossaryDocument"/>
- </element>
- </define>
- <define name="BUILT_IN_ANY_TYPE">
- <choice>
- <element>
- <ref name="BUILT_IN_ANY_TYPE"/>
- </element>
- <data type="string"/>
- </choice>
- </define>
- </grammar>
- <resource name="CT_Empty" resource="Stream">
- <action name="end" tokenid="ooxml:EG_RunInnerContent_noBreakHyphen" action="noBreakHyphen"/>
- <action name="end" tokenid="ooxml:EG_RunInnerContent_softHyphen" action="softHyphen"/>
- <action name="end" tokenid="ooxml:EG_RunInnerContent_cr" action="cr"/>
- </resource>
- <resource name="ST_OnOff" resource="Boolean"/>
- <resource name="CT_OnOff" resource="Value">
- <attribute name="val" tokenid="ooxml:CT_OnOff_val" action="setValue"/>
- <action name="start" action="setDefaultBooleanValue"/>
- </resource>
- <resource name="ST_LongHexNumber" resource="Hex"/>
- <resource name="CT_LongHexNumber" resource="Value">
- <attribute name="val" tokenid="ooxml:CT_LongHexNumber_val" action="setValue"/>
- <action name="start" action="setDefaultHexValue"/>
- </resource>
- <resource name="ST_ShortHexNumber" resource="Hex"/>
- <resource name="CT_ShortHexNumber" resource="Value">
- <attribute name="val" tokenid="ooxml:CT_ShortHexNumber_val" action="setValue"/>
- <action name="start" action="setDefaultHexValue"/>
- </resource>
- <resource name="ST_UcharHexNumber" resource="Hex"/>
- <resource name="CT_UcharHexNumber" resource="Value">
- <attribute name="val" tokenid="ooxml:CT_UcharHexNumber_val" action="setValue"/>
- <action name="start" action="setDefaultHexValue"/>
- </resource>
- <resource name="ST_DecimalNumber" resource="Integer"/>
- <resource name="CT_DecimalNumber" resource="Value">
- <attribute name="val" tokenid="ooxml:CT_DecimalNumber_val" action="setValue"/>
- <action name="start" action="setDefaultIntegerValue"/>
- </resource>
- <resource name="ST_UnsignedDecimalNumber" resource="Integer"/>
-<!--
- Historically, LO has treated TwipsMeasure as signed,
- i.e. that negative numbers are allowed and treated as negative,
- so that is the default handling.
--->
- <resource name="ST_TwipsMeasure" resource="TwipsMeasure_asSigned"/>
- <resource name="ST_TwipsMeasure_asSigned" resource="TwipsMeasure_asSigned"/>
- <resource name="ST_TwipsMeasure_asZero" resource="TwipsMeasure_asZero"/>
- <resource name="CT_TwipsMeasure" resource="Value">
- <attribute name="val" tokenid="ooxml:CT_TwipsMeasure_val" action="setValue"/>
- <action name="start" action="setDefaultIntegerValue"/>
- </resource>
- <resource name="ST_SignedTwipsMeasure" resource="TwipsMeasure_asSigned"/>
- <resource name="CT_SignedTwipsMeasure" resource="Value">
- <attribute name="val" tokenid="ooxml:CT_SignedTwipsMeasure_val" action="setValue"/>
- <action name="start" action="setDefaultIntegerValue"/>
- </resource>
- <resource name="ST_PixelsMeasure" resource="Integer"/>
- <resource name="CT_PixelsMeasure" resource="Value">
- <attribute name="val" tokenid="ooxml:CT_PixelsMeasure_val" action="setValue"/>
- <action name="start" action="setDefaultIntegerValue"/>
- </resource>
- <resource name="ST_HpsMeasure" resource="HpsMeasure"/>
- <resource name="CT_HpsMeasure" resource="Value">
- <attribute name="val" tokenid="ooxml:CT_HpsMeasure_val" action="setValue"/>
- <action name="start" action="setDefaultIntegerValue"/>
- </resource>
- <resource name="ST_SignedHpsMeasure" resource="Integer"/>
- <resource name="CT_SignedHpsMeasure" resource="Value">
- <attribute name="val" tokenid="ooxml:CT_SignedHpsMeasure_val" action="setValue"/>
- <action name="start" action="setDefaultIntegerValue"/>
- </resource>
- <resource name="ST_MeasurementOrPercent" resource="MeasurementOrPercent"/>
- <resource name="ST_DateTime" resource="String"/>
- <resource name="CT_MacroName" resource="Value">
- <attribute name="val" tokenid="ooxml:CT_MacroName_val" action="setValue"/>
- <action name="start" action="setDefaultStringValue"/>
- </resource>
- <resource name="ST_EighthPointMeasure" resource="Integer"/>
- <resource name="ST_PointMeasure" resource="Integer"/>
- <resource name="ST_String" resource="String"/>
- <resource name="CT_String" resource="Value">
- <attribute name="val" tokenid="ooxml:CT_String_val" action="setValue"/>
- <action name="start" action="setDefaultStringValue"/>
- </resource>
- <resource name="ST_TextScale" resource="Integer"/>
- <resource name="CT_TextScale" resource="Value">
- <attribute name="val" tokenid="ooxml:CT_TextScale_val" action="setValue"/>
- <action name="start" action="setDefaultIntegerValue"/>
- </resource>
- <resource name="ST_HighlightColor" resource="List">
- <value tokenid="ooxml:Value_ST_HighlightColor_black">black</value>
- <value tokenid="ooxml:Value_ST_HighlightColor_blue">blue</value>
- <value tokenid="ooxml:Value_ST_HighlightColor_cyan">cyan</value>
- <value tokenid="ooxml:Value_ST_HighlightColor_green">green</value>
- <value tokenid="ooxml:Value_ST_HighlightColor_magenta">magenta</value>
- <value tokenid="ooxml:Value_ST_HighlightColor_red">red</value>
- <value tokenid="ooxml:Value_ST_HighlightColor_yellow">yellow</value>
- <value tokenid="ooxml:Value_ST_HighlightColor_white">white</value>
- <value tokenid="ooxml:Value_ST_HighlightColor_darkBlue">darkBlue</value>
- <value tokenid="ooxml:Value_ST_HighlightColor_darkCyan">darkCyan</value>
- <value tokenid="ooxml:Value_ST_HighlightColor_darkGreen">darkGreen</value>
- <value tokenid="ooxml:Value_ST_HighlightColor_darkMagenta">darkMagenta</value>
- <value tokenid="ooxml:Value_ST_HighlightColor_darkRed">darkRed</value>
- <value tokenid="ooxml:Value_ST_HighlightColor_darkYellow">darkYellow</value>
- <value tokenid="ooxml:Value_ST_HighlightColor_darkGray">darkGray</value>
- <value tokenid="ooxml:Value_ST_HighlightColor_lightGray">lightGray</value>
- <value tokenid="ooxml:Value_ST_HighlightColor_none">none</value>
- </resource>
- <resource name="CT_Highlight" resource="Value">
- <attribute name="val" tokenid="ooxml:CT_Highlight_val" action="setValue"/>
- </resource>
- <resource name="ST_HexColorAuto" resource="List">
- <value tokenid="ooxml:Value_ST_HexColorAuto_auto">auto</value>
- </resource>
- <resource name="ST_HexColorRGB" resource="Hex"/>
- <resource name="ST_HexColor" resource="HexColor"/>
- <resource name="CT_Color" resource="Properties">
- <attribute name="val" tokenid="ooxml:CT_Color_val"/>
- <attribute name="themeColor" tokenid="ooxml:CT_Color_themeColor"/>
- <attribute name="themeTint" tokenid="ooxml:CT_Color_themeTint"/>
- <attribute name="themeShade" tokenid="ooxml:CT_Color_themeShade"/>
- </resource>
- <resource name="ST_LangCode" resource="Hex"/>
- <resource name="ST_Lang" resource="String"/>
- <resource name="CT_Lang" resource="Value">
- <attribute name="val" tokenid="ooxml:CT_Lang_val" action="setValue"/>
- <action name="start" action="setDefaultIntegerValue"/>
- </resource>
- <resource name="CT_Guid" resource="Value">
- <attribute name="val" tokenid="ooxml:CT_Guid_val" action="setValue"/>
- <action name="start" action="setDefaultStringValue"/>
- </resource>
- <resource name="ST_Underline" resource="List">
- <value tokenid="ooxml:Value_ST_Underline_single">single</value>
- <value tokenid="ooxml:Value_ST_Underline_words">words</value>
- <value tokenid="ooxml:Value_ST_Underline_double">double</value>
- <value tokenid="ooxml:Value_ST_Underline_thick">thick</value>
- <value tokenid="ooxml:Value_ST_Underline_dotted">dotted</value>
- <value tokenid="ooxml:Value_ST_Underline_dottedHeavy">dottedHeavy</value>
- <value tokenid="ooxml:Value_ST_Underline_dash">dash</value>
- <value tokenid="ooxml:Value_ST_Underline_dashedHeavy">dashedHeavy</value>
- <value tokenid="ooxml:Value_ST_Underline_dashLong">dashLong</value>
- <value tokenid="ooxml:Value_ST_Underline_dashLongHeavy">dashLongHeavy</value>
- <value tokenid="ooxml:Value_ST_Underline_dotDash">dotDash</value>
- <value tokenid="ooxml:Value_ST_Underline_dashDotHeavy">dashDotHeavy</value>
- <value tokenid="ooxml:Value_ST_Underline_dotDotDash">dotDotDash</value>
- <value tokenid="ooxml:Value_ST_Underline_dashDotDotHeavy">dashDotDotHeavy</value>
- <value tokenid="ooxml:Value_ST_Underline_wave">wave</value>
- <value tokenid="ooxml:Value_ST_Underline_wavyHeavy">wavyHeavy</value>
- <value tokenid="ooxml:Value_ST_Underline_wavyDouble">wavyDouble</value>
- <value tokenid="ooxml:Value_ST_Underline_none">none</value>
- </resource>
- <resource name="CT_Underline" resource="Properties">
- <attribute name="val" tokenid="ooxml:CT_Underline_val"/>
- <attribute name="color" tokenid="ooxml:CT_Underline_color"/>
- <attribute name="themeColor" tokenid="ooxml:CT_Underline_themeColor"/>
- <attribute name="themeTint" tokenid="ooxml:CT_Underline_themeTint"/>
- <attribute name="themeShade" tokenid="ooxml:CT_Underline_themeShade"/>
- </resource>
- <resource name="ST_TextEffect" resource="List">
- <value tokenid="ooxml:Value_ST_TextEffect_none">none</value>
- <value tokenid="ooxml:Value_ST_TextEffect_lights">lights</value>
- <value tokenid="ooxml:Value_ST_TextEffect_blinkBackground">blinkBackground</value>
- <value tokenid="ooxml:Value_ST_TextEffect_sparkle">sparkle</value>
- <value tokenid="ooxml:Value_ST_TextEffect_antsBlack">antsBlack</value>
- <value tokenid="ooxml:Value_ST_TextEffect_antsRed">antsRed</value>
- <value tokenid="ooxml:Value_ST_TextEffect_shimmer">shimmer</value>
- </resource>
- <resource name="CT_TextEffect" resource="Value">
- <attribute name="val" tokenid="ooxml:CT_TextEffect_val" action="setValue"/>
- </resource>
- <resource name="ST_Border" resource="List">
- <value tokenid="ooxml:Value_ST_Border_nil">nil</value>
- <value tokenid="ooxml:Value_ST_Border_none">none</value>
- <value tokenid="ooxml:Value_ST_Border_single">single</value>
- <value tokenid="ooxml:Value_ST_Border_thick">thick</value>
- <value tokenid="ooxml:Value_ST_Border_double">double</value>
- <value tokenid="ooxml:Value_ST_Border_dotted">dotted</value>
- <value tokenid="ooxml:Value_ST_Border_dashed">dashed</value>
- <value tokenid="ooxml:Value_ST_Border_dotDash">dotDash</value>
- <value tokenid="ooxml:Value_ST_Border_dotDotDash">dotDotDash</value>
- <value tokenid="ooxml:Value_ST_Border_triple">triple</value>
- <value tokenid="ooxml:Value_ST_Border_thinThickSmallGap">thinThickSmallGap</value>
- <value tokenid="ooxml:Value_ST_Border_thickThinSmallGap">thickThinSmallGap</value>
- <value tokenid="ooxml:Value_ST_Border_thinThickThinSmallGap">thinThickThinSmallGap</value>
- <value tokenid="ooxml:Value_ST_Border_thinThickMediumGap">thinThickMediumGap</value>
- <value tokenid="ooxml:Value_ST_Border_thickThinMediumGap">thickThinMediumGap</value>
- <value tokenid="ooxml:Value_ST_Border_thinThickThinMediumGap">thinThickThinMediumGap</value>
- <value tokenid="ooxml:Value_ST_Border_thinThickLargeGap">thinThickLargeGap</value>
- <value tokenid="ooxml:Value_ST_Border_thickThinLargeGap">thickThinLargeGap</value>
- <value tokenid="ooxml:Value_ST_Border_thinThickThinLargeGap">thinThickThinLargeGap</value>
- <value tokenid="ooxml:Value_ST_Border_wave">wave</value>
- <value tokenid="ooxml:Value_ST_Border_doubleWave">doubleWave</value>
- <value tokenid="ooxml:Value_ST_Border_dashSmallGap">dashSmallGap</value>
- <value tokenid="ooxml:Value_ST_Border_dashDotStroked">dashDotStroked</value>
- <value tokenid="ooxml:Value_ST_Border_threeDEmboss">threeDEmboss</value>
- <value tokenid="ooxml:Value_ST_Border_threeDEngrave">threeDEngrave</value>
- <value tokenid="ooxml:Value_ST_Border_outset">outset</value>
- <value tokenid="ooxml:Value_ST_Border_inset">inset</value>
- <value tokenid="ooxml:Value_ST_Border_apples">apples</value>
- <value tokenid="ooxml:Value_ST_Border_archedScallops">archedScallops</value>
- <value tokenid="ooxml:Value_ST_Border_babyPacifier">babyPacifier</value>
- <value tokenid="ooxml:Value_ST_Border_babyRattle">babyRattle</value>
- <value tokenid="ooxml:Value_ST_Border_balloons3Colors">balloons3Colors</value>
- <value tokenid="ooxml:Value_ST_Border_balloonsHotAir">balloonsHotAir</value>
- <value tokenid="ooxml:Value_ST_Border_basicBlackDashes">basicBlackDashes</value>
- <value tokenid="ooxml:Value_ST_Border_basicBlackDots">basicBlackDots</value>
- <value tokenid="ooxml:Value_ST_Border_basicBlackSquares">basicBlackSquares</value>
- <value tokenid="ooxml:Value_ST_Border_basicThinLines">basicThinLines</value>
- <value tokenid="ooxml:Value_ST_Border_basicWhiteDashes">basicWhiteDashes</value>
- <value tokenid="ooxml:Value_ST_Border_basicWhiteDots">basicWhiteDots</value>
- <value tokenid="ooxml:Value_ST_Border_basicWhiteSquares">basicWhiteSquares</value>
- <value tokenid="ooxml:Value_ST_Border_basicWideInline">basicWideInline</value>
- <value tokenid="ooxml:Value_ST_Border_basicWideMidline">basicWideMidline</value>
- <value tokenid="ooxml:Value_ST_Border_basicWideOutline">basicWideOutline</value>
- <value tokenid="ooxml:Value_ST_Border_bats">bats</value>
- <value tokenid="ooxml:Value_ST_Border_birds">birds</value>
- <value tokenid="ooxml:Value_ST_Border_birdsFlight">birdsFlight</value>
- <value tokenid="ooxml:Value_ST_Border_cabins">cabins</value>
- <value tokenid="ooxml:Value_ST_Border_cakeSlice">cakeSlice</value>
- <value tokenid="ooxml:Value_ST_Border_candyCorn">candyCorn</value>
- <value tokenid="ooxml:Value_ST_Border_celticKnotwork">celticKnotwork</value>
- <value tokenid="ooxml:Value_ST_Border_certificateBanner">certificateBanner</value>
- <value tokenid="ooxml:Value_ST_Border_chainLink">chainLink</value>
- <value tokenid="ooxml:Value_ST_Border_champagneBottle">champagneBottle</value>
- <value tokenid="ooxml:Value_ST_Border_checkedBarBlack">checkedBarBlack</value>
- <value tokenid="ooxml:Value_ST_Border_checkedBarColor">checkedBarColor</value>
- <value tokenid="ooxml:Value_ST_Border_checkered">checkered</value>
- <value tokenid="ooxml:Value_ST_Border_christmasTree">christmasTree</value>
- <value tokenid="ooxml:Value_ST_Border_circlesLines">circlesLines</value>
- <value tokenid="ooxml:Value_ST_Border_circlesRectangles">circlesRectangles</value>
- <value tokenid="ooxml:Value_ST_Border_classicalWave">classicalWave</value>
- <value tokenid="ooxml:Value_ST_Border_clocks">clocks</value>
- <value tokenid="ooxml:Value_ST_Border_compass">compass</value>
- <value tokenid="ooxml:Value_ST_Border_confetti">confetti</value>
- <value tokenid="ooxml:Value_ST_Border_confettiGrays">confettiGrays</value>
- <value tokenid="ooxml:Value_ST_Border_confettiOutline">confettiOutline</value>
- <value tokenid="ooxml:Value_ST_Border_confettiStreamers">confettiStreamers</value>
- <value tokenid="ooxml:Value_ST_Border_confettiWhite">confettiWhite</value>
- <value tokenid="ooxml:Value_ST_Border_cornerTriangles">cornerTriangles</value>
- <value tokenid="ooxml:Value_ST_Border_couponCutoutDashes">couponCutoutDashes</value>
- <value tokenid="ooxml:Value_ST_Border_couponCutoutDots">couponCutoutDots</value>
- <value tokenid="ooxml:Value_ST_Border_crazyMaze">crazyMaze</value>
- <value tokenid="ooxml:Value_ST_Border_creaturesButterfly">creaturesButterfly</value>
- <value tokenid="ooxml:Value_ST_Border_creaturesFish">creaturesFish</value>
- <value tokenid="ooxml:Value_ST_Border_creaturesInsects">creaturesInsects</value>
- <value tokenid="ooxml:Value_ST_Border_creaturesLadyBug">creaturesLadyBug</value>
- <value tokenid="ooxml:Value_ST_Border_crossStitch">crossStitch</value>
- <value tokenid="ooxml:Value_ST_Border_cup">cup</value>
- <value tokenid="ooxml:Value_ST_Border_decoArch">decoArch</value>
- <value tokenid="ooxml:Value_ST_Border_decoArchColor">decoArchColor</value>
- <value tokenid="ooxml:Value_ST_Border_decoBlocks">decoBlocks</value>
- <value tokenid="ooxml:Value_ST_Border_diamondsGray">diamondsGray</value>
- <value tokenid="ooxml:Value_ST_Border_doubleD">doubleD</value>
- <value tokenid="ooxml:Value_ST_Border_doubleDiamonds">doubleDiamonds</value>
- <value tokenid="ooxml:Value_ST_Border_earth1">earth1</value>
- <value tokenid="ooxml:Value_ST_Border_earth2">earth2</value>
- <value tokenid="ooxml:Value_ST_Border_eclipsingSquares1">eclipsingSquares1</value>
- <value tokenid="ooxml:Value_ST_Border_eclipsingSquares2">eclipsingSquares2</value>
- <value tokenid="ooxml:Value_ST_Border_eggsBlack">eggsBlack</value>
- <value tokenid="ooxml:Value_ST_Border_fans">fans</value>
- <value tokenid="ooxml:Value_ST_Border_film">film</value>
- <value tokenid="ooxml:Value_ST_Border_firecrackers">firecrackers</value>
- <value tokenid="ooxml:Value_ST_Border_flowersBlockPrint">flowersBlockPrint</value>
- <value tokenid="ooxml:Value_ST_Border_flowersDaisies">flowersDaisies</value>
- <value tokenid="ooxml:Value_ST_Border_flowersModern1">flowersModern1</value>
- <value tokenid="ooxml:Value_ST_Border_flowersModern2">flowersModern2</value>
- <value tokenid="ooxml:Value_ST_Border_flowersPansy">flowersPansy</value>
- <value tokenid="ooxml:Value_ST_Border_flowersRedRose">flowersRedRose</value>
- <value tokenid="ooxml:Value_ST_Border_flowersRoses">flowersRoses</value>
- <value tokenid="ooxml:Value_ST_Border_flowersTeacup">flowersTeacup</value>
- <value tokenid="ooxml:Value_ST_Border_flowersTiny">flowersTiny</value>
- <value tokenid="ooxml:Value_ST_Border_gems">gems</value>
- <value tokenid="ooxml:Value_ST_Border_gingerbreadMan">gingerbreadMan</value>
- <value tokenid="ooxml:Value_ST_Border_gradient">gradient</value>
- <value tokenid="ooxml:Value_ST_Border_handmade1">handmade1</value>
- <value tokenid="ooxml:Value_ST_Border_handmade2">handmade2</value>
- <value tokenid="ooxml:Value_ST_Border_heartBalloon">heartBalloon</value>
- <value tokenid="ooxml:Value_ST_Border_heartGray">heartGray</value>
- <value tokenid="ooxml:Value_ST_Border_hearts">hearts</value>
- <value tokenid="ooxml:Value_ST_Border_heebieJeebies">heebieJeebies</value>
- <value tokenid="ooxml:Value_ST_Border_holly">holly</value>
- <value tokenid="ooxml:Value_ST_Border_houseFunky">houseFunky</value>
- <value tokenid="ooxml:Value_ST_Border_hypnotic">hypnotic</value>
- <value tokenid="ooxml:Value_ST_Border_iceCreamCones">iceCreamCones</value>
- <value tokenid="ooxml:Value_ST_Border_lightBulb">lightBulb</value>
- <value tokenid="ooxml:Value_ST_Border_lightning1">lightning1</value>
- <value tokenid="ooxml:Value_ST_Border_lightning2">lightning2</value>
- <value tokenid="ooxml:Value_ST_Border_mapPins">mapPins</value>
- <value tokenid="ooxml:Value_ST_Border_mapleLeaf">mapleLeaf</value>
- <value tokenid="ooxml:Value_ST_Border_mapleMuffins">mapleMuffins</value>
- <value tokenid="ooxml:Value_ST_Border_marquee">marquee</value>
- <value tokenid="ooxml:Value_ST_Border_marqueeToothed">marqueeToothed</value>
- <value tokenid="ooxml:Value_ST_Border_moons">moons</value>
- <value tokenid="ooxml:Value_ST_Border_mosaic">mosaic</value>
- <value tokenid="ooxml:Value_ST_Border_musicNotes">musicNotes</value>
- <value tokenid="ooxml:Value_ST_Border_northwest">northwest</value>
- <value tokenid="ooxml:Value_ST_Border_ovals">ovals</value>
- <value tokenid="ooxml:Value_ST_Border_packages">packages</value>
- <value tokenid="ooxml:Value_ST_Border_palmsBlack">palmsBlack</value>
- <value tokenid="ooxml:Value_ST_Border_palmsColor">palmsColor</value>
- <value tokenid="ooxml:Value_ST_Border_paperClips">paperClips</value>
- <value tokenid="ooxml:Value_ST_Border_papyrus">papyrus</value>
- <value tokenid="ooxml:Value_ST_Border_partyFavor">partyFavor</value>
- <value tokenid="ooxml:Value_ST_Border_partyGlass">partyGlass</value>
- <value tokenid="ooxml:Value_ST_Border_pencils">pencils</value>
- <value tokenid="ooxml:Value_ST_Border_people">people</value>
- <value tokenid="ooxml:Value_ST_Border_peopleWaving">peopleWaving</value>
- <value tokenid="ooxml:Value_ST_Border_peopleHats">peopleHats</value>
- <value tokenid="ooxml:Value_ST_Border_poinsettias">poinsettias</value>
- <value tokenid="ooxml:Value_ST_Border_postageStamp">postageStamp</value>
- <value tokenid="ooxml:Value_ST_Border_pumpkin1">pumpkin1</value>
- <value tokenid="ooxml:Value_ST_Border_pushPinNote2">pushPinNote2</value>
- <value tokenid="ooxml:Value_ST_Border_pushPinNote1">pushPinNote1</value>
- <value tokenid="ooxml:Value_ST_Border_pyramids">pyramids</value>
- <value tokenid="ooxml:Value_ST_Border_pyramidsAbove">pyramidsAbove</value>
- <value tokenid="ooxml:Value_ST_Border_quadrants">quadrants</value>
- <value tokenid="ooxml:Value_ST_Border_rings">rings</value>
- <value tokenid="ooxml:Value_ST_Border_safari">safari</value>
- <value tokenid="ooxml:Value_ST_Border_sawtooth">sawtooth</value>
- <value tokenid="ooxml:Value_ST_Border_sawtoothGray">sawtoothGray</value>
- <value tokenid="ooxml:Value_ST_Border_scaredCat">scaredCat</value>
- <value tokenid="ooxml:Value_ST_Border_seattle">seattle</value>
- <value tokenid="ooxml:Value_ST_Border_shadowedSquares">shadowedSquares</value>
- <value tokenid="ooxml:Value_ST_Border_sharksTeeth">sharksTeeth</value>
- <value tokenid="ooxml:Value_ST_Border_shorebirdTracks">shorebirdTracks</value>
- <value tokenid="ooxml:Value_ST_Border_skyrocket">skyrocket</value>
- <value tokenid="ooxml:Value_ST_Border_snowflakeFancy">snowflakeFancy</value>
- <value tokenid="ooxml:Value_ST_Border_snowflakes">snowflakes</value>
- <value tokenid="ooxml:Value_ST_Border_sombrero">sombrero</value>
- <value tokenid="ooxml:Value_ST_Border_southwest">southwest</value>
- <value tokenid="ooxml:Value_ST_Border_stars">stars</value>
- <value tokenid="ooxml:Value_ST_Border_starsTop">starsTop</value>
- <value tokenid="ooxml:Value_ST_Border_stars3d">stars3d</value>
- <value tokenid="ooxml:Value_ST_Border_starsBlack">starsBlack</value>
- <value tokenid="ooxml:Value_ST_Border_starsShadowed">starsShadowed</value>
- <value tokenid="ooxml:Value_ST_Border_sun">sun</value>
- <value tokenid="ooxml:Value_ST_Border_swirligig">swirligig</value>
- <value tokenid="ooxml:Value_ST_Border_tornPaper">tornPaper</value>
- <value tokenid="ooxml:Value_ST_Border_tornPaperBlack">tornPaperBlack</value>
- <value tokenid="ooxml:Value_ST_Border_trees">trees</value>
- <value tokenid="ooxml:Value_ST_Border_triangleParty">triangleParty</value>
- <value tokenid="ooxml:Value_ST_Border_triangles">triangles</value>
- <value tokenid="ooxml:Value_ST_Border_tribal1">tribal1</value>
- <value tokenid="ooxml:Value_ST_Border_tribal2">tribal2</value>
- <value tokenid="ooxml:Value_ST_Border_tribal3">tribal3</value>
- <value tokenid="ooxml:Value_ST_Border_tribal4">tribal4</value>
- <value tokenid="ooxml:Value_ST_Border_tribal5">tribal5</value>
- <value tokenid="ooxml:Value_ST_Border_tribal6">tribal6</value>
- <value tokenid="ooxml:Value_ST_Border_twistedLines1">twistedLines1</value>
- <value tokenid="ooxml:Value_ST_Border_twistedLines2">twistedLines2</value>
- <value tokenid="ooxml:Value_ST_Border_vine">vine</value>
- <value tokenid="ooxml:Value_ST_Border_waveline">waveline</value>
- <value tokenid="ooxml:Value_ST_Border_weavingAngles">weavingAngles</value>
- <value tokenid="ooxml:Value_ST_Border_weavingBraid">weavingBraid</value>
- <value tokenid="ooxml:Value_ST_Border_weavingRibbon">weavingRibbon</value>
- <value tokenid="ooxml:Value_ST_Border_weavingStrips">weavingStrips</value>
- <value tokenid="ooxml:Value_ST_Border_whiteFlowers">whiteFlowers</value>
- <value tokenid="ooxml:Value_ST_Border_woodwork">woodwork</value>
- <value tokenid="ooxml:Value_ST_Border_xIllusions">xIllusions</value>
- <value tokenid="ooxml:Value_ST_Border_zanyTriangles">zanyTriangles</value>
- <value tokenid="ooxml:Value_ST_Border_zigZag">zigZag</value>
- <value tokenid="ooxml:Value_ST_Border_zigZagStitch">zigZagStitch</value>
- </resource>
- <resource name="CT_Border" resource="Properties">
- <attribute name="val" tokenid="ooxml:CT_Border_val"/>
- <attribute name="color" tokenid="ooxml:CT_Border_color"/>
- <attribute name="themeColor" tokenid="ooxml:CT_Border_themeColor"/>
- <attribute name="themeTint" tokenid="ooxml:CT_Border_themeTint"/>
- <attribute name="themeShade" tokenid="ooxml:CT_Border_themeShade"/>
- <attribute name="sz" tokenid="ooxml:CT_Border_sz"/>
- <attribute name="space" tokenid="ooxml:CT_Border_space"/>
- <attribute name="shadow" tokenid="ooxml:CT_Border_shadow"/>
- <attribute name="frame" tokenid="ooxml:CT_Border_frame"/>
- </resource>
- <!-- This DOCX values will be mapped to match the 'DOC' values that are defined here: -->
- <!-- http://msdn.microsoft.com/en-us/library/dd945712(v=office.12).aspx -->
- <resource name="ST_Shd" resource="List">
- <value tokenid="ooxml:Value_ST_Shd_clear">clear</value>
- <value tokenid="ooxml:Value_ST_Shd_solid">solid</value>
- <value tokenid="ooxml:Value_ST_Shd_pct5">pct5</value>
- <value tokenid="ooxml:Value_ST_Shd_pct10">pct10</value>
- <value tokenid="ooxml:Value_ST_Shd_pct20">pct20</value>
- <value tokenid="ooxml:Value_ST_Shd_pct25">pct25</value>
- <value tokenid="ooxml:Value_ST_Shd_pct30">pct30</value>
- <value tokenid="ooxml:Value_ST_Shd_pct40">pct40</value>
- <value tokenid="ooxml:Value_ST_Shd_pct50">pct50</value>
- <value tokenid="ooxml:Value_ST_Shd_pct60">pct60</value>
- <value tokenid="ooxml:Value_ST_Shd_pct70">pct70</value>
- <value tokenid="ooxml:Value_ST_Shd_pct75">pct75</value>
- <value tokenid="ooxml:Value_ST_Shd_pct80">pct80</value>
- <value tokenid="ooxml:Value_ST_Shd_pct90">pct90</value>
- <value tokenid="ooxml:Value_ST_Shd_horzStripe">horzStripe</value>
- <value tokenid="ooxml:Value_ST_Shd_vertStripe">vertStripe</value>
- <value tokenid="ooxml:Value_ST_Shd_reverseDiagStripe">reverseDiagStripe</value>
- <value tokenid="ooxml:Value_ST_Shd_diagStripe">diagStripe</value>
- <value tokenid="ooxml:Value_ST_Shd_horzCross">horzCross</value>
- <value tokenid="ooxml:Value_ST_Shd_diagCross">diagCross</value>
- <value tokenid="ooxml:Value_ST_Shd_thinHorzStripe">thinHorzStripe</value>
- <value tokenid="ooxml:Value_ST_Shd_thinVertStripe">thinVertStripe</value>
- <value tokenid="ooxml:Value_ST_Shd_thinReverseDiagStripe">thinReverseDiagStripe</value>
- <value tokenid="ooxml:Value_ST_Shd_thinDiagStripe">thinDiagStripe</value>
- <value tokenid="ooxml:Value_ST_Shd_thinHorzCross">thinHorzCross</value>
- <value tokenid="ooxml:Value_ST_Shd_thinDiagCross">thinDiagCross</value>
- <value tokenid="ooxml:Value_ST_Shd_pct12">pct12</value>
- <value tokenid="ooxml:Value_ST_Shd_pct15">pct15</value>
- <value tokenid="ooxml:Value_ST_Shd_pct35">pct35</value>
- <value tokenid="ooxml:Value_ST_Shd_pct37">pct37</value>
- <value tokenid="ooxml:Value_ST_Shd_pct45">pct45</value>
- <value tokenid="ooxml:Value_ST_Shd_pct55">pct55</value>
- <value tokenid="ooxml:Value_ST_Shd_pct62">pct62</value>
- <value tokenid="ooxml:Value_ST_Shd_pct65">pct65</value>
- <value tokenid="ooxml:Value_ST_Shd_pct85">pct85</value>
- <value tokenid="ooxml:Value_ST_Shd_pct87">pct87</value>
- <value tokenid="ooxml:Value_ST_Shd_pct95">pct95</value>
- <value tokenid="ooxml:Value_ST_Shd_nil">nil</value>
- </resource>
- <resource name="CT_Shd" resource="Properties">
- <attribute name="val" tokenid="ooxml:CT_Shd_val"/>
- <attribute name="color" tokenid="ooxml:CT_Shd_color"/>
- <attribute name="themeColor" tokenid="ooxml:CT_Shd_themeColor"/>
- <attribute name="themeTint" tokenid="ooxml:CT_Shd_themeTint"/>
- <attribute name="themeShade" tokenid="ooxml:CT_Shd_themeShade"/>
- <attribute name="fill" tokenid="ooxml:CT_Shd_fill"/>
- <attribute name="themeFill" tokenid="ooxml:CT_Shd_themeFill"/>
- <attribute name="themeFillTint" tokenid="ooxml:CT_Shd_themeFillTint"/>
- <attribute name="themeFillShade" tokenid="ooxml:CT_Shd_themeFillShade"/>
- </resource>
- <resource name="CT_VerticalAlignRun" resource="Value">
- <attribute name="val" tokenid="ooxml:CT_VerticalAlignRun_val" action="setValue"/>
- <action name="start" action="setDefaultStringValue"/>
- </resource>
- <resource name="CT_FitText" resource="Properties">
- <attribute name="val" tokenid="ooxml:CT_FitText_val"/>
- <attribute name="id" tokenid="ooxml:CT_FitText_id"/>
- </resource>
- <resource name="ST_Em" resource="List">
- <value tokenid="ooxml:Value_ST_Em_none">none</value>
- <value tokenid="ooxml:Value_ST_Em_dot">dot</value>
- <value tokenid="ooxml:Value_ST_Em_comma">comma</value>
- <value tokenid="ooxml:Value_ST_Em_circle">circle</value>
- <value tokenid="ooxml:Value_ST_Em_underDot">underDot</value>
- </resource>
- <resource name="CT_Em" resource="Value">
- <attribute name="val" tokenid="ooxml:CT_Em_val" action="setValue"/>
- </resource>
- <resource name="CT_Language" resource="Properties">
- <attribute name="val" tokenid="ooxml:CT_Language_val"/>
- <attribute name="eastAsia" tokenid="ooxml:CT_Language_eastAsia"/>
- <attribute name="bidi" tokenid="ooxml:CT_Language_bidi"/>
- </resource>
- <resource name="ST_CombineBrackets" resource="List">
- <value tokenid="ooxml:Value_ST_CombineBrackets_none">none</value>
- <value tokenid="ooxml:Value_ST_CombineBrackets_round">round</value>
- <value tokenid="ooxml:Value_ST_CombineBrackets_square">square</value>
- <value tokenid="ooxml:Value_ST_CombineBrackets_angle">angle</value>
- <value tokenid="ooxml:Value_ST_CombineBrackets_curly">curly</value>
- </resource>
- <resource name="CT_EastAsianLayout" resource="Properties">
- <attribute name="id" tokenid="ooxml:CT_EastAsianLayout_id"/>
- <attribute name="combine" tokenid="ooxml:CT_EastAsianLayout_combine"/>
- <attribute name="combineBrackets" tokenid="ooxml:CT_EastAsianLayout_combineBrackets"/>
- <attribute name="vert" tokenid="ooxml:CT_EastAsianLayout_vert"/>
- <attribute name="vertCompress" tokenid="ooxml:CT_EastAsianLayout_vertCompress"/>
- </resource>
- <resource name="ST_XAlign" resource="List">
- <value tokenid="ooxml:Value_doc_ST_XAlign_left">left</value>
- <value tokenid="ooxml:Value_doc_ST_XAlign_center">center</value>
- <value tokenid="ooxml:Value_doc_ST_XAlign_right">right</value>
- <value tokenid="ooxml:Value_doc_ST_XAlign_inside">inside</value>
- <value tokenid="ooxml:Value_doc_ST_XAlign_outside">outside</value>
- </resource>
- <resource name="ST_YAlign" resource="List">
- <value tokenid="ooxml:Value_doc_ST_YAlign_inline">inline</value>
- <value tokenid="ooxml:Value_doc_ST_YAlign_top">top</value>
- <value tokenid="ooxml:Value_doc_ST_YAlign_center">center</value>
- <value tokenid="ooxml:Value_doc_ST_YAlign_bottom">bottom</value>
- <value tokenid="ooxml:Value_doc_ST_YAlign_inside">inside</value>
- <value tokenid="ooxml:Value_doc_ST_YAlign_outside">outside</value>
- </resource>
- <resource name="ST_HeightRule" resource="List">
- <value tokenid="ooxml:Value_doc_ST_HeightRule_auto">auto</value>
- <value tokenid="ooxml:Value_doc_ST_HeightRule_exact">exact</value>
- <value tokenid="ooxml:Value_doc_ST_HeightRule_atLeast">atLeast</value>
- </resource>
- <resource name="ST_Wrap" resource="List">
- <value tokenid="ooxml:Value_doc_ST_Wrap_auto">auto</value>
- <value tokenid="ooxml:Value_doc_ST_Wrap_notBeside">notBeside</value>
- <value tokenid="ooxml:Value_doc_ST_Wrap_around">around</value>
- <value tokenid="ooxml:Value_doc_ST_Wrap_tight">tight</value>
- <value tokenid="ooxml:Value_doc_ST_Wrap_through">through</value>
- <value tokenid="ooxml:Value_doc_ST_Wrap_none">none</value>
- </resource>
- <resource name="ST_VAnchor" resource="List">
- <value tokenid="ooxml:Value_doc_ST_VAnchor_text">text</value>
- <value tokenid="ooxml:Value_doc_ST_VAnchor_margin">margin</value>
- <value tokenid="ooxml:Value_doc_ST_VAnchor_page">page</value>
- </resource>
- <resource name="ST_HAnchor" resource="List">
- <value tokenid="ooxml:Value_doc_ST_HAnchor_text">text</value>
- <value tokenid="ooxml:Value_doc_ST_HAnchor_margin">margin</value>
- <value tokenid="ooxml:Value_doc_ST_HAnchor_page">page</value>
- </resource>
- <resource name="ST_DropCap" resource="List">
- <value tokenid="ooxml:Value_doc_ST_DropCap_none">none</value>
- <value tokenid="ooxml:Value_doc_ST_DropCap_drop">drop</value>
- <value tokenid="ooxml:Value_doc_ST_DropCap_margin">margin</value>
- </resource>
- <resource name="CT_FramePr" resource="Properties">
- <attribute name="dropCap" tokenid="ooxml:CT_FramePr_dropCap"/>
- <attribute name="lines" tokenid="ooxml:CT_FramePr_lines"/>
- <attribute name="w" tokenid="ooxml:CT_FramePr_w"/>
- <attribute name="h" tokenid="ooxml:CT_FramePr_h"/>
- <attribute name="vSpace" tokenid="ooxml:CT_FramePr_vSpace"/>
- <attribute name="hSpace" tokenid="ooxml:CT_FramePr_hSpace"/>
- <attribute name="wrap" tokenid="ooxml:CT_FramePr_wrap"/>
- <attribute name="hAnchor" tokenid="ooxml:CT_FramePr_hAnchor"/>
- <attribute name="vAnchor" tokenid="ooxml:CT_FramePr_vAnchor"/>
- <attribute name="x" tokenid="ooxml:CT_FramePr_x"/>
- <attribute name="xAlign" tokenid="ooxml:CT_FramePr_xAlign"/>
- <attribute name="y" tokenid="ooxml:CT_FramePr_y"/>
- <attribute name="yAlign" tokenid="ooxml:CT_FramePr_yAlign"/>
- <attribute name="hRule" tokenid="ooxml:CT_FramePr_hRule"/>
- <attribute name="anchorLock" tokenid="ooxml:CT_FramePr_anchorLock"/>
- </resource>
- <resource name="ST_TabJc" resource="List">
- <value tokenid="ooxml:Value_ST_TabJc_clear">clear</value>
- <value tokenid="ooxml:Value_ST_TabJc_start">start</value>
- <value tokenid="ooxml:Value_ST_TabJc_left">left</value>
- <value tokenid="ooxml:Value_ST_TabJc_center">center</value>
- <value tokenid="ooxml:Value_ST_TabJc_end">end</value>
- <value tokenid="ooxml:Value_ST_TabJc_right">right</value>
- <value tokenid="ooxml:Value_ST_TabJc_decimal">decimal</value>
- <value tokenid="ooxml:Value_ST_TabJc_bar">bar</value>
- <value tokenid="ooxml:Value_ST_TabJc_num">num</value>
- </resource>
- <resource name="ST_TabTlc" resource="List">
- <value tokenid="ooxml:Value_ST_TabTlc_none">none</value>
- <value tokenid="ooxml:Value_ST_TabTlc_dot">dot</value>
- <value tokenid="ooxml:Value_ST_TabTlc_hyphen">hyphen</value>
- <value tokenid="ooxml:Value_ST_TabTlc_underscore">underscore</value>
- <value tokenid="ooxml:Value_ST_TabTlc_heavy">heavy</value>
- <value tokenid="ooxml:Value_ST_TabTlc_middleDot">middleDot</value>
- </resource>
- <resource name="CT_TabStop" resource="Properties">
- <attribute name="val" tokenid="ooxml:CT_TabStop_val"/>
- <attribute name="leader" tokenid="ooxml:CT_TabStop_leader"/>
- <attribute name="pos" tokenid="ooxml:CT_TabStop_pos"/>
- </resource>
- <resource name="ST_LineSpacingRule" resource="List">
- <value tokenid="ooxml:Value_doc_ST_LineSpacingRule_auto">auto</value>
- <value tokenid="ooxml:Value_doc_ST_LineSpacingRule_exact">exact</value>
- <value tokenid="ooxml:Value_doc_ST_LineSpacingRule_atLeast">atLeast</value>
- </resource>
- <resource name="CT_Spacing" resource="Properties">
- <attribute name="before" tokenid="ooxml:CT_Spacing_before"/>
- <attribute name="beforeLines" tokenid="ooxml:CT_Spacing_beforeLines"/>
- <attribute name="beforeAutospacing" tokenid="ooxml:CT_Spacing_beforeAutospacing"/>
- <attribute name="after" tokenid="ooxml:CT_Spacing_after"/>
- <attribute name="afterLines" tokenid="ooxml:CT_Spacing_afterLines"/>
- <attribute name="afterAutospacing" tokenid="ooxml:CT_Spacing_afterAutospacing"/>
- <attribute name="line" tokenid="ooxml:CT_Spacing_line"/>
- <attribute name="lineRule" tokenid="ooxml:CT_Spacing_lineRule"/>
- </resource>
- <resource name="CT_Ind" resource="Properties">
- <attribute name="end" tokenid="ooxml:CT_Ind_end"/>
- <attribute name="endChars" tokenid="ooxml:CT_Ind_endChars"/>
- <attribute name="start" tokenid="ooxml:CT_Ind_start"/>
- <attribute name="startChars" tokenid="ooxml:CT_Ind_startChars"/>
- <attribute name="hanging" tokenid="ooxml:CT_Ind_hanging"/>
- <attribute name="hangingChars" tokenid="ooxml:CT_Ind_hangingChars"/>
- <attribute name="firstLine" tokenid="ooxml:CT_Ind_firstLine"/>
- <attribute name="firstLineChars" tokenid="ooxml:CT_Ind_firstLineChars"/>
- <!-- ECMA 1st version -->
- <attribute name="left" tokenid="ooxml:CT_Ind_left"/>
- <attribute name="leftChars" tokenid="ooxml:CT_Ind_leftChars"/>
- <attribute name="right" tokenid="ooxml:CT_Ind_right"/>
- <attribute name="rightChars" tokenid="ooxml:CT_Ind_rightChars"/>
- </resource>
- <resource name="ST_Jc" resource="List">
- <value tokenid="ooxml:Value_ST_Jc_left">left</value>
- <value tokenid="ooxml:Value_ST_Jc_right">right</value>
- <value tokenid="ooxml:Value_ST_Jc_start">start</value>
- <value tokenid="ooxml:Value_ST_Jc_center">center</value>
- <value tokenid="ooxml:Value_ST_Jc_end">end</value>
- <value tokenid="ooxml:Value_ST_Jc_both">both</value>
- <value tokenid="ooxml:Value_ST_Jc_mediumKashida">mediumKashida</value>
- <value tokenid="ooxml:Value_ST_Jc_distribute">distribute</value>
- <value tokenid="ooxml:Value_ST_Jc_numTab">numTab</value>
- <value tokenid="ooxml:Value_ST_Jc_highKashida">highKashida</value>
- <value tokenid="ooxml:Value_ST_Jc_lowKashida">lowKashida</value>
- <value tokenid="ooxml:Value_ST_Jc_thaiDistribute">thaiDistribute</value>
- </resource>
- <resource name="CT_Jc" resource="Value">
- <attribute name="val" tokenid="ooxml:CT_Jc_val" action="setValue"/>
- </resource>
- <resource name="ST_View" resource="List">
- <value tokenid="ooxml:Value_doc_ST_View_none">none</value>
- <value tokenid="ooxml:Value_doc_ST_View_print">print</value>
- <value tokenid="ooxml:Value_doc_ST_View_outline">outline</value>
- <value tokenid="ooxml:Value_doc_ST_View_masterPages">masterPages</value>
- <value tokenid="ooxml:Value_doc_ST_View_normal">normal</value>
- <value tokenid="ooxml:Value_doc_ST_View_web">web</value>
- </resource>
- <resource name="CT_View" resource="Properties">
- <attribute name="val" tokenid="ooxml:CT_View_val"/>
- </resource>
- <resource name="ST_Zoom" resource="List">
- <value tokenid="ooxml:Value_doc_ST_Zoom_none">none</value>
- <value tokenid="ooxml:Value_doc_ST_Zoom_fullPage">fullPage</value>
- <value tokenid="ooxml:Value_doc_ST_Zoom_bestFit">bestFit</value>
- <value tokenid="ooxml:Value_doc_ST_Zoom_textFit">textFit</value>
- </resource>
- <resource name="ST_Percentage" resource="Integer"/>
- <resource name="CT_Zoom" resource="Properties">
- <attribute name="val" tokenid="ooxml:CT_Zoom_val"/>
- <attribute name="percent" tokenid="ooxml:CT_Zoom_percent"/>
- </resource>
- <resource name="CT_WritingStyle" resource="Properties">
- <attribute name="lang" tokenid="ooxml:CT_WritingStyle_lang"/>
- <attribute name="vendorID" tokenid="ooxml:CT_WritingStyle_vendorID"/>
- <attribute name="dllVersion" tokenid="ooxml:CT_WritingStyle_dllVersion"/>
- <attribute name="nlCheck" tokenid="ooxml:CT_WritingStyle_nlCheck"/>
- <attribute name="checkStyle" tokenid="ooxml:CT_WritingStyle_checkStyle"/>
- <attribute name="appName" tokenid="ooxml:CT_WritingStyle_appName"/>
- </resource>
- <resource name="CT_Proof" resource="Properties">
- <attribute name="spelling" tokenid="ooxml:CT_Proof_spelling"/>
- <attribute name="grammar" tokenid="ooxml:CT_Proof_grammar"/>
- </resource>
- <resource name="ST_DocType" resource="List">
- <value tokenid="ooxml:Value_doc_ST_DocType_notSpecified">notSpecified</value>
- <value tokenid="ooxml:Value_doc_ST_DocType_letter">letter</value>
- <value tokenid="ooxml:Value_doc_ST_DocType_eMail">eMail</value>
- </resource>
- <resource name="CT_DocType" resource="Properties">
- <attribute name="val" tokenid="ooxml:CT_DocType_val"/>
- </resource>
- <resource name="ST_DocProtect" resource="List">
- <value tokenid="ooxml:Value_doc_ST_DocProtect_none">none</value>
- <value tokenid="ooxml:Value_doc_ST_DocProtect_readOnly">readOnly</value>
- <value tokenid="ooxml:Value_doc_ST_DocProtect_comments">comments</value>
- <value tokenid="ooxml:Value_doc_ST_DocProtect_trackedChanges">trackedChanges</value>
- <value tokenid="ooxml:Value_doc_ST_DocProtect_forms">forms</value>
- </resource>
- <resource name="ST_CryptProv" resource="List">
- <value tokenid="ooxml:Value_doc_ST_CryptProv_rsaAES">rsaAES</value>
- <value tokenid="ooxml:Value_doc_ST_CryptProv_rsaFull">rsaFull</value>
- </resource>
- <resource name="ST_AlgClass" resource="List">
- <value tokenid="ooxml:Value_doc_ST_AlgClass_hash">hash</value>
- </resource>
- <resource name="ST_AlgType" resource="List">
- <value tokenid="ooxml:Value_doc_ST_AlgType_typeAny">typeAny</value>
- </resource>
- <resource name="AG_Password" resource="Properties">
- <attribute name="cryptProviderType" tokenid="ooxml:AG_Password_cryptProviderType"/>
- <attribute name="cryptAlgorithmClass" tokenid="ooxml:AG_Password_cryptAlgorithmClass"/>
- <attribute name="cryptAlgorithmType" tokenid="ooxml:AG_Password_cryptAlgorithmType"/>
- <attribute name="cryptAlgorithmSid" tokenid="ooxml:AG_Password_cryptAlgorithmSid"/>
- <attribute name="cryptSpinCount" tokenid="ooxml:AG_Password_cryptSpinCount"/>
- <attribute name="cryptProvider" tokenid="ooxml:AG_Password_cryptProvider"/>
- <attribute name="algIdExt" tokenid="ooxml:AG_Password_algIdExt"/>
- <attribute name="algIdExtSource" tokenid="ooxml:AG_Password_algIdExtSource"/>
- <attribute name="cryptProviderTypeExt" tokenid="ooxml:AG_Password_cryptProviderTypeExt"/>
- <attribute name="cryptProviderTypeExtSource" tokenid="ooxml:AG_Password_cryptProviderTypeExtSource"/>
- <attribute name="hash" tokenid="ooxml:AG_Password_hash"/>
- <attribute name="salt" tokenid="ooxml:AG_Password_salt"/>
- </resource>
- <resource name="CT_DocProtect" resource="Properties">
- <attribute name="edit" tokenid="ooxml:CT_DocProtect_edit"/>
- <attribute name="formatting" tokenid="ooxml:CT_DocProtect_formatting"/>
- <attribute name="enforcement" tokenid="ooxml:CT_DocProtect_enforcement"/>
- </resource>
- <resource name="CT_MailMergeDocType" resource="Value">
- <attribute name="val" tokenid="ooxml:CT_MailMergeDocType_val" action="setValue"/>
- <action name="start" action="setDefaultStringValue"/>
- </resource>
- <resource name="CT_MailMergeDataType" resource="Value">
- <attribute name="val" tokenid="ooxml:CT_MailMergeDataType_val" action="setValue"/>
- <action name="start" action="setDefaultStringValue"/>
- </resource>
- <resource name="CT_MailMergeDest" resource="Value">
- <attribute name="val" tokenid="ooxml:CT_MailMergeDest_val" action="setValue"/>
- <action name="start" action="setDefaultStringValue"/>
- </resource>
- <resource name="CT_MailMergeOdsoFMDFieldType" resource="Value">
- <attribute name="val" tokenid="ooxml:CT_MailMergeOdsoFMDFieldType_val" action="setValue"/>
- <action name="start" action="setDefaultStringValue"/>
- </resource>
- <resource name="CT_TrackChangesView" resource="Properties">
- <attribute name="markup" tokenid="ooxml:CT_TrackChangesView_markup"/>
- <attribute name="comments" tokenid="ooxml:CT_TrackChangesView_comments"/>
- <attribute name="insDel" tokenid="ooxml:CT_TrackChangesView_insDel"/>
- <attribute name="formatting" tokenid="ooxml:CT_TrackChangesView_formatting"/>
- <attribute name="inkAnnotations" tokenid="ooxml:CT_TrackChangesView_inkAnnotations"/>
- </resource>
- <resource name="CT_Kinsoku" resource="Properties">
- <attribute name="lang" tokenid="ooxml:CT_Kinsoku_lang"/>
- <attribute name="val" tokenid="ooxml:CT_Kinsoku_val"/>
- </resource>
- <resource name="ST_TextDirection" resource="List">
- <value tokenid="ooxml:Value_ST_TextDirection_lrTb">lrTb</value>
- <value tokenid="ooxml:Value_ST_TextDirection_tbRl">tbRl</value>
- <value tokenid="ooxml:Value_ST_TextDirection_btLr">btLr</value>
- <value tokenid="ooxml:Value_ST_TextDirection_lrTbV">lrTbV</value>
- <value tokenid="ooxml:Value_ST_TextDirection_tbRlV">tbRlV</value>
- <value tokenid="ooxml:Value_ST_TextDirection_tbLrV">tbLrV</value>
- </resource>
- <resource name="CT_TextDirection" resource="Value">
- <attribute name="val" tokenid="ooxml:CT_TextDirection_val" action="setValue"/>
- </resource>
- <resource name="ST_TextAlignment" resource="List">
- <value tokenid="ooxml:Value_doc_ST_TextAlignment_top">top</value>
- <value tokenid="ooxml:Value_doc_ST_TextAlignment_center">center</value>
- <value tokenid="ooxml:Value_doc_ST_TextAlignment_baseline">baseline</value>
- <value tokenid="ooxml:Value_doc_ST_TextAlignment_bottom">bottom</value>
- <value tokenid="ooxml:Value_doc_ST_TextAlignment_auto">auto</value>
- </resource>
- <resource name="CT_TextAlignment" resource="Value">
- <attribute name="val" tokenid="ooxml:CT_TextAlignment_val" action="setValue"/>
- </resource>
- <resource name="ST_DisplacedByCustomXml" resource="List">
- <value tokenid="ooxml:Value_doc_ST_DisplacedByCustomXml_next">next</value>
- <value tokenid="ooxml:Value_doc_ST_DisplacedByCustomXml_prev">prev</value>
- </resource>
- <resource name="ST_AnnotationVMerge" resource="List">
- <value tokenid="ooxml:Value_doc_ST_AnnotationVMerge_cont">cont</value>
- <value tokenid="ooxml:Value_doc_ST_AnnotationVMerge_rest">rest</value>
- </resource>
- <resource name="CT_Markup" resource="Properties">
- <attribute name="id" tokenid="ooxml:CT_Markup_id"/>
- </resource>
- <resource name="CT_TrackChange" resource="Properties">
- <attribute name="author" tokenid="ooxml:CT_TrackChange_author"/>
- <attribute name="date" tokenid="ooxml:CT_TrackChange_date"/>
- <action name="end" tokenid="ooxml:EG_RangeMarkupElements_customXmlInsRangeStart" action="sendPropertiesWithId" sendtokenid="ooxml:EG_RangeMarkupElements_customXmlInsRangeStart"/>
- <action name="end" tokenid="ooxml:EG_RangeMarkupElements_customXmlInsRangeStart" action="clearProps"/>
- <action name="end" tokenid="ooxml:EG_RangeMarkupElements_customXmlInsRangeEnd" action="sendPropertiesWithId" sendtokenid="ooxml:EG_RangeMarkupElements_customXmlInsRangeEnd"/>
- <action name="end" tokenid="ooxml:EG_RangeMarkupElements_customXmlInsRangeEnd" action="clearProps"/>
- <action name="end" tokenid="ooxml:EG_RangeMarkupElements_customXmlDelRangeStart" action="sendPropertiesWithId" sendtokenid="ooxml:EG_RangeMarkupElements_customXmlDelRangeStart"/>
- <action name="end" tokenid="ooxml:EG_RangeMarkupElements_customXmlDelRangeStart" action="clearProps"/>
- <action name="end" tokenid="ooxml:EG_RangeMarkupElements_customXmlDelRangeEnd" action="sendPropertiesWithId" sendtokenid="ooxml:EG_RangeMarkupElements_customXmlDelRangeEnd"/>
- <action name="end" tokenid="ooxml:EG_RangeMarkupElements_customXmlDelRangeEnd" action="clearProps"/>
- <action name="end" tokenid="ooxml:EG_RangeMarkupElements_customXmlMoveFromRangeStart" action="sendPropertiesWithId" sendtokenid="ooxml:EG_RangeMarkupElements_customXmlMoveFromRangeStart"/>
- <action name="end" tokenid="ooxml:EG_RangeMarkupElements_customXmlMoveFromRangeStart" action="clearProps"/>
- <action name="end" tokenid="ooxml:EG_RangeMarkupElements_customXmlMoveFromRangeEnd" action="sendPropertiesWithId" sendtokenid="ooxml:EG_RangeMarkupElements_customXmlMoveFromRangeEnd"/>
- <action name="end" tokenid="ooxml:EG_RangeMarkupElements_customXmlMoveFromRangeEnd" action="clearProps"/>
- <action name="end" tokenid="ooxml:EG_RangeMarkupElements_customXmlMoveToRangeStart" action="sendPropertiesWithId" sendtokenid="ooxml:EG_RangeMarkupElements_customXmlMoveToRangeStart"/>
- <action name="end" tokenid="ooxml:EG_RangeMarkupElements_customXmlMoveToRangeStart" action="clearProps"/>
- <action name="end" tokenid="ooxml:EG_RangeMarkupElements_customXmlMoveToRangeEnd" action="sendPropertiesWithId" sendtokenid="ooxml:EG_RangeMarkupElements_customXmlMoveToRangeEnd"/>
- <action name="end" tokenid="ooxml:EG_RangeMarkupElements_customXmlMoveToRangeEnd" action="clearProps"/>
- </resource>
- <resource name="CT_CellMergeTrackChange" resource="Properties">
- <attribute name="vMerge" tokenid="ooxml:CT_CellMergeTrackChange_vMerge"/>
- <attribute name="vMergeOrig" tokenid="ooxml:CT_CellMergeTrackChange_vMergeOrig"/>
- </resource>
- <resource name="CT_TrackChangeRange" resource="Properties">
- <attribute name="displacedByCustomXml" tokenid="ooxml:CT_TrackChangeRange_displacedByCustomXml"/>
- </resource>
- <resource name="CT_MarkupRange" resource="Properties">
- <attribute name="displacedByCustomXml" tokenid="ooxml:CT_MarkupRange_displacedByCustomXml"/>
- </resource>
- <resource name="CT_MarkupRangeBookmark" resource="Properties">
- <attribute name="id" tokenid="ooxml:CT_MarkupRangeBookmark_id"/>
- </resource>
- <resource name="CT_PermStart" resource="Properties">
- <attribute name="id" tokenid="ooxml:CT_PermStart_id"/>
- <attribute name="colFirst" tokenid="ooxml:CT_PermStart_colFirst"/>
- <attribute name="colLast" tokenid="ooxml:CT_PermStart_colLast"/>
- <attribute name="ed" tokenid="ooxml:CT_PermStart_ed"/>
- <attribute name="edGrp" tokenid="ooxml:CT_PermStart_edGrp"/>
- <attribute name="displacedByCustomXml" tokenid="ooxml:CT_PermStart_displacedByCustomXml"/>
- </resource>
- <resource name="CT_PermEnd" resource="Properties">
- <attribute name="id" tokenid="ooxml:CT_PermEnd_id"/>
- <attribute name="displacedByCustomXml" tokenid="ooxml:CT_PermEnd_displacedByCustomXml"/>
- </resource>
- <resource name="CT_MarkupRangeCommentStart" resource="Properties">
- <attribute name="id" tokenid="ooxml:EG_RangeMarkupElements_commentRangeStart"/>
- </resource>
- <resource name="CT_MarkupRangeCommentEnd" resource="Properties">
- <attribute name="id" tokenid="ooxml:EG_RangeMarkupElements_commentRangeEnd"/>
- </resource>
- <resource name="CT_BookmarkRange" resource="Properties">
- <attribute name="colFirst" tokenid="ooxml:CT_BookmarkRange_colFirst"/>
- <attribute name="colLast" tokenid="ooxml:CT_BookmarkRange_colLast"/>
- </resource>
- <resource name="CT_Bookmark" resource="Properties">
- <attribute name="name" tokenid="ooxml:CT_Bookmark_name"/>
- </resource>
- <resource name="CT_MoveBookmark" resource="Properties">
- <attribute name="author" tokenid="ooxml:CT_MoveBookmark_author"/>
- <attribute name="date" tokenid="ooxml:CT_MoveBookmark_date"/>
- </resource>
- <resource name="CT_Comment" resource="XNote">
- <attribute name="id" action="checkId"/>
- <attribute name="initials" tokenid="ooxml:CT_Comment_initials"/>
- </resource>
- <resource name="CT_TrackChangeNumbering" resource="Properties">
- <attribute name="original" tokenid="ooxml:CT_TrackChangeNumbering_original"/>
- </resource>
- <resource name="CT_TblPrExChange" resource="Properties">
- <element name="tblPrEx" tokenid="ooxml:CT_TblPrExChange_tblPrEx"/>
- </resource>
- <resource name="CT_TcPrChange" resource="Properties">
- <element name="tcPr" tokenid="ooxml:CT_TcPrChange_tcPr"/>
- </resource>
- <resource name="CT_TrPrChange" resource="Properties">
- <element name="trPr" tokenid="ooxml:CT_TrPrChange_trPr"/>
- </resource>
- <resource name="CT_TblGridChange" resource="Properties">
- <element name="tblGrid" tokenid="ooxml:CT_TblGridChange_tblGrid"/>
- </resource>
- <resource name="CT_TblPrChange" resource="Properties">
- <element name="tblPr" tokenid="ooxml:CT_TblPrChange_tblPr"/>
- </resource>
- <resource name="CT_SectPrChange" resource="Properties">
- <element name="sectPr" tokenid="ooxml:CT_SectPrChange_sectPr"/>
- </resource>
- <resource name="CT_PPrChange" resource="Properties">
- <element name="pPr" tokenid="ooxml:CT_PPrChange_pPr"/>
- </resource>
- <resource name="CT_RPrChange" resource="Properties">
- <element name="rPr" tokenid="ooxml:CT_RPrChange_rPr"/>
- </resource>
- <resource name="CT_ParaRPrChange" resource="Properties">
- <element name="rPr" tokenid="ooxml:CT_ParaRPrChange_rPr"/>
- </resource>
- <resource name="CT_RunTrackChange" resource="Stream">
- <action name="start" action="tokenproperty"/>
- <action name="start" action="sendPropertiesWithId" sendtokenid="ooxml:trackchange"/>
- <action name="start" action="clearProps"/>
- <action name="end" action="tokenproperty"/>
- <action name="end" action="sendPropertiesWithId" sendtokenid="ooxml:endtrackchange"/>
- <action name="end" action="clearProps"/>
- </resource>
- <resource name="EG_RangeMarkupElements" resource="Properties">
- <element name="bookmarkStart" tokenid="ooxml:EG_RangeMarkupElements_bookmarkStart"/>
- <element name="bookmarkEnd" tokenid="ooxml:EG_RangeMarkupElements_bookmarkEnd"/>
- <element name="permStart" tokenid="ooxml:EG_RangeMarkupElements_PermStart"/>
- <element name="permEnd" tokenid="ooxml:EG_RangeMarkupElements_PermEnd"/>
- <element name="moveFromRangeStart" tokenid="ooxml:EG_RangeMarkupElements_moveFromRangeStart"/>
- <element name="moveFromRangeEnd" tokenid="ooxml:EG_RangeMarkupElements_moveFromRangeEnd"/>
- <element name="moveToRangeStart" tokenid="ooxml:EG_RangeMarkupElements_moveToRangeStart"/>
- <element name="moveToRangeEnd" tokenid="ooxml:EG_RangeMarkupElements_moveToRangeEnd"/>
- <element name="commentRangeStart" tokenid="ooxml:EG_RangeMarkupElements_commentRangeStart"/>
- <element name="commentRangeEnd" tokenid="ooxml:EG_RangeMarkupElements_commentRangeEnd"/>
- <element name="customXmlInsRangeStart" tokenid="ooxml:EG_RangeMarkupElements_customXmlInsRangeStart"/>
- <element name="customXmlInsRangeEnd" tokenid="ooxml:EG_RangeMarkupElements_customXmlInsRangeEnd"/>
- <element name="customXmlDelRangeStart" tokenid="ooxml:EG_RangeMarkupElements_customXmlDelRangeStart"/>
- <element name="customXmlDelRangeEnd" tokenid="ooxml:EG_RangeMarkupElements_customXmlDelRangeEnd"/>
- <element name="customXmlMoveFromRangeStart" tokenid="ooxml:EG_RangeMarkupElements_customXmlMoveFromRangeStart"/>
- <element name="customXmlMoveFromRangeEnd" tokenid="ooxml:EG_RangeMarkupElements_customXmlMoveFromRangeEnd"/>
- <element name="customXmlMoveToRangeStart" tokenid="ooxml:EG_RangeMarkupElements_customXmlMoveToRangeStart"/>
- <element name="customXmlMoveToRangeEnd" tokenid="ooxml:EG_RangeMarkupElements_customXmlMoveToRangeEnd"/>
- </resource>
- <resource name="CT_NumPr" resource="Properties">
- <element name="ilvl" tokenid="ooxml:CT_NumPr_ilvl"/>
- <element name="numId" tokenid="ooxml:CT_NumPr_numId"/>
- <element name="numberingChange" tokenid="ooxml:CT_NumPr_numberingChange"/>
- <element name="ins" tokenid="ooxml:CT_NumPr_ins"/>
- </resource>
- <resource name="CT_PBdr" resource="Properties">
- <element name="top" tokenid="ooxml:CT_PBdr_top"/>
- <element name="left" tokenid="ooxml:CT_PBdr_left"/>
- <element name="bottom" tokenid="ooxml:CT_PBdr_bottom"/>
- <element name="right" tokenid="ooxml:CT_PBdr_right"/>
- <element name="between" tokenid="ooxml:CT_PBdr_between"/>
- <element name="bar" tokenid="ooxml:CT_PBdr_bar"/>
- </resource>
- <resource name="CT_Tabs" resource="Properties">
- <element name="tab" tokenid="ooxml:CT_Tabs_tab"/>
- </resource>
- <resource name="CT_TextboxTightWrap" resource="Value">
- <attribute name="val" tokenid="ooxml:CT_TextboxTightWrap_val" action="setValue"/>
- <action name="start" action="setDefaultStringValue"/>
- </resource>
- <resource name="CT_PPrBase" resource="Properties">
- <element name="pStyle" tokenid="ooxml:CT_PPrBase_pStyle"/>
- <element name="keepNext" tokenid="ooxml:CT_PPrBase_keepNext"/>
- <element name="keepLines" tokenid="ooxml:CT_PPrBase_keepLines"/>
- <element name="pageBreakBefore" tokenid="ooxml:CT_PPrBase_pageBreakBefore"/>
- <element name="framePr" tokenid="ooxml:CT_PPrBase_framePr"/>
- <element name="widowControl" tokenid="ooxml:CT_PPrBase_widowControl"/>
- <element name="numPr" tokenid="ooxml:CT_PPrBase_numPr"/>
- <element name="suppressLineNumbers" tokenid="ooxml:CT_PPrBase_suppressLineNumbers"/>
- <element name="pBdr" tokenid="ooxml:CT_PrBase_pBdr"/>
- <element name="shd" tokenid="ooxml:CT_PrBase_shd"/>
- <element name="tabs" tokenid="ooxml:CT_PPrBase_tabs"/>
- <element name="suppressAutoHyphens" tokenid="ooxml:CT_PPrBase_suppressAutoHyphens"/>
- <element name="kinsoku" tokenid="ooxml:CT_PPrBase_kinsoku"/>
- <element name="wordWrap" tokenid="ooxml:CT_PPrBase_wordWrap"/>
- <element name="overflowPunct" tokenid="ooxml:CT_PPrBase_overflowPunct"/>
- <element name="topLinePunct" tokenid="ooxml:CT_PPrBase_topLinePunct"/>
- <element name="autoSpaceDE" tokenid="ooxml:CT_PPrBase_autoSpaceDE"/>
- <element name="autoSpaceDN" tokenid="ooxml:CT_PPrBase_autoSpaceDN"/>
- <element name="bidi" tokenid="ooxml:CT_PPrBase_bidi"/>
- <element name="adjustRightInd" tokenid="ooxml:CT_PPrBase_adjustRightInd"/>
- <element name="snapToGrid" tokenid="ooxml:CT_PPrBase_snapToGrid"/>
- <element name="spacing" tokenid="ooxml:CT_PPrBase_spacing"/>
- <element name="ind" tokenid="ooxml:CT_PPrBase_ind"/>
- <element name="contextualSpacing" tokenid="ooxml:CT_PPrBase_contextualSpacing"/>
- <element name="mirrorIndents" tokenid="ooxml:CT_PPrBase_mirrorIndents"/>
- <element name="suppressOverlap" tokenid="ooxml:CT_PPrBase_suppressOverlap"/>
- <element name="jc" tokenid="ooxml:CT_PPrBase_jc"/>
- <element name="textDirection" tokenid="ooxml:CT_PPrBase_textDirection"/>
- <element name="textAlignment" tokenid="ooxml:CT_PPrBase_textAlignment"/>
- <element name="textboxTightWrap" tokenid="ooxml:CT_PPrBase_textboxTightWrap"/>
- <element name="outlineLvl" tokenid="ooxml:CT_PPrBase_outlineLvl"/>
- <element name="divId" tokenid="ooxml:CT_PPrBase_divId"/>
- <element name="cnfStyle" tokenid="ooxml:CT_PPrBase_cnfStyle"/>
- </resource>
- <resource name="CT_PPr" resource="Properties">
- <element name="rPr" tokenid="ooxml:CT_PPr_rPr"/>
- <element name="sectPr" tokenid="ooxml:CT_PPr_sectPr"/>
- <element name="pPrChange" tokenid="ooxml:CT_PPr_pPrChange"/>
- </resource>
- <resource name="CT_Background" resource="Properties">
- <attribute name="color" tokenid="ooxml:CT_Background_color"/>
- <attribute name="themeColor" tokenid="ooxml:CT_Background_themeColor"/>
- <attribute name="themeTint" tokenid="ooxml:CT_Background_themeTint"/>
- <attribute name="themeShade" tokenid="ooxml:CT_Background_themeShade"/>
- <element name="v:background" tokenid="ooxml:CT_Background_v_background"/>
- </resource>
- <resource name="CT_Rel" resource="Properties">
- <attribute name="r:id" tokenid="ooxml:CT_Rel_id"/>
- </resource>
- <resource name="CT_PictureBase" resource="Properties"/>
- <resource name="CT_Object" resource="Shape">
- <attribute name="dxaOrig" tokenid="ooxml:CT_Object_dxaOrig"/>
- <attribute name="dyaOrig" tokenid="ooxml:CT_Object_dyaOrig"/>
- <action name="end" action="sendPropertiesWithId" sendtokenid="ooxml:object"/>
- <action name="end" action="clearProps"/>
- </resource>
- <resource name="CT_Picture" resource="Shape">
- <element name="movie" tokenid="ooxml:CT_Picture_movie"/>
- <action name="end" action="sendPropertiesWithId" sendtokenid="ooxml:object"/>
- <action name="end" action="clearProps"/>
- </resource>
- <resource name="CT_Drawing" resource="Properties">
- <action name="end" action="handlePicture"/>
- </resource>
- <resource name="CT_SimpleField" resource="Stream">
- <element name="fldData" tokenid="ooxml:CT_SimpleField_fldData"/>
- <attribute name="instr" tokenid="ooxml:CT_SimpleField_instr"/>
- <attribute name="fldLock" tokenid="ooxml:CT_SimpleField_fldLock"/>
- <attribute name="dirty" tokenid="ooxml:CT_SimpleField_dirty"/>
- <action name="start" action="fieldstart"/>
- <action name="start" action="startCharacterGroup"/>
- <action name="start" action="printproperty" sendtokenid="ooxml:CT_SimpleField_instr"/>
- <action name="start" action="endCharacterGroup"/>
- <action name="start" action="fieldsep"/>
- <action name="end" action="fieldend"/>
- </resource>
- <resource name="ST_FldCharType" resource="List">
- <value tokenid="ooxml:Value_ST_FldCharType_begin">begin</value>
- <value tokenid="ooxml:Value_ST_FldCharType_separate">separate</value>
- <value tokenid="ooxml:Value_ST_FldCharType_end">end</value>
- </resource>
- <resource name="ST_InfoTextType" resource="List">
- <value tokenid="ooxml:Value_doc_ST_InfoTextType_text">text</value>
- <value tokenid="ooxml:Value_doc_ST_InfoTextType_autoText">autoText</value>
- </resource>
- <resource name="ST_FFName" resource="String"/>
- <resource name="CT_FFTextType" resource="Value">
- <attribute name="val" tokenid="ooxml:CT_FFTextType_val" action="setValue"/>
- <action name="start" action="setDefaultStringValue"/>
- </resource>
- <resource name="CT_FFName" resource="Value">
- <attribute name="val" tokenid="ooxml:CT_FFName_val" action="setValue"/>
- <action name="start" action="setDefaultStringValue"/>
- </resource>
- <resource name="CT_FldChar" resource="Stream">
- <element name="fldData" tokenid="ooxml:CT_FldChar_fldData"/>
- <element name="ffData" tokenid="ooxml:CT_FldChar_ffData"/>
- <element name="numberingChange" tokenid="ooxml:CT_FldChar_numberingChange"/>
- <attribute name="fldCharType" tokenid="ooxml:CT_FldChar_fldCharType"/>
- <attribute name="fldLock" tokenid="ooxml:CT_FldChar_fldLock"/>
- <attribute name="dirty" tokenid="ooxml:CT_FldChar_dirty"/>
- <action name="start" action="fieldstart">
- <cond tokenid="ooxml:CT_FldChar_fldCharType" value="ooxml:Value_ST_FldCharType_begin"/>
- </action>
- <action name="start" action="fieldsep">
- <cond tokenid="ooxml:CT_FldChar_fldCharType" value="ooxml:Value_ST_FldCharType_separate"/>
- </action>
- <action name="start" action="fieldend">
- <cond tokenid="ooxml:CT_FldChar_fldCharType" value="ooxml:Value_ST_FldCharType_end"/>
- </action>
- <action name="start" action="fieldlock"/>
- </resource>
- <resource name="CT_Hyperlink" resource="Stream">
- <attribute name="tgtFrame" tokenid="ooxml:CT_Hyperlink_tgtFrame"/>
- <attribute name="tooltip" tokenid="ooxml:CT_Hyperlink_tooltip"/>
- <attribute name="docLocation" tokenid="ooxml:CT_Hyperlink_docLocation"/>
- <attribute name="history" tokenid="ooxml:CT_Hyperlink_history"/>
- <attribute name="anchor" tokenid="ooxml:CT_Hyperlink_anchor"/>
- <attribute name="r:id" tokenid="ooxml:CT_Hyperlink_r_id"/>
- <action name="start" action="fieldstart"/>
- <action name="start" action="handleHyperlink"/>
- <action name="start" action="fieldsep"/>
- <action name="end" action="fieldend"/>
- </resource>
- <resource name="CT_FLDData" resource="Stream">
- <action name="characters" action="ignore"/>
- </resource>
- <resource name="CT_FFData" resource="Properties">
- <element name="name" tokenid="ooxml:CT_FFData_name"/>
- <element name="enabled" tokenid="ooxml:CT_FFData_enabled"/>
- <element name="calcOnExit" tokenid="ooxml:CT_FFData_calcOnExit"/>
- <element name="entryMacro" tokenid="ooxml:CT_FFData_entryMacro"/>
- <element name="exitMacro" tokenid="ooxml:CT_FFData_exitMacro"/>
- <element name="helpText" tokenid="ooxml:CT_FFData_helpText"/>
- <element name="statusText" tokenid="ooxml:CT_FFData_statusText"/>
- <element name="checkBox" tokenid="ooxml:CT_FFData_checkBox"/>
- <element name="ddList" tokenid="ooxml:CT_FFData_ddList"/>
- <element name="textInput" tokenid="ooxml:CT_FFData_textInput"/>
- <action name="end" action="sendPropertiesWithId" sendtokenid="ooxml:ffdata"/>
- <action name="end" action="clearProps"/>
- </resource>
- <resource name="CT_FFHelpText" resource="Properties">
- <attribute name="type" tokenid="ooxml:CT_FFHelpText_type"/>
- <attribute name="val" tokenid="ooxml:CT_FFHelpText_val"/>
- </resource>
- <resource name="CT_FFStatusText" resource="Properties">
- <attribute name="type" tokenid="ooxml:CT_FFStatusText_type"/>
- <attribute name="val" tokenid="ooxml:CT_FFStatusText_val"/>
- </resource>
- <resource name="CT_FFCheckBox" resource="Properties">
- <element name="size" tokenid="ooxml:CT_FFCheckBox_size"/>
- <element name="sizeAuto" tokenid="ooxml:CT_FFCheckBox_sizeAuto"/>
- <element name="default" tokenid="ooxml:CT_FFCheckBox_default"/>
- <element name="checked" tokenid="ooxml:CT_FFCheckBox_checked"/>
- </resource>
- <resource name="CT_FFDDList" resource="Properties">
- <element name="result" tokenid="ooxml:CT_FFDDList_result"/>
- <element name="default" tokenid="ooxml:CT_FFDDList_default"/>
- <element name="listEntry" tokenid="ooxml:CT_FFDDList_listEntry"/>
- </resource>
- <resource name="CT_FFTextInput" resource="Properties">
- <element name="type" tokenid="ooxml:CT_FFTextInput_type"/>
- <element name="default" tokenid="ooxml:CT_FFTextInput_default"/>
- <element name="maxLength" tokenid="ooxml:CT_FFTextInput_maxLength"/>
- <element name="format" tokenid="ooxml:CT_FFTextInput_format"/>
- </resource>
- <resource name="ST_SectionMark" resource="List">
- <value tokenid="ooxml:Value_ST_SectionMark_continuous">continuous</value>
- <value tokenid="ooxml:Value_ST_SectionMark_nextColumn">nextColumn</value>
- <value tokenid="ooxml:Value_ST_SectionMark_nextPage">nextPage</value>
- <value tokenid="ooxml:Value_ST_SectionMark_evenPage">evenPage</value>
- <value tokenid="ooxml:Value_ST_SectionMark_oddPage">oddPage</value>
- </resource>
- <resource name="CT_SectType" resource="Value">
- <attribute name="val" tokenid="ooxml:CT_SectType_val" action="setValue"/>
- </resource>
- <resource name="ST_NumberFormat" resource="List">
- <value tokenid="ooxml:Value_ST_NumberFormat_decimal">decimal</value>
- <value tokenid="ooxml:Value_ST_NumberFormat_upperRoman">upperRoman</value>
- <value tokenid="ooxml:Value_ST_NumberFormat_lowerRoman">lowerRoman</value>
- <value tokenid="ooxml:Value_ST_NumberFormat_upperLetter">upperLetter</value>
- <value tokenid="ooxml:Value_ST_NumberFormat_lowerLetter">lowerLetter</value>
- <value tokenid="ooxml:Value_ST_NumberFormat_ordinal">ordinal</value>
- <value tokenid="ooxml:Value_ST_NumberFormat_cardinalText">cardinalText</value>
- <value tokenid="ooxml:Value_ST_NumberFormat_ordinalText">ordinalText</value>
- <value tokenid="ooxml:Value_ST_NumberFormat_hex">hex</value>
- <value tokenid="ooxml:Value_ST_NumberFormat_chicago">chicago</value>
- <value tokenid="ooxml:Value_ST_NumberFormat_ideographDigital">ideographDigital</value>
- <value tokenid="ooxml:Value_ST_NumberFormat_japaneseCounting">japaneseCounting</value>
- <value tokenid="ooxml:Value_ST_NumberFormat_aiueo">aiueo</value>
- <value tokenid="ooxml:Value_ST_NumberFormat_iroha">iroha</value>
- <value tokenid="ooxml:Value_ST_NumberFormat_decimalFullWidth">decimalFullWidth</value>
- <value tokenid="ooxml:Value_ST_NumberFormat_decimalHalfWidth">decimalHalfWidth</value>
- <value tokenid="ooxml:Value_ST_NumberFormat_japaneseLegal">japaneseLegal</value>
- <value tokenid="ooxml:Value_ST_NumberFormat_japaneseDigitalTenThousand">japaneseDigitalTenThousand</value>
- <value tokenid="ooxml:Value_ST_NumberFormat_decimalEnclosedCircle">decimalEnclosedCircle</value>
- <value tokenid="ooxml:Value_ST_NumberFormat_decimalFullWidth2">decimalFullWidth2</value>
- <value tokenid="ooxml:Value_ST_NumberFormat_aiueoFullWidth">aiueoFullWidth</value>
- <value tokenid="ooxml:Value_ST_NumberFormat_irohaFullWidth">irohaFullWidth</value>
- <value tokenid="ooxml:Value_ST_NumberFormat_decimalZero">decimalZero</value>
- <value tokenid="ooxml:Value_ST_NumberFormat_bullet">bullet</value>
- <value tokenid="ooxml:Value_ST_NumberFormat_ganada">ganada</value>
- <value tokenid="ooxml:Value_ST_NumberFormat_chosung">chosung</value>
- <value tokenid="ooxml:Value_ST_NumberFormat_decimalEnclosedFullstop">decimalEnclosedFullstop</value>
- <value tokenid="ooxml:Value_ST_NumberFormat_decimalEnclosedParen">decimalEnclosedParen</value>
- <value tokenid="ooxml:Value_ST_NumberFormat_decimalEnclosedCircleChinese">decimalEnclosedCircleChinese</value>
- <value tokenid="ooxml:Value_ST_NumberFormat_ideographEnclosedCircle">ideographEnclosedCircle</value>
- <value tokenid="ooxml:Value_ST_NumberFormat_ideographTraditional">ideographTraditional</value>
- <value tokenid="ooxml:Value_ST_NumberFormat_ideographZodiac">ideographZodiac</value>
- <value tokenid="ooxml:Value_ST_NumberFormat_ideographZodiacTraditional">ideographZodiacTraditional</value>
- <value tokenid="ooxml:Value_ST_NumberFormat_taiwaneseCounting">taiwaneseCounting</value>
- <value tokenid="ooxml:Value_ST_NumberFormat_ideographLegalTraditional">ideographLegalTraditional</value>
- <value tokenid="ooxml:Value_ST_NumberFormat_taiwaneseCountingThousand">taiwaneseCountingThousand</value>
- <value tokenid="ooxml:Value_ST_NumberFormat_taiwaneseDigital">taiwaneseDigital</value>
- <value tokenid="ooxml:Value_ST_NumberFormat_chineseCounting">chineseCounting</value>
- <value tokenid="ooxml:Value_ST_NumberFormat_chineseLegalSimplified">chineseLegalSimplified</value>
- <value tokenid="ooxml:Value_ST_NumberFormat_chineseCountingThousand">chineseCountingThousand</value>
- <value tokenid="ooxml:Value_ST_NumberFormat_koreanDigital">koreanDigital</value>
- <value tokenid="ooxml:Value_ST_NumberFormat_koreanCounting">koreanCounting</value>
- <value tokenid="ooxml:Value_ST_NumberFormat_koreanLegal">koreanLegal</value>
- <value tokenid="ooxml:Value_ST_NumberFormat_koreanDigital2">koreanDigital2</value>
- <value tokenid="ooxml:Value_ST_NumberFormat_vietnameseCounting">vietnameseCounting</value>
- <value tokenid="ooxml:Value_ST_NumberFormat_russianLower">russianLower</value>
- <value tokenid="ooxml:Value_ST_NumberFormat_russianUpper">russianUpper</value>
- <value tokenid="ooxml:Value_ST_NumberFormat_none">none</value>
- <value tokenid="ooxml:Value_ST_NumberFormat_numberInDash">numberInDash</value>
- <value tokenid="ooxml:Value_ST_NumberFormat_hebrew1">hebrew1</value>
- <value tokenid="ooxml:Value_ST_NumberFormat_hebrew2">hebrew2</value>
- <value tokenid="ooxml:Value_ST_NumberFormat_arabicAlpha">arabicAlpha</value>
- <value tokenid="ooxml:Value_ST_NumberFormat_arabicAbjad">arabicAbjad</value>
- <value tokenid="ooxml:Value_ST_NumberFormat_hindiVowels">hindiVowels</value>
- <value tokenid="ooxml:Value_ST_NumberFormat_hindiConsonants">hindiConsonants</value>
- <value tokenid="ooxml:Value_ST_NumberFormat_hindiNumbers">hindiNumbers</value>
- <value tokenid="ooxml:Value_ST_NumberFormat_hindiCounting">hindiCounting</value>
- <value tokenid="ooxml:Value_ST_NumberFormat_thaiLetters">thaiLetters</value>
- <value tokenid="ooxml:Value_ST_NumberFormat_thaiNumbers">thaiNumbers</value>
- <value tokenid="ooxml:Value_ST_NumberFormat_thaiCounting">thaiCounting</value>
- <value tokenid="ooxml:Value_ST_NumberFormat_custom">custom</value>
- </resource>
- <resource name="ST_PageOrientation" resource="List">
- <value tokenid="ooxml:Value_ST_PageOrientation_portrait">portrait</value>
- <value tokenid="ooxml:Value_ST_PageOrientation_landscape">landscape</value>
- </resource>
- <resource name="CT_PageSz" resource="Properties">
- <attribute name="w" tokenid="ooxml:CT_PageSz_w"/>
- <attribute name="h" tokenid="ooxml:CT_PageSz_h"/>
- <attribute name="orient" tokenid="ooxml:CT_PageSz_orient"/>
- <attribute name="code" tokenid="ooxml:CT_PageSz_code"/>
- </resource>
- <resource name="CT_PageMar" resource="Properties">
- <attribute name="top" tokenid="ooxml:CT_PageMar_top"/>
- <attribute name="right" tokenid="ooxml:CT_PageMar_right"/>
- <attribute name="bottom" tokenid="ooxml:CT_PageMar_bottom"/>
- <attribute name="left" tokenid="ooxml:CT_PageMar_left"/>
- <attribute name="header" tokenid="ooxml:CT_PageMar_header"/>
- <attribute name="footer" tokenid="ooxml:CT_PageMar_footer"/>
- <attribute name="gutter" tokenid="ooxml:CT_PageMar_gutter"/>
- </resource>
- <resource name="ST_PageBorderZOrder" resource="List">
- <value tokenid="ooxml:Value_doc_ST_PageBorderZOrder_front">front</value>
- <value tokenid="ooxml:Value_doc_ST_PageBorderZOrder_back">back</value>
- </resource>
- <resource name="ST_PageBorderDisplay" resource="List">
- <value tokenid="ooxml:Value_doc_ST_PageBorderDisplay_allPages">allPages</value>
- <value tokenid="ooxml:Value_doc_ST_PageBorderDisplay_firstPage">firstPage</value>
- <value tokenid="ooxml:Value_doc_ST_PageBorderDisplay_notFirstPage">notFirstPage</value>
- </resource>
- <resource name="ST_PageBorderOffset" resource="List">
- <value tokenid="ooxml:Value_doc_ST_PageBorderOffset_page">page</value>
- <value tokenid="ooxml:Value_doc_ST_PageBorderOffset_text">text</value>
- </resource>
- <resource name="CT_PageBorders" resource="Properties">
- <element name="top" tokenid="ooxml:CT_PageBorders_top"/>
- <element name="left" tokenid="ooxml:CT_PageBorders_left"/>
- <element name="bottom" tokenid="ooxml:CT_PageBorders_bottom"/>
- <element name="right" tokenid="ooxml:CT_PageBorders_right"/>
- <attribute name="zOrder" tokenid="ooxml:CT_PageBorders_zOrder"/>
- <attribute name="display" tokenid="ooxml:CT_PageBorders_display"/>
- <attribute name="offsetFrom" tokenid="ooxml:CT_PageBorders_offsetFrom"/>
- </resource>
- <resource name="ST_ChapterSep" resource="List">
- <value tokenid="ooxml:Value_ST_ChapterSep_hyphen">hyphen</value>
- <value tokenid="ooxml:Value_ST_ChapterSep_period">period</value>
- <value tokenid="ooxml:Value_ST_ChapterSep_colon">colon</value>
- <value tokenid="ooxml:Value_ST_ChapterSep_emDash">emDash</value>
- <value tokenid="ooxml:Value_ST_ChapterSep_enDash">enDash</value>
- </resource>
- <resource name="ST_LineNumberRestart" resource="List">
- <value tokenid="ooxml:Value_ST_LineNumberRestart_newPage">newPage</value>
- <value tokenid="ooxml:Value_ST_LineNumberRestart_newSection">newSection</value>
- <value tokenid="ooxml:Value_ST_LineNumberRestart_continuous">continuous</value>
- </resource>
- <resource name="CT_LineNumber" resource="Properties">
- <attribute name="countBy" tokenid="ooxml:CT_LineNumber_countBy"/>
- <attribute name="start" tokenid="ooxml:CT_LineNumber_start"/>
- <attribute name="distance" tokenid="ooxml:CT_LineNumber_distance"/>
- <attribute name="restart" tokenid="ooxml:CT_LineNumber_restart"/>
- </resource>
- <resource name="CT_PageNumber" resource="Properties">
- <attribute name="fmt" tokenid="ooxml:CT_PageNumber_fmt"/>
- <attribute name="start" tokenid="ooxml:CT_PageNumber_start"/>
- <attribute name="chapStyle" tokenid="ooxml:CT_PageNumber_chapStyle"/>
- <attribute name="chapSep" tokenid="ooxml:CT_PageNumber_chapSep"/>
- </resource>
- <resource name="CT_Column" resource="Properties">
- <attribute name="space" tokenid="ooxml:CT_Column_space"/>
- <attribute name="w" tokenid="ooxml:CT_Column_w"/>
- </resource>
- <resource name="CT_Columns" resource="Properties">
- <attribute name="equalWidth" tokenid="ooxml:CT_Columns_equalWidth"/>
- <attribute name="space" tokenid="ooxml:CT_Columns_space"/>
- <attribute name="num" tokenid="ooxml:CT_Columns_num"/>
- <attribute name="sep" tokenid="ooxml:CT_Columns_sep"/>
- <element name="col" tokenid="ooxml:CT_Columns_col"/>
- </resource>
- <resource name="ST_VerticalJc" resource="List">
- <value tokenid="ooxml:Value_ST_VerticalJc_top">top</value>
- <value tokenid="ooxml:Value_ST_VerticalJc_center">center</value>
- <value tokenid="ooxml:Value_ST_VerticalJc_both">both</value>
- <value tokenid="ooxml:Value_ST_VerticalJc_bottom">bottom</value>
- </resource>
- <resource name="CT_VerticalJc" resource="Value">
- <attribute name="val" tokenid="ooxml:CT_VerticalJc_val" action="setValue"/>
- </resource>
- <resource name="ST_DocGrid" resource="List">
- <value tokenid="ooxml:Value_doc_ST_DocGrid_default">default</value>
- <value tokenid="ooxml:Value_doc_ST_DocGrid_lines">lines</value>
- <value tokenid="ooxml:Value_doc_ST_DocGrid_linesAndChars">linesAndChars</value>
- <value tokenid="ooxml:Value_doc_ST_DocGrid_snapToChars">snapToChars</value>
- </resource>
- <resource name="CT_DocGrid" resource="Properties">
- <attribute name="type" tokenid="ooxml:CT_DocGrid_type"/>
- <attribute name="linePitch" tokenid="ooxml:CT_DocGrid_linePitch"/>
- <attribute name="charSpace" tokenid="ooxml:CT_DocGrid_charSpace"/>
- </resource>
- <resource name="ST_HdrFtr" resource="List">
- <value tokenid="ooxml:Value_ST_HdrFtr_even">even</value>
- <value tokenid="ooxml:Value_ST_HdrFtr_default">default</value>
- <value tokenid="ooxml:Value_ST_HdrFtr_first">first</value>
- </resource>
- <resource name="ST_FtnEdn" resource="List">
- <value tokenid="ooxml:Value_doc_ST_FtnEdn_normal">normal</value>
- <value tokenid="ooxml:Value_doc_ST_FtnEdn_separator">separator</value>
- <value tokenid="ooxml:Value_doc_ST_FtnEdn_continuationSeparator">continuationSeparator</value>
- <value tokenid="ooxml:Value_doc_ST_FtnEdn_continuationNotice">continuationNotice</value>
- </resource>
- <resource name="CT_HdrFtrRef" resource="Properties">
- <attribute name="type" tokenid="ooxml:CT_HdrFtrRef_type"/>
- <attribute name="r:id" tokenid="ooxml:CT_HdrFtrRef_id"/>
- <action name="end" action="handleHdrFtr"/>
- </resource>
- <resource name="EG_HdrFtrReferences" resource="Properties">
- <element name="headerReference" tokenid="ooxml:EG_HdrFtrReferences_headerReference"/>
- <element name="footerReference" tokenid="ooxml:EG_HdrFtrReferences_footerReference"/>
- </resource>
- <resource name="CT_HdrFtr" resource="Stream">
- <action name="end" action="endParagraphGroup"/>
- </resource>
- <resource name="EG_SectPrContents" resource="Properties">
- <element name="bidi" tokenid="ooxml:EG_SectPrContents_bidi"/>
- <element name="cols" tokenid="ooxml:EG_SectPrContents_cols"/>
- <element name="docGrid" tokenid="ooxml:EG_SectPrContents_docGrid"/>
- <element name="endnotePr" tokenid="ooxml:EG_SectPrContents_endnotePr"/>
- <element name="footnotePr" tokenid="ooxml:EG_SectPrContents_footnotePr"/>
- <element name="formProt" tokenid="ooxml:EG_SectPrContents_formProt"/>
- <element name="lnNumType" tokenid="ooxml:EG_SectPrContents_lnNumType"/>
- <element name="noEndnote" tokenid="ooxml:EG_SectPrContents_noEndnote"/>
- <element name="paperSrc" tokenid="ooxml:EG_SectPrContents_paperSrc"/>
- <element name="pgBorders" tokenid="ooxml:EG_SectPrContents_pgBorders"/>
- <element name="pgMar" tokenid="ooxml:EG_SectPrContents_pgMar"/>
- <element name="pgNumType" tokenid="ooxml:EG_SectPrContents_pgNumType"/>
- <element name="pgSz" tokenid="ooxml:EG_SectPrContents_pgSz"/>
- <element name="printerSettings" tokenid="ooxml:EG_SectPrContents_printerSettings"/>
- <element name="rtlGutter" tokenid="ooxml:EG_SectPrContents_rtlGutter"/>
- <element name="textDirection" tokenid="ooxml:EG_SectPrContents_textDirection"/>
- <element name="titlePg" tokenid="ooxml:EG_SectPrContents_titlePg"/>
- <element name="type" tokenid="ooxml:EG_SectPrContents_type"/>
- <element name="vAlign" tokenid="ooxml:EG_SectPrContents_vAlign"/>
- </resource>
- <resource name="CT_SectPrBase" resource="Properties"/>
- <resource name="CT_SectPr" resource="Properties">
- <action name="start" action="handleLastParagraphInSection"/>
- <element name="sectPrChange" tokenid="ooxml:CT_SectPr_sectPrChange"/>
- <action name="start" action="setLastParagraphInSection"/>
- </resource>
- <resource name="CT_finalSectPr" resource="Properties">
- <action name="start" action="handleLastParagraphInSection"/>
- <element name="sectPrChange" tokenid="ooxml:CT_SectPr_sectPrChange"/>
- </resource>
- <resource name="ST_BrType" resource="List">
- <value tokenid="ooxml:Value_ST_BrType_column">column</value>
- <value tokenid="ooxml:Value_ST_BrType_page">page</value>
- <value tokenid="ooxml:Value_ST_BrType_textWrapping">textWrapping</value>
- </resource>
- <resource name="ST_BrClear" resource="List">
- <value tokenid="ooxml:Value_ST_BrClear_none">none</value>
- <value tokenid="ooxml:Value_ST_BrClear_left">left</value>
- <value tokenid="ooxml:Value_ST_BrClear_right">right</value>
- <value tokenid="ooxml:Value_ST_BrClear_all">all</value>
- </resource>
- <resource name="CT_Br" resource="Properties">
- <attribute name="type" tokenid="ooxml:CT_Br_type"/>
- <attribute name="clear" tokenid="ooxml:CT_Br_clear"/>
- <action name="end" action="handleBreak"/>
- </resource>
- <resource name="CT_Br_OutOfOrder" resource="Properties">
- <attribute name="type" tokenid="ooxml:CT_Br_type"/>
- <attribute name="clear" tokenid="ooxml:CT_Br_clear"/>
- <action name="end" action="handleOutOfOrderBreak"/>
- </resource>
- <resource name="ST_PTabAlignment" resource="List">
- <value tokenid="ooxml:Value_ST_PTabAlignment_left">left</value>
- <value tokenid="ooxml:Value_ST_PTabAlignment_center">center</value>
- <value tokenid="ooxml:Value_ST_PTabAlignment_right">right</value>
- </resource>
- <resource name="ST_PTabRelativeTo" resource="List">
- <value tokenid="ooxml:Value_ST_PTabRelativeTo_margin">margin</value>
- <value tokenid="ooxml:Value_ST_PTabRelativeTo_indent">indent</value>
- </resource>
- <resource name="ST_PTabLeader" resource="List">
- <value tokenid="ooxml:Value_ST_PTabLeader_none">none</value>
- <value tokenid="ooxml:Value_ST_PTabLeader_dot">dot</value>
- <value tokenid="ooxml:Value_ST_PTabLeader_hyphen">hyphen</value>
- <value tokenid="ooxml:Value_ST_PTabLeader_underscore">underscore</value>
- <value tokenid="ooxml:Value_ST_PTabLeader_middleDot">middleDot</value>
- </resource>
- <resource name="CT_PTab" resource="Properties">
- <attribute name="alignment" tokenid="ooxml:CT_PTab_alignment"/>
- <attribute name="relativeTo" tokenid="ooxml:CT_PTab_relativeTo"/>
- <attribute name="leader" tokenid="ooxml:CT_PTab_leader"/>
- <action name="end" action="tab"/>
- </resource>
- <resource name="CT_Sym" resource="Properties">
- <attribute name="font" tokenid="ooxml:CT_Sym_font"/>
- <attribute name="char" tokenid="ooxml:CT_Sym_char"/>
- <action name="end" action="symbol"/>
- </resource>
- <resource name="CT_Text" resource="Stream">
- <attribute name="xml:space" tokenid="ooxml:CT_Text_space"/>
- <action name="characters" action="text"/>
- </resource>
- <resource name="CT_FtnEdnRefChar" resource="Stream">
- <action name="end" action="ftnednref"/>
- </resource>
- <resource name="CT_FtnEdnSep" resource="Stream">
- <action name="end" action="ftnednsep"/>
- </resource>
- <resource name="CT_FtnEdnCont" resource="Stream">
- <action name="end" action="ftnedncont"/>
- </resource>
- <resource name="CT_PgNum" resource="Stream">
- <action name="end" action="pgNum"/>
- </resource>
- <resource name="CT_Cr" resource="Properties">
- <action name="end" action="handleBreak"/>
- </resource>
- <resource name="CT_Tab" resource="Stream">
- <action name="end" action="tab"/>
- </resource>
- <resource name="EG_RunInnerContent" resource="Stream">
- <element name="br" tokenid="ooxml:EG_RunInnerContent_br"/>
- <element name="t" tokenid="ooxml:EG_RunInnerContent_t"/>
- <element name="delText" tokenid="ooxml:EG_RunInnerContent_delText"/>
- <element name="instrText" tokenid="ooxml:EG_RunInnerContent_instrText"/>
- <element name="delInstrText" tokenid="ooxml:EG_RunInnerContent_delInstrText"/>
- <element name="noBreakHyphen" tokenid="ooxml:EG_RunInnerContent_noBreakHyphen"/>
- <element name="softHyphen" tokenid="ooxml:EG_RunInnerContent_softHyphen"/>
- <element name="dayShort" tokenid="ooxml:EG_RunInnerContent_dayShort"/>
- <element name="monthShort" tokenid="ooxml:EG_RunInnerContent_monthShort"/>
- <element name="yearShort" tokenid="ooxml:EG_RunInnerContent_yearShort"/>
- <element name="dayLong" tokenid="ooxml:EG_RunInnerContent_dayLong"/>
- <element name="monthLong" tokenid="ooxml:EG_RunInnerContent_monthLong"/>
- <element name="yearLong" tokenid="ooxml:EG_RunInnerContent_yearLong"/>
- <element name="annotationRef" tokenid="ooxml:EG_RunInnerContent_annotationRef"/>
- <element name="footnoteRef" tokenid="ooxml:EG_RunInnerContent_footnoteRef"/>
- <element name="endnoteRef" tokenid="ooxml:EG_RunInnerContent_endnoteRef"/>
- <element name="separator" tokenid="ooxml:EG_RunInnerContent_separator"/>
- <element name="continuationSeparator" tokenid="ooxml:EG_RunInnerContent_continuationSeparator"/>
- <element name="sym" tokenid="ooxml:EG_RunInnerContent_sym"/>
- <element name="pgNum" tokenid="ooxml:EG_RunInnerContent_pgNum"/>
- <element name="cr" tokenid="ooxml:EG_RunInnerContent_cr"/>
- <element name="tab" tokenid="ooxml:EG_RunInnerContent_tab"/>
- <element name="object" tokenid="ooxml:EG_RunInnerContent_object"/>
- <element name="pict" tokenid="ooxml:EG_RunInnerContent_pict"/>
- <element name="fldChar" tokenid="ooxml:EG_RunInnerContent_fldChar"/>
- <element name="ruby" tokenid="ooxml:EG_RunInnerContent_ruby"/>
- <element name="footnoteReference" tokenid="ooxml:EG_RunInnerContent_footnoteReference"/>
- <element name="endnoteReference" tokenid="ooxml:EG_RunInnerContent_endnoteReference"/>
- <element name="commentReference" tokenid="ooxml:EG_RunInnerContent_commentReference"/>
- <element name="drawing" tokenid="ooxml:EG_RunInnerContent_drawing"/>
- <element name="ptab" tokenid="ooxml:EG_RunInnerContent_ptab"/>
- <element name="lastRenderedPageBreak" tokenid="ooxml:EG_RunInnerContent_lastRenderedPageBreak"/>
- </resource>
- <resource name="CT_R" resource="Stream">
- <action name="start" action="startCharacterGroup"/>
- <action name="start" action="sendPropertiesWithId" tokenid="ooxml:EG_RubyContent_r" sendtokenid="ooxml:EG_RubyContent_r"/>
- </resource>
- <resource name="ST_Hint" resource="List">
- <value tokenid="ooxml:Value_ST_Hint_default">default</value>
- <value tokenid="ooxml:Value_ST_Hint_eastAsia">eastAsia</value>
- <value tokenid="ooxml:Value_ST_Hint_cs">cs</value>
- </resource>
- <resource name="ST_Theme" resource="List">
- <value tokenid="ooxml:Value_ST_Theme_majorEastAsia">majorEastAsia</value>
- <value tokenid="ooxml:Value_ST_Theme_majorBidi">majorBidi</value>
- <value tokenid="ooxml:Value_ST_Theme_majorAscii">majorAscii</value>
- <value tokenid="ooxml:Value_ST_Theme_majorHAnsi">majorHAnsi</value>
- <value tokenid="ooxml:Value_ST_Theme_minorEastAsia">minorEastAsia</value>
- <value tokenid="ooxml:Value_ST_Theme_minorBidi">minorBidi</value>
- <value tokenid="ooxml:Value_ST_Theme_minorAscii">minorAscii</value>
- <value tokenid="ooxml:Value_ST_Theme_minorHAnsi">minorHAnsi</value>
- </resource>
- <resource name="CT_Fonts" resource="Properties">
- <attribute name="hint" tokenid="ooxml:CT_Fonts_hint"/>
- <attribute name="ascii" tokenid="ooxml:CT_Fonts_ascii"/>
- <attribute name="hAnsi" tokenid="ooxml:CT_Fonts_hAnsi"/>
- <attribute name="eastAsia" tokenid="ooxml:CT_Fonts_eastAsia"/>
- <attribute name="cs" tokenid="ooxml:CT_Fonts_cs"/>
- <attribute name="asciiTheme" tokenid="ooxml:CT_Fonts_asciiTheme"/>
- <attribute name="hAnsiTheme" tokenid="ooxml:CT_Fonts_hAnsiTheme"/>
- <attribute name="eastAsiaTheme" tokenid="ooxml:CT_Fonts_eastAsiaTheme"/>
- <attribute name="cstheme" tokenid="ooxml:CT_Fonts_cstheme"/>
- </resource>
- <resource name="EG_RPrBase" resource="Properties">
- <element name="rStyle" tokenid="ooxml:EG_RPrBase_rStyle"/>
- <element name="rFonts" tokenid="ooxml:EG_RPrBase_rFonts"/>
- <element name="b" tokenid="ooxml:EG_RPrBase_b"/>
- <element name="bCs" tokenid="ooxml:EG_RPrBase_bCs"/>
- <element name="i" tokenid="ooxml:EG_RPrBase_i"/>
- <element name="iCs" tokenid="ooxml:EG_RPrBase_iCs"/>
- <element name="caps" tokenid="ooxml:EG_RPrBase_caps"/>
- <element name="smallCaps" tokenid="ooxml:EG_RPrBase_smallCaps"/>
- <element name="strike" tokenid="ooxml:EG_RPrBase_strike"/>
- <element name="dstrike" tokenid="ooxml:EG_RPrBase_dstrike"/>
- <element name="outline" tokenid="ooxml:EG_RPrBase_outline"/>
- <element name="shadow" tokenid="ooxml:EG_RPrBase_shadow"/>
- <element name="emboss" tokenid="ooxml:EG_RPrBase_emboss"/>
- <element name="imprint" tokenid="ooxml:EG_RPrBase_imprint"/>
- <element name="noProof" tokenid="ooxml:EG_RPrBase_noProof"/>
- <element name="snapToGrid" tokenid="ooxml:EG_RPrBase_snapToGrid"/>
- <element name="vanish" tokenid="ooxml:EG_RPrBase_vanish"/>
- <element name="webHidden" tokenid="ooxml:EG_RPrBase_webHidden"/>
- <element name="color" tokenid="ooxml:EG_RPrBase_color"/>
- <element name="spacing" tokenid="ooxml:EG_RPrBase_spacing"/>
- <element name="w" tokenid="ooxml:EG_RPrBase_w"/>
- <element name="kern" tokenid="ooxml:EG_RPrBase_kern"/>
- <element name="position" tokenid="ooxml:EG_RPrBase_position"/>
- <element name="sz" tokenid="ooxml:EG_RPrBase_sz"/>
- <element name="szCs" tokenid="ooxml:EG_RPrBase_szCs"/>
- <element name="highlight" tokenid="ooxml:EG_RPrBase_highlight"/>
- <element name="u" tokenid="ooxml:EG_RPrBase_u"/>
- <element name="effect" tokenid="ooxml:EG_RPrBase_effect"/>
- <element name="bdr" tokenid="ooxml:EG_RPrBase_bdr"/>
- <element name="shd" tokenid="ooxml:EG_RPrBase_shd"/>
- <element name="fitText" tokenid="ooxml:EG_RPrBase_fitText"/>
- <element name="vertAlign" tokenid="ooxml:EG_RPrBase_vertAlign"/>
- <element name="rtl" tokenid="ooxml:EG_RPrBase_rtl"/>
- <element name="cs" tokenid="ooxml:EG_RPrBase_cs"/>
- <element name="em" tokenid="ooxml:EG_RPrBase_em"/>
- <element name="lang" tokenid="ooxml:EG_RPrBase_lang"/>
- <element name="eastAsianLayout" tokenid="ooxml:EG_RPrBase_eastAsianLayout"/>
- <element name="specVanish" tokenid="ooxml:EG_RPrBase_specVanish"/>
- <element name="oMath" tokenid="ooxml:EG_RPrBase_oMath"/>
- <element name="w14:glow" tokenid="ooxml:EG_RPrBase_w14_glow"/>
- <element name="w14:shadow" tokenid="ooxml:EG_RPrBase_w14_shadow"/>
- <element name="w14:reflection" tokenid="ooxml:EG_RPrBase_w14_reflection"/>
- <element name="w14:textOutline" tokenid="ooxml:EG_RPrBase_w14_textOutline"/>
- <element name="w14:textFill" tokenid="ooxml:EG_RPrBase_w14_textFill"/>
- <element name="w14:scene3d" tokenid="ooxml:EG_RPrBase_w14_scene3d"/>
- <element name="w14:props3d" tokenid="ooxml:EG_RPrBase_w14_props3d"/>
- <element name="w14:ligatures" tokenid="ooxml:EG_RPrBase_w14_ligatures"/>
- <element name="w14:numForm" tokenid="ooxml:EG_RPrBase_w14_numForm"/>
- <element name="w14:numSpacing" tokenid="ooxml:EG_RPrBase_w14_numSpacing"/>
- <element name="w14:stylisticSets" tokenid="ooxml:EG_RPrBase_w14_stylisticSets"/>
- <element name="w14:cntxtAlts" tokenid="ooxml:EG_RPrBase_w14_cntxtAlts"/>
- </resource>
- <resource name="EG_RPrContent" resource="Properties">
- <element name="rPrChange" tokenid="ooxml:EG_RPrContent_rPrChange"/>
- </resource>
- <resource name="CT_RPr" resource="Properties">
- </resource>
- <resource name="CT_RPrOriginal" resource="Properties"/>
- <resource name="CT_ParaRPrOriginal" resource="Properties"/>
- <resource name="CT_ParaRPr" resource="Properties">
- <element name="ins" tokenid="ooxml:CT_ParaRPr_ins"/>
- <element name="del" tokenid="ooxml:CT_ParaRPr_del"/>
- <element name="rPrChange" tokenid="ooxml:CT_ParaRPr_rPrChange"/>
- </resource>
- <resource name="CT_ParaTrackChange" resource="Properties">
- <action name="start" action="tokenproperty"/>
- <action name="start" action="sendPropertiesWithId" sendtokenid="ooxml:paratrackchange"/>
- <action name="start" action="clearProps"/>
- </resource>
- <resource name="CT_AltChunk" resource="Properties">
- <attribute name="r:id" tokenid="ooxml:CT_AltChunk"/>
- <action name="start" action="handleAltChunk"/>
- </resource>
- <resource name="ST_RubyAlign" resource="List">
- <value tokenid="ooxml:Value_ST_RubyAlign_center">center</value>
- <value tokenid="ooxml:Value_ST_RubyAlign_distributeLetter">distributeLetter</value>
- <value tokenid="ooxml:Value_ST_RubyAlign_distributeSpace">distributeSpace</value>
- <value tokenid="ooxml:Value_ST_RubyAlign_left">left</value>
- <value tokenid="ooxml:Value_ST_RubyAlign_right">right</value>
- <value tokenid="ooxml:Value_ST_RubyAlign_rightVertical">rightVertical</value>
- </resource>
- <resource name="CT_RubyAlign" resource="Value">
- <attribute name="val" tokenid="ooxml:CT_RubyAlign_val" action="setValue"/>
- </resource>
- <resource name="CT_RubyPr" resource="Properties">
- <element name="rubyAlign" tokenid="ooxml:CT_RubyPr_rubyAlign"/>
- <element name="hps" tokenid="ooxml:CT_RubyPr_hps"/>
- <element name="hpsRaise" tokenid="ooxml:CT_RubyPr_hpsRaise"/>
- <element name="hpsBaseText" tokenid="ooxml:CT_RubyPr_hpsBaseText"/>
- <element name="lid" tokenid="ooxml:CT_RubyPr_lid"/>
- <element name="dirty" tokenid="ooxml:CT_RubyPr_dirty"/>
- <action name="start" action="sendPropertiesWithId" tokenid="ooxml:CT_RubyPr" sendtokenid="ooxml:CT_RubyPr"/>
- </resource>
- <resource name="CT_Ruby" resource="Stream">
- <element name="rubyPr" tokenid="ooxml:CT_RubyPr"/>
- <element name="rt" tokenid="ooxml:CT_Ruby_rt"/>
- <element name="rubyBase" tokenid="ooxml:CT_Ruby_rubyBase"/>
- <action name="start" action="sendPropertiesWithId" tokenid="ooxml:EG_RunInnerContent_ruby" sendtokenid="ooxml:EG_RunInnerContent_ruby"/>
- </resource>
- <resource name="CT_RubyContent" resource="Stream">
- <action name="start" action="sendPropertiesWithId" tokenid="ooxml:CT_Ruby_rt" sendtokenid="ooxml:CT_Ruby_rt"/>
- <action name="start" action="sendPropertiesWithId" tokenid="ooxml:CT_Ruby_rubyBase" sendtokenid="ooxml:CT_Ruby_rubyBase"/>
- </resource>
- <resource name="EG_RubyContent" resource="Stream">
- <element name="r" tokenid="ooxml:EG_RubyContent_r"/>
- </resource>
- <resource name="CT_Lock" resource="Value">
- <attribute name="val" tokenid="ooxml:CT_Lock_val" action="setValue"/>
- <action name="start" action="setDefaultStringValue"/>
- </resource>
- <resource name="CT_SdtDateMappingType" resource="Value">
- <attribute name="val" tokenid="ooxml:CT_SdtDateMappingType_val" action="setValue"/>
- <action name="start" action="setDefaultStringValue"/>
- </resource>
- <resource name="CT_CalendarType" resource="Value">
- <attribute name="val" tokenid="ooxml:CT_CalendarType_val" action="setValue"/>
- <action name="start" action="setDefaultStringValue"/>
- </resource>
- <resource name="CT_DataBinding" resource="Properties">
- <attribute name="prefixMappings" tokenid="ooxml:CT_DataBinding_prefixMappings"/>
- <attribute name="xpath" tokenid="ooxml:CT_DataBinding_xpath"/>
- <attribute name="storeItemID" tokenid="ooxml:CT_DataBinding_storeItemID"/>
- </resource>
- <resource name="CT_SdtPr" resource="Properties">
- <element name="rPr" tokenid="ooxml:CT_SdtPr_rPr"/>
- <element name="alias" tokenid="ooxml:CT_SdtPr_alias"/>
- <element name="lock" tokenid="ooxml:CT_SdtPr_lock"/>
- <element name="placeholder" tokenid="ooxml:CT_SdtPr_placeholder"/>
- <element name="showingPlcHdr" tokenid="ooxml:CT_SdtPr_showingPlcHdr"/>
- <element name="dataBinding" tokenid="ooxml:CT_SdtPr_dataBinding"/>
- <element name="temporary" tokenid="ooxml:CT_SdtPr_temporary"/>
- <element name="id" tokenid="ooxml:CT_SdtPr_id"/>
- <element name="tag" tokenid="ooxml:CT_SdtPr_tag"/>
- <element name="equation" tokenid="ooxml:CT_SdtPr_equation"/>
- <element name="comboBox" tokenid="ooxml:CT_SdtPr_comboBox"/>
- <element name="w14:checkbox" tokenid="ooxml:CT_SdtPr_checkbox"/>
- <element name="date" tokenid="ooxml:CT_SdtPr_date"/>
- <element name="docPartObj" tokenid="ooxml:CT_SdtPr_docPartObj"/>
- <element name="docPartList" tokenid="ooxml:CT_SdtPr_docPartList"/>
- <element name="dropDownList" tokenid="ooxml:CT_SdtPr_dropDownList"/>
- <element name="picture" tokenid="ooxml:CT_SdtPr_picture"/>
- <element name="richText" tokenid="ooxml:CT_SdtPr_richText"/>
- <element name="text" tokenid="ooxml:CT_SdtPr_text"/>
- <element name="citation" tokenid="ooxml:CT_SdtPr_citation"/>
- <element name="group" tokenid="ooxml:CT_SdtPr_group"/>
- <element name="bibliography" tokenid="ooxml:CT_SdtPr_bibliography"/>
- </resource>
- <resource name="CT_SdtEndPr" resource="Properties">
- <element name="rPr" tokenid="ooxml:CT_SdtEndPr_rPr"/>
- </resource>
- <resource name="CT_DirContentRun" resource="Value">
- <attribute name="val" tokenid="ooxml:CT_DirContentRun_val" action="setValue"/>
- <action name="start" action="pushBiDiEmbedLevel"/>
- <action name="end" action="popBiDiEmbedLevel"/>
- </resource>
- <resource name="ST_Direction" resource="List">
- <value tokenid="ooxml:Value_ST_Direction_ltr">ltr</value>
- <value tokenid="ooxml:Value_ST_Direction_rtl">rtl</value>
- </resource>
- <resource name="CT_SdtContentRun" resource="Stream"/>
- <resource name="CT_SdtContentBlock" resource="Stream"/>
- <resource name="CT_SdtContentRow" resource="Stream"/>
- <resource name="CT_SdtContentCell" resource="Stream">
- <action name="start" action="startSdt"/>
- <action name="end" action="endSdt"/>
- </resource>
- <resource name="CT_SdtBlock" resource="Stream">
- <element name="sdtPr" tokenid="ooxml:CT_SdtBlock_sdtPr"/>
- <element name="sdtEndPr" tokenid="ooxml:CT_SdtBlock_sdtEndPr"/>
- <element name="sdtContent" tokenid="ooxml:CT_SdtBlock_sdtContent"/>
- <element name="sdtEndContent" tokenid="ooxml:CT_SdtBlock_sdtEndContent"/>
- <action name="start" action="startSdt"/>
- <action name="end" action="endSdt"/>
- </resource>
- <resource name="CT_SdtRun" resource="Stream">
- <element name="sdtPr" tokenid="ooxml:CT_SdtRun_sdtPr"/>
- <element name="sdtEndPr" tokenid="ooxml:CT_SdtRun_sdtEndPr"/>
- <element name="sdtContent" tokenid="ooxml:CT_SdtRun_sdtContent"/>
- <action name="start" action="startSdt"/>
- <action name="end" action="endSdt"/>
- </resource>
- <resource name="CT_SdtCell" resource="Stream">
- <element name="sdtPr" tokenid="ooxml:CT_SdtCell_sdtPr"/>
- <element name="sdtEndPr" tokenid="ooxml:CT_SdtCell_sdtEndPr"/>
- <element name="sdtContent" tokenid="ooxml:CT_SdtCell_sdtContent"/>
- </resource>
- <resource name="CT_SdtRow" resource="Stream">
- <element name="sdtPr" tokenid="ooxml:CT_SdtRow_sdtPr"/>
- <element name="sdtEndPr" tokenid="ooxml:CT_SdtRow_sdtEndPr"/>
- <element name="sdtContent" tokenid="ooxml:CT_SdtRow_sdtContent"/>
- </resource>
- <resource name="CT_SdtDropDownList" resource="Properties">
- <element name="listItem" tokenid="ooxml:CT_SdtDropDownList_listItem"/>
- </resource>
- <resource name="CT_SdtDate" resource="Properties">
- <attribute name="fullDate" tokenid="ooxml:CT_SdtDate_fullDate"/>
- <element name="dateFormat" tokenid="ooxml:CT_SdtDate_dateFormat"/>
- <element name="lid" tokenid="ooxml:CT_SdtDate_lid"/>
- <element name="storeMappedDataAs" tokenid="ooxml:CT_SdtDate_storeMappedDataAs"/>
- <element name="calendar" tokenid="ooxml:CT_SdtDate_calendar"/>
- </resource>
- <resource name="CT_SdtDocPart" resource="Properties">
- <element name="docPartGallery" tokenid="ooxml:CT_SdtDocPart_docPartGallery"/>
- <element name="docPartCategory" tokenid="ooxml:CT_SdtDocPart_docPartCategory"/>
- <element name="docPartUnique" tokenid="ooxml:CT_SdtDocPart_docPartUnique"/>
- </resource>
- <resource name="CT_SdtListItem" resource="Properties">
- <attribute name="displayText" tokenid="ooxml:CT_SdtListItem_displayText"/>
- <attribute name="value" tokenid="ooxml:CT_SdtListItem_value"/>
- </resource>
- <resource name="CT_Attr" resource="Properties">
- <attribute name="uri" tokenid="ooxml:CT_Attr_uri"/>
- <attribute name="name" tokenid="ooxml:CT_Attr_name"/>
- <attribute name="val" tokenid="ooxml:CT_Attr_val"/>
- </resource>
- <resource name="CT_CustomXmlRun" resource="Properties">
- <element name="customXmlPr" tokenid="ooxml:CT_CustomXmlRun_customXmlPr"/>
- <attribute name="uri" tokenid="ooxml:CT_CustomXmlRun_uri"/>
- <attribute name="element" tokenid="ooxml:CT_CustomXmlRun_element"/>
- </resource>
- <resource name="CT_CustomXmlBlock" resource="Properties">
- <element name="customXmlPr" tokenid="ooxml:CT_CustomXmlBlock_customXmlPr"/>
- <attribute name="uri" tokenid="ooxml:CT_CustomXmlBlock_uri"/>
- <attribute name="element" tokenid="ooxml:CT_CustomXmlBlock_element"/>
- </resource>
- <resource name="CT_CustomXmlCell" resource="Properties">
- <element name="customXmlPr" tokenid="ooxml:CT_CustomXmlCell_customXmlPr"/>
- <attribute name="uri" tokenid="ooxml:CT_CustomXmlCell_uri"/>
- <attribute name="element" tokenid="ooxml:CT_CustomXmlCell_element"/>
- </resource>
- <resource name="CT_CustomXmlRow" resource="Properties">
- <element name="customXmlPr" tokenid="ooxml:CT_CustomXmlRow_customXmlPr"/>
- <attribute name="uri" tokenid="ooxml:CT_CustomXmlRow_uri"/>
- <attribute name="element" tokenid="ooxml:CT_CustomXmlRow_element"/>
- </resource>
- <resource name="CT_SmartTagRun" resource="Properties">
- <element name="smartTagPr" tokenid="ooxml:CT_SmartTagRun_smartTagPr"/>
- <attribute name="uri" tokenid="ooxml:CT_SmartTagRun_uri"/>
- <attribute name="element" tokenid="ooxml:CT_SmartTagRun_element"/>
- </resource>
- <resource name="CT_SmartTagPr" resource="Properties">
- <element name="attr" tokenid="ooxml:CT_SmartTagPr_attr"/>
- </resource>
- <resource name="EG_PContent" resource="Properties">
- <element name="fldSimple" tokenid="ooxml:EG_PContent_fldSimple"/>
- <element name="hyperlink" tokenid="ooxml:EG_PContent_hyperlink"/>
- <element name="subDoc" tokenid="ooxml:EG_PContent_subDoc"/>
- </resource>
- <resource name="CT_P" resource="Stream">
- <action name="start" action="handleLastParagraphInSection"/>
- <action name="start" action="startParagraphGroup"/>
- <action name="start" action="setHandle"/>
- <action name="start" action="sendTableDepth"/>
- <action name="end" action="endOfParagraph"/>
- </resource>
- <resource name="ST_TblWidth" resource="List">
- <value tokenid="ooxml:Value_ST_TblWidth_nil">nil</value>
- <value tokenid="ooxml:Value_ST_TblWidth_pct">pct</value>
- <value tokenid="ooxml:Value_ST_TblWidth_dxa">dxa</value>
- <value tokenid="ooxml:Value_ST_TblWidth_auto">auto</value>
- </resource>
- <resource name="CT_Height" resource="Properties">
- <attribute name="val" tokenid="ooxml:CT_Height_val"/>
- <attribute name="hRule" tokenid="ooxml:CT_Height_hRule"/>
- </resource>
- <resource name="CT_TblWidth" resource="Properties">
- <attribute name="w" tokenid="ooxml:CT_TblWidth_w"/>
- <attribute name="type" tokenid="ooxml:CT_TblWidth_type"/>
- </resource>
- <resource name="CT_TblPPr" resource="Properties">
- <attribute name="vertAnchor" tokenid="ooxml:CT_TblPPr_vertAnchor"/>
- <attribute name="tblpYSpec" tokenid="ooxml:CT_TblPPr_tblpYSpec"/>
- <attribute name="horzAnchor" tokenid="ooxml:CT_TblPPr_horzAnchor"/>
- <attribute name="tblpXSpec" tokenid="ooxml:CT_TblPPr_tblpXSpec"/>
- <attribute name="tblpY" tokenid="ooxml:CT_TblPPr_tblpY"/>
- <attribute name="tblpX" tokenid="ooxml:CT_TblPPr_tblpX"/>
- <attribute name="leftFromText" tokenid="ooxml:CT_TblPPr_leftFromText"/>
- <attribute name="rightFromText" tokenid="ooxml:CT_TblPPr_rightFromText"/>
- <attribute name="topFromText" tokenid="ooxml:CT_TblPPr_topFromText"/>
- <attribute name="bottomFromText" tokenid="ooxml:CT_TblPPr_bottomFromText"/>
- </resource>
- <resource name="CT_TblGridCol" resource="Value">
- <attribute name="w" tokenid="ooxml:CT_TblGridCol_w" action="setValue"/>
- <action name="start" action="setDefaultIntegerValue"/>
- </resource>
- <resource name="CT_TblGridBase" resource="Properties">
- <element name="gridCol" tokenid="ooxml:CT_TblGridBase_gridCol"/>
- </resource>
- <resource name="CT_TblGrid" resource="Properties">
- <element name="tblGridChange" tokenid="ooxml:CT_TblGrid_tblGridChange"/>
- <action name="end" action="propagateTableProperties"/>
- <action name="end" action="clearProps"/>
- </resource>
- <resource name="CT_TcBorders" resource="Properties">
- <element name="top" tokenid="ooxml:CT_TcBorders_top"/>
- <element name="start" tokenid="ooxml:CT_TcBorders_start"/>
- <element name="left" tokenid="ooxml:CT_TcBorders_left"/>
- <element name="bottom" tokenid="ooxml:CT_TcBorders_bottom"/>
- <element name="end" tokenid="ooxml:CT_TcBorders_end"/>
- <element name="right" tokenid="ooxml:CT_TcBorders_right"/>
- <element name="insideH" tokenid="ooxml:CT_TcBorders_insideH"/>
- <element name="insideV" tokenid="ooxml:CT_TcBorders_insideV"/>
- <element name="tl2br" tokenid="ooxml:CT_TcBorders_tl2br"/>
- <element name="tr2bl" tokenid="ooxml:CT_TcBorders_tr2bl"/>
- </resource>
- <resource name="CT_TcMar" resource="Properties">
- <element name="top" tokenid="ooxml:CT_TcMar_top"/>
- <element name="start" tokenid="ooxml:CT_TcMar_start"/>
- <element name="left" tokenid="ooxml:CT_TcMar_left"/>
- <element name="bottom" tokenid="ooxml:CT_TcMar_bottom"/>
- <element name="end" tokenid="ooxml:CT_TcMar_end"/>
- <element name="right" tokenid="ooxml:CT_TcMar_right"/>
- </resource>
- <resource name="ST_Merge" resource="List">
- <value tokenid="ooxml:Value_ST_Merge_continue">continue</value>
- <value tokenid="ooxml:Value_ST_Merge_restart">restart</value>
- </resource>
- <resource name="CT_VMerge" resource="Value">
- <attribute name="val" tokenid="ooxml:CT_VMerge_val" action="setValue"/>
- </resource>
- <resource name="CT_HMerge" resource="Value">
- <attribute name="val" tokenid="ooxml:CT_HMerge_val" action="setValue"/>
- </resource>
- <resource name="CT_TcPrBase" resource="Properties">
- <element name="cnfStyle" tokenid="ooxml:CT_TcPrBase_cnfStyle"/>
- <element name="tcW" tokenid="ooxml:CT_TcPrBase_tcW"/>
- <element name="gridSpan" tokenid="ooxml:CT_TcPrBase_gridSpan"/>
- <element name="hMerge" tokenid="ooxml:CT_TcPrBase_hMerge"/>
- <element name="vMerge" tokenid="ooxml:CT_TcPrBase_vMerge"/>
- <element name="tcBorders" tokenid="ooxml:CT_TcPrBase_tcBorders"/>
- <element name="shd" tokenid="ooxml:CT_TcPrBase_shd"/>
- <element name="noWrap" tokenid="ooxml:CT_TcPrBase_noWrap"/>
- <element name="tcMar" tokenid="ooxml:CT_TcPrBase_tcMar"/>
- <element name="textDirection" tokenid="ooxml:CT_TcPrBase_textDirection"/>
- <element name="tcFitText" tokenid="ooxml:CT_TcPrBase_tcFitText"/>
- <element name="vAlign" tokenid="ooxml:CT_TcPrBase_vAlign"/>
- <element name="hideMark" tokenid="ooxml:CT_TcPrBase_hideMark"/>
- <element name="cellDel" tokenid="ooxml:CT_TcPrBase_cellDel"/>
- <element name="cellIns" tokenid="ooxml:CT_TcPrBase_cellIns"/>
- <element name="cellMerge" tokenid="ooxml:CT_TcPrBase_cellMerge"/>
- </resource>
- <resource name="CT_TcPr" resource="Properties">
- <element name="tcPrChange" tokenid="ooxml:CT_TcPr_tcPrChange"/>
- <action name="end" action="propagateCellProperties"/>
- <action name="end" action="clearProps"/>
- </resource>
- <resource name="CT_TcPrInner" resource="Properties"/>
- <resource name="CT_Tc" resource="TextTableCell">
- <action name="start" action="startCell"/>
- <action name="end" action="endCell"/>
- <action name="end" action="sendCellProperties"/>
- <action name="end" action="endParagraphGroup"/>
- </resource>
- <resource name="ST_Cnf" resource="String"/>
- <resource name="CT_Cnf" resource="Properties">
- <attribute name="val" tokenid="ooxml:CT_Cnf_val"/>
- <attribute name="firstRow" tokenid="ooxml:CT_Cnf_firstRow"/>
- <attribute name="lastRow" tokenid="ooxml:CT_Cnf_lastRow"/>
- <attribute name="firstColumn" tokenid="ooxml:CT_Cnf_firstColumn"/>
- <attribute name="lastColumn" tokenid="ooxml:CT_Cnf_lastColumn"/>
- <attribute name="oddVBand" tokenid="ooxml:CT_Cnf_oddVBand"/>
- <attribute name="evenVBand" tokenid="ooxml:CT_Cnf_evenVBand"/>
- <attribute name="oddHBand" tokenid="ooxml:CT_Cnf_oddHBand"/>
- <attribute name="evenHBand" tokenid="ooxml:CT_Cnf_evenHBand"/>
- <attribute name="firstRowFirstColumn" tokenid="ooxml:CT_Cnf_firstRowFirstColumn"/>
- <attribute name="firstRowLastColumn" tokenid="ooxml:CT_Cnf_firstRowLastColumn"/>
- <attribute name="lastRowFirstColumn" tokenid="ooxml:CT_Cnf_lastRowFirstColumn"/>
- <attribute name="lastRowLastColumn" tokenid="ooxml:CT_Cnf_lastRowLastColumn"/>
- </resource>
- <resource name="CT_TrPrBase" resource="Properties">
- <element name="cnfStyle" tokenid="ooxml:CT_TrPrBase_cnfStyle"/>
- <element name="divId" tokenid="ooxml:CT_TrPrBase_divId"/>
- <element name="gridBefore" tokenid="ooxml:CT_TrPrBase_gridBefore"/>
- <element name="gridAfter" tokenid="ooxml:CT_TrPrBase_gridAfter"/>
- <element name="wBefore" tokenid="ooxml:CT_TrPrBase_wBefore"/>
- <element name="wAfter" tokenid="ooxml:CT_TrPrBase_wAfter"/>
- <element name="cantSplit" tokenid="ooxml:CT_TrPrBase_cantSplit"/>
- <element name="trHeight" tokenid="ooxml:CT_TrPrBase_trHeight"/>
- <element name="tblHeader" tokenid="ooxml:CT_TrPrBase_tblHeader"/>
- <element name="tblCellSpacing" tokenid="ooxml:CT_TrPrBase_tblCellSpacing"/>
- <element name="jc" tokenid="ooxml:CT_TrPrBase_jc"/>
- <element name="hidden" tokenid="ooxml:CT_TrPrBase_hidden"/>
- </resource>
- <resource name="CT_TrPrBaseGridAfter" resource="Value">
- <attribute name="val" tokenid="ooxml:CT_TrPrBase_gridAfter" action="setValue"/>
- <action name="end" action="handleGridAfter"/>
- </resource>
- <resource name="CT_TrPr" resource="Properties">
- <element name="ins" tokenid="ooxml:CT_TrPr_ins"/>
- <element name="del" tokenid="ooxml:CT_TrPr_del"/>
- <element name="trPrChange" tokenid="ooxml:CT_TrPr_trPrChange"/>
- <action name="end" action="propagateRowProperties"/>
- <action name="end" action="clearProps"/>
- </resource>
- <resource name="CT_Row" resource="TextTableRow">
- <action name="start" action="startRow"/>
- <action name="end" action="sendRowProperties"/>
- <action name="end" action="sendTableProperties"/>
- <action name="end" action="endRow"/>
- </resource>
- <resource name="ST_TblLayout" resource="List">
- <value tokenid="ooxml:Value_doc_ST_TblLayout_fixed">fixed</value>
- <value tokenid="ooxml:Value_doc_ST_TblLayout_autofit">autofit</value>
- </resource>
- <resource name="CT_TblLayoutType" resource="Value">
- <attribute name="type" tokenid="ooxml:CT_TblLayoutType_type" action="setValue"/>
- </resource>
- <resource name="ST_TblOverlap" resource="List">
- <value tokenid="ooxml:Value_ST_TblOverlap_never">never</value>
- <value tokenid="ooxml:Value_ST_TblOverlap_overlap">overlap</value>
- </resource>
- <resource name="CT_TblOverlap" resource="Value">
- <attribute name="val" tokenid="ooxml:CT_TblOverlap_val" action="setValue"/>
- </resource>
- <resource name="CT_TblCellMar" resource="Properties">
- <element name="top" tokenid="ooxml:CT_TblCellMar_top"/>
- <element name="start" tokenid="ooxml:CT_TblCellMar_start"/>
- <element name="left" tokenid="ooxml:CT_TblCellMar_left"/>
- <element name="bottom" tokenid="ooxml:CT_TblCellMar_bottom"/>
- <element name="end" tokenid="ooxml:CT_TblCellMar_end"/>
- <element name="right" tokenid="ooxml:CT_TblCellMar_right"/>
- </resource>
- <resource name="CT_TblBorders" resource="Properties">
- <element name="top" tokenid="ooxml:CT_TblBorders_top"/>
- <element name="start" tokenid="ooxml:CT_TblBorders_start"/>
- <element name="left" tokenid="ooxml:CT_TblBorders_left"/>
- <element name="bottom" tokenid="ooxml:CT_TblBorders_bottom"/>
- <element name="end" tokenid="ooxml:CT_TblBorders_end"/>
- <element name="right" tokenid="ooxml:CT_TblBorders_right"/>
- <element name="insideH" tokenid="ooxml:CT_TblBorders_insideH"/>
- <element name="insideV" tokenid="ooxml:CT_TblBorders_insideV"/>
- </resource>
- <resource name="CT_TblPrBase" resource="Properties">
- <element name="tblStyle" tokenid="ooxml:CT_TblPrBase_tblStyle"/>
- <element name="tblpPr" tokenid="ooxml:CT_TblPrBase_tblpPr"/>
- <element name="tblOverlap" tokenid="ooxml:CT_TblPrBase_tblOverlap"/>
- <element name="bidiVisual" tokenid="ooxml:CT_TblPrBase_bidiVisual"/>
- <element name="tblStyleRowBandSize" tokenid="ooxml:CT_TblPrBase_tblStyleRowBandSize"/>
- <element name="tblStyleColBandSize" tokenid="ooxml:CT_TblPrBase_tblStyleColBandSize"/>
- <element name="tblW" tokenid="ooxml:CT_TblPrBase_tblW"/>
- <element name="jc" tokenid="ooxml:CT_TblPrBase_jc"/>
- <element name="tblCellSpacing" tokenid="ooxml:CT_TblPrBase_tblCellSpacing"/>
- <element name="tblInd" tokenid="ooxml:CT_TblPrBase_tblInd"/>
- <element name="tblBorders" tokenid="ooxml:CT_TblPrBase_tblBorders"/>
- <element name="shd" tokenid="ooxml:CT_TblPrBase_shd"/>
- <element name="tblLayout" tokenid="ooxml:CT_TblPrBase_tblLayout"/>
- <element name="tblCellMar" tokenid="ooxml:CT_TblPrBase_tblCellMar"/>
- <element name="tblLook" tokenid="ooxml:CT_TblPrBase_tblLook"/>
- <element name="tblCaption" tokenid="ooxml:CT_TblPrBase_tblCaption"/>
- <element name="tblDescription" tokenid="ooxml:CT_TblPrBase_tblDescription"/>
- </resource>
- <resource name="CT_TblPr" resource="Properties">
- <element name="tblPrChange" tokenid="ooxml:CT_TblPr_tblPrChange"/>
- <action name="end" action="propagateTableProperties"/>
- <action name="end" action="clearProps"/>
- </resource>
- <resource name="CT_TblPrEx" resource="Properties">
- <element name="tblPrExChange" tokenid="ooxml:CT_TblPrEx_tblPrExChange"/>
- <element name="tblBorders" tokenid="ooxml:CT_TblPrEx_tblBorders"/>
- </resource>
- <resource name="CT_Tbl" resource="TextTable"/>
- <!-- tdf#111550 : allow <w:tbl> at paragraph level (despite this is illegal according to ECMA-376-1:2016) - bug-to-bug compatibility with Word -->
- <resource name="CT_P_Tbl" resource="TextTable">
- <action name="start" action="start_P_Tbl"/>
- </resource>
- <resource name="CT_TblLook" resource="Properties">
- <attribute name="firstRow" tokenid="ooxml:CT_TblLook_firstRow"/>
- <attribute name="lastRow" tokenid="ooxml:CT_TblLook_lastRow"/>
- <attribute name="firstColumn" tokenid="ooxml:CT_TblLook_firstColumn"/>
- <attribute name="lastColumn" tokenid="ooxml:CT_TblLook_lastColumn"/>
- <attribute name="noHBand" tokenid="ooxml:CT_TblLook_noHBand"/>
- <attribute name="noVBand" tokenid="ooxml:CT_TblLook_noVBand"/>
- <attribute name="val" tokenid="ooxml:CT_TblLook_val"/>
- </resource>
- <resource name="ST_FtnPos" resource="List">
- <value tokenid="ooxml:Value_ST_FtnPos_pageBottom">pageBottom</value>
- <value tokenid="ooxml:Value_ST_FtnPos_beneathText">beneathText</value>
- <value tokenid="ooxml:Value_ST_FtnPos_sectEnd">sectEnd</value>
- <value tokenid="ooxml:Value_ST_FtnPos_docEnd">docEnd</value>
- </resource>
- <resource name="CT_FtnPos" resource="Value">
- <attribute name="val" tokenid="ooxml:CT_FtnPos_val" action="setValue"/>
- </resource>
- <resource name="ST_EdnPos" resource="List">
- <value tokenid="ooxml:Value_ST_EdnPos_sectEnd">sectEnd</value>
- <value tokenid="ooxml:Value_ST_EdnPos_docEnd">docEnd</value>
- </resource>
- <resource name="CT_EdnPos" resource="Value">
- <attribute name="val" tokenid="ooxml:CT_EdnPos_val" action="setValue"/>
- </resource>
- <resource name="CT_NumFmt" resource="Properties">
- <attribute name="format" tokenid="ooxml:CT_NumFmt_format"/>
- <attribute name="val" tokenid="ooxml:CT_NumFmt_val"/>
- </resource>
- <resource name="ST_RestartNumber" resource="List">
- <value tokenid="ooxml:Value_ST_RestartNumber_continuous">continuous</value>
- <value tokenid="ooxml:Value_ST_RestartNumber_eachSect">eachSect</value>
- <value tokenid="ooxml:Value_ST_RestartNumber_eachPage">eachPage</value>
- </resource>
- <resource name="CT_NumRestart" resource="Value">
- <attribute name="val" tokenid="ooxml:CT_NumRestart_val" action="setValue"/>
- </resource>
- <resource name="CT_FtnEdnRef" resource="Properties">
- <attribute name="customMarkFollows" tokenid="ooxml:CT_FtnEdnRef_customMarkFollows"/>
- <attribute name="id" tokenid="ooxml:CT_FtnEdnRef_id" action="setXNoteId"/>
- <action name="end" action="handleXNotes"/>
- </resource>
- <resource name="CT_FtnEdnSepRef" resource="Properties">
- <attribute name="id" tokenid="ooxml:CT_FtnEdnSepRef_id"/>
- </resource>
- <resource name="CT_FtnEdn" resource="XNote">
- <attribute name="type" tokenid="ooxml:CT_FtnEdn_type" action="checkType"/>
- <attribute name="id" tokenid="ooxml:CT_FtnEdn_id" action="checkId"/>
- <action name="start" action="propagateCharacterProperties"/>
- <action name="end" action="endSectionGroup"/>
- </resource>
- <resource name="CT_CommentRef" resource="Properties">
- <action name="end" action="handleComment"/>
- </resource>
- <resource name="EG_FtnEdnNumProps" resource="Properties">
- <element name="numStart" tokenid="ooxml:EG_FtnEdnNumProps_numStart"/>
- <element name="numRestart" tokenid="ooxml:EG_FtnEdnNumProps_numRestart"/>
- </resource>
- <resource name="CT_FtnProps" resource="Properties">
- <element name="pos" tokenid="ooxml:CT_FtnProps_pos"/>
- <element name="numFmt" tokenid="ooxml:CT_FtnProps_numFmt"/>
- </resource>
- <resource name="CT_EdnProps" resource="Properties">
- <element name="pos" tokenid="ooxml:CT_EdnProps_pos"/>
- <element name="numFmt" tokenid="ooxml:CT_EdnProps_numFmt"/>
- </resource>
- <resource name="CT_FtnDocProps" resource="Properties">
- <element name="footnote" tokenid="ooxml:CT_FtnDocProps_footnote"/>
- </resource>
- <resource name="CT_EdnDocProps" resource="Properties">
- <element name="endnote" tokenid="ooxml:CT_EdnDocProps_endnote"/>
- </resource>
- <resource name="CT_MailMergeSourceType" resource="Value">
- <attribute name="val" tokenid="ooxml:CT_MailMergeSourceType_val" action="setValue"/>
- <action name="start" action="setDefaultStringValue"/>
- </resource>
- <resource name="CT_MailMerge" resource="Properties">
- <element name="mainDocumentType" tokenid="ooxml:CT_MailMerge_mainDocumentType"/>
- <element name="linkToQuery" tokenid="ooxml:CT_MailMerge_linkToQuery"/>
- <element name="dataType" tokenid="ooxml:CT_MailMerge_dataType"/>
- <element name="connectString" tokenid="ooxml:CT_MailMerge_connectString"/>
- <element name="query" tokenid="ooxml:CT_MailMerge_query"/>
- <element name="dataSource" tokenid="ooxml:CT_MailMerge_dataSource"/>
- <element name="headerSource" tokenid="ooxml:CT_MailMerge_headerSource"/>
- <element name="doNotSuppressBlankLines" tokenid="ooxml:CT_MailMerge_doNotSuppressBlankLines"/>
- <element name="destination" tokenid="ooxml:CT_MailMerge_destination"/>
- <element name="addressFieldName" tokenid="ooxml:CT_MailMerge_addressFieldName"/>
- <element name="mailSubject" tokenid="ooxml:CT_MailMerge_mailSubject"/>
- <element name="mailAsAttachment" tokenid="ooxml:CT_MailMerge_mailAsAttachment"/>
- <element name="viewMergedData" tokenid="ooxml:CT_MailMerge_viewMergedData"/>
- <element name="activeRecord" tokenid="ooxml:CT_MailMerge_activeRecord"/>
- <element name="checkErrors" tokenid="ooxml:CT_MailMerge_checkErrors"/>
- <element name="odso" tokenid="ooxml:CT_MailMerge_odso"/>
- </resource>
- <resource name="CT_TargetScreenSz" resource="Value">
- <attribute name="val" tokenid="ooxml:CT_TargetScreenSz_val" action="setValue"/>
- <action name="start" action="setDefaultStringValue"/>
- </resource>
- <resource name="CT_Compat" resource="Properties">
- <element name="useSingleBorderforContiguousCells" tokenid="ooxml:CT_Compat_useSingleBorderforContiguousCells"/>
- <element name="wpJustification" tokenid="ooxml:CT_Compat_wpJustification"/>
- <element name="noTabHangInd" tokenid="ooxml:CT_Compat_noTabHangInd"/>
- <element name="noLeading" tokenid="ooxml:CT_Compat_noLeading"/>
- <element name="spaceForUL" tokenid="ooxml:CT_Compat_spaceForUL"/>
- <element name="noColumnBalance" tokenid="ooxml:CT_Compat_noColumnBalance"/>
- <element name="balanceSingleByteDoubleByteWidth" tokenid="ooxml:CT_Compat_balanceSingleByteDoubleByteWidth"/>
- <element name="noExtraLineSpacing" tokenid="ooxml:CT_Compat_noExtraLineSpacing"/>
- <element name="doNotLeaveBackslashAlone" tokenid="ooxml:CT_Compat_doNotLeaveBackslashAlone"/>
- <element name="ulTrailSpace" tokenid="ooxml:CT_Compat_ulTrailSpace"/>
- <element name="doNotExpandShiftReturn" tokenid="ooxml:CT_Compat_doNotExpandShiftReturn"/>
- <element name="spacingInWholePoints" tokenid="ooxml:CT_Compat_spacingInWholePoints"/>
- <element name="lineWrapLikeWord6" tokenid="ooxml:CT_Compat_lineWrapLikeWord6"/>
- <element name="printBodyTextBeforeHeader" tokenid="ooxml:CT_Compat_printBodyTextBeforeHeader"/>
- <element name="printColBlack" tokenid="ooxml:CT_Compat_printColBlack"/>
- <element name="wpSpaceWidth" tokenid="ooxml:CT_Compat_wpSpaceWidth"/>
- <element name="showBreaksInFrames" tokenid="ooxml:CT_Compat_showBreaksInFrames"/>
- <element name="subFontBySize" tokenid="ooxml:CT_Compat_subFontBySize"/>
- <element name="suppressBottomSpacing" tokenid="ooxml:CT_Compat_suppressBottomSpacing"/>
- <element name="suppressTopSpacing" tokenid="ooxml:CT_Compat_suppressTopSpacing"/>
- <element name="suppressSpacingAtTopOfPage" tokenid="ooxml:CT_Compat_suppressSpacingAtTopOfPage"/>
- <element name="suppressTopSpacingWP" tokenid="ooxml:CT_Compat_suppressTopSpacingWP"/>
- <element name="suppressSpBfAfterPgBrk" tokenid="ooxml:CT_Compat_suppressSpBfAfterPgBrk"/>
- <element name="swapBordersFacingPages" tokenid="ooxml:CT_Compat_swapBordersFacingPages"/>
- <element name="convMailMergeEsc" tokenid="ooxml:CT_Compat_convMailMergeEsc"/>
- <element name="truncateFontHeightsLikeWP6" tokenid="ooxml:CT_Compat_truncateFontHeightsLikeWP6"/>
- <element name="mwSmallCaps" tokenid="ooxml:CT_Compat_mwSmallCaps"/>
- <element name="usePrinterMetrics" tokenid="ooxml:CT_Compat_usePrinterMetrics"/>
- <element name="doNotSuppressParagraphBorders" tokenid="ooxml:CT_Compat_doNotSuppressParagraphBorders"/>
- <element name="wrapTrailSpaces" tokenid="ooxml:CT_Compat_wrapTrailSpaces"/>
- <element name="footnoteLayoutLikeWW8" tokenid="ooxml:CT_Compat_footnoteLayoutLikeWW8"/>
- <element name="shapeLayoutLikeWW8" tokenid="ooxml:CT_Compat_shapeLayoutLikeWW8"/>
- <element name="alignTablesRowByRow" tokenid="ooxml:CT_Compat_alignTablesRowByRow"/>
- <element name="forgetLastTabAlignment" tokenid="ooxml:CT_Compat_forgetLastTabAlignment"/>
- <element name="adjustLineHeightInTable" tokenid="ooxml:CT_Compat_adjustLineHeightInTable"/>
- <element name="autoSpaceLikeWord95" tokenid="ooxml:CT_Compat_autoSpaceLikeWord95"/>
- <element name="noSpaceRaiseLower" tokenid="ooxml:CT_Compat_noSpaceRaiseLower"/>
- <element name="doNotUseHTMLParagraphAutoSpacing" tokenid="ooxml:CT_Compat_doNotUseHTMLParagraphAutoSpacing"/>
- <element name="layoutRawTableWidth" tokenid="ooxml:CT_Compat_layoutRawTableWidth"/>
- <element name="layoutTableRowsApart" tokenid="ooxml:CT_Compat_layoutTableRowsApart"/>
- <element name="useWord97LineBreakRules" tokenid="ooxml:CT_Compat_useWord97LineBreakRules"/>
- <element name="doNotBreakWrappedTables" tokenid="ooxml:CT_Compat_doNotBreakWrappedTables"/>
- <element name="doNotSnapToGridInCell" tokenid="ooxml:CT_Compat_doNotSnapToGridInCell"/>
- <element name="selectFldWithFirstOrLastChar" tokenid="ooxml:CT_Compat_selectFldWithFirstOrLastChar"/>
- <element name="applyBreakingRules" tokenid="ooxml:CT_Compat_applyBreakingRules"/>
- <element name="doNotWrapTextWithPunct" tokenid="ooxml:CT_Compat_doNotWrapTextWithPunct"/>
- <element name="doNotUseEastAsianBreakRules" tokenid="ooxml:CT_Compat_doNotUseEastAsianBreakRules"/>
- <element name="useWord2002TableStyleRules" tokenid="ooxml:CT_Compat_useWord2002TableStyleRules"/>
- <element name="growAutofit" tokenid="ooxml:CT_Compat_growAutofit"/>
- <element name="useFELayout" tokenid="ooxml:CT_Compat_useFELayout"/>
- <element name="useNormalStyleForList" tokenid="ooxml:CT_Compat_useNormalStyleForList"/>
- <element name="doNotUseIndentAsNumberingTabStop" tokenid="ooxml:CT_Compat_doNotUseIndentAsNumberingTabStop"/>
- <element name="useAltKinsokuLineBreakRules" tokenid="ooxml:CT_Compat_useAltKinsokuLineBreakRules"/>
- <element name="allowSpaceOfSameStyleInTable" tokenid="ooxml:CT_Compat_allowSpaceOfSameStyleInTable"/>
- <element name="doNotSuppressIndentation" tokenid="ooxml:CT_Compat_doNotSuppressIndentation"/>
- <element name="doNotAutofitConstrainedTables" tokenid="ooxml:CT_Compat_doNotAutofitConstrainedTables"/>
- <element name="autofitToFirstFixedWidthCell" tokenid="ooxml:CT_Compat_autofitToFirstFixedWidthCell"/>
- <element name="underlineTabInNumList" tokenid="ooxml:CT_Compat_underlineTabInNumList"/>
- <element name="displayHangulFixedWidth" tokenid="ooxml:CT_Compat_displayHangulFixedWidth"/>
- <element name="splitPgBreakAndParaMark" tokenid="ooxml:CT_Compat_splitPgBreakAndParaMark"/>
- <element name="doNotVertAlignCellWithSp" tokenid="ooxml:CT_Compat_doNotVertAlignCellWithSp"/>
- <element name="doNotBreakConstrainedForcedTable" tokenid="ooxml:CT_Compat_doNotBreakConstrainedForcedTable"/>
- <element name="doNotVertAlignInTxbx" tokenid="ooxml:CT_Compat_doNotVertAlignInTxbx"/>
- <element name="useAnsiKerningPairs" tokenid="ooxml:CT_Compat_useAnsiKerningPairs"/>
- <element name="cachedColBalance" tokenid="ooxml:CT_Compat_cachedColBalance"/>
- <element name="compatSetting" tokenid="ooxml:CT_Compat_compatSetting"/>
- </resource>
- <resource name="CT_CompatSetting" resource="Properties">
- <attribute name="name" tokenid="ooxml:CT_CompatSetting_name"/>
- <attribute name="uri" tokenid="ooxml:CT_CompatSetting_uri"/>
- <attribute name="val" tokenid="ooxml:CT_CompatSetting_val"/>
- </resource>
- <resource name="CT_DocVar" resource="Properties">
- <attribute name="name" tokenid="ooxml:CT_DocVar_name"/>
- <attribute name="val" tokenid="ooxml:CT_DocVar_val"/>
- </resource>
- <resource name="CT_DocRsids" resource="Properties">
- <element name="rsidRoot" tokenid="ooxml:CT_DocRsids_rsidRoot"/>
- <element name="rsid" tokenid="ooxml:CT_DocRsids_rsid"/>
- </resource>
- <resource name="CT_CharacterSpacing" resource="Value">
- <attribute name="val" tokenid="ooxml:CT_CharacterSpacing_val" action="setValue"/>
- <action name="start" action="setDefaultStringValue"/>
- </resource>
- <resource name="CT_SaveThroughXslt" resource="Properties">
- <attribute name="r:id" tokenid="ooxml:CT_SaveThroughXslt_r_id"/>
- <attribute name="solutionID" tokenid="ooxml:CT_SaveThroughXslt_solutionID"/>
- </resource>
- <resource name="CT_RPrDefault" resource="Properties">
- <element name="rPr" tokenid="ooxml:CT_RPrDefault_rPr"/>
- </resource>
- <resource name="CT_PPrDefault" resource="Properties">
- <element name="pPr" tokenid="ooxml:CT_PPrDefault_pPr"/>
- </resource>
- <resource name="CT_DocDefaults" resource="Properties">
- <element name="pPrDefault" tokenid="ooxml:CT_DocDefaults_pPrDefault"/>
- <element name="rPrDefault" tokenid="ooxml:CT_DocDefaults_rPrDefault"/>
- </resource>
- <resource name="CT_LatentStyles" resource="Properties">
- <attribute name="defLockedState" tokenid="ooxml:CT_LatentStyles_defLockedState"/>
- <attribute name="defUIPriority" tokenid="ooxml:CT_LatentStyles_defUIPriority"/>
- <attribute name="defSemiHidden" tokenid="ooxml:CT_LatentStyles_defSemiHidden"/>
- <attribute name="defUnhideWhenUsed" tokenid="ooxml:CT_LatentStyles_defUnhideWhenUsed"/>
- <attribute name="defQFormat" tokenid="ooxml:CT_LatentStyles_defQFormat"/>
- <attribute name="count" tokenid="ooxml:CT_LatentStyles_count"/>
- <element name="lsdException" tokenid="ooxml:CT_LatentStyles_lsdException"/>
- </resource>
- <resource name="CT_LsdException" resource="Properties">
- <attribute name="name" tokenid="ooxml:CT_LsdException_name"/>
- <attribute name="locked" tokenid="ooxml:CT_LsdException_locked"/>
- <attribute name="uiPriority" tokenid="ooxml:CT_LsdException_uiPriority"/>
- <attribute name="semiHidden" tokenid="ooxml:CT_LsdException_semiHidden"/>
- <attribute name="unhideWhenUsed" tokenid="ooxml:CT_LsdException_unhideWhenUsed"/>
- <attribute name="qFormat" tokenid="ooxml:CT_LsdException_qFormat"/>
- </resource>
- <resource name="ST_ColorSchemeIndex" resource="List">
- <value tokenid="ooxml:Value_doc_ST_ColorSchemeIndex_dark1">dark1</value>
- <value tokenid="ooxml:Value_doc_ST_ColorSchemeIndex_light1">light1</value>
- <value tokenid="ooxml:Value_doc_ST_ColorSchemeIndex_dark2">dark2</value>
- <value tokenid="ooxml:Value_doc_ST_ColorSchemeIndex_light2">light2</value>
- <value tokenid="ooxml:Value_doc_ST_ColorSchemeIndex_accent1">accent1</value>
- <value tokenid="ooxml:Value_doc_ST_ColorSchemeIndex_accent2">accent2</value>
- <value tokenid="ooxml:Value_doc_ST_ColorSchemeIndex_accent3">accent3</value>
- <value tokenid="ooxml:Value_doc_ST_ColorSchemeIndex_accent4">accent4</value>
- <value tokenid="ooxml:Value_doc_ST_ColorSchemeIndex_accent5">accent5</value>
- <value tokenid="ooxml:Value_doc_ST_ColorSchemeIndex_accent6">accent6</value>
- <value tokenid="ooxml:Value_doc_ST_ColorSchemeIndex_hyperlink">hyperlink</value>
- <value tokenid="ooxml:Value_doc_ST_ColorSchemeIndex_followedHyperlink">followedHyperlink</value>
- </resource>
- <resource name="CT_ReadingModeInkLockDown" resource="Properties">
- <attribute name="actualPg" tokenid="ooxml:CT_ReadingModeInkLockDown_actualPg"/>
- <attribute name="w" tokenid="ooxml:CT_ReadingModeInkLockDown_w"/>
- <attribute name="h" tokenid="ooxml:CT_ReadingModeInkLockDown_h"/>
- <attribute name="fontSz" tokenid="ooxml:CT_ReadingModeInkLockDown_fontSz"/>
- </resource>
- <resource name="CT_WriteProtection" resource="Properties">
- <attribute name="recommended" tokenid="ooxml:CT_WriteProtection_recommended"/>
- </resource>
- <resource name="CT_Settings" resource="PropertyTable" tokenid="ooxml:SETTINGS">
- <element name="writeProtection" tokenid="ooxml:CT_Settings_writeProtection"/>
- <element name="view" tokenid="ooxml:CT_Settings_view"/>
- <element name="zoom" tokenid="ooxml:CT_Settings_zoom"/>
- <element name="removePersonalInformation" tokenid="ooxml:CT_Settings_removePersonalInformation"/>
- <element name="removeDateAndTime" tokenid="ooxml:CT_Settings_removeDateAndTime"/>
- <element name="doNotDisplayPageBoundaries" tokenid="ooxml:CT_Settings_doNotDisplayPageBoundaries"/>
- <element name="displayBackgroundShape" tokenid="ooxml:CT_Settings_displayBackgroundShape"/>
- <element name="printPostScriptOverText" tokenid="ooxml:CT_Settings_printPostScriptOverText"/>
- <element name="printFractionalCharacterWidth" tokenid="ooxml:CT_Settings_printFractionalCharacterWidth"/>
- <element name="printFormsData" tokenid="ooxml:CT_Settings_printFormsData"/>
- <element name="embedTrueTypeFonts" tokenid="ooxml:CT_Settings_embedTrueTypeFonts"/>
- <element name="embedSystemFonts" tokenid="ooxml:CT_Settings_embedSystemFonts"/>
- <element name="saveSubsetFonts" tokenid="ooxml:CT_Settings_saveSubsetFonts"/>
- <element name="saveFormsData" tokenid="ooxml:CT_Settings_saveFormsData"/>
- <element name="mirrorMargins" tokenid="ooxml:CT_Settings_mirrorMargins"/>
- <element name="alignBordersAndEdges" tokenid="ooxml:CT_Settings_alignBordersAndEdges"/>
- <element name="bordersDoNotSurroundHeader" tokenid="ooxml:CT_Settings_bordersDoNotSurroundHeader"/>
- <element name="bordersDoNotSurroundFooter" tokenid="ooxml:CT_Settings_bordersDoNotSurroundFooter"/>
- <element name="gutterAtTop" tokenid="ooxml:CT_Settings_gutterAtTop"/>
- <element name="hideSpellingErrors" tokenid="ooxml:CT_Settings_hideSpellingErrors"/>
- <element name="hideGrammaticalErrors" tokenid="ooxml:CT_Settings_hideGrammaticalErrors"/>
- <element name="activeWritingStyle" tokenid="ooxml:CT_Settings_activeWritingStyle"/>
- <element name="proofState" tokenid="ooxml:CT_Settings_proofState"/>
- <element name="formsDesign" tokenid="ooxml:CT_Settings_formsDesign"/>
- <element name="attachedTemplate" tokenid="ooxml:CT_Settings_attachedTemplate"/>
- <element name="linkStyles" tokenid="ooxml:CT_Settings_linkStyles"/>
- <element name="stylePaneFormatFilter" tokenid="ooxml:CT_Settings_stylePaneFormatFilter"/>
- <element name="stylePaneSortMethod" tokenid="ooxml:CT_Settings_stylePaneSortMethod"/>
- <element name="documentType" tokenid="ooxml:CT_Settings_documentType"/>
- <element name="mailMerge" tokenid="ooxml:CT_Settings_mailMerge"/>
- <element name="revisionView" tokenid="ooxml:CT_Settings_revisionView"/>
- <element name="trackRevisions" tokenid="ooxml:CT_Settings_trackRevisions"/>
- <element name="doNotTrackMoves" tokenid="ooxml:CT_Settings_doNotTrackMoves"/>
- <element name="doNotTrackFormatting" tokenid="ooxml:CT_Settings_doNotTrackFormatting"/>
- <element name="documentProtection" tokenid="ooxml:CT_Settings_documentProtection"/>
- <element name="autoFormatOverride" tokenid="ooxml:CT_Settings_autoFormatOverride"/>
- <element name="styleLockTheme" tokenid="ooxml:CT_Settings_styleLockTheme"/>
- <element name="styleLockQFSet" tokenid="ooxml:CT_Settings_styleLockQFSet"/>
- <element name="defaultTabStop" tokenid="ooxml:CT_Settings_defaultTabStop"/>
- <element name="autoHyphenation" tokenid="ooxml:CT_Settings_autoHyphenation"/>
- <element name="consecutiveHyphenLimit" tokenid="ooxml:CT_Settings_consecutiveHyphenLimit"/>
- <element name="hyphenationZone" tokenid="ooxml:CT_Settings_hyphenationZone"/>
- <element name="doNotHyphenateCaps" tokenid="ooxml:CT_Settings_doNotHyphenateCaps"/>
- <element name="showEnvelope" tokenid="ooxml:CT_Settings_showEnvelope"/>
- <element name="summaryLength" tokenid="ooxml:CT_Settings_summaryLength"/>
- <element name="clickAndTypeStyle" tokenid="ooxml:CT_Settings_clickAndTypeStyle"/>
- <element name="defaultTableStyle" tokenid="ooxml:CT_Settings_defaultTableStyle"/>
- <element name="evenAndOddHeaders" tokenid="ooxml:CT_Settings_evenAndOddHeaders"/>
- <element name="bookFoldRevPrinting" tokenid="ooxml:CT_Settings_bookFoldRevPrinting"/>
- <element name="bookFoldPrinting" tokenid="ooxml:CT_Settings_bookFoldPrinting"/>
- <element name="bookFoldPrintingSheets" tokenid="ooxml:CT_Settings_bookFoldPrintingSheets"/>
- <element name="drawingGridHorizontalSpacing" tokenid="ooxml:CT_Settings_drawingGridHorizontalSpacing"/>
- <element name="drawingGridVerticalSpacing" tokenid="ooxml:CT_Settings_drawingGridVerticalSpacing"/>
- <element name="displayHorizontalDrawingGridEvery" tokenid="ooxml:CT_Settings_displayHorizontalDrawingGridEvery"/>
- <element name="displayVerticalDrawingGridEvery" tokenid="ooxml:CT_Settings_displayVerticalDrawingGridEvery"/>
- <element name="doNotUseMarginsForDrawingGridOrigin" tokenid="ooxml:CT_Settings_doNotUseMarginsForDrawingGridOrigin"/>
- <element name="drawingGridHorizontalOrigin" tokenid="ooxml:CT_Settings_drawingGridHorizontalOrigin"/>
- <element name="drawingGridVerticalOrigin" tokenid="ooxml:CT_Settings_drawingGridVerticalOrigin"/>
- <element name="doNotShadeFormData" tokenid="ooxml:CT_Settings_doNotShadeFormData"/>
- <element name="noPunctuationKerning" tokenid="ooxml:CT_Settings_noPunctuationKerning"/>
- <element name="characterSpacingControl" tokenid="ooxml:CT_Settings_characterSpacingControl"/>
- <element name="printTwoOnOne" tokenid="ooxml:CT_Settings_printTwoOnOne"/>
- <element name="strictFirstAndLastChars" tokenid="ooxml:CT_Settings_strictFirstAndLastChars"/>
- <element name="noLineBreaksAfter" tokenid="ooxml:CT_Settings_noLineBreaksAfter"/>
- <element name="noLineBreaksBefore" tokenid="ooxml:CT_Settings_noLineBreaksBefore"/>
- <element name="savePreviewPicture" tokenid="ooxml:CT_Settings_savePreviewPicture"/>
- <element name="doNotValidateAgainstSchema" tokenid="ooxml:CT_Settings_doNotValidateAgainstSchema"/>
- <element name="saveInvalidXml" tokenid="ooxml:CT_Settings_saveInvalidXml"/>
- <element name="ignoreMixedContent" tokenid="ooxml:CT_Settings_ignoreMixedContent"/>
- <element name="alwaysShowPlaceholderText" tokenid="ooxml:CT_Settings_alwaysShowPlaceholderText"/>
- <element name="doNotDemarcateInvalidXml" tokenid="ooxml:CT_Settings_doNotDemarcateInvalidXml"/>
- <element name="saveXmlDataOnly" tokenid="ooxml:CT_Settings_saveXmlDataOnly"/>
- <element name="useXSLTWhenSaving" tokenid="ooxml:CT_Settings_useXSLTWhenSaving"/>
- <element name="saveThroughXslt" tokenid="ooxml:CT_Settings_saveThroughXslt"/>
- <element name="showXMLTags" tokenid="ooxml:CT_Settings_showXMLTags"/>
- <element name="alwaysMergeEmptyNamespace" tokenid="ooxml:CT_Settings_alwaysMergeEmptyNamespace"/>
- <element name="updateFields" tokenid="ooxml:CT_Settings_updateFields"/>
- <element name="hdrShapeDefaults" tokenid="ooxml:CT_Settings_hdrShapeDefaults"/>
- <element name="footnotePr" tokenid="ooxml:CT_Settings_footnotePr"/>
- <element name="endnotePr" tokenid="ooxml:CT_Settings_endnotePr"/>
- <element name="compat" tokenid="ooxml:CT_Settings_compat"/>
- <element name="docVars" tokenid="ooxml:CT_Settings_docVars"/>
- <element name="rsids" tokenid="ooxml:CT_Settings_rsids"/>
- <element name="uiCompat97To2003" tokenid="ooxml:CT_Settings_uiCompat97To2003"/>
- <element name="attachedSchema" tokenid="ooxml:CT_Settings_attachedSchema"/>
- <element name="themeFontLang" tokenid="ooxml:CT_Settings_themeFontLang"/>
- <element name="clrSchemeMapping" tokenid="ooxml:CT_Settings_clrSchemeMapping"/>
- <element name="doNotIncludeSubdocsInStats" tokenid="ooxml:CT_Settings_doNotIncludeSubdocsInStats"/>
- <element name="doNotAutoCompressPictures" tokenid="ooxml:CT_Settings_doNotAutoCompressPictures"/>
- <element name="forceUpgrade" tokenid="ooxml:CT_Settings_forceUpgrade"/>
- <element name="captions" tokenid="ooxml:CT_Settings_captions"/>
- <element name="readModeInkLockDown" tokenid="ooxml:CT_Settings_readModeInkLockDown"/>
- <element name="smartTagType" tokenid="ooxml:CT_Settings_smartTagType"/>
- <element name="shapeDefaults" tokenid="ooxml:CT_Settings_shapeDefaults"/>
- <element name="doNotEmbedSmartTags" tokenid="ooxml:CT_Settings_doNotEmbedSmartTags"/>
- <element name="decimalSymbol" tokenid="ooxml:CT_Settings_decimalSymbol"/>
- <element name="listSeparator" tokenid="ooxml:CT_Settings_listSeparator"/>
- </resource>
- <resource name="CT_FrameScrollbar" resource="Value">
- <attribute name="val" tokenid="ooxml:CT_FrameScrollbar_val" action="setValue"/>
- <action name="start" action="setDefaultStringValue"/>
- </resource>
- <resource name="CT_FrameLayout" resource="Value">
- <attribute name="val" tokenid="ooxml:CT_FrameLayout_val" action="setValue"/>
- <action name="start" action="setDefaultStringValue"/>
- </resource>
- <resource name="CT_LevelSuffix" resource="Value">
- <attribute name="val" tokenid="ooxml:CT_LevelSuffix_val" action="setValue"/>
- <action name="start" action="setDefaultStringValue"/>
- </resource>
- <resource name="CT_LevelText" resource="Properties">
- <attribute name="val" tokenid="ooxml:CT_LevelText_val"/>
- <attribute name="null" tokenid="ooxml:CT_LevelText_null"/>
- </resource>
- <resource name="CT_LvlLegacy" resource="Properties">
- <attribute name="legacy" tokenid="ooxml:CT_LvlLegacy_legacy"/>
- <attribute name="legacySpace" tokenid="ooxml:CT_LvlLegacy_legacySpace"/>
- <attribute name="legacyIndent" tokenid="ooxml:CT_LvlLegacy_legacyIndent"/>
- </resource>
- <resource name="CT_Lvl" resource="Properties">
- <element name="start" tokenid="ooxml:CT_Lvl_start"/>
- <element name="numFmt" tokenid="ooxml:CT_Lvl_numFmt"/>
- <element name="lvlRestart" tokenid="ooxml:CT_Lvl_lvlRestart"/>
- <element name="pStyle" tokenid="ooxml:CT_Lvl_pStyle"/>
- <element name="isLgl" tokenid="ooxml:CT_Lvl_isLgl"/>
- <element name="suff" tokenid="ooxml:CT_Lvl_suff"/>
- <element name="lvlText" tokenid="ooxml:CT_Lvl_lvlText"/>
- <element name="lvlPicBulletId" tokenid="ooxml:CT_Lvl_lvlPicBulletId"/>
- <element name="legacy" tokenid="ooxml:CT_Lvl_legacy"/>
- <element name="lvlJc" tokenid="ooxml:CT_Lvl_lvlJc"/>
- <element name="pPr" tokenid="ooxml:CT_Lvl_pPr"/>
- <element name="rPr" tokenid="ooxml:CT_Lvl_rPr"/>
- <attribute name="ilvl" tokenid="ooxml:CT_Lvl_ilvl"/>
- <attribute name="tplc" tokenid="ooxml:CT_Lvl_tplc"/>
- <attribute name="tentative" tokenid="ooxml:CT_Lvl_tentative"/>
- </resource>
- <resource name="ST_MultiLevelType" resource="List">
- <value tokenid="ooxml:Value_ST_MultiLevelType_singleLevel">singleLevel</value>
- <value tokenid="ooxml:Value_ST_MultiLevelType_multilevel">multilevel</value>
- <value tokenid="ooxml:Value_ST_MultiLevelType_hybridMultilevel">hybridMultilevel</value>
- </resource>
- <resource name="CT_MultiLevelType" resource="Value">
- <attribute name="val" tokenid="ooxml:CT_MultiLevelType_val" action="setValue"/>
- </resource>
- <resource name="CT_NumPicBullet" resource="Properties">
- <element name="pict" tokenid="ooxml:CT_NumPicBullet_pict"/>
- <attribute name="numPicBulletId" tokenid="ooxml:CT_NumPicBullet_numPicBulletId"/>
- </resource>
- <resource name="CT_AbstractNum" resource="Properties">
- <element name="nsid" tokenid="ooxml:CT_AbstractNum_nsid"/>
- <element name="multiLevelType" tokenid="ooxml:CT_AbstractNum_multiLevelType"/>
- <element name="tmpl" tokenid="ooxml:CT_AbstractNum_tmpl"/>
- <element name="name" tokenid="ooxml:CT_AbstractNum_name"/>
- <element name="styleLink" tokenid="ooxml:CT_AbstractNum_styleLink"/>
- <element name="numStyleLink" tokenid="ooxml:CT_AbstractNum_numStyleLink"/>
- <element name="lvl" tokenid="ooxml:CT_AbstractNum_lvl"/>
- <attribute name="abstractNumId" tokenid="ooxml:CT_AbstractNum_abstractNumId"/>
- </resource>
- <resource name="CT_NumLvl" resource="Properties">
- <element name="startOverride" tokenid="ooxml:CT_NumLvl_startOverride"/>
- <element name="lvl" tokenid="ooxml:CT_NumLvl_lvl"/>
- <attribute name="ilvl" tokenid="ooxml:CT_NumLvl_ilvl"/>
- </resource>
- <resource name="CT_Num" resource="Properties">
- <element name="abstractNumId" tokenid="ooxml:CT_Num_abstractNumId"/>
- <element name="lvlOverride" tokenid="ooxml:CT_Num_lvlOverride"/>
- <attribute name="numId" tokenid="ooxml:CT_Num_numId"/>
- </resource>
- <resource name="CT_Numbering" resource="PropertyTable" tokenid="ooxml:NUMBERING">
- <element name="numPicBullet" tokenid="ooxml:CT_Numbering_numPicBullet"/>
- <element name="abstractNum" tokenid="ooxml:CT_Numbering_abstractNum"/>
- <element name="num" tokenid="ooxml:CT_Numbering_num"/>
- <element name="numIdMacAtCleanup" tokenid="ooxml:CT_Numbering_numIdMacAtCleanup"/>
- </resource>
- <resource name="ST_TblStyleOverrideType" resource="List">
- <value tokenid="ooxml:Value_ST_TblStyleOverrideType_wholeTable">wholeTable</value>
- <value tokenid="ooxml:Value_ST_TblStyleOverrideType_firstRow">firstRow</value>
- <value tokenid="ooxml:Value_ST_TblStyleOverrideType_lastRow">lastRow</value>
- <value tokenid="ooxml:Value_ST_TblStyleOverrideType_firstCol">firstCol</value>
- <value tokenid="ooxml:Value_ST_TblStyleOverrideType_lastCol">lastCol</value>
- <value tokenid="ooxml:Value_ST_TblStyleOverrideType_band1Vert">band1Vert</value>
- <value tokenid="ooxml:Value_ST_TblStyleOverrideType_band2Vert">band2Vert</value>
- <value tokenid="ooxml:Value_ST_TblStyleOverrideType_band1Horz">band1Horz</value>
- <value tokenid="ooxml:Value_ST_TblStyleOverrideType_band2Horz">band2Horz</value>
- <value tokenid="ooxml:Value_ST_TblStyleOverrideType_neCell">neCell</value>
- <value tokenid="ooxml:Value_ST_TblStyleOverrideType_nwCell">nwCell</value>
- <value tokenid="ooxml:Value_ST_TblStyleOverrideType_seCell">seCell</value>
- <value tokenid="ooxml:Value_ST_TblStyleOverrideType_swCell">swCell</value>
- </resource>
- <resource name="CT_Style_tblStylePr" resource="Properties">
- <element name="pPr" tokenid="ooxml:CT_PPrBase"/>
- <element name="rPr" tokenid="ooxml:EG_RPrBase"/>
- <element name="tblPr" tokenid="ooxml:CT_TblPrBase"/>
- <element name="trPr" tokenid="ooxml:CT_TrPrBase"/>
- <element name="tcPr" tokenid="ooxml:CT_TcPrBase"/>
- <attribute name="type" tokenid="ooxml:CT_TblStyleOverrideType"/>
- </resource>
- <resource name="ST_StyleType" resource="List">
- <value tokenid="ooxml:Value_ST_StyleType_paragraph">paragraph</value>
- <value tokenid="ooxml:Value_ST_StyleType_character">character</value>
- <value tokenid="ooxml:Value_ST_StyleType_table">table</value>
- <value tokenid="ooxml:Value_ST_StyleType_numbering">numbering</value>
- </resource>
- <resource name="CT_Style" resource="Properties">
- <element name="name" tokenid="ooxml:CT_Style_name"/>
- <element name="aliases" tokenid="ooxml:CT_Style_aliases"/>
- <element name="basedOn" tokenid="ooxml:CT_Style_basedOn"/>
- <element name="next" tokenid="ooxml:CT_Style_next"/>
- <element name="link" tokenid="ooxml:CT_Style_link"/>
- <element name="autoRedefine" tokenid="ooxml:CT_Style_autoRedefine"/>
- <element name="hidden" tokenid="ooxml:CT_Style_hidden"/>
- <element name="uiPriority" tokenid="ooxml:CT_Style_uiPriority"/>
- <element name="semiHidden" tokenid="ooxml:CT_Style_semiHidden"/>
- <element name="unhideWhenUsed" tokenid="ooxml:CT_Style_unhideWhenUsed"/>
- <element name="qFormat" tokenid="ooxml:CT_Style_qFormat"/>
- <element name="locked" tokenid="ooxml:CT_Style_locked"/>
- <element name="personal" tokenid="ooxml:CT_Style_personal"/>
- <element name="personalCompose" tokenid="ooxml:CT_Style_personalCompose"/>
- <element name="personalReply" tokenid="ooxml:CT_Style_personalReply"/>
- <element name="rsid" tokenid="ooxml:CT_Style_rsid"/>
- <element name="pPr" tokenid="ooxml:CT_Style_pPr"/>
- <element name="rPr" tokenid="ooxml:CT_Style_rPr"/>
- <element name="tblPr" tokenid="ooxml:CT_Style_tblPr"/>
- <element name="trPr" tokenid="ooxml:CT_Style_trPr"/>
- <element name="tcPr" tokenid="ooxml:CT_Style_tcPr"/>
- <element name="tblStylePr" tokenid="ooxml:CT_Style_tblStylePr"/>
- <attribute name="type" tokenid="ooxml:CT_Style_type"/>
- <attribute name="styleId" tokenid="ooxml:CT_Style_styleId"/>
- <attribute name="default" tokenid="ooxml:CT_Style_default"/>
- <attribute name="customStyle" tokenid="ooxml:CT_Style_customStyle"/>
- </resource>
- <resource name="CT_Styles" resource="Table" tokenid="ooxml:STYLESHEET"/>
- <resource name="ST_Panose" resource="Hex"/>
- <resource name="CT_Panose" resource="Value">
- <attribute name="val" tokenid="ooxml:CT_Panose_val" action="setValue"/>
- <action name="start" action="setDefaultHexValue"/>
- </resource>
- <resource name="CT_Charset" resource="Properties">
- <attribute name="val" tokenid="ooxml:CT_Charset_val"/>
- <attribute name="characterSet" tokenid="ooxml:CT_Charset_characterSet"/>
- </resource>
- <resource name="ST_FontFamily" resource="List">
- <value tokenid="ooxml:Value_ST_FontFamily_decorative">decorative</value>
- <value tokenid="ooxml:Value_ST_FontFamily_modern">modern</value>
- <value tokenid="ooxml:Value_ST_FontFamily_roman">roman</value>
- <value tokenid="ooxml:Value_ST_FontFamily_script">script</value>
- <value tokenid="ooxml:Value_ST_FontFamily_swiss">swiss</value>
- <value tokenid="ooxml:Value_ST_FontFamily_auto">auto</value>
- </resource>
- <resource name="CT_FontFamily" resource="Value">
- <attribute name="val" tokenid="ooxml:CT_FontFamily_val" action="setValue"/>
- </resource>
- <resource name="ST_Pitch" resource="List">
- <value tokenid="ooxml:Value_ST_Pitch_fixed">fixed</value>
- <value tokenid="ooxml:Value_ST_Pitch_variable">variable</value>
- <value tokenid="ooxml:Value_ST_Pitch_default">default</value>
- </resource>
- <resource name="CT_Pitch" resource="Properties">
- <attribute name="val" tokenid="ooxml:CT_Pitch_val"/>
- </resource>
- <resource name="CT_FontSig" resource="Properties">
- <attribute name="usb0" tokenid="ooxml:CT_FontSig_usb0"/>
- <attribute name="usb1" tokenid="ooxml:CT_FontSig_usb1"/>
- <attribute name="usb2" tokenid="ooxml:CT_FontSig_usb2"/>
- <attribute name="usb3" tokenid="ooxml:CT_FontSig_usb3"/>
- <attribute name="csb0" tokenid="ooxml:CT_FontSig_csb0"/>
- <attribute name="csb1" tokenid="ooxml:CT_FontSig_csb1"/>
- </resource>
- <resource name="CT_FontRel" resource="Properties">
- <attribute name="fontKey" tokenid="ooxml:CT_FontRel_fontKey"/>
- <attribute name="subsetted" tokenid="ooxml:CT_FontRel_subsetted"/>
- <action name="start" action="handleFontRel"/>
- </resource>
- <resource name="CT_Font" resource="Properties">
- <element name="altName" tokenid="ooxml:CT_Font_altName"/>
- <element name="panose1" tokenid="ooxml:CT_Font_panose1"/>
- <element name="charset" tokenid="ooxml:CT_Font_charset"/>
- <element name="characterSet" tokenid="ooxml:CT_Font_characterSet"/>
- <element name="family" tokenid="ooxml:CT_Font_family"/>
- <element name="notTrueType" tokenid="ooxml:CT_Font_notTrueType"/>
- <element name="pitch" tokenid="ooxml:CT_Font_pitch"/>
- <element name="sig" tokenid="ooxml:CT_Font_sig"/>
- <element name="embedRegular" tokenid="ooxml:CT_Font_embedRegular"/>
- <element name="embedBold" tokenid="ooxml:CT_Font_embedBold"/>
- <element name="embedItalic" tokenid="ooxml:CT_Font_embedItalic"/>
- <element name="embedBoldItalic" tokenid="ooxml:CT_Font_embedBoldItalic"/>
- <attribute name="name" tokenid="ooxml:CT_Font_name"/>
- </resource>
- <resource name="CT_FontsList" resource="Table" tokenid="ooxml:FONTTABLE"/>
- <resource name="EG_BlockLevelElts" resource="Properties">
- <attribute name="name" tokenid="ooxml:EG_BlockLevelElts_altChunk"/>
- </resource>
- <resource name="EG_RunLevelElts" resource="Stream">
- <element name="proofErr" tokenid="ooxml:EG_RunLevelElts_proofErr"/>
- <element name="permStart" tokenid="ooxml:EG_RunLevelElts_permStart"/>
- <element name="permEnd" tokenid="ooxml:EG_RunLevelElts_permEnd"/>
- <element name="ins" tokenid="ooxml:EG_RunLevelElts_ins"/>
- <element name="del" tokenid="ooxml:EG_RunLevelElts_del"/>
- <element name="moveFrom" tokenid="ooxml:EG_RunLevelElts_moveFrom"/>
- <element name="moveTo" tokenid="ooxml:EG_RunLevelElts_moveTo"/>
- </resource>
- <resource name="CT_Body" resource="Stream">
- <action name="start" action="startSectionGroup"/>
- <!--
- <action name="start" action="footnoteSeparator"/>
- <action name="start" action="footnoteCont"/>
- <action name="start" action="endnoteSeparator"/>
- <action name="start" action="endnoteCont"/>
- -->
- <action name="end" action="endCharacterGroup"/>
- <action name="end" action="endParagraphGroup"/>
- <action name="end" action="setLastSectionGroup"/>
- <action name="end" action="endSectionGroup"/>
- </resource>
- <resource name="CT_ShapeDefaults" resource="Properties">
- <element name="v:fill" tokenid="ooxml:CT_ShapeDefaults_v_fill"/>
- <element name="v:stroke" tokenid="ooxml:CT_ShapeDefaults_v_stroke"/>
- <element name="v:textbox" tokenid="ooxml:CT_ShapeDefaults_v_textbox"/>
- <element name="v:shadow" tokenid="ooxml:CT_ShapeDefaults_v_shadow"/>
- <element name="colormru" tokenid="ooxml:CT_ShapeDefaults_colormru"/>
- <element name="colormenu" tokenid="ooxml:CT_ShapeDefaults_colormenu"/>
- <attribute name="spidmax" tokenid="ooxml:CT_ShapeDefaults_spidmax"/>
- <attribute name="style" tokenid="ooxml:CT_ShapeDefaults_style"/>
- <attribute name="fill" tokenid="ooxml:CT_ShapeDefaults_fill"/>
- <attribute name="fillcolor" tokenid="ooxml:CT_ShapeDefaults_fillcolor"/>
- <attribute name="stroke" tokenid="ooxml:CT_ShapeDefaults_stroke"/>
- <attribute name="strokecolor" tokenid="ooxml:CT_ShapeDefaults_strokecolor"/>
- <attribute name="allowincell" tokenid="ooxml:CT_ShapeDefaults_allowincell"/>
- </resource>
- <resource name="CT_Comments" resource="Stream">
- <action name="start" action="startSectionGroup"/>
- <action name="end" action="endSectionGroup"/>
- </resource>
- <resource name="CT_Footnotes" resource="Stream"/>
- <resource name="footnotes" resource="Stream"/>
- <resource name="CT_Endnotes" resource="Stream"/>
- <resource name="endnotes" resource="Stream"/>
- <resource name="CT_SmartTagType" resource="Properties">
- <attribute name="namespaceuri" tokenid="ooxml:CT_SmartTagType_namespaceuri"/>
- <attribute name="name" tokenid="ooxml:CT_SmartTagType_name"/>
- <attribute name="url" tokenid="ooxml:CT_SmartTagType_url"/>
- </resource>
- <resource name="ST_ThemeColor" resource="List">
- <value tokenid="ooxml:Value_St_ThemeColor_dark1">dark1</value>
- <value tokenid="ooxml:Value_St_ThemeColor_light1">light1</value>
- <value tokenid="ooxml:Value_St_ThemeColor_dark2">dark2</value>
- <value tokenid="ooxml:Value_St_ThemeColor_light2">light2</value>
- <value tokenid="ooxml:Value_St_ThemeColor_accent1">accent1</value>
- <value tokenid="ooxml:Value_St_ThemeColor_accent2">accent2</value>
- <value tokenid="ooxml:Value_St_ThemeColor_accent3">accent3</value>
- <value tokenid="ooxml:Value_St_ThemeColor_accent4">accent4</value>
- <value tokenid="ooxml:Value_St_ThemeColor_accent5">accent5</value>
- <value tokenid="ooxml:Value_St_ThemeColor_accent6">accent6</value>
- <value tokenid="ooxml:Value_St_ThemeColor_hyperlink">hyperlink</value>
- <value tokenid="ooxml:Value_St_ThemeColor_followedHyperlink">followedHyperlink</value>
- <value tokenid="ooxml:Value_St_ThemeColor_none">none</value>
- <value tokenid="ooxml:Value_St_ThemeColor_background1">background1</value>
- <value tokenid="ooxml:Value_St_ThemeColor_text1">text1</value>
- <value tokenid="ooxml:Value_St_ThemeColor_background2">background2</value>
- <value tokenid="ooxml:Value_St_ThemeColor_text2">text2</value>
- </resource>
- <resource name="CT_DocPartBehavior" resource="Value">
- <attribute name="val" tokenid="ooxml:CT_DocPartBehavior_val" action="setValue"/>
- <action name="start" action="setDefaultStringValue"/>
- </resource>
- <resource name="CT_DocPartType" resource="Value">
- <attribute name="val" tokenid="ooxml:CT_DocPartType_val" action="setValue"/>
- <action name="start" action="setDefaultStringValue"/>
- </resource>
- <resource name="CT_DocPartGallery" resource="Properties">
- <attribute name="val" tokenid="ooxml:CT_DocPartGallery_val"/>
- </resource>
- <resource name="CT_DocPartName" resource="Properties">
- <attribute name="val" tokenid="ooxml:CT_DocPartName_val"/>
- <attribute name="decorated" tokenid="ooxml:CT_DocPartName_decorated"/>
- </resource>
- <resource name="settings" resource="Stream">
- <element name="settings" tokenid="ooxml:settings_settings"/>
- </resource>
- <resource name="fonts" resource="Stream">
- <element name="fonts" tokenid="ooxml:FONTTABLE"/>
- </resource>
- <resource name="numbering" resource="Stream">
- <element name="numbering" tokenid="ooxml:NUMBERING"/>
- </resource>
- <resource name="styles" resource="Stream">
- <element name="styles" tokenid="ooxml:STYLESHEET"/>
- </resource>
- <resource name="ST_CaptionPos" resource="List">
- <value tokenid="ooxml:Value_doc_ST_CaptionPos_above">above</value>
- <value tokenid="ooxml:Value_doc_ST_CaptionPos_below">below</value>
- <value tokenid="ooxml:Value_doc_ST_CaptionPos_left">left</value>
- <value tokenid="ooxml:Value_doc_ST_CaptionPos_right">right</value>
- </resource>
- <resource name="CT_Caption" resource="Properties">
- <attribute name="name" tokenid="ooxml:CT_Caption_name"/>
- <attribute name="pos" tokenid="ooxml:CT_Caption_pos"/>
- <attribute name="chapNum" tokenid="ooxml:CT_Caption_chapNum"/>
- <attribute name="heading" tokenid="ooxml:CT_Caption_heading"/>
- <attribute name="noLabel" tokenid="ooxml:CT_Caption_noLabel"/>
- <attribute name="numFmt" tokenid="ooxml:CT_Caption_numFmt"/>
- <attribute name="sep" tokenid="ooxml:CT_Caption_sep"/>
- </resource>
- <resource name="CT_AutoCaption" resource="Properties">
- <attribute name="name" tokenid="ooxml:CT_AutoCaption_name"/>
- <attribute name="caption" tokenid="ooxml:CT_AutoCaption_caption"/>
- </resource>
- <resource name="CT_AutoCaptions" resource="Properties">
- <element name="autoCaption" tokenid="ooxml:CT_AutoCaptions_autoCaption"/>
- </resource>
- <resource name="CT_Captions" resource="Properties">
- <element name="caption" tokenid="ooxml:CT_Captions_caption"/>
- <element name="autoCaptions" tokenid="ooxml:CT_Captions_autoCaptions"/>
- </resource>
- <resource name="CT_DocumentBase" resource="Properties">
- <element name="background" tokenid="ooxml:CT_DocumentBase_background"/>
- </resource>
- <resource name="CT_Document" resource="Stream"/>
- <resource name="CT_GlossaryDocument" resource="Stream"/>
- <resource name="CT_DocParts" resource="Stream"/>
- <resource name="CT_DocPart" resource="Stream">
- <action name="start" action="startGlossaryEntry"/>
- <action name="end" action="endGlossaryEntry"/>
- </resource>
- <resource name="CT_DocPartPr" resource="Properties">
- <action name="start" action="startSectionGroup"/>
- <element name="name" tokenid="ooxml:CT_DocPartPr_name"/>
- <element name="category" tokenid="ooxml:CT_DocPartPr_category"/>
- </resource>
- <resource name="CT_DocPartCategory" resource="Properties">
- <element name="gallery" tokenid="ooxml:CT_DocPartCategory_gallery"/>
- </resource>
- <resource name="document" resource="Stream"/>
- <resource name="glossaryDocument" resource="Stream"/>
- <resource name="CT_TxbxContent" resource="Stream">
- <action name="start" action="startTxbxContent"/>
- <action name="end" action="endTxbxContent"/>
- </resource>
- <resource name="CT_OMath" resource="Math"/>
- <resource name="CT_OMathPara" resource="Stream"/>
- <resource name="CT_OMathParaPr" resource="Properties"/>
- <resource name="CT_OMathJc" resource="Value"/>
- </namespace>
-</model>
-<!-- vim: shiftwidth=2 softtabstop=2 expandtab:
--->
diff --git a/writerfilter/source/ooxml/modelpreprocess.py b/writerfilter/source/ooxml/modelpreprocess.py
deleted file mode 100644
index d6ef4c175430..000000000000
--- a/writerfilter/source/ooxml/modelpreprocess.py
+++ /dev/null
@@ -1,90 +0,0 @@
-#!/usr/bin/env python
-#
-# This file is part of the LibreOffice project.
-#
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-#
-
-from xml.dom import minidom
-import sys
-
-
-def prefixForGrammar(namespace):
- ns = namespace.getElementsByTagName("grammar")[0].getAttribute("ns")
- return ooxUrlAliases[ns]
-
-
-def parseNamespaceAliases(node):
- ret = {}
- for k, v in list(node.attributes.items()):
- if k.startswith("xmlns:"):
- ret[k.replace('xmlns:', '')] = v
- return ret
-
-
-def parseNamespaces(fro):
- sock = open(fro)
- for i in sock.readlines():
- line = i.strip()
- alias, url = line.split(' ')[1:]
- ooxUrlAliases[url] = alias
- sock.close()
-
-
-def check(model):
- defines = [i.getAttribute("name") for i in model.getElementsByTagName("define")]
- for reference in [i.getAttribute("name") for i in model.getElementsByTagName("ref")]:
- if reference not in defines:
- raise Exception("Unknown define element with name '%s'" % reference)
- for start in [i.getAttribute("name") for i in model.getElementsByTagName("start")]:
- if start not in defines:
- raise Exception("Unknown start element with name '%s'" % start)
-
-
-def preprocess(model):
- modelNode = [i for i in model.childNodes if i.localName == "model"][0]
- # Alias -> URL, based on "xmlns:" attributes.
- modelNamespaceAliases = parseNamespaceAliases(modelNode)
- for i in modelNode.getElementsByTagName("namespace"):
- grammarprefix = prefixForGrammar(i)
-
- grammar = i.getElementsByTagName("grammar")[0]
-
- for j in i.getElementsByTagName("element") + i.getElementsByTagName("attribute"):
- # prefix
- prefix = ""
- if ":" in j.getAttribute("name"):
- nameprefix = j.getAttribute("name").split(':')[0]
- prefix = ooxUrlAliases[modelNamespaceAliases[nameprefix]]
- elif j.localName == "attribute":
- if grammar.getAttribute("attributeFormDefault") == "qualified":
- prefix = grammarprefix
- else:
- prefix = grammarprefix
-
- # localname
- if ":" in j.getAttribute("name"):
- localname = j.getAttribute("name").split(':')[1]
- else:
- localname = j.getAttribute("name")
-
- # set the attributes
- j.setAttribute("prefix", prefix)
- j.setAttribute("localname", localname)
-
-
-namespacesPath = sys.argv[1]
-modelPath = sys.argv[2]
-
-# URL -> alias, from oox
-ooxUrlAliases = {}
-parseNamespaces(namespacesPath)
-
-model = minidom.parse(modelPath)
-check(model)
-preprocess(model)
-model.writexml(sys.stdout)
-
-# vim:set shiftwidth=4 softtabstop=4 expandtab:
diff --git a/writerfilter/source/ooxml/qnametostr.py b/writerfilter/source/ooxml/qnametostr.py
deleted file mode 100644
index e09a98570111..000000000000
--- a/writerfilter/source/ooxml/qnametostr.py
+++ /dev/null
@@ -1,64 +0,0 @@
-#!/usr/bin/env python
-#
-# This file is part of the LibreOffice project.
-#
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-#
-
-import xml.sax
-import sys
-
-
-class ContentHandler(xml.sax.handler.ContentHandler):
- def __init__(self):
- self.tokens = []
-
- def startDocument(self):
- print("""
-#include "ooxml/resourceids.hxx"
-#include "ooxml/QNameToString.hxx"
-#include "unordered_map"
-
-namespace writerfilter
-{
-
-#ifdef DBG_UTIL
-
- /* ooxml */
- static const std::unordered_map<Id, const char*> g_QNameToStringMap {
-""")
-
- def endDocument(self):
- print("""
- };
-
- std::string QNameToString(Id qName)
- {
- auto it = g_QNameToStringMap.find(qName);
- if (it == g_QNameToStringMap.end())
- return std::string();
-
- return it->second;
- }
-
-#endif
-}
-""")
-
- def startElement(self, name, attrs):
- for k, v in list(attrs.items()):
- if k == "tokenid":
- if v.startswith("ooxml:"):
- token = v.replace('ooxml:', '')
- if token not in self.tokens:
- print(""" { NS_ooxml::LN_%s, "ooxml:%s" },""" % (token, token))
- self.tokens.append(token)
-
-
-parser = xml.sax.make_parser()
-parser.setContentHandler(ContentHandler())
-parser.parse(sys.argv[1])
-
-# vim:set shiftwidth=4 softtabstop=4 expandtab:
diff --git a/writerfilter/source/ooxml/resourceids.py b/writerfilter/source/ooxml/resourceids.py
deleted file mode 100644
index 70325c9d376b..000000000000
--- a/writerfilter/source/ooxml/resourceids.py
+++ /dev/null
@@ -1,60 +0,0 @@
-#!/usr/bin/env python
-#
-# This file is part of the LibreOffice project.
-#
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-#
-
-import xml.sax
-import sys
-
-
-class ContentHandler(xml.sax.handler.ContentHandler):
- def __init__(self):
- self.tokens = []
- self.counter = 90001
-
- def startDocument(self):
- print("""
-/*
-
- THIS FILE IS GENERATED AUTOMATICALLY! DO NOT EDIT!
-
-*/
-
-
-#ifndef INCLUDED_OOXML_RESOURCEIDS_HXX
-#define INCLUDED_OOXML_RESOURCEIDS_HXX
-
-#include <dmapper/resourcemodel.hxx>
-
-namespace writerfilter {
-
-namespace NS_ooxml
-{""")
-
- def endDocument(self):
- print("""}
-
-
-}
-#endif // INCLUDED_OOXML_RESOURCEIDS_HXX""")
-
- def startElement(self, name, attrs):
- for k, v in attrs.items():
- if k in ("tokenid", "sendtokenid"):
- if v.startswith("ooxml:"):
- token = v.replace('ooxml:', '')
- if token not in self.tokens:
- print(" const Id LN_%s = %s;" % (token, self.counter))
- self.tokens.append(token)
- self.counter += 1
-
-
-parser = xml.sax.make_parser()
-parser.setContentHandler(ContentHandler())
-parser.parse(sys.argv[1])
-
-# vim:set shiftwidth=4 softtabstop=4 expandtab:
diff --git a/writerfilter/source/ooxml/tox.ini b/writerfilter/source/ooxml/tox.ini
deleted file mode 100644
index c1781905c427..000000000000
--- a/writerfilter/source/ooxml/tox.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[pycodestyle]
-ignore = E501
diff --git a/writerfilter/source/rtftok/README b/writerfilter/source/rtftok/README
deleted file mode 100644
index 4adbb7563b8b..000000000000
--- a/writerfilter/source/rtftok/README
+++ /dev/null
@@ -1,12 +0,0 @@
-= Writerfilter-based RTF tokenizer
-
-== Mathematics
-
-At the time of writing, all control words understood by SmOoxmlImport are
-imported. To view the current status:
-
-----
-grep M_TOKEN starmath/source/ooxmlimport.cxx |sed 's/.*\(M_TOKEN(\) /\1/;s/ ).*/)/'|sort -u > ~/math-import-list
-grep '[^_]M_TOKEN' writerfilter/source/rtftok/rtfdocumentimpl.cxx |sed 's/.*\(M_TOKEN(\)/\1/;s/).*/)/'|sort -u > ~/wf-export-list
-diff -u ~/math-import-list ~/wf-export-list |grep ^-M_TOKEN
-----
diff --git a/writerfilter/source/rtftok/rtfcharsets.cxx b/writerfilter/source/rtftok/rtfcharsets.cxx
deleted file mode 100644
index 69e416ce8bc5..000000000000
--- a/writerfilter/source/rtftok/rtfcharsets.cxx
+++ /dev/null
@@ -1,55 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-
-#include "rtfcharsets.hxx"
-#include <sal/macros.h>
-
-namespace writerfilter::rtftok
-{
-// See RTF spec v1.9.1, page 19
-RTFEncoding const aRTFEncodings[] = {
- // charset codepage Windows / Mac name
- { 0, 1252 }, // ANSI
- { 1, 0 }, // Default
- { 2, 42 }, // Symbol
- { 77, 10000 }, // Mac Roman
- { 78, 10001 }, // Mac Shift Jis
- { 79, 10003 }, // Mac Hangul
- { 80, 10008 }, // Mac GB2312
- { 81, 10002 }, // Mac Big5
- { 83, 10005 }, // Mac Herbrew
- { 84, 10004 }, // Mac Arabic
- { 85, 10006 }, // Mac Greek
- { 86, 10081 }, // Mac Turkish
- { 87, 10021 }, // Mac Thai
- { 88, 10029 }, // Mac East Europe
- { 89, 10007 }, // Mac Russian
- { 128, 932 }, // Shift JIS
- { 129, 949 }, // Hangul
- { 130, 1361 }, // Johab
- { 134, 936 }, // GB2312
- { 136, 950 }, // Big5
- { 161, 1253 }, // Greek
- { 162, 1254 }, // Turkish
- { 163, 1258 }, // Vietnamese
- { 177, 1255 }, // Herbrew
- { 178, 1256 }, // Arabic
- { 186, 1257 }, // Baltic
- { 204, 1251 }, // Russian
- { 222, 874 }, // Thai
- { 238, 1250 }, // Eastern European
- { 254, 437 }, // PC 437
- { 255, 850 }, // OEM
-};
-
-int nRTFEncodings = SAL_N_ELEMENTS(aRTFEncodings);
-
-} // namespace writerfilter::rtftok
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/rtftok/rtfcharsets.hxx b/writerfilter/source/rtftok/rtfcharsets.hxx
deleted file mode 100644
index e83e2ef69633..000000000000
--- a/writerfilter/source/rtftok/rtfcharsets.hxx
+++ /dev/null
@@ -1,27 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-
-#ifndef INCLUDED_WRITERFILTER_SOURCE_RTFTOK_RTFCHARSETS_HXX
-#define INCLUDED_WRITERFILTER_SOURCE_RTFTOK_RTFCHARSETS_HXX
-
-namespace writerfilter::rtftok
-{
-/// RTF legacy charsets
-struct RTFEncoding
-{
- int charset;
- int codepage;
-};
-extern RTFEncoding const aRTFEncodings[];
-extern int nRTFEncodings;
-} // namespace writerfilter::rtftok
-
-#endif // INCLUDED_WRITERFILTER_SOURCE_RTFTOK_RTFCHARSETS_HXX
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/rtftok/rtfcontrolwords.cxx b/writerfilter/source/rtftok/rtfcontrolwords.cxx
deleted file mode 100644
index 38bc9d6dd442..000000000000
--- a/writerfilter/source/rtftok/rtfcontrolwords.cxx
+++ /dev/null
@@ -1,1900 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-
-#include "rtfcontrolwords.hxx"
-#include <oox/token/namespaces.hxx>
-
-namespace writerfilter::rtftok
-{
-RTFSymbol const aRTFControlWords[] = {
- // sKeyword nControlType nIndex
- { "'", CONTROL_SYMBOL, RTF_HEXCHAR, 0 },
- { "-", CONTROL_SYMBOL, RTF_OPTHYPH, 0 },
- { "*", CONTROL_SYMBOL, RTF_IGNORE, 0 },
- { ":", CONTROL_SYMBOL, RTF_SUBENTRY, 0 },
- { "\\", CONTROL_SYMBOL, RTF_BACKSLASH, 0 },
- { "\n", CONTROL_SYMBOL, RTF_PAR, 0 },
- { "\r", CONTROL_SYMBOL, RTF_PAR, 0 },
- { "\r\n", CONTROL_SYMBOL, RTF_PAR, 0 },
- { "_", CONTROL_SYMBOL, RTF_NOBRKHYPH, 0 },
- { "{", CONTROL_SYMBOL, RTF_LBRACE, 0 },
- { "|", CONTROL_SYMBOL, RTF_FORMULA, 0 },
- { "}", CONTROL_SYMBOL, RTF_RBRACE, 0 },
- { "~", CONTROL_SYMBOL, RTF_NOBREAK, 0 },
- { "ab", CONTROL_TOGGLE, RTF_AB, 1 },
- { "absh", CONTROL_VALUE, RTF_ABSH, 0 },
- { "abslock", CONTROL_FLAG, RTF_ABSLOCK, 0 },
- { "absnoovrlp", CONTROL_TOGGLE, RTF_ABSNOOVRLP, 1 },
- { "absw", CONTROL_VALUE, RTF_ABSW, 0 },
- { "acaps", CONTROL_TOGGLE, RTF_ACAPS, 1 },
- { "acccircle", CONTROL_TOGGLE, RTF_ACCCIRCLE, 1 },
- { "acccomma", CONTROL_TOGGLE, RTF_ACCCOMMA, 1 },
- { "accdot", CONTROL_TOGGLE, RTF_ACCDOT, 1 },
- { "accnone", CONTROL_TOGGLE, RTF_ACCNONE, 1 },
- { "accunderdot", CONTROL_TOGGLE, RTF_ACCUNDERDOT, 1 },
- { "acf", CONTROL_VALUE, RTF_ACF, 0 },
- { "adeff", CONTROL_VALUE, RTF_ADEFF, 0 },
- { "additive", CONTROL_FLAG, RTF_ADDITIVE, 0 },
- { "adeflang", CONTROL_VALUE, RTF_ADEFLANG, 0 },
- { "adjustright", CONTROL_FLAG, RTF_ADJUSTRIGHT, 0 },
- { "adn", CONTROL_VALUE, RTF_ADN, 6 },
- { "aenddoc", CONTROL_FLAG, RTF_AENDDOC, 0 },
- { "aendnotes", CONTROL_FLAG, RTF_AENDNOTES, 0 },
- { "aexpnd", CONTROL_VALUE, RTF_AEXPND, 0 },
- { "af", CONTROL_VALUE, RTF_AF, 0 },
- { "afelev", CONTROL_FLAG, RTF_AFELEV, 0 },
- { "afs", CONTROL_VALUE, RTF_AFS, 24 },
- { "aftnbj", CONTROL_FLAG, RTF_AFTNBJ, 0 },
- { "aftncn", CONTROL_DESTINATION, RTF_AFTNCN, 0 },
- { "aftnnalc", CONTROL_FLAG, RTF_AFTNNALC, 0 },
- { "aftnnar", CONTROL_FLAG, RTF_AFTNNAR, 0 },
- { "aftnnauc", CONTROL_FLAG, RTF_AFTNNAUC, 0 },
- { "aftnnchi", CONTROL_FLAG, RTF_AFTNNCHI, 0 },
- { "aftnnchosung", CONTROL_FLAG, RTF_AFTNNCHOSUNG, 0 },
- { "aftnncnum", CONTROL_FLAG, RTF_AFTNNCNUM, 0 },
- { "aftnndbar", CONTROL_FLAG, RTF_AFTNNDBAR, 0 },
- { "aftnndbnum", CONTROL_FLAG, RTF_AFTNNDBNUM, 0 },
- { "aftnndbnumd", CONTROL_FLAG, RTF_AFTNNDBNUMD, 0 },
- { "aftnndbnumk", CONTROL_FLAG, RTF_AFTNNDBNUMK, 0 },
- { "aftnndbnumt", CONTROL_FLAG, RTF_AFTNNDBNUMT, 0 },
- { "aftnnganada", CONTROL_FLAG, RTF_AFTNNGANADA, 0 },
- { "aftnngbnum", CONTROL_FLAG, RTF_AFTNNGBNUM, 0 },
- { "aftnngbnumd", CONTROL_FLAG, RTF_AFTNNGBNUMD, 0 },
- { "aftnngbnumk", CONTROL_FLAG, RTF_AFTNNGBNUMK, 0 },
- { "aftnngbnuml", CONTROL_FLAG, RTF_AFTNNGBNUML, 0 },
- { "aftnnrlc", CONTROL_FLAG, RTF_AFTNNRLC, 0 },
- { "aftnnruc", CONTROL_FLAG, RTF_AFTNNRUC, 0 },
- { "aftnnzodiac", CONTROL_FLAG, RTF_AFTNNZODIAC, 0 },
- { "aftnnzodiacd", CONTROL_FLAG, RTF_AFTNNZODIACD, 0 },
- { "aftnnzodiacl", CONTROL_FLAG, RTF_AFTNNZODIACL, 0 },
- { "aftnrestart", CONTROL_FLAG, RTF_AFTNRESTART, 0 },
- { "aftnrstcont", CONTROL_FLAG, RTF_AFTNRSTCONT, 0 },
- { "aftnsep", CONTROL_DESTINATION, RTF_AFTNSEP, 0 },
- { "aftnsepc", CONTROL_DESTINATION, RTF_AFTNSEPC, 0 },
- { "aftnstart", CONTROL_VALUE, RTF_AFTNSTART, 1 },
- { "aftntj", CONTROL_FLAG, RTF_AFTNTJ, 0 },
- { "ai", CONTROL_TOGGLE, RTF_AI, 1 },
- { "alang", CONTROL_VALUE, RTF_ALANG, 0 },
- { "allowfieldendsel", CONTROL_FLAG, RTF_ALLOWFIELDENDSEL, 0 },
- { "allprot", CONTROL_FLAG, RTF_ALLPROT, 0 },
- { "alntblind", CONTROL_FLAG, RTF_ALNTBLIND, 0 },
- { "alt", CONTROL_FLAG, RTF_ALT, 0 },
- { "animtext", CONTROL_VALUE, RTF_ANIMTEXT, 0 },
- { "annotation", CONTROL_DESTINATION, RTF_ANNOTATION, 0 },
- { "annotprot", CONTROL_FLAG, RTF_ANNOTPROT, 0 },
- { "ansi", CONTROL_FLAG, RTF_ANSI, 0 },
- { "ansicpg", CONTROL_VALUE, RTF_ANSICPG, 0 },
- { "aoutl", CONTROL_TOGGLE, RTF_AOUTL, 1 },
- { "ApplyBrkRules", CONTROL_FLAG, RTF_APPLYBRKRULES, 0 },
- { "ascaps", CONTROL_TOGGLE, RTF_ASCAPS, 1 },
- { "ashad", CONTROL_TOGGLE, RTF_ASHAD, 1 },
- { "asianbrkrule", CONTROL_FLAG, RTF_ASIANBRKRULE, 0 },
- { "aspalpha", CONTROL_TOGGLE, RTF_ASPALPHA, 1 },
- { "aspnum", CONTROL_TOGGLE, RTF_ASPNUM, 1 },
- { "astrike", CONTROL_TOGGLE, RTF_ASTRIKE, 1 },
- { "atnauthor", CONTROL_DESTINATION, RTF_ATNAUTHOR, 0 },
- { "atndate", CONTROL_DESTINATION, RTF_ATNDATE, 0 },
- { "atnicn", CONTROL_DESTINATION, RTF_ATNICN, 0 },
- { "atnid", CONTROL_DESTINATION, RTF_ATNID, 0 },
- { "atnparent", CONTROL_DESTINATION, RTF_ATNPARENT, 0 },
- { "atnref", CONTROL_DESTINATION, RTF_ATNREF, 0 },
- { "atntime", CONTROL_DESTINATION, RTF_ATNTIME, 0 },
- { "atrfend", CONTROL_DESTINATION, RTF_ATRFEND, 0 },
- { "atrfstart", CONTROL_DESTINATION, RTF_ATRFSTART, 0 },
- { "aul", CONTROL_TOGGLE, RTF_AUL, 1 },
- { "auld", CONTROL_TOGGLE, RTF_AULD, 1 },
- { "auldb", CONTROL_TOGGLE, RTF_AULDB, 1 },
- { "aulnone", CONTROL_TOGGLE, RTF_AULNONE, 1 },
- { "aulw", CONTROL_TOGGLE, RTF_AULW, 1 },
- { "aup", CONTROL_VALUE, RTF_AUP, 6 },
- { "author", CONTROL_DESTINATION, RTF_AUTHOR, 0 },
- { "autofmtoverride", CONTROL_FLAG, RTF_AUTOFMTOVERRIDE, 0 },
- { "b", CONTROL_TOGGLE, RTF_B, 1 },
- { "background", CONTROL_DESTINATION, RTF_BACKGROUND, 0 },
- { "bdbfhdr", CONTROL_FLAG, RTF_BDBFHDR, 0 },
- { "bdrrlswsix", CONTROL_FLAG, RTF_BDRRLSWSIX, 0 },
- { "bgbdiag", CONTROL_FLAG, RTF_BGBDIAG, 0 },
- { "bgcross", CONTROL_FLAG, RTF_BGCROSS, 0 },
- { "bgdcross", CONTROL_FLAG, RTF_BGDCROSS, 0 },
- { "bgdkbdiag", CONTROL_FLAG, RTF_BGDKBDIAG, 0 },
- { "bgdkcross", CONTROL_FLAG, RTF_BGDKCROSS, 0 },
- { "bgdkdcross", CONTROL_FLAG, RTF_BGDKDCROSS, 0 },
- { "bgdkfdiag", CONTROL_FLAG, RTF_BGDKFDIAG, 0 },
- { "bgdkhoriz", CONTROL_FLAG, RTF_BGDKHORIZ, 0 },
- { "bgdkvert", CONTROL_FLAG, RTF_BGDKVERT, 0 },
- { "bgfdiag", CONTROL_FLAG, RTF_BGFDIAG, 0 },
- { "bghoriz", CONTROL_FLAG, RTF_BGHORIZ, 0 },
- { "bgvert", CONTROL_FLAG, RTF_BGVERT, 0 },
- { "bin", CONTROL_VALUE, RTF_BIN, 0 },
- { "binfsxn", CONTROL_VALUE, RTF_BINFSXN, 0 },
- { "binsxn", CONTROL_VALUE, RTF_BINSXN, 0 },
- { "bkmkcolf", CONTROL_VALUE, RTF_BKMKCOLF, 0 },
- { "bkmkcoll", CONTROL_VALUE, RTF_BKMKCOLL, 0 },
- { "bkmkend", CONTROL_DESTINATION, RTF_BKMKEND, 0 },
- { "bkmkpub", CONTROL_FLAG, RTF_BKMKPUB, 0 },
- { "bkmkstart", CONTROL_DESTINATION, RTF_BKMKSTART, 0 },
- { "bliptag", CONTROL_VALUE, RTF_BLIPTAG, 0 },
- { "blipuid", CONTROL_DESTINATION, RTF_BLIPUID, 0 },
- { "blipupi", CONTROL_VALUE, RTF_BLIPUPI, 0 },
- { "blue", CONTROL_VALUE, RTF_BLUE, 0 },
- { "bookfold", CONTROL_FLAG, RTF_BOOKFOLD, 0 },
- { "bookfoldrev", CONTROL_FLAG, RTF_BOOKFOLDREV, 0 },
- { "bookfoldsheets", CONTROL_VALUE, RTF_BOOKFOLDSHEETS, 0 },
- { "box", CONTROL_FLAG, RTF_BOX, 0 },
- { "brdrart", CONTROL_VALUE, RTF_BRDRART, 0 },
- { "brdrb", CONTROL_FLAG, RTF_BRDRB, 0 },
- { "brdrbar", CONTROL_FLAG, RTF_BRDRBAR, 0 },
- { "brdrbtw", CONTROL_FLAG, RTF_BRDRBTW, 0 },
- { "brdrcf", CONTROL_VALUE, RTF_BRDRCF, 0 },
- { "brdrdash", CONTROL_FLAG, RTF_BRDRDASH, 0 },
- { "brdrdashd", CONTROL_FLAG, RTF_BRDRDASHD, 0 },
- { "brdrdashdd", CONTROL_FLAG, RTF_BRDRDASHDD, 0 },
- { "brdrdashdotstr", CONTROL_FLAG, RTF_BRDRDASHDOTSTR, 0 },
- { "brdrdashsm", CONTROL_FLAG, RTF_BRDRDASHSM, 0 },
- { "brdrdb", CONTROL_FLAG, RTF_BRDRDB, 0 },
- { "brdrdot", CONTROL_FLAG, RTF_BRDRDOT, 0 },
- { "brdremboss", CONTROL_FLAG, RTF_BRDREMBOSS, 0 },
- { "brdrengrave", CONTROL_FLAG, RTF_BRDRENGRAVE, 0 },
- { "brdrframe", CONTROL_FLAG, RTF_BRDRFRAME, 0 },
- { "brdrhair", CONTROL_FLAG, RTF_BRDRHAIR, 0 },
- { "brdrinset", CONTROL_FLAG, RTF_BRDRINSET, 0 },
- { "brdrl", CONTROL_FLAG, RTF_BRDRL, 0 },
- { "brdrnil", CONTROL_FLAG, RTF_BRDRNIL, 0 },
- { "brdrnone", CONTROL_FLAG, RTF_BRDRNONE, 0 },
- { "brdroutset", CONTROL_FLAG, RTF_BRDROUTSET, 0 },
- { "brdrr", CONTROL_FLAG, RTF_BRDRR, 0 },
- { "brdrs", CONTROL_FLAG, RTF_BRDRS, 0 },
- { "brdrsh", CONTROL_FLAG, RTF_BRDRSH, 0 },
- { "brdrt", CONTROL_FLAG, RTF_BRDRT, 0 },
- { "brdrtbl", CONTROL_FLAG, RTF_BRDRTBL, 0 },
- { "brdrth", CONTROL_FLAG, RTF_BRDRTH, 0 },
- { "brdrthtnlg", CONTROL_FLAG, RTF_BRDRTHTNLG, 0 },
- { "brdrthtnmg", CONTROL_FLAG, RTF_BRDRTHTNMG, 0 },
- { "brdrthtnsg", CONTROL_FLAG, RTF_BRDRTHTNSG, 0 },
- { "brdrtnthlg", CONTROL_FLAG, RTF_BRDRTNTHLG, 0 },
- { "brdrtnthmg", CONTROL_FLAG, RTF_BRDRTNTHMG, 0 },
- { "brdrtnthsg", CONTROL_FLAG, RTF_BRDRTNTHSG, 0 },
- { "brdrtnthtnlg", CONTROL_FLAG, RTF_BRDRTNTHTNLG, 0 },
- { "brdrtnthtnmg", CONTROL_FLAG, RTF_BRDRTNTHTNMG, 0 },
- { "brdrtnthtnsg", CONTROL_FLAG, RTF_BRDRTNTHTNSG, 0 },
- { "brdrtriple", CONTROL_FLAG, RTF_BRDRTRIPLE, 0 },
- { "brdrw", CONTROL_VALUE, RTF_BRDRW, 0 },
- { "brdrwavy", CONTROL_FLAG, RTF_BRDRWAVY, 0 },
- { "brdrwavydb", CONTROL_FLAG, RTF_BRDRWAVYDB, 0 },
- { "brkfrm", CONTROL_FLAG, RTF_BRKFRM, 0 },
- { "brsp", CONTROL_VALUE, RTF_BRSP, 0 },
- { "bullet", CONTROL_SYMBOL, RTF_BULLET, 0 },
- { "buptim", CONTROL_DESTINATION, RTF_BUPTIM, 0 },
- { "bxe", CONTROL_FLAG, RTF_BXE, 0 },
- { "caccentfive", CONTROL_FLAG, RTF_CACCENTFIVE, 0 },
- { "caccentfour", CONTROL_FLAG, RTF_CACCENTFOUR, 0 },
- { "caccentone", CONTROL_FLAG, RTF_CACCENTONE, 0 },
- { "caccentsix", CONTROL_FLAG, RTF_CACCENTSIX, 0 },
- { "caccentthree", CONTROL_FLAG, RTF_CACCENTTHREE, 0 },
- { "caccenttwo", CONTROL_FLAG, RTF_CACCENTTWO, 0 },
- { "cachedcolbal", CONTROL_FLAG, RTF_CACHEDCOLBAL, 0 },
- { "caps", CONTROL_TOGGLE, RTF_CAPS, 1 },
- { "category", CONTROL_DESTINATION, RTF_CATEGORY, 0 },
- { "cb", CONTROL_VALUE, RTF_CB, 0 },
- { "cbackgroundone", CONTROL_FLAG, RTF_CBACKGROUNDONE, 0 },
- { "cbackgroundtwo", CONTROL_FLAG, RTF_CBACKGROUNDTWO, 0 },
- { "cbpat", CONTROL_VALUE, RTF_CBPAT, 0 },
- { "cchs", CONTROL_VALUE, RTF_CCHS, 0 },
- { "cell", CONTROL_SYMBOL, RTF_CELL, 0 },
- { "cellx", CONTROL_VALUE, RTF_CELLX, 0 },
- { "cf", CONTROL_VALUE, RTF_CF, 0 },
- { "cfollowedhyperlink", CONTROL_FLAG, RTF_CFOLLOWEDHYPERLINK, 0 },
- { "cfpat", CONTROL_VALUE, RTF_CFPAT, 0 },
- { "cgrid", CONTROL_VALUE, RTF_CGRID, 0 },
- { "charrsid", CONTROL_VALUE, RTF_CHARRSID, 0 },
- { "charscalex", CONTROL_VALUE, RTF_CHARSCALEX, 100 },
- { "chatn", CONTROL_SYMBOL, RTF_CHATN, 0 },
- { "chbgbdiag", CONTROL_FLAG, RTF_CHBGBDIAG, 0 },
- { "chbgcross", CONTROL_FLAG, RTF_CHBGCROSS, 0 },
- { "chbgdcross", CONTROL_FLAG, RTF_CHBGDCROSS, 0 },
- { "chbgdkbdiag", CONTROL_FLAG, RTF_CHBGDKBDIAG, 0 },
- { "chbgdkcross", CONTROL_FLAG, RTF_CHBGDKCROSS, 0 },
- { "chbgdkdcross", CONTROL_FLAG, RTF_CHBGDKDCROSS, 0 },
- { "chbgdkfdiag", CONTROL_FLAG, RTF_CHBGDKFDIAG, 0 },
- { "chbgdkhoriz", CONTROL_FLAG, RTF_CHBGDKHORIZ, 0 },
- { "chbgdkvert", CONTROL_FLAG, RTF_CHBGDKVERT, 0 },
- { "chbgfdiag", CONTROL_FLAG, RTF_CHBGFDIAG, 0 },
- { "chbghoriz", CONTROL_FLAG, RTF_CHBGHORIZ, 0 },
- { "chbgvert", CONTROL_FLAG, RTF_CHBGVERT, 0 },
- { "chbrdr", CONTROL_FLAG, RTF_CHBRDR, 0 },
- { "chcbpat", CONTROL_VALUE, RTF_CHCBPAT, 0 },
- { "chcfpat", CONTROL_VALUE, RTF_CHCFPAT, 0 },
- { "chdate", CONTROL_SYMBOL, RTF_CHDATE, 0 },
- { "chdpa", CONTROL_SYMBOL, RTF_CHDPA, 0 },
- { "chdpl", CONTROL_SYMBOL, RTF_CHDPL, 0 },
- { "chftn", CONTROL_SYMBOL, RTF_CHFTN, 0 },
- { "chftnsep", CONTROL_SYMBOL, RTF_CHFTNSEP, 0 },
- { "chftnsepc", CONTROL_SYMBOL, RTF_CHFTNSEPC, 0 },
- { "chpgn", CONTROL_SYMBOL, RTF_CHPGN, 0 },
- { "chhres", CONTROL_VALUE, RTF_CHHRES, 0 },
- { "chshdng", CONTROL_VALUE, RTF_CHSHDNG, 0 },
- { "chtime", CONTROL_SYMBOL, RTF_CHTIME, 0 },
- { "chyperlink", CONTROL_FLAG, RTF_CHYPERLINK, 0 },
- { "clbgbdiag", CONTROL_FLAG, RTF_CLBGBDIAG, 0 },
- { "clbgcross", CONTROL_FLAG, RTF_CLBGCROSS, 0 },
- { "clbgdcross", CONTROL_FLAG, RTF_CLBGDCROSS, 0 },
- { "clbgdkbdiag", CONTROL_FLAG, RTF_CLBGDKBDIAG, 0 },
- { "clbgdkcross", CONTROL_FLAG, RTF_CLBGDKCROSS, 0 },
- { "clbgdkdcross", CONTROL_FLAG, RTF_CLBGDKDCROSS, 0 },
- { "clbgdkfdiag", CONTROL_FLAG, RTF_CLBGDKFDIAG, 0 },
- { "clbgdkhor", CONTROL_FLAG, RTF_CLBGDKHOR, 0 },
- { "clbgdkvert", CONTROL_FLAG, RTF_CLBGDKVERT, 0 },
- { "clbgfdiag", CONTROL_FLAG, RTF_CLBGFDIAG, 0 },
- { "clbghoriz", CONTROL_FLAG, RTF_CLBGHORIZ, 0 },
- { "clbgvert", CONTROL_FLAG, RTF_CLBGVERT, 0 },
- { "clbrdrb", CONTROL_FLAG, RTF_CLBRDRB, 0 },
- { "clbrdrl", CONTROL_FLAG, RTF_CLBRDRL, 0 },
- { "clbrdrr", CONTROL_FLAG, RTF_CLBRDRR, 0 },
- { "clbrdrt", CONTROL_FLAG, RTF_CLBRDRT, 0 },
- { "clcbpat", CONTROL_VALUE, RTF_CLCBPAT, 0 },
- { "clcbpatraw", CONTROL_VALUE, RTF_CLCBPATRAW, 0 },
- { "clcfpat", CONTROL_VALUE, RTF_CLCFPAT, 0 },
- { "clcfpatraw", CONTROL_VALUE, RTF_CLCFPATRAW, 0 },
- { "cldel", CONTROL_FLAG, RTF_CLDEL, 0 },
- { "cldelauth", CONTROL_VALUE, RTF_CLDELAUTH, 0 },
- { "cldeldttm", CONTROL_VALUE, RTF_CLDELDTTM, 0 },
- { "cldgll", CONTROL_FLAG, RTF_CLDGLL, 0 },
- { "cldglu", CONTROL_FLAG, RTF_CLDGLU, 0 },
- { "clFitText", CONTROL_FLAG, RTF_CLFITTEXT, 0 },
- { "clftsWidth", CONTROL_VALUE, RTF_CLFTSWIDTH, 0 },
- { "clhidemark", CONTROL_FLAG, RTF_CLHIDEMARK, 0 },
- { "clins", CONTROL_FLAG, RTF_CLINS, 0 },
- { "clinsauth", CONTROL_VALUE, RTF_CLINSAUTH, 0 },
- { "clinsdttm", CONTROL_VALUE, RTF_CLINSDTTM, 0 },
- { "clmgf", CONTROL_FLAG, RTF_CLMGF, 0 },
- { "clmrg", CONTROL_FLAG, RTF_CLMRG, 0 },
- { "clmrgd", CONTROL_FLAG, RTF_CLMRGD, 0 },
- { "clmrgdauth", CONTROL_VALUE, RTF_CLMRGDAUTH, 0 },
- { "clmrgddttm", CONTROL_VALUE, RTF_CLMRGDDTTM, 0 },
- { "clmrgdr", CONTROL_FLAG, RTF_CLMRGDR, 0 },
- { "clNoWrap", CONTROL_FLAG, RTF_CLNOWRAP, 0 },
- { "clpadb", CONTROL_VALUE, RTF_CLPADB, 0 },
- { "clpadfb", CONTROL_VALUE, RTF_CLPADFB, 0 },
- { "clpadfl", CONTROL_VALUE, RTF_CLPADFL, 0 },
- { "clpadfr", CONTROL_VALUE, RTF_CLPADFR, 0 },
- { "clpadft", CONTROL_VALUE, RTF_CLPADFT, 0 },
- { "clpadl", CONTROL_VALUE, RTF_CLPADL, 0 },
- { "clpadr", CONTROL_VALUE, RTF_CLPADR, 0 },
- { "clpadt", CONTROL_VALUE, RTF_CLPADT, 0 },
- { "clspb", CONTROL_VALUE, RTF_CLSPB, 0 },
- { "clspfb", CONTROL_VALUE, RTF_CLSPFB, 0 },
- { "clspfl", CONTROL_VALUE, RTF_CLSPFL, 0 },
- { "clspfr", CONTROL_VALUE, RTF_CLSPFR, 0 },
- { "clspft", CONTROL_VALUE, RTF_CLSPFT, 0 },
- { "clspl", CONTROL_VALUE, RTF_CLSPL, 0 },
- { "clspr", CONTROL_VALUE, RTF_CLSPR, 0 },
- { "clspt", CONTROL_VALUE, RTF_CLSPT, 0 },
- { "clshdng", CONTROL_VALUE, RTF_CLSHDNG, 0 },
- { "clshdngraw", CONTROL_VALUE, RTF_CLSHDNGRAW, 0 },
- { "clshdrawnil", CONTROL_FLAG, RTF_CLSHDRAWNIL, 0 },
- { "clsplit", CONTROL_FLAG, RTF_CLSPLIT, 0 },
- { "clsplitr", CONTROL_FLAG, RTF_CLSPLITR, 0 },
- { "cltxbtlr", CONTROL_FLAG, RTF_CLTXBTLR, 0 },
- { "cltxlrtb", CONTROL_FLAG, RTF_CLTXLRTB, 0 },
- { "cltxlrtbv", CONTROL_FLAG, RTF_CLTXLRTBV, 0 },
- { "cltxtbrl", CONTROL_FLAG, RTF_CLTXTBRL, 0 },
- { "cltxtbrlv", CONTROL_FLAG, RTF_CLTXTBRLV, 0 },
- { "clvertalb", CONTROL_FLAG, RTF_CLVERTALB, 0 },
- { "clvertalc", CONTROL_FLAG, RTF_CLVERTALC, 0 },
- { "clvertalt", CONTROL_FLAG, RTF_CLVERTALT, 0 },
- { "clvmgf", CONTROL_FLAG, RTF_CLVMGF, 0 },
- { "clvmrg", CONTROL_FLAG, RTF_CLVMRG, 0 },
- { "clwWidth", CONTROL_VALUE, RTF_CLWWIDTH, 0 },
- { "cmaindarkone", CONTROL_FLAG, RTF_CMAINDARKONE, 0 },
- { "cmaindarktwo", CONTROL_FLAG, RTF_CMAINDARKTWO, 0 },
- { "cmainlightone", CONTROL_FLAG, RTF_CMAINLIGHTONE, 0 },
- { "cmainlighttwo", CONTROL_FLAG, RTF_CMAINLIGHTTWO, 0 },
- { "collapsed", CONTROL_FLAG, RTF_COLLAPSED, 0 },
- { "colno", CONTROL_VALUE, RTF_COLNO, 0 },
- { "colorschememapping", CONTROL_DESTINATION, RTF_COLORSCHEMEMAPPING, 0 },
- { "colortbl", CONTROL_DESTINATION, RTF_COLORTBL, 0 },
- { "cols", CONTROL_VALUE, RTF_COLS, 1 },
- { "colsr", CONTROL_VALUE, RTF_COLSR, 0 },
- { "colsx", CONTROL_VALUE, RTF_COLSX, 720 },
- { "column", CONTROL_SYMBOL, RTF_COLUMN, 0 },
- { "colw", CONTROL_VALUE, RTF_COLW, 0 },
- { "comment", CONTROL_DESTINATION, RTF_COMMENT, 0 },
- { "company", CONTROL_DESTINATION, RTF_COMPANY, 0 },
- { "contextualspace", CONTROL_FLAG, RTF_CONTEXTUALSPACE, 0 },
- { "cpg", CONTROL_VALUE, RTF_CPG, 0 },
- { "crauth", CONTROL_VALUE, RTF_CRAUTH, 0 },
- { "crdate", CONTROL_VALUE, RTF_CRDATE, 0 },
- { "creatim", CONTROL_DESTINATION, RTF_CREATIM, 0 },
- { "cs", CONTROL_VALUE, RTF_CS, 0 },
- { "cshade", CONTROL_VALUE, RTF_CSHADE, 0 },
- { "ctextone", CONTROL_FLAG, RTF_CTEXTONE, 0 },
- { "ctexttwo", CONTROL_FLAG, RTF_CTEXTTWO, 0 },
- { "ctint", CONTROL_VALUE, RTF_CTINT, 0 },
- { "ctrl", CONTROL_FLAG, RTF_CTRL, 0 },
- { "cts", CONTROL_VALUE, RTF_CTS, 0 },
- { "cufi", CONTROL_VALUE, RTF_CUFI, 0 },
- { "culi", CONTROL_VALUE, RTF_CULI, 0 },
- { "curi", CONTROL_VALUE, RTF_CURI, 0 },
- { "cvmme", CONTROL_FLAG, RTF_CVMME, 0 },
- { "datafield", CONTROL_DESTINATION, RTF_DATAFIELD, 0 },
- { "datastore", CONTROL_DESTINATION, RTF_DATASTORE, 0 },
- { "date", CONTROL_FLAG, RTF_DATE, 0 },
- { "dbch", CONTROL_FLAG, RTF_DBCH, 0 },
- { "defchp", CONTROL_DESTINATION, RTF_DEFCHP, 0 },
- { "deff", CONTROL_VALUE, RTF_DEFF, 0 },
- { "defformat", CONTROL_FLAG, RTF_DEFFORMAT, 0 },
- { "deflang", CONTROL_VALUE, RTF_DEFLANG, 0 },
- { "deflangfe", CONTROL_VALUE, RTF_DEFLANGFE, 0 },
- { "defpap", CONTROL_DESTINATION, RTF_DEFPAP, 0 },
- { "defshp", CONTROL_FLAG, RTF_DEFSHP, 0 },
- { "deftab", CONTROL_VALUE, RTF_DEFTAB, 720 },
- { "deleted", CONTROL_TOGGLE, RTF_DELETED, 1 },
- { "delrsid", CONTROL_VALUE, RTF_DELRSID, 0 },
- { "dfrauth", CONTROL_VALUE, RTF_DFRAUTH, 0 },
- { "dfrdate", CONTROL_VALUE, RTF_DFRDATE, 0 },
- { "dfrmtxtx", CONTROL_VALUE, RTF_DFRMTXTX, 0 },
- { "dfrmtxty", CONTROL_VALUE, RTF_DFRMTXTY, 0 },
- { "dfrstart", CONTROL_VALUE, RTF_DFRSTART, 0 },
- { "dfrstop", CONTROL_VALUE, RTF_DFRSTOP, 0 },
- { "dfrxst", CONTROL_VALUE, RTF_DFRXST, 0 },
- { "dghorigin", CONTROL_VALUE, RTF_DGHORIGIN, 1701 },
- { "dghshow", CONTROL_VALUE, RTF_DGHSHOW, 3 },
- { "dghspace", CONTROL_VALUE, RTF_DGHSPACE, 120 },
- { "dgmargin", CONTROL_FLAG, RTF_DGMARGIN, 0 },
- { "dgsnap", CONTROL_FLAG, RTF_DGSNAP, 0 },
- { "dgvorigin", CONTROL_VALUE, RTF_DGVORIGIN, 1984 },
- { "dgvshow", CONTROL_VALUE, RTF_DGVSHOW, 0 },
- { "dgvspace", CONTROL_VALUE, RTF_DGVSPACE, 120 },
- { "dibitmap", CONTROL_VALUE, RTF_DIBITMAP, 0 },
- { "disabled", CONTROL_TOGGLE, RTF_DISABLED, 1 },
- { "dn", CONTROL_VALUE, RTF_DN, 6 },
- { "dntblnsbdb", CONTROL_FLAG, RTF_DNTBLNSBDB, 0 },
- { "do", CONTROL_DESTINATION, RTF_DO, 0 },
- { "dobxcolumn", CONTROL_FLAG, RTF_DOBXCOLUMN, 0 },
- { "dobxmargin", CONTROL_FLAG, RTF_DOBXMARGIN, 0 },
- { "dobxpage", CONTROL_FLAG, RTF_DOBXPAGE, 0 },
- { "dobymargin", CONTROL_FLAG, RTF_DOBYMARGIN, 0 },
- { "dobypage", CONTROL_FLAG, RTF_DOBYPAGE, 0 },
- { "dobypara", CONTROL_FLAG, RTF_DOBYPARA, 0 },
- { "doccomm", CONTROL_DESTINATION, RTF_DOCCOMM, 0 },
- { "doctemp", CONTROL_FLAG, RTF_DOCTEMP, 0 },
- { "doctype", CONTROL_VALUE, RTF_DOCTYPE, 0 },
- { "docvar", CONTROL_DESTINATION, RTF_DOCVAR, 0 },
- { "dodhgt", CONTROL_VALUE, RTF_DODHGT, 0 },
- { "dolock", CONTROL_FLAG, RTF_DOLOCK, 0 },
- { "donotembedlingdata", CONTROL_VALUE, RTF_DONOTEMBEDLINGDATA, 0 },
- { "donotembedsysfont", CONTROL_VALUE, RTF_DONOTEMBEDSYSFONT, 0 },
- { "donotshowcomments", CONTROL_FLAG, RTF_DONOTSHOWCOMMENTS, 0 },
- { "donotshowinsdel", CONTROL_FLAG, RTF_DONOTSHOWINSDEL, 0 },
- { "donotshowmarkup", CONTROL_FLAG, RTF_DONOTSHOWMARKUP, 0 },
- { "donotshowprops", CONTROL_FLAG, RTF_DONOTSHOWPROPS, 0 },
- { "dpaendhol", CONTROL_FLAG, RTF_DPAENDHOL, 0 },
- { "dpaendl", CONTROL_VALUE, RTF_DPAENDL, 0 },
- { "dpaendsol", CONTROL_FLAG, RTF_DPAENDSOL, 0 },
- { "dpaendw", CONTROL_VALUE, RTF_DPAENDW, 0 },
- { "dparc", CONTROL_FLAG, RTF_DPARC, 0 },
- { "dparcflipx", CONTROL_FLAG, RTF_DPARCFLIPX, 0 },
- { "dparcflipy", CONTROL_FLAG, RTF_DPARCFLIPY, 0 },
- { "dpastarthol", CONTROL_FLAG, RTF_DPASTARTHOL, 0 },
- { "dpastartl", CONTROL_VALUE, RTF_DPASTARTL, 0 },
- { "dpastartsol", CONTROL_FLAG, RTF_DPASTARTSOL, 0 },
- { "dpastartw", CONTROL_VALUE, RTF_DPASTARTW, 0 },
- { "dpcallout", CONTROL_FLAG, RTF_DPCALLOUT, 0 },
- { "dpcoa", CONTROL_VALUE, RTF_DPCOA, 0 },
- { "dpcoaccent", CONTROL_FLAG, RTF_DPCOACCENT, 0 },
- { "dpcobestfit", CONTROL_FLAG, RTF_DPCOBESTFIT, 0 },
- { "dpcoborder", CONTROL_FLAG, RTF_DPCOBORDER, 0 },
- { "dpcodabs", CONTROL_FLAG, RTF_DPCODABS, 0 },
- { "dpcodbottom", CONTROL_FLAG, RTF_DPCODBOTTOM, 0 },
- { "dpcodcenter", CONTROL_FLAG, RTF_DPCODCENTER, 0 },
- { "dpcodescent", CONTROL_VALUE, RTF_DPCODESCENT, 0 },
- { "dpcodtop", CONTROL_FLAG, RTF_DPCODTOP, 0 },
- { "dpcolength", CONTROL_VALUE, RTF_DPCOLENGTH, 0 },
- { "dpcominusx", CONTROL_FLAG, RTF_DPCOMINUSX, 0 },
- { "dpcominusy", CONTROL_FLAG, RTF_DPCOMINUSY, 0 },
- { "dpcooffset", CONTROL_VALUE, RTF_DPCOOFFSET, 0 },
- { "dpcosmarta", CONTROL_FLAG, RTF_DPCOSMARTA, 0 },
- { "dpcotdouble", CONTROL_FLAG, RTF_DPCOTDOUBLE, 0 },
- { "dpcotright", CONTROL_FLAG, RTF_DPCOTRIGHT, 0 },
- { "dpcotsingle", CONTROL_FLAG, RTF_DPCOTSINGLE, 0 },
- { "dpcottriple", CONTROL_FLAG, RTF_DPCOTTRIPLE, 0 },
- { "dpcount", CONTROL_VALUE, RTF_DPCOUNT, 0 },
- { "dpellipse", CONTROL_FLAG, RTF_DPELLIPSE, 0 },
- { "dpendgroup", CONTROL_FLAG, RTF_DPENDGROUP, 0 },
- { "dpfillbgcb", CONTROL_VALUE, RTF_DPFILLBGCB, 0 },
- { "dpfillbgcg", CONTROL_VALUE, RTF_DPFILLBGCG, 0 },
- { "dpfillbgcr", CONTROL_VALUE, RTF_DPFILLBGCR, 0 },
- { "dpfillbggray", CONTROL_VALUE, RTF_DPFILLBGGRAY, 0 },
- { "dpfillbgpal", CONTROL_FLAG, RTF_DPFILLBGPAL, 0 },
- { "dpfillfgcb", CONTROL_VALUE, RTF_DPFILLFGCB, 0 },
- { "dpfillfgcg", CONTROL_VALUE, RTF_DPFILLFGCG, 0 },
- { "dpfillfgcr", CONTROL_VALUE, RTF_DPFILLFGCR, 0 },
- { "dpfillfggray", CONTROL_VALUE, RTF_DPFILLFGGRAY, 0 },
- { "dpfillfgpal", CONTROL_FLAG, RTF_DPFILLFGPAL, 0 },
- { "dpfillpat", CONTROL_VALUE, RTF_DPFILLPAT, 0 },
- { "dpgroup", CONTROL_FLAG, RTF_DPGROUP, 0 },
- { "dpline", CONTROL_FLAG, RTF_DPLINE, 0 },
- { "dplinecob", CONTROL_VALUE, RTF_DPLINECOB, 0 },
- { "dplinecog", CONTROL_VALUE, RTF_DPLINECOG, 0 },
- { "dplinecor", CONTROL_VALUE, RTF_DPLINECOR, 0 },
- { "dplinedado", CONTROL_FLAG, RTF_DPLINEDADO, 0 },
- { "dplinedadodo", CONTROL_FLAG, RTF_DPLINEDADODO, 0 },
- { "dplinedash", CONTROL_FLAG, RTF_DPLINEDASH, 0 },
- { "dplinedot", CONTROL_FLAG, RTF_DPLINEDOT, 0 },
- { "dplinegray", CONTROL_VALUE, RTF_DPLINEGRAY, 0 },
- { "dplinehollow", CONTROL_FLAG, RTF_DPLINEHOLLOW, 0 },
- { "dplinepal", CONTROL_FLAG, RTF_DPLINEPAL, 0 },
- { "dplinesolid", CONTROL_FLAG, RTF_DPLINESOLID, 0 },
- { "dplinew", CONTROL_VALUE, RTF_DPLINEW, 0 },
- { "dppolycount", CONTROL_VALUE, RTF_DPPOLYCOUNT, 0 },
- { "dppolygon", CONTROL_FLAG, RTF_DPPOLYGON, 0 },
- { "dppolyline", CONTROL_FLAG, RTF_DPPOLYLINE, 0 },
- { "dpptx", CONTROL_VALUE, RTF_DPPTX, 0 },
- { "dppty", CONTROL_VALUE, RTF_DPPTY, 0 },
- { "dprect", CONTROL_FLAG, RTF_DPRECT, 0 },
- { "dproundr", CONTROL_FLAG, RTF_DPROUNDR, 0 },
- { "dpshadow", CONTROL_FLAG, RTF_DPSHADOW, 0 },
- { "dpshadx", CONTROL_VALUE, RTF_DPSHADX, 0 },
- { "dpshady", CONTROL_VALUE, RTF_DPSHADY, 0 },
- { "dptxbtlr", CONTROL_FLAG, RTF_DPTXBTLR, 0 },
- { "dptxbx", CONTROL_FLAG, RTF_DPTXBX, 0 },
- { "dptxbxmar", CONTROL_VALUE, RTF_DPTXBXMAR, 0 },
- { "dptxbxtext", CONTROL_DESTINATION, RTF_DPTXBXTEXT, 0 },
- { "dptxlrtb", CONTROL_FLAG, RTF_DPTXLRTB, 0 },
- { "dptxlrtbv", CONTROL_FLAG, RTF_DPTXLRTBV, 0 },
- { "dptxtbrl", CONTROL_FLAG, RTF_DPTXTBRL, 0 },
- { "dptxtbrlv", CONTROL_FLAG, RTF_DPTXTBRLV, 0 },
- { "dpx", CONTROL_VALUE, RTF_DPX, 0 },
- { "dpxsize", CONTROL_VALUE, RTF_DPXSIZE, 0 },
- { "dpy", CONTROL_VALUE, RTF_DPY, 0 },
- { "dpysize", CONTROL_VALUE, RTF_DPYSIZE, 0 },
- { "dropcapli", CONTROL_VALUE, RTF_DROPCAPLI, 0 },
- { "dropcapt", CONTROL_VALUE, RTF_DROPCAPT, 0 },
- { "ds", CONTROL_VALUE, RTF_DS, 0 },
- { "dxfrtext", CONTROL_VALUE, RTF_DXFRTEXT, 0 },
- { "dy", CONTROL_VALUE, RTF_DY, 0 },
- { "ebcend", CONTROL_DESTINATION, RTF_EBCEND, 0 },
- { "ebcstart", CONTROL_DESTINATION, RTF_EBCSTART, 0 },
- { "edmins", CONTROL_VALUE, RTF_EDMINS, 0 },
- { "embo", CONTROL_TOGGLE, RTF_EMBO, 1 },
- { "emdash", CONTROL_SYMBOL, RTF_EMDASH, 0 },
- { "emfblip", CONTROL_FLAG, RTF_EMFBLIP, 0 },
- { "emspace", CONTROL_SYMBOL, RTF_EMSPACE, 0 },
- { "endash", CONTROL_SYMBOL, RTF_ENDASH, 0 },
- { "enddoc", CONTROL_FLAG, RTF_ENDDOC, 0 },
- { "endnhere", CONTROL_FLAG, RTF_ENDNHERE, 0 },
- { "endnotes", CONTROL_FLAG, RTF_ENDNOTES, 0 },
- { "enforceprot", CONTROL_VALUE, RTF_ENFORCEPROT, 0 },
- { "enspace", CONTROL_SYMBOL, RTF_ENSPACE, 0 },
- { "expnd", CONTROL_VALUE, RTF_EXPND, 0 },
- { "expndtw", CONTROL_VALUE, RTF_EXPNDTW, 0 },
- { "expshrtn", CONTROL_FLAG, RTF_EXPSHRTN, 0 },
- { "f", CONTROL_VALUE, RTF_F, 0 },
- { "faauto", CONTROL_FLAG, RTF_FAAUTO, 0 },
- { "facenter", CONTROL_FLAG, RTF_FACENTER, 0 },
- { "facingp", CONTROL_TOGGLE, RTF_FACINGP, 1 },
- { "factoidname", CONTROL_DESTINATION, RTF_FACTOIDNAME, 0 },
- { "fafixed", CONTROL_FLAG, RTF_FAFIXED, 0 },
- { "fahang", CONTROL_FLAG, RTF_FAHANG, 0 },
- { "falt", CONTROL_DESTINATION, RTF_FALT, 0 },
- { "faroman", CONTROL_FLAG, RTF_FAROMAN, 0 },
- { "favar", CONTROL_FLAG, RTF_FAVAR, 0 },
- { "fbias", CONTROL_VALUE, RTF_FBIAS, 0 },
- { "fbidi", CONTROL_FLAG, RTF_FBIDI, 0 },
- { "fbidis", CONTROL_FLAG, RTF_FBIDIS, 0 },
- { "fbimajor", CONTROL_FLAG, RTF_FBIMAJOR, 0 },
- { "fbiminor", CONTROL_FLAG, RTF_FBIMINOR, 0 },
- { "fchars", CONTROL_DESTINATION, RTF_FCHARS, 0 },
- { "fcharset", CONTROL_VALUE, RTF_FCHARSET, 0 },
- { "fcs", CONTROL_VALUE, RTF_FCS, 0 },
- { "fdbmajor", CONTROL_FLAG, RTF_FDBMAJOR, 0 },
- { "fdbminor", CONTROL_FLAG, RTF_FDBMINOR, 0 },
- { "fdecor", CONTROL_FLAG, RTF_FDECOR, 0 },
- { "felnbrelev", CONTROL_FLAG, RTF_FELNBRELEV, 0 },
- { "fet", CONTROL_VALUE, RTF_FET, 0 },
- { "fetch", CONTROL_FLAG, RTF_FETCH, 0 },
- { "ffdefres", CONTROL_VALUE, RTF_FFDEFRES, 0 },
- { "ffdeftext", CONTROL_DESTINATION, RTF_FFDEFTEXT, 0 },
- { "ffentrymcr", CONTROL_DESTINATION, RTF_FFENTRYMCR, 0 },
- { "ffexitmcr", CONTROL_DESTINATION, RTF_FFEXITMCR, 0 },
- { "ffformat", CONTROL_DESTINATION, RTF_FFFORMAT, 0 },
- { "ffhaslistbox", CONTROL_VALUE, RTF_FFHASLISTBOX, 0 },
- { "ffhelptext", CONTROL_DESTINATION, RTF_FFHELPTEXT, 0 },
- { "ffhps", CONTROL_VALUE, RTF_FFHPS, 0 },
- { "ffl", CONTROL_DESTINATION, RTF_FFL, 0 },
- { "ffmaxlen", CONTROL_VALUE, RTF_FFMAXLEN, 0 },
- { "ffname", CONTROL_DESTINATION, RTF_FFNAME, 0 },
- { "ffownhelp", CONTROL_VALUE, RTF_FFOWNHELP, 0 },
- { "ffownstat", CONTROL_VALUE, RTF_FFOWNSTAT, 0 },
- { "ffprot", CONTROL_VALUE, RTF_FFPROT, 0 },
- { "ffrecalc", CONTROL_VALUE, RTF_FFRECALC, 0 },
- { "ffres", CONTROL_VALUE, RTF_FFRES, 0 },
- { "ffsize", CONTROL_VALUE, RTF_FFSIZE, 0 },
- { "ffstattext", CONTROL_DESTINATION, RTF_FFSTATTEXT, 0 },
- { "fftype", CONTROL_VALUE, RTF_FFTYPE, 0 },
- { "fftypetxt", CONTROL_VALUE, RTF_FFTYPETXT, 0 },
- { "fhimajor", CONTROL_FLAG, RTF_FHIMAJOR, 0 },
- { "fhiminor", CONTROL_FLAG, RTF_FHIMINOR, 0 },
- { "fi", CONTROL_VALUE, RTF_FI, 0 },
- { "fid", CONTROL_VALUE, RTF_FID, 0 },
- { "field", CONTROL_DESTINATION, RTF_FIELD, 0 },
- { "file", CONTROL_DESTINATION, RTF_FILE, 0 },
- { "filetbl", CONTROL_DESTINATION, RTF_FILETBL, 0 },
- { "fittext", CONTROL_VALUE, RTF_FITTEXT, 0 },
- { "fjgothic", CONTROL_FLAG, RTF_FJGOTHIC, 0 },
- { "fjminchou", CONTROL_FLAG, RTF_FJMINCHOU, 0 },
- { "fldalt", CONTROL_FLAG, RTF_FLDALT, 0 },
- { "flddirty", CONTROL_FLAG, RTF_FLDDIRTY, 0 },
- { "fldedit", CONTROL_FLAG, RTF_FLDEDIT, 0 },
- { "fldinst", CONTROL_DESTINATION, RTF_FLDINST, 0 },
- { "fldlock", CONTROL_FLAG, RTF_FLDLOCK, 0 },
- { "fldpriv", CONTROL_FLAG, RTF_FLDPRIV, 0 },
- { "fldrslt", CONTROL_DESTINATION, RTF_FLDRSLT, 0 },
- { "fldtype", CONTROL_DESTINATION, RTF_FLDTYPE, 0 },
- { "flomajor", CONTROL_FLAG, RTF_FLOMAJOR, 0 },
- { "flominor", CONTROL_FLAG, RTF_FLOMINOR, 0 },
- { "fmodern", CONTROL_FLAG, RTF_FMODERN, 0 },
- { "fn", CONTROL_VALUE, RTF_FN, 0 },
- { "fname", CONTROL_DESTINATION, RTF_FNAME, 0 },
- { "fnetwork", CONTROL_FLAG, RTF_FNETWORK, 0 },
- { "fnil", CONTROL_FLAG, RTF_FNIL, 0 },
- { "fnonfilesys", CONTROL_FLAG, RTF_FNONFILESYS, 0 },
- { "fontemb", CONTROL_DESTINATION, RTF_FONTEMB, 0 },
- { "fontfile", CONTROL_DESTINATION, RTF_FONTFILE, 0 },
- { "fonttbl", CONTROL_DESTINATION, RTF_FONTTBL, 0 },
- { "footer", CONTROL_DESTINATION, RTF_FOOTER, 0 },
- { "footerf", CONTROL_DESTINATION, RTF_FOOTERF, 0 },
- { "footerl", CONTROL_DESTINATION, RTF_FOOTERL, 0 },
- { "footerr", CONTROL_DESTINATION, RTF_FOOTERR, 0 },
- { "footery", CONTROL_VALUE, RTF_FOOTERY, 720 },
- { "footnote", CONTROL_DESTINATION, RTF_FOOTNOTE, 0 },
- { "forceupgrade", CONTROL_FLAG, RTF_FORCEUPGRADE, 0 },
- { "formdisp", CONTROL_FLAG, RTF_FORMDISP, 0 },
- { "formfield", CONTROL_DESTINATION, RTF_FORMFIELD, 0 },
- { "formprot", CONTROL_FLAG, RTF_FORMPROT, 0 },
- { "formshade", CONTROL_FLAG, RTF_FORMSHADE, 0 },
- { "fosnum", CONTROL_VALUE, RTF_FOSNUM, 0 },
- { "fprq", CONTROL_VALUE, RTF_FPRQ, 0 },
- { "fracwidth", CONTROL_FLAG, RTF_FRACWIDTH, 0 },
- { "frelative", CONTROL_VALUE, RTF_FRELATIVE, 0 },
- { "frmtxbtlr", CONTROL_FLAG, RTF_FRMTXBTLR, 0 },
- { "frmtxlrtb", CONTROL_FLAG, RTF_FRMTXLRTB, 0 },
- { "frmtxlrtbv", CONTROL_FLAG, RTF_FRMTXLRTBV, 0 },
- { "frmtxtbrl", CONTROL_FLAG, RTF_FRMTXTBRL, 0 },
- { "frmtxtbrlv", CONTROL_FLAG, RTF_FRMTXTBRLV, 0 },
- { "froman", CONTROL_FLAG, RTF_FROMAN, 0 },
- { "fromhtml", CONTROL_VALUE, RTF_FROMHTML, 0 },
- { "fromtext", CONTROL_FLAG, RTF_FROMTEXT, 0 },
- { "fs", CONTROL_VALUE, RTF_FS, 24 },
- { "fscript", CONTROL_FLAG, RTF_FSCRIPT, 0 },
- { "fswiss", CONTROL_FLAG, RTF_FSWISS, 0 },
- { "ftech", CONTROL_FLAG, RTF_FTECH, 0 },
- { "ftnalt", CONTROL_FLAG, RTF_FTNALT, 0 },
- { "ftnbj", CONTROL_FLAG, RTF_FTNBJ, 0 },
- { "ftncn", CONTROL_DESTINATION, RTF_FTNCN, 0 },
- { "ftnil", CONTROL_FLAG, RTF_FTNIL, 0 },
- { "ftnlytwnine", CONTROL_FLAG, RTF_FTNLYTWNINE, 0 },
- { "ftnnalc", CONTROL_FLAG, RTF_FTNNALC, 0 },
- { "ftnnar", CONTROL_FLAG, RTF_FTNNAR, 0 },
- { "ftnnauc", CONTROL_FLAG, RTF_FTNNAUC, 0 },
- { "ftnnchi", CONTROL_FLAG, RTF_FTNNCHI, 0 },
- { "ftnnchosung", CONTROL_FLAG, RTF_FTNNCHOSUNG, 0 },
- { "ftnncnum", CONTROL_FLAG, RTF_FTNNCNUM, 0 },
- { "ftnndbar", CONTROL_FLAG, RTF_FTNNDBAR, 0 },
- { "ftnndbnum", CONTROL_FLAG, RTF_FTNNDBNUM, 0 },
- { "ftnndbnumd", CONTROL_FLAG, RTF_FTNNDBNUMD, 0 },
- { "ftnndbnumk", CONTROL_FLAG, RTF_FTNNDBNUMK, 0 },
- { "ftnndbnumt", CONTROL_FLAG, RTF_FTNNDBNUMT, 0 },
- { "ftnnganada", CONTROL_FLAG, RTF_FTNNGANADA, 0 },
- { "ftnngbnum", CONTROL_FLAG, RTF_FTNNGBNUM, 0 },
- { "ftnngbnumd", CONTROL_FLAG, RTF_FTNNGBNUMD, 0 },
- { "ftnngbnumk", CONTROL_FLAG, RTF_FTNNGBNUMK, 0 },
- { "ftnngbnuml", CONTROL_FLAG, RTF_FTNNGBNUML, 0 },
- { "ftnnrlc", CONTROL_FLAG, RTF_FTNNRLC, 0 },
- { "ftnnruc", CONTROL_FLAG, RTF_FTNNRUC, 0 },
- { "ftnnzodiac", CONTROL_FLAG, RTF_FTNNZODIAC, 0 },
- { "ftnnzodiacd", CONTROL_FLAG, RTF_FTNNZODIACD, 0 },
- { "ftnnzodiacl", CONTROL_FLAG, RTF_FTNNZODIACL, 0 },
- { "ftnrestart", CONTROL_FLAG, RTF_FTNRESTART, 0 },
- { "ftnrstcont", CONTROL_FLAG, RTF_FTNRSTCONT, 0 },
- { "ftnrstpg", CONTROL_FLAG, RTF_FTNRSTPG, 0 },
- { "ftnsep", CONTROL_DESTINATION, RTF_FTNSEP, 0 },
- { "ftnsepc", CONTROL_DESTINATION, RTF_FTNSEPC, 0 },
- { "ftnstart", CONTROL_VALUE, RTF_FTNSTART, 1 },
- { "ftntj", CONTROL_FLAG, RTF_FTNTJ, 0 },
- { "fttruetype", CONTROL_FLAG, RTF_FTTRUETYPE, 0 },
- { "fvaliddos", CONTROL_FLAG, RTF_FVALIDDOS, 0 },
- { "fvalidhpfs", CONTROL_FLAG, RTF_FVALIDHPFS, 0 },
- { "fvalidmac", CONTROL_FLAG, RTF_FVALIDMAC, 0 },
- { "fvalidntfs", CONTROL_FLAG, RTF_FVALIDNTFS, 0 },
- { "g", CONTROL_DESTINATION, RTF_G, 0 },
- { "gcw", CONTROL_VALUE, RTF_GCW, 0 },
- { "generator", CONTROL_DESTINATION, RTF_GENERATOR, 0 },
- { "green", CONTROL_VALUE, RTF_GREEN, 0 },
- { "grfdocevents", CONTROL_VALUE, RTF_GRFDOCEVENTS, 0 },
- { "gridtbl", CONTROL_DESTINATION, RTF_GRIDTBL, 0 },
- { "gutter", CONTROL_VALUE, RTF_GUTTER, 0 },
- { "gutterprl", CONTROL_FLAG, RTF_GUTTERPRL, 0 },
- { "guttersxn", CONTROL_VALUE, RTF_GUTTERSXN, 0 },
- { "header", CONTROL_DESTINATION, RTF_HEADER, 0 },
- { "headerf", CONTROL_DESTINATION, RTF_HEADERF, 0 },
- { "headerl", CONTROL_DESTINATION, RTF_HEADERL, 0 },
- { "headerr", CONTROL_DESTINATION, RTF_HEADERR, 0 },
- { "headery", CONTROL_VALUE, RTF_HEADERY, 720 },
- { "hich", CONTROL_FLAG, RTF_HICH, 0 },
- { "highlight", CONTROL_VALUE, RTF_HIGHLIGHT, 0 },
- { "hl", CONTROL_DESTINATION, RTF_HL, 0 },
- { "hlfr", CONTROL_DESTINATION, RTF_HLFR, 0 },
- { "hlinkbase", CONTROL_DESTINATION, RTF_HLINKBASE, 0 },
- { "hlloc", CONTROL_DESTINATION, RTF_HLLOC, 0 },
- { "hlsrc", CONTROL_DESTINATION, RTF_HLSRC, 0 },
- { "horzdoc", CONTROL_FLAG, RTF_HORZDOC, 0 },
- { "horzsect", CONTROL_FLAG, RTF_HORZSECT, 0 },
- { "horzvert", CONTROL_VALUE, RTF_HORZVERT, 0 },
- { "hr", CONTROL_VALUE, RTF_HR, 0 },
- { "hres", CONTROL_VALUE, RTF_HRES, 0 },
- { "hrule", CONTROL_FLAG, RTF_HRULE, 0 },
- { "hsv", CONTROL_DESTINATION, RTF_HSV, 0 },
- { "htmautsp", CONTROL_FLAG, RTF_HTMAUTSP, 0 },
- { "htmlbase", CONTROL_FLAG, RTF_HTMLBASE, 0 },
- { "htmlrtf", CONTROL_TOGGLE, RTF_HTMLRTF, 1 },
- { "htmltag", CONTROL_DESTINATION, RTF_HTMLTAG, 0 },
- { "hwelev", CONTROL_FLAG, RTF_HWELEV, 0 },
- { "hyphauto", CONTROL_TOGGLE, RTF_HYPHAUTO, 1 },
- { "hyphcaps", CONTROL_TOGGLE, RTF_HYPHCAPS, 1 },
- { "hyphconsec", CONTROL_VALUE, RTF_HYPHCONSEC, 0 },
- { "hyphhotz", CONTROL_VALUE, RTF_HYPHHOTZ, 0 },
- { "hyphpar", CONTROL_TOGGLE, RTF_HYPHPAR, 1 },
- { "i", CONTROL_TOGGLE, RTF_I, 1 },
- { "id", CONTROL_VALUE, RTF_ID, 0 },
- { "ignoremixedcontent", CONTROL_VALUE, RTF_IGNOREMIXEDCONTENT, 0 },
- { "ilfomacatclnup", CONTROL_VALUE, RTF_ILFOMACATCLNUP, 0 },
- { "ilvl", CONTROL_VALUE, RTF_ILVL, 0 },
- { "impr", CONTROL_TOGGLE, RTF_IMPR, 1 },
- { "indmirror", CONTROL_FLAG, RTF_INDMIRROR, 0 },
- { "indrlsweleven", CONTROL_FLAG, RTF_INDRLSWELEVEN, 0 },
- { "info", CONTROL_DESTINATION, RTF_INFO, 0 },
- { "insrsid", CONTROL_VALUE, RTF_INSRSID, 0 },
- { "intbl", CONTROL_FLAG, RTF_INTBL, 0 },
- { "ipgp", CONTROL_VALUE, RTF_IPGP, 0 },
- { "irowband", CONTROL_VALUE, RTF_IROWBAND, 0 },
- { "irow", CONTROL_VALUE, RTF_IROW, 0 },
- { "itap", CONTROL_VALUE, RTF_ITAP, 1 },
- { "ixe", CONTROL_FLAG, RTF_IXE, 0 },
- { "jcompress", CONTROL_FLAG, RTF_JCOMPRESS, 0 },
- { "jexpand", CONTROL_FLAG, RTF_JEXPAND, 0 },
- { "jis", CONTROL_FLAG, RTF_JIS, 0 },
- { "jpegblip", CONTROL_FLAG, RTF_JPEGBLIP, 0 },
- { "jsksu", CONTROL_FLAG, RTF_JSKSU, 0 },
- { "keep", CONTROL_FLAG, RTF_KEEP, 0 },
- { "keepn", CONTROL_FLAG, RTF_KEEPN, 0 },
- { "kerning", CONTROL_VALUE, RTF_KERNING, 0 },
- { "keycode", CONTROL_DESTINATION, RTF_KEYCODE, 0 },
- { "keywords", CONTROL_DESTINATION, RTF_KEYWORDS, 0 },
- { "krnprsnet", CONTROL_FLAG, RTF_KRNPRSNET, 0 },
- { "ksulang", CONTROL_VALUE, RTF_KSULANG, 0 },
- { "jclisttab", CONTROL_FLAG, RTF_JCLISTTAB, 0 },
- { "landscape", CONTROL_FLAG, RTF_LANDSCAPE, 0 },
- { "lang", CONTROL_VALUE, RTF_LANG, 0 },
- { "langfe", CONTROL_VALUE, RTF_LANGFE, 0 },
- { "langfenp", CONTROL_VALUE, RTF_LANGFENP, 0 },
- { "langnp", CONTROL_VALUE, RTF_LANGNP, 0 },
- { "lastrow", CONTROL_FLAG, RTF_LASTROW, 0 },
- { "latentstyles", CONTROL_DESTINATION, RTF_LATENTSTYLES, 0 },
- { "lbr", CONTROL_VALUE, RTF_LBR, 0 },
- { "lchars", CONTROL_DESTINATION, RTF_LCHARS, 0 },
- { "ldblquote", CONTROL_SYMBOL, RTF_LDBLQUOTE, 0 },
- { "level", CONTROL_VALUE, RTF_LEVEL, 0 },
- { "levelfollow", CONTROL_VALUE, RTF_LEVELFOLLOW, 0 },
- { "levelindent", CONTROL_VALUE, RTF_LEVELINDENT, 0 },
- { "leveljc", CONTROL_VALUE, RTF_LEVELJC, 0 },
- { "leveljcn", CONTROL_VALUE, RTF_LEVELJCN, 0 },
- { "levellegal", CONTROL_VALUE, RTF_LEVELLEGAL, 0 },
- { "levelnfc", CONTROL_VALUE, RTF_LEVELNFC, 0 },
- { "levelnfcn", CONTROL_VALUE, RTF_LEVELNFCN, 0 },
- { "levelnorestart", CONTROL_VALUE, RTF_LEVELNORESTART, 0 },
- { "levelnumbers", CONTROL_DESTINATION, RTF_LEVELNUMBERS, 0 },
- { "levelold", CONTROL_VALUE, RTF_LEVELOLD, 0 },
- { "levelpicture", CONTROL_VALUE, RTF_LEVELPICTURE, 0 },
- { "levelpicturenosize", CONTROL_FLAG, RTF_LEVELPICTURENOSIZE, 0 },
- { "levelprev", CONTROL_VALUE, RTF_LEVELPREV, 0 },
- { "levelprevspace", CONTROL_VALUE, RTF_LEVELPREVSPACE, 0 },
- { "levelspace", CONTROL_VALUE, RTF_LEVELSPACE, 0 },
- { "levelstartat", CONTROL_VALUE, RTF_LEVELSTARTAT, 0 },
- { "leveltemplateid", CONTROL_VALUE, RTF_LEVELTEMPLATEID, 0 },
- { "leveltext", CONTROL_DESTINATION, RTF_LEVELTEXT, 0 },
- { "lfolevel", CONTROL_DESTINATION, RTF_LFOLEVEL, 0 },
- { "li", CONTROL_VALUE, RTF_LI, 0 },
- { "line", CONTROL_SYMBOL, RTF_LINE, 0 },
- { "linebetcol", CONTROL_FLAG, RTF_LINEBETCOL, 0 },
- { "linecont", CONTROL_FLAG, RTF_LINECONT, 0 },
- { "linemod", CONTROL_VALUE, RTF_LINEMOD, 1 },
- { "lineppage", CONTROL_FLAG, RTF_LINEPPAGE, 0 },
- { "linerestart", CONTROL_FLAG, RTF_LINERESTART, 0 },
- { "linestart", CONTROL_VALUE, RTF_LINESTART, 1 },
- { "linestarts", CONTROL_VALUE, RTF_LINESTARTS, 1 },
- { "linex", CONTROL_VALUE, RTF_LINEX, 360 },
- { "linkself", CONTROL_FLAG, RTF_LINKSELF, 0 },
- { "linkstyles", CONTROL_FLAG, RTF_LINKSTYLES, 0 },
- { "linkval", CONTROL_DESTINATION, RTF_LINKVAL, 0 },
- { "lin", CONTROL_VALUE, RTF_LIN, 0 },
- { "lisa", CONTROL_VALUE, RTF_LISA, 0 },
- { "lisb", CONTROL_VALUE, RTF_LISB, 0 },
- { "list", CONTROL_DESTINATION, RTF_LIST, 0 },
- { "listhybrid", CONTROL_FLAG, RTF_LISTHYBRID, 0 },
- { "listid", CONTROL_VALUE, RTF_LISTID, 0 },
- { "listlevel", CONTROL_DESTINATION, RTF_LISTLEVEL, 0 },
- { "listname", CONTROL_DESTINATION, RTF_LISTNAME, 0 },
- { "listoverride", CONTROL_DESTINATION, RTF_LISTOVERRIDE, 0 },
- { "listoverridecount", CONTROL_VALUE, RTF_LISTOVERRIDECOUNT, 0 },
- { "listoverrideformat", CONTROL_VALUE, RTF_LISTOVERRIDEFORMAT, 0 },
- { "listoverridestartat", CONTROL_FLAG, RTF_LISTOVERRIDESTARTAT, 0 },
- { "listoverridetable", CONTROL_DESTINATION, RTF_LISTOVERRIDETABLE, 0 },
- { "listpicture", CONTROL_DESTINATION, RTF_LISTPICTURE, 0 },
- { "listrestarthdn", CONTROL_VALUE, RTF_LISTRESTARTHDN, 0 },
- { "listsimple", CONTROL_VALUE, RTF_LISTSIMPLE, 0 },
- { "liststyleid", CONTROL_VALUE, RTF_LISTSTYLEID, 0 },
- { "liststylename", CONTROL_DESTINATION, RTF_LISTSTYLENAME, 0 },
- { "listtable", CONTROL_DESTINATION, RTF_LISTTABLE, 0 },
- { "listtemplateid", CONTROL_VALUE, RTF_LISTTEMPLATEID, 0 },
- { "listtext", CONTROL_DESTINATION, RTF_LISTTEXT, 0 },
- { "lnbrkrule", CONTROL_FLAG, RTF_LNBRKRULE, 0 },
- { "lndscpsxn", CONTROL_FLAG, RTF_LNDSCPSXN, 0 },
- { "lnongrid", CONTROL_FLAG, RTF_LNONGRID, 0 },
- { "loch", CONTROL_FLAG, RTF_LOCH, 0 },
- { "lquote", CONTROL_SYMBOL, RTF_LQUOTE, 0 },
- { "ls", CONTROL_VALUE, RTF_LS, 0 },
- { "lsdlocked", CONTROL_VALUE, RTF_LSDLOCKED, 0 },
- { "lsdlockeddef", CONTROL_VALUE, RTF_LSDLOCKEDDEF, 0 },
- { "lsdlockedexcept", CONTROL_DESTINATION, RTF_LSDLOCKEDEXCEPT, 0 },
- { "lsdpriority", CONTROL_VALUE, RTF_LSDPRIORITY, 0 },
- { "lsdprioritydef", CONTROL_VALUE, RTF_LSDPRIORITYDEF, 0 },
- { "lsdqformat", CONTROL_VALUE, RTF_LSDQFORMAT, 0 },
- { "lsdqformatdef", CONTROL_VALUE, RTF_LSDQFORMATDEF, 0 },
- { "lsdsemihidden", CONTROL_VALUE, RTF_LSDSEMIHIDDEN, 0 },
- { "lsdsemihiddendef", CONTROL_VALUE, RTF_LSDSEMIHIDDENDEF, 0 },
- { "lsdstimax", CONTROL_VALUE, RTF_LSDSTIMAX, 0 },
- { "lsdunhideused", CONTROL_VALUE, RTF_LSDUNHIDEUSED, 0 },
- { "lsdunhideuseddef", CONTROL_VALUE, RTF_LSDUNHIDEUSEDDEF, 0 },
- { "ltrch", CONTROL_FLAG, RTF_LTRCH, 0 },
- { "ltrdoc", CONTROL_FLAG, RTF_LTRDOC, 0 },
- { "ltrmark", CONTROL_SYMBOL, RTF_LTRMARK, 0 },
- { "ltrpar", CONTROL_FLAG, RTF_LTRPAR, 0 },
- { "ltrrow", CONTROL_FLAG, RTF_LTRROW, 0 },
- { "ltrsect", CONTROL_FLAG, RTF_LTRSECT, 0 },
- { "lvltentative", CONTROL_FLAG, RTF_LVLTENTATIVE, 0 },
- { "lytcalctblwd", CONTROL_FLAG, RTF_LYTCALCTBLWD, 0 },
- { "lytexcttp", CONTROL_FLAG, RTF_LYTEXCTTP, 0 },
- { "lytprtmet", CONTROL_FLAG, RTF_LYTPRTMET, 0 },
- { "lyttblrtgr", CONTROL_FLAG, RTF_LYTTBLRTGR, 0 },
- { "mac", CONTROL_FLAG, RTF_MAC, 0 },
- { "macc", CONTROL_DESTINATION, RTF_MACC, 0 },
- { "maccPr", CONTROL_DESTINATION, RTF_MACCPR, 0 },
- { "macpict", CONTROL_FLAG, RTF_MACPICT, 0 },
- { "mailmerge", CONTROL_DESTINATION, RTF_MAILMERGE, 0 },
- { "makebackup", CONTROL_FLAG, RTF_MAKEBACKUP, 0 },
- { "maln", CONTROL_DESTINATION, RTF_MALN, 0 },
- { "malnScr", CONTROL_DESTINATION, RTF_MALNSCR, 0 },
- { "manager", CONTROL_DESTINATION, RTF_MANAGER, 0 },
- { "margb", CONTROL_VALUE, RTF_MARGB, 1440 },
- { "margbsxn", CONTROL_VALUE, RTF_MARGBSXN, 0 },
- { "margl", CONTROL_VALUE, RTF_MARGL, 1800 },
- { "marglsxn", CONTROL_VALUE, RTF_MARGLSXN, 0 },
- { "margmirror", CONTROL_FLAG, RTF_MARGMIRROR, 0 },
- { "margmirsxn", CONTROL_FLAG, RTF_MARGMIRSXN, 0 },
- { "margPr", CONTROL_DESTINATION, RTF_MARGPR, 0 },
- { "margr", CONTROL_VALUE, RTF_MARGR, 1800 },
- { "margrsxn", CONTROL_VALUE, RTF_MARGRSXN, 0 },
- { "margSz", CONTROL_VALUE, RTF_MARGSZ, 0 },
- { "margt", CONTROL_VALUE, RTF_MARGT, 1440 },
- { "margtsxn", CONTROL_VALUE, RTF_MARGTSXN, 0 },
- { "mbar", CONTROL_DESTINATION, RTF_MBAR, 0 },
- { "mbarPr", CONTROL_DESTINATION, RTF_MBARPR, 0 },
- { "mbaseJc", CONTROL_DESTINATION, RTF_MBASEJC, 0 },
- { "mbegChr", CONTROL_DESTINATION, RTF_MBEGCHR, 0 },
- { "mborderBox", CONTROL_DESTINATION, RTF_MBORDERBOX, 0 },
- { "mborderBoxPr", CONTROL_DESTINATION, RTF_MBORDERBOXPR, 0 },
- { "mbox", CONTROL_DESTINATION, RTF_MBOX, 0 },
- { "mboxPr", CONTROL_DESTINATION, RTF_MBOXPR, 0 },
- { "mbrk", CONTROL_VALUE, RTF_MBRK, 0 },
- { "mbrkBin", CONTROL_VALUE, RTF_MBRKBIN, 0 },
- { "mbrkBinSub", CONTROL_VALUE, RTF_MBRKBINSUB, 0 },
- { "mcGp", CONTROL_VALUE, RTF_MCGP, 0 },
- { "mcGpRule", CONTROL_VALUE, RTF_MCGPRULE, 0 },
- { "mchr", CONTROL_DESTINATION, RTF_MCHR, 0 },
- { "mcount", CONTROL_DESTINATION, RTF_MCOUNT, 0 },
- { "mcSp", CONTROL_VALUE, RTF_MCSP, 0 },
- { "mctrlPr", CONTROL_DESTINATION, RTF_MCTRLPR, 0 },
- { "md", CONTROL_DESTINATION, RTF_MD, 0 },
- { "mdefJc", CONTROL_VALUE, RTF_MDEFJC, 0 },
- { "mdeg", CONTROL_DESTINATION, RTF_MDEG, 0 },
- { "mdegHide", CONTROL_DESTINATION, RTF_MDEGHIDE, 0 },
- { "mden", CONTROL_DESTINATION, RTF_MDEN, 0 },
- { "mdiff", CONTROL_DESTINATION, RTF_MDIFF, 0 },
- { "mdiffSty", CONTROL_VALUE, RTF_MDIFFSTY, 0 },
- { "mdispdef", CONTROL_VALUE, RTF_MDISPDEF, 1 },
- { "mdPr", CONTROL_DESTINATION, RTF_MDPR, 0 },
- { "me", CONTROL_DESTINATION, RTF_ME, 0 },
- { "mendChr", CONTROL_DESTINATION, RTF_MENDCHR, 0 },
- { "meqArr", CONTROL_DESTINATION, RTF_MEQARR, 0 },
- { "meqArrPr", CONTROL_DESTINATION, RTF_MEQARRPR, 0 },
- { "mf", CONTROL_DESTINATION, RTF_MF, 0 },
- { "mfName", CONTROL_DESTINATION, RTF_MFNAME, 0 },
- { "mfPr", CONTROL_DESTINATION, RTF_MFPR, 0 },
- { "mfunc", CONTROL_DESTINATION, RTF_MFUNC, 0 },
- { "mfuncPr", CONTROL_DESTINATION, RTF_MFUNCPR, 0 },
- { "mgroupChr", CONTROL_DESTINATION, RTF_MGROUPCHR, 0 },
- { "mgroupChrPr", CONTROL_DESTINATION, RTF_MGROUPCHRPR, 0 },
- { "mgrow", CONTROL_DESTINATION, RTF_MGROW, 0 },
- { "mhideBot", CONTROL_DESTINATION, RTF_MHIDEBOT, 0 },
- { "mhideLeft", CONTROL_DESTINATION, RTF_MHIDELEFT, 0 },
- { "mhideRight", CONTROL_DESTINATION, RTF_MHIDERIGHT, 0 },
- { "mhideTop", CONTROL_DESTINATION, RTF_MHIDETOP, 0 },
- { "mhtmltag", CONTROL_DESTINATION, RTF_MHTMLTAG, 0 },
- { "min", CONTROL_VALUE, RTF_MIN, 0 },
- { "minterSp", CONTROL_VALUE, RTF_MINTERSP, 0 },
- { "mintLim", CONTROL_VALUE, RTF_MINTLIM, 0 },
- { "mintraSp", CONTROL_VALUE, RTF_MINTRASP, 0 },
- { "mjc", CONTROL_VALUE, RTF_MJC, 0 },
- { "mlim", CONTROL_DESTINATION, RTF_MLIM, 0 },
- { "mlimloc", CONTROL_DESTINATION, RTF_MLIMLOC, 0 },
- { "mlimLoc", CONTROL_DESTINATION, RTF_MLIMLOC, 0 },
- { "mlimlow", CONTROL_DESTINATION, RTF_MLIMLOW, 0 },
- { "mlimLow", CONTROL_DESTINATION, RTF_MLIMLOW, 0 },
- { "mlimlowPr", CONTROL_DESTINATION, RTF_MLIMLOWPR, 0 },
- { "mlimLowPr", CONTROL_DESTINATION, RTF_MLIMLOWPR, 0 },
- { "mlimupp", CONTROL_DESTINATION, RTF_MLIMUPP, 0 },
- { "mlimUpp", CONTROL_DESTINATION, RTF_MLIMUPP, 0 },
- { "mlimuppPr", CONTROL_DESTINATION, RTF_MLIMUPPPR, 0 },
- { "mlimUppPr", CONTROL_DESTINATION, RTF_MLIMUPPPR, 0 },
- { "mlit", CONTROL_FLAG, RTF_MLIT, 0 },
- { "mlMargin", CONTROL_VALUE, RTF_MLMARGIN, 0 },
- { "mm", CONTROL_DESTINATION, RTF_MM, 0 },
- { "mmaddfieldname", CONTROL_DESTINATION, RTF_MMADDFIELDNAME, 0 },
- { "mmath", CONTROL_DESTINATION, RTF_MMATH, 0 },
- { "mmathFont", CONTROL_VALUE, RTF_MMATHFONT, 0 },
- { "mmathPict", CONTROL_DESTINATION, RTF_MMATHPICT, 0 },
- { "mmathPr", CONTROL_DESTINATION, RTF_MMATHPR, 0 },
- { "mmattach", CONTROL_FLAG, RTF_MMATTACH, 0 },
- { "mmaxdist", CONTROL_DESTINATION, RTF_MMAXDIST, 0 },
- { "mmblanklines", CONTROL_FLAG, RTF_MMBLANKLINES, 0 },
- { "mmc", CONTROL_DESTINATION, RTF_MMC, 0 },
- { "mmcJc", CONTROL_DESTINATION, RTF_MMCJC, 0 },
- { "mmconnectstr", CONTROL_DESTINATION, RTF_MMCONNECTSTR, 0 },
- { "mmconnectstrdata", CONTROL_DESTINATION, RTF_MMCONNECTSTRDATA, 0 },
- { "mmcPr", CONTROL_DESTINATION, RTF_MMCPR, 0 },
- { "mmcs", CONTROL_DESTINATION, RTF_MMCS, 0 },
- { "mmdatasource", CONTROL_DESTINATION, RTF_MMDATASOURCE, 0 },
- { "mmdatatypeaccess", CONTROL_FLAG, RTF_MMDATATYPEACCESS, 0 },
- { "mmdatatypeexcel", CONTROL_FLAG, RTF_MMDATATYPEEXCEL, 0 },
- { "mmdatatypefile", CONTROL_FLAG, RTF_MMDATATYPEFILE, 0 },
- { "mmdatatypeodbc", CONTROL_FLAG, RTF_MMDATATYPEODBC, 0 },
- { "mmdatatypeodso", CONTROL_FLAG, RTF_MMDATATYPEODSO, 0 },
- { "mmdatatypeqt", CONTROL_FLAG, RTF_MMDATATYPEQT, 0 },
- { "mmdefaultsql", CONTROL_FLAG, RTF_MMDEFAULTSQL, 0 },
- { "mmdestemail", CONTROL_FLAG, RTF_MMDESTEMAIL, 0 },
- { "mmdestfax", CONTROL_FLAG, RTF_MMDESTFAX, 0 },
- { "mmdestnewdoc", CONTROL_FLAG, RTF_MMDESTNEWDOC, 0 },
- { "mmdestprinter", CONTROL_FLAG, RTF_MMDESTPRINTER, 0 },
- { "mmerrors", CONTROL_VALUE, RTF_MMERRORS, 0 },
- { "mmfttypeaddress", CONTROL_FLAG, RTF_MMFTTYPEADDRESS, 0 },
- { "mmfttypebarcode", CONTROL_FLAG, RTF_MMFTTYPEBARCODE, 0 },
- { "mmfttypedbcolumn", CONTROL_FLAG, RTF_MMFTTYPEDBCOLUMN, 0 },
- { "mmfttypemapped", CONTROL_FLAG, RTF_MMFTTYPEMAPPED, 0 },
- { "mmfttypenull", CONTROL_FLAG, RTF_MMFTTYPENULL, 0 },
- { "mmfttypesalutation", CONTROL_FLAG, RTF_MMFTTYPESALUTATION, 0 },
- { "mmheadersource", CONTROL_DESTINATION, RTF_MMHEADERSOURCE, 0 },
- { "mmjdsotype", CONTROL_VALUE, RTF_MMJDSOTYPE, 0 },
- { "mmlinktoquery", CONTROL_FLAG, RTF_MMLINKTOQUERY, 0 },
- { "mmmailsubject", CONTROL_DESTINATION, RTF_MMMAILSUBJECT, 0 },
- { "mmmaintypecatalog", CONTROL_FLAG, RTF_MMMAINTYPECATALOG, 0 },
- { "mmmaintypeemail", CONTROL_FLAG, RTF_MMMAINTYPEEMAIL, 0 },
- { "mmmaintypeenvelopes", CONTROL_FLAG, RTF_MMMAINTYPEENVELOPES, 0 },
- { "mmmaintypefax", CONTROL_FLAG, RTF_MMMAINTYPEFAX, 0 },
- { "mmmaintypelabels", CONTROL_FLAG, RTF_MMMAINTYPELABELS, 0 },
- { "mmmaintypeletters", CONTROL_FLAG, RTF_MMMAINTYPELETTERS, 0 },
- { "mmodso", CONTROL_DESTINATION, RTF_MMODSO, 0 },
- { "mmodsoactive", CONTROL_VALUE, RTF_MMODSOACTIVE, 0 },
- { "mmodsocoldelim", CONTROL_VALUE, RTF_MMODSOCOLDELIM, 0 },
- { "mmodsocolumn", CONTROL_VALUE, RTF_MMODSOCOLUMN, 0 },
- { "mmodsodynaddr", CONTROL_VALUE, RTF_MMODSODYNADDR, 0 },
- { "mmodsofhdr", CONTROL_VALUE, RTF_MMODSOFHDR, 0 },
- { "mmodsofilter", CONTROL_DESTINATION, RTF_MMODSOFILTER, 0 },
- { "mmodsofldmpdata", CONTROL_DESTINATION, RTF_MMODSOFLDMPDATA, 0 },
- { "mmodsofmcolumn", CONTROL_VALUE, RTF_MMODSOFMCOLUMN, 0 },
- { "mmodsohash", CONTROL_VALUE, RTF_MMODSOHASH, 0 },
- { "mmodsolid", CONTROL_VALUE, RTF_MMODSOLID, 0 },
- { "mmodsomappedname", CONTROL_DESTINATION, RTF_MMODSOMAPPEDNAME, 0 },
- { "mmodsoname", CONTROL_DESTINATION, RTF_MMODSONAME, 0 },
- { "mmodsorecipdata", CONTROL_DESTINATION, RTF_MMODSORECIPDATA, 0 },
- { "mmodsosort", CONTROL_DESTINATION, RTF_MMODSOSORT, 0 },
- { "mmodsosrc", CONTROL_DESTINATION, RTF_MMODSOSRC, 0 },
- { "mmodsotable", CONTROL_DESTINATION, RTF_MMODSOTABLE, 0 },
- { "mmodsoudl", CONTROL_DESTINATION, RTF_MMODSOUDL, 0 },
- { "mmodsoudldata", CONTROL_DESTINATION, RTF_MMODSOUDLDATA, 0 },
- { "mmodsouniquetag", CONTROL_DESTINATION, RTF_MMODSOUNIQUETAG, 0 },
- { "mmPr", CONTROL_DESTINATION, RTF_MMPR, 0 },
- { "mmquery", CONTROL_DESTINATION, RTF_MMQUERY, 0 },
- { "mmr", CONTROL_DESTINATION, RTF_MMR, 0 },
- { "mmreccur", CONTROL_VALUE, RTF_MMRECCUR, 0 },
- { "mmshowdata", CONTROL_FLAG, RTF_MMSHOWDATA, 0 },
- { "mnary", CONTROL_DESTINATION, RTF_MNARY, 0 },
- { "mnaryLim", CONTROL_VALUE, RTF_MNARYLIM, 0 },
- { "mnaryPr", CONTROL_DESTINATION, RTF_MNARYPR, 0 },
- { "mnoBreak", CONTROL_DESTINATION, RTF_MNOBREAK, 0 },
- { "mnor", CONTROL_FLAG, RTF_MNOR, 0 },
- { "mnum", CONTROL_DESTINATION, RTF_MNUM, 0 },
- { "mo", CONTROL_VALUE, RTF_MO, 0 },
- { "mobjDist", CONTROL_DESTINATION, RTF_MOBJDIST, 0 },
- { "moMath", CONTROL_DESTINATION, RTF_MOMATH, 0 },
- { "moMathPara", CONTROL_DESTINATION, RTF_MOMATHPARA, 0 },
- { "moMathParaPr", CONTROL_DESTINATION, RTF_MOMATHPARAPR, 0 },
- { "mopEmu", CONTROL_DESTINATION, RTF_MOPEMU, 0 },
- { "mphant", CONTROL_DESTINATION, RTF_MPHANT, 0 },
- { "mphantPr", CONTROL_DESTINATION, RTF_MPHANTPR, 0 },
- { "mplcHide", CONTROL_DESTINATION, RTF_MPLCHIDE, 0 },
- { "mpos", CONTROL_DESTINATION, RTF_MPOS, 0 },
- { "mpostSp", CONTROL_VALUE, RTF_MPOSTSP, 0 },
- { "mpreSp", CONTROL_VALUE, RTF_MPRESP, 0 },
- { "mr", CONTROL_DESTINATION, RTF_MR, 0 },
- { "mrad", CONTROL_DESTINATION, RTF_MRAD, 0 },
- { "mradPr", CONTROL_DESTINATION, RTF_MRADPR, 0 },
- { "mrMargin", CONTROL_VALUE, RTF_MRMARGIN, 0 },
- { "mrPr", CONTROL_DESTINATION, RTF_MRPR, 0 },
- { "mrSp", CONTROL_VALUE, RTF_MRSP, 0 },
- { "mrSpRule", CONTROL_VALUE, RTF_MRSPRULE, 0 },
- { "mscr", CONTROL_VALUE, RTF_MSCR, 0 },
- { "msepChr", CONTROL_DESTINATION, RTF_MSEPCHR, 0 },
- { "mshow", CONTROL_DESTINATION, RTF_MSHOW, 0 },
- { "mshp", CONTROL_DESTINATION, RTF_MSHP, 0 },
- { "msmallFrac", CONTROL_VALUE, RTF_MSMALLFRAC, 0 },
- { "msmcap", CONTROL_FLAG, RTF_MSMCAP, 0 },
- { "msPre", CONTROL_DESTINATION, RTF_MSPRE, 0 },
- { "msPrePr", CONTROL_DESTINATION, RTF_MSPREPR, 0 },
- { "msSub", CONTROL_DESTINATION, RTF_MSSUB, 0 },
- { "msSubPr", CONTROL_DESTINATION, RTF_MSSUBPR, 0 },
- { "msSubSup", CONTROL_DESTINATION, RTF_MSSUBSUP, 0 },
- { "msSubSupPr", CONTROL_DESTINATION, RTF_MSSUBSUPPR, 0 },
- { "msSup", CONTROL_DESTINATION, RTF_MSSUP, 0 },
- { "msSupPr", CONTROL_DESTINATION, RTF_MSSUPPR, 0 },
- { "mstrikeBLTR", CONTROL_DESTINATION, RTF_MSTRIKEBLTR, 0 },
- { "mstrikeH", CONTROL_DESTINATION, RTF_MSTRIKEH, 0 },
- { "mstrikeTLBR", CONTROL_DESTINATION, RTF_MSTRIKETLBR, 0 },
- { "mstrikeV", CONTROL_DESTINATION, RTF_MSTRIKEV, 0 },
- { "msty", CONTROL_VALUE, RTF_MSTY, 0 },
- { "msub", CONTROL_DESTINATION, RTF_MSUB, 0 },
- { "msubHide", CONTROL_DESTINATION, RTF_MSUBHIDE, 0 },
- { "msup", CONTROL_DESTINATION, RTF_MSUP, 0 },
- { "msupHide", CONTROL_DESTINATION, RTF_MSUPHIDE, 0 },
- { "mtransp", CONTROL_DESTINATION, RTF_MTRANSP, 0 },
- { "mtype", CONTROL_DESTINATION, RTF_MTYPE, 0 },
- { "muser", CONTROL_FLAG, RTF_MUSER, 0 },
- { "mvauth", CONTROL_VALUE, RTF_MVAUTH, 0 },
- { "mvdate", CONTROL_VALUE, RTF_MVDATE, 0 },
- { "mvertJc", CONTROL_DESTINATION, RTF_MVERTJC, 0 },
- { "mvf", CONTROL_FLAG, RTF_MVF, 0 },
- { "mvfmf", CONTROL_DESTINATION, RTF_MVFMF, 0 },
- { "mvfml", CONTROL_DESTINATION, RTF_MVFML, 0 },
- { "mvt", CONTROL_FLAG, RTF_MVT, 0 },
- { "mvtof", CONTROL_DESTINATION, RTF_MVTOF, 0 },
- { "mvtol", CONTROL_DESTINATION, RTF_MVTOL, 0 },
- { "mwrapIndent", CONTROL_VALUE, RTF_MWRAPINDENT, 1440 },
- { "mwrapRight", CONTROL_VALUE, RTF_MWRAPRIGHT, 0 },
- { "mzeroAsc", CONTROL_DESTINATION, RTF_MZEROASC, 0 },
- { "mzeroDesc", CONTROL_DESTINATION, RTF_MZERODESC, 0 },
- { "mzeroWid", CONTROL_DESTINATION, RTF_MZEROWID, 0 },
- { "nestcell", CONTROL_SYMBOL, RTF_NESTCELL, 0 },
- { "nestrow", CONTROL_SYMBOL, RTF_NESTROW, 0 },
- { "nesttableprops", CONTROL_DESTINATION, RTF_NESTTABLEPROPS, 0 },
- { "newtblstyruls", CONTROL_FLAG, RTF_NEWTBLSTYRULS, 0 },
- { "nextfile", CONTROL_DESTINATION, RTF_NEXTFILE, 0 },
- { "noafcnsttbl", CONTROL_FLAG, RTF_NOAFCNSTTBL, 0 },
- { "nobrkwrptbl", CONTROL_FLAG, RTF_NOBRKWRPTBL, 0 },
- { "nocolbal", CONTROL_FLAG, RTF_NOCOLBAL, 0 },
- { "nocompatoptions", CONTROL_FLAG, RTF_NOCOMPATOPTIONS, 0 },
- { "nocwrap", CONTROL_FLAG, RTF_NOCWRAP, 0 },
- { "nocxsptable", CONTROL_FLAG, RTF_NOCXSPTABLE, 0 },
- { "noextrasprl", CONTROL_FLAG, RTF_NOEXTRASPRL, 0 },
- { "nofchars", CONTROL_VALUE, RTF_NOFCHARS, 0 },
- { "nofcharsws", CONTROL_VALUE, RTF_NOFCHARSWS, 0 },
- { "nofeaturethrottle", CONTROL_FLAG, RTF_NOFEATURETHROTTLE, 0 },
- { "nofpages", CONTROL_VALUE, RTF_NOFPAGES, 0 },
- { "nofwords", CONTROL_VALUE, RTF_NOFWORDS, 0 },
- { "nogrowautofit", CONTROL_FLAG, RTF_NOGROWAUTOFIT, 0 },
- { "noindnmbrts", CONTROL_FLAG, RTF_NOINDNMBRTS, 0 },
- { "nojkernpunct", CONTROL_FLAG, RTF_NOJKERNPUNCT, 0 },
- { "nolead", CONTROL_FLAG, RTF_NOLEAD, 0 },
- { "noline", CONTROL_FLAG, RTF_NOLINE, 0 },
- { "nolnhtadjtbl", CONTROL_FLAG, RTF_NOLNHTADJTBL, 0 },
- { "nonesttables", CONTROL_DESTINATION, RTF_NONESTTABLES, 0 },
- { "nonshppict", CONTROL_FLAG, RTF_NONSHPPICT, 0 },
- { "nooverflow", CONTROL_FLAG, RTF_NOOVERFLOW, 0 },
- { "noproof", CONTROL_FLAG, RTF_NOPROOF, 0 },
- { "noqfpromote", CONTROL_FLAG, RTF_NOQFPROMOTE, 0 },
- { "nosectexpand", CONTROL_FLAG, RTF_NOSECTEXPAND, 0 },
- { "nosnaplinegrid", CONTROL_FLAG, RTF_NOSNAPLINEGRID, 0 },
- { "nospaceforul", CONTROL_FLAG, RTF_NOSPACEFORUL, 0 },
- { "nosupersub", CONTROL_FLAG, RTF_NOSUPERSUB, 0 },
- { "notabind", CONTROL_FLAG, RTF_NOTABIND, 0 },
- { "notbrkcnstfrctbl", CONTROL_FLAG, RTF_NOTBRKCNSTFRCTBL, 0 },
- { "notcvasp", CONTROL_FLAG, RTF_NOTCVASP, 0 },
- { "notvatxbx", CONTROL_FLAG, RTF_NOTVATXBX, 0 },
- { "nouicompat", CONTROL_FLAG, RTF_NOUICOMPAT, 0 },
- { "noultrlspc", CONTROL_FLAG, RTF_NOULTRLSPC, 0 },
- { "nowidctlpar", CONTROL_FLAG, RTF_NOWIDCTLPAR, 0 },
- { "nowrap", CONTROL_FLAG, RTF_NOWRAP, 0 },
- { "nowwrap", CONTROL_FLAG, RTF_NOWWRAP, 0 },
- { "noxlattoyen", CONTROL_FLAG, RTF_NOXLATTOYEN, 0 },
- { "objalias", CONTROL_DESTINATION, RTF_OBJALIAS, 0 },
- { "objalign", CONTROL_VALUE, RTF_OBJALIGN, 0 },
- { "objattph", CONTROL_FLAG, RTF_OBJATTPH, 0 },
- { "objautlink", CONTROL_FLAG, RTF_OBJAUTLINK, 0 },
- { "objclass", CONTROL_DESTINATION, RTF_OBJCLASS, 0 },
- { "objcropb", CONTROL_VALUE, RTF_OBJCROPB, 0 },
- { "objcropl", CONTROL_VALUE, RTF_OBJCROPL, 0 },
- { "objcropr", CONTROL_VALUE, RTF_OBJCROPR, 0 },
- { "objcropt", CONTROL_VALUE, RTF_OBJCROPT, 0 },
- { "objdata", CONTROL_DESTINATION, RTF_OBJDATA, 0 },
- { "object", CONTROL_DESTINATION, RTF_OBJECT, 0 },
- { "objemb", CONTROL_FLAG, RTF_OBJEMB, 0 },
- { "objh", CONTROL_VALUE, RTF_OBJH, 0 },
- { "objhtml", CONTROL_FLAG, RTF_OBJHTML, 0 },
- { "objicemb", CONTROL_FLAG, RTF_OBJICEMB, 0 },
- { "objlink", CONTROL_FLAG, RTF_OBJLINK, 0 },
- { "objlock", CONTROL_FLAG, RTF_OBJLOCK, 0 },
- { "objname", CONTROL_DESTINATION, RTF_OBJNAME, 0 },
- { "objocx", CONTROL_FLAG, RTF_OBJOCX, 0 },
- { "objpub", CONTROL_FLAG, RTF_OBJPUB, 0 },
- { "objscalex", CONTROL_VALUE, RTF_OBJSCALEX, 0 },
- { "objscaley", CONTROL_VALUE, RTF_OBJSCALEY, 0 },
- { "objsect", CONTROL_DESTINATION, RTF_OBJSECT, 0 },
- { "objsetsize", CONTROL_FLAG, RTF_OBJSETSIZE, 0 },
- { "objsub", CONTROL_FLAG, RTF_OBJSUB, 0 },
- { "objtime", CONTROL_DESTINATION, RTF_OBJTIME, 0 },
- { "objtransy", CONTROL_VALUE, RTF_OBJTRANSY, 0 },
- { "objupdate", CONTROL_FLAG, RTF_OBJUPDATE, 0 },
- { "objw", CONTROL_VALUE, RTF_OBJW, 0 },
- { "ogutter", CONTROL_VALUE, RTF_OGUTTER, 0 },
- { "oldas", CONTROL_FLAG, RTF_OLDAS, 0 },
- { "oldcprops", CONTROL_DESTINATION, RTF_OLDCPROPS, 0 },
- { "oldlinewrap", CONTROL_FLAG, RTF_OLDLINEWRAP, 0 },
- { "oldpprops", CONTROL_DESTINATION, RTF_OLDPPROPS, 0 },
- { "oldsprops", CONTROL_DESTINATION, RTF_OLDSPROPS, 0 },
- { "oldtprops", CONTROL_DESTINATION, RTF_OLDTPROPS, 0 },
- { "oleclsid", CONTROL_DESTINATION, RTF_OLECLSID, 0 },
- { "operator", CONTROL_DESTINATION, RTF_OPERATOR, 0 },
- { "otblrul", CONTROL_FLAG, RTF_OTBLRUL, 0 },
- { "outl", CONTROL_TOGGLE, RTF_OUTL, 1 },
- { "outlinelevel", CONTROL_VALUE, RTF_OUTLINELEVEL, 0 },
- { "overlay", CONTROL_FLAG, RTF_OVERLAY, 0 },
- { "page", CONTROL_SYMBOL, RTF_PAGE, 0 },
- { "pagebb", CONTROL_FLAG, RTF_PAGEBB, 0 },
- { "panose", CONTROL_DESTINATION, RTF_PANOSE, 0 },
- { "paperh", CONTROL_VALUE, RTF_PAPERH, 15840 },
- { "paperw", CONTROL_VALUE, RTF_PAPERW, 12240 },
- { "par", CONTROL_SYMBOL, RTF_PAR, 0 },
- { "pararsid", CONTROL_VALUE, RTF_PARARSID, 0 },
- { "pard", CONTROL_FLAG, RTF_PARD, 0 },
- { "password", CONTROL_DESTINATION, RTF_PASSWORD, 0 },
- { "passwordhash", CONTROL_DESTINATION, RTF_PASSWORDHASH, 0 },
- { "pc", CONTROL_FLAG, RTF_PC, 0 },
- { "pca", CONTROL_FLAG, RTF_PCA, 0 },
- { "pgbrdrb", CONTROL_FLAG, RTF_PGBRDRB, 0 },
- { "pgbrdrfoot", CONTROL_FLAG, RTF_PGBRDRFOOT, 0 },
- { "pgbrdrhead", CONTROL_FLAG, RTF_PGBRDRHEAD, 0 },
- { "pgbrdrl", CONTROL_FLAG, RTF_PGBRDRL, 0 },
- { "pgbrdropt", CONTROL_VALUE, RTF_PGBRDROPT, 0 },
- { "pgbrdrr", CONTROL_FLAG, RTF_PGBRDRR, 0 },
- { "pgbrdrsnap", CONTROL_FLAG, RTF_PGBRDRSNAP, 0 },
- { "pgbrdrt", CONTROL_FLAG, RTF_PGBRDRT, 0 },
- { "pghsxn", CONTROL_VALUE, RTF_PGHSXN, 0 },
- { "pgnbidia", CONTROL_FLAG, RTF_PGNBIDIA, 0 },
- { "pgnbidib", CONTROL_FLAG, RTF_PGNBIDIB, 0 },
- { "pgnchosung", CONTROL_FLAG, RTF_PGNCHOSUNG, 0 },
- { "pgncnum", CONTROL_FLAG, RTF_PGNCNUM, 0 },
- { "pgncont", CONTROL_FLAG, RTF_PGNCONT, 0 },
- { "pgndbnum", CONTROL_FLAG, RTF_PGNDBNUM, 0 },
- { "pgndbnumd", CONTROL_FLAG, RTF_PGNDBNUMD, 0 },
- { "pgndbnumk", CONTROL_FLAG, RTF_PGNDBNUMK, 0 },
- { "pgndbnumt", CONTROL_FLAG, RTF_PGNDBNUMT, 0 },
- { "pgndec", CONTROL_FLAG, RTF_PGNDEC, 0 },
- { "pgndecd", CONTROL_FLAG, RTF_PGNDECD, 0 },
- { "pgnganada", CONTROL_FLAG, RTF_PGNGANADA, 0 },
- { "pgngbnum", CONTROL_FLAG, RTF_PGNGBNUM, 0 },
- { "pgngbnumd", CONTROL_FLAG, RTF_PGNGBNUMD, 0 },
- { "pgngbnumk", CONTROL_FLAG, RTF_PGNGBNUMK, 0 },
- { "pgngbnuml", CONTROL_FLAG, RTF_PGNGBNUML, 0 },
- { "pgnhindia", CONTROL_FLAG, RTF_PGNHINDIA, 0 },
- { "pgnhindib", CONTROL_FLAG, RTF_PGNHINDIB, 0 },
- { "pgnhindic", CONTROL_FLAG, RTF_PGNHINDIC, 0 },
- { "pgnhindid", CONTROL_FLAG, RTF_PGNHINDID, 0 },
- { "pgnhn", CONTROL_VALUE, RTF_PGNHN, 0 },
- { "pgnhnsc", CONTROL_FLAG, RTF_PGNHNSC, 0 },
- { "pgnhnsh", CONTROL_FLAG, RTF_PGNHNSH, 0 },
- { "pgnhnsm", CONTROL_FLAG, RTF_PGNHNSM, 0 },
- { "pgnhnsn", CONTROL_FLAG, RTF_PGNHNSN, 0 },
- { "pgnhnsp", CONTROL_FLAG, RTF_PGNHNSP, 0 },
- { "pgnid", CONTROL_FLAG, RTF_PGNID, 0 },
- { "pgnlcltr", CONTROL_FLAG, RTF_PGNLCLTR, 0 },
- { "pgnlcrm", CONTROL_FLAG, RTF_PGNLCRM, 0 },
- { "pgnrestart", CONTROL_FLAG, RTF_PGNRESTART, 0 },
- { "pgnstart", CONTROL_VALUE, RTF_PGNSTART, 1 },
- { "pgnstarts", CONTROL_VALUE, RTF_PGNSTARTS, 1 },
- { "pgnthaia", CONTROL_FLAG, RTF_PGNTHAIA, 0 },
- { "pgnthaib", CONTROL_FLAG, RTF_PGNTHAIB, 0 },
- { "pgnthaic", CONTROL_FLAG, RTF_PGNTHAIC, 0 },
- { "pgnucltr", CONTROL_FLAG, RTF_PGNUCLTR, 0 },
- { "pgnucrm", CONTROL_FLAG, RTF_PGNUCRM, 0 },
- { "pgnvieta", CONTROL_FLAG, RTF_PGNVIETA, 0 },
- { "pgnx", CONTROL_VALUE, RTF_PGNX, 720 },
- { "pgny", CONTROL_VALUE, RTF_PGNY, 720 },
- { "pgnzodiac", CONTROL_FLAG, RTF_PGNZODIAC, 0 },
- { "pgnzodiacd", CONTROL_FLAG, RTF_PGNZODIACD, 0 },
- { "pgnzodiacl", CONTROL_FLAG, RTF_PGNZODIACL, 0 },
- { "pgp", CONTROL_DESTINATION, RTF_PGP, 0 },
- { "pgptbl", CONTROL_DESTINATION, RTF_PGPTBL, 0 },
- { "pgwsxn", CONTROL_VALUE, RTF_PGWSXN, 0 },
- { "phcol", CONTROL_FLAG, RTF_PHCOL, 0 },
- { "phmrg", CONTROL_FLAG, RTF_PHMRG, 0 },
- { "phpg", CONTROL_FLAG, RTF_PHPG, 0 },
- { "picbmp", CONTROL_FLAG, RTF_PICBMP, 0 },
- { "picbpp", CONTROL_VALUE, RTF_PICBPP, 0 },
- { "piccropb", CONTROL_VALUE, RTF_PICCROPB, 0 },
- { "piccropl", CONTROL_VALUE, RTF_PICCROPL, 0 },
- { "piccropr", CONTROL_VALUE, RTF_PICCROPR, 0 },
- { "piccropt", CONTROL_VALUE, RTF_PICCROPT, 0 },
- { "pich", CONTROL_VALUE, RTF_PICH, 0 },
- { "pichgoal", CONTROL_VALUE, RTF_PICHGOAL, 0 },
- { "pichGoal", CONTROL_VALUE, RTF_PICHGOAL, 0 },
- { "picprop", CONTROL_DESTINATION, RTF_PICPROP, 0 },
- { "picscaled", CONTROL_FLAG, RTF_PICSCALED, 0 },
- { "picscalex", CONTROL_VALUE, RTF_PICSCALEX, 100 },
- { "picscaley", CONTROL_VALUE, RTF_PICSCALEY, 100 },
- { "pict", CONTROL_DESTINATION, RTF_PICT, 0 },
- { "picw", CONTROL_VALUE, RTF_PICW, 0 },
- { "picwgoal", CONTROL_VALUE, RTF_PICWGOAL, 0 },
- { "picwGoal", CONTROL_VALUE, RTF_PICWGOAL, 0 },
- { "pindtabqc", CONTROL_FLAG, RTF_PINDTABQC, 0 },
- { "pindtabql", CONTROL_FLAG, RTF_PINDTABQL, 0 },
- { "pindtabqr", CONTROL_FLAG, RTF_PINDTABQR, 0 },
- { "plain", CONTROL_FLAG, RTF_PLAIN, 0 },
- { "pmartabqc", CONTROL_FLAG, RTF_PMARTABQC, 0 },
- { "pmartabql", CONTROL_FLAG, RTF_PMARTABQL, 0 },
- { "pmartabqr", CONTROL_FLAG, RTF_PMARTABQR, 0 },
- { "pmmetafile", CONTROL_VALUE, RTF_PMMETAFILE, 0 },
- { "pn", CONTROL_DESTINATION, RTF_PN, 0 },
- { "pnacross", CONTROL_FLAG, RTF_PNACROSS, 0 },
- { "pnaiu", CONTROL_FLAG, RTF_PNAIU, 0 },
- { "pnaiud", CONTROL_FLAG, RTF_PNAIUD, 0 },
- { "pnaiueo", CONTROL_FLAG, RTF_PNAIUEO, 0 },
- { "pnaiueod", CONTROL_FLAG, RTF_PNAIUEOD, 0 },
- { "pnb", CONTROL_TOGGLE, RTF_PNB, 1 },
- { "pnbidia", CONTROL_FLAG, RTF_PNBIDIA, 0 },
- { "pnbidib", CONTROL_FLAG, RTF_PNBIDIB, 0 },
- { "pncaps", CONTROL_TOGGLE, RTF_PNCAPS, 1 },
- { "pncard", CONTROL_FLAG, RTF_PNCARD, 0 },
- { "pncf", CONTROL_VALUE, RTF_PNCF, 0 },
- { "pnchosung", CONTROL_FLAG, RTF_PNCHOSUNG, 0 },
- { "pncnum", CONTROL_FLAG, RTF_PNCNUM, 0 },
- { "pndbnum", CONTROL_FLAG, RTF_PNDBNUM, 0 },
- { "pndbnumd", CONTROL_FLAG, RTF_PNDBNUMD, 0 },
- { "pndbnumk", CONTROL_FLAG, RTF_PNDBNUMK, 0 },
- { "pndbnuml", CONTROL_FLAG, RTF_PNDBNUML, 0 },
- { "pndbnumt", CONTROL_FLAG, RTF_PNDBNUMT, 0 },
- { "pndec", CONTROL_FLAG, RTF_PNDEC, 0 },
- { "pndecd", CONTROL_FLAG, RTF_PNDECD, 0 },
- { "pnf", CONTROL_VALUE, RTF_PNF, 0 },
- { "pnfs", CONTROL_VALUE, RTF_PNFS, 0 },
- { "pnganada", CONTROL_FLAG, RTF_PNGANADA, 0 },
- { "pngblip", CONTROL_FLAG, RTF_PNGBLIP, 0 },
- { "pngbnum", CONTROL_FLAG, RTF_PNGBNUM, 0 },
- { "pngbnumd", CONTROL_FLAG, RTF_PNGBNUMD, 0 },
- { "pngbnumk", CONTROL_FLAG, RTF_PNGBNUMK, 0 },
- { "pngbnuml", CONTROL_FLAG, RTF_PNGBNUML, 0 },
- { "pnhang", CONTROL_FLAG, RTF_PNHANG, 0 },
- { "pni", CONTROL_TOGGLE, RTF_PNI, 1 },
- { "pnindent", CONTROL_VALUE, RTF_PNINDENT, 0 },
- { "pniroha", CONTROL_FLAG, RTF_PNIROHA, 0 },
- { "pnirohad", CONTROL_FLAG, RTF_PNIROHAD, 0 },
- { "pnlcltr", CONTROL_FLAG, RTF_PNLCLTR, 0 },
- { "pnlcrm", CONTROL_FLAG, RTF_PNLCRM, 0 },
- { "pnlvl", CONTROL_VALUE, RTF_PNLVL, 0 },
- { "pnlvlblt", CONTROL_FLAG, RTF_PNLVLBLT, 0 },
- { "pnlvlbody", CONTROL_FLAG, RTF_PNLVLBODY, 0 },
- { "pnlvlcont", CONTROL_FLAG, RTF_PNLVLCONT, 0 },
- { "pnnumonce", CONTROL_FLAG, RTF_PNNUMONCE, 0 },
- { "pnord", CONTROL_FLAG, RTF_PNORD, 0 },
- { "pnordt", CONTROL_FLAG, RTF_PNORDT, 0 },
- { "pnprev", CONTROL_FLAG, RTF_PNPREV, 0 },
- { "pnqc", CONTROL_FLAG, RTF_PNQC, 0 },
- { "pnql", CONTROL_FLAG, RTF_PNQL, 0 },
- { "pnqr", CONTROL_FLAG, RTF_PNQR, 0 },
- { "pnrauth", CONTROL_VALUE, RTF_PNRAUTH, 0 },
- { "pnrdate", CONTROL_VALUE, RTF_PNRDATE, 0 },
- { "pnrestart", CONTROL_FLAG, RTF_PNRESTART, 0 },
- { "pnrnfc", CONTROL_VALUE, RTF_PNRNFC, 0 },
- { "pnrnot", CONTROL_FLAG, RTF_PNRNOT, 0 },
- { "pnrpnbr", CONTROL_VALUE, RTF_PNRPNBR, 0 },
- { "pnrrgb", CONTROL_VALUE, RTF_PNRRGB, 0 },
- { "pnrstart", CONTROL_VALUE, RTF_PNRSTART, 0 },
- { "pnrstop", CONTROL_VALUE, RTF_PNRSTOP, 0 },
- { "pnrxst", CONTROL_VALUE, RTF_PNRXST, 0 },
- { "pnscaps", CONTROL_TOGGLE, RTF_PNSCAPS, 1 },
- { "pnseclvl", CONTROL_DESTINATION, RTF_PNSECLVL, 0 },
- { "pnsp", CONTROL_VALUE, RTF_PNSP, 0 },
- { "pnstart", CONTROL_VALUE, RTF_PNSTART, 0 },
- { "pnstrike", CONTROL_TOGGLE, RTF_PNSTRIKE, 1 },
- { "pntext", CONTROL_DESTINATION, RTF_PNTEXT, 0 },
- { "pntxta", CONTROL_DESTINATION, RTF_PNTXTA, 0 },
- { "pntxtb", CONTROL_DESTINATION, RTF_PNTXTB, 0 },
- { "pnucltr", CONTROL_FLAG, RTF_PNUCLTR, 0 },
- { "pnucrm", CONTROL_FLAG, RTF_PNUCRM, 0 },
- { "pnul", CONTROL_TOGGLE, RTF_PNUL, 1 },
- { "pnuld", CONTROL_FLAG, RTF_PNULD, 0 },
- { "pnuldash", CONTROL_FLAG, RTF_PNULDASH, 0 },
- { "pnuldashd", CONTROL_FLAG, RTF_PNULDASHD, 0 },
- { "pnuldashdd", CONTROL_FLAG, RTF_PNULDASHDD, 0 },
- { "pnuldb", CONTROL_FLAG, RTF_PNULDB, 0 },
- { "pnulhair", CONTROL_FLAG, RTF_PNULHAIR, 0 },
- { "pnulnone", CONTROL_FLAG, RTF_PNULNONE, 0 },
- { "pnulth", CONTROL_FLAG, RTF_PNULTH, 0 },
- { "pnulw", CONTROL_FLAG, RTF_PNULW, 0 },
- { "pnulwave", CONTROL_FLAG, RTF_PNULWAVE, 0 },
- { "pnzodiac", CONTROL_FLAG, RTF_PNZODIAC, 0 },
- { "pnzodiacd", CONTROL_FLAG, RTF_PNZODIACD, 0 },
- { "pnzodiacl", CONTROL_FLAG, RTF_PNZODIACL, 0 },
- { "posnegx", CONTROL_VALUE, RTF_POSNEGX, 0 },
- { "posnegy", CONTROL_VALUE, RTF_POSNEGY, 0 },
- { "posx", CONTROL_VALUE, RTF_POSX, 0 },
- { "posxc", CONTROL_FLAG, RTF_POSXC, 0 },
- { "posxi", CONTROL_FLAG, RTF_POSXI, 0 },
- { "posxl", CONTROL_FLAG, RTF_POSXL, 0 },
- { "posxo", CONTROL_FLAG, RTF_POSXO, 0 },
- { "posxr", CONTROL_FLAG, RTF_POSXR, 0 },
- { "posy", CONTROL_VALUE, RTF_POSY, 0 },
- { "posyb", CONTROL_FLAG, RTF_POSYB, 0 },
- { "posyc", CONTROL_FLAG, RTF_POSYC, 0 },
- { "posyil", CONTROL_FLAG, RTF_POSYIL, 0 },
- { "posyin", CONTROL_FLAG, RTF_POSYIN, 0 },
- { "posyout", CONTROL_FLAG, RTF_POSYOUT, 0 },
- { "posyt", CONTROL_FLAG, RTF_POSYT, 0 },
- { "prauth", CONTROL_VALUE, RTF_PRAUTH, 0 },
- { "prcolbl", CONTROL_FLAG, RTF_PRCOLBL, 0 },
- { "prdate", CONTROL_VALUE, RTF_PRDATE, 0 },
- { "printdata", CONTROL_FLAG, RTF_PRINTDATA, 0 },
- { "printim", CONTROL_DESTINATION, RTF_PRINTIM, 0 },
- { "private", CONTROL_DESTINATION, RTF_PRIVATE, 0 },
- { "propname", CONTROL_DESTINATION, RTF_PROPNAME, 0 },
- { "proptype", CONTROL_VALUE, RTF_PROPTYPE, 0 },
- { "protect", CONTROL_TOGGLE, RTF_PROTECT, 1 },
- { "protend", CONTROL_DESTINATION, RTF_PROTEND, 0 },
- { "protlevel", CONTROL_VALUE, RTF_PROTLEVEL, 0 },
- { "protstart", CONTROL_DESTINATION, RTF_PROTSTART, 0 },
- { "protusertbl", CONTROL_DESTINATION, RTF_PROTUSERTBL, 0 },
- { "psover", CONTROL_FLAG, RTF_PSOVER, 0 },
- { "psz", CONTROL_VALUE, RTF_PSZ, 0 },
- { "ptabldot", CONTROL_FLAG, RTF_PTABLDOT, 0 },
- { "ptablmdot", CONTROL_FLAG, RTF_PTABLMDOT, 0 },
- { "ptablminus", CONTROL_FLAG, RTF_PTABLMINUS, 0 },
- { "ptablnone", CONTROL_FLAG, RTF_PTABLNONE, 0 },
- { "ptabluscore", CONTROL_FLAG, RTF_PTABLUSCORE, 0 },
- { "pubauto", CONTROL_FLAG, RTF_PUBAUTO, 0 },
- { "pvmrg", CONTROL_FLAG, RTF_PVMRG, 0 },
- { "pvpara", CONTROL_FLAG, RTF_PVPARA, 0 },
- { "pvpg", CONTROL_FLAG, RTF_PVPG, 0 },
- { "pwd", CONTROL_VALUE, RTF_PWD, 0 },
- { "pxe", CONTROL_DESTINATION, RTF_PXE, 0 },
- { "qc", CONTROL_FLAG, RTF_QC, 0 },
- { "qd", CONTROL_FLAG, RTF_QD, 0 },
- { "qj", CONTROL_FLAG, RTF_QJ, 0 },
- { "qk", CONTROL_VALUE, RTF_QK, 0 },
- { "ql", CONTROL_FLAG, RTF_QL, 0 },
- { "qmspace", CONTROL_SYMBOL, RTF_QMSPACE, 0 },
- { "qr", CONTROL_FLAG, RTF_QR, 0 },
- { "qt", CONTROL_FLAG, RTF_QT, 0 },
- { "rawclbgdkbdiag", CONTROL_FLAG, RTF_RAWCLBGDKBDIAG, 0 },
- { "rawclbgbdiag", CONTROL_FLAG, RTF_RAWCLBGBDIAG, 0 },
- { "rawclbgcross", CONTROL_FLAG, RTF_RAWCLBGCROSS, 0 },
- { "rawclbgdcross", CONTROL_FLAG, RTF_RAWCLBGDCROSS, 0 },
- { "rawclbgdkcross", CONTROL_FLAG, RTF_RAWCLBGDKCROSS, 0 },
- { "rawclbgdkdcross", CONTROL_FLAG, RTF_RAWCLBGDKDCROSS, 0 },
- { "rawclbgdkfdiag", CONTROL_FLAG, RTF_RAWCLBGDKFDIAG, 0 },
- { "rawclbgdkhor", CONTROL_FLAG, RTF_RAWCLBGDKHOR, 0 },
- { "rawclbgdkvert", CONTROL_FLAG, RTF_RAWCLBGDKVERT, 0 },
- { "rawclbgfdiag", CONTROL_FLAG, RTF_RAWCLBGFDIAG, 0 },
- { "rawclbghoriz", CONTROL_FLAG, RTF_RAWCLBGHORIZ, 0 },
- { "rawclbgvert", CONTROL_FLAG, RTF_RAWCLBGVERT, 0 },
- { "rdblquote", CONTROL_SYMBOL, RTF_RDBLQUOTE, 0 },
- { "readonlyrecommended", CONTROL_FLAG, RTF_READONLYRECOMMENDED, 0 },
- { "readprot", CONTROL_FLAG, RTF_READPROT, 0 },
- { "red", CONTROL_VALUE, RTF_RED, 0 },
- { "relyonvml", CONTROL_VALUE, RTF_RELYONVML, 0 },
- { "remdttm", CONTROL_FLAG, RTF_REMDTTM, 0 },
- { "rempersonalinfo", CONTROL_FLAG, RTF_REMPERSONALINFO, 0 },
- { "result", CONTROL_DESTINATION, RTF_RESULT, 0 },
- { "revauth", CONTROL_VALUE, RTF_REVAUTH, 0 },
- { "revauthdel", CONTROL_VALUE, RTF_REVAUTHDEL, 0 },
- { "revbar", CONTROL_VALUE, RTF_REVBAR, 3 },
- { "revdttm", CONTROL_VALUE, RTF_REVDTTM, 0 },
- { "revdttmdel", CONTROL_VALUE, RTF_REVDTTMDEL, 0 },
- { "revised", CONTROL_TOGGLE, RTF_REVISED, 1 },
- { "revisions", CONTROL_FLAG, RTF_REVISIONS, 0 },
- { "revprop", CONTROL_VALUE, RTF_REVPROP, 3 },
- { "revprot", CONTROL_FLAG, RTF_REVPROT, 0 },
- { "revtbl", CONTROL_DESTINATION, RTF_REVTBL, 0 },
- { "revtim", CONTROL_DESTINATION, RTF_REVTIM, 0 },
- { "ri", CONTROL_VALUE, RTF_RI, 0 },
- { "rin", CONTROL_VALUE, RTF_RIN, 0 },
- { "row", CONTROL_SYMBOL, RTF_ROW, 0 },
- { "rquote", CONTROL_SYMBOL, RTF_RQUOTE, 0 },
- { "rsid", CONTROL_VALUE, RTF_RSID, 0 },
- { "rsidroot", CONTROL_VALUE, RTF_RSIDROOT, 0 },
- { "rsidtbl", CONTROL_DESTINATION, RTF_RSIDTBL, 0 },
- { "rsltbmp", CONTROL_FLAG, RTF_RSLTBMP, 0 },
- { "rslthtml", CONTROL_FLAG, RTF_RSLTHTML, 0 },
- { "rsltmerge", CONTROL_FLAG, RTF_RSLTMERGE, 0 },
- { "rsltpict", CONTROL_FLAG, RTF_RSLTPICT, 0 },
- { "rsltrtf", CONTROL_FLAG, RTF_RSLTRTF, 0 },
- { "rslttxt", CONTROL_FLAG, RTF_RSLTTXT, 0 },
- { "rtf", CONTROL_DESTINATION, RTF_RTF, 0 },
- { "rtlch", CONTROL_FLAG, RTF_RTLCH, 0 },
- { "rtldoc", CONTROL_FLAG, RTF_RTLDOC, 0 },
- { "rtlgutter", CONTROL_FLAG, RTF_RTLGUTTER, 0 },
- { "rtlmark", CONTROL_SYMBOL, RTF_RTLMARK, 0 },
- { "rtlpar", CONTROL_FLAG, RTF_RTLPAR, 0 },
- { "rtlrow", CONTROL_FLAG, RTF_RTLROW, 0 },
- { "rtlsect", CONTROL_FLAG, RTF_RTLSECT, 0 },
- { "rxe", CONTROL_DESTINATION, RTF_RXE, 0 },
- { "s", CONTROL_VALUE, RTF_S, 0 },
- { "sa", CONTROL_VALUE, RTF_SA, 0 },
- { "saauto", CONTROL_TOGGLE, RTF_SAAUTO, 1 },
- { "saftnnalc", CONTROL_FLAG, RTF_SAFTNNALC, 0 },
- { "saftnnar", CONTROL_FLAG, RTF_SAFTNNAR, 0 },
- { "saftnnauc", CONTROL_FLAG, RTF_SAFTNNAUC, 0 },
- { "saftnnchi", CONTROL_FLAG, RTF_SAFTNNCHI, 0 },
- { "saftnnchosung", CONTROL_FLAG, RTF_SAFTNNCHOSUNG, 0 },
- { "saftnncnum", CONTROL_FLAG, RTF_SAFTNNCNUM, 0 },
- { "saftnndbar", CONTROL_FLAG, RTF_SAFTNNDBAR, 0 },
- { "saftnndbnum", CONTROL_FLAG, RTF_SAFTNNDBNUM, 0 },
- { "saftnndbnumd", CONTROL_FLAG, RTF_SAFTNNDBNUMD, 0 },
- { "saftnndbnumk", CONTROL_FLAG, RTF_SAFTNNDBNUMK, 0 },
- { "saftnndbnumt", CONTROL_FLAG, RTF_SAFTNNDBNUMT, 0 },
- { "saftnnganada", CONTROL_FLAG, RTF_SAFTNNGANADA, 0 },
- { "saftnngbnum", CONTROL_FLAG, RTF_SAFTNNGBNUM, 0 },
- { "saftnngbnumd", CONTROL_FLAG, RTF_SAFTNNGBNUMD, 0 },
- { "saftnngbnumk", CONTROL_FLAG, RTF_SAFTNNGBNUMK, 0 },
- { "saftnngbnuml", CONTROL_FLAG, RTF_SAFTNNGBNUML, 0 },
- { "saftnnrlc", CONTROL_FLAG, RTF_SAFTNNRLC, 0 },
- { "saftnnruc", CONTROL_FLAG, RTF_SAFTNNRUC, 0 },
- { "saftnnzodiac", CONTROL_FLAG, RTF_SAFTNNZODIAC, 0 },
- { "saftnnzodiacd", CONTROL_FLAG, RTF_SAFTNNZODIACD, 0 },
- { "saftnnzodiacl", CONTROL_FLAG, RTF_SAFTNNZODIACL, 0 },
- { "saftnrestart", CONTROL_FLAG, RTF_SAFTNRESTART, 0 },
- { "saftnrstcont", CONTROL_FLAG, RTF_SAFTNRSTCONT, 0 },
- { "saftnstart", CONTROL_VALUE, RTF_SAFTNSTART, 1 },
- { "sautoupd", CONTROL_FLAG, RTF_SAUTOUPD, 0 },
- { "saveinvalidxml", CONTROL_FLAG, RTF_SAVEINVALIDXML, 0 },
- { "saveprevpict", CONTROL_FLAG, RTF_SAVEPREVPICT, 0 },
- { "sb", CONTROL_VALUE, RTF_SB, 0 },
- { "sbasedon", CONTROL_VALUE, RTF_SBASEDON, 222 },
- { "sbauto", CONTROL_TOGGLE, RTF_SBAUTO, 1 },
- { "sbkcol", CONTROL_FLAG, RTF_SBKCOL, 0 },
- { "sbkeven", CONTROL_FLAG, RTF_SBKEVEN, 0 },
- { "sbknone", CONTROL_FLAG, RTF_SBKNONE, 0 },
- { "sbkodd", CONTROL_FLAG, RTF_SBKODD, 0 },
- { "sbkpage", CONTROL_FLAG, RTF_SBKPAGE, 0 },
- { "sbys", CONTROL_FLAG, RTF_SBYS, 0 },
- { "scaps", CONTROL_TOGGLE, RTF_SCAPS, 1 },
- { "scompose", CONTROL_FLAG, RTF_SCOMPOSE, 0 },
- { "sec", CONTROL_VALUE, RTF_SEC, 0 },
- { "sect", CONTROL_SYMBOL, RTF_SECT, 0 },
- { "sectd", CONTROL_FLAG, RTF_SECTD, 0 },
- { "sectdefaultcl", CONTROL_FLAG, RTF_SECTDEFAULTCL, 0 },
- { "sectexpand", CONTROL_VALUE, RTF_SECTEXPAND, 0 },
- { "sectlinegrid", CONTROL_VALUE, RTF_SECTLINEGRID, 0 },
- { "sectnum", CONTROL_SYMBOL, RTF_SECTNUM, 0 },
- { "sectrsid", CONTROL_VALUE, RTF_SECTRSID, 0 },
- { "sectspecifycl", CONTROL_FLAG, RTF_SECTSPECIFYCL, 0 },
- { "sectspecifygenN", CONTROL_FLAG, RTF_SECTSPECIFYGENN, 0 },
- { "sectspecifyl", CONTROL_FLAG, RTF_SECTSPECIFYL, 0 },
- { "sectunlocked", CONTROL_FLAG, RTF_SECTUNLOCKED, 0 },
- { "sftnbj", CONTROL_FLAG, RTF_SFTNBJ, 0 },
- { "sftnnalc", CONTROL_FLAG, RTF_SFTNNALC, 0 },
- { "sftnnar", CONTROL_FLAG, RTF_SFTNNAR, 0 },
- { "sftnnauc", CONTROL_FLAG, RTF_SFTNNAUC, 0 },
- { "sftnnchi", CONTROL_FLAG, RTF_SFTNNCHI, 0 },
- { "sftnnchosung", CONTROL_FLAG, RTF_SFTNNCHOSUNG, 0 },
- { "sftnncnum", CONTROL_FLAG, RTF_SFTNNCNUM, 0 },
- { "sftnndbar", CONTROL_FLAG, RTF_SFTNNDBAR, 0 },
- { "sftnndbnum", CONTROL_FLAG, RTF_SFTNNDBNUM, 0 },
- { "sftnndbnumd", CONTROL_FLAG, RTF_SFTNNDBNUMD, 0 },
- { "sftnndbnumk", CONTROL_FLAG, RTF_SFTNNDBNUMK, 0 },
- { "sftnndbnumt", CONTROL_FLAG, RTF_SFTNNDBNUMT, 0 },
- { "sftnnganada", CONTROL_FLAG, RTF_SFTNNGANADA, 0 },
- { "sftnngbnum", CONTROL_FLAG, RTF_SFTNNGBNUM, 0 },
- { "sftnngbnumd", CONTROL_FLAG, RTF_SFTNNGBNUMD, 0 },
- { "sftnngbnumk", CONTROL_FLAG, RTF_SFTNNGBNUMK, 0 },
- { "sftnngbnuml", CONTROL_FLAG, RTF_SFTNNGBNUML, 0 },
- { "sftnnrlc", CONTROL_FLAG, RTF_SFTNNRLC, 0 },
- { "sftnnruc", CONTROL_FLAG, RTF_SFTNNRUC, 0 },
- { "sftnnzodiac", CONTROL_FLAG, RTF_SFTNNZODIAC, 0 },
- { "sftnnzodiacd", CONTROL_FLAG, RTF_SFTNNZODIACD, 0 },
- { "sftnnzodiacl", CONTROL_FLAG, RTF_SFTNNZODIACL, 0 },
- { "sftnrestart", CONTROL_FLAG, RTF_SFTNRESTART, 0 },
- { "sftnrstcont", CONTROL_FLAG, RTF_SFTNRSTCONT, 0 },
- { "sftnrstpg", CONTROL_FLAG, RTF_SFTNRSTPG, 0 },
- { "sftnstart", CONTROL_VALUE, RTF_SFTNSTART, 1 },
- { "sftntj", CONTROL_FLAG, RTF_SFTNTJ, 0 },
- { "shad", CONTROL_TOGGLE, RTF_SHAD, 1 },
- { "shading", CONTROL_VALUE, RTF_SHADING, 0 },
- { "shidden", CONTROL_FLAG, RTF_SHIDDEN, 0 },
- { "shift", CONTROL_FLAG, RTF_SHIFT, 0 },
- { "showplaceholdtext", CONTROL_VALUE, RTF_SHOWPLACEHOLDTEXT, 0 },
- { "showxmlerrors", CONTROL_VALUE, RTF_SHOWXMLERRORS, 0 },
- { "shp", CONTROL_DESTINATION, RTF_SHP, 0 },
- { "shpbottom", CONTROL_VALUE, RTF_SHPBOTTOM, 0 },
- { "shpbxcolumn", CONTROL_FLAG, RTF_SHPBXCOLUMN, 0 },
- { "shpbxignore", CONTROL_FLAG, RTF_SHPBXIGNORE, 0 },
- { "shpbxmargin", CONTROL_FLAG, RTF_SHPBXMARGIN, 0 },
- { "shpbxpage", CONTROL_FLAG, RTF_SHPBXPAGE, 0 },
- { "shpbyignore", CONTROL_FLAG, RTF_SHPBYIGNORE, 0 },
- { "shpbymargin", CONTROL_FLAG, RTF_SHPBYMARGIN, 0 },
- { "shpbypage", CONTROL_FLAG, RTF_SHPBYPAGE, 0 },
- { "shpbypara", CONTROL_FLAG, RTF_SHPBYPARA, 0 },
- { "shpfblwtxt", CONTROL_VALUE, RTF_SHPFBLWTXT, 0 },
- { "shpfhdr", CONTROL_VALUE, RTF_SHPFHDR, 0 },
- { "shpgrp", CONTROL_DESTINATION, RTF_SHPGRP, 0 },
- { "shpinst", CONTROL_DESTINATION, RTF_SHPINST, 0 },
- { "shpleft", CONTROL_VALUE, RTF_SHPLEFT, 0 },
- { "shplid", CONTROL_VALUE, RTF_SHPLID, 0 },
- { "shplockanchor", CONTROL_FLAG, RTF_SHPLOCKANCHOR, 0 },
- { "shppict", CONTROL_DESTINATION, RTF_SHPPICT, 0 },
- { "shpright", CONTROL_VALUE, RTF_SHPRIGHT, 0 },
- { "shprslt", CONTROL_DESTINATION, RTF_SHPRSLT, 0 },
- { "shptop", CONTROL_VALUE, RTF_SHPTOP, 0 },
- { "shptxt", CONTROL_DESTINATION, RTF_SHPTXT, 0 },
- { "shpwrk", CONTROL_VALUE, RTF_SHPWRK, 0 },
- { "shpwr", CONTROL_VALUE, RTF_SHPWR, 0 },
- { "shpz", CONTROL_VALUE, RTF_SHPZ, 0 },
- { "sl", CONTROL_VALUE, RTF_SL, 0 },
- { "slink", CONTROL_VALUE, RTF_SLINK, 0 },
- { "slmult", CONTROL_VALUE, RTF_SLMULT, 0 },
- { "slocked", CONTROL_FLAG, RTF_SLOCKED, 0 },
- { "sn", CONTROL_DESTINATION, RTF_SN, 0 },
- { "snaptogridincell", CONTROL_FLAG, RTF_SNAPTOGRIDINCELL, 0 },
- { "snext", CONTROL_VALUE, RTF_SNEXT, 0 },
- { "softcol", CONTROL_FLAG, RTF_SOFTCOL, 0 },
- { "softlheight", CONTROL_VALUE, RTF_SOFTLHEIGHT, 0 },
- { "softline", CONTROL_FLAG, RTF_SOFTLINE, 0 },
- { "softpage", CONTROL_FLAG, RTF_SOFTPAGE, 0 },
- { "sp", CONTROL_DESTINATION, RTF_SP, 0 },
- { "spersonal", CONTROL_FLAG, RTF_SPERSONAL, 0 },
- { "spltpgpar", CONTROL_FLAG, RTF_SPLTPGPAR, 0 },
- { "splytwnine", CONTROL_FLAG, RTF_SPLYTWNINE, 0 },
- { "spriority", CONTROL_VALUE, RTF_SPRIORITY, 0 },
- { "sprsbsp", CONTROL_FLAG, RTF_SPRSBSP, 0 },
- { "sprslnsp", CONTROL_FLAG, RTF_SPRSLNSP, 0 },
- { "sprsspbf", CONTROL_FLAG, RTF_SPRSSPBF, 0 },
- { "sprstsm", CONTROL_FLAG, RTF_SPRSTSM, 0 },
- { "sprstsp", CONTROL_FLAG, RTF_SPRSTSP, 0 },
- { "spv", CONTROL_FLAG, RTF_SPV, 0 },
- { "sqformat", CONTROL_FLAG, RTF_SQFORMAT, 0 },
- { "srauth", CONTROL_VALUE, RTF_SRAUTH, 0 },
- { "srdate", CONTROL_VALUE, RTF_SRDATE, 0 },
- { "sreply", CONTROL_FLAG, RTF_SREPLY, 0 },
- { "ssemihidden", CONTROL_VALUE, RTF_SSEMIHIDDEN, 0 },
- { "staticval", CONTROL_DESTINATION, RTF_STATICVAL, 0 },
- { "stextflow", CONTROL_VALUE, RTF_STEXTFLOW, 0 },
- { "strike", CONTROL_TOGGLE, RTF_STRIKE, 1 },
- { "striked", CONTROL_TOGGLE, RTF_STRIKED, 1 },
- { "stshfbi", CONTROL_VALUE, RTF_STSHFBI, 0 },
- { "stshfdbch", CONTROL_VALUE, RTF_STSHFDBCH, 0 },
- { "stshfhich", CONTROL_VALUE, RTF_STSHFHICH, 0 },
- { "stshfloch", CONTROL_VALUE, RTF_STSHFLOCH, 0 },
- { "stylelock", CONTROL_FLAG, RTF_STYLELOCK, 0 },
- { "stylelockbackcomp", CONTROL_FLAG, RTF_STYLELOCKBACKCOMP, 0 },
- { "stylelockenforced", CONTROL_FLAG, RTF_STYLELOCKENFORCED, 0 },
- { "stylelockqfset", CONTROL_FLAG, RTF_STYLELOCKQFSET, 0 },
- { "stylelocktheme", CONTROL_FLAG, RTF_STYLELOCKTHEME, 0 },
- { "stylesheet", CONTROL_DESTINATION, RTF_STYLESHEET, 0 },
- { "stylesortmethod", CONTROL_VALUE, RTF_STYLESORTMETHOD, 1 },
- { "styrsid", CONTROL_VALUE, RTF_STYRSID, 0 },
- { "sub", CONTROL_FLAG, RTF_SUB, 0 },
- { "subdocument", CONTROL_VALUE, RTF_SUBDOCUMENT, 0 },
- { "subfontbysize", CONTROL_FLAG, RTF_SUBFONTBYSIZE, 0 },
- { "subject", CONTROL_DESTINATION, RTF_SUBJECT, 0 },
- { "sunhideused", CONTROL_VALUE, RTF_SUNHIDEUSED, 0 },
- { "super", CONTROL_FLAG, RTF_SUPER, 0 },
- { "sv", CONTROL_DESTINATION, RTF_SV, 0 },
- { "svb", CONTROL_DESTINATION, RTF_SVB, 0 },
- { "swpbdr", CONTROL_FLAG, RTF_SWPBDR, 0 },
- { "tab", CONTROL_SYMBOL, RTF_TAB, 0 },
- { "tabsnoovrlp", CONTROL_FLAG, RTF_TABSNOOVRLP, 0 },
- { "taprtl", CONTROL_FLAG, RTF_TAPRTL, 0 },
- { "tb", CONTROL_VALUE, RTF_TB, 0 },
- { "tblind", CONTROL_VALUE, RTF_TBLIND, 0 },
- { "tblindtype", CONTROL_VALUE, RTF_TBLINDTYPE, 0 },
- { "tbllkbestfit", CONTROL_FLAG, RTF_TBLLKBESTFIT, 0 },
- { "tbllkborder", CONTROL_FLAG, RTF_TBLLKBORDER, 0 },
- { "tbllkcolor", CONTROL_FLAG, RTF_TBLLKCOLOR, 0 },
- { "tbllkfont", CONTROL_FLAG, RTF_TBLLKFONT, 0 },
- { "tbllkhdrcols", CONTROL_FLAG, RTF_TBLLKHDRCOLS, 0 },
- { "tbllkhdrrows", CONTROL_FLAG, RTF_TBLLKHDRROWS, 0 },
- { "tbllklastcol", CONTROL_FLAG, RTF_TBLLKLASTCOL, 0 },
- { "tbllklastrow", CONTROL_FLAG, RTF_TBLLKLASTROW, 0 },
- { "tbllknocolband", CONTROL_FLAG, RTF_TBLLKNOCOLBAND, 0 },
- { "tbllknorowband", CONTROL_FLAG, RTF_TBLLKNOROWBAND, 0 },
- { "tbllkshading", CONTROL_FLAG, RTF_TBLLKSHADING, 0 },
- { "tblrsid", CONTROL_VALUE, RTF_TBLRSID, 0 },
- { "tc", CONTROL_DESTINATION, RTF_TC, 0 },
- { "tcelld", CONTROL_FLAG, RTF_TCELLD, 0 },
- { "tcf", CONTROL_VALUE, RTF_TCF, 67 },
- { "tcl", CONTROL_VALUE, RTF_TCL, 0 },
- { "tcn", CONTROL_FLAG, RTF_TCN, 0 },
- { "tdfrmtxtBottom", CONTROL_VALUE, RTF_TDFRMTXTBOTTOM, 0 },
- { "tdfrmtxtLeft", CONTROL_VALUE, RTF_TDFRMTXTLEFT, 0 },
- { "tdfrmtxtRight", CONTROL_VALUE, RTF_TDFRMTXTRIGHT, 0 },
- { "tdfrmtxtTop", CONTROL_VALUE, RTF_TDFRMTXTTOP, 0 },
- { "template", CONTROL_DESTINATION, RTF_TEMPLATE, 0 },
- { "themedata", CONTROL_DESTINATION, RTF_THEMEDATA, 0 },
- { "themelang", CONTROL_VALUE, RTF_THEMELANG, 0 },
- { "themelangcs", CONTROL_VALUE, RTF_THEMELANGCS, 0 },
- { "themelangfe", CONTROL_VALUE, RTF_THEMELANGFE, 0 },
- { "time", CONTROL_FLAG, RTF_TIME, 0 },
- { "title", CONTROL_DESTINATION, RTF_TITLE, 0 },
- { "titlepg", CONTROL_FLAG, RTF_TITLEPG, 0 },
- { "tldot", CONTROL_FLAG, RTF_TLDOT, 0 },
- { "tleq", CONTROL_FLAG, RTF_TLEQ, 0 },
- { "tlhyph", CONTROL_FLAG, RTF_TLHYPH, 0 },
- { "tlmdot", CONTROL_FLAG, RTF_TLMDOT, 0 },
- { "tlth", CONTROL_FLAG, RTF_TLTH, 0 },
- { "tlul", CONTROL_FLAG, RTF_TLUL, 0 },
- { "toplinepunct", CONTROL_FLAG, RTF_TOPLINEPUNCT, 0 },
- { "tphcol", CONTROL_FLAG, RTF_TPHCOL, 0 },
- { "tphmrg", CONTROL_FLAG, RTF_TPHMRG, 0 },
- { "tphpg", CONTROL_FLAG, RTF_TPHPG, 0 },
- { "tposnegx", CONTROL_VALUE, RTF_TPOSNEGX, 0 },
- { "tposnegy", CONTROL_VALUE, RTF_TPOSNEGY, 0 },
- { "tposxc", CONTROL_FLAG, RTF_TPOSXC, 0 },
- { "tposxi", CONTROL_FLAG, RTF_TPOSXI, 0 },
- { "tposxl", CONTROL_FLAG, RTF_TPOSXL, 0 },
- { "tposx", CONTROL_VALUE, RTF_TPOSX, 0 },
- { "tposxo", CONTROL_FLAG, RTF_TPOSXO, 0 },
- { "tposxr", CONTROL_FLAG, RTF_TPOSXR, 0 },
- { "tposy", CONTROL_VALUE, RTF_TPOSY, 0 },
- { "tposyb", CONTROL_FLAG, RTF_TPOSYB, 0 },
- { "tposyc", CONTROL_FLAG, RTF_TPOSYC, 0 },
- { "tposyil", CONTROL_FLAG, RTF_TPOSYIL, 0 },
- { "tposyin", CONTROL_FLAG, RTF_TPOSYIN, 0 },
- { "tposyout", CONTROL_FLAG, RTF_TPOSYOUT, 0 },
- { "tposyt", CONTROL_FLAG, RTF_TPOSYT, 0 },
- { "tpvmrg", CONTROL_FLAG, RTF_TPVMRG, 0 },
- { "tpvpara", CONTROL_FLAG, RTF_TPVPARA, 0 },
- { "tpvpg", CONTROL_FLAG, RTF_TPVPG, 0 },
- { "tqc", CONTROL_FLAG, RTF_TQC, 0 },
- { "tqdec", CONTROL_FLAG, RTF_TQDEC, 0 },
- { "tqr", CONTROL_FLAG, RTF_TQR, 0 },
- { "trackformatting", CONTROL_VALUE, RTF_TRACKFORMATTING, 0 },
- { "trackmoves", CONTROL_VALUE, RTF_TRACKMOVES, 0 },
- { "transmf", CONTROL_FLAG, RTF_TRANSMF, 0 },
- { "trauth", CONTROL_VALUE, RTF_TRAUTH, 0 },
- { "trautofit", CONTROL_TOGGLE, RTF_TRAUTOFIT, 1 },
- { "trbgbdiag", CONTROL_FLAG, RTF_TRBGBDIAG, 0 },
- { "trbgcross", CONTROL_FLAG, RTF_TRBGCROSS, 0 },
- { "trbgdcross", CONTROL_FLAG, RTF_TRBGDCROSS, 0 },
- { "trbgdkbdiag", CONTROL_FLAG, RTF_TRBGDKBDIAG, 0 },
- { "trbgdkcross", CONTROL_FLAG, RTF_TRBGDKCROSS, 0 },
- { "trbgdkdcross", CONTROL_FLAG, RTF_TRBGDKDCROSS, 0 },
- { "trbgdkfdiag", CONTROL_FLAG, RTF_TRBGDKFDIAG, 0 },
- { "trbgdkhor", CONTROL_FLAG, RTF_TRBGDKHOR, 0 },
- { "trbgdkvert", CONTROL_FLAG, RTF_TRBGDKVERT, 0 },
- { "trbgfdiag", CONTROL_FLAG, RTF_TRBGFDIAG, 0 },
- { "trbghoriz", CONTROL_FLAG, RTF_TRBGHORIZ, 0 },
- { "trbgvert", CONTROL_FLAG, RTF_TRBGVERT, 0 },
- { "trbrdrb", CONTROL_FLAG, RTF_TRBRDRB, 0 },
- { "trbrdrh", CONTROL_FLAG, RTF_TRBRDRH, 0 },
- { "trbrdrl", CONTROL_FLAG, RTF_TRBRDRL, 0 },
- { "trbrdrr", CONTROL_FLAG, RTF_TRBRDRR, 0 },
- { "trbrdrt", CONTROL_FLAG, RTF_TRBRDRT, 0 },
- { "trbrdrv", CONTROL_FLAG, RTF_TRBRDRV, 0 },
- { "trcbpat", CONTROL_VALUE, RTF_TRCBPAT, 0 },
- { "trcfpat", CONTROL_VALUE, RTF_TRCFPAT, 0 },
- { "trdate", CONTROL_VALUE, RTF_TRDATE, 0 },
- { "trftsWidthA", CONTROL_VALUE, RTF_TRFTSWIDTHA, 0 },
- { "trftsWidthB", CONTROL_VALUE, RTF_TRFTSWIDTHB, 0 },
- { "trftsWidth", CONTROL_VALUE, RTF_TRFTSWIDTH, 0 },
- { "trgaph", CONTROL_VALUE, RTF_TRGAPH, 0 },
- { "trhdr", CONTROL_FLAG, RTF_TRHDR, 0 },
- { "trkeep", CONTROL_FLAG, RTF_TRKEEP, 0 },
- { "trkeepfollow", CONTROL_FLAG, RTF_TRKEEPFOLLOW, 0 },
- { "trleft", CONTROL_VALUE, RTF_TRLEFT, 0 },
- { "trowd", CONTROL_FLAG, RTF_TROWD, 0 },
- { "trpaddb", CONTROL_VALUE, RTF_TRPADDB, 0 },
- { "trpaddfb", CONTROL_VALUE, RTF_TRPADDFB, 0 },
- { "trpaddfl", CONTROL_VALUE, RTF_TRPADDFL, 0 },
- { "trpaddfr", CONTROL_VALUE, RTF_TRPADDFR, 0 },
- { "trpaddft", CONTROL_VALUE, RTF_TRPADDFT, 0 },
- { "trpaddl", CONTROL_VALUE, RTF_TRPADDL, 0 },
- { "trpaddr", CONTROL_VALUE, RTF_TRPADDR, 0 },
- { "trpaddt", CONTROL_VALUE, RTF_TRPADDT, 0 },
- { "trpadob", CONTROL_VALUE, RTF_TRPADOB, 0 },
- { "trpadofb", CONTROL_VALUE, RTF_TRPADOFB, 0 },
- { "trpadofl", CONTROL_VALUE, RTF_TRPADOFL, 0 },
- { "trpadofr", CONTROL_VALUE, RTF_TRPADOFR, 0 },
- { "trpadoft", CONTROL_VALUE, RTF_TRPADOFT, 0 },
- { "trpadol", CONTROL_VALUE, RTF_TRPADOL, 0 },
- { "trpador", CONTROL_VALUE, RTF_TRPADOR, 0 },
- { "trpadot", CONTROL_VALUE, RTF_TRPADOT, 0 },
- { "trpat", CONTROL_VALUE, RTF_TRPAT, 0 },
- { "trqc", CONTROL_FLAG, RTF_TRQC, 0 },
- { "trql", CONTROL_FLAG, RTF_TRQL, 0 },
- { "trqr", CONTROL_FLAG, RTF_TRQR, 0 },
- { "trrh", CONTROL_VALUE, RTF_TRRH, 0 },
- { "trshdng", CONTROL_VALUE, RTF_TRSHDNG, 0 },
- { "trspdb", CONTROL_VALUE, RTF_TRSPDB, 0 },
- { "trspdfb", CONTROL_VALUE, RTF_TRSPDFB, 0 },
- { "trspdfl", CONTROL_VALUE, RTF_TRSPDFL, 0 },
- { "trspdfr", CONTROL_VALUE, RTF_TRSPDFR, 0 },
- { "trspdft", CONTROL_VALUE, RTF_TRSPDFT, 0 },
- { "trspdl", CONTROL_VALUE, RTF_TRSPDL, 0 },
- { "trspdr", CONTROL_VALUE, RTF_TRSPDR, 0 },
- { "trspdt", CONTROL_VALUE, RTF_TRSPDT, 0 },
- { "trspob", CONTROL_VALUE, RTF_TRSPOB, 0 },
- { "trspofb", CONTROL_VALUE, RTF_TRSPOFB, 0 },
- { "trspofl", CONTROL_VALUE, RTF_TRSPOFL, 0 },
- { "trspofr", CONTROL_VALUE, RTF_TRSPOFR, 0 },
- { "trspoft", CONTROL_VALUE, RTF_TRSPOFT, 0 },
- { "trspol", CONTROL_VALUE, RTF_TRSPOL, 0 },
- { "trspor", CONTROL_VALUE, RTF_TRSPOR, 0 },
- { "trspot", CONTROL_VALUE, RTF_TRSPOT, 0 },
- { "truncatefontheight", CONTROL_FLAG, RTF_TRUNCATEFONTHEIGHT, 0 },
- { "truncex", CONTROL_FLAG, RTF_TRUNCEX, 0 },
- { "trwWidthA", CONTROL_VALUE, RTF_TRWWIDTHA, 0 },
- { "trwWidthB", CONTROL_VALUE, RTF_TRWWIDTHB, 0 },
- { "trwWidth", CONTROL_VALUE, RTF_TRWWIDTH, 0 },
- { "ts", CONTROL_VALUE, RTF_TS, 0 },
- { "tsbgbdiag", CONTROL_FLAG, RTF_TSBGBDIAG, 0 },
- { "tsbgcross", CONTROL_FLAG, RTF_TSBGCROSS, 0 },
- { "tsbgdcross", CONTROL_FLAG, RTF_TSBGDCROSS, 0 },
- { "tsbgdkbdiag", CONTROL_FLAG, RTF_TSBGDKBDIAG, 0 },
- { "tsbgdkcross", CONTROL_FLAG, RTF_TSBGDKCROSS, 0 },
- { "tsbgdkdcross", CONTROL_FLAG, RTF_TSBGDKDCROSS, 0 },
- { "tsbgdkfdiag", CONTROL_FLAG, RTF_TSBGDKFDIAG, 0 },
- { "tsbgdkhor", CONTROL_FLAG, RTF_TSBGDKHOR, 0 },
- { "tsbgdkvert", CONTROL_FLAG, RTF_TSBGDKVERT, 0 },
- { "tsbgfdiag", CONTROL_FLAG, RTF_TSBGFDIAG, 0 },
- { "tsbghoriz", CONTROL_FLAG, RTF_TSBGHORIZ, 0 },
- { "tsbgvert", CONTROL_FLAG, RTF_TSBGVERT, 0 },
- { "tsbrdrb", CONTROL_FLAG, RTF_TSBRDRB, 0 },
- { "tsbrdrdgl", CONTROL_FLAG, RTF_TSBRDRDGL, 0 },
- { "tsbrdrdgr", CONTROL_FLAG, RTF_TSBRDRDGR, 0 },
- { "tsbrdrh", CONTROL_FLAG, RTF_TSBRDRH, 0 },
- { "tsbrdrl", CONTROL_FLAG, RTF_TSBRDRL, 0 },
- { "tsbrdrr", CONTROL_FLAG, RTF_TSBRDRR, 0 },
- { "tsbrdrt", CONTROL_FLAG, RTF_TSBRDRT, 0 },
- { "tsbrdrv", CONTROL_FLAG, RTF_TSBRDRV, 0 },
- { "tscbandhorzeven", CONTROL_FLAG, RTF_TSCBANDHORZEVEN, 0 },
- { "tscbandhorzodd", CONTROL_FLAG, RTF_TSCBANDHORZODD, 0 },
- { "tscbandsh", CONTROL_VALUE, RTF_TSCBANDSH, 0 },
- { "tscbandsv", CONTROL_VALUE, RTF_TSCBANDSV, 0 },
- { "tscbandverteven", CONTROL_FLAG, RTF_TSCBANDVERTEVEN, 0 },
- { "tscbandvertodd", CONTROL_FLAG, RTF_TSCBANDVERTODD, 0 },
- { "tscellcbpat", CONTROL_VALUE, RTF_TSCELLCBPAT, 0 },
- { "tscellcfpat", CONTROL_VALUE, RTF_TSCELLCFPAT, 0 },
- { "tscellpaddb", CONTROL_VALUE, RTF_TSCELLPADDB, 0 },
- { "tscellpaddfb", CONTROL_VALUE, RTF_TSCELLPADDFB, 0 },
- { "tscellpaddfl", CONTROL_VALUE, RTF_TSCELLPADDFL, 0 },
- { "tscellpaddfr", CONTROL_VALUE, RTF_TSCELLPADDFR, 0 },
- { "tscellpaddft", CONTROL_VALUE, RTF_TSCELLPADDFT, 0 },
- { "tscellpaddl", CONTROL_VALUE, RTF_TSCELLPADDL, 0 },
- { "tscellpaddr", CONTROL_VALUE, RTF_TSCELLPADDR, 0 },
- { "tscellpaddt", CONTROL_VALUE, RTF_TSCELLPADDT, 0 },
- { "tscellpct", CONTROL_VALUE, RTF_TSCELLPCT, 0 },
- { "tscellwidth", CONTROL_VALUE, RTF_TSCELLWIDTH, 0 },
- { "tscellwidthfts", CONTROL_VALUE, RTF_TSCELLWIDTHFTS, 0 },
- { "tscfirstcol", CONTROL_FLAG, RTF_TSCFIRSTCOL, 0 },
- { "tscfirstrow", CONTROL_FLAG, RTF_TSCFIRSTROW, 0 },
- { "tsclastcol", CONTROL_FLAG, RTF_TSCLASTCOL, 0 },
- { "tsclastrow", CONTROL_FLAG, RTF_TSCLASTROW, 0 },
- { "tscnecell", CONTROL_FLAG, RTF_TSCNECELL, 0 },
- { "tscnwcell", CONTROL_FLAG, RTF_TSCNWCELL, 0 },
- { "tscsecell", CONTROL_FLAG, RTF_TSCSECELL, 0 },
- { "tscswcell", CONTROL_FLAG, RTF_TSCSWCELL, 0 },
- { "tsd", CONTROL_FLAG, RTF_TSD, 0 },
- { "tsnowrap", CONTROL_FLAG, RTF_TSNOWRAP, 0 },
- { "tsrowd", CONTROL_FLAG, RTF_TSROWD, 0 },
- { "tsvertalb", CONTROL_FLAG, RTF_TSVERTALB, 0 },
- { "tsvertalc", CONTROL_FLAG, RTF_TSVERTALC, 0 },
- { "tsvertalt", CONTROL_FLAG, RTF_TSVERTALT, 0 },
- { "twoinone", CONTROL_VALUE, RTF_TWOINONE, 0 },
- { "twoonone", CONTROL_FLAG, RTF_TWOONONE, 0 },
- { "tx", CONTROL_VALUE, RTF_TX, 0 },
- { "txbxtwalways", CONTROL_FLAG, RTF_TXBXTWALWAYS, 0 },
- { "txbxtwfirst", CONTROL_FLAG, RTF_TXBXTWFIRST, 0 },
- { "txbxtwfirstlast", CONTROL_FLAG, RTF_TXBXTWFIRSTLAST, 0 },
- { "txbxtwlast", CONTROL_FLAG, RTF_TXBXTWLAST, 0 },
- { "txbxtwno", CONTROL_FLAG, RTF_TXBXTWNO, 0 },
- { "txe", CONTROL_DESTINATION, RTF_TXE, 0 },
- { "u", CONTROL_VALUE, RTF_U, 0 },
- { "uc", CONTROL_VALUE, RTF_UC, 1 },
- { "ud", CONTROL_DESTINATION, RTF_UD, 0 },
- { "ul", CONTROL_TOGGLE, RTF_UL, 1 },
- { "ulc", CONTROL_VALUE, RTF_ULC, 0 },
- { "uld", CONTROL_FLAG, RTF_ULD, 0 },
- { "uldash", CONTROL_TOGGLE, RTF_ULDASH, 1 },
- { "uldashd", CONTROL_TOGGLE, RTF_ULDASHD, 1 },
- { "uldashdd", CONTROL_TOGGLE, RTF_ULDASHDD, 1 },
- { "uldb", CONTROL_TOGGLE, RTF_ULDB, 1 },
- { "ulhair", CONTROL_TOGGLE, RTF_ULHAIR, 1 },
- { "ulhwave", CONTROL_TOGGLE, RTF_ULHWAVE, 1 },
- { "ulldash", CONTROL_TOGGLE, RTF_ULLDASH, 1 },
- { "ulnone", CONTROL_FLAG, RTF_ULNONE, 0 },
- { "ulth", CONTROL_TOGGLE, RTF_ULTH, 1 },
- { "ulthd", CONTROL_TOGGLE, RTF_ULTHD, 1 },
- { "ulthdash", CONTROL_TOGGLE, RTF_ULTHDASH, 1 },
- { "ulthdashd", CONTROL_TOGGLE, RTF_ULTHDASHD, 1 },
- { "ulthdashdd", CONTROL_TOGGLE, RTF_ULTHDASHDD, 1 },
- { "ulthldash", CONTROL_TOGGLE, RTF_ULTHLDASH, 1 },
- { "ululdbwave", CONTROL_TOGGLE, RTF_ULULDBWAVE, 1 },
- { "ulw", CONTROL_FLAG, RTF_ULW, 0 },
- { "ulwave", CONTROL_TOGGLE, RTF_ULWAVE, 1 },
- { "up", CONTROL_VALUE, RTF_UP, 6 },
- { "upr", CONTROL_DESTINATION, RTF_UPR, 0 },
- { "urtf", CONTROL_VALUE, RTF_URTF, 0 },
- { "useltbaln", CONTROL_FLAG, RTF_USELTBALN, 0 },
- { "usenormstyforlist", CONTROL_FLAG, RTF_USENORMSTYFORLIST, 0 },
- { "userprops", CONTROL_DESTINATION, RTF_USERPROPS, 0 },
- { "usexform", CONTROL_FLAG, RTF_USEXFORM, 0 },
- { "utinl", CONTROL_FLAG, RTF_UTINL, 0 },
- { "v", CONTROL_TOGGLE, RTF_V, 1 },
- { "validatexml", CONTROL_VALUE, RTF_VALIDATEXML, 0 },
- { "vern", CONTROL_VALUE, RTF_VERN, 0 },
- { "version", CONTROL_VALUE, RTF_VERSION, 0 },
- { "vertal", CONTROL_FLAG, RTF_VERTAL, 0 },
- { "vertalb", CONTROL_FLAG, RTF_VERTALB, 0 },
- { "vertalc", CONTROL_FLAG, RTF_VERTALC, 0 },
- { "vertalj", CONTROL_FLAG, RTF_VERTALJ, 0 },
- { "vertalt", CONTROL_FLAG, RTF_VERTALT, 0 },
- { "vertdoc", CONTROL_FLAG, RTF_VERTDOC, 0 },
- { "vertsect", CONTROL_FLAG, RTF_VERTSECT, 0 },
- { "viewbksp", CONTROL_VALUE, RTF_VIEWBKSP, 0 },
- { "viewkind", CONTROL_VALUE, RTF_VIEWKIND, 0 },
- { "viewnobound", CONTROL_FLAG, RTF_VIEWNOBOUND, 0 },
- { "viewscale", CONTROL_VALUE, RTF_VIEWSCALE, 100 },
- { "viewzk", CONTROL_VALUE, RTF_VIEWZK, 0 },
- { "wbitmap", CONTROL_VALUE, RTF_WBITMAP, 0 },
- { "wbmbitspixel", CONTROL_VALUE, RTF_WBMBITSPIXEL, 1 },
- { "wbmplanes", CONTROL_VALUE, RTF_WBMPLANES, 0 },
- { "wbmwidthbyte", CONTROL_VALUE, RTF_WBMWIDTHBYTE, 0 },
- { "webhidden", CONTROL_FLAG, RTF_WEBHIDDEN, 0 },
- { "wgrffmtfilter", CONTROL_DESTINATION, RTF_WGRFFMTFILTER, 0 },
- { "widctlpar", CONTROL_FLAG, RTF_WIDCTLPAR, 0 },
- { "widowctrl", CONTROL_FLAG, RTF_WIDOWCTRL, 0 },
- { "windowcaption", CONTROL_DESTINATION, RTF_WINDOWCAPTION, 0 },
- { "wmetafile", CONTROL_VALUE, RTF_WMETAFILE, 1 },
- { "wpeqn", CONTROL_FLAG, RTF_WPEQN, 0 },
- { "wpjst", CONTROL_FLAG, RTF_WPJST, 0 },
- { "wpsp", CONTROL_FLAG, RTF_WPSP, 0 },
- { "wraparound", CONTROL_FLAG, RTF_WRAPAROUND, 0 },
- { "wrapdefault", CONTROL_FLAG, RTF_WRAPDEFAULT, 0 },
- { "wrapthrough", CONTROL_FLAG, RTF_WRAPTHROUGH, 0 },
- { "wraptight", CONTROL_FLAG, RTF_WRAPTIGHT, 0 },
- { "wraptrsp", CONTROL_FLAG, RTF_WRAPTRSP, 0 },
- { "writereservation", CONTROL_DESTINATION, RTF_WRITERESERVATION, 0 },
- { "writereservhash", CONTROL_DESTINATION, RTF_WRITERESERVHASH, 0 },
- { "wrppunct", CONTROL_FLAG, RTF_WRPPUNCT, 0 },
- { "xe", CONTROL_DESTINATION, RTF_XE, 0 },
- { "xef", CONTROL_VALUE, RTF_XEF, 0 },
- { "xform", CONTROL_DESTINATION, RTF_XFORM, 0 },
- { "xmlattr", CONTROL_FLAG, RTF_XMLATTR, 0 },
- { "xmlattrname", CONTROL_DESTINATION, RTF_XMLATTRNAME, 0 },
- { "xmlattrns", CONTROL_VALUE, RTF_XMLATTRNS, 0 },
- { "xmlattrvalue", CONTROL_DESTINATION, RTF_XMLATTRVALUE, 0 },
- { "xmlclose", CONTROL_DESTINATION, RTF_XMLCLOSE, 0 },
- { "xmlname", CONTROL_DESTINATION, RTF_XMLNAME, 0 },
- { "xmlns", CONTROL_VALUE, RTF_XMLNS, 0 },
- { "xmlnstbl", CONTROL_DESTINATION, RTF_XMLNSTBL, 0 },
- { "xmlopen", CONTROL_DESTINATION, RTF_XMLOPEN, 0 },
- { "xmlsdttcell", CONTROL_FLAG, RTF_XMLSDTTCELL, 0 },
- { "xmlsdttpara", CONTROL_FLAG, RTF_XMLSDTTPARA, 0 },
- { "xmlsdttregular", CONTROL_FLAG, RTF_XMLSDTTREGULAR, 0 },
- { "xmlsdttrow", CONTROL_FLAG, RTF_XMLSDTTROW, 0 },
- { "xmlsdttunknown", CONTROL_FLAG, RTF_XMLSDTTUNKNOWN, 0 },
- { "yr", CONTROL_VALUE, RTF_YR, 0 },
- { "yts", CONTROL_VALUE, RTF_YTS, 0 },
- { "yxe", CONTROL_FLAG, RTF_YXE, 0 },
- { "zwbo", CONTROL_SYMBOL, RTF_ZWBO, 0 },
- { "zwj", CONTROL_SYMBOL, RTF_ZWJ, 0 },
- { "zwnbo", CONTROL_SYMBOL, RTF_ZWNBO, 0 },
- { "zwnj", CONTROL_SYMBOL, RTF_ZWNJ, 0 },
- { "flymaincnt", CONTROL_DESTINATION, RTF_FLYMAINCNT, 0 },
- { "flyvert", CONTROL_VALUE, RTF_FLYVERT, 0 },
- { "flyhorz", CONTROL_VALUE, RTF_FLYHORZ, 0 },
- { "flyanchor", CONTROL_VALUE, RTF_FLYANCHOR, 0 },
-};
-int nRTFControlWords = SAL_N_ELEMENTS(aRTFControlWords);
-
-RTFMathSymbol const aRTFMathControlWords[] = {
- // eKeyword nToken eDestination
- { RTF_MOMATH, M_TOKEN(oMath), Destination::MOMATH },
- { RTF_MF, M_TOKEN(f), Destination::MF },
- { RTF_MFPR, M_TOKEN(fPr), Destination::MFPR },
- { RTF_MCTRLPR, M_TOKEN(ctrlPr), Destination::MCTRLPR },
- { RTF_MNUM, M_TOKEN(num), Destination::MNUM },
- { RTF_MDEN, M_TOKEN(den), Destination::MDEN },
- { RTF_MACC, M_TOKEN(acc), Destination::MACC },
- { RTF_MACCPR, M_TOKEN(accPr), Destination::MACCPR },
- { RTF_MBAR, M_TOKEN(bar), Destination::MBAR },
- { RTF_MBARPR, M_TOKEN(barPr), Destination::MBARPR },
- { RTF_ME, M_TOKEN(e), Destination::ME },
- { RTF_MD, M_TOKEN(d), Destination::MD },
- { RTF_MDPR, M_TOKEN(dPr), Destination::MDPR },
- { RTF_MFUNC, M_TOKEN(func), Destination::MFUNC },
- { RTF_MFUNCPR, M_TOKEN(funcPr), Destination::MFUNCPR },
- { RTF_MFNAME, M_TOKEN(fName), Destination::MFNAME },
- { RTF_MLIMLOW, M_TOKEN(limLow), Destination::MLIMLOW },
- { RTF_MLIMLOWPR, M_TOKEN(limLowPr), Destination::MLIMLOWPR },
- { RTF_MLIM, M_TOKEN(lim), Destination::MLIM },
- { RTF_MM, M_TOKEN(m), Destination::MM },
- { RTF_MMPR, M_TOKEN(mPr), Destination::MMPR },
- { RTF_MMR, M_TOKEN(mr), Destination::MMR },
- { RTF_MNARY, M_TOKEN(nary), Destination::MNARY },
- { RTF_MNARYPR, M_TOKEN(naryPr), Destination::MNARYPR },
- { RTF_MSUB, M_TOKEN(sub), Destination::MSUB },
- { RTF_MSUP, M_TOKEN(sup), Destination::MSUP },
- { RTF_MLIMUPP, M_TOKEN(limUpp), Destination::MLIMUPP },
- { RTF_MLIMUPPPR, M_TOKEN(limUppPr), Destination::MLIMUPPPR },
- { RTF_MGROUPCHR, M_TOKEN(groupChr), Destination::MGROUPCHR },
- { RTF_MGROUPCHRPR, M_TOKEN(groupChrPr), Destination::MGROUPCHRPR },
- { RTF_MBORDERBOX, M_TOKEN(borderBox), Destination::MBORDERBOX },
- { RTF_MBORDERBOXPR, M_TOKEN(borderBoxPr), Destination::MBORDERBOXPR },
- { RTF_MRAD, M_TOKEN(rad), Destination::MRAD },
- { RTF_MRADPR, M_TOKEN(radPr), Destination::MRADPR },
- { RTF_MDEG, M_TOKEN(deg), Destination::MDEG },
- { RTF_MSSUB, M_TOKEN(sSub), Destination::MSSUB },
- { RTF_MSSUBPR, M_TOKEN(sSubPr), Destination::MSSUBPR },
- { RTF_MSSUP, M_TOKEN(sSup), Destination::MSSUP },
- { RTF_MSSUPPR, M_TOKEN(sSupPr), Destination::MSSUPPR },
- { RTF_MSSUBSUP, M_TOKEN(sSubSup), Destination::MSSUBSUP },
- { RTF_MSSUBSUPPR, M_TOKEN(sSubSupPr), Destination::MSSUBSUPPR },
- { RTF_MSPRE, M_TOKEN(sPre), Destination::MSPRE },
- { RTF_MSPREPR, M_TOKEN(sPrePr), Destination::MSPREPR },
- { RTF_MBOX, M_TOKEN(box), Destination::MBOX },
- { RTF_MEQARR, M_TOKEN(eqArr), Destination::MEQARR },
-};
-int nRTFMathControlWords = SAL_N_ELEMENTS(aRTFMathControlWords);
-
-bool RTFMathSymbol::operator<(const RTFMathSymbol& rOther) const
-{
- return m_eKeyword < rOther.m_eKeyword;
-}
-
-} // namespace writerfilter
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/rtftok/rtfcontrolwords.hxx b/writerfilter/source/rtftok/rtfcontrolwords.hxx
deleted file mode 100644
index 92dc10e61dc1..000000000000
--- a/writerfilter/source/rtftok/rtfcontrolwords.hxx
+++ /dev/null
@@ -1,2053 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-
-#ifndef INCLUDED_WRITERFILTER_SOURCE_RTFTOK_RTFCONTROLWORDS_HXX
-#define INCLUDED_WRITERFILTER_SOURCE_RTFTOK_RTFCONTROLWORDS_HXX
-
-namespace writerfilter::rtftok
-{
-/**
- * An RTF destination state is the last open destination control word.
- *
- * Note that this is not a 1:1 mapping between destination control
- * words, e.g. RTF_PICT gets mapped to Destination::PICT or
- * Destination::SHAPEPROPERTYVALUEPICT.
- */
-enum class Destination
-{
- NORMAL,
- SKIP,
- FONTTABLE,
- FONTENTRY,
- COLORTABLE,
- STYLESHEET,
- STYLEENTRY,
- FIELD,
- FIELDINSTRUCTION,
- FIELDRESULT,
- LISTTABLE,
- LISTPICTURE,
- LISTENTRY,
- LISTNAME,
- LISTOVERRIDETABLE,
- LISTOVERRIDEENTRY,
- LISTLEVEL,
- LEVELTEXT,
- LEVELNUMBERS,
- SHPPICT,
- PICT,
- PICPROP,
- SHAPEPROPERTY,
- SHAPEPROPERTYNAME,
- SHAPEPROPERTYVALUE,
- SHAPE,
- SHAPEINSTRUCTION,
- SHAPEPROPERTYVALUEPICT,
- NESTEDTABLEPROPERTIES,
- FOOTNOTE,
- BOOKMARKSTART,
- BOOKMARKEND,
- REVISIONTABLE,
- REVISIONENTRY,
- SHAPETEXT,
- FORMFIELD,
- FORMFIELDNAME,
- FORMFIELDLIST,
- DATAFIELD,
- INFO,
- CREATIONTIME,
- REVISIONTIME,
- PRINTTIME,
- AUTHOR,
- KEYWORDS,
- OPERATOR,
- COMPANY,
- COMMENT,
- OBJECT,
- OBJDATA,
- OBJCLASS,
- RESULT,
- ANNOTATIONDATE,
- ANNOTATIONAUTHOR,
- ANNOTATIONREFERENCE,
- FALT,
- FLYMAINCONTENT,
- DRAWINGOBJECT,
- PARAGRAPHNUMBERING,
- PARAGRAPHNUMBERING_TEXTBEFORE,
- PARAGRAPHNUMBERING_TEXTAFTER,
- TITLE,
- SUBJECT,
- DOCCOMM,
- ATNID,
- ANNOTATIONREFERENCESTART,
- ANNOTATIONREFERENCEEND,
- MOMATH,
- MR,
- MF,
- MFPR,
- MCTRLPR,
- MNUM,
- MDEN,
- MACC,
- MACCPR,
- MCHR,
- MPOS,
- MVERTJC,
- MSTRIKEH,
- MDEGHIDE,
- ME,
- MBAR,
- MBARPR,
- MD,
- MDPR,
- MBEGCHR,
- MSEPCHR,
- MENDCHR,
- MFUNC,
- MFUNCPR,
- MFNAME,
- MLIMLOW,
- MLIMLOWPR,
- MLIM,
- MM,
- MMPR,
- MMR,
- MNARY,
- MNARYPR,
- MSUB,
- MSUP,
- MSUBHIDE,
- MSUPHIDE,
- MLIMUPP,
- MLIMUPPPR,
- MGROUPCHR,
- MGROUPCHRPR,
- MBORDERBOX,
- MBORDERBOXPR,
- MRAD,
- MRADPR,
- MDEG,
- MSSUB,
- MSSUBPR,
- MSSUP,
- MSSUPPR,
- MSSUBSUP,
- MSSUBSUPPR,
- MSPRE,
- MSPREPR,
- MTYPE,
- MGROW,
- MBOX,
- MEQARR,
- UPR,
- LFOLEVEL,
- BACKGROUND,
- SHAPEGROUP,
- FOOTNOTESEPARATOR,
- INDEXENTRY,
- TOCENTRY,
- USERPROPS,
- PROPNAME,
- STATICVAL,
- GENERATOR,
-};
-
-enum RTFKeyword
-{
- RTF_invalid = -1,
- RTF_HEXCHAR,
- RTF_OPTHYPH,
- RTF_IGNORE,
- RTF_SUBENTRY,
- RTF_BACKSLASH,
- RTF_NOBRKHYPH,
- RTF_LBRACE,
- RTF_FORMULA,
- RTF_RBRACE,
- RTF_NOBREAK,
- RTF_AB,
- RTF_ABSH,
- RTF_ABSLOCK,
- RTF_ABSNOOVRLP,
- RTF_ABSW,
- RTF_ACAPS,
- RTF_ACCCIRCLE,
- RTF_ACCCOMMA,
- RTF_ACCDOT,
- RTF_ACCNONE,
- RTF_ACCUNDERDOT,
- RTF_ACF,
- RTF_ADEFF,
- RTF_ADDITIVE,
- RTF_ADEFLANG,
- RTF_ADJUSTRIGHT,
- RTF_ADN,
- RTF_AENDDOC,
- RTF_AENDNOTES,
- RTF_AEXPND,
- RTF_AF,
- RTF_AFELEV,
- RTF_AFS,
- RTF_AFTNBJ,
- RTF_AFTNCN,
- RTF_AFTNNALC,
- RTF_AFTNNAR,
- RTF_AFTNNAUC,
- RTF_AFTNNCHI,
- RTF_AFTNNCHOSUNG,
- RTF_AFTNNCNUM,
- RTF_AFTNNDBAR,
- RTF_AFTNNDBNUM,
- RTF_AFTNNDBNUMD,
- RTF_AFTNNDBNUMK,
- RTF_AFTNNDBNUMT,
- RTF_AFTNNGANADA,
- RTF_AFTNNGBNUM,
- RTF_AFTNNGBNUMD,
- RTF_AFTNNGBNUMK,
- RTF_AFTNNGBNUML,
- RTF_AFTNNRLC,
- RTF_AFTNNRUC,
- RTF_AFTNNZODIAC,
- RTF_AFTNNZODIACD,
- RTF_AFTNNZODIACL,
- RTF_AFTNRESTART,
- RTF_AFTNRSTCONT,
- RTF_AFTNSEP,
- RTF_AFTNSEPC,
- RTF_AFTNSTART,
- RTF_AFTNTJ,
- RTF_AI,
- RTF_ALANG,
- RTF_ALLOWFIELDENDSEL,
- RTF_ALLPROT,
- RTF_ALNTBLIND,
- RTF_ALT,
- RTF_ANIMTEXT,
- RTF_ANNOTATION,
- RTF_ANNOTPROT,
- RTF_ANSI,
- RTF_ANSICPG,
- RTF_AOUTL,
- RTF_APPLYBRKRULES,
- RTF_ASCAPS,
- RTF_ASHAD,
- RTF_ASIANBRKRULE,
- RTF_ASPALPHA,
- RTF_ASPNUM,
- RTF_ASTRIKE,
- RTF_ATNAUTHOR,
- RTF_ATNDATE,
- RTF_ATNICN,
- RTF_ATNID,
- RTF_ATNPARENT,
- RTF_ATNREF,
- RTF_ATNTIME,
- RTF_ATRFEND,
- RTF_ATRFSTART,
- RTF_AUL,
- RTF_AULD,
- RTF_AULDB,
- RTF_AULNONE,
- RTF_AULW,
- RTF_AUP,
- RTF_AUTHOR,
- RTF_AUTOFMTOVERRIDE,
- RTF_B,
- RTF_BACKGROUND,
- RTF_BDBFHDR,
- RTF_BDRRLSWSIX,
- RTF_BGBDIAG,
- RTF_BGCROSS,
- RTF_BGDCROSS,
- RTF_BGDKBDIAG,
- RTF_BGDKCROSS,
- RTF_BGDKDCROSS,
- RTF_BGDKFDIAG,
- RTF_BGDKHORIZ,
- RTF_BGDKVERT,
- RTF_BGFDIAG,
- RTF_BGHORIZ,
- RTF_BGVERT,
- RTF_BIN,
- RTF_BINFSXN,
- RTF_BINSXN,
- RTF_BKMKCOLF,
- RTF_BKMKCOLL,
- RTF_BKMKEND,
- RTF_BKMKPUB,
- RTF_BKMKSTART,
- RTF_BLIPTAG,
- RTF_BLIPUID,
- RTF_BLIPUPI,
- RTF_BLUE,
- RTF_BOOKFOLD,
- RTF_BOOKFOLDREV,
- RTF_BOOKFOLDSHEETS,
- RTF_BOX,
- RTF_BRDRART,
- RTF_BRDRB,
- RTF_BRDRBAR,
- RTF_BRDRBTW,
- RTF_BRDRCF,
- RTF_BRDRDASH,
- RTF_BRDRDASHD,
- RTF_BRDRDASHDD,
- RTF_BRDRDASHDOTSTR,
- RTF_BRDRDASHSM,
- RTF_BRDRDB,
- RTF_BRDRDOT,
- RTF_BRDREMBOSS,
- RTF_BRDRENGRAVE,
- RTF_BRDRFRAME,
- RTF_BRDRHAIR,
- RTF_BRDRINSET,
- RTF_BRDRL,
- RTF_BRDRNIL,
- RTF_BRDRNONE,
- RTF_BRDROUTSET,
- RTF_BRDRR,
- RTF_BRDRS,
- RTF_BRDRSH,
- RTF_BRDRT,
- RTF_BRDRTBL,
- RTF_BRDRTH,
- RTF_BRDRTHTNLG,
- RTF_BRDRTHTNMG,
- RTF_BRDRTHTNSG,
- RTF_BRDRTNTHLG,
- RTF_BRDRTNTHMG,
- RTF_BRDRTNTHSG,
- RTF_BRDRTNTHTNLG,
- RTF_BRDRTNTHTNMG,
- RTF_BRDRTNTHTNSG,
- RTF_BRDRTRIPLE,
- RTF_BRDRW,
- RTF_BRDRWAVY,
- RTF_BRDRWAVYDB,
- RTF_BRKFRM,
- RTF_BRSP,
- RTF_BULLET,
- RTF_BUPTIM,
- RTF_BXE,
- RTF_CACCENTFIVE,
- RTF_CACCENTFOUR,
- RTF_CACCENTONE,
- RTF_CACCENTSIX,
- RTF_CACCENTTHREE,
- RTF_CACCENTTWO,
- RTF_CACHEDCOLBAL,
- RTF_CAPS,
- RTF_CATEGORY,
- RTF_CB,
- RTF_CBACKGROUNDONE,
- RTF_CBACKGROUNDTWO,
- RTF_CBPAT,
- RTF_CCHS,
- RTF_CELL,
- RTF_CELLX,
- RTF_CF,
- RTF_CFOLLOWEDHYPERLINK,
- RTF_CFPAT,
- RTF_CGRID,
- RTF_CHARRSID,
- RTF_CHARSCALEX,
- RTF_CHATN,
- RTF_CHBGBDIAG,
- RTF_CHBGCROSS,
- RTF_CHBGDCROSS,
- RTF_CHBGDKBDIAG,
- RTF_CHBGDKCROSS,
- RTF_CHBGDKDCROSS,
- RTF_CHBGDKFDIAG,
- RTF_CHBGDKHORIZ,
- RTF_CHBGDKVERT,
- RTF_CHBGFDIAG,
- RTF_CHBGHORIZ,
- RTF_CHBGVERT,
- RTF_CHBRDR,
- RTF_CHCBPAT,
- RTF_CHCFPAT,
- RTF_CHDATE,
- RTF_CHDPA,
- RTF_CHDPL,
- RTF_CHFTN,
- RTF_CHFTNSEP,
- RTF_CHFTNSEPC,
- RTF_CHPGN,
- RTF_CHHRES,
- RTF_CHSHDNG,
- RTF_CHTIME,
- RTF_CHYPERLINK,
- RTF_CLBGBDIAG,
- RTF_CLBGCROSS,
- RTF_CLBGDCROSS,
- RTF_CLBGDKBDIAG,
- RTF_CLBGDKCROSS,
- RTF_CLBGDKDCROSS,
- RTF_CLBGDKFDIAG,
- RTF_CLBGDKHOR,
- RTF_CLBGDKVERT,
- RTF_CLBGFDIAG,
- RTF_CLBGHORIZ,
- RTF_CLBGVERT,
- RTF_CLBRDRB,
- RTF_CLBRDRL,
- RTF_CLBRDRR,
- RTF_CLBRDRT,
- RTF_CLCBPAT,
- RTF_CLCBPATRAW,
- RTF_CLCFPAT,
- RTF_CLCFPATRAW,
- RTF_CLDEL,
- RTF_CLDELAUTH,
- RTF_CLDELDTTM,
- RTF_CLDGLL,
- RTF_CLDGLU,
- RTF_CLFITTEXT,
- RTF_CLFTSWIDTH,
- RTF_CLHIDEMARK,
- RTF_CLINS,
- RTF_CLINSAUTH,
- RTF_CLINSDTTM,
- RTF_CLMGF,
- RTF_CLMRG,
- RTF_CLMRGD,
- RTF_CLMRGDAUTH,
- RTF_CLMRGDDTTM,
- RTF_CLMRGDR,
- RTF_CLNOWRAP,
- RTF_CLPADB,
- RTF_CLPADFB,
- RTF_CLPADFL,
- RTF_CLPADFR,
- RTF_CLPADFT,
- RTF_CLPADL,
- RTF_CLPADR,
- RTF_CLPADT,
- RTF_CLSPB,
- RTF_CLSPFB,
- RTF_CLSPFL,
- RTF_CLSPFR,
- RTF_CLSPFT,
- RTF_CLSPL,
- RTF_CLSPR,
- RTF_CLSPT,
- RTF_CLSHDNG,
- RTF_CLSHDNGRAW,
- RTF_CLSHDRAWNIL,
- RTF_CLSPLIT,
- RTF_CLSPLITR,
- RTF_CLTXBTLR,
- RTF_CLTXLRTB,
- RTF_CLTXLRTBV,
- RTF_CLTXTBRL,
- RTF_CLTXTBRLV,
- RTF_CLVERTALB,
- RTF_CLVERTALC,
- RTF_CLVERTALT,
- RTF_CLVMGF,
- RTF_CLVMRG,
- RTF_CLWWIDTH,
- RTF_CMAINDARKONE,
- RTF_CMAINDARKTWO,
- RTF_CMAINLIGHTONE,
- RTF_CMAINLIGHTTWO,
- RTF_COLLAPSED,
- RTF_COLNO,
- RTF_COLORSCHEMEMAPPING,
- RTF_COLORTBL,
- RTF_COLS,
- RTF_COLSR,
- RTF_COLSX,
- RTF_COLUMN,
- RTF_COLW,
- RTF_COMMENT,
- RTF_COMPANY,
- RTF_CONTEXTUALSPACE,
- RTF_CPG,
- RTF_CRAUTH,
- RTF_CRDATE,
- RTF_CREATIM,
- RTF_CS,
- RTF_CSHADE,
- RTF_CTEXTONE,
- RTF_CTEXTTWO,
- RTF_CTINT,
- RTF_CTRL,
- RTF_CTS,
- RTF_CUFI,
- RTF_CULI,
- RTF_CURI,
- RTF_CVMME,
- RTF_DATAFIELD,
- RTF_DATASTORE,
- RTF_DATE,
- RTF_DBCH,
- RTF_DEFCHP,
- RTF_DEFF,
- RTF_DEFFORMAT,
- RTF_DEFLANG,
- RTF_DEFLANGFE,
- RTF_DEFPAP,
- RTF_DEFSHP,
- RTF_DEFTAB,
- RTF_DELETED,
- RTF_DELRSID,
- RTF_DFRAUTH,
- RTF_DFRDATE,
- RTF_DFRMTXTX,
- RTF_DFRMTXTY,
- RTF_DFRSTART,
- RTF_DFRSTOP,
- RTF_DFRXST,
- RTF_DGHORIGIN,
- RTF_DGHSHOW,
- RTF_DGHSPACE,
- RTF_DGMARGIN,
- RTF_DGSNAP,
- RTF_DGVORIGIN,
- RTF_DGVSHOW,
- RTF_DGVSPACE,
- RTF_DIBITMAP,
- RTF_DISABLED,
- RTF_DN,
- RTF_DNTBLNSBDB,
- RTF_DO,
- RTF_DOBXCOLUMN,
- RTF_DOBXMARGIN,
- RTF_DOBXPAGE,
- RTF_DOBYMARGIN,
- RTF_DOBYPAGE,
- RTF_DOBYPARA,
- RTF_DOCCOMM,
- RTF_DOCTEMP,
- RTF_DOCTYPE,
- RTF_DOCVAR,
- RTF_DODHGT,
- RTF_DOLOCK,
- RTF_DONOTEMBEDLINGDATA,
- RTF_DONOTEMBEDSYSFONT,
- RTF_DONOTSHOWCOMMENTS,
- RTF_DONOTSHOWINSDEL,
- RTF_DONOTSHOWMARKUP,
- RTF_DONOTSHOWPROPS,
- RTF_DPAENDHOL,
- RTF_DPAENDL,
- RTF_DPAENDSOL,
- RTF_DPAENDW,
- RTF_DPARC,
- RTF_DPARCFLIPX,
- RTF_DPARCFLIPY,
- RTF_DPASTARTHOL,
- RTF_DPASTARTL,
- RTF_DPASTARTSOL,
- RTF_DPASTARTW,
- RTF_DPCALLOUT,
- RTF_DPCOA,
- RTF_DPCOACCENT,
- RTF_DPCOBESTFIT,
- RTF_DPCOBORDER,
- RTF_DPCODABS,
- RTF_DPCODBOTTOM,
- RTF_DPCODCENTER,
- RTF_DPCODESCENT,
- RTF_DPCODTOP,
- RTF_DPCOLENGTH,
- RTF_DPCOMINUSX,
- RTF_DPCOMINUSY,
- RTF_DPCOOFFSET,
- RTF_DPCOSMARTA,
- RTF_DPCOTDOUBLE,
- RTF_DPCOTRIGHT,
- RTF_DPCOTSINGLE,
- RTF_DPCOTTRIPLE,
- RTF_DPCOUNT,
- RTF_DPELLIPSE,
- RTF_DPENDGROUP,
- RTF_DPFILLBGCB,
- RTF_DPFILLBGCG,
- RTF_DPFILLBGCR,
- RTF_DPFILLBGGRAY,
- RTF_DPFILLBGPAL,
- RTF_DPFILLFGCB,
- RTF_DPFILLFGCG,
- RTF_DPFILLFGCR,
- RTF_DPFILLFGGRAY,
- RTF_DPFILLFGPAL,
- RTF_DPFILLPAT,
- RTF_DPGROUP,
- RTF_DPLINE,
- RTF_DPLINECOB,
- RTF_DPLINECOG,
- RTF_DPLINECOR,
- RTF_DPLINEDADO,
- RTF_DPLINEDADODO,
- RTF_DPLINEDASH,
- RTF_DPLINEDOT,
- RTF_DPLINEGRAY,
- RTF_DPLINEHOLLOW,
- RTF_DPLINEPAL,
- RTF_DPLINESOLID,
- RTF_DPLINEW,
- RTF_DPPOLYCOUNT,
- RTF_DPPOLYGON,
- RTF_DPPOLYLINE,
- RTF_DPPTX,
- RTF_DPPTY,
- RTF_DPRECT,
- RTF_DPROUNDR,
- RTF_DPSHADOW,
- RTF_DPSHADX,
- RTF_DPSHADY,
- RTF_DPTXBTLR,
- RTF_DPTXBX,
- RTF_DPTXBXMAR,
- RTF_DPTXBXTEXT,
- RTF_DPTXLRTB,
- RTF_DPTXLRTBV,
- RTF_DPTXTBRL,
- RTF_DPTXTBRLV,
- RTF_DPX,
- RTF_DPXSIZE,
- RTF_DPY,
- RTF_DPYSIZE,
- RTF_DROPCAPLI,
- RTF_DROPCAPT,
- RTF_DS,
- RTF_DXFRTEXT,
- RTF_DY,
- RTF_EBCEND,
- RTF_EBCSTART,
- RTF_EDMINS,
- RTF_EMBO,
- RTF_EMDASH,
- RTF_EMFBLIP,
- RTF_EMSPACE,
- RTF_ENDASH,
- RTF_ENDDOC,
- RTF_ENDNHERE,
- RTF_ENDNOTES,
- RTF_ENFORCEPROT,
- RTF_ENSPACE,
- RTF_EXPND,
- RTF_EXPNDTW,
- RTF_EXPSHRTN,
- RTF_F,
- RTF_FAAUTO,
- RTF_FACENTER,
- RTF_FACINGP,
- RTF_FACTOIDNAME,
- RTF_FAFIXED,
- RTF_FAHANG,
- RTF_FALT,
- RTF_FAROMAN,
- RTF_FAVAR,
- RTF_FBIAS,
- RTF_FBIDI,
- RTF_FBIDIS,
- RTF_FBIMAJOR,
- RTF_FBIMINOR,
- RTF_FCHARS,
- RTF_FCHARSET,
- RTF_FCS,
- RTF_FDBMAJOR,
- RTF_FDBMINOR,
- RTF_FDECOR,
- RTF_FELNBRELEV,
- RTF_FET,
- RTF_FETCH,
- RTF_FFDEFRES,
- RTF_FFDEFTEXT,
- RTF_FFENTRYMCR,
- RTF_FFEXITMCR,
- RTF_FFFORMAT,
- RTF_FFHASLISTBOX,
- RTF_FFHELPTEXT,
- RTF_FFHPS,
- RTF_FFL,
- RTF_FFMAXLEN,
- RTF_FFNAME,
- RTF_FFOWNHELP,
- RTF_FFOWNSTAT,
- RTF_FFPROT,
- RTF_FFRECALC,
- RTF_FFRES,
- RTF_FFSIZE,
- RTF_FFSTATTEXT,
- RTF_FFTYPE,
- RTF_FFTYPETXT,
- RTF_FHIMAJOR,
- RTF_FHIMINOR,
- RTF_FI,
- RTF_FID,
- RTF_FIELD,
- RTF_FILE,
- RTF_FILETBL,
- RTF_FITTEXT,
- RTF_FJGOTHIC,
- RTF_FJMINCHOU,
- RTF_FLDALT,
- RTF_FLDDIRTY,
- RTF_FLDEDIT,
- RTF_FLDINST,
- RTF_FLDLOCK,
- RTF_FLDPRIV,
- RTF_FLDRSLT,
- RTF_FLDTYPE,
- RTF_FLOMAJOR,
- RTF_FLOMINOR,
- RTF_FMODERN,
- RTF_FN,
- RTF_FNAME,
- RTF_FNETWORK,
- RTF_FNIL,
- RTF_FNONFILESYS,
- RTF_FONTEMB,
- RTF_FONTFILE,
- RTF_FONTTBL,
- RTF_FOOTER,
- RTF_FOOTERF,
- RTF_FOOTERL,
- RTF_FOOTERR,
- RTF_FOOTERY,
- RTF_FOOTNOTE,
- RTF_FORCEUPGRADE,
- RTF_FORMDISP,
- RTF_FORMFIELD,
- RTF_FORMPROT,
- RTF_FORMSHADE,
- RTF_FOSNUM,
- RTF_FPRQ,
- RTF_FRACWIDTH,
- RTF_FRELATIVE,
- RTF_FRMTXBTLR,
- RTF_FRMTXLRTB,
- RTF_FRMTXLRTBV,
- RTF_FRMTXTBRL,
- RTF_FRMTXTBRLV,
- RTF_FROMAN,
- RTF_FROMHTML,
- RTF_FROMTEXT,
- RTF_FS,
- RTF_FSCRIPT,
- RTF_FSWISS,
- RTF_FTECH,
- RTF_FTNALT,
- RTF_FTNBJ,
- RTF_FTNCN,
- RTF_FTNIL,
- RTF_FTNLYTWNINE,
- RTF_FTNNALC,
- RTF_FTNNAR,
- RTF_FTNNAUC,
- RTF_FTNNCHI,
- RTF_FTNNCHOSUNG,
- RTF_FTNNCNUM,
- RTF_FTNNDBAR,
- RTF_FTNNDBNUM,
- RTF_FTNNDBNUMD,
- RTF_FTNNDBNUMK,
- RTF_FTNNDBNUMT,
- RTF_FTNNGANADA,
- RTF_FTNNGBNUM,
- RTF_FTNNGBNUMD,
- RTF_FTNNGBNUMK,
- RTF_FTNNGBNUML,
- RTF_FTNNRLC,
- RTF_FTNNRUC,
- RTF_FTNNZODIAC,
- RTF_FTNNZODIACD,
- RTF_FTNNZODIACL,
- RTF_FTNRESTART,
- RTF_FTNRSTCONT,
- RTF_FTNRSTPG,
- RTF_FTNSEP,
- RTF_FTNSEPC,
- RTF_FTNSTART,
- RTF_FTNTJ,
- RTF_FTTRUETYPE,
- RTF_FVALIDDOS,
- RTF_FVALIDHPFS,
- RTF_FVALIDMAC,
- RTF_FVALIDNTFS,
- RTF_G,
- RTF_GCW,
- RTF_GENERATOR,
- RTF_GREEN,
- RTF_GRFDOCEVENTS,
- RTF_GRIDTBL,
- RTF_GUTTER,
- RTF_GUTTERPRL,
- RTF_GUTTERSXN,
- RTF_HEADER,
- RTF_HEADERF,
- RTF_HEADERL,
- RTF_HEADERR,
- RTF_HEADERY,
- RTF_HICH,
- RTF_HIGHLIGHT,
- RTF_HL,
- RTF_HLFR,
- RTF_HLINKBASE,
- RTF_HLLOC,
- RTF_HLSRC,
- RTF_HORZDOC,
- RTF_HORZSECT,
- RTF_HORZVERT,
- RTF_HR,
- RTF_HRES,
- RTF_HRULE,
- RTF_HSV,
- RTF_HTMAUTSP,
- RTF_HTMLBASE,
- RTF_HTMLRTF,
- RTF_HTMLTAG,
- RTF_HWELEV,
- RTF_HYPHAUTO,
- RTF_HYPHCAPS,
- RTF_HYPHCONSEC,
- RTF_HYPHHOTZ,
- RTF_HYPHPAR,
- RTF_I,
- RTF_ID,
- RTF_IGNOREMIXEDCONTENT,
- RTF_ILFOMACATCLNUP,
- RTF_ILVL,
- RTF_IMPR,
- RTF_INDMIRROR,
- RTF_INDRLSWELEVEN,
- RTF_INFO,
- RTF_INSRSID,
- RTF_INTBL,
- RTF_IPGP,
- RTF_IROWBAND,
- RTF_IROW,
- RTF_ITAP,
- RTF_IXE,
- RTF_JCOMPRESS,
- RTF_JEXPAND,
- RTF_JIS,
- RTF_JPEGBLIP,
- RTF_JSKSU,
- RTF_KEEP,
- RTF_KEEPN,
- RTF_KERNING,
- RTF_KEYCODE,
- RTF_KEYWORDS,
- RTF_KRNPRSNET,
- RTF_KSULANG,
- RTF_JCLISTTAB,
- RTF_LANDSCAPE,
- RTF_LANG,
- RTF_LANGFE,
- RTF_LANGFENP,
- RTF_LANGNP,
- RTF_LASTROW,
- RTF_LATENTSTYLES,
- RTF_LBR,
- RTF_LCHARS,
- RTF_LDBLQUOTE,
- RTF_LEVEL,
- RTF_LEVELFOLLOW,
- RTF_LEVELINDENT,
- RTF_LEVELJC,
- RTF_LEVELJCN,
- RTF_LEVELLEGAL,
- RTF_LEVELNFC,
- RTF_LEVELNFCN,
- RTF_LEVELNORESTART,
- RTF_LEVELNUMBERS,
- RTF_LEVELOLD,
- RTF_LEVELPICTURE,
- RTF_LEVELPICTURENOSIZE,
- RTF_LEVELPREV,
- RTF_LEVELPREVSPACE,
- RTF_LEVELSPACE,
- RTF_LEVELSTARTAT,
- RTF_LEVELTEMPLATEID,
- RTF_LEVELTEXT,
- RTF_LFOLEVEL,
- RTF_LI,
- RTF_LINE,
- RTF_LINEBETCOL,
- RTF_LINECONT,
- RTF_LINEMOD,
- RTF_LINEPPAGE,
- RTF_LINERESTART,
- RTF_LINESTART,
- RTF_LINESTARTS,
- RTF_LINEX,
- RTF_LINKSELF,
- RTF_LINKSTYLES,
- RTF_LINKVAL,
- RTF_LIN,
- RTF_LISA,
- RTF_LISB,
- RTF_LIST,
- RTF_LISTHYBRID,
- RTF_LISTID,
- RTF_LISTLEVEL,
- RTF_LISTNAME,
- RTF_LISTOVERRIDE,
- RTF_LISTOVERRIDECOUNT,
- RTF_LISTOVERRIDEFORMAT,
- RTF_LISTOVERRIDESTARTAT,
- RTF_LISTOVERRIDETABLE,
- RTF_LISTPICTURE,
- RTF_LISTRESTARTHDN,
- RTF_LISTSIMPLE,
- RTF_LISTSTYLEID,
- RTF_LISTSTYLENAME,
- RTF_LISTTABLE,
- RTF_LISTTEMPLATEID,
- RTF_LISTTEXT,
- RTF_LNBRKRULE,
- RTF_LNDSCPSXN,
- RTF_LNONGRID,
- RTF_LOCH,
- RTF_LQUOTE,
- RTF_LS,
- RTF_LSDLOCKED,
- RTF_LSDLOCKEDDEF,
- RTF_LSDLOCKEDEXCEPT,
- RTF_LSDPRIORITY,
- RTF_LSDPRIORITYDEF,
- RTF_LSDQFORMAT,
- RTF_LSDQFORMATDEF,
- RTF_LSDSEMIHIDDEN,
- RTF_LSDSEMIHIDDENDEF,
- RTF_LSDSTIMAX,
- RTF_LSDUNHIDEUSED,
- RTF_LSDUNHIDEUSEDDEF,
- RTF_LTRCH,
- RTF_LTRDOC,
- RTF_LTRMARK,
- RTF_LTRPAR,
- RTF_LTRROW,
- RTF_LTRSECT,
- RTF_LVLTENTATIVE,
- RTF_LYTCALCTBLWD,
- RTF_LYTEXCTTP,
- RTF_LYTPRTMET,
- RTF_LYTTBLRTGR,
- RTF_MAC,
- RTF_MACC,
- RTF_MACCPR,
- RTF_MACPICT,
- RTF_MAILMERGE,
- RTF_MAKEBACKUP,
- RTF_MALN,
- RTF_MALNSCR,
- RTF_MANAGER,
- RTF_MARGB,
- RTF_MARGBSXN,
- RTF_MARGL,
- RTF_MARGLSXN,
- RTF_MARGMIRROR,
- RTF_MARGMIRSXN,
- RTF_MARGPR,
- RTF_MARGR,
- RTF_MARGRSXN,
- RTF_MARGSZ,
- RTF_MARGT,
- RTF_MARGTSXN,
- RTF_MBAR,
- RTF_MBARPR,
- RTF_MBASEJC,
- RTF_MBEGCHR,
- RTF_MBORDERBOX,
- RTF_MBORDERBOXPR,
- RTF_MBOX,
- RTF_MBOXPR,
- RTF_MBRK,
- RTF_MBRKBIN,
- RTF_MBRKBINSUB,
- RTF_MCGP,
- RTF_MCGPRULE,
- RTF_MCHR,
- RTF_MCOUNT,
- RTF_MCSP,
- RTF_MCTRLPR,
- RTF_MD,
- RTF_MDEFJC,
- RTF_MDEG,
- RTF_MDEGHIDE,
- RTF_MDEN,
- RTF_MDIFF,
- RTF_MDIFFSTY,
- RTF_MDISPDEF,
- RTF_MDPR,
- RTF_ME,
- RTF_MENDCHR,
- RTF_MEQARR,
- RTF_MEQARRPR,
- RTF_MF,
- RTF_MFNAME,
- RTF_MFPR,
- RTF_MFUNC,
- RTF_MFUNCPR,
- RTF_MGROUPCHR,
- RTF_MGROUPCHRPR,
- RTF_MGROW,
- RTF_MHIDEBOT,
- RTF_MHIDELEFT,
- RTF_MHIDERIGHT,
- RTF_MHIDETOP,
- RTF_MHTMLTAG,
- RTF_MIN,
- RTF_MINTERSP,
- RTF_MINTLIM,
- RTF_MINTRASP,
- RTF_MJC,
- RTF_MLIM,
- RTF_MLIMLOC,
- RTF_MLIMLOW,
- RTF_MLIMLOWPR,
- RTF_MLIMUPP,
- RTF_MLIMUPPPR,
- RTF_MLIT,
- RTF_MLMARGIN,
- RTF_MM,
- RTF_MMADDFIELDNAME,
- RTF_MMATH,
- RTF_MMATHFONT,
- RTF_MMATHPICT,
- RTF_MMATHPR,
- RTF_MMATTACH,
- RTF_MMAXDIST,
- RTF_MMBLANKLINES,
- RTF_MMC,
- RTF_MMCJC,
- RTF_MMCONNECTSTR,
- RTF_MMCONNECTSTRDATA,
- RTF_MMCPR,
- RTF_MMCS,
- RTF_MMDATASOURCE,
- RTF_MMDATATYPEACCESS,
- RTF_MMDATATYPEEXCEL,
- RTF_MMDATATYPEFILE,
- RTF_MMDATATYPEODBC,
- RTF_MMDATATYPEODSO,
- RTF_MMDATATYPEQT,
- RTF_MMDEFAULTSQL,
- RTF_MMDESTEMAIL,
- RTF_MMDESTFAX,
- RTF_MMDESTNEWDOC,
- RTF_MMDESTPRINTER,
- RTF_MMERRORS,
- RTF_MMFTTYPEADDRESS,
- RTF_MMFTTYPEBARCODE,
- RTF_MMFTTYPEDBCOLUMN,
- RTF_MMFTTYPEMAPPED,
- RTF_MMFTTYPENULL,
- RTF_MMFTTYPESALUTATION,
- RTF_MMHEADERSOURCE,
- RTF_MMJDSOTYPE,
- RTF_MMLINKTOQUERY,
- RTF_MMMAILSUBJECT,
- RTF_MMMAINTYPECATALOG,
- RTF_MMMAINTYPEEMAIL,
- RTF_MMMAINTYPEENVELOPES,
- RTF_MMMAINTYPEFAX,
- RTF_MMMAINTYPELABELS,
- RTF_MMMAINTYPELETTERS,
- RTF_MMODSO,
- RTF_MMODSOACTIVE,
- RTF_MMODSOCOLDELIM,
- RTF_MMODSOCOLUMN,
- RTF_MMODSODYNADDR,
- RTF_MMODSOFHDR,
- RTF_MMODSOFILTER,
- RTF_MMODSOFLDMPDATA,
- RTF_MMODSOFMCOLUMN,
- RTF_MMODSOHASH,
- RTF_MMODSOLID,
- RTF_MMODSOMAPPEDNAME,
- RTF_MMODSONAME,
- RTF_MMODSORECIPDATA,
- RTF_MMODSOSORT,
- RTF_MMODSOSRC,
- RTF_MMODSOTABLE,
- RTF_MMODSOUDL,
- RTF_MMODSOUDLDATA,
- RTF_MMODSOUNIQUETAG,
- RTF_MMPR,
- RTF_MMQUERY,
- RTF_MMR,
- RTF_MMRECCUR,
- RTF_MMSHOWDATA,
- RTF_MNARY,
- RTF_MNARYLIM,
- RTF_MNARYPR,
- RTF_MNOBREAK,
- RTF_MNOR,
- RTF_MNUM,
- RTF_MO,
- RTF_MOBJDIST,
- RTF_MOMATH,
- RTF_MOMATHPARA,
- RTF_MOMATHPARAPR,
- RTF_MOPEMU,
- RTF_MPHANT,
- RTF_MPHANTPR,
- RTF_MPLCHIDE,
- RTF_MPOS,
- RTF_MPOSTSP,
- RTF_MPRESP,
- RTF_MR,
- RTF_MRAD,
- RTF_MRADPR,
- RTF_MRMARGIN,
- RTF_MRPR,
- RTF_MRSP,
- RTF_MRSPRULE,
- RTF_MSCR,
- RTF_MSEPCHR,
- RTF_MSHOW,
- RTF_MSHP,
- RTF_MSMALLFRAC,
- RTF_MSMCAP,
- RTF_MSPRE,
- RTF_MSPREPR,
- RTF_MSSUB,
- RTF_MSSUBPR,
- RTF_MSSUBSUP,
- RTF_MSSUBSUPPR,
- RTF_MSSUP,
- RTF_MSSUPPR,
- RTF_MSTRIKEBLTR,
- RTF_MSTRIKEH,
- RTF_MSTRIKETLBR,
- RTF_MSTRIKEV,
- RTF_MSTY,
- RTF_MSUB,
- RTF_MSUBHIDE,
- RTF_MSUP,
- RTF_MSUPHIDE,
- RTF_MTRANSP,
- RTF_MTYPE,
- RTF_MUSER,
- RTF_MVAUTH,
- RTF_MVDATE,
- RTF_MVERTJC,
- RTF_MVF,
- RTF_MVFMF,
- RTF_MVFML,
- RTF_MVT,
- RTF_MVTOF,
- RTF_MVTOL,
- RTF_MWRAPINDENT,
- RTF_MWRAPRIGHT,
- RTF_MZEROASC,
- RTF_MZERODESC,
- RTF_MZEROWID,
- RTF_NESTCELL,
- RTF_NESTROW,
- RTF_NESTTABLEPROPS,
- RTF_NEWTBLSTYRULS,
- RTF_NEXTFILE,
- RTF_NOAFCNSTTBL,
- RTF_NOBRKWRPTBL,
- RTF_NOCOLBAL,
- RTF_NOCOMPATOPTIONS,
- RTF_NOCWRAP,
- RTF_NOCXSPTABLE,
- RTF_NOEXTRASPRL,
- RTF_NOFCHARS,
- RTF_NOFCHARSWS,
- RTF_NOFEATURETHROTTLE,
- RTF_NOFPAGES,
- RTF_NOFWORDS,
- RTF_NOGROWAUTOFIT,
- RTF_NOINDNMBRTS,
- RTF_NOJKERNPUNCT,
- RTF_NOLEAD,
- RTF_NOLINE,
- RTF_NOLNHTADJTBL,
- RTF_NONESTTABLES,
- RTF_NONSHPPICT,
- RTF_NOOVERFLOW,
- RTF_NOPROOF,
- RTF_NOQFPROMOTE,
- RTF_NOSECTEXPAND,
- RTF_NOSNAPLINEGRID,
- RTF_NOSPACEFORUL,
- RTF_NOSUPERSUB,
- RTF_NOTABIND,
- RTF_NOTBRKCNSTFRCTBL,
- RTF_NOTCVASP,
- RTF_NOTVATXBX,
- RTF_NOUICOMPAT,
- RTF_NOULTRLSPC,
- RTF_NOWIDCTLPAR,
- RTF_NOWRAP,
- RTF_NOWWRAP,
- RTF_NOXLATTOYEN,
- RTF_OBJALIAS,
- RTF_OBJALIGN,
- RTF_OBJATTPH,
- RTF_OBJAUTLINK,
- RTF_OBJCLASS,
- RTF_OBJCROPB,
- RTF_OBJCROPL,
- RTF_OBJCROPR,
- RTF_OBJCROPT,
- RTF_OBJDATA,
- RTF_OBJECT,
- RTF_OBJEMB,
- RTF_OBJH,
- RTF_OBJHTML,
- RTF_OBJICEMB,
- RTF_OBJLINK,
- RTF_OBJLOCK,
- RTF_OBJNAME,
- RTF_OBJOCX,
- RTF_OBJPUB,
- RTF_OBJSCALEX,
- RTF_OBJSCALEY,
- RTF_OBJSECT,
- RTF_OBJSETSIZE,
- RTF_OBJSUB,
- RTF_OBJTIME,
- RTF_OBJTRANSY,
- RTF_OBJUPDATE,
- RTF_OBJW,
- RTF_OGUTTER,
- RTF_OLDAS,
- RTF_OLDCPROPS,
- RTF_OLDLINEWRAP,
- RTF_OLDPPROPS,
- RTF_OLDSPROPS,
- RTF_OLDTPROPS,
- RTF_OLECLSID,
- RTF_OPERATOR,
- RTF_OTBLRUL,
- RTF_OUTL,
- RTF_OUTLINELEVEL,
- RTF_OVERLAY,
- RTF_PAGE,
- RTF_PAGEBB,
- RTF_PANOSE,
- RTF_PAPERH,
- RTF_PAPERW,
- RTF_PAR,
- RTF_PARARSID,
- RTF_PARD,
- RTF_PASSWORD,
- RTF_PASSWORDHASH,
- RTF_PC,
- RTF_PCA,
- RTF_PGBRDRB,
- RTF_PGBRDRFOOT,
- RTF_PGBRDRHEAD,
- RTF_PGBRDRL,
- RTF_PGBRDROPT,
- RTF_PGBRDRR,
- RTF_PGBRDRSNAP,
- RTF_PGBRDRT,
- RTF_PGHSXN,
- RTF_PGNBIDIA,
- RTF_PGNBIDIB,
- RTF_PGNCHOSUNG,
- RTF_PGNCNUM,
- RTF_PGNCONT,
- RTF_PGNDBNUM,
- RTF_PGNDBNUMD,
- RTF_PGNDBNUMK,
- RTF_PGNDBNUMT,
- RTF_PGNDEC,
- RTF_PGNDECD,
- RTF_PGNGANADA,
- RTF_PGNGBNUM,
- RTF_PGNGBNUMD,
- RTF_PGNGBNUMK,
- RTF_PGNGBNUML,
- RTF_PGNHINDIA,
- RTF_PGNHINDIB,
- RTF_PGNHINDIC,
- RTF_PGNHINDID,
- RTF_PGNHN,
- RTF_PGNHNSC,
- RTF_PGNHNSH,
- RTF_PGNHNSM,
- RTF_PGNHNSN,
- RTF_PGNHNSP,
- RTF_PGNID,
- RTF_PGNLCLTR,
- RTF_PGNLCRM,
- RTF_PGNRESTART,
- RTF_PGNSTART,
- RTF_PGNSTARTS,
- RTF_PGNTHAIA,
- RTF_PGNTHAIB,
- RTF_PGNTHAIC,
- RTF_PGNUCLTR,
- RTF_PGNUCRM,
- RTF_PGNVIETA,
- RTF_PGNX,
- RTF_PGNY,
- RTF_PGNZODIAC,
- RTF_PGNZODIACD,
- RTF_PGNZODIACL,
- RTF_PGP,
- RTF_PGPTBL,
- RTF_PGWSXN,
- RTF_PHCOL,
- RTF_PHMRG,
- RTF_PHPG,
- RTF_PICBMP,
- RTF_PICBPP,
- RTF_PICCROPB,
- RTF_PICCROPL,
- RTF_PICCROPR,
- RTF_PICCROPT,
- RTF_PICH,
- RTF_PICHGOAL,
- RTF_PICPROP,
- RTF_PICSCALED,
- RTF_PICSCALEX,
- RTF_PICSCALEY,
- RTF_PICT,
- RTF_PICW,
- RTF_PICWGOAL,
- RTF_PINDTABQC,
- RTF_PINDTABQL,
- RTF_PINDTABQR,
- RTF_PLAIN,
- RTF_PMARTABQC,
- RTF_PMARTABQL,
- RTF_PMARTABQR,
- RTF_PMMETAFILE,
- RTF_PN,
- RTF_PNACROSS,
- RTF_PNAIU,
- RTF_PNAIUD,
- RTF_PNAIUEO,
- RTF_PNAIUEOD,
- RTF_PNB,
- RTF_PNBIDIA,
- RTF_PNBIDIB,
- RTF_PNCAPS,
- RTF_PNCARD,
- RTF_PNCF,
- RTF_PNCHOSUNG,
- RTF_PNCNUM,
- RTF_PNDBNUM,
- RTF_PNDBNUMD,
- RTF_PNDBNUMK,
- RTF_PNDBNUML,
- RTF_PNDBNUMT,
- RTF_PNDEC,
- RTF_PNDECD,
- RTF_PNF,
- RTF_PNFS,
- RTF_PNGANADA,
- RTF_PNGBLIP,
- RTF_PNGBNUM,
- RTF_PNGBNUMD,
- RTF_PNGBNUMK,
- RTF_PNGBNUML,
- RTF_PNHANG,
- RTF_PNI,
- RTF_PNINDENT,
- RTF_PNIROHA,
- RTF_PNIROHAD,
- RTF_PNLCLTR,
- RTF_PNLCRM,
- RTF_PNLVL,
- RTF_PNLVLBLT,
- RTF_PNLVLBODY,
- RTF_PNLVLCONT,
- RTF_PNNUMONCE,
- RTF_PNORD,
- RTF_PNORDT,
- RTF_PNPREV,
- RTF_PNQC,
- RTF_PNQL,
- RTF_PNQR,
- RTF_PNRAUTH,
- RTF_PNRDATE,
- RTF_PNRESTART,
- RTF_PNRNFC,
- RTF_PNRNOT,
- RTF_PNRPNBR,
- RTF_PNRRGB,
- RTF_PNRSTART,
- RTF_PNRSTOP,
- RTF_PNRXST,
- RTF_PNSCAPS,
- RTF_PNSECLVL,
- RTF_PNSP,
- RTF_PNSTART,
- RTF_PNSTRIKE,
- RTF_PNTEXT,
- RTF_PNTXTA,
- RTF_PNTXTB,
- RTF_PNUCLTR,
- RTF_PNUCRM,
- RTF_PNUL,
- RTF_PNULD,
- RTF_PNULDASH,
- RTF_PNULDASHD,
- RTF_PNULDASHDD,
- RTF_PNULDB,
- RTF_PNULHAIR,
- RTF_PNULNONE,
- RTF_PNULTH,
- RTF_PNULW,
- RTF_PNULWAVE,
- RTF_PNZODIAC,
- RTF_PNZODIACD,
- RTF_PNZODIACL,
- RTF_POSNEGX,
- RTF_POSNEGY,
- RTF_POSX,
- RTF_POSXC,
- RTF_POSXI,
- RTF_POSXL,
- RTF_POSXO,
- RTF_POSXR,
- RTF_POSY,
- RTF_POSYB,
- RTF_POSYC,
- RTF_POSYIL,
- RTF_POSYIN,
- RTF_POSYOUT,
- RTF_POSYT,
- RTF_PRAUTH,
- RTF_PRCOLBL,
- RTF_PRDATE,
- RTF_PRINTDATA,
- RTF_PRINTIM,
- RTF_PRIVATE,
- RTF_PROPNAME,
- RTF_PROPTYPE,
- RTF_PROTECT,
- RTF_PROTEND,
- RTF_PROTLEVEL,
- RTF_PROTSTART,
- RTF_PROTUSERTBL,
- RTF_PSOVER,
- RTF_PSZ,
- RTF_PTABLDOT,
- RTF_PTABLMDOT,
- RTF_PTABLMINUS,
- RTF_PTABLNONE,
- RTF_PTABLUSCORE,
- RTF_PUBAUTO,
- RTF_PVMRG,
- RTF_PVPARA,
- RTF_PVPG,
- RTF_PWD,
- RTF_PXE,
- RTF_QC,
- RTF_QD,
- RTF_QJ,
- RTF_QK,
- RTF_QL,
- RTF_QMSPACE,
- RTF_QR,
- RTF_QT,
- RTF_RAWCLBGDKBDIAG,
- RTF_RAWCLBGBDIAG,
- RTF_RAWCLBGCROSS,
- RTF_RAWCLBGDCROSS,
- RTF_RAWCLBGDKCROSS,
- RTF_RAWCLBGDKDCROSS,
- RTF_RAWCLBGDKFDIAG,
- RTF_RAWCLBGDKHOR,
- RTF_RAWCLBGDKVERT,
- RTF_RAWCLBGFDIAG,
- RTF_RAWCLBGHORIZ,
- RTF_RAWCLBGVERT,
- RTF_RDBLQUOTE,
- RTF_READONLYRECOMMENDED,
- RTF_READPROT,
- RTF_RED,
- RTF_RELYONVML,
- RTF_REMDTTM,
- RTF_REMPERSONALINFO,
- RTF_RESULT,
- RTF_REVAUTH,
- RTF_REVAUTHDEL,
- RTF_REVBAR,
- RTF_REVDTTM,
- RTF_REVDTTMDEL,
- RTF_REVISED,
- RTF_REVISIONS,
- RTF_REVPROP,
- RTF_REVPROT,
- RTF_REVTBL,
- RTF_REVTIM,
- RTF_RI,
- RTF_RIN,
- RTF_ROW,
- RTF_RQUOTE,
- RTF_RSID,
- RTF_RSIDROOT,
- RTF_RSIDTBL,
- RTF_RSLTBMP,
- RTF_RSLTHTML,
- RTF_RSLTMERGE,
- RTF_RSLTPICT,
- RTF_RSLTRTF,
- RTF_RSLTTXT,
- RTF_RTF,
- RTF_RTLCH,
- RTF_RTLDOC,
- RTF_RTLGUTTER,
- RTF_RTLMARK,
- RTF_RTLPAR,
- RTF_RTLROW,
- RTF_RTLSECT,
- RTF_RXE,
- RTF_S,
- RTF_SA,
- RTF_SAAUTO,
- RTF_SAFTNNALC,
- RTF_SAFTNNAR,
- RTF_SAFTNNAUC,
- RTF_SAFTNNCHI,
- RTF_SAFTNNCHOSUNG,
- RTF_SAFTNNCNUM,
- RTF_SAFTNNDBAR,
- RTF_SAFTNNDBNUM,
- RTF_SAFTNNDBNUMD,
- RTF_SAFTNNDBNUMK,
- RTF_SAFTNNDBNUMT,
- RTF_SAFTNNGANADA,
- RTF_SAFTNNGBNUM,
- RTF_SAFTNNGBNUMD,
- RTF_SAFTNNGBNUMK,
- RTF_SAFTNNGBNUML,
- RTF_SAFTNNRLC,
- RTF_SAFTNNRUC,
- RTF_SAFTNNZODIAC,
- RTF_SAFTNNZODIACD,
- RTF_SAFTNNZODIACL,
- RTF_SAFTNRESTART,
- RTF_SAFTNRSTCONT,
- RTF_SAFTNSTART,
- RTF_SAUTOUPD,
- RTF_SAVEINVALIDXML,
- RTF_SAVEPREVPICT,
- RTF_SB,
- RTF_SBASEDON,
- RTF_SBAUTO,
- RTF_SBKCOL,
- RTF_SBKEVEN,
- RTF_SBKNONE,
- RTF_SBKODD,
- RTF_SBKPAGE,
- RTF_SBYS,
- RTF_SCAPS,
- RTF_SCOMPOSE,
- RTF_SEC,
- RTF_SECT,
- RTF_SECTD,
- RTF_SECTDEFAULTCL,
- RTF_SECTEXPAND,
- RTF_SECTLINEGRID,
- RTF_SECTNUM,
- RTF_SECTRSID,
- RTF_SECTSPECIFYCL,
- RTF_SECTSPECIFYGENN,
- RTF_SECTSPECIFYL,
- RTF_SECTUNLOCKED,
- RTF_SFTNBJ,
- RTF_SFTNNALC,
- RTF_SFTNNAR,
- RTF_SFTNNAUC,
- RTF_SFTNNCHI,
- RTF_SFTNNCHOSUNG,
- RTF_SFTNNCNUM,
- RTF_SFTNNDBAR,
- RTF_SFTNNDBNUM,
- RTF_SFTNNDBNUMD,
- RTF_SFTNNDBNUMK,
- RTF_SFTNNDBNUMT,
- RTF_SFTNNGANADA,
- RTF_SFTNNGBNUM,
- RTF_SFTNNGBNUMD,
- RTF_SFTNNGBNUMK,
- RTF_SFTNNGBNUML,
- RTF_SFTNNRLC,
- RTF_SFTNNRUC,
- RTF_SFTNNZODIAC,
- RTF_SFTNNZODIACD,
- RTF_SFTNNZODIACL,
- RTF_SFTNRESTART,
- RTF_SFTNRSTCONT,
- RTF_SFTNRSTPG,
- RTF_SFTNSTART,
- RTF_SFTNTJ,
- RTF_SHAD,
- RTF_SHADING,
- RTF_SHIDDEN,
- RTF_SHIFT,
- RTF_SHOWPLACEHOLDTEXT,
- RTF_SHOWXMLERRORS,
- RTF_SHP,
- RTF_SHPBOTTOM,
- RTF_SHPBXCOLUMN,
- RTF_SHPBXIGNORE,
- RTF_SHPBXMARGIN,
- RTF_SHPBXPAGE,
- RTF_SHPBYIGNORE,
- RTF_SHPBYMARGIN,
- RTF_SHPBYPAGE,
- RTF_SHPBYPARA,
- RTF_SHPFBLWTXT,
- RTF_SHPFHDR,
- RTF_SHPGRP,
- RTF_SHPINST,
- RTF_SHPLEFT,
- RTF_SHPLID,
- RTF_SHPLOCKANCHOR,
- RTF_SHPPICT,
- RTF_SHPRIGHT,
- RTF_SHPRSLT,
- RTF_SHPTOP,
- RTF_SHPTXT,
- RTF_SHPWRK,
- RTF_SHPWR,
- RTF_SHPZ,
- RTF_SL,
- RTF_SLINK,
- RTF_SLMULT,
- RTF_SLOCKED,
- RTF_SN,
- RTF_SNAPTOGRIDINCELL,
- RTF_SNEXT,
- RTF_SOFTCOL,
- RTF_SOFTLHEIGHT,
- RTF_SOFTLINE,
- RTF_SOFTPAGE,
- RTF_SP,
- RTF_SPERSONAL,
- RTF_SPLTPGPAR,
- RTF_SPLYTWNINE,
- RTF_SPRIORITY,
- RTF_SPRSBSP,
- RTF_SPRSLNSP,
- RTF_SPRSSPBF,
- RTF_SPRSTSM,
- RTF_SPRSTSP,
- RTF_SPV,
- RTF_SQFORMAT,
- RTF_SRAUTH,
- RTF_SRDATE,
- RTF_SREPLY,
- RTF_SSEMIHIDDEN,
- RTF_STATICVAL,
- RTF_STEXTFLOW,
- RTF_STRIKE,
- RTF_STRIKED,
- RTF_STSHFBI,
- RTF_STSHFDBCH,
- RTF_STSHFHICH,
- RTF_STSHFLOCH,
- RTF_STYLELOCK,
- RTF_STYLELOCKBACKCOMP,
- RTF_STYLELOCKENFORCED,
- RTF_STYLELOCKQFSET,
- RTF_STYLELOCKTHEME,
- RTF_STYLESHEET,
- RTF_STYLESORTMETHOD,
- RTF_STYRSID,
- RTF_SUB,
- RTF_SUBDOCUMENT,
- RTF_SUBFONTBYSIZE,
- RTF_SUBJECT,
- RTF_SUNHIDEUSED,
- RTF_SUPER,
- RTF_SV,
- RTF_SVB,
- RTF_SWPBDR,
- RTF_TAB,
- RTF_TABSNOOVRLP,
- RTF_TAPRTL,
- RTF_TB,
- RTF_TBLIND,
- RTF_TBLINDTYPE,
- RTF_TBLLKBESTFIT,
- RTF_TBLLKBORDER,
- RTF_TBLLKCOLOR,
- RTF_TBLLKFONT,
- RTF_TBLLKHDRCOLS,
- RTF_TBLLKHDRROWS,
- RTF_TBLLKLASTCOL,
- RTF_TBLLKLASTROW,
- RTF_TBLLKNOCOLBAND,
- RTF_TBLLKNOROWBAND,
- RTF_TBLLKSHADING,
- RTF_TBLRSID,
- RTF_TC,
- RTF_TCELLD,
- RTF_TCF,
- RTF_TCL,
- RTF_TCN,
- RTF_TDFRMTXTBOTTOM,
- RTF_TDFRMTXTLEFT,
- RTF_TDFRMTXTRIGHT,
- RTF_TDFRMTXTTOP,
- RTF_TEMPLATE,
- RTF_THEMEDATA,
- RTF_THEMELANG,
- RTF_THEMELANGCS,
- RTF_THEMELANGFE,
- RTF_TIME,
- RTF_TITLE,
- RTF_TITLEPG,
- RTF_TLDOT,
- RTF_TLEQ,
- RTF_TLHYPH,
- RTF_TLMDOT,
- RTF_TLTH,
- RTF_TLUL,
- RTF_TOPLINEPUNCT,
- RTF_TPHCOL,
- RTF_TPHMRG,
- RTF_TPHPG,
- RTF_TPOSNEGX,
- RTF_TPOSNEGY,
- RTF_TPOSXC,
- RTF_TPOSXI,
- RTF_TPOSXL,
- RTF_TPOSX,
- RTF_TPOSXO,
- RTF_TPOSXR,
- RTF_TPOSY,
- RTF_TPOSYB,
- RTF_TPOSYC,
- RTF_TPOSYIL,
- RTF_TPOSYIN,
- RTF_TPOSYOUT,
- RTF_TPOSYT,
- RTF_TPVMRG,
- RTF_TPVPARA,
- RTF_TPVPG,
- RTF_TQC,
- RTF_TQDEC,
- RTF_TQR,
- RTF_TRACKFORMATTING,
- RTF_TRACKMOVES,
- RTF_TRANSMF,
- RTF_TRAUTH,
- RTF_TRAUTOFIT,
- RTF_TRBGBDIAG,
- RTF_TRBGCROSS,
- RTF_TRBGDCROSS,
- RTF_TRBGDKBDIAG,
- RTF_TRBGDKCROSS,
- RTF_TRBGDKDCROSS,
- RTF_TRBGDKFDIAG,
- RTF_TRBGDKHOR,
- RTF_TRBGDKVERT,
- RTF_TRBGFDIAG,
- RTF_TRBGHORIZ,
- RTF_TRBGVERT,
- RTF_TRBRDRB,
- RTF_TRBRDRH,
- RTF_TRBRDRL,
- RTF_TRBRDRR,
- RTF_TRBRDRT,
- RTF_TRBRDRV,
- RTF_TRCBPAT,
- RTF_TRCFPAT,
- RTF_TRDATE,
- RTF_TRFTSWIDTHA,
- RTF_TRFTSWIDTHB,
- RTF_TRFTSWIDTH,
- RTF_TRGAPH,
- RTF_TRHDR,
- RTF_TRKEEP,
- RTF_TRKEEPFOLLOW,
- RTF_TRLEFT,
- RTF_TROWD,
- RTF_TRPADDB,
- RTF_TRPADDFB,
- RTF_TRPADDFL,
- RTF_TRPADDFR,
- RTF_TRPADDFT,
- RTF_TRPADDL,
- RTF_TRPADDR,
- RTF_TRPADDT,
- RTF_TRPADOB,
- RTF_TRPADOFB,
- RTF_TRPADOFL,
- RTF_TRPADOFR,
- RTF_TRPADOFT,
- RTF_TRPADOL,
- RTF_TRPADOR,
- RTF_TRPADOT,
- RTF_TRPAT,
- RTF_TRQC,
- RTF_TRQL,
- RTF_TRQR,
- RTF_TRRH,
- RTF_TRSHDNG,
- RTF_TRSPDB,
- RTF_TRSPDFB,
- RTF_TRSPDFL,
- RTF_TRSPDFR,
- RTF_TRSPDFT,
- RTF_TRSPDL,
- RTF_TRSPDR,
- RTF_TRSPDT,
- RTF_TRSPOB,
- RTF_TRSPOFB,
- RTF_TRSPOFL,
- RTF_TRSPOFR,
- RTF_TRSPOFT,
- RTF_TRSPOL,
- RTF_TRSPOR,
- RTF_TRSPOT,
- RTF_TRUNCATEFONTHEIGHT,
- RTF_TRUNCEX,
- RTF_TRWWIDTHA,
- RTF_TRWWIDTHB,
- RTF_TRWWIDTH,
- RTF_TS,
- RTF_TSBGBDIAG,
- RTF_TSBGCROSS,
- RTF_TSBGDCROSS,
- RTF_TSBGDKBDIAG,
- RTF_TSBGDKCROSS,
- RTF_TSBGDKDCROSS,
- RTF_TSBGDKFDIAG,
- RTF_TSBGDKHOR,
- RTF_TSBGDKVERT,
- RTF_TSBGFDIAG,
- RTF_TSBGHORIZ,
- RTF_TSBGVERT,
- RTF_TSBRDRB,
- RTF_TSBRDRDGL,
- RTF_TSBRDRDGR,
- RTF_TSBRDRH,
- RTF_TSBRDRL,
- RTF_TSBRDRR,
- RTF_TSBRDRT,
- RTF_TSBRDRV,
- RTF_TSCBANDHORZEVEN,
- RTF_TSCBANDHORZODD,
- RTF_TSCBANDSH,
- RTF_TSCBANDSV,
- RTF_TSCBANDVERTEVEN,
- RTF_TSCBANDVERTODD,
- RTF_TSCELLCBPAT,
- RTF_TSCELLCFPAT,
- RTF_TSCELLPADDB,
- RTF_TSCELLPADDFB,
- RTF_TSCELLPADDFL,
- RTF_TSCELLPADDFR,
- RTF_TSCELLPADDFT,
- RTF_TSCELLPADDL,
- RTF_TSCELLPADDR,
- RTF_TSCELLPADDT,
- RTF_TSCELLPCT,
- RTF_TSCELLWIDTH,
- RTF_TSCELLWIDTHFTS,
- RTF_TSCFIRSTCOL,
- RTF_TSCFIRSTROW,
- RTF_TSCLASTCOL,
- RTF_TSCLASTROW,
- RTF_TSCNECELL,
- RTF_TSCNWCELL,
- RTF_TSCSECELL,
- RTF_TSCSWCELL,
- RTF_TSD,
- RTF_TSNOWRAP,
- RTF_TSROWD,
- RTF_TSVERTALB,
- RTF_TSVERTALC,
- RTF_TSVERTALT,
- RTF_TWOINONE,
- RTF_TWOONONE,
- RTF_TX,
- RTF_TXBXTWALWAYS,
- RTF_TXBXTWFIRST,
- RTF_TXBXTWFIRSTLAST,
- RTF_TXBXTWLAST,
- RTF_TXBXTWNO,
- RTF_TXE,
- RTF_U,
- RTF_UC,
- RTF_UD,
- RTF_UL,
- RTF_ULC,
- RTF_ULD,
- RTF_ULDASH,
- RTF_ULDASHD,
- RTF_ULDASHDD,
- RTF_ULDB,
- RTF_ULHAIR,
- RTF_ULHWAVE,
- RTF_ULLDASH,
- RTF_ULNONE,
- RTF_ULTH,
- RTF_ULTHD,
- RTF_ULTHDASH,
- RTF_ULTHDASHD,
- RTF_ULTHDASHDD,
- RTF_ULTHLDASH,
- RTF_ULULDBWAVE,
- RTF_ULW,
- RTF_ULWAVE,
- RTF_UP,
- RTF_UPR,
- RTF_URTF,
- RTF_USELTBALN,
- RTF_USENORMSTYFORLIST,
- RTF_USERPROPS,
- RTF_USEXFORM,
- RTF_UTINL,
- RTF_V,
- RTF_VALIDATEXML,
- RTF_VERN,
- RTF_VERSION,
- RTF_VERTAL,
- RTF_VERTALB,
- RTF_VERTALC,
- RTF_VERTALJ,
- RTF_VERTALT,
- RTF_VERTDOC,
- RTF_VERTSECT,
- RTF_VIEWBKSP,
- RTF_VIEWKIND,
- RTF_VIEWNOBOUND,
- RTF_VIEWSCALE,
- RTF_VIEWZK,
- RTF_WBITMAP,
- RTF_WBMBITSPIXEL,
- RTF_WBMPLANES,
- RTF_WBMWIDTHBYTE,
- RTF_WEBHIDDEN,
- RTF_WGRFFMTFILTER,
- RTF_WIDCTLPAR,
- RTF_WIDOWCTRL,
- RTF_WINDOWCAPTION,
- RTF_WMETAFILE,
- RTF_WPEQN,
- RTF_WPJST,
- RTF_WPSP,
- RTF_WRAPAROUND,
- RTF_WRAPDEFAULT,
- RTF_WRAPTHROUGH,
- RTF_WRAPTIGHT,
- RTF_WRAPTRSP,
- RTF_WRITERESERVATION,
- RTF_WRITERESERVHASH,
- RTF_WRPPUNCT,
- RTF_XE,
- RTF_XEF,
- RTF_XFORM,
- RTF_XMLATTR,
- RTF_XMLATTRNAME,
- RTF_XMLATTRNS,
- RTF_XMLATTRVALUE,
- RTF_XMLCLOSE,
- RTF_XMLNAME,
- RTF_XMLNS,
- RTF_XMLNSTBL,
- RTF_XMLOPEN,
- RTF_XMLSDTTCELL,
- RTF_XMLSDTTPARA,
- RTF_XMLSDTTREGULAR,
- RTF_XMLSDTTROW,
- RTF_XMLSDTTUNKNOWN,
- RTF_YR,
- RTF_YTS,
- RTF_YXE,
- RTF_ZWBO,
- RTF_ZWJ,
- RTF_ZWNBO,
- RTF_ZWNJ,
- RTF_FLYMAINCNT,
- RTF_FLYVERT,
- RTF_FLYHORZ,
- RTF_FLYANCHOR
-};
-const char* keywordToString(RTFKeyword nKeyword);
-
-/// Types of an RTF Control Word
-enum RTFControlTypes
-{
- CONTROL_FLAG, // eg \sbknone takes no parameter
- CONTROL_DESTINATION, // eg \fonttbl, if ignored, the whole group should be skipped
- CONTROL_SYMBOL, // eg \tab
- CONTROL_TOGGLE, // eg \b (between on and off)
- CONTROL_VALUE // eg \fs (requires parameter)
-};
-
-/// Represents an RTF Control Word
-class RTFSymbol
-{
- const char* m_sKeyword;
- int m_nControlType;
- RTFKeyword m_nIndex;
-
- int m_nDefValue; ///< Most of the control words default to 0.
-
-public:
- RTFSymbol() = default;
- RTFSymbol(const char* sKeyword, int nControlType = 0, RTFKeyword nIndex = RTF_invalid,
- int nDefValue = 0)
- : m_sKeyword(sKeyword)
- , m_nControlType(nControlType)
- , m_nIndex(nIndex)
- , m_nDefValue(nDefValue)
- {
- }
-
- const char* GetKeyword() const { return m_sKeyword; }
-
- int GetControlType() const { return m_nControlType; }
-
- RTFKeyword GetIndex() const { return m_nIndex; }
-
- int GetDefValue() const { return m_nDefValue; }
-};
-
-extern RTFSymbol const aRTFControlWords[];
-extern int nRTFControlWords;
-
-/// Represents an RTF Math Control Word
-class RTFMathSymbol
-{
- RTFKeyword m_eKeyword;
- int m_nToken; ///< This is the OOXML token equivalent.
- Destination m_eDestination;
-
-public:
- RTFMathSymbol(RTFKeyword eKeyword, int nToken = 0,
- Destination eDestination = Destination::NORMAL)
- : m_eKeyword(eKeyword)
- , m_nToken(nToken)
- , m_eDestination(eDestination)
- {
- }
-
- int GetToken() const { return m_nToken; }
-
- Destination GetDestination() const { return m_eDestination; }
-
- bool operator<(const RTFMathSymbol& rOther) const;
-};
-
-extern RTFMathSymbol const aRTFMathControlWords[];
-extern int nRTFMathControlWords;
-
-} // namespace writerfilter::rtftok
-
-#endif // INCLUDED_WRITERFILTER_SOURCE_RTFTOK_RTFCONTROLWORDS_HXX
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/rtftok/rtfdispatchdestination.cxx b/writerfilter/source/rtftok/rtfdispatchdestination.cxx
deleted file mode 100644
index f545d861a0c8..000000000000
--- a/writerfilter/source/rtftok/rtfdispatchdestination.cxx
+++ /dev/null
@@ -1,682 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-
-#include <sal/config.h>
-
-#include <string_view>
-
-#include "rtfdocumentimpl.hxx"
-
-#include <com/sun/star/document/DocumentProperties.hpp>
-#include <com/sun/star/drawing/XDrawPageSupplier.hpp>
-#include <com/sun/star/text/VertOrientation.hpp>
-#include <com/sun/star/lang/XMultiServiceFactory.hpp>
-
-#include <filter/msfilter/escherex.hxx>
-#include <rtl/character.hxx>
-#include <tools/stream.hxx>
-#include <sal/log.hxx>
-
-#include <dmapper/DomainMapperFactory.hxx>
-#include <ooxml/resourceids.hxx>
-
-#include "rtflookahead.hxx"
-#include "rtfreferenceproperties.hxx"
-#include "rtfsdrimport.hxx"
-#include "rtfskipdestination.hxx"
-#include "rtftokenizer.hxx"
-
-using namespace com::sun::star;
-
-namespace writerfilter::rtftok
-{
-RTFError RTFDocumentImpl::dispatchDestination(RTFKeyword nKeyword)
-{
- setNeedSect(true);
- checkUnicode(/*bUnicode =*/true, /*bHex =*/true);
- RTFSkipDestination aSkip(*this);
- // special case \upr: ignore everything except nested \ud
- if (Destination::UPR == m_aStates.top().getDestination() && RTF_UD != nKeyword)
- {
- m_aStates.top().setDestination(Destination::SKIP);
- aSkip.setParsed(false);
- }
- else
- switch (nKeyword)
- {
- case RTF_RTF:
- break;
- case RTF_FONTTBL:
- m_aStates.top().setDestination(Destination::FONTTABLE);
- break;
- case RTF_COLORTBL:
- m_aStates.top().setDestination(Destination::COLORTABLE);
- break;
- case RTF_STYLESHEET:
- m_aStates.top().setDestination(Destination::STYLESHEET);
- break;
- case RTF_FIELD:
- m_aStates.top().setDestination(Destination::FIELD);
- break;
- case RTF_FLDINST:
- {
- // Look for the field type
- sal_uInt64 const nPos = Strm().Tell();
- OStringBuffer aBuf;
- char ch = 0;
- bool bFoundCode = false;
- bool bInKeyword = false;
- while (!bFoundCode && ch != '}')
- {
- Strm().ReadChar(ch);
- if ('\\' == ch)
- bInKeyword = true;
- if (!bInKeyword && rtl::isAsciiAlphanumeric(static_cast<unsigned char>(ch)))
- aBuf.append(ch);
- else if (bInKeyword && rtl::isAsciiWhiteSpace(static_cast<unsigned char>(ch)))
- bInKeyword = false;
- if (!aBuf.isEmpty()
- && !rtl::isAsciiAlphanumeric(static_cast<unsigned char>(ch)))
- bFoundCode = true;
- }
-
- if (aBuf.toString() == "INCLUDEPICTURE")
- {
- // Extract the field argument of INCLUDEPICTURE: we handle that
- // at a tokenizer level, as DOCX has no such field.
- aBuf.append(ch);
- while (true)
- {
- Strm().ReadChar(ch);
- if (ch == '}')
- break;
- aBuf.append(ch);
- }
- OUString aFieldCommand
- = OStringToOUString(aBuf.toString(), RTL_TEXTENCODING_UTF8);
- std::tuple<OUString, std::vector<OUString>, std::vector<OUString>> aResult
- = writerfilter::dmapper::splitFieldCommand(aFieldCommand);
- m_aPicturePath
- = std::get<1>(aResult).empty() ? OUString() : std::get<1>(aResult).front();
- }
-
- Strm().Seek(nPos);
-
- // Form data should be handled only for form fields if any
- if (aBuf.toString().indexOf("FORM") != -1)
- m_bFormField = true;
-
- singleChar(cFieldStart);
- m_aStates.top().setDestination(Destination::FIELDINSTRUCTION);
- }
- break;
- case RTF_FLDRSLT:
- m_aStates.top().setDestination(Destination::FIELDRESULT);
- break;
- case RTF_LISTTABLE:
- m_aStates.top().setDestination(Destination::LISTTABLE);
- break;
- case RTF_LISTPICTURE:
- m_aStates.top().setDestination(Destination::LISTPICTURE);
- m_aStates.top().setInListpicture(true);
- break;
- case RTF_LIST:
- m_aStates.top().setDestination(Destination::LISTENTRY);
- break;
- case RTF_LISTNAME:
- m_aStates.top().setDestination(Destination::LISTNAME);
- break;
- case RTF_LFOLEVEL:
- m_aStates.top().setDestination(Destination::LFOLEVEL);
- m_aStates.top().getTableSprms().clear();
- break;
- case RTF_LISTOVERRIDETABLE:
- m_aStates.top().setDestination(Destination::LISTOVERRIDETABLE);
- break;
- case RTF_LISTOVERRIDE:
- m_aStates.top().setDestination(Destination::LISTOVERRIDEENTRY);
- break;
- case RTF_LISTLEVEL:
- m_aStates.top().setDestination(Destination::LISTLEVEL);
- ++m_nListLevel;
- break;
- case RTF_LEVELTEXT:
- m_aStates.top().setDestination(Destination::LEVELTEXT);
- break;
- case RTF_LEVELNUMBERS:
- m_aStates.top().setDestination(Destination::LEVELNUMBERS);
- break;
- case RTF_SHPPICT:
- resetFrame();
- m_aStates.top().setDestination(Destination::SHPPICT);
- break;
- case RTF_PICT:
- if (m_aStates.top().getDestination() != Destination::SHAPEPROPERTYVALUE)
- m_aStates.top().setDestination(Destination::PICT); // as character
- else
- m_aStates.top().setDestination(
- Destination::SHAPEPROPERTYVALUEPICT); // anchored inside a shape
- break;
- case RTF_PICPROP:
- m_aStates.top().setDestination(Destination::PICPROP);
- break;
- case RTF_SP:
- m_aStates.top().setDestination(Destination::SHAPEPROPERTY);
- break;
- case RTF_SN:
- m_aStates.top().setDestination(Destination::SHAPEPROPERTYNAME);
- break;
- case RTF_SV:
- m_aStates.top().setDestination(Destination::SHAPEPROPERTYVALUE);
- break;
- case RTF_SHP:
- m_bNeedCrOrig = m_bNeedCr;
- m_aStates.top().setDestination(Destination::SHAPE);
- m_aStates.top().setInShape(true);
- break;
- case RTF_SHPINST:
- m_aStates.top().setDestination(Destination::SHAPEINSTRUCTION);
- break;
- case RTF_NESTTABLEPROPS:
- // do not set any properties of outer table at nested table!
- m_aStates.top().getTableCellSprms() = m_aDefaultState.getTableCellSprms();
- m_aStates.top().getTableCellAttributes() = m_aDefaultState.getTableCellAttributes();
- m_aNestedTableCellsSprms.clear();
- m_aNestedTableCellsAttributes.clear();
- m_nNestedCells = 0;
- m_aStates.top().setDestination(Destination::NESTEDTABLEPROPERTIES);
- break;
- case RTF_HEADER:
- case RTF_FOOTER:
- case RTF_HEADERL:
- case RTF_HEADERR:
- case RTF_HEADERF:
- case RTF_FOOTERL:
- case RTF_FOOTERR:
- case RTF_FOOTERF:
- if (!m_pSuperstream)
- {
- Id nId = 0;
- std::size_t nPos = m_nGroupStartPos - 1;
- switch (nKeyword)
- {
- case RTF_HEADER:
- if (!m_hasRHeader)
- {
- nId = NS_ooxml::LN_headerr;
- m_hasRHeader = true;
- }
- break;
- case RTF_FOOTER:
- if (!m_hasRFooter)
- {
- nId = NS_ooxml::LN_footerr;
- m_hasRFooter = true;
- }
- break;
- case RTF_HEADERL:
- nId = NS_ooxml::LN_headerl;
- break;
- case RTF_HEADERR:
- nId = NS_ooxml::LN_headerr;
- break;
- case RTF_HEADERF:
- if (!m_hasFHeader)
- {
- nId = NS_ooxml::LN_headerf;
- m_hasFHeader = true;
- }
- break;
- case RTF_FOOTERL:
- nId = NS_ooxml::LN_footerl;
- break;
- case RTF_FOOTERR:
- nId = NS_ooxml::LN_footerr;
- break;
- case RTF_FOOTERF:
- if (!m_hasFFooter)
- {
- nId = NS_ooxml::LN_footerf;
- m_hasFFooter = true;
- }
- break;
- default:
- break;
- }
-
- if (nId != 0)
- m_nHeaderFooterPositions.push(std::make_pair(nId, nPos));
-
- m_aStates.top().setDestination(Destination::SKIP);
- }
- break;
- case RTF_FOOTNOTE:
- checkFirstRun();
- if (!m_pSuperstream)
- {
- Id nId = NS_ooxml::LN_footnote;
-
- // Check if this is an endnote.
- OStringBuffer aBuf;
- char ch;
- sal_uInt64 const nCurrent = Strm().Tell();
- for (int i = 0; i < 7; ++i)
- {
- Strm().ReadChar(ch);
- aBuf.append(ch);
- }
- Strm().Seek(nCurrent);
- OString aKeyword = aBuf.makeStringAndClear();
- if (aKeyword == "\\ftnalt")
- nId = NS_ooxml::LN_endnote;
-
- if (m_aStates.top().getCurrentBuffer() == &m_aSuperBuffer)
- m_aStates.top().setCurrentBuffer(nullptr);
- bool bCustomMark = false;
- OUString aCustomMark;
- for (auto const& elem : m_aSuperBuffer)
- {
- if (std::get<0>(elem) == BUFFER_UTEXT)
- {
- aCustomMark = std::get<1>(elem)->getString();
- bCustomMark = true;
- }
- }
- m_aSuperBuffer.clear();
- m_aStates.top().setDestination(Destination::FOOTNOTE);
- Mapper().startCharacterGroup();
- runProps();
- if (!m_aStates.top().getCurrentBuffer())
- resolveSubstream(m_nGroupStartPos - 1, nId, aCustomMark);
- else
- {
- RTFSprms aAttributes;
- aAttributes.set(Id(0), new RTFValue(m_nGroupStartPos - 1));
- aAttributes.set(Id(1), new RTFValue(nId));
- aAttributes.set(Id(2), new RTFValue(aCustomMark));
- m_aStates.top().getCurrentBuffer()->push_back(
- Buf_t(BUFFER_RESOLVESUBSTREAM, new RTFValue(aAttributes), nullptr));
- }
- if (bCustomMark)
- {
- m_aStates.top().getCharacterAttributes().clear();
- m_aStates.top().getCharacterSprms().clear();
- auto pValue = new RTFValue(1);
- m_aStates.top().getCharacterAttributes().set(
- NS_ooxml::LN_CT_FtnEdnRef_customMarkFollows, pValue);
- text(aCustomMark);
- }
- Mapper().endCharacterGroup();
- m_aStates.top().setDestination(Destination::SKIP);
- }
- break;
- case RTF_BKMKSTART:
- m_aStates.top().setDestination(Destination::BOOKMARKSTART);
- break;
- case RTF_BKMKEND:
- m_aStates.top().setDestination(Destination::BOOKMARKEND);
- break;
- case RTF_XE:
- m_aStates.top().setDestination(Destination::INDEXENTRY);
- break;
- case RTF_TC:
- case RTF_TCN:
- m_aStates.top().setDestination(Destination::TOCENTRY);
- break;
- case RTF_REVTBL:
- m_aStates.top().setDestination(Destination::REVISIONTABLE);
- break;
- case RTF_ANNOTATION:
- if (!m_pSuperstream)
- {
- if (!m_aStates.top().getCurrentBuffer())
- {
- resolveSubstream(m_nGroupStartPos - 1, NS_ooxml::LN_annotation);
- }
- else
- {
- RTFSprms aAttributes;
- aAttributes.set(Id(0), new RTFValue(m_nGroupStartPos - 1));
- aAttributes.set(Id(1), new RTFValue(NS_ooxml::LN_annotation));
- aAttributes.set(Id(2), new RTFValue(OUString()));
- m_aStates.top().getCurrentBuffer()->push_back(
- Buf_t(BUFFER_RESOLVESUBSTREAM, new RTFValue(aAttributes), nullptr));
- }
- m_aStates.top().setDestination(Destination::SKIP);
- }
- else
- {
- // If there is an author set, emit it now.
- if (!m_aAuthor.isEmpty() || !m_aAuthorInitials.isEmpty())
- {
- RTFSprms aAttributes;
- if (!m_aAuthor.isEmpty())
- {
- auto pValue = new RTFValue(m_aAuthor);
- aAttributes.set(NS_ooxml::LN_CT_TrackChange_author, pValue);
- }
- if (!m_aAuthorInitials.isEmpty())
- {
- auto pValue = new RTFValue(m_aAuthorInitials);
- aAttributes.set(NS_ooxml::LN_CT_Comment_initials, pValue);
- }
- writerfilter::Reference<Properties>::Pointer_t pProperties
- = new RTFReferenceProperties(aAttributes);
- Mapper().props(pProperties);
- }
- }
- break;
- case RTF_SHPTXT:
- case RTF_DPTXBXTEXT:
- {
- bool bPictureFrame = false;
- for (const auto& rProperty : m_aStates.top().getShape().getProperties())
- {
- if (rProperty.first == "shapeType"
- && rProperty.second
- == std::u16string_view(
- OUString::number(ESCHER_ShpInst_PictureFrame)))
- {
- bPictureFrame = true;
- break;
- }
- }
- if (bPictureFrame)
- // Skip text on picture frames.
- m_aStates.top().setDestination(Destination::SKIP);
- else
- {
- m_aStates.top().setDestination(Destination::SHAPETEXT);
- checkFirstRun();
- dispatchFlag(RTF_PARD);
- m_bNeedPap = true;
- if (nKeyword == RTF_SHPTXT)
- {
- if (!m_aStates.top().getCurrentBuffer())
- m_pSdrImport->resolve(m_aStates.top().getShape(), false,
- RTFSdrImport::SHAPE);
- else
- {
- auto pValue = new RTFValue(m_aStates.top().getShape());
- m_aStates.top().getCurrentBuffer()->push_back(
- Buf_t(BUFFER_STARTSHAPE, pValue, nullptr));
- }
- }
- }
- }
- break;
- case RTF_FORMFIELD:
- if (m_aStates.top().getDestination() == Destination::FIELDINSTRUCTION)
- m_aStates.top().setDestination(Destination::FORMFIELD);
- break;
- case RTF_FFNAME:
- m_aStates.top().setDestination(Destination::FORMFIELDNAME);
- break;
- case RTF_FFL:
- m_aStates.top().setDestination(Destination::FORMFIELDLIST);
- break;
- case RTF_DATAFIELD:
- m_aStates.top().setDestination(Destination::DATAFIELD);
- break;
- case RTF_INFO:
- m_aStates.top().setDestination(Destination::INFO);
- break;
- case RTF_CREATIM:
- m_aStates.top().setDestination(Destination::CREATIONTIME);
- break;
- case RTF_REVTIM:
- m_aStates.top().setDestination(Destination::REVISIONTIME);
- break;
- case RTF_PRINTIM:
- m_aStates.top().setDestination(Destination::PRINTTIME);
- break;
- case RTF_AUTHOR:
- m_aStates.top().setDestination(Destination::AUTHOR);
- break;
- case RTF_KEYWORDS:
- m_aStates.top().setDestination(Destination::KEYWORDS);
- break;
- case RTF_OPERATOR:
- m_aStates.top().setDestination(Destination::OPERATOR);
- break;
- case RTF_COMPANY:
- m_aStates.top().setDestination(Destination::COMPANY);
- break;
- case RTF_COMMENT:
- m_aStates.top().setDestination(Destination::COMMENT);
- break;
- case RTF_OBJECT:
- {
- // beginning of an OLE Object
- m_aStates.top().setDestination(Destination::OBJECT);
-
- // check if the object is in a special container (e.g. a table)
- if (!m_aStates.top().getCurrentBuffer())
- {
- // the object is in a table or another container.
- // Don't try to treat it as an OLE object (fdo#53594).
- // Use the \result (RTF_RESULT) element of the object instead,
- // the result element contain picture representing the OLE Object.
- m_bObject = true;
- }
- }
- break;
- case RTF_OBJDATA:
- // check if the object is in a special container (e.g. a table)
- if (m_aStates.top().getCurrentBuffer())
- {
- // the object is in a table or another container.
- // Use the \result (RTF_RESULT) element of the object instead,
- // of the \objdata.
- m_aStates.top().setDestination(Destination::SKIP);
- }
- else
- {
- m_aStates.top().setDestination(Destination::OBJDATA);
- }
- break;
- case RTF_OBJCLASS:
- m_aStates.top().setDestination(Destination::OBJCLASS);
- break;
- case RTF_RESULT:
- m_aStates.top().setDestination(Destination::RESULT);
- break;
- case RTF_ATNDATE:
- m_aStates.top().setDestination(Destination::ANNOTATIONDATE);
- break;
- case RTF_ATNAUTHOR:
- m_aStates.top().setDestination(Destination::ANNOTATIONAUTHOR);
- break;
- case RTF_ATNREF:
- m_aStates.top().setDestination(Destination::ANNOTATIONREFERENCE);
- break;
- case RTF_FALT:
- m_aStates.top().setDestination(Destination::FALT);
- break;
- case RTF_FLYMAINCNT:
- m_aStates.top().setDestination(Destination::FLYMAINCONTENT);
- break;
- case RTF_LISTTEXT:
- // Should be ignored by any reader that understands Word 97 through Word 2007 numbering.
- case RTF_NONESTTABLES:
- // This destination should be ignored by readers that support nested tables.
- m_aStates.top().setDestination(Destination::SKIP);
- break;
- case RTF_DO:
- m_aStates.top().setDestination(Destination::DRAWINGOBJECT);
- break;
- case RTF_PN:
- m_aStates.top().setDestination(Destination::PARAGRAPHNUMBERING);
- break;
- case RTF_PNTEXT:
- // This destination should be ignored by readers that support paragraph numbering.
- m_aStates.top().setDestination(Destination::SKIP);
- break;
- case RTF_PNTXTA:
- m_aStates.top().setDestination(Destination::PARAGRAPHNUMBERING_TEXTAFTER);
- break;
- case RTF_PNTXTB:
- m_aStates.top().setDestination(Destination::PARAGRAPHNUMBERING_TEXTBEFORE);
- break;
- case RTF_TITLE:
- m_aStates.top().setDestination(Destination::TITLE);
- break;
- case RTF_SUBJECT:
- m_aStates.top().setDestination(Destination::SUBJECT);
- break;
- case RTF_DOCCOMM:
- m_aStates.top().setDestination(Destination::DOCCOMM);
- break;
- case RTF_ATRFSTART:
- m_aStates.top().setDestination(Destination::ANNOTATIONREFERENCESTART);
- break;
- case RTF_ATRFEND:
- m_aStates.top().setDestination(Destination::ANNOTATIONREFERENCEEND);
- break;
- case RTF_ATNID:
- m_aStates.top().setDestination(Destination::ATNID);
- break;
- case RTF_MMATH:
- case RTF_MOMATHPARA:
- // Nothing to do here (just enter the destination) till RTF_MMATHPR is implemented.
- break;
- case RTF_MR:
- m_aStates.top().setDestination(Destination::MR);
- break;
- case RTF_MCHR:
- m_aStates.top().setDestination(Destination::MCHR);
- break;
- case RTF_MPOS:
- m_aStates.top().setDestination(Destination::MPOS);
- break;
- case RTF_MVERTJC:
- m_aStates.top().setDestination(Destination::MVERTJC);
- break;
- case RTF_MSTRIKEH:
- m_aStates.top().setDestination(Destination::MSTRIKEH);
- break;
- case RTF_MDEGHIDE:
- m_aStates.top().setDestination(Destination::MDEGHIDE);
- break;
- case RTF_MTYPE:
- m_aStates.top().setDestination(Destination::MTYPE);
- break;
- case RTF_MGROW:
- m_aStates.top().setDestination(Destination::MGROW);
- break;
- case RTF_MHIDETOP:
- case RTF_MHIDEBOT:
- case RTF_MHIDELEFT:
- case RTF_MHIDERIGHT:
- // SmOoxmlImport::handleBorderBox will ignore these anyway, so silently ignore for now.
- m_aStates.top().setDestination(Destination::SKIP);
- break;
- case RTF_MSUBHIDE:
- m_aStates.top().setDestination(Destination::MSUBHIDE);
- break;
- case RTF_MSUPHIDE:
- m_aStates.top().setDestination(Destination::MSUPHIDE);
- break;
- case RTF_MBEGCHR:
- m_aStates.top().setDestination(Destination::MBEGCHR);
- break;
- case RTF_MSEPCHR:
- m_aStates.top().setDestination(Destination::MSEPCHR);
- break;
- case RTF_MENDCHR:
- m_aStates.top().setDestination(Destination::MENDCHR);
- break;
- case RTF_UPR:
- m_aStates.top().setDestination(Destination::UPR);
- break;
- case RTF_UD:
- // Anything inside \ud is just normal Unicode content.
- m_aStates.top().setDestination(Destination::NORMAL);
- break;
- case RTF_BACKGROUND:
- m_aStates.top().setDestination(Destination::BACKGROUND);
- m_aStates.top().setInBackground(true);
- break;
- case RTF_SHPGRP:
- {
- RTFLookahead aLookahead(Strm(), m_pTokenizer->getGroupStart());
- if (!aLookahead.hasTable())
- {
- uno::Reference<drawing::XShapes> xGroupShape(
- m_xModelFactory->createInstance("com.sun.star.drawing.GroupShape"),
- uno::UNO_QUERY);
- uno::Reference<drawing::XDrawPageSupplier> xDrawSupplier(m_xDstDoc,
- uno::UNO_QUERY);
- if (xDrawSupplier.is())
- {
- uno::Reference<drawing::XShape> xShape(xGroupShape, uno::UNO_QUERY);
- // set default VertOrient before inserting
- uno::Reference<beans::XPropertySet>(xShape, uno::UNO_QUERY_THROW)
- ->setPropertyValue("VertOrient",
- uno::makeAny(text::VertOrientation::NONE));
- xDrawSupplier->getDrawPage()->add(xShape);
- }
- m_pSdrImport->pushParent(xGroupShape);
- m_aStates.top().setCreatedShapeGroup(true);
- }
- m_aStates.top().setDestination(Destination::SHAPEGROUP);
- m_aStates.top().setInShapeGroup(true);
- }
- break;
- case RTF_FTNSEP:
- m_aStates.top().setDestination(Destination::FOOTNOTESEPARATOR);
- m_aStates.top().getCharacterAttributes().set(
- NS_ooxml::LN_CT_FtnEdn_type,
- new RTFValue(NS_ooxml::LN_Value_doc_ST_FtnEdn_separator));
- break;
- case RTF_USERPROPS:
- // Container of all user-defined properties.
- m_aStates.top().setDestination(Destination::USERPROPS);
- if (m_xDocumentProperties.is())
- // Create a custom document properties to be able to process them later all at once.
- m_xDocumentProperties = document::DocumentProperties::create(m_xContext);
- break;
- case RTF_PROPNAME:
- m_aStates.top().setDestination(Destination::PROPNAME);
- break;
- case RTF_STATICVAL:
- m_aStates.top().setDestination(Destination::STATICVAL);
- break;
- case RTF_GENERATOR:
- m_aStates.top().setDestination(Destination::GENERATOR);
- break;
- default:
- {
- // Check if it's a math token.
- RTFMathSymbol aSymbol(nKeyword);
- if (RTFTokenizer::lookupMathKeyword(aSymbol))
- {
- m_aMathBuffer.appendOpeningTag(aSymbol.GetToken());
- m_aStates.top().setDestination(aSymbol.GetDestination());
- return RTFError::OK;
- }
-
- SAL_INFO("writerfilter",
- "TODO handle destination '" << keywordToString(nKeyword) << "'");
- // Make sure we skip destinations (even without \*) till we don't handle them
- m_aStates.top().setDestination(Destination::SKIP);
- aSkip.setParsed(false);
- }
- break;
- }
-
- // new destination => use new destination text
- m_aStates.top().setCurrentDestinationText(&m_aStates.top().getDestinationText());
-
- return RTFError::OK;
-}
-
-} // namespace writerfilter
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/rtftok/rtfdispatchflag.cxx b/writerfilter/source/rtftok/rtfdispatchflag.cxx
deleted file mode 100644
index 8797a08442d8..000000000000
--- a/writerfilter/source/rtftok/rtfdispatchflag.cxx
+++ /dev/null
@@ -1,1239 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-
-#include "rtfdocumentimpl.hxx"
-
-#include <com/sun/star/drawing/XDrawPageSupplier.hpp>
-#include <com/sun/star/drawing/XEnhancedCustomShapeDefaulter.hpp>
-#include <com/sun/star/text/RelOrientation.hpp>
-#include <com/sun/star/text/VertOrientation.hpp>
-#include <com/sun/star/lang/XMultiServiceFactory.hpp>
-
-#include <filter/msfilter/escherex.hxx>
-
-#include <ooxml/resourceids.hxx>
-
-#include <sal/log.hxx>
-
-#include "rtfsdrimport.hxx"
-#include "rtfskipdestination.hxx"
-
-using namespace com::sun::star;
-
-namespace writerfilter::rtftok
-{
-RTFError RTFDocumentImpl::dispatchFlag(RTFKeyword nKeyword)
-{
- setNeedSect(true);
- checkUnicode(/*bUnicode =*/true, /*bHex =*/true);
- RTFSkipDestination aSkip(*this);
- int nParam = -1;
- int nSprm = -1;
-
- // Underline flags.
- switch (nKeyword)
- {
- case RTF_ULD:
- nSprm = NS_ooxml::LN_Value_ST_Underline_dotted;
- break;
- case RTF_ULW:
- nSprm = NS_ooxml::LN_Value_ST_Underline_words;
- break;
- default:
- break;
- }
- if (nSprm >= 0)
- {
- auto pValue = new RTFValue(nSprm);
- m_aStates.top().getCharacterAttributes().set(NS_ooxml::LN_CT_Underline_val, pValue);
- return RTFError::OK;
- }
-
- // Indentation
- switch (nKeyword)
- {
- case RTF_QC:
- nParam = NS_ooxml::LN_Value_ST_Jc_center;
- break;
- case RTF_QJ:
- nParam = NS_ooxml::LN_Value_ST_Jc_both;
- break;
- case RTF_QL:
- nParam = NS_ooxml::LN_Value_ST_Jc_left;
- break;
- case RTF_QR:
- nParam = NS_ooxml::LN_Value_ST_Jc_right;
- break;
- case RTF_QD:
- nParam = NS_ooxml::LN_Value_ST_Jc_distribute;
- break;
- default:
- break;
- }
- if (nParam >= 0)
- {
- auto pValue = new RTFValue(nParam);
- m_aStates.top().getParagraphSprms().set(NS_ooxml::LN_CT_PPrBase_jc, pValue);
- m_bNeedPap = true;
- return RTFError::OK;
- }
-
- // Font Alignment
- switch (nKeyword)
- {
- case RTF_FAFIXED:
- case RTF_FAAUTO:
- nParam = NS_ooxml::LN_Value_doc_ST_TextAlignment_auto;
- break;
- case RTF_FAHANG:
- nParam = NS_ooxml::LN_Value_doc_ST_TextAlignment_top;
- break;
- case RTF_FACENTER:
- nParam = NS_ooxml::LN_Value_doc_ST_TextAlignment_center;
- break;
- case RTF_FAROMAN:
- nParam = NS_ooxml::LN_Value_doc_ST_TextAlignment_baseline;
- break;
- case RTF_FAVAR:
- nParam = NS_ooxml::LN_Value_doc_ST_TextAlignment_bottom;
- break;
- default:
- break;
- }
- if (nParam >= 0)
- {
- auto pValue = new RTFValue(nParam);
- m_aStates.top().getParagraphSprms().set(NS_ooxml::LN_CT_PPrBase_textAlignment, pValue);
- return RTFError::OK;
- }
-
- // Tab kind.
- switch (nKeyword)
- {
- case RTF_TQR:
- nParam = NS_ooxml::LN_Value_ST_TabJc_right;
- break;
- case RTF_TQC:
- nParam = NS_ooxml::LN_Value_ST_TabJc_center;
- break;
- case RTF_TQDEC:
- nParam = NS_ooxml::LN_Value_ST_TabJc_decimal;
- break;
- default:
- break;
- }
- if (nParam >= 0)
- {
- auto pValue = new RTFValue(nParam);
- m_aStates.top().getTabAttributes().set(NS_ooxml::LN_CT_TabStop_val, pValue);
- return RTFError::OK;
- }
-
- // Tab lead.
- switch (nKeyword)
- {
- case RTF_TLDOT:
- nParam = NS_ooxml::LN_Value_ST_TabTlc_dot;
- break;
- case RTF_TLMDOT:
- nParam = NS_ooxml::LN_Value_ST_TabTlc_middleDot;
- break;
- case RTF_TLHYPH:
- nParam = NS_ooxml::LN_Value_ST_TabTlc_hyphen;
- break;
- case RTF_TLUL:
- case RTF_TLTH:
- nParam = NS_ooxml::LN_Value_ST_TabTlc_underscore;
- break;
- case RTF_TLEQ:
- default:
- break;
- }
- if (nParam >= 0)
- {
- auto pValue = new RTFValue(nParam);
- m_aStates.top().getTabAttributes().set(NS_ooxml::LN_CT_TabStop_leader, pValue);
- return RTFError::OK;
- }
-
- // Border types
- {
- switch (nKeyword)
- {
- // brdrhair and brdrs are the same, brdrw will make a difference
- // map to values in ooxml/model.xml resource ST_Border
- case RTF_BRDRHAIR:
- case RTF_BRDRS:
- nParam = NS_ooxml::LN_Value_ST_Border_single;
- break;
- case RTF_BRDRDOT:
- nParam = NS_ooxml::LN_Value_ST_Border_dotted;
- break;
- case RTF_BRDRDASH:
- nParam = NS_ooxml::LN_Value_ST_Border_dashed;
- break;
- case RTF_BRDRDB:
- nParam = NS_ooxml::LN_Value_ST_Border_double;
- break;
- case RTF_BRDRTNTHSG:
- nParam = NS_ooxml::LN_Value_ST_Border_thinThickSmallGap;
- break;
- case RTF_BRDRTNTHMG:
- nParam = NS_ooxml::LN_Value_ST_Border_thinThickMediumGap;
- break;
- case RTF_BRDRTNTHLG:
- nParam = NS_ooxml::LN_Value_ST_Border_thinThickLargeGap;
- break;
- case RTF_BRDRTHTNSG:
- nParam = NS_ooxml::LN_Value_ST_Border_thickThinSmallGap;
- break;
- case RTF_BRDRTHTNMG:
- nParam = NS_ooxml::LN_Value_ST_Border_thickThinMediumGap;
- break;
- case RTF_BRDRTHTNLG:
- nParam = NS_ooxml::LN_Value_ST_Border_thickThinLargeGap;
- break;
- case RTF_BRDREMBOSS:
- nParam = NS_ooxml::LN_Value_ST_Border_threeDEmboss;
- break;
- case RTF_BRDRENGRAVE:
- nParam = NS_ooxml::LN_Value_ST_Border_threeDEngrave;
- break;
- case RTF_BRDROUTSET:
- nParam = NS_ooxml::LN_Value_ST_Border_outset;
- break;
- case RTF_BRDRINSET:
- nParam = NS_ooxml::LN_Value_ST_Border_inset;
- break;
- case RTF_BRDRDASHSM:
- nParam = NS_ooxml::LN_Value_ST_Border_dashSmallGap;
- break;
- case RTF_BRDRDASHD:
- nParam = NS_ooxml::LN_Value_ST_Border_dotDash;
- break;
- case RTF_BRDRDASHDD:
- nParam = NS_ooxml::LN_Value_ST_Border_dotDotDash;
- break;
- case RTF_BRDRNONE:
- nParam = NS_ooxml::LN_Value_ST_Border_none;
- break;
- default:
- break;
- }
- if (nParam >= 0)
- {
- auto pValue = new RTFValue(nParam);
- putBorderProperty(m_aStates, NS_ooxml::LN_CT_Border_val, pValue);
- return RTFError::OK;
- }
- }
-
- // Section breaks
- switch (nKeyword)
- {
- case RTF_SBKNONE:
- nParam = NS_ooxml::LN_Value_ST_SectionMark_continuous;
- break;
- case RTF_SBKCOL:
- nParam = NS_ooxml::LN_Value_ST_SectionMark_nextColumn;
- break;
- case RTF_SBKPAGE:
- nParam = NS_ooxml::LN_Value_ST_SectionMark_nextPage;
- break;
- case RTF_SBKEVEN:
- nParam = NS_ooxml::LN_Value_ST_SectionMark_evenPage;
- break;
- case RTF_SBKODD:
- nParam = NS_ooxml::LN_Value_ST_SectionMark_oddPage;
- break;
- default:
- break;
- }
- if (nParam >= 0)
- {
- if (m_nResetBreakOnSectBreak != RTF_invalid)
- {
- m_nResetBreakOnSectBreak = nKeyword;
- }
- auto pValue = new RTFValue(nParam);
- m_aStates.top().getSectionSprms().set(NS_ooxml::LN_EG_SectPrContents_type, pValue);
- return RTFError::OK;
- }
-
- // Footnote numbering
- switch (nKeyword)
- {
- case RTF_FTNNAR:
- nParam = NS_ooxml::LN_Value_ST_NumberFormat_decimal;
- break;
- case RTF_FTNNALC:
- nParam = NS_ooxml::LN_Value_ST_NumberFormat_lowerLetter;
- break;
- case RTF_FTNNAUC:
- nParam = NS_ooxml::LN_Value_ST_NumberFormat_upperLetter;
- break;
- case RTF_FTNNRLC:
- nParam = NS_ooxml::LN_Value_ST_NumberFormat_lowerRoman;
- break;
- case RTF_FTNNRUC:
- nParam = NS_ooxml::LN_Value_ST_NumberFormat_upperRoman;
- break;
- case RTF_FTNNCHI:
- nParam = NS_ooxml::LN_Value_ST_NumberFormat_chicago;
- break;
- default:
- break;
- }
- if (nParam >= 0)
- {
- auto pInner = new RTFValue(nParam);
- RTFSprms aAttributes;
- aAttributes.set(NS_ooxml::LN_CT_NumFmt_val, pInner);
- auto pOuter = new RTFValue(aAttributes);
- putNestedSprm(m_aDefaultState.getParagraphSprms(),
- NS_ooxml::LN_EG_SectPrContents_footnotePr, NS_ooxml::LN_CT_FtnProps_numFmt,
- pOuter);
- return RTFError::OK;
- }
-
- // Footnote restart type
- switch (nKeyword)
- {
- case RTF_FTNRSTPG:
- nParam = NS_ooxml::LN_Value_ST_RestartNumber_eachPage;
- break;
- case RTF_FTNRESTART:
- nParam = NS_ooxml::LN_Value_ST_RestartNumber_eachSect;
- break;
- case RTF_FTNRSTCONT:
- nParam = NS_ooxml::LN_Value_ST_RestartNumber_continuous;
- break;
- default:
- break;
- }
- if (nParam >= 0)
- {
- auto pValue = new RTFValue(nParam);
- putNestedSprm(m_aDefaultState.getParagraphSprms(),
- NS_ooxml::LN_EG_SectPrContents_footnotePr,
- NS_ooxml::LN_EG_FtnEdnNumProps_numRestart, pValue);
- return RTFError::OK;
- }
-
- // Endnote numbering
- switch (nKeyword)
- {
- case RTF_AFTNNAR:
- nParam = NS_ooxml::LN_Value_ST_NumberFormat_decimal;
- break;
- case RTF_AFTNNALC:
- nParam = NS_ooxml::LN_Value_ST_NumberFormat_lowerLetter;
- break;
- case RTF_AFTNNAUC:
- nParam = NS_ooxml::LN_Value_ST_NumberFormat_upperLetter;
- break;
- case RTF_AFTNNRLC:
- nParam = NS_ooxml::LN_Value_ST_NumberFormat_lowerRoman;
- break;
- case RTF_AFTNNRUC:
- nParam = NS_ooxml::LN_Value_ST_NumberFormat_upperRoman;
- break;
- case RTF_AFTNNCHI:
- nParam = NS_ooxml::LN_Value_ST_NumberFormat_chicago;
- break;
- default:
- break;
- }
- if (nParam >= 0)
- {
- auto pInner = new RTFValue(nParam);
- RTFSprms aAttributes;
- aAttributes.set(NS_ooxml::LN_CT_NumFmt_val, pInner);
- auto pOuter = new RTFValue(aAttributes);
- putNestedSprm(m_aDefaultState.getParagraphSprms(), NS_ooxml::LN_EG_SectPrContents_endnotePr,
- NS_ooxml::LN_CT_EdnProps_numFmt, pOuter);
- return RTFError::OK;
- }
-
- switch (nKeyword)
- {
- case RTF_TRQL:
- nParam = NS_ooxml::LN_Value_ST_Jc_left;
- break;
- case RTF_TRQC:
- nParam = NS_ooxml::LN_Value_ST_Jc_center;
- break;
- case RTF_TRQR:
- nParam = NS_ooxml::LN_Value_ST_Jc_right;
- break;
- default:
- break;
- }
- if (nParam >= 0)
- {
- auto pValue = new RTFValue(nParam);
- m_aStates.top().getTableRowSprms().set(NS_ooxml::LN_CT_TrPrBase_jc, pValue);
- return RTFError::OK;
- }
-
- // Cell Text Flow
- switch (nKeyword)
- {
- case RTF_CLTXLRTB:
- nParam = NS_ooxml::LN_Value_ST_TextDirection_lrTb;
- break;
- case RTF_CLTXTBRL:
- nParam = NS_ooxml::LN_Value_ST_TextDirection_tbRl;
- break;
- case RTF_CLTXBTLR:
- nParam = NS_ooxml::LN_Value_ST_TextDirection_btLr;
- break;
- case RTF_CLTXLRTBV:
- nParam = NS_ooxml::LN_Value_ST_TextDirection_lrTbV;
- break;
- case RTF_CLTXTBRLV:
- nParam = NS_ooxml::LN_Value_ST_TextDirection_tbRlV;
- break;
- default:
- break;
- }
- if (nParam >= 0)
- {
- auto pValue = new RTFValue(nParam);
- m_aStates.top().getTableCellSprms().set(NS_ooxml::LN_CT_TcPrBase_textDirection, pValue);
- }
-
- // Trivial paragraph flags
- switch (nKeyword)
- {
- case RTF_KEEP:
- if (m_aStates.top().getCurrentBuffer() != &m_aTableBufferStack.back())
- nParam = NS_ooxml::LN_CT_PPrBase_keepLines;
- break;
- case RTF_KEEPN:
- if (m_aStates.top().getCurrentBuffer() != &m_aTableBufferStack.back())
- nParam = NS_ooxml::LN_CT_PPrBase_keepNext;
- break;
- case RTF_INTBL:
- {
- m_aStates.top().setCurrentBuffer(&m_aTableBufferStack.back());
- nParam = NS_ooxml::LN_inTbl;
- }
- break;
- case RTF_PAGEBB:
- nParam = NS_ooxml::LN_CT_PPrBase_pageBreakBefore;
- break;
- default:
- break;
- }
- if (nParam >= 0)
- {
- auto pValue = new RTFValue(1);
- m_aStates.top().getParagraphSprms().set(nParam, pValue);
- return RTFError::OK;
- }
-
- switch (nKeyword)
- {
- case RTF_FNIL:
- case RTF_FROMAN:
- case RTF_FSWISS:
- case RTF_FMODERN:
- case RTF_FSCRIPT:
- case RTF_FDECOR:
- case RTF_FTECH:
- case RTF_FBIDI:
- // TODO ooxml:CT_Font_family seems to be ignored by the domain mapper
- break;
- case RTF_ANSI:
- m_aStates.top().setCurrentEncoding(RTL_TEXTENCODING_MS_1252);
- break;
- case RTF_MAC:
- m_aDefaultState.setCurrentEncoding(RTL_TEXTENCODING_APPLE_ROMAN);
- m_aStates.top().setCurrentEncoding(m_aDefaultState.getCurrentEncoding());
- break;
- case RTF_PC:
- m_aDefaultState.setCurrentEncoding(RTL_TEXTENCODING_IBM_437);
- m_aStates.top().setCurrentEncoding(m_aDefaultState.getCurrentEncoding());
- break;
- case RTF_PCA:
- m_aDefaultState.setCurrentEncoding(RTL_TEXTENCODING_IBM_850);
- m_aStates.top().setCurrentEncoding(m_aDefaultState.getCurrentEncoding());
- break;
- case RTF_PLAIN:
- {
- m_aStates.top().getCharacterSprms() = getDefaultState().getCharacterSprms();
- m_aStates.top().setCurrentEncoding(getEncoding(getFontIndex(m_nDefaultFontIndex)));
- m_aStates.top().getCharacterAttributes() = getDefaultState().getCharacterAttributes();
- m_aStates.top().setCurrentCharacterStyleIndex(-1);
- m_aStates.top().setRunType(RTFParserState::RunType::NONE);
- }
- break;
- case RTF_PARD:
- {
- if (m_bHadPicture)
- dispatchSymbol(RTF_PAR);
- // \pard is allowed between \cell and \row, but in that case it should not reset the fact that we're inside a table.
- // It should not reset the paragraph style, either, so remember the old paragraph style.
- RTFValue::Pointer_t pOldStyle
- = m_aStates.top().getParagraphSprms().find(NS_ooxml::LN_CT_PPrBase_pStyle);
- m_aStates.top().getParagraphSprms() = m_aDefaultState.getParagraphSprms();
- m_aStates.top().getParagraphAttributes() = m_aDefaultState.getParagraphAttributes();
-
- if (m_nTopLevelCells == 0 && m_nNestedCells == 0)
- {
- // Reset that we're in a table.
- m_aStates.top().setCurrentBuffer(nullptr);
- }
- else
- {
- // We are still in a table.
- m_aStates.top().getParagraphSprms().set(NS_ooxml::LN_inTbl, new RTFValue(1));
- if (m_bAfterCellBeforeRow && pOldStyle)
- // And we still have the same paragraph style.
- m_aStates.top().getParagraphSprms().set(NS_ooxml::LN_CT_PPrBase_pStyle,
- pOldStyle);
- // Ideally getDefaultSPRM() would take care of this, but it would not when we're buffering.
- m_aStates.top().getParagraphSprms().set(NS_ooxml::LN_CT_PPrBase_tabs,
- new RTFValue());
- }
- resetFrame();
-
- // Reset currently selected paragraph style as well, unless we are in the special "after \cell, before \row" state.
- // By default the style with index 0 is applied.
- if (!m_bAfterCellBeforeRow)
- {
- OUString const aName = getStyleName(0);
- // But only in case it's not a character style.
- if (!aName.isEmpty()
- && getStyleType(0) != NS_ooxml::LN_Value_ST_StyleType_character)
- {
- m_aStates.top().getParagraphSprms().set(NS_ooxml::LN_CT_PPrBase_pStyle,
- new RTFValue(aName));
- m_aStates.top().setCurrentStyleIndex(0);
- }
- else
- {
- m_aStates.top().setCurrentStyleIndex(-1);
- }
- }
- // Need to send paragraph properties again, if there will be any.
- m_bNeedPap = true;
- break;
- }
- case RTF_SECTD:
- {
- m_aStates.top().getSectionSprms() = m_aDefaultState.getSectionSprms();
- m_aStates.top().getSectionAttributes() = m_aDefaultState.getSectionAttributes();
- }
- break;
- case RTF_TROWD:
- {
- // Back these up, in case later we still need this info.
- backupTableRowProperties();
- resetTableRowProperties();
- // In case the table definition is in the middle of the row
- // (invalid), make sure table definition is emitted.
- m_bNeedPap = true;
- }
- break;
- case RTF_WIDCTLPAR:
- case RTF_NOWIDCTLPAR:
- {
- auto pValue = new RTFValue(int(nKeyword == RTF_WIDCTLPAR));
- m_aStates.top().getParagraphSprms().set(NS_ooxml::LN_CT_PPrBase_widowControl, pValue);
- }
- break;
- case RTF_BOX:
- {
- RTFSprms aAttributes;
- auto pValue = new RTFValue(aAttributes);
- for (int i = 0; i < 4; i++)
- m_aStates.top().getParagraphSprms().set(getParagraphBorder(i), pValue);
- m_aStates.top().setBorderState(RTFBorderState::PARAGRAPH_BOX);
- }
- break;
- case RTF_LTRSECT:
- case RTF_RTLSECT:
- {
- auto pValue = new RTFValue(nKeyword == RTF_LTRSECT ? 0 : 1);
- m_aStates.top().setRunType(RTFParserState::RunType::NONE);
- m_aStates.top().getParagraphSprms().set(NS_ooxml::LN_EG_SectPrContents_textDirection,
- pValue);
- }
- break;
- case RTF_LTRPAR:
- case RTF_RTLPAR:
- {
- auto pValue = new RTFValue(nKeyword == RTF_LTRPAR ? 0 : 1);
- m_aStates.top().setRunType(RTFParserState::RunType::NONE);
- m_aStates.top().getParagraphSprms().set(NS_ooxml::LN_CT_PPrBase_bidi, pValue);
- }
- break;
- case RTF_LTRROW:
- case RTF_RTLROW:
- m_aStates.top().setRunType(RTFParserState::RunType::NONE);
- m_aStates.top().getTableRowSprms().set(NS_ooxml::LN_CT_TblPrBase_bidiVisual,
- new RTFValue(int(nKeyword == RTF_RTLROW)));
- break;
- case RTF_LTRCH:
- // dmapper does not support this.
- if (m_aStates.top().getRunType() == RTFParserState::RunType::RTLCH_LTRCH_1)
- m_aStates.top().setRunType(RTFParserState::RunType::RTLCH_LTRCH_2);
- else
- m_aStates.top().setRunType(RTFParserState::RunType::LTRCH_RTLCH_1);
- break;
- case RTF_RTLCH:
- if (m_aStates.top().getRunType() == RTFParserState::RunType::LTRCH_RTLCH_1)
- m_aStates.top().setRunType(RTFParserState::RunType::LTRCH_RTLCH_2);
- else
- m_aStates.top().setRunType(RTFParserState::RunType::RTLCH_LTRCH_1);
-
- if (m_aDefaultState.getCurrentEncoding() == RTL_TEXTENCODING_MS_1255)
- m_aStates.top().setCurrentEncoding(m_aDefaultState.getCurrentEncoding());
- break;
- case RTF_ULNONE:
- {
- auto pValue = new RTFValue(NS_ooxml::LN_Value_ST_Underline_none);
- m_aStates.top().getCharacterAttributes().set(NS_ooxml::LN_CT_Underline_val, pValue);
- }
- break;
- case RTF_NONSHPPICT:
- case RTF_MMATHPICT: // Picture group used by readers not understanding \moMath group
- m_aStates.top().setDestination(Destination::SKIP);
- break;
- case RTF_CLBRDRT:
- case RTF_CLBRDRL:
- case RTF_CLBRDRB:
- case RTF_CLBRDRR:
- {
- RTFSprms aAttributes;
- RTFSprms aSprms;
- auto pValue = new RTFValue(aAttributes, aSprms);
- switch (nKeyword)
- {
- case RTF_CLBRDRT:
- nParam = NS_ooxml::LN_CT_TcBorders_top;
- break;
- case RTF_CLBRDRL:
- nParam = NS_ooxml::LN_CT_TcBorders_left;
- break;
- case RTF_CLBRDRB:
- nParam = NS_ooxml::LN_CT_TcBorders_bottom;
- break;
- case RTF_CLBRDRR:
- nParam = NS_ooxml::LN_CT_TcBorders_right;
- break;
- default:
- break;
- }
- putNestedSprm(m_aStates.top().getTableCellSprms(), NS_ooxml::LN_CT_TcPrBase_tcBorders,
- nParam, pValue);
- m_aStates.top().setBorderState(RTFBorderState::CELL);
- }
- break;
- case RTF_PGBRDRT:
- case RTF_PGBRDRL:
- case RTF_PGBRDRB:
- case RTF_PGBRDRR:
- {
- RTFSprms aAttributes;
- RTFSprms aSprms;
- auto pValue = new RTFValue(aAttributes, aSprms);
- switch (nKeyword)
- {
- case RTF_PGBRDRT:
- nParam = NS_ooxml::LN_CT_PageBorders_top;
- break;
- case RTF_PGBRDRL:
- nParam = NS_ooxml::LN_CT_PageBorders_left;
- break;
- case RTF_PGBRDRB:
- nParam = NS_ooxml::LN_CT_PageBorders_bottom;
- break;
- case RTF_PGBRDRR:
- nParam = NS_ooxml::LN_CT_PageBorders_right;
- break;
- default:
- break;
- }
- putNestedSprm(m_aStates.top().getSectionSprms(),
- NS_ooxml::LN_EG_SectPrContents_pgBorders, nParam, pValue);
- m_aStates.top().setBorderState(RTFBorderState::PAGE);
- }
- break;
- case RTF_BRDRT:
- case RTF_BRDRL:
- case RTF_BRDRB:
- case RTF_BRDRR:
- {
- RTFSprms aAttributes;
- RTFSprms aSprms;
- auto pValue = new RTFValue(aAttributes, aSprms);
- switch (nKeyword)
- {
- case RTF_BRDRT:
- nParam = getParagraphBorder(0);
- break;
- case RTF_BRDRL:
- nParam = getParagraphBorder(1);
- break;
- case RTF_BRDRB:
- nParam = getParagraphBorder(2);
- break;
- case RTF_BRDRR:
- nParam = getParagraphBorder(3);
- break;
- default:
- break;
- }
- putNestedSprm(m_aStates.top().getParagraphSprms(), NS_ooxml::LN_CT_PrBase_pBdr, nParam,
- pValue);
- m_aStates.top().setBorderState(RTFBorderState::PARAGRAPH);
- }
- break;
- case RTF_CHBRDR:
- {
- RTFSprms aAttributes;
- auto pValue = new RTFValue(aAttributes);
- m_aStates.top().getCharacterSprms().set(NS_ooxml::LN_EG_RPrBase_bdr, pValue);
- m_aStates.top().setBorderState(RTFBorderState::CHARACTER);
- }
- break;
- case RTF_CLMGF:
- {
- auto pValue = new RTFValue(NS_ooxml::LN_Value_ST_Merge_restart);
- m_aStates.top().getTableCellSprms().set(NS_ooxml::LN_CT_TcPrBase_hMerge, pValue);
- }
- break;
- case RTF_CLMRG:
- {
- auto pValue = new RTFValue(NS_ooxml::LN_Value_ST_Merge_continue);
- m_aStates.top().getTableCellSprms().set(NS_ooxml::LN_CT_TcPrBase_hMerge, pValue);
- }
- break;
- case RTF_CLVMGF:
- {
- auto pValue = new RTFValue(NS_ooxml::LN_Value_ST_Merge_restart);
- m_aStates.top().getTableCellSprms().set(NS_ooxml::LN_CT_TcPrBase_vMerge, pValue);
- }
- break;
- case RTF_CLVMRG:
- {
- auto pValue = new RTFValue(NS_ooxml::LN_Value_ST_Merge_continue);
- m_aStates.top().getTableCellSprms().set(NS_ooxml::LN_CT_TcPrBase_vMerge, pValue);
- }
- break;
- case RTF_CLVERTALT:
- case RTF_CLVERTALC:
- case RTF_CLVERTALB:
- {
- switch (nKeyword)
- {
- case RTF_CLVERTALT:
- nParam = NS_ooxml::LN_Value_ST_VerticalJc_top;
- break;
- case RTF_CLVERTALC:
- nParam = NS_ooxml::LN_Value_ST_VerticalJc_center;
- break;
- case RTF_CLVERTALB:
- nParam = NS_ooxml::LN_Value_ST_VerticalJc_bottom;
- break;
- default:
- break;
- }
- auto pValue = new RTFValue(nParam);
- m_aStates.top().getTableCellSprms().set(NS_ooxml::LN_CT_TcPrBase_vAlign, pValue);
- }
- break;
- case RTF_TRKEEP:
- {
- auto pValue = new RTFValue(1);
- m_aStates.top().getTableRowSprms().set(NS_ooxml::LN_CT_TrPrBase_cantSplit, pValue);
- }
- break;
- case RTF_SECTUNLOCKED:
- {
- auto pValue = new RTFValue(0);
- m_aStates.top().getSectionSprms().set(NS_ooxml::LN_EG_SectPrContents_formProt, pValue);
- }
- break;
- case RTF_PGNBIDIA:
- case RTF_PGNBIDIB:
- // These should be mapped to NS_ooxml::LN_EG_SectPrContents_pgNumType, but dmapper has no API for that at the moment.
- break;
- case RTF_LOCH:
- m_aStates.top().setRunType(RTFParserState::RunType::LOCH);
- break;
- case RTF_HICH:
- m_aStates.top().setRunType(RTFParserState::RunType::HICH);
- break;
- case RTF_DBCH:
- m_aStates.top().setRunType(RTFParserState::RunType::DBCH);
- break;
- case RTF_TITLEPG:
- {
- auto pValue = new RTFValue(1);
- m_aStates.top().getSectionSprms().set(NS_ooxml::LN_EG_SectPrContents_titlePg, pValue);
- }
- break;
- case RTF_SUPER:
- {
- // Make sure character properties are not lost if the document
- // starts with a footnote.
- if (!isStyleSheetImport())
- {
- checkFirstRun();
- checkNeedPap();
- }
-
- if (!m_aStates.top().getCurrentBuffer())
- m_aStates.top().setCurrentBuffer(&m_aSuperBuffer);
-
- auto pValue = new RTFValue("superscript");
- m_aStates.top().getCharacterSprms().set(NS_ooxml::LN_EG_RPrBase_vertAlign, pValue);
- }
- break;
- case RTF_SUB:
- {
- auto pValue = new RTFValue("subscript");
- m_aStates.top().getCharacterSprms().set(NS_ooxml::LN_EG_RPrBase_vertAlign, pValue);
- }
- break;
- case RTF_NOSUPERSUB:
- {
- if (m_aStates.top().getCurrentBuffer() == &m_aSuperBuffer)
- {
- replayBuffer(m_aSuperBuffer, nullptr, nullptr);
- m_aStates.top().setCurrentBuffer(nullptr);
- }
- m_aStates.top().getCharacterSprms().erase(NS_ooxml::LN_EG_RPrBase_vertAlign);
- }
- break;
- case RTF_LINEPPAGE:
- case RTF_LINECONT:
- {
- auto pValue = new RTFValue(nKeyword == RTF_LINEPPAGE
- ? NS_ooxml::LN_Value_ST_LineNumberRestart_newPage
- : NS_ooxml::LN_Value_ST_LineNumberRestart_continuous);
- putNestedAttribute(m_aStates.top().getSectionSprms(),
- NS_ooxml::LN_EG_SectPrContents_lnNumType,
- NS_ooxml::LN_CT_LineNumber_restart, pValue);
- }
- break;
- case RTF_AENDDOC:
- // Noop, this is the default in Writer.
- case RTF_AENDNOTES:
- // Noop
- case RTF_AFTNRSTCONT:
- // Noop, this is the default in Writer.
- case RTF_AFTNRESTART:
- // Noop
- case RTF_FTNBJ:
- // Noop, this is the default in Writer.
- break;
- case RTF_ENDDOC:
- {
- auto pValue = new RTFValue(NS_ooxml::LN_Value_ST_RestartNumber_eachSect);
- putNestedSprm(m_aDefaultState.getParagraphSprms(),
- NS_ooxml::LN_EG_SectPrContents_footnotePr,
- NS_ooxml::LN_EG_FtnEdnNumProps_numRestart, pValue);
- }
- break;
- case RTF_NOLINE:
- eraseNestedAttribute(m_aStates.top().getSectionSprms(),
- NS_ooxml::LN_EG_SectPrContents_lnNumType,
- NS_ooxml::LN_CT_LineNumber_distance);
- break;
- case RTF_FORMSHADE:
- // Noop, this is the default in Writer.
- break;
- case RTF_PNGBLIP:
- m_aStates.top().getPicture().eStyle = RTFBmpStyle::PNG;
- break;
- case RTF_JPEGBLIP:
- m_aStates.top().getPicture().eStyle = RTFBmpStyle::JPEG;
- break;
- case RTF_POSYT:
- m_aStates.top().getFrame().setSprm(NS_ooxml::LN_CT_FramePr_yAlign,
- NS_ooxml::LN_Value_doc_ST_YAlign_top);
- break;
- case RTF_POSYB:
- m_aStates.top().getFrame().setSprm(NS_ooxml::LN_CT_FramePr_yAlign,
- NS_ooxml::LN_Value_doc_ST_YAlign_bottom);
- break;
- case RTF_POSYC:
- m_aStates.top().getFrame().setSprm(NS_ooxml::LN_CT_FramePr_yAlign,
- NS_ooxml::LN_Value_doc_ST_YAlign_center);
- break;
- case RTF_POSYIN:
- m_aStates.top().getFrame().setSprm(NS_ooxml::LN_CT_FramePr_yAlign,
- NS_ooxml::LN_Value_doc_ST_YAlign_inside);
- break;
- case RTF_POSYOUT:
- m_aStates.top().getFrame().setSprm(NS_ooxml::LN_CT_FramePr_yAlign,
- NS_ooxml::LN_Value_doc_ST_YAlign_outside);
- break;
- case RTF_POSYIL:
- m_aStates.top().getFrame().setSprm(NS_ooxml::LN_CT_FramePr_yAlign,
- NS_ooxml::LN_Value_doc_ST_YAlign_inline);
- break;
-
- case RTF_PHMRG:
- m_aStates.top().getFrame().setSprm(NS_ooxml::LN_CT_FramePr_hAnchor,
- NS_ooxml::LN_Value_doc_ST_HAnchor_margin);
- break;
- case RTF_PVMRG:
- m_aStates.top().getFrame().setSprm(NS_ooxml::LN_CT_FramePr_vAnchor,
- NS_ooxml::LN_Value_doc_ST_VAnchor_margin);
- break;
- case RTF_PHPG:
- m_aStates.top().getFrame().setSprm(NS_ooxml::LN_CT_FramePr_hAnchor,
- NS_ooxml::LN_Value_doc_ST_HAnchor_page);
- break;
- case RTF_PVPG:
- m_aStates.top().getFrame().setSprm(NS_ooxml::LN_CT_FramePr_vAnchor,
- NS_ooxml::LN_Value_doc_ST_VAnchor_page);
- break;
- case RTF_PHCOL:
- m_aStates.top().getFrame().setSprm(NS_ooxml::LN_CT_FramePr_hAnchor,
- NS_ooxml::LN_Value_doc_ST_HAnchor_text);
- break;
- case RTF_PVPARA:
- m_aStates.top().getFrame().setSprm(NS_ooxml::LN_CT_FramePr_vAnchor,
- NS_ooxml::LN_Value_doc_ST_VAnchor_text);
- break;
-
- case RTF_POSXC:
- m_aStates.top().getFrame().setSprm(NS_ooxml::LN_CT_FramePr_xAlign,
- NS_ooxml::LN_Value_doc_ST_XAlign_center);
- break;
- case RTF_POSXI:
- m_aStates.top().getFrame().setSprm(NS_ooxml::LN_CT_FramePr_xAlign,
- NS_ooxml::LN_Value_doc_ST_XAlign_inside);
- break;
- case RTF_POSXO:
- m_aStates.top().getFrame().setSprm(NS_ooxml::LN_CT_FramePr_xAlign,
- NS_ooxml::LN_Value_doc_ST_XAlign_outside);
- break;
- case RTF_POSXL:
- m_aStates.top().getFrame().setSprm(NS_ooxml::LN_CT_FramePr_xAlign,
- NS_ooxml::LN_Value_doc_ST_XAlign_left);
- break;
- case RTF_POSXR:
- m_aStates.top().getFrame().setSprm(NS_ooxml::LN_CT_FramePr_xAlign,
- NS_ooxml::LN_Value_doc_ST_XAlign_right);
- break;
-
- case RTF_DPLINE:
- case RTF_DPRECT:
- case RTF_DPELLIPSE:
- case RTF_DPTXBX:
- case RTF_DPPOLYLINE:
- case RTF_DPPOLYGON:
- {
- sal_Int32 nType = 0;
- switch (nKeyword)
- {
- case RTF_DPLINE:
- {
- uno::Reference<drawing::XShape> xShape(
- getModelFactory()->createInstance("com.sun.star.drawing.LineShape"),
- uno::UNO_QUERY);
- m_aStates.top().getDrawingObject().setShape(xShape);
- break;
- }
- case RTF_DPPOLYLINE:
- {
- // The reason this is not a simple CustomShape is that in the old syntax we have no ViewBox info.
- uno::Reference<drawing::XShape> xShape(
- getModelFactory()->createInstance("com.sun.star.drawing.PolyLineShape"),
- uno::UNO_QUERY);
- m_aStates.top().getDrawingObject().setShape(xShape);
- break;
- }
- case RTF_DPPOLYGON:
- {
- uno::Reference<drawing::XShape> xShape(
- getModelFactory()->createInstance("com.sun.star.drawing.PolyPolygonShape"),
- uno::UNO_QUERY);
- m_aStates.top().getDrawingObject().setShape(xShape);
- break;
- }
- case RTF_DPRECT:
- {
- uno::Reference<drawing::XShape> xShape(
- getModelFactory()->createInstance("com.sun.star.drawing.RectangleShape"),
- uno::UNO_QUERY);
- m_aStates.top().getDrawingObject().setShape(xShape);
- break;
- }
- case RTF_DPELLIPSE:
- nType = ESCHER_ShpInst_Ellipse;
- break;
- case RTF_DPTXBX:
- {
- uno::Reference<drawing::XShape> xShape(
- getModelFactory()->createInstance("com.sun.star.text.TextFrame"),
- uno::UNO_QUERY);
- m_aStates.top().getDrawingObject().setShape(xShape);
- std::vector<beans::PropertyValue> aDefaults
- = RTFSdrImport::getTextFrameDefaults(false);
- for (const auto& rDefault : aDefaults)
- {
- if (!findPropertyName(
- m_aStates.top().getDrawingObject().getPendingProperties(),
- rDefault.Name))
- m_aStates.top().getDrawingObject().getPendingProperties().push_back(
- rDefault);
- }
- checkFirstRun();
- Mapper().startShape(m_aStates.top().getDrawingObject().getShape());
- m_aStates.top().getDrawingObject().setHadShapeText(true);
- }
- break;
- default:
- break;
- }
- if (nType)
- {
- uno::Reference<drawing::XShape> xShape(
- getModelFactory()->createInstance("com.sun.star.drawing.CustomShape"),
- uno::UNO_QUERY);
- m_aStates.top().getDrawingObject().setShape(xShape);
- }
- uno::Reference<drawing::XDrawPageSupplier> xDrawSupplier(m_xDstDoc, uno::UNO_QUERY);
- uno::Reference<beans::XPropertySet> xPropertySet(
- m_aStates.top().getDrawingObject().getShape(), uno::UNO_QUERY);
- m_aStates.top().getDrawingObject().setPropertySet(xPropertySet);
- if (xDrawSupplier.is())
- {
- uno::Reference<drawing::XShapes> xShapes = xDrawSupplier->getDrawPage();
- if (xShapes.is() && nKeyword != RTF_DPTXBX)
- {
- // set default VertOrient before inserting
- m_aStates.top().getDrawingObject().getPropertySet()->setPropertyValue(
- "VertOrient", uno::makeAny(text::VertOrientation::NONE));
- xShapes->add(m_aStates.top().getDrawingObject().getShape());
- }
- }
- if (nType)
- {
- uno::Reference<drawing::XEnhancedCustomShapeDefaulter> xDefaulter(
- m_aStates.top().getDrawingObject().getShape(), uno::UNO_QUERY);
- xDefaulter->createCustomShapeDefaults(OUString::number(nType));
- }
- std::vector<beans::PropertyValue>& rPendingProperties
- = m_aStates.top().getDrawingObject().getPendingProperties();
- for (const auto& rPendingProperty : rPendingProperties)
- m_aStates.top().getDrawingObject().getPropertySet()->setPropertyValue(
- rPendingProperty.Name, rPendingProperty.Value);
- m_pSdrImport->resolveDhgt(m_aStates.top().getDrawingObject().getPropertySet(),
- m_aStates.top().getDrawingObject().getDhgt(),
- /*bOldStyle=*/true);
- }
- break;
- case RTF_DOBXMARGIN:
- case RTF_DOBYMARGIN:
- {
- beans::PropertyValue aPropertyValue;
- aPropertyValue.Name
- = (nKeyword == RTF_DOBXMARGIN ? OUStringLiteral(u"HoriOrientRelation")
- : OUStringLiteral(u"VertOrientRelation"));
- aPropertyValue.Value <<= text::RelOrientation::PAGE_PRINT_AREA;
- m_aStates.top().getDrawingObject().getPendingProperties().push_back(aPropertyValue);
- }
- break;
- case RTF_DOBXPAGE:
- case RTF_DOBYPAGE:
- {
- beans::PropertyValue aPropertyValue;
- aPropertyValue.Name
- = (nKeyword == RTF_DOBXPAGE ? OUStringLiteral(u"HoriOrientRelation")
- : OUStringLiteral(u"VertOrientRelation"));
- aPropertyValue.Value <<= text::RelOrientation::PAGE_FRAME;
- m_aStates.top().getDrawingObject().getPendingProperties().push_back(aPropertyValue);
- }
- break;
- case RTF_DOBYPARA:
- {
- beans::PropertyValue aPropertyValue;
- aPropertyValue.Name = "VertOrientRelation";
- aPropertyValue.Value <<= text::RelOrientation::FRAME;
- m_aStates.top().getDrawingObject().getPendingProperties().push_back(aPropertyValue);
- }
- break;
- case RTF_CONTEXTUALSPACE:
- {
- auto pValue = new RTFValue(1);
- m_aStates.top().getParagraphSprms().set(NS_ooxml::LN_CT_PPrBase_contextualSpacing,
- pValue);
- }
- break;
- case RTF_LINKSTYLES:
- {
- auto pValue = new RTFValue(1);
- m_aSettingsTableSprms.set(NS_ooxml::LN_CT_Settings_linkStyles, pValue);
- }
- break;
- case RTF_PNLVLBODY:
- {
- auto pValue = new RTFValue(2);
- m_aStates.top().getTableAttributes().set(NS_ooxml::LN_CT_AbstractNum_nsid, pValue);
- }
- break;
- case RTF_PNDEC:
- {
- auto pValue = new RTFValue(NS_ooxml::LN_Value_ST_NumberFormat_decimal);
- putNestedAttribute(m_aStates.top().getTableSprms(), NS_ooxml::LN_CT_Lvl_numFmt,
- NS_ooxml::LN_CT_NumFmt_val, pValue);
- }
- break;
- case RTF_PNLVLBLT:
- {
- m_aStates.top().getTableAttributes().set(NS_ooxml::LN_CT_AbstractNum_nsid,
- new RTFValue(1));
- putNestedAttribute(m_aStates.top().getTableSprms(), NS_ooxml::LN_CT_Lvl_numFmt,
- NS_ooxml::LN_CT_NumFmt_val,
- new RTFValue(NS_ooxml::LN_Value_ST_NumberFormat_bullet));
- }
- break;
- case RTF_LANDSCAPE:
- {
- auto pValue = new RTFValue(NS_ooxml::LN_Value_ST_PageOrientation_landscape);
- putNestedAttribute(m_aDefaultState.getSectionSprms(),
- NS_ooxml::LN_EG_SectPrContents_pgSz, NS_ooxml::LN_CT_PageSz_orient,
- pValue);
- [[fallthrough]]; // set the default + current value
- }
- case RTF_LNDSCPSXN:
- {
- auto pValue = new RTFValue(NS_ooxml::LN_Value_ST_PageOrientation_landscape);
- putNestedAttribute(m_aStates.top().getSectionSprms(),
- NS_ooxml::LN_EG_SectPrContents_pgSz, NS_ooxml::LN_CT_PageSz_orient,
- pValue);
- }
- break;
- case RTF_SHPBXPAGE:
- m_aStates.top().getShape().setHoriOrientRelation(text::RelOrientation::PAGE_FRAME);
- m_aStates.top().getShape().setHoriOrientRelationToken(
- NS_ooxml::LN_Value_wordprocessingDrawing_ST_RelFromH_page);
- break;
- case RTF_SHPBYPAGE:
- m_aStates.top().getShape().setVertOrientRelation(text::RelOrientation::PAGE_FRAME);
- m_aStates.top().getShape().setVertOrientRelationToken(
- NS_ooxml::LN_Value_wordprocessingDrawing_ST_RelFromV_page);
- break;
- case RTF_DPLINEHOLLOW:
- m_aStates.top().getDrawingObject().setFLine(0);
- break;
- case RTF_DPROUNDR:
- if (m_aStates.top().getDrawingObject().getPropertySet().is())
- // Seems this old syntax has no way to specify a custom radius, and this is the default
- m_aStates.top().getDrawingObject().getPropertySet()->setPropertyValue(
- "CornerRadius", uno::makeAny(sal_Int32(83)));
- break;
- case RTF_NOWRAP:
- m_aStates.top().getFrame().setSprm(NS_ooxml::LN_CT_FramePr_wrap,
- NS_ooxml::LN_Value_doc_ST_Wrap_notBeside);
- break;
- case RTF_MNOR:
- m_bMathNor = true;
- break;
- case RTF_REVISIONS:
- m_aSettingsTableSprms.set(NS_ooxml::LN_CT_Settings_trackRevisions, new RTFValue(1));
- break;
- case RTF_BRDRSH:
- putBorderProperty(m_aStates, NS_ooxml::LN_CT_Border_shadow, new RTFValue(1));
- break;
- case RTF_NOCOLBAL:
- m_aSettingsTableSprms.set(NS_ooxml::LN_CT_Compat_noColumnBalance, new RTFValue(1));
- break;
- case RTF_MARGMIRROR:
- m_aSettingsTableSprms.set(NS_ooxml::LN_CT_Settings_mirrorMargins, new RTFValue(1));
- break;
- case RTF_SAUTOUPD:
- m_aStates.top().getTableSprms().set(NS_ooxml::LN_CT_Style_autoRedefine,
- new RTFValue(1));
- break;
- case RTF_WIDOWCTRL:
- m_aSettingsTableSprms.set(NS_ooxml::LN_CT_Settings_widowControl, new RTFValue(1));
- break;
- case RTF_LINEBETCOL:
- putNestedAttribute(m_aStates.top().getSectionSprms(),
- NS_ooxml::LN_EG_SectPrContents_cols, NS_ooxml::LN_CT_Columns_sep,
- new RTFValue(1));
- break;
- case RTF_PGNRESTART:
- putNestedAttribute(m_aStates.top().getSectionSprms(),
- NS_ooxml::LN_EG_SectPrContents_pgNumType,
- NS_ooxml::LN_CT_PageNumber_start, new RTFValue(1));
- break;
- case RTF_PGNUCLTR:
- {
- auto pIntValue = new RTFValue(NS_ooxml::LN_Value_ST_NumberFormat_upperLetter);
- putNestedAttribute(m_aStates.top().getSectionSprms(),
- NS_ooxml::LN_EG_SectPrContents_pgNumType,
- NS_ooxml::LN_CT_PageNumber_fmt, pIntValue);
- }
- break;
- case RTF_PGNLCLTR:
- {
- auto pIntValue = new RTFValue(NS_ooxml::LN_Value_ST_NumberFormat_lowerLetter);
- putNestedAttribute(m_aStates.top().getSectionSprms(),
- NS_ooxml::LN_EG_SectPrContents_pgNumType,
- NS_ooxml::LN_CT_PageNumber_fmt, pIntValue);
- }
- break;
- case RTF_PGNUCRM:
- {
- auto pIntValue = new RTFValue(NS_ooxml::LN_Value_ST_NumberFormat_upperRoman);
- putNestedAttribute(m_aStates.top().getSectionSprms(),
- NS_ooxml::LN_EG_SectPrContents_pgNumType,
- NS_ooxml::LN_CT_PageNumber_fmt, pIntValue);
- }
- break;
- case RTF_PGNLCRM:
- {
- auto pIntValue = new RTFValue(NS_ooxml::LN_Value_ST_NumberFormat_lowerRoman);
- putNestedAttribute(m_aStates.top().getSectionSprms(),
- NS_ooxml::LN_EG_SectPrContents_pgNumType,
- NS_ooxml::LN_CT_PageNumber_fmt, pIntValue);
- }
- break;
- case RTF_PGNDEC:
- {
- auto pIntValue = new RTFValue(NS_ooxml::LN_Value_ST_NumberFormat_decimal);
- putNestedAttribute(m_aStates.top().getSectionSprms(),
- NS_ooxml::LN_EG_SectPrContents_pgNumType,
- NS_ooxml::LN_CT_PageNumber_fmt, pIntValue);
- }
- break;
- case RTF_HTMAUTSP:
- m_aSettingsTableSprms.set(NS_ooxml::LN_CT_Compat_doNotUseHTMLParagraphAutoSpacing,
- new RTFValue(0));
- break;
- case RTF_DNTBLNSBDB:
- // tdf#128428 switch off longer space sequence
- m_aSettingsTableSprms.set(NS_ooxml::LN_CT_Settings_longerSpaceSequence,
- new RTFValue(0));
- break;
- default:
- {
- SAL_INFO("writerfilter", "TODO handle flag '" << keywordToString(nKeyword) << "'");
- aSkip.setParsed(false);
- }
- break;
- }
- return RTFError::OK;
-}
-
-} // namespace writerfilter
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/rtftok/rtfdispatchsymbol.cxx b/writerfilter/source/rtftok/rtfdispatchsymbol.cxx
deleted file mode 100644
index fea4d7dac0a6..000000000000
--- a/writerfilter/source/rtftok/rtfdispatchsymbol.cxx
+++ /dev/null
@@ -1,432 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-
-#include "rtfdocumentimpl.hxx"
-
-#include <com/sun/star/io/WrongFormatException.hpp>
-#include <svl/lngmisc.hxx>
-
-#include <ooxml/resourceids.hxx>
-
-#include <sal/log.hxx>
-
-#include "rtfreferenceproperties.hxx"
-#include "rtfskipdestination.hxx"
-
-using namespace com::sun::star;
-
-namespace writerfilter::rtftok
-{
-RTFError RTFDocumentImpl::dispatchSymbol(RTFKeyword nKeyword)
-{
- setNeedSect(true);
- if (nKeyword != RTF_HEXCHAR)
- checkUnicode(/*bUnicode =*/true, /*bHex =*/true);
- else
- checkUnicode(/*bUnicode =*/true, /*bHex =*/false);
- RTFSkipDestination aSkip(*this);
-
- if (RTF_LINE == nKeyword)
- {
- // very special handling since text() will eat lone '\n'
- singleChar('\n');
- return RTFError::OK;
- }
- // Trivial symbols
- sal_uInt8 cCh = 0;
- switch (nKeyword)
- {
- case RTF_TAB:
- cCh = '\t';
- break;
- case RTF_BACKSLASH:
- cCh = '\\';
- break;
- case RTF_LBRACE:
- cCh = '{';
- break;
- case RTF_RBRACE:
- cCh = '}';
- break;
- case RTF_EMDASH:
- cCh = 151;
- break;
- case RTF_ENDASH:
- cCh = 150;
- break;
- case RTF_BULLET:
- cCh = 149;
- break;
- case RTF_LQUOTE:
- cCh = 145;
- break;
- case RTF_RQUOTE:
- cCh = 146;
- break;
- case RTF_LDBLQUOTE:
- cCh = 147;
- break;
- case RTF_RDBLQUOTE:
- cCh = 148;
- break;
- default:
- break;
- }
- if (cCh > 0)
- {
- OUString aStr(OStringToOUString(OStringChar(char(cCh)), RTL_TEXTENCODING_MS_1252));
- text(aStr);
- return RTFError::OK;
- }
-
- switch (nKeyword)
- {
- case RTF_IGNORE:
- {
- m_bSkipUnknown = true;
- aSkip.setReset(false);
- return RTFError::OK;
- }
- break;
- case RTF_PAR:
- {
- if (m_aStates.top().getDestination() == Destination::FOOTNOTESEPARATOR)
- break; // just ignore it - only thing we read in here is CHFTNSEP
- checkFirstRun();
- bool bNeedPap = m_bNeedPap;
- checkNeedPap();
- if (bNeedPap)
- runProps();
- if (!m_aStates.top().getCurrentBuffer())
- {
- parBreak();
- // Not in table? Reset max width.
- if (m_nCellxMax)
- {
- // Was in table, but not anymore -> tblEnd.
- RTFSprms aAttributes;
- RTFSprms aSprms;
- aSprms.set(NS_ooxml::LN_tblEnd, new RTFValue(1));
- writerfilter::Reference<Properties>::Pointer_t pProperties
- = new RTFReferenceProperties(aAttributes, aSprms);
- Mapper().props(pProperties);
- }
- m_nCellxMax = 0;
- }
- else if (m_aStates.top().getDestination() != Destination::SHAPETEXT)
- {
- RTFValue::Pointer_t pValue;
- m_aStates.top().getCurrentBuffer()->push_back(Buf_t(BUFFER_PAR, pValue, nullptr));
- }
- // but don't emit properties yet, since they may change till the first text token arrives
- m_bNeedPap = true;
- if (!m_aStates.top().getFrame().inFrame())
- m_bNeedPar = false;
- m_bNeedFinalPar = false;
- }
- break;
- case RTF_SECT:
- {
- m_bHadSect = true;
- if (m_bIgnoreNextContSectBreak)
- m_bIgnoreNextContSectBreak = false;
- else
- {
- sectBreak();
- if (m_nResetBreakOnSectBreak != RTF_invalid)
- {
- // this should run on _second_ \sect after \page
- dispatchSymbol(m_nResetBreakOnSectBreak); // lazy reset
- m_nResetBreakOnSectBreak = RTF_invalid;
- m_bNeedSect = false; // dispatchSymbol set it
- }
- }
- }
- break;
- case RTF_NOBREAK:
- {
- OUString aStr(SVT_HARD_SPACE);
- text(aStr);
- }
- break;
- case RTF_NOBRKHYPH:
- {
- OUString aStr(SVT_HARD_HYPHEN);
- text(aStr);
- }
- break;
- case RTF_OPTHYPH:
- {
- OUString aStr(SVT_SOFT_HYPHEN);
- text(aStr);
- }
- break;
- case RTF_HEXCHAR:
- m_aStates.top().setInternalState(RTFInternalState::HEX);
- break;
- case RTF_CELL:
- case RTF_NESTCELL:
- {
- if (nKeyword == RTF_CELL)
- m_bAfterCellBeforeRow = true;
-
- checkFirstRun();
- if (m_bNeedPap)
- {
- // There were no runs in the cell, so we need to send paragraph and character properties here.
- auto pPValue = new RTFValue(m_aStates.top().getParagraphAttributes(),
- m_aStates.top().getParagraphSprms());
- bufferProperties(m_aTableBufferStack.back(), pPValue, nullptr);
- auto pCValue = new RTFValue(m_aStates.top().getCharacterAttributes(),
- m_aStates.top().getCharacterSprms());
- bufferProperties(m_aTableBufferStack.back(), pCValue, nullptr);
- }
-
- RTFValue::Pointer_t pValue;
- m_aTableBufferStack.back().emplace_back(Buf_t(BUFFER_CELLEND, pValue, nullptr));
- m_bNeedPap = true;
- }
- break;
- case RTF_NESTROW:
- {
- tools::SvRef<TableRowBuffer> const pBuffer(
- new TableRowBuffer(m_aTableBufferStack.back(), m_aNestedTableCellsSprms,
- m_aNestedTableCellsAttributes, m_nNestedCells));
- prepareProperties(m_aStates.top(), pBuffer->GetParaProperties(),
- pBuffer->GetFrameProperties(), pBuffer->GetRowProperties(),
- m_nNestedCells, m_nNestedCurrentCellX - m_nNestedTRLeft);
-
- if (m_aTableBufferStack.size() == 1 || !m_aStates.top().getCurrentBuffer())
- {
- throw io::WrongFormatException("mismatch between \\itap and number of \\nestrow",
- nullptr);
- }
- assert(m_aStates.top().getCurrentBuffer() == &m_aTableBufferStack.back());
- // note: there may be several states pointing to table buffer!
- for (std::size_t i = 0; i < m_aStates.size(); ++i)
- {
- if (m_aStates[i].getCurrentBuffer() == &m_aTableBufferStack.back())
- {
- m_aStates[i].setCurrentBuffer(
- &m_aTableBufferStack[m_aTableBufferStack.size() - 2]);
- }
- }
- m_aTableBufferStack.pop_back();
- m_aTableBufferStack.back().emplace_back(
- Buf_t(BUFFER_NESTROW, RTFValue::Pointer_t(), pBuffer));
-
- m_aNestedTableCellsSprms.clear();
- m_aNestedTableCellsAttributes.clear();
- m_nNestedCells = 0;
- m_bNeedPap = true;
- }
- break;
- case RTF_ROW:
- {
- m_bAfterCellBeforeRow = false;
- if (m_aStates.top().getTableRowWidthAfter() > 0)
- {
- // Add fake cellx / cell, RTF equivalent of
- // OOXMLFastContextHandlerTextTableRow::handleGridAfter().
- auto pXValue = new RTFValue(m_aStates.top().getTableRowWidthAfter());
- m_aStates.top().getTableRowSprms().set(NS_ooxml::LN_CT_TblGridBase_gridCol, pXValue,
- RTFOverwrite::NO_APPEND);
- dispatchSymbol(RTF_CELL);
-
- // Adjust total width, which is done in the \cellx handler for normal cells.
- m_nTopLevelCurrentCellX += m_aStates.top().getTableRowWidthAfter();
-
- m_aStates.top().setTableRowWidthAfter(0);
- }
-
- bool bRestored = false;
- // Ending a row, but no cells defined?
- // See if there was an invalid table row reset, so we can restore cell infos to help invalid documents.
- if (!m_nTopLevelCurrentCellX && m_nBackupTopLevelCurrentCellX)
- {
- restoreTableRowProperties();
- bRestored = true;
- }
-
- // If the right edge of the last cell (row width) is smaller than the width of some other row, mimic WW8TabDesc::CalcDefaults(): resize the last cell
- const int MINLAY = 23; // sw/inc/swtypes.hxx, minimal possible size of frames.
- if ((m_nCellxMax - m_nTopLevelCurrentCellX) >= MINLAY)
- {
- auto pXValueLast = m_aStates.top().getTableRowSprms().find(
- NS_ooxml::LN_CT_TblGridBase_gridCol, false);
- const int nXValueLast = pXValueLast ? pXValueLast->getInt() : 0;
- auto pXValue = new RTFValue(nXValueLast + m_nCellxMax - m_nTopLevelCurrentCellX);
- m_aStates.top().getTableRowSprms().eraseLast(NS_ooxml::LN_CT_TblGridBase_gridCol);
- m_aStates.top().getTableRowSprms().set(NS_ooxml::LN_CT_TblGridBase_gridCol, pXValue,
- RTFOverwrite::NO_APPEND);
- m_nTopLevelCurrentCellX = m_nCellxMax;
- }
-
- if (m_nTopLevelCells)
- {
- // Make a backup before we start popping elements
- m_aTableInheritingCellsSprms = m_aTopLevelTableCellsSprms;
- m_aTableInheritingCellsAttributes = m_aTopLevelTableCellsAttributes;
- m_nInheritingCells = m_nTopLevelCells;
- }
- else
- {
- // No table definition? Then inherit from the previous row
- m_aTopLevelTableCellsSprms = m_aTableInheritingCellsSprms;
- m_aTopLevelTableCellsAttributes = m_aTableInheritingCellsAttributes;
- m_nTopLevelCells = m_nInheritingCells;
- }
-
- while (m_aTableBufferStack.size() > 1)
- {
- SAL_WARN("writerfilter.rtf", "dropping extra table buffer");
- // note: there may be several states pointing to table buffer!
- for (std::size_t i = 0; i < m_aStates.size(); ++i)
- {
- if (m_aStates[i].getCurrentBuffer() == &m_aTableBufferStack.back())
- {
- m_aStates[i].setCurrentBuffer(&m_aTableBufferStack.front());
- }
- }
- m_aTableBufferStack.pop_back();
- }
-
- replayRowBuffer(m_aTableBufferStack.back(), m_aTopLevelTableCellsSprms,
- m_aTopLevelTableCellsAttributes, m_nTopLevelCells);
-
- // The scope of the table cell defaults is one row.
- m_aDefaultState.getTableCellSprms().clear();
- m_aStates.top().getTableCellSprms() = m_aDefaultState.getTableCellSprms();
- m_aStates.top().getTableCellAttributes() = m_aDefaultState.getTableCellAttributes();
-
- writerfilter::Reference<Properties>::Pointer_t paraProperties;
- writerfilter::Reference<Properties>::Pointer_t frameProperties;
- writerfilter::Reference<Properties>::Pointer_t rowProperties;
- prepareProperties(m_aStates.top(), paraProperties, frameProperties, rowProperties,
- m_nTopLevelCells, m_nTopLevelCurrentCellX - m_nTopLevelTRLeft);
- sendProperties(paraProperties, frameProperties, rowProperties);
-
- m_bNeedPap = true;
- m_bNeedFinalPar = true;
- m_aTableBufferStack.back().clear();
- m_nTopLevelCells = 0;
-
- if (bRestored)
- // We restored cell definitions, clear these now.
- // This is necessary, as later cell definitions want to overwrite the restored ones.
- resetTableRowProperties();
- }
- break;
- case RTF_COLUMN:
- {
- bool bColumns = false; // If we have multiple columns
- RTFValue::Pointer_t pCols
- = m_aStates.top().getSectionSprms().find(NS_ooxml::LN_EG_SectPrContents_cols);
- if (pCols)
- {
- RTFValue::Pointer_t pNum = pCols->getAttributes().find(NS_ooxml::LN_CT_Columns_num);
- if (pNum && pNum->getInt() > 1)
- bColumns = true;
- }
- checkFirstRun();
- if (bColumns)
- {
- sal_uInt8 const sBreak[] = { 0xe };
- Mapper().startCharacterGroup();
- Mapper().text(sBreak, 1);
- Mapper().endCharacterGroup();
- }
- else
- dispatchSymbol(RTF_PAGE);
- }
- break;
- case RTF_CHFTN:
- {
- if (m_aStates.top().getCurrentBuffer() == &m_aSuperBuffer)
- // Stop buffering, there will be no custom mark for this footnote or endnote.
- m_aStates.top().setCurrentBuffer(nullptr);
- break;
- }
- case RTF_PAGE:
- {
- // Ignore page breaks inside tables.
- if (m_aStates.top().getCurrentBuffer() == &m_aTableBufferStack.back())
- break;
-
- // If we're inside a continuous section, we should send a section break, not a page one.
- RTFValue::Pointer_t pBreak
- = m_aStates.top().getSectionSprms().find(NS_ooxml::LN_EG_SectPrContents_type);
- // Unless we're on a title page.
- RTFValue::Pointer_t pTitlePg
- = m_aStates.top().getSectionSprms().find(NS_ooxml::LN_EG_SectPrContents_titlePg);
- if (((pBreak
- && pBreak->getInt()
- == static_cast<sal_Int32>(NS_ooxml::LN_Value_ST_SectionMark_continuous))
- || m_nResetBreakOnSectBreak == RTF_SBKNONE)
- && !(pTitlePg && pTitlePg->getInt()))
- {
- if (m_bWasInFrame)
- {
- dispatchSymbol(RTF_PAR);
- m_bWasInFrame = false;
- }
- sectBreak();
- // note: this will not affect the following section break
- // but the one just pushed
- dispatchFlag(RTF_SBKPAGE);
- if (m_bNeedPar)
- dispatchSymbol(RTF_PAR);
- m_bIgnoreNextContSectBreak = true;
- // arrange to clean up the synthetic RTF_SBKPAGE
- m_nResetBreakOnSectBreak = RTF_SBKNONE;
- }
- else
- {
- checkFirstRun();
- checkNeedPap();
- sal_uInt8 const sBreak[] = { 0xc };
- Mapper().text(sBreak, 1);
- if (!m_bNeedPap)
- {
- parBreak();
- m_bNeedPap = true;
- }
- m_bNeedCr = true;
- }
- }
- break;
- case RTF_CHPGN:
- {
- OUString aStr("PAGE");
- singleChar(cFieldStart);
- text(aStr);
- singleChar(cFieldSep, true);
- singleChar(cFieldEnd);
- }
- break;
- case RTF_CHFTNSEP:
- {
- static const sal_Unicode uFtnEdnSep = 0x3;
- Mapper().utext(reinterpret_cast<const sal_uInt8*>(&uFtnEdnSep), 1);
- }
- break;
- default:
- {
- SAL_INFO("writerfilter.rtf",
- "TODO handle symbol '" << keywordToString(nKeyword) << "'");
- aSkip.setParsed(false);
- }
- break;
- }
- return RTFError::OK;
-}
-
-} // namespace writerfilter::rtftok
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/rtftok/rtfdispatchvalue.cxx b/writerfilter/source/rtftok/rtfdispatchvalue.cxx
deleted file mode 100644
index 930c613c9750..000000000000
--- a/writerfilter/source/rtftok/rtfdispatchvalue.cxx
+++ /dev/null
@@ -1,1801 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-
-#include "rtfdocumentimpl.hxx"
-
-#include <com/sun/star/beans/XPropertySet.hpp>
-#include <com/sun/star/text/WrapTextMode.hpp>
-#include <com/sun/star/document/XDocumentProperties.hpp>
-#include <comphelper/sequence.hxx>
-#include <i18nlangtag/languagetag.hxx>
-#include <osl/thread.h>
-#include <sal/log.hxx>
-#include <rtl/tencinfo.h>
-#include <tools/UnitConversion.hxx>
-
-#include <ooxml/resourceids.hxx>
-
-#include "rtfcharsets.hxx"
-#include "rtffly.hxx"
-#include "rtfreferenceproperties.hxx"
-#include "rtfskipdestination.hxx"
-
-#include <unotools/defaultencoding.hxx>
-#include <unotools/wincodepage.hxx>
-
-using namespace com::sun::star;
-
-namespace writerfilter
-{
-static int getNumberFormat(int nParam)
-{
- static const int aMap[]
- = { NS_ooxml::LN_Value_ST_NumberFormat_decimal,
- NS_ooxml::LN_Value_ST_NumberFormat_upperRoman,
- NS_ooxml::LN_Value_ST_NumberFormat_lowerRoman,
- NS_ooxml::LN_Value_ST_NumberFormat_upperLetter,
- NS_ooxml::LN_Value_ST_NumberFormat_lowerLetter,
- NS_ooxml::LN_Value_ST_NumberFormat_ordinal,
- NS_ooxml::LN_Value_ST_NumberFormat_cardinalText,
- NS_ooxml::LN_Value_ST_NumberFormat_ordinalText,
- NS_ooxml::LN_Value_ST_NumberFormat_none, // Undefined in RTF 1.8 spec.
- NS_ooxml::LN_Value_ST_NumberFormat_none, // Undefined in RTF 1.8 spec.
- NS_ooxml::LN_Value_ST_NumberFormat_ideographDigital,
- NS_ooxml::LN_Value_ST_NumberFormat_japaneseCounting,
- NS_ooxml::LN_Value_ST_NumberFormat_aiueo,
- NS_ooxml::LN_Value_ST_NumberFormat_iroha,
- NS_ooxml::LN_Value_ST_NumberFormat_decimalFullWidth,
- NS_ooxml::LN_Value_ST_NumberFormat_decimalHalfWidth,
- NS_ooxml::LN_Value_ST_NumberFormat_japaneseLegal,
- NS_ooxml::LN_Value_ST_NumberFormat_japaneseDigitalTenThousand,
- NS_ooxml::LN_Value_ST_NumberFormat_decimalEnclosedCircleChinese,
- NS_ooxml::LN_Value_ST_NumberFormat_decimalFullWidth2,
- NS_ooxml::LN_Value_ST_NumberFormat_aiueoFullWidth,
- NS_ooxml::LN_Value_ST_NumberFormat_irohaFullWidth,
- NS_ooxml::LN_Value_ST_NumberFormat_decimalZero,
- NS_ooxml::LN_Value_ST_NumberFormat_bullet,
- NS_ooxml::LN_Value_ST_NumberFormat_ganada,
- NS_ooxml::LN_Value_ST_NumberFormat_chosung,
- NS_ooxml::LN_Value_ST_NumberFormat_decimalEnclosedFullstop,
- NS_ooxml::LN_Value_ST_NumberFormat_decimalEnclosedParen,
- NS_ooxml::LN_Value_ST_NumberFormat_decimalEnclosedCircleChinese,
- NS_ooxml::LN_Value_ST_NumberFormat_ideographEnclosedCircle,
- NS_ooxml::LN_Value_ST_NumberFormat_ideographTraditional,
- NS_ooxml::LN_Value_ST_NumberFormat_ideographZodiac,
- NS_ooxml::LN_Value_ST_NumberFormat_ideographZodiacTraditional,
- NS_ooxml::LN_Value_ST_NumberFormat_taiwaneseCounting,
- NS_ooxml::LN_Value_ST_NumberFormat_ideographLegalTraditional,
- NS_ooxml::LN_Value_ST_NumberFormat_taiwaneseCountingThousand,
- NS_ooxml::LN_Value_ST_NumberFormat_taiwaneseDigital,
- NS_ooxml::LN_Value_ST_NumberFormat_chineseCounting,
- NS_ooxml::LN_Value_ST_NumberFormat_chineseLegalSimplified,
- NS_ooxml::LN_Value_ST_NumberFormat_chineseCountingThousand,
- NS_ooxml::LN_Value_ST_NumberFormat_decimal,
- NS_ooxml::LN_Value_ST_NumberFormat_koreanDigital,
- NS_ooxml::LN_Value_ST_NumberFormat_koreanCounting,
- NS_ooxml::LN_Value_ST_NumberFormat_koreanLegal,
- NS_ooxml::LN_Value_ST_NumberFormat_koreanDigital2,
- NS_ooxml::LN_Value_ST_NumberFormat_hebrew1,
- NS_ooxml::LN_Value_ST_NumberFormat_arabicAlpha,
- NS_ooxml::LN_Value_ST_NumberFormat_hebrew2,
- NS_ooxml::LN_Value_ST_NumberFormat_arabicAbjad };
- const int nLen = SAL_N_ELEMENTS(aMap);
- int nValue = 0;
- if (nParam >= 0 && nParam < nLen)
- nValue = aMap[nParam];
- else // 255 and the other cases.
- nValue = NS_ooxml::LN_Value_ST_NumberFormat_none;
- return nValue;
-}
-
-namespace rtftok
-{
-bool RTFDocumentImpl::dispatchTableSprmValue(RTFKeyword nKeyword, int nParam)
-{
- int nSprm = 0;
- tools::SvRef<RTFValue> pIntValue(new RTFValue(nParam));
- switch (nKeyword)
- {
- case RTF_LEVELJC:
- {
- nSprm = NS_ooxml::LN_CT_Lvl_lvlJc;
- int nValue = 0;
- switch (nParam)
- {
- case 0:
- nValue = NS_ooxml::LN_Value_ST_Jc_left;
- break;
- case 1:
- nValue = NS_ooxml::LN_Value_ST_Jc_center;
- break;
- case 2:
- nValue = NS_ooxml::LN_Value_ST_Jc_right;
- break;
- }
- pIntValue = new RTFValue(nValue);
- break;
- }
- case RTF_LEVELSTARTAT:
- nSprm = NS_ooxml::LN_CT_Lvl_start;
- break;
- case RTF_LEVELPICTURE:
- nSprm = NS_ooxml::LN_CT_Lvl_lvlPicBulletId;
- break;
- case RTF_SBASEDON:
- nSprm = NS_ooxml::LN_CT_Style_basedOn;
- pIntValue = new RTFValue(getStyleName(nParam));
- break;
- default:
- break;
- }
- if (nSprm > 0)
- {
- m_aStates.top().getTableSprms().set(nSprm, pIntValue);
- return true;
- }
- if (nKeyword == RTF_LEVELNFC)
- {
- pIntValue = new RTFValue(getNumberFormat(nParam));
- putNestedAttribute(m_aStates.top().getTableSprms(), NS_ooxml::LN_CT_Lvl_numFmt,
- NS_ooxml::LN_CT_NumFmt_val, pIntValue);
- return true;
- }
-
- return false;
-}
-
-bool RTFDocumentImpl::dispatchCharacterSprmValue(RTFKeyword nKeyword, int nParam)
-{
- int nSprm = 0;
- tools::SvRef<RTFValue> pIntValue(new RTFValue(nParam));
-
- switch (nKeyword)
- {
- case RTF_FS:
- case RTF_AFS:
- switch (m_aStates.top().getRunType())
- {
- case RTFParserState::RunType::HICH:
- case RTFParserState::RunType::RTLCH_LTRCH_1:
- case RTFParserState::RunType::LTRCH_RTLCH_2:
- nSprm = NS_ooxml::LN_EG_RPrBase_szCs;
- break;
- case RTFParserState::RunType::NONE:
- case RTFParserState::RunType::LOCH:
- case RTFParserState::RunType::LTRCH_RTLCH_1:
- case RTFParserState::RunType::RTLCH_LTRCH_2:
- case RTFParserState::RunType::DBCH:
- default:
- nSprm = NS_ooxml::LN_EG_RPrBase_sz;
- break;
- }
- break;
- case RTF_EXPNDTW:
- nSprm = NS_ooxml::LN_EG_RPrBase_spacing;
- break;
- case RTF_KERNING:
- nSprm = NS_ooxml::LN_EG_RPrBase_kern;
- break;
- case RTF_CHARSCALEX:
- nSprm = NS_ooxml::LN_EG_RPrBase_w;
- break;
- default:
- break;
- }
- if (nSprm > 0)
- {
- m_aStates.top().getCharacterSprms().set(nSprm, pIntValue);
- return true;
- }
-
- return false;
-}
-
-bool RTFDocumentImpl::dispatchCharacterAttributeValue(RTFKeyword nKeyword, int nParam)
-{
- int nSprm = 0;
-
- switch (nKeyword)
- {
- case RTF_LANG:
- case RTF_ALANG:
- switch (m_aStates.top().getRunType())
- {
- case RTFParserState::RunType::HICH:
- case RTFParserState::RunType::RTLCH_LTRCH_1:
- case RTFParserState::RunType::LTRCH_RTLCH_2:
- nSprm = NS_ooxml::LN_CT_Language_bidi;
- break;
- case RTFParserState::RunType::DBCH:
- nSprm = NS_ooxml::LN_CT_Language_eastAsia;
- break;
- case RTFParserState::RunType::NONE:
- case RTFParserState::RunType::LOCH:
- case RTFParserState::RunType::LTRCH_RTLCH_1:
- case RTFParserState::RunType::RTLCH_LTRCH_2:
- default:
- nSprm = NS_ooxml::LN_CT_Language_val;
- break;
- }
- break;
- case RTF_LANGFE: // this one is always CJK apparently
- nSprm = NS_ooxml::LN_CT_Language_eastAsia;
- break;
- default:
- break;
- }
- if (nSprm > 0)
- {
- LanguageTag aTag((LanguageType(static_cast<sal_uInt16>(nParam))));
- auto pValue = new RTFValue(aTag.getBcp47());
- putNestedAttribute(m_aStates.top().getCharacterSprms(), NS_ooxml::LN_EG_RPrBase_lang, nSprm,
- pValue);
- // Language is a character property, but we should store it at a paragraph level as well for fields.
- if (nKeyword == RTF_LANG && m_bNeedPap)
- putNestedAttribute(m_aStates.top().getParagraphSprms(), NS_ooxml::LN_EG_RPrBase_lang,
- nSprm, pValue);
- return true;
- }
-
- return false;
-}
-
-bool RTFDocumentImpl::dispatchParagraphSprmValue(RTFKeyword nKeyword, int nParam)
-{
- int nSprm = 0;
- tools::SvRef<RTFValue> pIntValue(new RTFValue(nParam));
-
- switch (nKeyword)
- {
- case RTF_ITAP:
- nSprm = NS_ooxml::LN_tblDepth;
- // tdf#117268: If \itap0 is encountered inside tables (between \cellxN and \cell), then
- // use the default value (1), as Word apparently does
- if (nParam == 0 && (m_nTopLevelCells != 0 || m_nNestedCells != 0))
- {
- nParam = 1;
- pIntValue = new RTFValue(nParam);
- }
- break;
- default:
- break;
- }
- if (nSprm > 0)
- {
- m_aStates.top().getParagraphSprms().set(nSprm, pIntValue);
- if (nKeyword == RTF_ITAP && nParam > 0)
- {
- while (m_aTableBufferStack.size() < sal::static_int_cast<std::size_t>(nParam))
- {
- m_aTableBufferStack.emplace_back(RTFBuffer_t());
- }
- // Invalid tables may omit INTBL after ITAP
- dispatchFlag(RTF_INTBL); // sets newly pushed buffer as current
- assert(m_aStates.top().getCurrentBuffer() == &m_aTableBufferStack.back());
- }
- return true;
- }
-
- return false;
-}
-
-bool RTFDocumentImpl::dispatchInfoValue(RTFKeyword nKeyword, int nParam)
-{
- int nSprm = 0;
-
- switch (nKeyword)
- {
- case RTF_YR:
- {
- m_aStates.top().setYear(nParam);
- nSprm = 1;
- }
- break;
- case RTF_MO:
- {
- m_aStates.top().setMonth(nParam);
- nSprm = 1;
- }
- break;
- case RTF_DY:
- {
- m_aStates.top().setDay(nParam);
- nSprm = 1;
- }
- break;
- case RTF_HR:
- {
- m_aStates.top().setHour(nParam);
- nSprm = 1;
- }
- break;
- case RTF_MIN:
- {
- m_aStates.top().setMinute(nParam);
- nSprm = 1;
- }
- break;
- default:
- break;
- }
-
- return nSprm > 0;
-}
-
-bool RTFDocumentImpl::dispatchFrameValue(RTFKeyword nKeyword, int nParam)
-{
- Id nId = 0;
- switch (nKeyword)
- {
- case RTF_ABSW:
- nId = NS_ooxml::LN_CT_FramePr_w;
- break;
- case RTF_ABSH:
- nId = NS_ooxml::LN_CT_FramePr_h;
- break;
- case RTF_POSX:
- {
- nId = NS_ooxml::LN_CT_FramePr_x;
- m_aStates.top().getFrame().setSprm(NS_ooxml::LN_CT_FramePr_xAlign, 0);
- }
- break;
- case RTF_POSY:
- {
- nId = NS_ooxml::LN_CT_FramePr_y;
- m_aStates.top().getFrame().setSprm(NS_ooxml::LN_CT_FramePr_yAlign, 0);
- }
- break;
- default:
- break;
- }
-
- if (nId > 0)
- {
- m_bNeedPap = true;
- // Don't try to support text frames inside tables for now.
- if (m_aStates.top().getCurrentBuffer() != &m_aTableBufferStack.back())
- m_aStates.top().getFrame().setSprm(nId, nParam);
-
- return true;
- }
-
- return false;
-}
-
-bool RTFDocumentImpl::dispatchTableValue(RTFKeyword nKeyword, int nParam)
-{
- int nSprm = 0;
- tools::SvRef<RTFValue> pIntValue(new RTFValue(nParam));
-
- switch (nKeyword)
- {
- case RTF_CELLX:
- {
- int& rCurrentCellX(
- (Destination::NESTEDTABLEPROPERTIES == m_aStates.top().getDestination())
- ? m_nNestedCurrentCellX
- : m_nTopLevelCurrentCellX);
- int nCellX = nParam - rCurrentCellX;
- const int COL_DFLT_WIDTH
- = 41; // sw/source/filter/inc/wrtswtbl.hxx, minimal possible width of cells.
- if (!nCellX)
- nCellX = COL_DFLT_WIDTH;
-
- // If there is a negative left margin, then the first cellx is relative to that.
- RTFValue::Pointer_t pTblInd
- = m_aStates.top().getTableRowSprms().find(NS_ooxml::LN_CT_TblPrBase_tblInd);
- if (rCurrentCellX == 0 && pTblInd)
- {
- RTFValue::Pointer_t pWidth
- = pTblInd->getAttributes().find(NS_ooxml::LN_CT_TblWidth_w);
- if (pWidth && pWidth->getInt() < 0)
- nCellX = -1 * (pWidth->getInt() - nParam);
- }
-
- rCurrentCellX = nParam;
- auto pXValue = new RTFValue(nCellX);
- m_aStates.top().getTableRowSprms().set(NS_ooxml::LN_CT_TblGridBase_gridCol, pXValue,
- RTFOverwrite::NO_APPEND);
- if (Destination::NESTEDTABLEPROPERTIES == m_aStates.top().getDestination())
- {
- m_nNestedCells++;
- // Push cell properties.
- m_aNestedTableCellsSprms.push_back(m_aStates.top().getTableCellSprms());
- m_aNestedTableCellsAttributes.push_back(m_aStates.top().getTableCellAttributes());
- }
- else
- {
- m_nTopLevelCells++;
- // Push cell properties.
- m_aTopLevelTableCellsSprms.push_back(m_aStates.top().getTableCellSprms());
- m_aTopLevelTableCellsAttributes.push_back(m_aStates.top().getTableCellAttributes());
- }
-
- m_aStates.top().getTableCellSprms() = m_aDefaultState.getTableCellSprms();
- m_aStates.top().getTableCellAttributes() = m_aDefaultState.getTableCellAttributes();
- // We assume text after a row definition always belongs to the table, to handle text before the real INTBL token
- dispatchFlag(RTF_INTBL);
- if (!m_nCellxMax)
- {
- // Wasn't in table, but now is -> tblStart.
- RTFSprms aAttributes;
- RTFSprms aSprms;
- aSprms.set(NS_ooxml::LN_tblStart, new RTFValue(1));
- writerfilter::Reference<Properties>::Pointer_t pProperties
- = new RTFReferenceProperties(aAttributes, aSprms);
- Mapper().props(pProperties);
- }
- m_nCellxMax = std::max(m_nCellxMax, nParam);
- return true;
- }
- break;
- case RTF_TRRH:
- {
- OUString hRule("auto");
- if (nParam < 0)
- {
- tools::SvRef<RTFValue> pAbsValue(new RTFValue(-nParam));
- std::swap(pIntValue, pAbsValue);
-
- hRule = "exact";
- }
- else if (nParam > 0)
- hRule = "atLeast";
-
- putNestedAttribute(m_aStates.top().getTableRowSprms(),
- NS_ooxml::LN_CT_TrPrBase_trHeight, NS_ooxml::LN_CT_Height_val,
- pIntValue);
-
- auto pHRule = new RTFValue(hRule);
- putNestedAttribute(m_aStates.top().getTableRowSprms(),
- NS_ooxml::LN_CT_TrPrBase_trHeight, NS_ooxml::LN_CT_Height_hRule,
- pHRule);
- return true;
- }
- break;
- case RTF_TRLEFT:
- {
- // the value is in twips
- putNestedAttribute(m_aStates.top().getTableRowSprms(), NS_ooxml::LN_CT_TblPrBase_tblInd,
- NS_ooxml::LN_CT_TblWidth_type,
- new RTFValue(NS_ooxml::LN_Value_ST_TblWidth_dxa));
- putNestedAttribute(m_aStates.top().getTableRowSprms(), NS_ooxml::LN_CT_TblPrBase_tblInd,
- NS_ooxml::LN_CT_TblWidth_w, new RTFValue(nParam));
- auto const aDestination = m_aStates.top().getDestination();
- int& rCurrentTRLeft((Destination::NESTEDTABLEPROPERTIES == aDestination)
- ? m_nNestedTRLeft
- : m_nTopLevelTRLeft);
- int& rCurrentCellX((Destination::NESTEDTABLEPROPERTIES == aDestination)
- ? m_nNestedCurrentCellX
- : m_nTopLevelCurrentCellX);
- rCurrentTRLeft = rCurrentCellX = nParam;
- return true;
- }
- break;
- case RTF_CLSHDNG:
- {
- int nValue = -1;
- switch (nParam)
- {
- case 500:
- nValue = NS_ooxml::LN_Value_ST_Shd_pct5;
- break;
- case 1000:
- nValue = NS_ooxml::LN_Value_ST_Shd_pct10;
- break;
- case 1200:
- nValue = NS_ooxml::LN_Value_ST_Shd_pct12;
- break;
- case 1500:
- nValue = NS_ooxml::LN_Value_ST_Shd_pct15;
- break;
- case 2000:
- nValue = NS_ooxml::LN_Value_ST_Shd_pct20;
- break;
- case 2500:
- nValue = NS_ooxml::LN_Value_ST_Shd_pct25;
- break;
- case 3000:
- nValue = NS_ooxml::LN_Value_ST_Shd_pct30;
- break;
- case 3500:
- nValue = NS_ooxml::LN_Value_ST_Shd_pct35;
- break;
- case 3700:
- nValue = NS_ooxml::LN_Value_ST_Shd_pct37;
- break;
- case 4000:
- nValue = NS_ooxml::LN_Value_ST_Shd_pct40;
- break;
- case 4500:
- nValue = NS_ooxml::LN_Value_ST_Shd_pct45;
- break;
- case 5000:
- nValue = NS_ooxml::LN_Value_ST_Shd_pct50;
- break;
- case 5500:
- nValue = NS_ooxml::LN_Value_ST_Shd_pct55;
- break;
- case 6000:
- nValue = NS_ooxml::LN_Value_ST_Shd_pct60;
- break;
- case 6200:
- nValue = NS_ooxml::LN_Value_ST_Shd_pct62;
- break;
- case 6500:
- nValue = NS_ooxml::LN_Value_ST_Shd_pct65;
- break;
- case 7000:
- nValue = NS_ooxml::LN_Value_ST_Shd_pct70;
- break;
- case 7500:
- nValue = NS_ooxml::LN_Value_ST_Shd_pct75;
- break;
- case 8000:
- nValue = NS_ooxml::LN_Value_ST_Shd_pct80;
- break;
- case 8500:
- nValue = NS_ooxml::LN_Value_ST_Shd_pct85;
- break;
- case 8700:
- nValue = NS_ooxml::LN_Value_ST_Shd_pct87;
- break;
- case 9000:
- nValue = NS_ooxml::LN_Value_ST_Shd_pct90;
- break;
- case 9500:
- nValue = NS_ooxml::LN_Value_ST_Shd_pct95;
- break;
- default:
- break;
- }
- if (nValue != -1)
- putNestedAttribute(m_aStates.top().getTableCellSprms(),
- NS_ooxml::LN_CT_TcPrBase_shd, NS_ooxml::LN_CT_Shd_val,
- new RTFValue(nValue));
- return true;
- }
- break;
- case RTF_CLPADB:
- case RTF_CLPADL:
- case RTF_CLPADR:
- case RTF_CLPADT:
- {
- RTFSprms aAttributes;
- aAttributes.set(NS_ooxml::LN_CT_TblWidth_type,
- new RTFValue(NS_ooxml::LN_Value_ST_TblWidth_dxa));
- aAttributes.set(NS_ooxml::LN_CT_TblWidth_w, new RTFValue(nParam));
- // Top and left is swapped, that's what Word does.
- switch (nKeyword)
- {
- case RTF_CLPADB:
- nSprm = NS_ooxml::LN_CT_TcMar_bottom;
- break;
- case RTF_CLPADL:
- nSprm = NS_ooxml::LN_CT_TcMar_top;
- break;
- case RTF_CLPADR:
- nSprm = NS_ooxml::LN_CT_TcMar_right;
- break;
- case RTF_CLPADT:
- nSprm = NS_ooxml::LN_CT_TcMar_left;
- break;
- default:
- break;
- }
- putNestedSprm(m_aStates.top().getTableCellSprms(), NS_ooxml::LN_CT_TcPrBase_tcMar,
- nSprm, new RTFValue(aAttributes));
- return true;
- }
- break;
- case RTF_TRPADDFB:
- case RTF_TRPADDFL:
- case RTF_TRPADDFR:
- case RTF_TRPADDFT:
- {
- RTFSprms aAttributes;
- switch (nParam)
- {
- case 3:
- aAttributes.set(NS_ooxml::LN_CT_TblWidth_type,
- new RTFValue(NS_ooxml::LN_Value_ST_TblWidth_dxa));
- break;
- }
- switch (nKeyword)
- {
- case RTF_TRPADDFB:
- nSprm = NS_ooxml::LN_CT_TcMar_bottom;
- break;
- case RTF_TRPADDFL:
- nSprm = NS_ooxml::LN_CT_TcMar_left;
- break;
- case RTF_TRPADDFR:
- nSprm = NS_ooxml::LN_CT_TcMar_right;
- break;
- case RTF_TRPADDFT:
- nSprm = NS_ooxml::LN_CT_TcMar_top;
- break;
- default:
- break;
- }
- putNestedAttribute(m_aStates.top().getTableRowSprms(),
- NS_ooxml::LN_CT_TblPrBase_tblCellMar, nSprm,
- new RTFValue(aAttributes));
- // tdf#74795 also set on current cell, and as default for table cells
- // (why isn't this done by domainmapper?)
- putNestedAttribute(m_aStates.top().getTableCellSprms(), NS_ooxml::LN_CT_TcPrBase_tcMar,
- nSprm, new RTFValue(aAttributes));
- putNestedAttribute(m_aDefaultState.getTableCellSprms(), NS_ooxml::LN_CT_TcPrBase_tcMar,
- nSprm, new RTFValue(aAttributes));
- return true;
- }
- break;
- case RTF_TRPADDB:
- case RTF_TRPADDL:
- case RTF_TRPADDR:
- case RTF_TRPADDT:
- {
- RTFSprms aAttributes;
- aAttributes.set(NS_ooxml::LN_CT_TblWidth_w, new RTFValue(nParam));
- switch (nKeyword)
- {
- case RTF_TRPADDB:
- nSprm = NS_ooxml::LN_CT_TcMar_bottom;
- break;
- case RTF_TRPADDL:
- nSprm = NS_ooxml::LN_CT_TcMar_left;
- break;
- case RTF_TRPADDR:
- nSprm = NS_ooxml::LN_CT_TcMar_right;
- break;
- case RTF_TRPADDT:
- nSprm = NS_ooxml::LN_CT_TcMar_top;
- break;
- default:
- break;
- }
- putNestedSprm(m_aStates.top().getTableRowSprms(), NS_ooxml::LN_CT_TblPrBase_tblCellMar,
- nSprm, new RTFValue(aAttributes));
- // tdf#74795 also set on current cell, and as default for table cells
- // (why isn't this done by domainmapper?)
- putNestedSprm(m_aStates.top().getTableCellSprms(), NS_ooxml::LN_CT_TcPrBase_tcMar,
- nSprm, new RTFValue(aAttributes));
- putNestedSprm(m_aDefaultState.getTableCellSprms(), NS_ooxml::LN_CT_TcPrBase_tcMar,
- nSprm, new RTFValue(aAttributes));
- return true;
- }
- break;
- case RTF_TRGAPH:
- // Half of the space between the cells of a table row: default left/right table cell margin.
- if (nParam > 0)
- {
- RTFSprms aAttributes;
- aAttributes.set(NS_ooxml::LN_CT_TblWidth_type,
- new RTFValue(NS_ooxml::LN_Value_ST_TblWidth_dxa));
- aAttributes.set(NS_ooxml::LN_CT_TblWidth_w, pIntValue);
- // FIXME: this is wrong, it is half-gap, needs to be distinguished from margin! depending on TRPADDFL/TRPADDFR
- putNestedSprm(m_aStates.top().getTableRowSprms(),
- NS_ooxml::LN_CT_TblPrBase_tblCellMar, NS_ooxml::LN_CT_TblCellMar_left,
- new RTFValue(aAttributes));
- putNestedSprm(m_aStates.top().getTableRowSprms(),
- NS_ooxml::LN_CT_TblPrBase_tblCellMar,
- NS_ooxml::LN_CT_TblCellMar_right, new RTFValue(aAttributes));
- }
- return true;
- break;
- case RTF_TRFTSWIDTH:
- putNestedAttribute(m_aStates.top().getTableRowSprms(), NS_ooxml::LN_CT_TblPrBase_tblW,
- NS_ooxml::LN_CT_TblWidth_type, pIntValue);
- return true;
- break;
- case RTF_TRWWIDTH:
- putNestedAttribute(m_aStates.top().getTableRowSprms(), NS_ooxml::LN_CT_TblPrBase_tblW,
- NS_ooxml::LN_CT_TblWidth_w, pIntValue);
- return true;
- break;
- default:
- break;
- }
-
- return false;
-}
-
-RTFError RTFDocumentImpl::dispatchValue(RTFKeyword nKeyword, int nParam)
-{
- setNeedSect(true);
- checkUnicode(/*bUnicode =*/nKeyword != RTF_U, /*bHex =*/true);
- RTFSkipDestination aSkip(*this);
- int nSprm = 0;
- tools::SvRef<RTFValue> pIntValue(new RTFValue(nParam));
- // Trivial table sprms.
- if (dispatchTableSprmValue(nKeyword, nParam))
- {
- return RTFError::OK;
- }
-
- // Trivial character sprms.
- if (dispatchCharacterSprmValue(nKeyword, nParam))
- {
- return RTFError::OK;
- }
-
- // Trivial character attributes.
- if (dispatchCharacterAttributeValue(nKeyword, nParam))
- {
- return RTFError::OK;
- }
-
- // Trivial paragraph sprms.
- if (dispatchParagraphSprmValue(nKeyword, nParam))
- {
- return RTFError::OK;
- }
-
- // Info group.
- if (dispatchInfoValue(nKeyword, nParam))
- {
- return RTFError::OK;
- }
-
- // Frame size / position.
- if (dispatchFrameValue(nKeyword, nParam))
- {
- return RTFError::OK;
- }
-
- // Table-related values.
- if (dispatchTableValue(nKeyword, nParam))
- {
- return RTFError::OK;
- }
-
- // Then check for the more complex ones.
- switch (nKeyword)
- {
- case RTF_F:
- case RTF_AF:
- switch (m_aStates.top().getRunType())
- {
- case RTFParserState::RunType::RTLCH_LTRCH_1:
- case RTFParserState::RunType::LTRCH_RTLCH_2:
- nSprm = NS_ooxml::LN_CT_Fonts_cs;
- break;
- case RTFParserState::RunType::DBCH:
- nSprm = NS_ooxml::LN_CT_Fonts_eastAsia;
- break;
- case RTFParserState::RunType::NONE:
- case RTFParserState::RunType::LOCH:
- case RTFParserState::RunType::HICH:
- case RTFParserState::RunType::LTRCH_RTLCH_1:
- case RTFParserState::RunType::RTLCH_LTRCH_2:
- default:
- nSprm = NS_ooxml::LN_CT_Fonts_ascii;
- break;
- }
-
- if (m_aStates.top().getDestination() == Destination::FONTTABLE
- || m_aStates.top().getDestination() == Destination::FONTENTRY)
- {
- m_aFontIndexes.push_back(nParam);
- m_nCurrentFontIndex = getFontIndex(nParam);
- }
- else if (m_aStates.top().getDestination() == Destination::LISTLEVEL)
- {
- RTFSprms aFontAttributes;
- aFontAttributes.set(nSprm, new RTFValue(m_aFontNames[getFontIndex(nParam)]));
- RTFSprms aRunPropsSprms;
- aRunPropsSprms.set(NS_ooxml::LN_EG_RPrBase_rFonts, new RTFValue(aFontAttributes));
- m_aStates.top().getTableSprms().set(NS_ooxml::LN_CT_Lvl_rPr,
- new RTFValue(RTFSprms(), aRunPropsSprms),
- RTFOverwrite::NO_APPEND);
- }
- else
- {
- m_nCurrentFontIndex = getFontIndex(nParam);
- auto pValue = new RTFValue(getFontName(m_nCurrentFontIndex));
- putNestedAttribute(m_aStates.top().getCharacterSprms(),
- NS_ooxml::LN_EG_RPrBase_rFonts, nSprm, pValue);
- if (nKeyword == RTF_F)
- m_aStates.top().setCurrentEncoding(getEncoding(m_nCurrentFontIndex));
- }
- break;
- case RTF_RED:
- m_aStates.top().getCurrentColor().SetRed(nParam);
- break;
- case RTF_GREEN:
- m_aStates.top().getCurrentColor().SetGreen(nParam);
- break;
- case RTF_BLUE:
- m_aStates.top().getCurrentColor().SetBlue(nParam);
- break;
- case RTF_FCHARSET:
- {
- // we always send text to the domain mapper in OUString, so no
- // need to send encoding info
- int i;
- for (i = 0; i < nRTFEncodings; i++)
- {
- if (aRTFEncodings[i].charset == nParam)
- break;
- }
- if (i == nRTFEncodings)
- // not found
- return RTFError::OK;
-
- m_nCurrentEncoding
- = aRTFEncodings[i].codepage == 0 // Default (CP_ACP)
- ? osl_getThreadTextEncoding()
- : rtl_getTextEncodingFromWindowsCodePage(aRTFEncodings[i].codepage);
- m_aStates.top().setCurrentEncoding(m_nCurrentEncoding);
- }
- break;
- case RTF_ANSICPG:
- case RTF_CPG:
- {
- rtl_TextEncoding nEncoding
- = (nParam == 0)
- ? utl_getWinTextEncodingFromLangStr(utl_getLocaleForGlobalDefaultEncoding())
- : rtl_getTextEncodingFromWindowsCodePage(nParam);
- if (nKeyword == RTF_ANSICPG)
- m_aDefaultState.setCurrentEncoding(nEncoding);
- else
- m_nCurrentEncoding = nEncoding;
- m_aStates.top().setCurrentEncoding(nEncoding);
- }
- break;
- case RTF_CF:
- {
- RTFSprms aAttributes;
- auto pValue = new RTFValue(sal_uInt32(getColorTable(nParam)));
- aAttributes.set(NS_ooxml::LN_CT_Color_val, pValue);
- m_aStates.top().getCharacterSprms().set(NS_ooxml::LN_EG_RPrBase_color,
- new RTFValue(aAttributes));
- }
- break;
- case RTF_S:
- {
- m_aStates.top().setCurrentStyleIndex(nParam);
-
- if (m_aStates.top().getDestination() == Destination::STYLESHEET
- || m_aStates.top().getDestination() == Destination::STYLEENTRY)
- {
- m_nCurrentStyleIndex = nParam;
- auto pValue = new RTFValue(NS_ooxml::LN_Value_ST_StyleType_paragraph);
- m_aStates.top().getTableAttributes().set(NS_ooxml::LN_CT_Style_type,
- pValue); // paragraph style
- }
- else
- {
- OUString aName = getStyleName(nParam);
- if (!aName.isEmpty())
- {
- if (m_aStates.top().getDestination() == Destination::LISTLEVEL)
- m_aStates.top().getTableSprms().set(NS_ooxml::LN_CT_Lvl_pStyle,
- new RTFValue(aName));
- else
- m_aStates.top().getParagraphSprms().set(NS_ooxml::LN_CT_PPrBase_pStyle,
- new RTFValue(aName));
- }
- }
- }
- break;
- case RTF_CS:
- m_aStates.top().setCurrentCharacterStyleIndex(nParam);
- if (m_aStates.top().getDestination() == Destination::STYLESHEET
- || m_aStates.top().getDestination() == Destination::STYLEENTRY)
- {
- m_nCurrentStyleIndex = nParam;
- auto pValue = new RTFValue(NS_ooxml::LN_Value_ST_StyleType_character);
- m_aStates.top().getTableAttributes().set(NS_ooxml::LN_CT_Style_type,
- pValue); // character style
- }
- else
- {
- OUString aName = getStyleName(nParam);
- if (!aName.isEmpty())
- m_aStates.top().getCharacterSprms().set(NS_ooxml::LN_EG_RPrBase_rStyle,
- new RTFValue(aName));
- }
- break;
- case RTF_DS:
- if (m_aStates.top().getDestination() == Destination::STYLESHEET
- || m_aStates.top().getDestination() == Destination::STYLEENTRY)
- {
- m_nCurrentStyleIndex = nParam;
- auto pValue = new RTFValue(0); // TODO no value in enum StyleType?
- m_aStates.top().getTableAttributes().set(NS_ooxml::LN_CT_Style_type,
- pValue); // section style
- }
- break;
- case RTF_TS:
- if (m_aStates.top().getDestination() == Destination::STYLESHEET
- || m_aStates.top().getDestination() == Destination::STYLEENTRY)
- {
- m_nCurrentStyleIndex = nParam;
- // FIXME the correct value would be NS_ooxml::LN_Value_ST_StyleType_table but maybe table styles mess things up in dmapper, be cautious and disable them for now
- auto pValue = new RTFValue(0);
- m_aStates.top().getTableAttributes().set(NS_ooxml::LN_CT_Style_type,
- pValue); // table style
- }
- break;
- case RTF_DEFF:
- m_nDefaultFontIndex = nParam;
- break;
- case RTF_STSHFDBCH:
- // tdf#123703 switch off longer space sequence except in the case of the fixed compatibility setting font id 31505
- if (nParam != 31505)
- m_aSettingsTableSprms.set(NS_ooxml::LN_CT_Settings_longerSpaceSequence,
- new RTFValue(0));
- break;
- case RTF_DEFLANG:
- case RTF_ADEFLANG:
- {
- LanguageTag aTag((LanguageType(static_cast<sal_uInt16>(nParam))));
- auto pValue = new RTFValue(aTag.getBcp47());
- putNestedAttribute(m_aStates.top().getCharacterSprms(),
- (nKeyword == RTF_DEFLANG ? NS_ooxml::LN_EG_RPrBase_lang
- : NS_ooxml::LN_CT_Language_bidi),
- nSprm, pValue);
- }
- break;
- case RTF_CHCBPAT:
- {
- auto pValue = new RTFValue(sal_uInt32(nParam ? getColorTable(nParam) : COL_AUTO));
- putNestedAttribute(m_aStates.top().getCharacterSprms(), NS_ooxml::LN_EG_RPrBase_shd,
- NS_ooxml::LN_CT_Shd_fill, pValue);
- }
- break;
- case RTF_CLCBPAT:
- case RTF_CLCBPATRAW:
- {
- auto pValue = new RTFValue(sal_uInt32(getColorTable(nParam)));
- putNestedAttribute(m_aStates.top().getTableCellSprms(), NS_ooxml::LN_CT_TcPrBase_shd,
- NS_ooxml::LN_CT_Shd_fill, pValue);
- }
- break;
- case RTF_CBPAT:
- if (nParam)
- {
- auto pValue = new RTFValue(sal_uInt32(getColorTable(nParam)));
- putNestedAttribute(m_aStates.top().getParagraphSprms(), NS_ooxml::LN_CT_PrBase_shd,
- NS_ooxml::LN_CT_Shd_fill, pValue);
- }
- break;
- case RTF_ULC:
- {
- auto pValue = new RTFValue(sal_uInt32(getColorTable(nParam)));
- m_aStates.top().getCharacterSprms().set(0x6877, pValue);
- }
- break;
- case RTF_HIGHLIGHT:
- {
- auto pValue = new RTFValue(sal_uInt32(nParam ? getColorTable(nParam) : COL_AUTO));
- m_aStates.top().getCharacterSprms().set(NS_ooxml::LN_EG_RPrBase_highlight, pValue);
- }
- break;
- case RTF_UP:
- case RTF_DN:
- {
- auto pValue = new RTFValue(nParam * (nKeyword == RTF_UP ? 1 : -1));
- m_aStates.top().getCharacterSprms().set(NS_ooxml::LN_EG_RPrBase_position, pValue);
- }
- break;
- case RTF_HORZVERT:
- {
- auto pValue = new RTFValue(int(true));
- m_aStates.top().getCharacterAttributes().set(NS_ooxml::LN_CT_EastAsianLayout_vert,
- pValue);
- if (nParam)
- // rotate fits to a single line
- m_aStates.top().getCharacterAttributes().set(
- NS_ooxml::LN_CT_EastAsianLayout_vertCompress, pValue);
- }
- break;
- case RTF_EXPND:
- {
- // Convert quarter-points to twentieths of a point
- auto pValue = new RTFValue(nParam * 5);
- m_aStates.top().getCharacterSprms().set(NS_ooxml::LN_EG_RPrBase_spacing, pValue);
- }
- break;
- case RTF_TWOINONE:
- {
- auto pValue = new RTFValue(int(true));
- m_aStates.top().getCharacterAttributes().set(NS_ooxml::LN_CT_EastAsianLayout_combine,
- pValue);
- Id nId = 0;
- switch (nParam)
- {
- case 0:
- nId = NS_ooxml::LN_Value_ST_CombineBrackets_none;
- break;
- case 1:
- nId = NS_ooxml::LN_Value_ST_CombineBrackets_round;
- break;
- case 2:
- nId = NS_ooxml::LN_Value_ST_CombineBrackets_square;
- break;
- case 3:
- nId = NS_ooxml::LN_Value_ST_CombineBrackets_angle;
- break;
- case 4:
- nId = NS_ooxml::LN_Value_ST_CombineBrackets_curly;
- break;
- }
- if (nId > 0)
- m_aStates.top().getCharacterAttributes().set(
- NS_ooxml::LN_CT_EastAsianLayout_combineBrackets, new RTFValue(nId));
- }
- break;
- case RTF_SL:
- {
- // This is similar to RTF_ABSH, negative value means 'exact', positive means 'at least'.
- tools::SvRef<RTFValue> pValue(
- new RTFValue(NS_ooxml::LN_Value_doc_ST_LineSpacingRule_atLeast));
- if (nParam < 0)
- {
- pValue = new RTFValue(NS_ooxml::LN_Value_doc_ST_LineSpacingRule_exact);
- pIntValue = new RTFValue(-nParam);
- }
- m_aStates.top().getParagraphAttributes().set(NS_ooxml::LN_CT_Spacing_lineRule, pValue);
- m_aStates.top().getParagraphAttributes().set(NS_ooxml::LN_CT_Spacing_line, pIntValue);
- }
- break;
- case RTF_SLMULT:
- if (nParam > 0)
- {
- auto pValue = new RTFValue(NS_ooxml::LN_Value_doc_ST_LineSpacingRule_auto);
- m_aStates.top().getParagraphAttributes().set(NS_ooxml::LN_CT_Spacing_lineRule,
- pValue);
- }
- break;
- case RTF_BRDRW:
- {
- // dmapper expects it in 1/8 pt, we have it in twip - but avoid rounding 1 to 0
- if (nParam > 1)
- nParam = nParam * 2 / 5;
- auto pValue = new RTFValue(nParam);
- putBorderProperty(m_aStates, NS_ooxml::LN_CT_Border_sz, pValue);
- }
- break;
- case RTF_BRDRCF:
- {
- auto pValue = new RTFValue(sal_uInt32(getColorTable(nParam)));
- putBorderProperty(m_aStates, NS_ooxml::LN_CT_Border_color, pValue);
- }
- break;
- case RTF_BRSP:
- {
- // dmapper expects it in points, we have it in twip
- auto pValue = new RTFValue(nParam / 20);
- putBorderProperty(m_aStates, NS_ooxml::LN_CT_Border_space, pValue);
- }
- break;
- case RTF_TX:
- {
- m_aStates.top().getTabAttributes().set(NS_ooxml::LN_CT_TabStop_pos, pIntValue);
- auto pValue = new RTFValue(m_aStates.top().getTabAttributes());
- if (m_aStates.top().getDestination() == Destination::LISTLEVEL)
- putNestedSprm(m_aStates.top().getTableSprms(), NS_ooxml::LN_CT_PPrBase_tabs,
- NS_ooxml::LN_CT_Tabs_tab, pValue);
- else
- putNestedSprm(m_aStates.top().getParagraphSprms(), NS_ooxml::LN_CT_PPrBase_tabs,
- NS_ooxml::LN_CT_Tabs_tab, pValue);
- m_aStates.top().getTabAttributes().clear();
- }
- break;
- case RTF_ILVL:
- putNestedSprm(m_aStates.top().getParagraphSprms(), NS_ooxml::LN_CT_PPrBase_numPr,
- NS_ooxml::LN_CT_NumPr_ilvl, pIntValue);
- break;
- case RTF_LISTTEMPLATEID:
- // This one is not referenced anywhere, so it's pointless to store it at the moment.
- break;
- case RTF_LISTID:
- {
- if (m_aStates.top().getDestination() == Destination::LISTENTRY)
- m_aStates.top().getTableAttributes().set(NS_ooxml::LN_CT_AbstractNum_abstractNumId,
- pIntValue);
- else if (m_aStates.top().getDestination() == Destination::LISTOVERRIDEENTRY)
- m_aStates.top().getTableSprms().set(NS_ooxml::LN_CT_Num_abstractNumId, pIntValue);
- m_aStates.top().setCurrentListIndex(nParam);
- }
- break;
- case RTF_LS:
- {
- if (m_aStates.top().getDestination() == Destination::LISTOVERRIDEENTRY)
- {
- m_aStates.top().getTableAttributes().set(NS_ooxml::LN_CT_AbstractNum_nsid,
- pIntValue);
- m_aStates.top().setCurrentListOverrideIndex(nParam);
- }
- else
- {
- // Insert at the start, so properties inherited from the list
- // can be overridden by direct formatting. But still allow the
- // case when old-style paragraph numbering is already
- // tokenized.
- putNestedSprm(m_aStates.top().getParagraphSprms(), NS_ooxml::LN_CT_PPrBase_numPr,
- NS_ooxml::LN_CT_NumPr_numId, pIntValue, RTFOverwrite::YES_PREPEND);
- }
- }
- break;
- case RTF_UC:
- if ((SAL_MIN_INT16 <= nParam) && (nParam <= SAL_MAX_INT16))
- m_aStates.top().setUc(nParam);
- break;
- case RTF_U:
- // sal_Unicode is unsigned 16-bit, RTF may represent that as a
- // signed SAL_MIN_INT16..SAL_MAX_INT16 or 0..SAL_MAX_UINT16. The
- // static_cast() will do the right thing.
- if ((SAL_MIN_INT16 <= nParam) && (nParam <= SAL_MAX_UINT16))
- {
- if (m_aStates.top().getDestination() == Destination::LEVELNUMBERS)
- {
- if (nParam != ';')
- m_aStates.top().getLevelNumbers().push_back(sal_Int32(nParam));
- else
- // ';' in \u form is not considered valid.
- m_aStates.top().setLevelNumbersValid(false);
- }
- else
- m_aUnicodeBuffer.append(static_cast<sal_Unicode>(nParam));
- m_aStates.top().getCharsToSkip() = m_aStates.top().getUc();
- }
- break;
- case RTF_LEVELFOLLOW:
- {
- OUString sValue;
- switch (nParam)
- {
- case 0:
- sValue = "tab";
- break;
- case 1:
- sValue = "space";
- break;
- case 2:
- sValue = "nothing";
- break;
- }
- if (!sValue.isEmpty())
- m_aStates.top().getTableSprms().set(NS_ooxml::LN_CT_Lvl_suff, new RTFValue(sValue));
- }
- break;
- case RTF_FPRQ:
- {
- sal_Int32 nValue = 0;
- switch (nParam)
- {
- case 0:
- nValue = NS_ooxml::LN_Value_ST_Pitch_default;
- break;
- case 1:
- nValue = NS_ooxml::LN_Value_ST_Pitch_fixed;
- break;
- case 2:
- nValue = NS_ooxml::LN_Value_ST_Pitch_variable;
- break;
- }
- if (nValue)
- {
- RTFSprms aAttributes;
- aAttributes.set(NS_ooxml::LN_CT_Pitch_val, new RTFValue(nValue));
- m_aStates.top().getTableSprms().set(NS_ooxml::LN_CT_Font_pitch,
- new RTFValue(aAttributes));
- }
- }
- break;
- case RTF_LISTOVERRIDECOUNT:
- // Ignore this for now, the exporter always emits it with a zero parameter.
- break;
- case RTF_PICSCALEX:
- m_aStates.top().getPicture().nScaleX = nParam;
- break;
- case RTF_PICSCALEY:
- m_aStates.top().getPicture().nScaleY = nParam;
- break;
- case RTF_PICW:
- m_aStates.top().getPicture().nWidth = nParam;
- break;
- case RTF_PICH:
- m_aStates.top().getPicture().nHeight = nParam;
- break;
- case RTF_PICWGOAL:
- m_aStates.top().getPicture().nGoalWidth = convertTwipToMm100(nParam);
- break;
- case RTF_PICHGOAL:
- m_aStates.top().getPicture().nGoalHeight = convertTwipToMm100(nParam);
- break;
- case RTF_PICCROPL:
- m_aStates.top().getPicture().nCropL = convertTwipToMm100(nParam);
- break;
- case RTF_PICCROPR:
- m_aStates.top().getPicture().nCropR = convertTwipToMm100(nParam);
- break;
- case RTF_PICCROPT:
- m_aStates.top().getPicture().nCropT = convertTwipToMm100(nParam);
- break;
- case RTF_PICCROPB:
- m_aStates.top().getPicture().nCropB = convertTwipToMm100(nParam);
- break;
- case RTF_SHPWRK:
- {
- int nValue = 0;
- switch (nParam)
- {
- case 0:
- nValue = NS_ooxml::LN_Value_wordprocessingDrawing_ST_WrapText_bothSides;
- break;
- case 1:
- nValue = NS_ooxml::LN_Value_wordprocessingDrawing_ST_WrapText_left;
- break;
- case 2:
- nValue = NS_ooxml::LN_Value_wordprocessingDrawing_ST_WrapText_right;
- break;
- case 3:
- nValue = NS_ooxml::LN_Value_wordprocessingDrawing_ST_WrapText_largest;
- break;
- default:
- break;
- }
- auto pValue = new RTFValue(nValue);
- RTFValue::Pointer_t pTight
- = m_aStates.top().getCharacterSprms().find(NS_ooxml::LN_EG_WrapType_wrapTight);
- if (pTight)
- pTight->getAttributes().set(NS_ooxml::LN_CT_WrapTight_wrapText, pValue);
- else
- m_aStates.top().getCharacterAttributes().set(NS_ooxml::LN_CT_WrapSquare_wrapText,
- pValue);
- }
- break;
- case RTF_SHPWR:
- {
- switch (nParam)
- {
- case 1:
- m_aStates.top().getShape().setWrap(text::WrapTextMode_NONE);
- break;
- case 2:
- m_aStates.top().getShape().setWrap(text::WrapTextMode_PARALLEL);
- break;
- case 3:
- m_aStates.top().getShape().setWrap(text::WrapTextMode_THROUGH);
- m_aStates.top().getCharacterSprms().set(NS_ooxml::LN_EG_WrapType_wrapNone,
- new RTFValue());
- break;
- case 4:
- m_aStates.top().getShape().setWrap(text::WrapTextMode_PARALLEL);
- m_aStates.top().getCharacterSprms().set(NS_ooxml::LN_EG_WrapType_wrapTight,
- new RTFValue());
- break;
- case 5:
- m_aStates.top().getShape().setWrap(text::WrapTextMode_THROUGH);
- break;
- }
- }
- break;
- case RTF_COLS:
- putNestedAttribute(m_aStates.top().getSectionSprms(),
- NS_ooxml::LN_EG_SectPrContents_cols, NS_ooxml::LN_CT_Columns_num,
- pIntValue);
- break;
- case RTF_COLSX:
- putNestedAttribute(m_aStates.top().getSectionSprms(),
- NS_ooxml::LN_EG_SectPrContents_cols, NS_ooxml::LN_CT_Columns_space,
- pIntValue);
- break;
- case RTF_COLNO:
- putNestedSprm(m_aStates.top().getSectionSprms(), NS_ooxml::LN_EG_SectPrContents_cols,
- NS_ooxml::LN_CT_Columns_col, pIntValue);
- break;
- case RTF_COLW:
- case RTF_COLSR:
- {
- RTFSprms& rAttributes = getLastAttributes(m_aStates.top().getSectionSprms(),
- NS_ooxml::LN_EG_SectPrContents_cols);
- rAttributes.set(
- (nKeyword == RTF_COLW ? NS_ooxml::LN_CT_Column_w : NS_ooxml::LN_CT_Column_space),
- pIntValue);
- }
- break;
- case RTF_PAPERH:
- putNestedAttribute(m_aDefaultState.getSectionSprms(),
- NS_ooxml::LN_EG_SectPrContents_pgSz, NS_ooxml::LN_CT_PageSz_h,
- pIntValue);
- [[fallthrough]]; // set the default + current value
- case RTF_PGHSXN:
- putNestedAttribute(m_aStates.top().getSectionSprms(),
- NS_ooxml::LN_EG_SectPrContents_pgSz, NS_ooxml::LN_CT_PageSz_h,
- pIntValue);
- break;
- case RTF_PAPERW:
- putNestedAttribute(m_aDefaultState.getSectionSprms(),
- NS_ooxml::LN_EG_SectPrContents_pgSz, NS_ooxml::LN_CT_PageSz_w,
- pIntValue);
- [[fallthrough]]; // set the default + current value
- case RTF_PGWSXN:
- putNestedAttribute(m_aStates.top().getSectionSprms(),
- NS_ooxml::LN_EG_SectPrContents_pgSz, NS_ooxml::LN_CT_PageSz_w,
- pIntValue);
- break;
- case RTF_MARGL:
- putNestedAttribute(m_aDefaultState.getSectionSprms(),
- NS_ooxml::LN_EG_SectPrContents_pgMar, NS_ooxml::LN_CT_PageMar_left,
- pIntValue);
- [[fallthrough]]; // set the default + current value
- case RTF_MARGLSXN:
- putNestedAttribute(m_aStates.top().getSectionSprms(),
- NS_ooxml::LN_EG_SectPrContents_pgMar, NS_ooxml::LN_CT_PageMar_left,
- pIntValue);
- break;
- case RTF_MARGR:
- putNestedAttribute(m_aDefaultState.getSectionSprms(),
- NS_ooxml::LN_EG_SectPrContents_pgMar, NS_ooxml::LN_CT_PageMar_right,
- pIntValue);
- [[fallthrough]]; // set the default + current value
- case RTF_MARGRSXN:
- putNestedAttribute(m_aStates.top().getSectionSprms(),
- NS_ooxml::LN_EG_SectPrContents_pgMar, NS_ooxml::LN_CT_PageMar_right,
- pIntValue);
- break;
- case RTF_MARGT:
- putNestedAttribute(m_aDefaultState.getSectionSprms(),
- NS_ooxml::LN_EG_SectPrContents_pgMar, NS_ooxml::LN_CT_PageMar_top,
- pIntValue);
- [[fallthrough]]; // set the default + current value
- case RTF_MARGTSXN:
- putNestedAttribute(m_aStates.top().getSectionSprms(),
- NS_ooxml::LN_EG_SectPrContents_pgMar, NS_ooxml::LN_CT_PageMar_top,
- pIntValue);
- break;
- case RTF_MARGB:
- putNestedAttribute(m_aDefaultState.getSectionSprms(),
- NS_ooxml::LN_EG_SectPrContents_pgMar, NS_ooxml::LN_CT_PageMar_bottom,
- pIntValue);
- [[fallthrough]]; // set the default + current value
- case RTF_MARGBSXN:
- putNestedAttribute(m_aStates.top().getSectionSprms(),
- NS_ooxml::LN_EG_SectPrContents_pgMar, NS_ooxml::LN_CT_PageMar_bottom,
- pIntValue);
- break;
- case RTF_HEADERY:
- putNestedAttribute(m_aStates.top().getSectionSprms(),
- NS_ooxml::LN_EG_SectPrContents_pgMar, NS_ooxml::LN_CT_PageMar_header,
- pIntValue);
- break;
- case RTF_FOOTERY:
- putNestedAttribute(m_aStates.top().getSectionSprms(),
- NS_ooxml::LN_EG_SectPrContents_pgMar, NS_ooxml::LN_CT_PageMar_footer,
- pIntValue);
- break;
- case RTF_DEFTAB:
- m_aSettingsTableSprms.set(NS_ooxml::LN_CT_Settings_defaultTabStop, pIntValue);
- break;
- case RTF_LINEMOD:
- putNestedAttribute(m_aStates.top().getSectionSprms(),
- NS_ooxml::LN_EG_SectPrContents_lnNumType,
- NS_ooxml::LN_CT_LineNumber_countBy, pIntValue);
- break;
- case RTF_LINEX:
- if (nParam)
- putNestedAttribute(m_aStates.top().getSectionSprms(),
- NS_ooxml::LN_EG_SectPrContents_lnNumType,
- NS_ooxml::LN_CT_LineNumber_distance, pIntValue);
- break;
- case RTF_LINESTARTS:
- {
- // OOXML <w:lnNumType w:start="..."/> is 0-based, RTF is 1-based.
- auto pStart = tools::make_ref<RTFValue>(nParam - 1);
- putNestedAttribute(m_aStates.top().getSectionSprms(),
- NS_ooxml::LN_EG_SectPrContents_lnNumType,
- NS_ooxml::LN_CT_LineNumber_start, pStart);
- }
- break;
- case RTF_REVAUTH:
- case RTF_REVAUTHDEL:
- {
- auto pValue = new RTFValue(m_aAuthors[nParam]);
- putNestedAttribute(m_aStates.top().getCharacterSprms(), NS_ooxml::LN_trackchange,
- NS_ooxml::LN_CT_TrackChange_author, pValue);
- }
- break;
- case RTF_REVDTTM:
- case RTF_REVDTTMDEL:
- {
- OUString aStr(
- OStringToOUString(DTTM22OString(nParam), m_aStates.top().getCurrentEncoding()));
- auto pValue = new RTFValue(aStr);
- putNestedAttribute(m_aStates.top().getCharacterSprms(), NS_ooxml::LN_trackchange,
- NS_ooxml::LN_CT_TrackChange_date, pValue);
- }
- break;
- case RTF_SHPLEFT:
- m_aStates.top().getShape().setLeft(convertTwipToMm100(nParam));
- break;
- case RTF_SHPTOP:
- m_aStates.top().getShape().setTop(convertTwipToMm100(nParam));
- break;
- case RTF_SHPRIGHT:
- m_aStates.top().getShape().setRight(convertTwipToMm100(nParam));
- break;
- case RTF_SHPBOTTOM:
- m_aStates.top().getShape().setBottom(convertTwipToMm100(nParam));
- break;
- case RTF_SHPZ:
- m_aStates.top().getShape().setZ(nParam);
- break;
- case RTF_FFTYPE:
- switch (nParam)
- {
- case 0:
- m_nFormFieldType = RTFFormFieldType::TEXT;
- break;
- case 1:
- m_nFormFieldType = RTFFormFieldType::CHECKBOX;
- break;
- case 2:
- m_nFormFieldType = RTFFormFieldType::LIST;
- break;
- default:
- m_nFormFieldType = RTFFormFieldType::NONE;
- break;
- }
- break;
- case RTF_FFDEFRES:
- if (m_nFormFieldType == RTFFormFieldType::CHECKBOX)
- m_aFormfieldSprms.set(NS_ooxml::LN_CT_FFCheckBox_default, pIntValue);
- else if (m_nFormFieldType == RTFFormFieldType::LIST)
- m_aFormfieldSprms.set(NS_ooxml::LN_CT_FFDDList_default, pIntValue);
- break;
- case RTF_FFRES:
- // 25 means undefined, see [MS-DOC] 2.9.79, FFDataBits.
- if (m_nFormFieldType == RTFFormFieldType::CHECKBOX && nParam != 25)
- m_aFormfieldSprms.set(NS_ooxml::LN_CT_FFCheckBox_checked, pIntValue);
- else if (m_nFormFieldType == RTFFormFieldType::LIST)
- m_aFormfieldSprms.set(NS_ooxml::LN_CT_FFDDList_result, pIntValue);
- break;
- case RTF_EDMINS:
- if (m_xDocumentProperties.is())
- {
- // tdf#116851 some RTF may be malformed
- if (nParam < 0)
- nParam = -nParam;
- m_xDocumentProperties->setEditingDuration(nParam);
- }
- break;
- case RTF_NOFPAGES:
- case RTF_NOFWORDS:
- case RTF_NOFCHARS:
- case RTF_NOFCHARSWS:
- if (m_xDocumentProperties.is())
- {
- comphelper::SequenceAsHashMap aSeq = m_xDocumentProperties->getDocumentStatistics();
- OUString aName;
- switch (nKeyword)
- {
- case RTF_NOFPAGES:
- aName = "PageCount";
- nParam = 99;
- break;
- case RTF_NOFWORDS:
- aName = "WordCount";
- break;
- case RTF_NOFCHARS:
- aName = "CharacterCount";
- break;
- case RTF_NOFCHARSWS:
- aName = "NonWhitespaceCharacterCount";
- break;
- default:
- break;
- }
- if (!aName.isEmpty())
- {
- aSeq[aName] <<= sal_Int32(nParam);
- m_xDocumentProperties->setDocumentStatistics(aSeq.getAsConstNamedValueList());
- }
- }
- break;
- case RTF_VERSION:
- if (m_xDocumentProperties.is())
- m_xDocumentProperties->setEditingCycles(nParam);
- break;
- case RTF_VERN:
- // Ignore this for now, later the RTF writer version could be used to add hacks for older buggy writers.
- break;
- case RTF_FTNSTART:
- putNestedSprm(m_aDefaultState.getParagraphSprms(),
- NS_ooxml::LN_EG_SectPrContents_footnotePr,
- NS_ooxml::LN_EG_FtnEdnNumProps_numStart, pIntValue);
- break;
- case RTF_AFTNSTART:
- putNestedSprm(m_aDefaultState.getParagraphSprms(),
- NS_ooxml::LN_EG_SectPrContents_endnotePr,
- NS_ooxml::LN_EG_FtnEdnNumProps_numStart, pIntValue);
- break;
- case RTF_DFRMTXTX:
- m_aStates.top().getFrame().setSprm(NS_ooxml::LN_CT_FramePr_hSpace, nParam);
- break;
- case RTF_DFRMTXTY:
- m_aStates.top().getFrame().setSprm(NS_ooxml::LN_CT_FramePr_vSpace, nParam);
- break;
- case RTF_DXFRTEXT:
- {
- m_aStates.top().getFrame().setSprm(NS_ooxml::LN_CT_FramePr_hSpace, nParam);
- m_aStates.top().getFrame().setSprm(NS_ooxml::LN_CT_FramePr_vSpace, nParam);
- }
- break;
- case RTF_FLYVERT:
- {
- RTFVertOrient aVertOrient(nParam);
- m_aStates.top().getFrame().setSprm(NS_ooxml::LN_CT_FramePr_yAlign,
- aVertOrient.GetAlign());
- m_aStates.top().getFrame().setSprm(NS_ooxml::LN_CT_FramePr_vAnchor,
- aVertOrient.GetAnchor());
- }
- break;
- case RTF_FLYHORZ:
- {
- RTFHoriOrient aHoriOrient(nParam);
- m_aStates.top().getFrame().setSprm(NS_ooxml::LN_CT_FramePr_xAlign,
- aHoriOrient.GetAlign());
- m_aStates.top().getFrame().setSprm(NS_ooxml::LN_CT_FramePr_hAnchor,
- aHoriOrient.GetAnchor());
- }
- break;
- case RTF_FLYANCHOR:
- break;
- case RTF_WMETAFILE:
- m_aStates.top().getPicture().eWMetafile = nParam;
- break;
- case RTF_SB:
- putNestedAttribute(m_aStates.top().getParagraphSprms(), NS_ooxml::LN_CT_PPrBase_spacing,
- NS_ooxml::LN_CT_Spacing_before, pIntValue);
- break;
- case RTF_SA:
- putNestedAttribute(m_aStates.top().getParagraphSprms(), NS_ooxml::LN_CT_PPrBase_spacing,
- NS_ooxml::LN_CT_Spacing_after, pIntValue);
- break;
- case RTF_DPX:
- m_aStates.top().getDrawingObject().setLeft(convertTwipToMm100(nParam));
- break;
- case RTF_DPY:
- m_aStates.top().getDrawingObject().setTop(convertTwipToMm100(nParam));
- break;
- case RTF_DPXSIZE:
- m_aStates.top().getDrawingObject().setRight(convertTwipToMm100(nParam));
- break;
- case RTF_DPYSIZE:
- m_aStates.top().getDrawingObject().setBottom(convertTwipToMm100(nParam));
- break;
- case RTF_PNSTART:
- m_aStates.top().getTableSprms().set(NS_ooxml::LN_CT_Lvl_start, pIntValue);
- break;
- case RTF_PNF:
- {
- auto pValue = new RTFValue(m_aFontNames[getFontIndex(nParam)]);
- RTFSprms aAttributes;
- aAttributes.set(NS_ooxml::LN_CT_Fonts_ascii, pValue);
- putNestedSprm(m_aStates.top().getTableSprms(), NS_ooxml::LN_CT_Lvl_rPr,
- NS_ooxml::LN_EG_RPrBase_rFonts, new RTFValue(aAttributes));
- }
- break;
- case RTF_VIEWSCALE:
- m_aSettingsTableAttributes.set(NS_ooxml::LN_CT_Zoom_percent, pIntValue);
- break;
- case RTF_BIN:
- {
- m_aStates.top().setInternalState(RTFInternalState::BIN);
- m_aStates.top().setBinaryToRead(nParam);
- }
- break;
- case RTF_DPLINECOR:
- m_aStates.top().getDrawingObject().setLineColorR(nParam);
- m_aStates.top().getDrawingObject().setHasLineColor(true);
- break;
- case RTF_DPLINECOG:
- m_aStates.top().getDrawingObject().setLineColorG(nParam);
- m_aStates.top().getDrawingObject().setHasLineColor(true);
- break;
- case RTF_DPLINECOB:
- m_aStates.top().getDrawingObject().setLineColorB(nParam);
- m_aStates.top().getDrawingObject().setHasLineColor(true);
- break;
- case RTF_DPFILLBGCR:
- m_aStates.top().getDrawingObject().setFillColorR(nParam);
- m_aStates.top().getDrawingObject().setHasFillColor(true);
- break;
- case RTF_DPFILLBGCG:
- m_aStates.top().getDrawingObject().setFillColorG(nParam);
- m_aStates.top().getDrawingObject().setHasFillColor(true);
- break;
- case RTF_DPFILLBGCB:
- m_aStates.top().getDrawingObject().setFillColorB(nParam);
- m_aStates.top().getDrawingObject().setHasFillColor(true);
- break;
- case RTF_DODHGT:
- m_aStates.top().getDrawingObject().setDhgt(nParam);
- break;
- case RTF_DPPOLYCOUNT:
- if (nParam >= 0)
- {
- m_aStates.top().getDrawingObject().setPolyLineCount(nParam);
- }
- break;
- case RTF_DPPTX:
- {
- RTFDrawingObject& rDrawingObject = m_aStates.top().getDrawingObject();
-
- if (rDrawingObject.getPolyLinePoints().empty())
- dispatchValue(RTF_DPPOLYCOUNT, 2);
-
- rDrawingObject.getPolyLinePoints().emplace_back(
- awt::Point(convertTwipToMm100(nParam), 0));
- }
- break;
- case RTF_DPPTY:
- {
- RTFDrawingObject& rDrawingObject = m_aStates.top().getDrawingObject();
- if (!rDrawingObject.getPolyLinePoints().empty())
- {
- rDrawingObject.getPolyLinePoints().back().Y = convertTwipToMm100(nParam);
- rDrawingObject.setPolyLineCount(rDrawingObject.getPolyLineCount() - 1);
- if (rDrawingObject.getPolyLineCount() == 0 && rDrawingObject.getPropertySet().is())
- {
- uno::Sequence<uno::Sequence<awt::Point>> aPointSequenceSequence
- = { comphelper::containerToSequence(rDrawingObject.getPolyLinePoints()) };
- rDrawingObject.getPropertySet()->setPropertyValue(
- "PolyPolygon", uno::Any(aPointSequenceSequence));
- }
- }
- }
- break;
- case RTF_SHPFBLWTXT:
- // Shape is below text -> send it to the background.
- m_aStates.top().getShape().setInBackground(nParam != 0);
- break;
- case RTF_FI:
- {
- if (m_aStates.top().getDestination() == Destination::LISTLEVEL)
- {
- if (m_aStates.top().getLevelNumbersValid())
- putNestedAttribute(m_aStates.top().getTableSprms(), NS_ooxml::LN_CT_PPrBase_ind,
- NS_ooxml::LN_CT_Ind_firstLine, pIntValue);
- else
- m_aInvalidListLevelFirstIndents[m_nListLevel] = nParam;
- }
- else
- putNestedAttribute(m_aStates.top().getParagraphSprms(), NS_ooxml::LN_CT_PPrBase_ind,
- NS_ooxml::LN_CT_Ind_firstLine, pIntValue);
- break;
- }
- case RTF_LI:
- {
- if (m_aStates.top().getDestination() == Destination::LISTLEVEL)
- {
- if (m_aStates.top().getLevelNumbersValid())
- putNestedAttribute(m_aStates.top().getTableSprms(), NS_ooxml::LN_CT_PPrBase_ind,
- NS_ooxml::LN_CT_Ind_left, pIntValue);
- }
- else
- {
- putNestedAttribute(m_aStates.top().getParagraphSprms(), NS_ooxml::LN_CT_PPrBase_ind,
- NS_ooxml::LN_CT_Ind_left, pIntValue);
- }
- // It turns out \li should reset the \fi inherited from the stylesheet.
- // So set the direct formatting to zero, if we don't have such direct formatting yet.
- putNestedAttribute(m_aStates.top().getParagraphSprms(), NS_ooxml::LN_CT_PPrBase_ind,
- NS_ooxml::LN_CT_Ind_firstLine, new RTFValue(0),
- RTFOverwrite::NO_IGNORE);
- }
- break;
- case RTF_RI:
- putNestedAttribute(m_aStates.top().getParagraphSprms(), NS_ooxml::LN_CT_PPrBase_ind,
- NS_ooxml::LN_CT_Ind_right, pIntValue);
- break;
- case RTF_LIN:
- putNestedAttribute(m_aStates.top().getParagraphSprms(), NS_ooxml::LN_CT_PPrBase_ind,
- NS_ooxml::LN_CT_Ind_start, pIntValue);
- break;
- case RTF_RIN:
- putNestedAttribute(m_aStates.top().getParagraphSprms(), NS_ooxml::LN_CT_PPrBase_ind,
- NS_ooxml::LN_CT_Ind_end, pIntValue);
- break;
- case RTF_OUTLINELEVEL:
- m_aStates.top().getParagraphSprms().set(NS_ooxml::LN_CT_PPrBase_outlineLvl, pIntValue);
- break;
- case RTF_PROPTYPE:
- {
- switch (nParam)
- {
- case 3:
- m_aStates.top().setPropType(cppu::UnoType<sal_Int32>::get());
- break;
- case 5:
- m_aStates.top().setPropType(cppu::UnoType<double>::get());
- break;
- case 11:
- m_aStates.top().setPropType(cppu::UnoType<bool>::get());
- break;
- case 30:
- m_aStates.top().setPropType(cppu::UnoType<OUString>::get());
- break;
- case 64:
- m_aStates.top().setPropType(cppu::UnoType<util::DateTime>::get());
- break;
- }
- }
- break;
- case RTF_DIBITMAP:
- m_aStates.top().getPicture().eStyle = RTFBmpStyle::DIBITMAP;
- break;
- case RTF_TRWWIDTHA:
- m_aStates.top().setTableRowWidthAfter(nParam);
- break;
- case RTF_ANIMTEXT:
- {
- Id nId = 0;
- switch (nParam)
- {
- case 0:
- nId = NS_ooxml::LN_Value_ST_TextEffect_none;
- break;
- case 2:
- nId = NS_ooxml::LN_Value_ST_TextEffect_blinkBackground;
- break;
- }
-
- if (nId > 0)
- m_aStates.top().getCharacterSprms().set(NS_ooxml::LN_EG_RPrBase_effect,
- new RTFValue(nId));
- break;
- }
- case RTF_VIEWBKSP:
- {
- m_aSettingsTableSprms.set(NS_ooxml::LN_CT_Settings_displayBackgroundShape, pIntValue);
- // Send this token immediately, if it only appears before the first
- // run, it will be too late, we ignored the background shape already by then.
- outputSettingsTable();
- break;
- }
- case RTF_STEXTFLOW:
- {
- Id nId = 0;
- switch (nParam)
- {
- case 0:
- nId = NS_ooxml::LN_Value_ST_TextDirection_lrTb;
- break;
- case 1:
- nId = NS_ooxml::LN_Value_ST_TextDirection_tbRl;
- break;
- }
-
- if (nId > 0)
- {
- m_aStates.top().getSectionSprms().set(NS_ooxml::LN_EG_SectPrContents_textDirection,
- new RTFValue(nId));
- }
- }
- break;
- default:
- {
- SAL_INFO("writerfilter", "TODO handle value '" << keywordToString(nKeyword) << "'");
- aSkip.setParsed(false);
- }
- break;
- }
- return RTFError::OK;
-}
-
-} // namespace rtftok
-} // namespace writerfilter
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/rtftok/rtfdocumentfactory.cxx b/writerfilter/source/rtftok/rtfdocumentfactory.cxx
deleted file mode 100644
index 75b109b6842d..000000000000
--- a/writerfilter/source/rtftok/rtfdocumentfactory.cxx
+++ /dev/null
@@ -1,28 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-
-#include "rtfdocumentimpl.hxx"
-
-namespace writerfilter::rtftok
-{
-RTFDocument::Pointer_t RTFDocumentFactory::createDocument(
- css::uno::Reference<css::uno::XComponentContext> const& xContext,
- css::uno::Reference<css::io::XInputStream> const& xInputStream,
- css::uno::Reference<css::lang::XComponent> const& xDstDoc,
- css::uno::Reference<css::frame::XFrame> const& xFrame,
- css::uno::Reference<css::task::XStatusIndicator> const& xStatusIndicator,
- const utl::MediaDescriptor& rMediaDescriptor)
-{
- return new RTFDocumentImpl(xContext, xInputStream, xDstDoc, xFrame, xStatusIndicator,
- rMediaDescriptor);
-}
-
-} // namespace writerfilter::rtftok
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.cxx b/writerfilter/source/rtftok/rtfdocumentimpl.cxx
deleted file mode 100644
index dc014457c8d5..000000000000
--- a/writerfilter/source/rtftok/rtfdocumentimpl.cxx
+++ /dev/null
@@ -1,3852 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-
-#include "rtfdocumentimpl.hxx"
-#include <algorithm>
-#include <memory>
-#include <com/sun/star/embed/XEmbeddedObject.hpp>
-#include <com/sun/star/beans/PropertyAttribute.hpp>
-#include <com/sun/star/io/WrongFormatException.hpp>
-#include <com/sun/star/lang/XServiceInfo.hpp>
-#include <com/sun/star/lang/XMultiServiceFactory.hpp>
-#include <com/sun/star/text/TextContentAnchorType.hpp>
-#include <i18nlangtag/languagetag.hxx>
-#include <unotools/ucbstreamhelper.hxx>
-#include <unotools/streamwrap.hxx>
-#include <com/sun/star/drawing/XDrawPageSupplier.hpp>
-#include <filter/msfilter/util.hxx>
-#include <filter/msfilter/rtfutil.hxx>
-#include <comphelper/string.hxx>
-#include <tools/diagnose_ex.h>
-#include <tools/globname.hxx>
-#include <tools/datetimeutils.hxx>
-#include <comphelper/classids.hxx>
-#include <comphelper/embeddedobjectcontainer.hxx>
-#include <svl/lngmisc.hxx>
-#include <sfx2/sfxbasemodel.hxx>
-#include <sfx2/classificationhelper.hxx>
-#include <oox/mathml/import.hxx>
-#include <ooxml/resourceids.hxx>
-#include <oox/token/namespaces.hxx>
-#include <oox/drawingml/drawingmltypes.hxx>
-#include <rtl/uri.hxx>
-#include <rtl/tencinfo.h>
-#include <sal/log.hxx>
-#include <osl/diagnose.h>
-#include <oox/helper/graphichelper.hxx>
-#include <vcl/wmfexternal.hxx>
-#include <vcl/graph.hxx>
-#include <vcl/settings.hxx>
-#include <vcl/svapp.hxx>
-#include "rtfsdrimport.hxx"
-#include "rtfreferenceproperties.hxx"
-#include "rtfskipdestination.hxx"
-#include "rtftokenizer.hxx"
-#include "rtflookahead.hxx"
-
-using namespace com::sun::star;
-
-namespace
-{
-/// Returns an util::DateTime from a 'YYYY. MM. DD.' string.
-util::DateTime getDateTimeFromUserProp(const OUString& rString)
-{
- util::DateTime aRet;
- sal_Int32 nLen = rString.getLength();
- if (nLen >= 4)
- {
- aRet.Year = rString.copy(0, 4).toInt32();
-
- if (nLen >= 8 && rString.match(". ", 4))
- {
- aRet.Month = rString.copy(6, 2).toInt32();
-
- if (nLen >= 12 && rString.match(". ", 8))
- aRet.Day = rString.copy(10, 2).toInt32();
- }
- }
- return aRet;
-}
-} // anonymous namespace
-
-namespace writerfilter::rtftok
-{
-Id getParagraphBorder(sal_uInt32 nIndex)
-{
- static const Id aBorderIds[] = { NS_ooxml::LN_CT_PBdr_top, NS_ooxml::LN_CT_PBdr_left,
- NS_ooxml::LN_CT_PBdr_bottom, NS_ooxml::LN_CT_PBdr_right };
-
- return aBorderIds[nIndex];
-}
-
-void putNestedAttribute(RTFSprms& rSprms, Id nParent, Id nId, const RTFValue::Pointer_t& pValue,
- RTFOverwrite eOverwrite, bool bAttribute)
-{
- RTFValue::Pointer_t pParent = rSprms.find(nParent, /*bFirst=*/true, /*bForWrite=*/true);
- if (!pParent)
- {
- RTFSprms aAttributes;
- if (nParent == NS_ooxml::LN_CT_TcPrBase_shd)
- {
- // RTF default is 'auto', see writerfilter::dmapper::CellColorHandler
- aAttributes.set(NS_ooxml::LN_CT_Shd_color, new RTFValue(sal_uInt32(COL_AUTO)));
- aAttributes.set(NS_ooxml::LN_CT_Shd_fill, new RTFValue(sal_uInt32(COL_AUTO)));
- }
- auto pParentValue = new RTFValue(aAttributes);
- rSprms.set(nParent, pParentValue, eOverwrite);
- pParent = pParentValue;
- }
- RTFSprms& rAttributes = (bAttribute ? pParent->getAttributes() : pParent->getSprms());
- rAttributes.set(nId, pValue, eOverwrite);
-}
-
-void putNestedSprm(RTFSprms& rSprms, Id nParent, Id nId, const RTFValue::Pointer_t& pValue,
- RTFOverwrite eOverwrite)
-{
- putNestedAttribute(rSprms, nParent, nId, pValue, eOverwrite, false);
-}
-
-RTFValue::Pointer_t getNestedAttribute(RTFSprms& rSprms, Id nParent, Id nId)
-{
- RTFValue::Pointer_t pParent = rSprms.find(nParent);
- if (!pParent)
- return RTFValue::Pointer_t();
- RTFSprms& rAttributes = pParent->getAttributes();
- return rAttributes.find(nId);
-}
-
-RTFValue::Pointer_t getNestedSprm(RTFSprms& rSprms, Id nParent, Id nId)
-{
- RTFValue::Pointer_t pParent = rSprms.find(nParent);
- if (!pParent)
- return RTFValue::Pointer_t();
- RTFSprms& rInner = pParent->getSprms();
- return rInner.find(nId);
-}
-
-bool eraseNestedAttribute(RTFSprms& rSprms, Id nParent, Id nId)
-{
- RTFValue::Pointer_t pParent = rSprms.find(nParent);
- if (!pParent)
- // It doesn't even have a parent, we're done.
- return false;
- RTFSprms& rAttributes = pParent->getAttributes();
- return rAttributes.erase(nId);
-}
-
-RTFSprms& getLastAttributes(RTFSprms& rSprms, Id nId)
-{
- RTFValue::Pointer_t p = rSprms.find(nId);
- if (p && !p->getSprms().empty())
- return p->getSprms().back().second->getAttributes();
-
- SAL_WARN("writerfilter.rtf", "trying to set property when no type is defined");
- return rSprms;
-}
-
-void putBorderProperty(RTFStack& aStates, Id nId, const RTFValue::Pointer_t& pValue)
-{
- RTFSprms* pAttributes = nullptr;
- if (aStates.top().getBorderState() == RTFBorderState::PARAGRAPH_BOX)
- for (int i = 0; i < 4; i++)
- {
- RTFValue::Pointer_t p = aStates.top().getParagraphSprms().find(getParagraphBorder(i));
- if (p)
- {
- RTFSprms& rAttributes = p->getAttributes();
- rAttributes.set(nId, pValue);
- }
- }
- else if (aStates.top().getBorderState() == RTFBorderState::CHARACTER)
- {
- RTFValue::Pointer_t pPointer
- = aStates.top().getCharacterSprms().find(NS_ooxml::LN_EG_RPrBase_bdr);
- if (pPointer)
- {
- RTFSprms& rAttributes = pPointer->getAttributes();
- rAttributes.set(nId, pValue);
- }
- }
- // Attributes of the last border type
- else if (aStates.top().getBorderState() == RTFBorderState::PARAGRAPH)
- pAttributes
- = &getLastAttributes(aStates.top().getParagraphSprms(), NS_ooxml::LN_CT_PrBase_pBdr);
- else if (aStates.top().getBorderState() == RTFBorderState::CELL)
- pAttributes = &getLastAttributes(aStates.top().getTableCellSprms(),
- NS_ooxml::LN_CT_TcPrBase_tcBorders);
- else if (aStates.top().getBorderState() == RTFBorderState::PAGE)
- pAttributes = &getLastAttributes(aStates.top().getSectionSprms(),
- NS_ooxml::LN_EG_SectPrContents_pgBorders);
- if (pAttributes)
- pAttributes->set(nId, pValue);
-}
-
-OString DTTM22OString(tools::Long nDTTM)
-{
- return DateTimeToOString(msfilter::util::DTTM2DateTime(nDTTM));
-}
-
-static RTFSprms lcl_getBookmarkProperties(int nPos, const OUString& rString)
-{
- RTFSprms aAttributes;
- auto pPos = new RTFValue(nPos);
- if (!rString.isEmpty())
- {
- // If present, this should be sent first.
- auto pString = new RTFValue(rString);
- aAttributes.set(NS_ooxml::LN_CT_Bookmark_name, pString);
- }
- aAttributes.set(NS_ooxml::LN_CT_MarkupRangeBookmark_id, pPos);
- return aAttributes;
-}
-
-const char* keywordToString(RTFKeyword nKeyword)
-{
- for (int i = 0; i < nRTFControlWords; i++)
- {
- if (nKeyword == aRTFControlWords[i].GetIndex())
- return aRTFControlWords[i].GetKeyword();
- }
- return nullptr;
-}
-
-static util::DateTime lcl_getDateTime(RTFParserState const& aState)
-{
- return { 0 /*100sec*/,
- 0 /*sec*/,
- aState.getMinute(),
- aState.getHour(),
- aState.getDay(),
- aState.getMonth(),
- static_cast<sal_Int16>(aState.getYear()),
- false };
-}
-
-static void lcl_DestinationToMath(OUStringBuffer* pDestinationText,
- oox::formulaimport::XmlStreamBuilder& rMathBuffer, bool& rMathNor)
-{
- if (!pDestinationText)
- return;
- OUString aStr = pDestinationText->makeStringAndClear();
- if (aStr.isEmpty())
- return;
- rMathBuffer.appendOpeningTag(M_TOKEN(r));
- if (rMathNor)
- {
- rMathBuffer.appendOpeningTag(M_TOKEN(rPr));
- // Same as M_TOKEN(lit)
- rMathBuffer.appendOpeningTag(M_TOKEN(nor));
- rMathBuffer.appendClosingTag(M_TOKEN(nor));
- rMathBuffer.appendClosingTag(M_TOKEN(rPr));
- rMathNor = false;
- }
- rMathBuffer.appendOpeningTag(M_TOKEN(t));
- rMathBuffer.appendCharacters(aStr);
- rMathBuffer.appendClosingTag(M_TOKEN(t));
- rMathBuffer.appendClosingTag(M_TOKEN(r));
-}
-
-RTFDocumentImpl::RTFDocumentImpl(uno::Reference<uno::XComponentContext> const& xContext,
- uno::Reference<io::XInputStream> const& xInputStream,
- uno::Reference<lang::XComponent> const& xDstDoc,
- uno::Reference<frame::XFrame> const& xFrame,
- uno::Reference<task::XStatusIndicator> const& xStatusIndicator,
- const utl::MediaDescriptor& rMediaDescriptor)
- : m_xContext(xContext)
- , m_xInputStream(xInputStream)
- , m_xDstDoc(xDstDoc)
- , m_xFrame(xFrame)
- , m_xStatusIndicator(xStatusIndicator)
- , m_pMapperStream(nullptr)
- , m_aDefaultState(this)
- , m_bSkipUnknown(false)
- , m_bFirstRun(true)
- , m_bFirstRunException(false)
- , m_bNeedPap(true)
- , m_bNeedCr(false)
- , m_bNeedCrOrig(false)
- , m_bNeedPar(true)
- , m_bNeedFinalPar(false)
- , m_nNestedCells(0)
- , m_nTopLevelCells(0)
- , m_nInheritingCells(0)
- , m_nNestedTRLeft(0)
- , m_nTopLevelTRLeft(0)
- , m_nNestedCurrentCellX(0)
- , m_nTopLevelCurrentCellX(0)
- , m_nBackupTopLevelCurrentCellX(0)
- , m_aTableBufferStack(1) // create top-level buffer already
- , m_pSuperstream(nullptr)
- , m_nStreamType(0)
- , m_nGroupStartPos(0)
- , m_nFormFieldType(RTFFormFieldType::NONE)
- , m_bObject(false)
- , m_nCurrentFontIndex(0)
- , m_nCurrentEncoding(-1)
- , m_nDefaultFontIndex(-1)
- , m_nCurrentStyleIndex(0)
- , m_bFormField(false)
- , m_bMathNor(false)
- , m_bIgnoreNextContSectBreak(false)
- , m_nResetBreakOnSectBreak(RTF_invalid)
- , m_bNeedSect(false) // done by checkFirstRun
- , m_bWasInFrame(false)
- , m_bHadPicture(false)
- , m_bHadSect(false)
- , m_nCellxMax(0)
- , m_nListPictureId(0)
- , m_bIsNewDoc(!rMediaDescriptor.getUnpackedValueOrDefault("InsertMode", false))
- , m_rMediaDescriptor(rMediaDescriptor)
- , m_hasRHeader(false)
- , m_hasFHeader(false)
- , m_hasRFooter(false)
- , m_hasFFooter(false)
- , m_bAfterCellBeforeRow(false)
-{
- OSL_ASSERT(xInputStream.is());
- m_pInStream = utl::UcbStreamHelper::CreateStream(xInputStream, true);
-
- m_xModelFactory.set(m_xDstDoc, uno::UNO_QUERY);
-
- uno::Reference<document::XDocumentPropertiesSupplier> xDocumentPropertiesSupplier(
- m_xDstDoc, uno::UNO_QUERY);
- if (xDocumentPropertiesSupplier.is())
- m_xDocumentProperties = xDocumentPropertiesSupplier->getDocumentProperties();
-
- m_pGraphicHelper = std::make_shared<oox::GraphicHelper>(m_xContext, xFrame, oox::StorageRef());
-
- m_pTokenizer = new RTFTokenizer(*this, m_pInStream.get(), m_xStatusIndicator);
- m_pSdrImport = new RTFSdrImport(*this, m_xDstDoc);
-}
-
-RTFDocumentImpl::~RTFDocumentImpl() = default;
-
-SvStream& RTFDocumentImpl::Strm() { return *m_pInStream; }
-
-void RTFDocumentImpl::setSuperstream(RTFDocumentImpl* pSuperstream)
-{
- m_pSuperstream = pSuperstream;
-}
-
-bool RTFDocumentImpl::isSubstream() const { return m_pSuperstream != nullptr; }
-
-void RTFDocumentImpl::finishSubstream() { checkUnicode(/*bUnicode =*/true, /*bHex =*/true); }
-
-void RTFDocumentImpl::resolveSubstream(std::size_t nPos, Id nId)
-{
- resolveSubstream(nPos, nId, OUString());
-}
-void RTFDocumentImpl::resolveSubstream(std::size_t nPos, Id nId, OUString const& rIgnoreFirst)
-{
- sal_uInt64 const nCurrent = Strm().Tell();
- // Seek to header position, parse, then seek back.
- auto pImpl = new RTFDocumentImpl(m_xContext, m_xInputStream, m_xDstDoc, m_xFrame,
- m_xStatusIndicator, m_rMediaDescriptor);
- pImpl->setSuperstream(this);
- pImpl->m_nStreamType = nId;
- pImpl->m_aIgnoreFirst = rIgnoreFirst;
- if (!m_aAuthor.isEmpty())
- {
- pImpl->m_aAuthor = m_aAuthor;
- m_aAuthor.clear();
- }
- if (!m_aAuthorInitials.isEmpty())
- {
- pImpl->m_aAuthorInitials = m_aAuthorInitials;
- m_aAuthorInitials.clear();
- }
- pImpl->m_nDefaultFontIndex = m_nDefaultFontIndex;
- pImpl->Strm().Seek(nPos);
- SAL_INFO("writerfilter.rtf", "substream start");
- Mapper().substream(nId, pImpl);
- SAL_INFO("writerfilter.rtf", "substream end");
- Strm().Seek(nCurrent);
-}
-
-void RTFDocumentImpl::outputSettingsTable()
-{
- writerfilter::Reference<Properties>::Pointer_t pProp
- = new RTFReferenceProperties(m_aSettingsTableAttributes, m_aSettingsTableSprms);
- RTFReferenceTable::Entries_t aSettingsTableEntries;
- aSettingsTableEntries.insert(std::make_pair(0, pProp));
- writerfilter::Reference<Table>::Pointer_t pTable = new RTFReferenceTable(aSettingsTableEntries);
- Mapper().table(NS_ooxml::LN_settings_settings, pTable);
-}
-
-void RTFDocumentImpl::checkFirstRun()
-{
- if (!m_bFirstRun)
- return;
-
- outputSettingsTable();
- // start initial paragraph
- m_bFirstRun = false;
- assert(!m_bNeedSect || m_bFirstRunException);
- setNeedSect(true); // first call that succeeds
-
- // set the requested default font, if there are none
- RTFValue::Pointer_t pFont
- = getNestedAttribute(m_aDefaultState.getCharacterSprms(), NS_ooxml::LN_EG_RPrBase_rFonts,
- NS_ooxml::LN_CT_Fonts_ascii);
- RTFValue::Pointer_t pCurrentFont
- = getNestedAttribute(m_aStates.top().getCharacterSprms(), NS_ooxml::LN_EG_RPrBase_rFonts,
- NS_ooxml::LN_CT_Fonts_ascii);
- if (pFont && !pCurrentFont)
- putNestedAttribute(m_aStates.top().getCharacterSprms(), NS_ooxml::LN_EG_RPrBase_rFonts,
- NS_ooxml::LN_CT_Fonts_ascii, pFont);
-}
-
-void RTFDocumentImpl::setNeedPar(bool bNeedPar) { m_bNeedPar = bNeedPar; }
-
-void RTFDocumentImpl::setNeedSect(bool bNeedSect)
-{
- if (!m_bNeedSect && bNeedSect && m_bFirstRun)
- {
- RTFLookahead aLookahead(Strm(), m_pTokenizer->getGroupStart());
- if (aLookahead.hasTable() && aLookahead.hasColumns())
- {
- m_bFirstRunException = true;
- }
- }
-
- // ignore setting before checkFirstRun - every keyword calls setNeedSect!
- // except the case of a table in a multicolumn section
- if (!m_bNeedSect && bNeedSect && (!m_bFirstRun || m_bFirstRunException))
- {
- if (!m_pSuperstream) // no sections in header/footer!
- {
- Mapper().startSectionGroup();
- }
- // set flag in substream too - otherwise multiple startParagraphGroup
- m_bNeedSect = bNeedSect;
- Mapper().startParagraphGroup();
- setNeedPar(true);
- }
- else if (m_bNeedSect && !bNeedSect)
- {
- m_bNeedSect = bNeedSect;
- }
-}
-
-/// Copy rProps to rStyleAttributes and rStyleSprms, but in case of nested sprms, copy their children as toplevel sprms/attributes.
-static void lcl_copyFlatten(RTFReferenceProperties& rProps, RTFSprms& rStyleAttributes,
- RTFSprms& rStyleSprms)
-{
- for (auto& rSprm : rProps.getSprms())
- {
- // createStyleProperties() puts properties to rPr, but here we need a flat list.
- if (rSprm.first == NS_ooxml::LN_CT_Style_rPr)
- {
- // rPr can have both attributes and SPRMs, copy over both types.
- RTFSprms& rRPrSprms = rSprm.second->getSprms();
- for (const auto& rRPrSprm : rRPrSprms)
- rStyleSprms.set(rRPrSprm.first, rRPrSprm.second);
-
- RTFSprms& rRPrAttributes = rSprm.second->getAttributes();
- for (const auto& rRPrAttribute : rRPrAttributes)
- rStyleAttributes.set(rRPrAttribute.first, rRPrAttribute.second);
- }
- else
- rStyleSprms.set(rSprm.first, rSprm.second);
- }
-
- RTFSprms& rAttributes = rProps.getAttributes();
- for (const auto& rAttribute : rAttributes)
- rStyleAttributes.set(rAttribute.first, rAttribute.second);
-}
-
-writerfilter::Reference<Properties>::Pointer_t
-RTFDocumentImpl::getProperties(const RTFSprms& rAttributes, RTFSprms const& rSprms, Id nStyleType)
-{
- RTFSprms aSprms(rSprms);
- RTFValue::Pointer_t pAbstractList;
- int nAbstractListId = -1;
- RTFValue::Pointer_t pNumId
- = getNestedSprm(aSprms, NS_ooxml::LN_CT_PPrBase_numPr, NS_ooxml::LN_CT_NumPr_numId);
- if (pNumId)
- {
- // We have a numbering, look up the abstract list for property
- // deduplication and duplication.
- auto itNumId = m_aListOverrideTable.find(pNumId->getInt());
- if (itNumId != m_aListOverrideTable.end())
- {
- nAbstractListId = itNumId->second;
- auto itAbstract = m_aListTable.find(nAbstractListId);
- if (itAbstract != m_aListTable.end())
- pAbstractList = itAbstract->second;
- }
- }
-
- if (pAbstractList)
- {
- auto it = m_aInvalidListTableFirstIndents.find(nAbstractListId);
- if (it != m_aInvalidListTableFirstIndents.end())
- aSprms.deduplicateList(it->second);
- }
-
- int nStyle = 0;
- if (!m_aStates.empty())
- nStyle = m_aStates.top().getCurrentStyleIndex();
- auto it = m_aStyleTableEntries.find(nStyle);
- if (it != m_aStyleTableEntries.end())
- {
- // cloneAndDeduplicate() wants to know about only a single "style", so
- // let's merge paragraph and character style properties here.
- auto itChar = m_aStyleTableEntries.end();
- if (!m_aStates.empty())
- {
- int nCharStyle = m_aStates.top().getCurrentCharacterStyleIndex();
- itChar = m_aStyleTableEntries.find(nCharStyle);
- }
-
- RTFSprms aStyleSprms;
- RTFSprms aStyleAttributes;
- // Ensure the paragraph style is a flat list.
- // Take paragraph style into account for character properties as well,
- // as paragraph style may contain character properties.
- RTFReferenceProperties& rProps = *static_cast<RTFReferenceProperties*>(it->second.get());
- lcl_copyFlatten(rProps, aStyleAttributes, aStyleSprms);
-
- if (itChar != m_aStyleTableEntries.end())
- {
- // Found active character style, then update aStyleSprms/Attributes.
- if (!nStyleType || nStyleType == NS_ooxml::LN_Value_ST_StyleType_character)
- {
- RTFReferenceProperties& rCharProps
- = *static_cast<RTFReferenceProperties*>(itChar->second.get());
- lcl_copyFlatten(rCharProps, aStyleAttributes, aStyleSprms);
- }
- }
-
- // Get rid of direct formatting what is already in the style.
- RTFSprms const sprms(aSprms.cloneAndDeduplicate(aStyleSprms, nStyleType, true, &aSprms));
- RTFSprms const attributes(
- rAttributes.cloneAndDeduplicate(aStyleAttributes, nStyleType, true));
- return new RTFReferenceProperties(attributes, sprms);
- }
-
- if (pAbstractList)
- aSprms.duplicateList(pAbstractList);
- writerfilter::Reference<Properties>::Pointer_t pRet
- = new RTFReferenceProperties(rAttributes, aSprms);
- return pRet;
-}
-
-void RTFDocumentImpl::checkNeedPap()
-{
- if (!m_bNeedPap)
- return;
-
- m_bNeedPap = false; // reset early, so we can avoid recursion when calling ourselves
-
- if (m_aStates.empty())
- return;
-
- if (!m_aStates.top().getCurrentBuffer())
- {
- writerfilter::Reference<Properties>::Pointer_t const pParagraphProperties(getProperties(
- m_aStates.top().getParagraphAttributes(), m_aStates.top().getParagraphSprms(),
- NS_ooxml::LN_Value_ST_StyleType_paragraph));
-
- // Writer will ignore a page break before a text frame, so guard it with empty paragraphs
- bool hasBreakBeforeFrame
- = m_aStates.top().getFrame().hasProperties()
- && m_aStates.top().getParagraphSprms().find(NS_ooxml::LN_CT_PPrBase_pageBreakBefore);
- if (hasBreakBeforeFrame)
- {
- dispatchSymbol(RTF_PAR);
- m_bNeedPap = false;
- }
- Mapper().props(pParagraphProperties);
- if (hasBreakBeforeFrame)
- dispatchSymbol(RTF_PAR);
-
- if (m_aStates.top().getFrame().hasProperties())
- {
- writerfilter::Reference<Properties>::Pointer_t const pFrameProperties(
- new RTFReferenceProperties(RTFSprms(), m_aStates.top().getFrame().getSprms()));
- Mapper().props(pFrameProperties);
- }
- }
- else
- {
- auto pValue = new RTFValue(m_aStates.top().getParagraphAttributes(),
- m_aStates.top().getParagraphSprms());
- bufferProperties(*m_aStates.top().getCurrentBuffer(), pValue, nullptr);
- }
-}
-
-void RTFDocumentImpl::runProps()
-{
- if (!m_aStates.top().getCurrentBuffer())
- {
- Reference<Properties>::Pointer_t const pProperties = getProperties(
- m_aStates.top().getCharacterAttributes(), m_aStates.top().getCharacterSprms(),
- NS_ooxml::LN_Value_ST_StyleType_character);
- Mapper().props(pProperties);
- }
- else
- {
- auto pValue = new RTFValue(m_aStates.top().getCharacterAttributes(),
- m_aStates.top().getCharacterSprms());
- bufferProperties(*m_aStates.top().getCurrentBuffer(), pValue, nullptr);
- }
-
- // Delete the sprm, so the trackchange range will be started only once.
- // OTOH set a boolean flag, so we'll know we need to end the range later.
- RTFValue::Pointer_t pTrackchange
- = m_aStates.top().getCharacterSprms().find(NS_ooxml::LN_trackchange);
- if (pTrackchange)
- {
- m_aStates.top().setStartedTrackchange(true);
- m_aStates.top().getCharacterSprms().erase(NS_ooxml::LN_trackchange);
- }
-}
-
-void RTFDocumentImpl::runBreak()
-{
- sal_uInt8 const sBreak[] = { 0xd };
- Mapper().text(sBreak, 1);
- m_bNeedCr = false;
-}
-
-void RTFDocumentImpl::tableBreak()
-{
- runBreak();
- Mapper().endParagraphGroup();
- Mapper().startParagraphGroup();
-}
-
-void RTFDocumentImpl::parBreak()
-{
- checkFirstRun();
- checkNeedPap();
- // end previous paragraph
- Mapper().startCharacterGroup();
- runBreak();
- Mapper().endCharacterGroup();
- Mapper().endParagraphGroup();
-
- m_bHadPicture = false;
-
- // start new one
- Mapper().startParagraphGroup();
-}
-
-void RTFDocumentImpl::sectBreak(bool bFinal)
-{
- SAL_INFO("writerfilter.rtf", __func__ << ": final? " << bFinal << ", needed? " << m_bNeedSect);
- bool bNeedSect = m_bNeedSect;
- RTFValue::Pointer_t pBreak
- = m_aStates.top().getSectionSprms().find(NS_ooxml::LN_EG_SectPrContents_type);
- bool bContinuous
- = pBreak
- && pBreak->getInt()
- == static_cast<sal_Int32>(NS_ooxml::LN_Value_ST_SectionMark_continuous);
- // If there is no paragraph in this section, then insert a dummy one, as required by Writer,
- // unless this is the end of the doc, we had nothing since the last section break and this is not a continuous one.
- // Also, when pasting, it's fine to not have any paragraph inside the document at all.
- if (m_bNeedPar && (!bFinal || m_bNeedSect || bContinuous) && !isSubstream() && m_bIsNewDoc)
- dispatchSymbol(RTF_PAR);
- // It's allowed to not have a non-table paragraph at the end of an RTF doc, add it now if required.
- if (m_bNeedFinalPar && bFinal)
- {
- dispatchFlag(RTF_PARD);
- dispatchSymbol(RTF_PAR);
- m_bNeedSect = bNeedSect;
- }
- while (!m_nHeaderFooterPositions.empty())
- {
- std::pair<Id, std::size_t> aPair = m_nHeaderFooterPositions.front();
- m_nHeaderFooterPositions.pop();
- resolveSubstream(aPair.second, aPair.first);
- }
-
- // Normally a section break at the end of the doc is necessary. Unless the
- // last control word in the document is a section break itself.
- if (!bNeedSect || !m_bHadSect)
- {
- // In case the last section is a continuous one, we don't need to output a section break.
- if (bFinal && bContinuous)
- m_aStates.top().getSectionSprms().erase(NS_ooxml::LN_EG_SectPrContents_type);
- }
-
- // Section properties are a paragraph sprm.
- auto pValue
- = new RTFValue(m_aStates.top().getSectionAttributes(), m_aStates.top().getSectionSprms());
- RTFSprms aAttributes;
- RTFSprms aSprms;
- aSprms.set(NS_ooxml::LN_CT_PPr_sectPr, pValue);
- writerfilter::Reference<Properties>::Pointer_t pProperties
- = new RTFReferenceProperties(aAttributes, aSprms);
-
- if (bFinal && !m_pSuperstream)
- // This is the end of the document, not just the end of e.g. a header.
- // This makes sure that dmapper can set DontBalanceTextColumns=true for this section if necessary.
- Mapper().markLastSectionGroup();
-
- // The trick is that we send properties of the previous section right now, which will be exactly what dmapper expects.
- Mapper().props(pProperties);
- Mapper().endParagraphGroup();
-
- // End Section
- if (!m_pSuperstream)
- {
- m_hasFHeader = false;
- m_hasRHeader = false;
- m_hasRFooter = false;
- m_hasFFooter = false;
- Mapper().endSectionGroup();
- }
- m_bNeedPar = false;
- m_bNeedSect = false;
-}
-
-Color RTFDocumentImpl::getColorTable(sal_uInt32 nIndex)
-{
- if (!m_pSuperstream)
- {
- if (nIndex < m_aColorTable.size())
- return m_aColorTable[nIndex];
- return 0;
- }
-
- return m_pSuperstream->getColorTable(nIndex);
-}
-
-rtl_TextEncoding RTFDocumentImpl::getEncoding(int nFontIndex)
-{
- if (!m_pSuperstream)
- {
- auto it = m_aFontEncodings.find(nFontIndex);
- if (it != m_aFontEncodings.end())
- // We have a font encoding associated to this font.
- return it->second;
- if (m_aDefaultState.getCurrentEncoding() != rtl_getTextEncodingFromWindowsCharset(0))
- // We have a default encoding.
- return m_aDefaultState.getCurrentEncoding();
- // Guess based on locale.
- return msfilter::util::getBestTextEncodingFromLocale(
- Application::GetSettings().GetLanguageTag().getLocale());
- }
-
- return m_pSuperstream->getEncoding(nFontIndex);
-}
-
-OUString RTFDocumentImpl::getFontName(int nIndex)
-{
- if (!m_pSuperstream)
- return m_aFontNames[nIndex];
-
- return m_pSuperstream->getFontName(nIndex);
-}
-
-int RTFDocumentImpl::getFontIndex(int nIndex)
-{
- if (!m_pSuperstream)
- return std::find(m_aFontIndexes.begin(), m_aFontIndexes.end(), nIndex)
- - m_aFontIndexes.begin();
-
- return m_pSuperstream->getFontIndex(nIndex);
-}
-
-OUString RTFDocumentImpl::getStyleName(int nIndex)
-{
- if (!m_pSuperstream)
- {
- OUString aRet;
- if (m_aStyleNames.find(nIndex) != m_aStyleNames.end())
- aRet = m_aStyleNames[nIndex];
- return aRet;
- }
-
- return m_pSuperstream->getStyleName(nIndex);
-}
-
-Id RTFDocumentImpl::getStyleType(int nIndex)
-{
- if (!m_pSuperstream)
- {
- Id nRet = 0;
- if (m_aStyleTypes.find(nIndex) != m_aStyleTypes.end())
- nRet = m_aStyleTypes[nIndex];
- return nRet;
- }
-
- return m_pSuperstream->getStyleType(nIndex);
-}
-
-RTFParserState& RTFDocumentImpl::getDefaultState()
-{
- if (!m_pSuperstream)
- return m_aDefaultState;
-
- return m_pSuperstream->getDefaultState();
-}
-
-oox::GraphicHelper& RTFDocumentImpl::getGraphicHelper() { return *m_pGraphicHelper; }
-
-bool RTFDocumentImpl::isStyleSheetImport()
-{
- if (m_aStates.empty())
- return false;
- Destination eDestination = m_aStates.top().getDestination();
- return eDestination == Destination::STYLESHEET || eDestination == Destination::STYLEENTRY;
-}
-
-void RTFDocumentImpl::resolve(Stream& rMapper)
-{
- m_pMapperStream = &rMapper;
- switch (m_pTokenizer->resolveParse())
- {
- case RTFError::OK:
- SAL_INFO("writerfilter.rtf", "RTFDocumentImpl::resolve: finished without errors");
- break;
- case RTFError::GROUP_UNDER:
- SAL_INFO("writerfilter.rtf", "RTFDocumentImpl::resolve: unmatched '}'");
- break;
- case RTFError::GROUP_OVER:
- SAL_INFO("writerfilter.rtf", "RTFDocumentImpl::resolve: unmatched '{'");
- throw io::WrongFormatException(m_pTokenizer->getPosition());
- break;
- case RTFError::UNEXPECTED_EOF:
- SAL_INFO("writerfilter.rtf", "RTFDocumentImpl::resolve: unexpected end of file");
- throw io::WrongFormatException(m_pTokenizer->getPosition());
- break;
- case RTFError::HEX_INVALID:
- SAL_INFO("writerfilter.rtf", "RTFDocumentImpl::resolve: invalid hex char");
- throw io::WrongFormatException(m_pTokenizer->getPosition());
- break;
- case RTFError::CHAR_OVER:
- SAL_INFO("writerfilter.rtf", "RTFDocumentImpl::resolve: characters after last '}'");
- break;
- case RTFError::CLASSIFICATION:
- SAL_INFO("writerfilter.rtf",
- "RTFDocumentImpl::resolve: classification prevented paste");
- break;
- }
-}
-
-void RTFDocumentImpl::resolvePict(bool const bInline, uno::Reference<drawing::XShape> const& rShape)
-{
- SvMemoryStream aStream;
- SvStream* pStream = nullptr;
- if (!m_pBinaryData)
- {
- pStream = &aStream;
- int b = 0;
- int count = 2;
-
- // Feed the destination text to a stream.
- OString aStr = OUStringToOString(m_aStates.top().getDestinationText().makeStringAndClear(),
- RTL_TEXTENCODING_ASCII_US);
- for (int i = 0; i < aStr.getLength(); ++i)
- {
- char ch = aStr[i];
- if (ch != 0x0d && ch != 0x0a && ch != 0x20)
- {
- b = b << 4;
- sal_Int8 parsed = msfilter::rtfutil::AsHex(ch);
- if (parsed == -1)
- return;
- b += parsed;
- count--;
- if (!count)
- {
- aStream.WriteChar(static_cast<char>(b));
- count = 2;
- b = 0;
- }
- }
- }
- }
- else
- pStream = m_pBinaryData.get();
-
- if (!pStream->Tell())
- // No destination text? Then we'll get it later.
- return;
-
- SvMemoryStream aDIBStream;
- if (m_aStates.top().getPicture().eStyle == RTFBmpStyle::DIBITMAP)
- {
- // Construct a BITMAPFILEHEADER structure before the real data.
- SvStream& rBodyStream = *pStream;
- aDIBStream.WriteChar('B');
- aDIBStream.WriteChar('M');
- // The size of the real data.
- aDIBStream.WriteUInt32(rBodyStream.Tell());
- // Reserved.
- aDIBStream.WriteUInt32(0);
- // The offset of the real data, i.e. the size of the header, including this number.
- aDIBStream.WriteUInt32(14);
- rBodyStream.Seek(0);
- aDIBStream.WriteStream(rBodyStream);
- pStream = &aDIBStream;
- }
-
- // Store, and get its URL.
- pStream->Seek(0);
- uno::Reference<io::XInputStream> xInputStream(new utl::OInputStreamWrapper(pStream));
- WmfExternal aExtHeader;
- aExtHeader.mapMode = m_aStates.top().getPicture().eWMetafile;
- aExtHeader.xExt = sal_uInt16(
- std::clamp<sal_Int32>(m_aStates.top().getPicture().nWidth, 0,
- SAL_MAX_UINT16)); //TODO: better way to handle out-of-bounds values?
- aExtHeader.yExt = sal_uInt16(
- std::clamp<sal_Int32>(m_aStates.top().getPicture().nHeight, 0,
- SAL_MAX_UINT16)); //TODO: better way to handle out-of-bounds values?
- WmfExternal* pExtHeader = &aExtHeader;
- uno::Reference<lang::XServiceInfo> xServiceInfo(m_aStates.top().getDrawingObject().getShape(),
- uno::UNO_QUERY);
- if (xServiceInfo.is() && xServiceInfo->supportsService("com.sun.star.text.TextFrame"))
- pExtHeader = nullptr;
-
- uno::Reference<graphic::XGraphic> xGraphic
- = m_pGraphicHelper->importGraphic(xInputStream, pExtHeader);
-
- if (m_aStates.top().getPicture().eStyle != RTFBmpStyle::NONE)
- {
- // In case of PNG/JPEG, the real size is known, don't use the values
- // provided by picw and pich.
-
- Graphic aGraphic(xGraphic);
- Size aSize(aGraphic.GetPrefSize());
- MapMode aMap(MapUnit::Map100thMM);
- if (aGraphic.GetPrefMapMode().GetMapUnit() == MapUnit::MapPixel)
- aSize = Application::GetDefaultDevice()->PixelToLogic(aSize, aMap);
- else
- aSize = OutputDevice::LogicToLogic(aSize, aGraphic.GetPrefMapMode(), aMap);
- m_aStates.top().getPicture().nWidth = aSize.Width();
- m_aStates.top().getPicture().nHeight = aSize.Height();
- }
-
- // Wrap it in an XShape.
- uno::Reference<drawing::XShape> xShape(rShape);
- if (xShape.is())
- {
- uno::Reference<lang::XServiceInfo> xSI(xShape, uno::UNO_QUERY_THROW);
- if (!xSI->supportsService("com.sun.star.drawing.GraphicObjectShape"))
- {
- // it's sometimes an error to get here - but it's possible to have
- // a \pict inside the \shptxt of a \shp of shapeType 202 "TextBox"
- // and in that case xShape is the text frame; we actually need a
- // new GraphicObject then (example: fdo37691-1.rtf)
- SAL_INFO("writerfilter.rtf",
- "cannot set graphic on existing shape, creating a new GraphicObjectShape");
- xShape.clear();
- }
- }
- if (!xShape.is())
- {
- if (m_xModelFactory.is())
- xShape.set(m_xModelFactory->createInstance("com.sun.star.drawing.GraphicObjectShape"),
- uno::UNO_QUERY);
- uno::Reference<drawing::XDrawPageSupplier> const xDrawSupplier(m_xDstDoc, uno::UNO_QUERY);
- if (xDrawSupplier.is())
- {
- uno::Reference<drawing::XShapes> xShapes = xDrawSupplier->getDrawPage();
- if (xShapes.is())
- xShapes->add(xShape);
- }
- }
-
- uno::Reference<beans::XPropertySet> xPropertySet(xShape, uno::UNO_QUERY);
-
- if (xPropertySet.is())
- xPropertySet->setPropertyValue("Graphic", uno::Any(xGraphic));
-
- // check if the picture is in an OLE object and if the \objdata element is used
- // (see RTF_OBJECT in RTFDocumentImpl::dispatchDestination)
- if (m_bObject)
- {
- // Set the object size
- awt::Size aSize;
- aSize.Width
- = (m_aStates.top().getPicture().nGoalWidth ? m_aStates.top().getPicture().nGoalWidth
- : m_aStates.top().getPicture().nWidth);
- aSize.Height
- = (m_aStates.top().getPicture().nGoalHeight ? m_aStates.top().getPicture().nGoalHeight
- : m_aStates.top().getPicture().nHeight);
- xShape->setSize(aSize);
-
- // Replacement graphic is inline by default, see oox::vml::SimpleShape::implConvertAndInsert().
- xPropertySet->setPropertyValue("AnchorType",
- uno::makeAny(text::TextContentAnchorType_AS_CHARACTER));
-
- auto pShapeValue = new RTFValue(xShape);
- m_aObjectAttributes.set(NS_ooxml::LN_shape, pShapeValue);
- return;
- }
-
- if (m_aStates.top().getInListpicture())
- {
- // Send the shape directly, no section is started, to additional properties will be ignored anyway.
- Mapper().startShape(xShape);
- Mapper().endShape();
- return;
- }
-
- // Send it to the dmapper.
- RTFSprms aSprms;
- RTFSprms aAttributes;
- // shape attribute
- RTFSprms aPicAttributes;
- auto pShapeValue = new RTFValue(xShape);
- aPicAttributes.set(NS_ooxml::LN_shape, pShapeValue);
- // pic sprm
- RTFSprms aGraphicDataAttributes;
- RTFSprms aGraphicDataSprms;
- auto pPicValue = new RTFValue(aPicAttributes);
- aGraphicDataSprms.set(NS_ooxml::LN_pic_pic, pPicValue);
- // graphicData sprm
- RTFSprms aGraphicAttributes;
- RTFSprms aGraphicSprms;
- auto pGraphicDataValue = new RTFValue(aGraphicDataAttributes, aGraphicDataSprms);
- aGraphicSprms.set(NS_ooxml::LN_CT_GraphicalObject_graphicData, pGraphicDataValue);
- // graphic sprm
- auto pGraphicValue = new RTFValue(aGraphicAttributes, aGraphicSprms);
- // extent sprm
- RTFSprms aExtentAttributes;
- int nXExt = (m_aStates.top().getPicture().nGoalWidth ? m_aStates.top().getPicture().nGoalWidth
- : m_aStates.top().getPicture().nWidth);
- int nYExt = (m_aStates.top().getPicture().nGoalHeight ? m_aStates.top().getPicture().nGoalHeight
- : m_aStates.top().getPicture().nHeight);
- if (m_aStates.top().getPicture().nScaleX != 100)
- nXExt = (static_cast<tools::Long>(m_aStates.top().getPicture().nScaleX)
- * (nXExt
- - (m_aStates.top().getPicture().nCropL + m_aStates.top().getPicture().nCropR)))
- / 100L;
- if (m_aStates.top().getPicture().nScaleY != 100)
- nYExt = (static_cast<tools::Long>(m_aStates.top().getPicture().nScaleY)
- * (nYExt
- - (m_aStates.top().getPicture().nCropT + m_aStates.top().getPicture().nCropB)))
- / 100L;
- if (m_aStates.top().getInShape())
- {
- // Picture in shape: it looks like pib picture, so we will stretch the picture to shape size (tdf#49893)
- nXExt = m_aStates.top().getShape().getRight() - m_aStates.top().getShape().getLeft();
- nYExt = m_aStates.top().getShape().getBottom() - m_aStates.top().getShape().getTop();
- }
- auto pXExtValue = new RTFValue(oox::drawingml::convertHmmToEmu(nXExt));
- auto pYExtValue = new RTFValue(oox::drawingml::convertHmmToEmu(nYExt));
- aExtentAttributes.set(NS_ooxml::LN_CT_PositiveSize2D_cx, pXExtValue);
- aExtentAttributes.set(NS_ooxml::LN_CT_PositiveSize2D_cy, pYExtValue);
- auto pExtentValue = new RTFValue(aExtentAttributes);
- // docpr sprm
- RTFSprms aDocprAttributes;
- for (const auto& rCharacterAttribute : m_aStates.top().getCharacterAttributes())
- if (rCharacterAttribute.first == NS_ooxml::LN_CT_NonVisualDrawingProps_name
- || rCharacterAttribute.first == NS_ooxml::LN_CT_NonVisualDrawingProps_descr)
- aDocprAttributes.set(rCharacterAttribute.first, rCharacterAttribute.second);
- auto pDocprValue = new RTFValue(aDocprAttributes);
- if (bInline)
- {
- RTFSprms aInlineAttributes;
- aInlineAttributes.set(NS_ooxml::LN_CT_Inline_distT, new RTFValue(0));
- aInlineAttributes.set(NS_ooxml::LN_CT_Inline_distB, new RTFValue(0));
- aInlineAttributes.set(NS_ooxml::LN_CT_Inline_distL, new RTFValue(0));
- aInlineAttributes.set(NS_ooxml::LN_CT_Inline_distR, new RTFValue(0));
- RTFSprms aInlineSprms;
- aInlineSprms.set(NS_ooxml::LN_CT_Inline_extent, pExtentValue);
- aInlineSprms.set(NS_ooxml::LN_CT_Inline_docPr, pDocprValue);
- aInlineSprms.set(NS_ooxml::LN_graphic_graphic, pGraphicValue);
- // inline sprm
- auto pValue = new RTFValue(aInlineAttributes, aInlineSprms);
- aSprms.set(NS_ooxml::LN_inline_inline, pValue);
- }
- else // anchored
- {
- // wrap sprm
- RTFSprms aAnchorWrapAttributes;
- m_aStates.top().getShape().getAnchorAttributes().set(
- NS_ooxml::LN_CT_Anchor_behindDoc,
- new RTFValue((m_aStates.top().getShape().getInBackground()) ? 1 : 0));
- RTFSprms aAnchorSprms;
- for (const auto& rCharacterAttribute : m_aStates.top().getCharacterAttributes())
- {
- if (rCharacterAttribute.first == NS_ooxml::LN_CT_WrapSquare_wrapText)
- aAnchorWrapAttributes.set(rCharacterAttribute.first, rCharacterAttribute.second);
- }
- sal_Int32 nWrap = -1;
- for (auto& rCharacterSprm : m_aStates.top().getCharacterSprms())
- {
- if (rCharacterSprm.first == NS_ooxml::LN_EG_WrapType_wrapNone
- || rCharacterSprm.first == NS_ooxml::LN_EG_WrapType_wrapTight)
- {
- nWrap = rCharacterSprm.first;
-
- // If there is a wrap polygon prepared by RTFSdrImport, pick it up here.
- if (rCharacterSprm.first == NS_ooxml::LN_EG_WrapType_wrapTight
- && !m_aStates.top().getShape().getWrapPolygonSprms().empty())
- rCharacterSprm.second->getSprms().set(
- NS_ooxml::LN_CT_WrapTight_wrapPolygon,
- new RTFValue(RTFSprms(), m_aStates.top().getShape().getWrapPolygonSprms()));
-
- aAnchorSprms.set(rCharacterSprm.first, rCharacterSprm.second);
- }
- }
-
- if (m_aStates.top().getShape().getWrapSprm().first != 0)
- // Replay of a buffered shape, wrap sprm there has priority over
- // character sprms of the current state.
- aAnchorSprms.set(m_aStates.top().getShape().getWrapSprm().first,
- m_aStates.top().getShape().getWrapSprm().second);
-
- aAnchorSprms.set(NS_ooxml::LN_CT_Anchor_extent, pExtentValue);
- if (!aAnchorWrapAttributes.empty() && nWrap == -1)
- aAnchorSprms.set(NS_ooxml::LN_EG_WrapType_wrapSquare,
- new RTFValue(aAnchorWrapAttributes));
-
- // See OOXMLFastContextHandler::positionOffset(), we can't just put offset values in an RTFValue.
- RTFSprms aPoshAttributes;
- RTFSprms aPoshSprms;
- if (m_aStates.top().getShape().getHoriOrientRelationToken() > 0)
- aPoshAttributes.set(
- NS_ooxml::LN_CT_PosH_relativeFrom,
- new RTFValue(m_aStates.top().getShape().getHoriOrientRelationToken()));
- if (m_aStates.top().getShape().getLeft() != 0)
- {
- Mapper().positionOffset(OUString::number(oox::drawingml::convertHmmToEmu(
- m_aStates.top().getShape().getLeft())),
- /*bVertical=*/false);
- aPoshSprms.set(NS_ooxml::LN_CT_PosH_posOffset, new RTFValue());
- }
- aAnchorSprms.set(NS_ooxml::LN_CT_Anchor_positionH,
- new RTFValue(aPoshAttributes, aPoshSprms));
-
- RTFSprms aPosvAttributes;
- RTFSprms aPosvSprms;
- if (m_aStates.top().getShape().getVertOrientRelationToken() > 0)
- aPosvAttributes.set(
- NS_ooxml::LN_CT_PosV_relativeFrom,
- new RTFValue(m_aStates.top().getShape().getVertOrientRelationToken()));
- if (m_aStates.top().getShape().getTop() != 0)
- {
- Mapper().positionOffset(OUString::number(oox::drawingml::convertHmmToEmu(
- m_aStates.top().getShape().getTop())),
- /*bVertical=*/true);
- aPosvSprms.set(NS_ooxml::LN_CT_PosV_posOffset, new RTFValue());
- }
- aAnchorSprms.set(NS_ooxml::LN_CT_Anchor_positionV,
- new RTFValue(aPosvAttributes, aPosvSprms));
-
- aAnchorSprms.set(NS_ooxml::LN_CT_Anchor_docPr, pDocprValue);
- aAnchorSprms.set(NS_ooxml::LN_graphic_graphic, pGraphicValue);
- // anchor sprm
- auto pValue = new RTFValue(m_aStates.top().getShape().getAnchorAttributes(), aAnchorSprms);
- aSprms.set(NS_ooxml::LN_anchor_anchor, pValue);
- }
- writerfilter::Reference<Properties>::Pointer_t pProperties
- = new RTFReferenceProperties(aAttributes, aSprms);
- checkFirstRun();
-
- if (!m_aStates.top().getCurrentBuffer())
- {
- Mapper().props(pProperties);
- // Make sure we don't lose these properties with a too early reset.
- m_bHadPicture = true;
- }
- else
- {
- auto pValue = new RTFValue(aAttributes, aSprms);
- bufferProperties(*m_aStates.top().getCurrentBuffer(), pValue, nullptr);
- }
-}
-
-RTFError RTFDocumentImpl::resolveChars(char ch)
-{
- if (m_aStates.top().getInternalState() == RTFInternalState::BIN)
- {
- m_pBinaryData = std::make_shared<SvMemoryStream>();
- m_pBinaryData->WriteChar(ch);
- for (int i = 0; i < m_aStates.top().getBinaryToRead() - 1; ++i)
- {
- Strm().ReadChar(ch);
- m_pBinaryData->WriteChar(ch);
- }
- m_aStates.top().setInternalState(RTFInternalState::NORMAL);
- return RTFError::OK;
- }
-
- OStringBuffer aBuf(512);
-
- bool bUnicodeChecked = false;
- bool bSkipped = false;
-
- while (!Strm().eof()
- && (m_aStates.top().getInternalState() == RTFInternalState::HEX
- || (ch != '{' && ch != '}' && ch != '\\')))
- {
- if (m_aStates.top().getInternalState() == RTFInternalState::HEX
- || (ch != 0x0d && ch != 0x0a))
- {
- if (m_aStates.top().getCharsToSkip() == 0)
- {
- if (!bUnicodeChecked)
- {
- checkUnicode(/*bUnicode =*/true, /*bHex =*/false);
- bUnicodeChecked = true;
- }
- aBuf.append(ch);
- }
- else
- {
- bSkipped = true;
- m_aStates.top().getCharsToSkip()--;
- }
- }
-
- // read a single char if we're in hex mode
- if (m_aStates.top().getInternalState() == RTFInternalState::HEX)
- break;
-
- if (RTL_TEXTENCODING_MS_932 == m_aStates.top().getCurrentEncoding())
- {
- unsigned char uch = ch;
- if ((uch >= 0x80 && uch <= 0x9F) || uch >= 0xE0)
- {
- // read second byte of 2-byte Shift-JIS - may be \ { }
- Strm().ReadChar(ch);
- if (m_aStates.top().getCharsToSkip() == 0)
- {
- // fdo#79384: Word will reject Shift-JIS following \loch
- // but apparently OOo could read and (worse) write such documents
- SAL_INFO_IF(m_aStates.top().getRunType() != RTFParserState::RunType::DBCH,
- "writerfilter.rtf", "invalid Shift-JIS without DBCH");
- assert(bUnicodeChecked);
- aBuf.append(ch);
- }
- else
- {
- assert(bSkipped);
- // anybody who uses \ucN with Shift-JIS is insane
- m_aStates.top().getCharsToSkip()--;
- }
- }
- }
-
- Strm().ReadChar(ch);
- }
- if (m_aStates.top().getInternalState() != RTFInternalState::HEX && !Strm().eof())
- Strm().SeekRel(-1);
-
- if (m_aStates.top().getInternalState() == RTFInternalState::HEX
- && m_aStates.top().getDestination() != Destination::LEVELNUMBERS)
- {
- if (!bSkipped)
- {
- // note: apparently \'0d\'0a is interpreted as 2 breaks, not 1
- if ((ch == '\r' || ch == '\n')
- && m_aStates.top().getDestination() != Destination::DOCCOMM
- && m_aStates.top().getDestination() != Destination::LEVELNUMBERS
- && m_aStates.top().getDestination() != Destination::LEVELTEXT)
- {
- checkUnicode(/*bUnicode =*/false, /*bHex =*/true);
- dispatchSymbol(RTF_PAR);
- }
- else
- {
- m_aHexBuffer.append(ch);
- }
- }
- return RTFError::OK;
- }
-
- if (m_aStates.top().getDestination() == Destination::SKIP)
- return RTFError::OK;
- OString aStr = aBuf.makeStringAndClear();
- if (m_aStates.top().getDestination() == Destination::LEVELNUMBERS)
- {
- if (aStr.toChar() != ';')
- m_aStates.top().getLevelNumbers().push_back(sal_Int32(ch));
- return RTFError::OK;
- }
-
- SAL_INFO("writerfilter.rtf",
- "RTFDocumentImpl::resolveChars: collected '"
- << OStringToOUString(aStr, m_aStates.top().getCurrentEncoding()) << "'");
-
- if (m_aStates.top().getDestination() == Destination::COLORTABLE)
- {
- // we hit a ';' at the end of each color entry
- m_aColorTable.push_back(m_aStates.top().getCurrentColor().GetColor());
- // set components back to zero
- m_aStates.top().getCurrentColor() = RTFColorTableEntry();
- }
- else if (!aStr.isEmpty())
- m_aHexBuffer.append(aStr);
-
- checkUnicode(/*bUnicode =*/false, /*bHex =*/true);
- return RTFError::OK;
-}
-
-bool RTFFrame::inFrame() const { return m_nW > 0 || m_nH > 0 || m_nX > 0 || m_nY > 0; }
-
-void RTFDocumentImpl::singleChar(sal_uInt8 nValue, bool bRunProps)
-{
- sal_uInt8 sValue[] = { nValue };
- RTFBuffer_t* pCurrentBuffer = m_aStates.top().getCurrentBuffer();
-
- if (!pCurrentBuffer)
- {
- Mapper().startCharacterGroup();
- // Should we send run properties?
- if (bRunProps)
- runProps();
- Mapper().text(sValue, 1);
- Mapper().endCharacterGroup();
- }
- else
- {
- pCurrentBuffer->push_back(Buf_t(BUFFER_STARTRUN, nullptr, nullptr));
- auto pValue = new RTFValue(*sValue);
- pCurrentBuffer->push_back(Buf_t(BUFFER_TEXT, pValue, nullptr));
- pCurrentBuffer->push_back(Buf_t(BUFFER_ENDRUN, nullptr, nullptr));
- }
-}
-
-void RTFDocumentImpl::text(OUString& rString)
-{
- if (rString.getLength() == 1 && m_aStates.top().getDestination() != Destination::DOCCOMM)
- {
- // No cheating! Tokenizer ignores bare \r and \n, their hex \'0d / \'0a form doesn't count, either.
- sal_Unicode ch = rString[0];
- if (ch == 0x0d || ch == 0x0a)
- return;
- }
-
- bool bRet = true;
- switch (m_aStates.top().getDestination())
- {
- // Note: in fonttbl there may or may not be groups; in stylesheet
- // and revtbl groups are mandatory
- case Destination::FONTTABLE:
- case Destination::FONTENTRY:
- case Destination::STYLEENTRY:
- case Destination::LISTNAME:
- case Destination::REVISIONENTRY:
- {
- // ; is the end of the entry
- bool bEnd = false;
- if (rString.endsWith(";"))
- {
- rString = rString.copy(0, rString.getLength() - 1);
- bEnd = true;
- }
- m_aStates.top().appendDestinationText(rString);
- if (bEnd)
- {
- // always clear, necessary in case of group-less fonttable
- OUString const aName
- = m_aStates.top().getCurrentDestinationText()->makeStringAndClear();
- switch (m_aStates.top().getDestination())
- {
- case Destination::FONTTABLE:
- case Destination::FONTENTRY:
- {
- m_aFontNames[m_nCurrentFontIndex] = aName;
- if (m_nCurrentEncoding >= 0)
- {
- m_aFontEncodings[m_nCurrentFontIndex] = m_nCurrentEncoding;
- m_nCurrentEncoding = -1;
- }
- m_aStates.top().getTableAttributes().set(NS_ooxml::LN_CT_Font_name,
- new RTFValue(aName));
-
- writerfilter::Reference<Properties>::Pointer_t const pProp(
- new RTFReferenceProperties(m_aStates.top().getTableAttributes(),
- m_aStates.top().getTableSprms()));
-
- //See fdo#47347 initial invalid font entry properties are inserted first,
- //so when we attempt to insert the correct ones, there's already an
- //entry in the map for them, so the new ones aren't inserted.
- auto lb = m_aFontTableEntries.lower_bound(m_nCurrentFontIndex);
- if (lb != m_aFontTableEntries.end()
- && !(m_aFontTableEntries.key_comp()(m_nCurrentFontIndex, lb->first)))
- lb->second = pProp;
- else
- m_aFontTableEntries.insert(lb,
- std::make_pair(m_nCurrentFontIndex, pProp));
- }
- break;
- case Destination::STYLEENTRY:
- {
- RTFValue::Pointer_t pType
- = m_aStates.top().getTableAttributes().find(NS_ooxml::LN_CT_Style_type);
- if (pType)
- {
- // Word strips whitespace around style names.
- m_aStyleNames[m_nCurrentStyleIndex] = aName.trim();
- m_aStyleTypes[m_nCurrentStyleIndex] = pType->getInt();
- auto pValue = new RTFValue(aName.trim());
- m_aStates.top().getTableAttributes().set(NS_ooxml::LN_CT_Style_styleId,
- pValue);
- m_aStates.top().getTableSprms().set(NS_ooxml::LN_CT_Style_name, pValue);
-
- writerfilter::Reference<Properties>::Pointer_t const pProp(
- createStyleProperties());
- m_aStyleTableEntries.insert(
- std::make_pair(m_nCurrentStyleIndex, pProp));
- }
- else
- SAL_INFO("writerfilter.rtf", "no RTF style type defined, ignoring");
- break;
- }
- case Destination::LISTNAME:
- // TODO: what can be done with a list name?
- break;
- case Destination::REVISIONENTRY:
- m_aAuthors[m_aAuthors.size()] = aName;
- break;
- default:
- break;
- }
- resetAttributes();
- resetSprms();
- }
- }
- break;
- case Destination::LEVELTEXT:
- case Destination::SHAPEPROPERTYNAME:
- case Destination::SHAPEPROPERTYVALUE:
- case Destination::BOOKMARKEND:
- case Destination::PICT:
- case Destination::SHAPEPROPERTYVALUEPICT:
- case Destination::FORMFIELDNAME:
- case Destination::FORMFIELDLIST:
- case Destination::DATAFIELD:
- case Destination::AUTHOR:
- case Destination::KEYWORDS:
- case Destination::OPERATOR:
- case Destination::COMPANY:
- case Destination::COMMENT:
- case Destination::OBJDATA:
- case Destination::OBJCLASS:
- case Destination::ANNOTATIONDATE:
- case Destination::ANNOTATIONAUTHOR:
- case Destination::ANNOTATIONREFERENCE:
- case Destination::FALT:
- case Destination::PARAGRAPHNUMBERING_TEXTAFTER:
- case Destination::PARAGRAPHNUMBERING_TEXTBEFORE:
- case Destination::TITLE:
- case Destination::SUBJECT:
- case Destination::DOCCOMM:
- case Destination::ATNID:
- case Destination::ANNOTATIONREFERENCESTART:
- case Destination::ANNOTATIONREFERENCEEND:
- case Destination::MR:
- case Destination::MCHR:
- case Destination::MPOS:
- case Destination::MVERTJC:
- case Destination::MSTRIKEH:
- case Destination::MDEGHIDE:
- case Destination::MBEGCHR:
- case Destination::MSEPCHR:
- case Destination::MENDCHR:
- case Destination::MSUBHIDE:
- case Destination::MSUPHIDE:
- case Destination::MTYPE:
- case Destination::MGROW:
- case Destination::INDEXENTRY:
- case Destination::TOCENTRY:
- case Destination::PROPNAME:
- case Destination::STATICVAL:
- m_aStates.top().appendDestinationText(rString);
- break;
- case Destination::GENERATOR:
- // don't enlarge space sequences, eg. it was saved in LibreOffice
- if (!rString.startsWithIgnoreAsciiCase("Microsoft"))
- m_aSettingsTableSprms.set(NS_ooxml::LN_CT_Settings_longerSpaceSequence,
- new RTFValue(0));
- break;
- default:
- bRet = false;
- break;
- }
- if (bRet)
- return;
-
- if (!m_aIgnoreFirst.isEmpty() && m_aIgnoreFirst == rString)
- {
- m_aIgnoreFirst.clear();
- return;
- }
-
- // Are we in the middle of the table definition? (No cell defs yet, but we already have some cell props.)
- if (m_aStates.top().getTableCellSprms().find(NS_ooxml::LN_CT_TcPrBase_vAlign)
- && m_nTopLevelCells == 0)
- {
- m_aTableBufferStack.back().emplace_back(
- Buf_t(BUFFER_UTEXT, new RTFValue(rString), nullptr));
- return;
- }
-
- checkFirstRun();
- checkNeedPap();
-
- // Don't return earlier, a bookmark start has to be in a paragraph group.
- if (m_aStates.top().getDestination() == Destination::BOOKMARKSTART)
- {
- m_aStates.top().appendDestinationText(rString);
- return;
- }
-
- RTFBuffer_t* pCurrentBuffer = m_aStates.top().getCurrentBuffer();
-
- if (!pCurrentBuffer && m_aStates.top().getDestination() != Destination::FOOTNOTE)
- Mapper().startCharacterGroup();
- else if (pCurrentBuffer)
- {
- RTFValue::Pointer_t pValue;
- pCurrentBuffer->push_back(Buf_t(BUFFER_STARTRUN, pValue, nullptr));
- }
-
- if (m_aStates.top().getDestination() == Destination::NORMAL
- || m_aStates.top().getDestination() == Destination::FIELDRESULT
- || m_aStates.top().getDestination() == Destination::SHAPETEXT)
- runProps();
-
- if (!pCurrentBuffer)
- Mapper().utext(reinterpret_cast<sal_uInt8 const*>(rString.getStr()), rString.getLength());
- else
- {
- auto pValue = new RTFValue(rString);
- pCurrentBuffer->push_back(Buf_t(BUFFER_UTEXT, pValue, nullptr));
- }
-
- m_bNeedCr = true;
-
- if (!pCurrentBuffer && m_aStates.top().getDestination() != Destination::FOOTNOTE)
- Mapper().endCharacterGroup();
- else if (pCurrentBuffer)
- {
- RTFValue::Pointer_t pValue;
- pCurrentBuffer->push_back(Buf_t(BUFFER_ENDRUN, pValue, nullptr));
- }
-}
-
-void RTFDocumentImpl::prepareProperties(
- RTFParserState& rState, writerfilter::Reference<Properties>::Pointer_t& o_rpParagraphProperties,
- writerfilter::Reference<Properties>::Pointer_t& o_rpFrameProperties,
- writerfilter::Reference<Properties>::Pointer_t& o_rpTableRowProperties, int const nCells,
- int const nCurrentCellX)
-{
- o_rpParagraphProperties
- = getProperties(rState.getParagraphAttributes(), rState.getParagraphSprms(),
- NS_ooxml::LN_Value_ST_StyleType_paragraph);
-
- if (rState.getFrame().hasProperties())
- {
- o_rpFrameProperties = new RTFReferenceProperties(RTFSprms(), rState.getFrame().getSprms());
- }
-
- // Table width.
- RTFValue::Pointer_t const pTableWidthProps
- = rState.getTableRowSprms().find(NS_ooxml::LN_CT_TblPrBase_tblW);
- if (!pTableWidthProps)
- {
- auto pUnitValue = new RTFValue(3);
- putNestedAttribute(rState.getTableRowSprms(), NS_ooxml::LN_CT_TblPrBase_tblW,
- NS_ooxml::LN_CT_TblWidth_type, pUnitValue);
- auto pWValue = new RTFValue(nCurrentCellX);
- putNestedAttribute(rState.getTableRowSprms(), NS_ooxml::LN_CT_TblPrBase_tblW,
- NS_ooxml::LN_CT_TblWidth_w, pWValue);
- }
-
- if (nCells > 0)
- rState.getTableRowSprms().set(NS_ooxml::LN_tblRow, new RTFValue(1));
-
- RTFValue::Pointer_t const pCellMar
- = rState.getTableRowSprms().find(NS_ooxml::LN_CT_TblPrBase_tblCellMar);
- if (!pCellMar)
- {
- // If no cell margins are defined, the default left/right margin is 0 in Word, but not in Writer.
- RTFSprms aAttributes;
- aAttributes.set(NS_ooxml::LN_CT_TblWidth_type,
- new RTFValue(NS_ooxml::LN_Value_ST_TblWidth_dxa));
- aAttributes.set(NS_ooxml::LN_CT_TblWidth_w, new RTFValue(0));
- putNestedSprm(rState.getTableRowSprms(), NS_ooxml::LN_CT_TblPrBase_tblCellMar,
- NS_ooxml::LN_CT_TblCellMar_left, new RTFValue(aAttributes));
- putNestedSprm(rState.getTableRowSprms(), NS_ooxml::LN_CT_TblPrBase_tblCellMar,
- NS_ooxml::LN_CT_TblCellMar_right, new RTFValue(aAttributes));
- }
-
- o_rpTableRowProperties
- = new RTFReferenceProperties(rState.getTableRowAttributes(), rState.getTableRowSprms());
-}
-
-void RTFDocumentImpl::sendProperties(
- writerfilter::Reference<Properties>::Pointer_t const& pParagraphProperties,
- writerfilter::Reference<Properties>::Pointer_t const& pFrameProperties,
- writerfilter::Reference<Properties>::Pointer_t const& pTableRowProperties)
-{
- Mapper().props(pParagraphProperties);
-
- if (pFrameProperties)
- {
- Mapper().props(pFrameProperties);
- }
-
- Mapper().props(pTableRowProperties);
-
- tableBreak();
-}
-
-void RTFDocumentImpl::replayRowBuffer(RTFBuffer_t& rBuffer, ::std::deque<RTFSprms>& rCellsSrpms,
- ::std::deque<RTFSprms>& rCellsAttributes, int const nCells)
-{
- for (int i = 0; i < nCells; ++i)
- {
- replayBuffer(rBuffer, &rCellsSrpms.front(), &rCellsAttributes.front());
- rCellsSrpms.pop_front();
- rCellsAttributes.pop_front();
- }
- for (Buf_t& i : rBuffer)
- {
- SAL_WARN_IF(BUFFER_CELLEND == std::get<0>(i), "writerfilter.rtf", "dropping table cell!");
- }
- assert(rCellsSrpms.empty());
- assert(rCellsAttributes.empty());
-}
-
-void RTFDocumentImpl::replayBuffer(RTFBuffer_t& rBuffer, RTFSprms* const pSprms,
- RTFSprms const* const pAttributes)
-{
- while (!rBuffer.empty())
- {
- Buf_t aTuple(rBuffer.front());
- rBuffer.pop_front();
- if (std::get<0>(aTuple) == BUFFER_PROPS)
- {
- // Construct properties via getProperties() and not directly, to take care of deduplication.
- writerfilter::Reference<Properties>::Pointer_t const pProp(getProperties(
- std::get<1>(aTuple)->getAttributes(), std::get<1>(aTuple)->getSprms(), 0));
- Mapper().props(pProp);
- }
- else if (std::get<0>(aTuple) == BUFFER_NESTROW)
- {
- TableRowBuffer& rRowBuffer(*std::get<2>(aTuple));
-
- replayRowBuffer(rRowBuffer.GetBuffer(), rRowBuffer.GetCellsSprms(),
- rRowBuffer.GetCellsAttributes(), rRowBuffer.GetCells());
-
- sendProperties(rRowBuffer.GetParaProperties(), rRowBuffer.GetFrameProperties(),
- rRowBuffer.GetRowProperties());
- }
- else if (std::get<0>(aTuple) == BUFFER_CELLEND)
- {
- assert(pSprms && pAttributes);
- auto pValue = new RTFValue(1);
- pSprms->set(NS_ooxml::LN_tblCell, pValue);
- writerfilter::Reference<Properties>::Pointer_t const pTableCellProperties(
- new RTFReferenceProperties(*pAttributes, *pSprms));
- Mapper().props(pTableCellProperties);
- tableBreak();
- break;
- }
- else if (std::get<0>(aTuple) == BUFFER_STARTRUN)
- Mapper().startCharacterGroup();
- else if (std::get<0>(aTuple) == BUFFER_TEXT)
- {
- sal_uInt8 const nValue = std::get<1>(aTuple)->getInt();
- Mapper().text(&nValue, 1);
- }
- else if (std::get<0>(aTuple) == BUFFER_UTEXT)
- {
- OUString const aString(std::get<1>(aTuple)->getString());
- Mapper().utext(reinterpret_cast<sal_uInt8 const*>(aString.getStr()),
- aString.getLength());
- }
- else if (std::get<0>(aTuple) == BUFFER_ENDRUN)
- Mapper().endCharacterGroup();
- else if (std::get<0>(aTuple) == BUFFER_PAR)
- parBreak();
- else if (std::get<0>(aTuple) == BUFFER_STARTSHAPE)
- m_pSdrImport->resolve(std::get<1>(aTuple)->getShape(), false, RTFSdrImport::SHAPE);
- else if (std::get<0>(aTuple) == BUFFER_RESOLVESHAPE)
- {
- // Make sure there is no current buffer while replaying the shape,
- // otherwise it gets re-buffered.
- RTFBuffer_t* pCurrentBuffer = m_aStates.top().getCurrentBuffer();
- m_aStates.top().setCurrentBuffer(nullptr);
-
- // Set current shape during replay, needed by e.g. wrap in
- // background.
- m_aStates.top().getShape() = std::get<1>(aTuple)->getShape();
-
- m_pSdrImport->resolve(std::get<1>(aTuple)->getShape(), true, RTFSdrImport::SHAPE);
- m_aStates.top().setCurrentBuffer(pCurrentBuffer);
- }
- else if (std::get<0>(aTuple) == BUFFER_ENDSHAPE)
- m_pSdrImport->close();
- else if (std::get<0>(aTuple) == BUFFER_RESOLVESUBSTREAM)
- {
- RTFSprms& rAttributes = std::get<1>(aTuple)->getAttributes();
- std::size_t nPos = rAttributes.find(0)->getInt();
- Id nId = rAttributes.find(1)->getInt();
- OUString aCustomMark = rAttributes.find(2)->getString();
- resolveSubstream(nPos, nId, aCustomMark);
- }
- else if (std::get<0>(aTuple) == BUFFER_PICTURE)
- m_aStates.top().getPicture() = std::get<1>(aTuple)->getPicture();
- else if (std::get<0>(aTuple) == BUFFER_SETSTYLE)
- {
- if (!m_aStates.empty())
- m_aStates.top().setCurrentStyleIndex(std::get<1>(aTuple)->getInt());
- }
- else
- assert(false);
- }
-}
-
-bool findPropertyName(const std::vector<beans::PropertyValue>& rProperties, const OUString& rName)
-{
- return std::any_of(
- rProperties.begin(), rProperties.end(),
- [&rName](const beans::PropertyValue& rProperty) { return rProperty.Name == rName; });
-}
-
-void RTFDocumentImpl::backupTableRowProperties()
-{
- if (m_nTopLevelCurrentCellX)
- {
- m_aBackupTableRowSprms = m_aStates.top().getTableRowSprms();
- m_aBackupTableRowAttributes = m_aStates.top().getTableRowAttributes();
- m_nBackupTopLevelCurrentCellX = m_nTopLevelCurrentCellX;
- }
-}
-
-void RTFDocumentImpl::restoreTableRowProperties()
-{
- m_aStates.top().getTableRowSprms() = m_aBackupTableRowSprms;
- m_aStates.top().getTableRowAttributes() = m_aBackupTableRowAttributes;
- m_nTopLevelCurrentCellX = m_nBackupTopLevelCurrentCellX;
-}
-
-void RTFDocumentImpl::resetTableRowProperties()
-{
- m_aStates.top().getTableRowSprms() = m_aDefaultState.getTableRowSprms();
- m_aStates.top().getTableRowSprms().set(NS_ooxml::LN_CT_TblGridBase_gridCol, new RTFValue(-1),
- RTFOverwrite::NO_APPEND);
- m_aStates.top().getTableRowAttributes() = m_aDefaultState.getTableRowAttributes();
- if (Destination::NESTEDTABLEPROPERTIES == m_aStates.top().getDestination())
- {
- m_nNestedTRLeft = 0;
- m_nNestedCurrentCellX = 0;
- }
- else
- {
- m_nTopLevelTRLeft = 0;
- m_nTopLevelCurrentCellX = 0;
- }
-}
-
-RTFError RTFDocumentImpl::dispatchToggle(RTFKeyword nKeyword, bool bParam, int nParam)
-{
- setNeedSect(true);
- checkUnicode(/*bUnicode =*/true, /*bHex =*/true);
- RTFSkipDestination aSkip(*this);
- int nSprm = -1;
- tools::SvRef<RTFValue> pBoolValue(new RTFValue(int(!bParam || nParam != 0)));
-
- // Underline toggles.
- switch (nKeyword)
- {
- case RTF_UL:
- nSprm = NS_ooxml::LN_Value_ST_Underline_single;
- break;
- case RTF_ULDASH:
- nSprm = NS_ooxml::LN_Value_ST_Underline_dash;
- break;
- case RTF_ULDASHD:
- nSprm = NS_ooxml::LN_Value_ST_Underline_dotDash;
- break;
- case RTF_ULDASHDD:
- nSprm = NS_ooxml::LN_Value_ST_Underline_dotDotDash;
- break;
- case RTF_ULDB:
- nSprm = NS_ooxml::LN_Value_ST_Underline_double;
- break;
- case RTF_ULHWAVE:
- nSprm = NS_ooxml::LN_Value_ST_Underline_wavyHeavy;
- break;
- case RTF_ULLDASH:
- nSprm = NS_ooxml::LN_Value_ST_Underline_dashLong;
- break;
- case RTF_ULTH:
- nSprm = NS_ooxml::LN_Value_ST_Underline_thick;
- break;
- case RTF_ULTHD:
- nSprm = NS_ooxml::LN_Value_ST_Underline_dottedHeavy;
- break;
- case RTF_ULTHDASH:
- nSprm = NS_ooxml::LN_Value_ST_Underline_dashedHeavy;
- break;
- case RTF_ULTHDASHD:
- nSprm = NS_ooxml::LN_Value_ST_Underline_dashDotHeavy;
- break;
- case RTF_ULTHDASHDD:
- nSprm = NS_ooxml::LN_Value_ST_Underline_dashDotDotHeavy;
- break;
- case RTF_ULTHLDASH:
- nSprm = NS_ooxml::LN_Value_ST_Underline_dashLongHeavy;
- break;
- case RTF_ULULDBWAVE:
- nSprm = NS_ooxml::LN_Value_ST_Underline_wavyDouble;
- break;
- case RTF_ULWAVE:
- nSprm = NS_ooxml::LN_Value_ST_Underline_wave;
- break;
- default:
- break;
- }
- if (nSprm >= 0)
- {
- auto pValue
- = new RTFValue((!bParam || nParam != 0) ? nSprm : NS_ooxml::LN_Value_ST_Underline_none);
- m_aStates.top().getCharacterAttributes().set(NS_ooxml::LN_CT_Underline_val, pValue);
- return RTFError::OK;
- }
-
- // Accent characters (over dot / over comma).
- switch (nKeyword)
- {
- case RTF_ACCNONE:
- nSprm = NS_ooxml::LN_Value_ST_Em_none;
- break;
- case RTF_ACCDOT:
- nSprm = NS_ooxml::LN_Value_ST_Em_dot;
- break;
- case RTF_ACCCOMMA:
- nSprm = NS_ooxml::LN_Value_ST_Em_comma;
- break;
- case RTF_ACCCIRCLE:
- nSprm = NS_ooxml::LN_Value_ST_Em_circle;
- break;
- case RTF_ACCUNDERDOT:
- nSprm = NS_ooxml::LN_Value_ST_Em_underDot;
- break;
- default:
- break;
- }
- if (nSprm >= 0)
- {
- auto pValue = new RTFValue((!bParam || nParam != 0) ? nSprm : 0);
- m_aStates.top().getCharacterSprms().set(NS_ooxml::LN_EG_RPrBase_em, pValue);
- return RTFError::OK;
- }
-
- // Trivial character sprms.
- switch (nKeyword)
- {
- case RTF_B:
- case RTF_AB:
- switch (m_aStates.top().getRunType())
- {
- case RTFParserState::RunType::HICH:
- case RTFParserState::RunType::RTLCH_LTRCH_1:
- case RTFParserState::RunType::LTRCH_RTLCH_2:
- case RTFParserState::RunType::DBCH:
- nSprm = NS_ooxml::LN_EG_RPrBase_bCs;
- break;
- case RTFParserState::RunType::NONE:
- case RTFParserState::RunType::LOCH:
- case RTFParserState::RunType::LTRCH_RTLCH_1:
- case RTFParserState::RunType::RTLCH_LTRCH_2:
- default:
- nSprm = NS_ooxml::LN_EG_RPrBase_b;
- break;
- }
- break;
- case RTF_I:
- case RTF_AI:
- switch (m_aStates.top().getRunType())
- {
- case RTFParserState::RunType::HICH:
- case RTFParserState::RunType::RTLCH_LTRCH_1:
- case RTFParserState::RunType::LTRCH_RTLCH_2:
- case RTFParserState::RunType::DBCH:
- nSprm = NS_ooxml::LN_EG_RPrBase_iCs;
- break;
- case RTFParserState::RunType::NONE:
- case RTFParserState::RunType::LOCH:
- case RTFParserState::RunType::LTRCH_RTLCH_1:
- case RTFParserState::RunType::RTLCH_LTRCH_2:
- default:
- nSprm = NS_ooxml::LN_EG_RPrBase_i;
- break;
- }
- break;
- case RTF_OUTL:
- nSprm = NS_ooxml::LN_EG_RPrBase_outline;
- break;
- case RTF_SHAD:
- nSprm = NS_ooxml::LN_EG_RPrBase_shadow;
- break;
- case RTF_V:
- nSprm = NS_ooxml::LN_EG_RPrBase_vanish;
- break;
- case RTF_STRIKE:
- nSprm = NS_ooxml::LN_EG_RPrBase_strike;
- break;
- case RTF_STRIKED:
- nSprm = NS_ooxml::LN_EG_RPrBase_dstrike;
- break;
- case RTF_SCAPS:
- nSprm = NS_ooxml::LN_EG_RPrBase_smallCaps;
- break;
- case RTF_IMPR:
- nSprm = NS_ooxml::LN_EG_RPrBase_imprint;
- break;
- case RTF_CAPS:
- nSprm = NS_ooxml::LN_EG_RPrBase_caps;
- break;
- default:
- break;
- }
- if (nSprm >= 0)
- {
- m_aStates.top().getCharacterSprms().set(nSprm, pBoolValue);
- return RTFError::OK;
- }
-
- switch (nKeyword)
- {
- case RTF_ASPALPHA:
- m_aStates.top().getParagraphSprms().set(NS_ooxml::LN_CT_PPrBase_autoSpaceDE,
- pBoolValue);
- break;
- case RTF_DELETED:
- case RTF_REVISED:
- {
- auto pValue = new RTFValue(nKeyword == RTF_DELETED ? oox::XML_del : oox::XML_ins);
- putNestedAttribute(m_aStates.top().getCharacterSprms(), NS_ooxml::LN_trackchange,
- NS_ooxml::LN_token, pValue);
- }
- break;
- case RTF_SBAUTO:
- putNestedAttribute(m_aStates.top().getParagraphSprms(), NS_ooxml::LN_CT_PPrBase_spacing,
- NS_ooxml::LN_CT_Spacing_beforeAutospacing, pBoolValue);
- break;
- case RTF_SAAUTO:
- putNestedAttribute(m_aStates.top().getParagraphSprms(), NS_ooxml::LN_CT_PPrBase_spacing,
- NS_ooxml::LN_CT_Spacing_afterAutospacing, pBoolValue);
- break;
- case RTF_FACINGP:
- m_aSettingsTableSprms.set(NS_ooxml::LN_CT_Settings_evenAndOddHeaders, pBoolValue);
- break;
- case RTF_HYPHAUTO:
- m_aSettingsTableSprms.set(NS_ooxml::LN_CT_Settings_autoHyphenation, pBoolValue);
- break;
- case RTF_HYPHPAR:
- m_aStates.top().getParagraphSprms().set(NS_ooxml::LN_CT_PPrBase_suppressAutoHyphens,
- new RTFValue(int(bParam && nParam == 0)));
- break;
- default:
- {
- SAL_INFO("writerfilter.rtf",
- "TODO handle toggle '" << keywordToString(nKeyword) << "'");
- aSkip.setParsed(false);
- }
- break;
- }
- return RTFError::OK;
-}
-
-RTFError RTFDocumentImpl::pushState()
-{
- //SAL_INFO("writerfilter.rtf", __func__ << " before push: " << m_pTokenizer->getGroup());
-
- checkUnicode(/*bUnicode =*/true, /*bHex =*/true);
- m_nGroupStartPos = Strm().Tell();
-
- if (m_aStates.empty())
- m_aStates.push(m_aDefaultState);
- else
- {
- // fdo#85812 group resets run type of _current_ and new state (but not RTL)
- if (m_aStates.top().getRunType() != RTFParserState::RunType::LTRCH_RTLCH_2
- && m_aStates.top().getRunType() != RTFParserState::RunType::RTLCH_LTRCH_2)
- {
- m_aStates.top().setRunType(RTFParserState::RunType::NONE);
- }
-
- if (m_aStates.top().getDestination() == Destination::MR)
- lcl_DestinationToMath(m_aStates.top().getCurrentDestinationText(), m_aMathBuffer,
- m_bMathNor);
- m_aStates.push(m_aStates.top());
- }
- m_aStates.top().getDestinationText().setLength(0); // was copied: always reset!
-
- m_pTokenizer->pushGroup();
-
- switch (m_aStates.top().getDestination())
- {
- case Destination::FONTTABLE:
- // this is a "faked" destination for the font entry
- m_aStates.top().setCurrentDestinationText(&m_aStates.top().getDestinationText());
- m_aStates.top().setDestination(Destination::FONTENTRY);
- break;
- case Destination::STYLESHEET:
- // this is a "faked" destination for the style sheet entry
- m_aStates.top().setCurrentDestinationText(&m_aStates.top().getDestinationText());
- m_aStates.top().setDestination(Destination::STYLEENTRY);
- {
- // the *default* is \s0 i.e. paragraph style default
- // this will be overwritten by \sN \csN \dsN \tsN
- m_nCurrentStyleIndex = 0;
- auto pValue = new RTFValue(NS_ooxml::LN_Value_ST_StyleType_paragraph);
- m_aStates.top().getTableAttributes().set(NS_ooxml::LN_CT_Style_type, pValue);
- }
- break;
- case Destination::FIELDRESULT:
- case Destination::SHAPETEXT:
- case Destination::FORMFIELD:
- case Destination::FIELDINSTRUCTION:
- case Destination::PICT:
- m_aStates.top().setDestination(Destination::NORMAL);
- break;
- case Destination::MNUM:
- case Destination::MDEN:
- case Destination::ME:
- case Destination::MFNAME:
- case Destination::MLIM:
- case Destination::MSUB:
- case Destination::MSUP:
- case Destination::MDEG:
- case Destination::MOMATH:
- m_aStates.top().setDestination(Destination::MR);
- break;
- case Destination::REVISIONTABLE:
- // this is a "faked" destination for the revision table entry
- m_aStates.top().setCurrentDestinationText(&m_aStates.top().getDestinationText());
- m_aStates.top().setDestination(Destination::REVISIONENTRY);
- break;
- default:
- break;
- }
-
- // If this is true, then ooxml:endtrackchange will be generated. Make sure
- // we don't generate more ooxml:endtrackchange than ooxml:trackchange: new
- // state does not inherit this flag.
- m_aStates.top().setStartedTrackchange(false);
-
- return RTFError::OK;
-}
-
-writerfilter::Reference<Properties>::Pointer_t RTFDocumentImpl::createStyleProperties()
-{
- int nBasedOn = 0;
- RTFValue::Pointer_t pBasedOn
- = m_aStates.top().getTableSprms().find(NS_ooxml::LN_CT_Style_basedOn);
- if (pBasedOn)
- nBasedOn = pBasedOn->getInt();
- if (nBasedOn == 0)
- {
- // No parent style, then mimic what Word does: ignore attributes which
- // would set a margin as formatting, but with a default value.
- for (const auto& nId :
- { NS_ooxml::LN_CT_Ind_firstLine, NS_ooxml::LN_CT_Ind_left, NS_ooxml::LN_CT_Ind_right,
- NS_ooxml::LN_CT_Ind_start, NS_ooxml::LN_CT_Ind_end })
- {
- RTFValue::Pointer_t pValue = getNestedAttribute(m_aStates.top().getParagraphSprms(),
- NS_ooxml::LN_CT_PPrBase_ind, nId);
- if (pValue && pValue->getInt() == 0)
- eraseNestedAttribute(m_aStates.top().getParagraphSprms(),
- NS_ooxml::LN_CT_PPrBase_ind, nId);
- }
- }
-
- RTFValue::Pointer_t pParaProps = new RTFValue(m_aStates.top().getParagraphAttributes(),
- m_aStates.top().getParagraphSprms());
- RTFValue::Pointer_t pCharProps = new RTFValue(m_aStates.top().getCharacterAttributes(),
- m_aStates.top().getCharacterSprms());
-
- // resetSprms will clean up this modification
- m_aStates.top().getTableSprms().set(NS_ooxml::LN_CT_Style_pPr, pParaProps);
- m_aStates.top().getTableSprms().set(NS_ooxml::LN_CT_Style_rPr, pCharProps);
-
- writerfilter::Reference<Properties>::Pointer_t pProps(new RTFReferenceProperties(
- m_aStates.top().getTableAttributes(), m_aStates.top().getTableSprms()));
- return pProps;
-}
-
-/** 2 different representations of the styles are needed:
-
- 1) flat content, as read from the input file:
- stored in m_aStyleTableEntries, used as reference input for
- deduplication both here and for hard formatting in getProperties()
-
- 2) real content, with proper override of sprms/attributes where it differs
- from parent style; this is produced here and sent to domain mapper
- */
-RTFReferenceTable::Entries_t RTFDocumentImpl::deduplicateStyleTable()
-{
- RTFReferenceTable::Entries_t ret;
- for (auto const& it : m_aStyleTableEntries)
- {
- auto pStyle = it.second;
- ret[it.first] = pStyle;
- // ugly downcasts here, but can't easily replace the members with
- // RTFReferenceProperties because dmapper wants SvRef<Properties> anyway
- RTFValue::Pointer_t const pBasedOn(
- static_cast<RTFReferenceProperties&>(*pStyle).getSprms().find(
- NS_ooxml::LN_CT_Style_basedOn));
- if (pBasedOn)
- {
- int const nBasedOn(pBasedOn->getInt());
- // don't deduplicate yourself - especially a potential problem for the default style.
- if (it.first == nBasedOn)
- continue;
-
- auto const itParent(m_aStyleTableEntries.find(nBasedOn)); // definition as read!
- if (itParent != m_aStyleTableEntries.end())
- {
- auto const pStyleType(
- static_cast<RTFReferenceProperties&>(*pStyle).getAttributes().find(
- NS_ooxml::LN_CT_Style_type));
- assert(pStyleType);
- int const nStyleType(pStyleType->getInt());
- RTFSprms const sprms(
- static_cast<RTFReferenceProperties&>(*pStyle).getSprms().cloneAndDeduplicate(
- static_cast<RTFReferenceProperties&>(*itParent->second).getSprms(),
- nStyleType));
- RTFSprms const attributes(
- static_cast<RTFReferenceProperties&>(*pStyle)
- .getAttributes()
- .cloneAndDeduplicate(
- static_cast<RTFReferenceProperties&>(*itParent->second).getAttributes(),
- nStyleType));
-
- ret[it.first] = new RTFReferenceProperties(attributes, sprms);
- }
- else
- {
- SAL_WARN("writerfilter.rtf", "parent style not found: " << nBasedOn);
- }
- }
- }
- assert(ret.size() == m_aStyleTableEntries.size());
- return ret;
-}
-
-void RTFDocumentImpl::resetSprms()
-{
- m_aStates.top().getTableSprms().clear();
- m_aStates.top().getCharacterSprms().clear();
- m_aStates.top().getParagraphSprms().clear();
-}
-
-void RTFDocumentImpl::resetAttributes()
-{
- m_aStates.top().getTableAttributes().clear();
- m_aStates.top().getCharacterAttributes().clear();
- m_aStates.top().getParagraphAttributes().clear();
-}
-
-static bool lcl_containsProperty(const uno::Sequence<beans::Property>& rProperties,
- std::u16string_view rName)
-{
- return std::any_of(rProperties.begin(), rProperties.end(),
- [&](const beans::Property& rProperty) { return rProperty.Name == rName; });
-}
-
-RTFError RTFDocumentImpl::beforePopState(RTFParserState& rState)
-{
- switch (rState.getDestination())
- {
- case Destination::FONTTABLE:
- {
- writerfilter::Reference<Table>::Pointer_t const pTable(
- new RTFReferenceTable(m_aFontTableEntries));
- Mapper().table(NS_ooxml::LN_FONTTABLE, pTable);
- if (m_nDefaultFontIndex >= 0)
- {
- auto pValue = new RTFValue(m_aFontNames[getFontIndex(m_nDefaultFontIndex)]);
- putNestedAttribute(m_aDefaultState.getCharacterSprms(),
- NS_ooxml::LN_EG_RPrBase_rFonts, NS_ooxml::LN_CT_Fonts_ascii,
- pValue);
- }
- }
- break;
- case Destination::STYLESHEET:
- {
- RTFReferenceTable::Entries_t const pStyleTableDeduplicated(deduplicateStyleTable());
- writerfilter::Reference<Table>::Pointer_t const pTable(
- new RTFReferenceTable(pStyleTableDeduplicated));
- Mapper().table(NS_ooxml::LN_STYLESHEET, pTable);
- }
- break;
- case Destination::LISTOVERRIDETABLE:
- {
- RTFSprms aListTableAttributes;
- writerfilter::Reference<Properties>::Pointer_t pProp
- = new RTFReferenceProperties(aListTableAttributes, m_aListTableSprms);
- RTFReferenceTable::Entries_t aListTableEntries;
- aListTableEntries.insert(std::make_pair(0, pProp));
- writerfilter::Reference<Table>::Pointer_t const pTable(
- new RTFReferenceTable(aListTableEntries));
- Mapper().table(NS_ooxml::LN_NUMBERING, pTable);
- }
- break;
- case Destination::LISTENTRY:
- for (const auto& rListLevelEntry : rState.getListLevelEntries())
- rState.getTableSprms().set(rListLevelEntry.first, rListLevelEntry.second,
- RTFOverwrite::NO_APPEND);
- break;
- case Destination::FIELDINSTRUCTION:
- {
- auto pValue = new RTFValue(m_aFormfieldAttributes, m_aFormfieldSprms);
- RTFSprms aFFAttributes;
- RTFSprms aFFSprms;
- aFFSprms.set(NS_ooxml::LN_ffdata, pValue);
- if (!m_aStates.top().getCurrentBuffer())
- {
- writerfilter::Reference<Properties>::Pointer_t pProperties
- = new RTFReferenceProperties(aFFAttributes, aFFSprms);
- Mapper().props(pProperties);
- }
- else
- {
- auto pFFValue = new RTFValue(aFFAttributes, aFFSprms);
- bufferProperties(*m_aStates.top().getCurrentBuffer(), pFFValue, nullptr);
- }
- m_aFormfieldAttributes.clear();
- m_aFormfieldSprms.clear();
- singleChar(cFieldSep);
- }
- break;
- case Destination::FIELDRESULT:
- singleChar(cFieldEnd);
-
- if (!m_aPicturePath.isEmpty())
- {
- // Read the picture into m_aStates.top().aDestinationText.
- pushState();
- dispatchDestination(RTF_PICT);
- if (m_aPicturePath.endsWith(".png"))
- dispatchFlag(RTF_PNGBLIP);
- OUString aFileURL = m_rMediaDescriptor.getUnpackedValueOrDefault(
- utl::MediaDescriptor::PROP_URL(), OUString());
- OUString aPictureURL;
- try
- {
- aPictureURL = rtl::Uri::convertRelToAbs(aFileURL, m_aPicturePath);
- }
- catch (const rtl::MalformedUriException& rException)
- {
- SAL_WARN("writerfilter.rtf",
- "rtl::Uri::convertRelToAbs() failed: " << rException.getMessage());
- }
-
- if (!aPictureURL.isEmpty())
- {
- SvFileStream aStream(aPictureURL, StreamMode::READ);
- if (aStream.IsOpen())
- {
- OUStringBuffer aBuf;
- while (aStream.good())
- {
- unsigned char ch = 0;
- aStream.ReadUChar(ch);
- if (ch < 16)
- aBuf.append("0");
- aBuf.append(OUString::number(ch, 16));
- }
- m_aStates.top().getDestinationText() = aBuf;
- }
- }
- popState();
- m_aPicturePath.clear();
- }
-
- break;
- case Destination::LEVELTEXT:
- {
- if (&m_aStates.top().getDestinationText()
- != m_aStates.top().getCurrentDestinationText())
- break; // not for nested group
- OUString aStr = m_aStates.top().getCurrentDestinationText()->makeStringAndClear();
-
- // The first character is the length of the string (the rest should be ignored).
- sal_Int32 nLength(aStr.toChar());
- OUString aValue;
- if (nLength < aStr.getLength())
- aValue = aStr.copy(1, nLength);
- else
- aValue = aStr;
- auto pValue = new RTFValue(aValue, true);
- rState.getTableAttributes().set(NS_ooxml::LN_CT_LevelText_val, pValue);
- }
- break;
- case Destination::LEVELNUMBERS:
- {
- bool bNestedLevelNumbers = false;
- if (m_aStates.size() > 1)
- // Current destination is levelnumbers and parent destination is levelnumbers as well.
- bNestedLevelNumbers
- = m_aStates[m_aStates.size() - 2].getDestination() == Destination::LEVELNUMBERS;
- if (!bNestedLevelNumbers && rState.getTableSprms().find(NS_ooxml::LN_CT_Lvl_lvlText))
- {
- RTFSprms& rAttributes
- = rState.getTableSprms().find(NS_ooxml::LN_CT_Lvl_lvlText)->getAttributes();
- RTFValue::Pointer_t pValue = rAttributes.find(NS_ooxml::LN_CT_LevelText_val);
- if (pValue && rState.getLevelNumbersValid())
- {
- OUString aOrig = pValue->getString();
-
- OUStringBuffer aBuf(aOrig.getLength() * 2);
- sal_Int32 nReplaces = 1;
- for (int i = 0; i < aOrig.getLength(); i++)
- {
- if (std::find(rState.getLevelNumbers().begin(),
- rState.getLevelNumbers().end(), i + 1)
- != rState.getLevelNumbers().end())
- {
- aBuf.append('%');
- // '1.1.1' -> '%1.%2.%3', but '1.' (with '2.' prefix omitted) is %2.
- aBuf.append(sal_Int32(nReplaces++ + rState.getListLevelNum() + 1
- - rState.getLevelNumbers().size()));
- }
- else
- aBuf.append(aOrig[i]);
- }
-
- pValue->setString(aBuf.makeStringAndClear());
- }
- else if (pValue)
- // Have a value, but levelnumbers is not valid -> ignore it.
- pValue->setString(OUString());
- }
- break;
- }
- case Destination::SHAPEPROPERTYNAME:
- if (&m_aStates.top().getDestinationText()
- != m_aStates.top().getCurrentDestinationText())
- break; // not for nested group
- rState.getShape().getProperties().emplace_back(
- m_aStates.top().getCurrentDestinationText()->makeStringAndClear(), OUString());
- break;
- case Destination::SHAPEPROPERTYVALUE:
- if (!rState.getShape().getProperties().empty())
- {
- rState.getShape().getProperties().back().second
- = m_aStates.top().getCurrentDestinationText()->makeStringAndClear();
- if (m_aStates.top().getHadShapeText())
- m_pSdrImport->append(rState.getShape().getProperties().back().first,
- rState.getShape().getProperties().back().second);
- else if (rState.getInShapeGroup() && !rState.getInShape()
- && rState.getShape().getProperties().back().first == "rotation")
- {
- // Rotation should be applied on the groupshape itself, not on each shape.
- rState.getShape().getGroupProperties().push_back(
- rState.getShape().getProperties().back());
- rState.getShape().getProperties().pop_back();
- }
- }
- break;
- case Destination::PICPROP:
- case Destination::SHAPEINSTRUCTION:
- if (m_aStates.size() > 1
- && m_aStates[m_aStates.size() - 2].getDestination()
- == Destination::SHAPEINSTRUCTION)
- {
- // Do not resolve shape if shape instruction destination is inside other shape instruction
- }
- else if (!m_bObject && !rState.getInListpicture() && !rState.getHadShapeText()
- && (!rState.getInShapeGroup() || rState.getInShape()))
- {
- // Don't trigger a shape import in case we're only leaving the \shpinst of the groupshape itself.
- RTFSdrImport::ShapeOrPict eType
- = (rState.getDestination() == Destination::SHAPEINSTRUCTION)
- ? RTFSdrImport::SHAPE
- : RTFSdrImport::PICT;
- if (!m_aStates.top().getCurrentBuffer() || eType != RTFSdrImport::SHAPE)
- m_pSdrImport->resolve(m_aStates.top().getShape(), true, eType);
- else
- {
- // Shape inside table: buffer the import to have correct anchor position.
- // Also buffer the RTFPicture of the state stack as it contains
- // the shape size.
- auto pPictureValue = new RTFValue(m_aStates.top().getPicture());
- m_aStates.top().getCurrentBuffer()->push_back(
- Buf_t(BUFFER_PICTURE, pPictureValue, nullptr));
- auto pValue = new RTFValue(m_aStates.top().getShape());
-
- // Buffer wrap type.
- for (const auto& rCharacterSprm : m_aStates.top().getCharacterSprms())
- {
- if (rCharacterSprm.first == NS_ooxml::LN_EG_WrapType_wrapNone
- || rCharacterSprm.first == NS_ooxml::LN_EG_WrapType_wrapTight)
- {
- m_aStates.top().getShape().getWrapSprm() = rCharacterSprm;
- break;
- }
- }
-
- m_aStates.top().getCurrentBuffer()->push_back(
- Buf_t(BUFFER_RESOLVESHAPE, pValue, nullptr));
- }
- }
- else if (rState.getInShapeGroup() && !rState.getInShape())
- {
- // End of a groupshape, as we're in shapegroup, but not in a real shape.
- for (const auto& rGroupProperty : rState.getShape().getGroupProperties())
- m_pSdrImport->appendGroupProperty(rGroupProperty.first, rGroupProperty.second);
- rState.getShape().getGroupProperties().clear();
- }
- break;
- case Destination::BOOKMARKSTART:
- {
- if (&m_aStates.top().getDestinationText()
- != m_aStates.top().getCurrentDestinationText())
- break; // not for nested group
- OUString aStr = m_aStates.top().getCurrentDestinationText()->makeStringAndClear();
- int nPos = m_aBookmarks.size();
- m_aBookmarks[aStr] = nPos;
- if (!m_aStates.top().getCurrentBuffer())
- Mapper().props(new RTFReferenceProperties(lcl_getBookmarkProperties(nPos, aStr)));
- else
- bufferProperties(*m_aStates.top().getCurrentBuffer(),
- new RTFValue(lcl_getBookmarkProperties(nPos, aStr)), nullptr);
- }
- break;
- case Destination::BOOKMARKEND:
- {
- if (&m_aStates.top().getDestinationText()
- != m_aStates.top().getCurrentDestinationText())
- break; // not for nested group
- OUString aStr = m_aStates.top().getCurrentDestinationText()->makeStringAndClear();
- if (!m_aStates.top().getCurrentBuffer())
- Mapper().props(new RTFReferenceProperties(
- lcl_getBookmarkProperties(m_aBookmarks[aStr], aStr)));
- else
- bufferProperties(*m_aStates.top().getCurrentBuffer(),
- new RTFValue(lcl_getBookmarkProperties(m_aBookmarks[aStr], aStr)),
- nullptr);
- }
- break;
- case Destination::INDEXENTRY:
- case Destination::TOCENTRY:
- {
- if (&m_aStates.top().getDestinationText()
- != m_aStates.top().getCurrentDestinationText())
- break; // not for nested group
- OUString str(m_aStates.top().getCurrentDestinationText()->makeStringAndClear());
- // dmapper expects this as a field, so let's fake something...
- auto const field((Destination::INDEXENTRY == rState.getDestination())
- ? OUStringLiteral(u"XE")
- : OUStringLiteral(u"TC"));
- str = field + " \"" + str.replaceAll("\"", "\\\"") + "\"";
- singleChar(cFieldStart);
- Mapper().utext(reinterpret_cast<sal_uInt8 const*>(str.getStr()), str.getLength());
- singleChar(cFieldSep);
- // no result
- singleChar(cFieldEnd);
- }
- break;
- case Destination::FORMFIELDNAME:
- {
- if (&m_aStates.top().getDestinationText()
- != m_aStates.top().getCurrentDestinationText())
- break; // not for nested group
- auto pValue
- = new RTFValue(m_aStates.top().getCurrentDestinationText()->makeStringAndClear());
- m_aFormfieldSprms.set(NS_ooxml::LN_CT_FFData_name, pValue);
- }
- break;
- case Destination::FORMFIELDLIST:
- {
- if (&m_aStates.top().getDestinationText()
- != m_aStates.top().getCurrentDestinationText())
- break; // not for nested group
- auto pValue
- = new RTFValue(m_aStates.top().getCurrentDestinationText()->makeStringAndClear());
- m_aFormfieldSprms.set(NS_ooxml::LN_CT_FFDDList_listEntry, pValue);
- }
- break;
- case Destination::DATAFIELD:
- {
- if (m_bFormField)
- {
- if (&m_aStates.top().getDestinationText()
- != m_aStates.top().getCurrentDestinationText())
- break; // not for nested group
- OString aStr = OUStringToOString(
- m_aStates.top().getCurrentDestinationText()->makeStringAndClear(),
- rState.getCurrentEncoding());
- // decode hex dump
- OStringBuffer aBuf;
- int b = 0;
- int count = 2;
- for (int i = 0; i < aStr.getLength(); ++i)
- {
- char ch = aStr[i];
- if (ch != 0x0d && ch != 0x0a)
- {
- b = b << 4;
- sal_Int8 parsed = msfilter::rtfutil::AsHex(ch);
- if (parsed == -1)
- return RTFError::HEX_INVALID;
- b += parsed;
- count--;
- if (!count)
- {
- aBuf.append(static_cast<char>(b));
- count = 2;
- b = 0;
- }
- }
- }
- aStr = aBuf.makeStringAndClear();
-
- // ignore the first bytes
- if (aStr.getLength() > 8)
- aStr = aStr.copy(8);
- // extract name
- sal_Int32 nLength = aStr.toChar();
- if (!aStr.isEmpty())
- aStr = aStr.copy(1);
- nLength = std::min(nLength, aStr.getLength());
- OString aName = aStr.copy(0, nLength);
- if (aStr.getLength() > nLength)
- aStr = aStr.copy(nLength + 1); // zero-terminated string
- else
- aStr.clear();
- // extract default text
- nLength = aStr.toChar();
- if (!aStr.isEmpty())
- aStr = aStr.copy(1);
- auto pNValue = new RTFValue(OStringToOUString(aName, rState.getCurrentEncoding()));
- m_aFormfieldSprms.set(NS_ooxml::LN_CT_FFData_name, pNValue);
- if (nLength > 0)
- {
- OString aDefaultText = aStr.copy(0, std::min(nLength, aStr.getLength()));
- auto pDValue = new RTFValue(
- OStringToOUString(aDefaultText, rState.getCurrentEncoding()));
- m_aFormfieldSprms.set(NS_ooxml::LN_CT_FFTextInput_default, pDValue);
- }
-
- m_bFormField = false;
- }
- }
- break;
- case Destination::CREATIONTIME:
- if (m_xDocumentProperties.is())
- m_xDocumentProperties->setCreationDate(lcl_getDateTime(rState));
- break;
- case Destination::REVISIONTIME:
- if (m_xDocumentProperties.is())
- m_xDocumentProperties->setModificationDate(lcl_getDateTime(rState));
- break;
- case Destination::PRINTTIME:
- if (m_xDocumentProperties.is())
- m_xDocumentProperties->setPrintDate(lcl_getDateTime(rState));
- break;
- case Destination::AUTHOR:
- if (&m_aStates.top().getDestinationText()
- != m_aStates.top().getCurrentDestinationText())
- break; // not for nested group
- if (m_xDocumentProperties.is())
- m_xDocumentProperties->setAuthor(
- m_aStates.top().getCurrentDestinationText()->makeStringAndClear());
- break;
- case Destination::KEYWORDS:
- if (&m_aStates.top().getDestinationText()
- != m_aStates.top().getCurrentDestinationText())
- break; // not for nested group
- if (m_xDocumentProperties.is())
- m_xDocumentProperties->setKeywords(comphelper::string::convertCommaSeparated(
- m_aStates.top().getCurrentDestinationText()->makeStringAndClear()));
- break;
- case Destination::COMMENT:
- if (&m_aStates.top().getDestinationText()
- != m_aStates.top().getCurrentDestinationText())
- break; // not for nested group
- if (m_xDocumentProperties.is())
- m_xDocumentProperties->setGenerator(
- m_aStates.top().getCurrentDestinationText()->makeStringAndClear());
- break;
- case Destination::SUBJECT:
- if (&m_aStates.top().getDestinationText()
- != m_aStates.top().getCurrentDestinationText())
- break; // not for nested group
- if (m_xDocumentProperties.is())
- m_xDocumentProperties->setSubject(
- m_aStates.top().getCurrentDestinationText()->makeStringAndClear());
- break;
- case Destination::TITLE:
- {
- if (&m_aStates.top().getDestinationText()
- != m_aStates.top().getCurrentDestinationText())
- break; // not for nested group
- if (m_xDocumentProperties.is())
- m_xDocumentProperties->setTitle(
- rState.getCurrentDestinationText()->makeStringAndClear());
- }
- break;
-
- case Destination::DOCCOMM:
- if (&m_aStates.top().getDestinationText()
- != m_aStates.top().getCurrentDestinationText())
- break; // not for nested group
- if (m_xDocumentProperties.is())
- m_xDocumentProperties->setDescription(
- m_aStates.top().getCurrentDestinationText()->makeStringAndClear());
- break;
- case Destination::OPERATOR:
- case Destination::COMPANY:
- {
- if (&m_aStates.top().getDestinationText()
- != m_aStates.top().getCurrentDestinationText())
- break; // not for nested group
- OUString aName = rState.getDestination() == Destination::OPERATOR ? OUString("Operator")
- : OUString("Company");
- uno::Any aValue
- = uno::makeAny(m_aStates.top().getCurrentDestinationText()->makeStringAndClear());
- if (m_xDocumentProperties.is())
- {
- uno::Reference<beans::XPropertyContainer> xUserDefinedProperties
- = m_xDocumentProperties->getUserDefinedProperties();
- uno::Reference<beans::XPropertySet> xPropertySet(xUserDefinedProperties,
- uno::UNO_QUERY);
- uno::Reference<beans::XPropertySetInfo> xPropertySetInfo
- = xPropertySet->getPropertySetInfo();
- if (xPropertySetInfo->hasPropertyByName(aName))
- xPropertySet->setPropertyValue(aName, aValue);
- else
- xUserDefinedProperties->addProperty(aName, beans::PropertyAttribute::REMOVABLE,
- aValue);
- }
- }
- break;
- case Destination::OBJDATA:
- {
- if (&m_aStates.top().getDestinationText()
- != m_aStates.top().getCurrentDestinationText())
- break; // not for nested group
-
- RTFError eError = handleEmbeddedObject();
- if (eError != RTFError::OK)
- return eError;
- }
- break;
- case Destination::OBJCLASS:
- {
- auto pValue
- = new RTFValue(m_aStates.top().getCurrentDestinationText()->makeStringAndClear());
- m_aOLEAttributes.set(NS_ooxml::LN_CT_OLEObject_ProgID, pValue);
- break;
- }
- case Destination::OBJECT:
- {
- if (!m_bObject)
- {
- // if the object is in a special container we will use the \result
- // element instead of the \objdata
- // (see RTF_OBJECT in RTFDocumentImpl::dispatchDestination)
- break;
- }
-
- RTFSprms aObjectSprms;
- auto pOLEValue = new RTFValue(m_aOLEAttributes);
- aObjectSprms.set(NS_ooxml::LN_OLEObject_OLEObject, pOLEValue);
-
- RTFSprms aObjAttributes;
- RTFSprms aObjSprms;
- auto pValue = new RTFValue(m_aObjectAttributes, aObjectSprms);
- aObjSprms.set(NS_ooxml::LN_object, pValue);
- writerfilter::Reference<Properties>::Pointer_t pProperties
- = new RTFReferenceProperties(aObjAttributes, aObjSprms);
- uno::Reference<drawing::XShape> xShape;
- RTFValue::Pointer_t pShape = m_aObjectAttributes.find(NS_ooxml::LN_shape);
- OSL_ASSERT(pShape);
- if (pShape)
- pShape->getAny() >>= xShape;
- if (xShape.is())
- {
- Mapper().startShape(xShape);
- Mapper().props(pProperties);
- Mapper().endShape();
- }
- m_aObjectAttributes.clear();
- m_aOLEAttributes.clear();
- m_bObject = false;
- }
- break;
- case Destination::ANNOTATIONDATE:
- {
- if (&m_aStates.top().getDestinationText()
- != m_aStates.top().getCurrentDestinationText())
- break; // not for nested group
- OUString aStr(OStringToOUString(
- DTTM22OString(
- m_aStates.top().getCurrentDestinationText()->makeStringAndClear().toInt32()),
- rState.getCurrentEncoding()));
- auto pValue = new RTFValue(aStr);
- RTFSprms aAnnAttributes;
- aAnnAttributes.set(NS_ooxml::LN_CT_TrackChange_date, pValue);
- writerfilter::Reference<Properties>::Pointer_t pProperties
- = new RTFReferenceProperties(aAnnAttributes);
- Mapper().props(pProperties);
- }
- break;
- case Destination::ANNOTATIONAUTHOR:
- if (&m_aStates.top().getDestinationText()
- != m_aStates.top().getCurrentDestinationText())
- break; // not for nested group
- m_aAuthor = m_aStates.top().getCurrentDestinationText()->makeStringAndClear();
- break;
- case Destination::ATNID:
- if (&m_aStates.top().getDestinationText()
- != m_aStates.top().getCurrentDestinationText())
- break; // not for nested group
- m_aAuthorInitials = m_aStates.top().getCurrentDestinationText()->makeStringAndClear();
- break;
- case Destination::ANNOTATIONREFERENCESTART:
- case Destination::ANNOTATIONREFERENCEEND:
- {
- if (&m_aStates.top().getDestinationText()
- != m_aStates.top().getCurrentDestinationText())
- break; // not for nested group
- OUString aStr = m_aStates.top().getCurrentDestinationText()->makeStringAndClear();
- auto pValue = new RTFValue(aStr.toInt32());
- RTFSprms aAttributes;
- if (rState.getDestination() == Destination::ANNOTATIONREFERENCESTART)
- aAttributes.set(NS_ooxml::LN_EG_RangeMarkupElements_commentRangeStart, pValue);
- else
- aAttributes.set(NS_ooxml::LN_EG_RangeMarkupElements_commentRangeEnd, pValue);
- writerfilter::Reference<Properties>::Pointer_t pProperties
- = new RTFReferenceProperties(aAttributes);
- if (!m_aStates.top().getCurrentBuffer())
- {
- Mapper().props(pProperties);
- }
- else
- {
- auto const pValue2 = new RTFValue(aAttributes, RTFSprms());
- bufferProperties(*m_aStates.top().getCurrentBuffer(), pValue2, nullptr);
- }
- }
- break;
- case Destination::ANNOTATIONREFERENCE:
- {
- if (&m_aStates.top().getDestinationText()
- != m_aStates.top().getCurrentDestinationText())
- break; // not for nested group
- OUString aStr = m_aStates.top().getCurrentDestinationText()->makeStringAndClear();
- RTFSprms aAnnAttributes;
- aAnnAttributes.set(NS_ooxml::LN_CT_Markup_id, new RTFValue(aStr.toInt32()));
- Mapper().props(new RTFReferenceProperties(aAnnAttributes));
- }
- break;
- case Destination::FALT:
- {
- if (&m_aStates.top().getDestinationText()
- != m_aStates.top().getCurrentDestinationText())
- break; // not for nested group
- OUString aStr(m_aStates.top().getCurrentDestinationText()->makeStringAndClear());
- auto pValue = new RTFValue(aStr);
- rState.getTableSprms().set(NS_ooxml::LN_CT_Font_altName, pValue);
- }
- break;
- case Destination::DRAWINGOBJECT:
- if (m_aStates.top().getDrawingObject().getShape().is())
- {
- RTFDrawingObject& rDrawing = m_aStates.top().getDrawingObject();
- const uno::Reference<drawing::XShape>& xShape(rDrawing.getShape());
- const uno::Reference<beans::XPropertySet>& xPropertySet(rDrawing.getPropertySet());
-
- uno::Reference<lang::XServiceInfo> xServiceInfo(xShape, uno::UNO_QUERY);
- bool bTextFrame = xServiceInfo->supportsService("com.sun.star.text.TextFrame");
-
- // The default is certainly not inline, but then what Word supports is just at-character.
- xPropertySet->setPropertyValue(
- "AnchorType", uno::makeAny(text::TextContentAnchorType_AT_CHARACTER));
-
- if (bTextFrame)
- {
- xPropertySet->setPropertyValue("HoriOrientPosition",
- uno::makeAny(rDrawing.getLeft()));
- xPropertySet->setPropertyValue("VertOrientPosition",
- uno::makeAny(rDrawing.getTop()));
- }
- else
- {
- xShape->setPosition(awt::Point(rDrawing.getLeft(), rDrawing.getTop()));
- }
- xShape->setSize(awt::Size(rDrawing.getRight(), rDrawing.getBottom()));
-
- if (rDrawing.getHasLineColor())
- {
- uno::Any aLineColor = uno::makeAny(sal_uInt32((rDrawing.getLineColorR() << 16)
- + (rDrawing.getLineColorG() << 8)
- + rDrawing.getLineColorB()));
- uno::Any aLineWidth;
- RTFSdrImport::resolveLineColorAndWidth(bTextFrame, xPropertySet, aLineColor,
- aLineWidth);
- }
- if (rDrawing.getHasFillColor())
- xPropertySet->setPropertyValue(
- "FillColor", uno::makeAny(sal_uInt32((rDrawing.getFillColorR() << 16)
- + (rDrawing.getFillColorG() << 8)
- + rDrawing.getFillColorB())));
- else if (!bTextFrame)
- // If there is no fill, the Word default is 100% transparency.
- xPropertySet->setPropertyValue("FillTransparence",
- uno::makeAny(sal_Int32(100)));
-
- RTFSdrImport::resolveFLine(xPropertySet, rDrawing.getFLine());
-
- if (!m_aStates.top().getDrawingObject().getHadShapeText())
- {
- Mapper().startShape(xShape);
- }
- Mapper().endShape();
- }
- break;
- case Destination::PICT:
- // fdo#79319 ignore picture data if it's really a shape
- if (!m_pSdrImport->isFakePict())
- {
- resolvePict(true, m_pSdrImport->getCurrentShape());
- }
- m_bNeedFinalPar = true;
- break;
- case Destination::SHAPE:
- m_bNeedFinalPar = true;
- m_bNeedCr = m_bNeedCrOrig;
- if (rState.getFrame().inFrame())
- {
- // parBreak() modifies m_aStates.top() so we can't apply resetFrame() directly on aState
- resetFrame();
- parBreak();
- // Save this state for later use, so we only reset frame status only for the first shape inside a frame.
- rState = m_aStates.top();
- m_bNeedPap = true;
- }
- break;
- case Destination::MOMATH:
- {
- m_aMathBuffer.appendClosingTag(M_TOKEN(oMath));
-
- SvGlobalName aGlobalName(SO3_SM_CLASSID);
- comphelper::EmbeddedObjectContainer aContainer;
- OUString aName;
- uno::Reference<embed::XEmbeddedObject> xObject
- = aContainer.CreateEmbeddedObject(aGlobalName.GetByteSequence(), aName);
- if (xObject) // rhbz#1766990 starmath might not be available
- {
- uno::Reference<util::XCloseable> xComponent(xObject->getComponent(),
- uno::UNO_SET_THROW);
- // gcc4.4 (and 4.3 and possibly older) have a problem with dynamic_cast directly to the target class,
- // so help it with an intermediate cast. I'm not sure what exactly the problem is, seems to be unrelated
- // to RTLD_GLOBAL, so most probably a gcc bug.
- auto& rImport = dynamic_cast<oox::FormulaImportBase&>(
- dynamic_cast<SfxBaseModel&>(*xComponent));
- rImport.readFormulaOoxml(m_aMathBuffer);
-
- auto pValue = new RTFValue(xObject);
- RTFSprms aMathAttributes;
- aMathAttributes.set(NS_ooxml::LN_starmath, pValue);
- writerfilter::Reference<Properties>::Pointer_t pProperties
- = new RTFReferenceProperties(aMathAttributes);
- Mapper().props(pProperties);
- }
-
- m_aMathBuffer = oox::formulaimport::XmlStreamBuilder();
- }
- break;
- case Destination::MR:
- lcl_DestinationToMath(m_aStates.top().getCurrentDestinationText(), m_aMathBuffer,
- m_bMathNor);
- break;
- case Destination::MF:
- m_aMathBuffer.appendClosingTag(M_TOKEN(f));
- break;
- case Destination::MFPR:
- m_aMathBuffer.appendClosingTag(M_TOKEN(fPr));
- break;
- case Destination::MCTRLPR:
- m_aMathBuffer.appendClosingTag(M_TOKEN(ctrlPr));
- break;
- case Destination::MNUM:
- m_aMathBuffer.appendClosingTag(M_TOKEN(num));
- break;
- case Destination::MDEN:
- m_aMathBuffer.appendClosingTag(M_TOKEN(den));
- break;
- case Destination::MACC:
- m_aMathBuffer.appendClosingTag(M_TOKEN(acc));
- break;
- case Destination::MACCPR:
- m_aMathBuffer.appendClosingTag(M_TOKEN(accPr));
- break;
- case Destination::MCHR:
- case Destination::MPOS:
- case Destination::MVERTJC:
- case Destination::MSTRIKEH:
- case Destination::MDEGHIDE:
- case Destination::MBEGCHR:
- case Destination::MSEPCHR:
- case Destination::MENDCHR:
- case Destination::MSUBHIDE:
- case Destination::MSUPHIDE:
- case Destination::MTYPE:
- case Destination::MGROW:
- {
- sal_Int32 nMathToken = 0;
- switch (rState.getDestination())
- {
- case Destination::MCHR:
- nMathToken = M_TOKEN(chr);
- break;
- case Destination::MPOS:
- nMathToken = M_TOKEN(pos);
- break;
- case Destination::MVERTJC:
- nMathToken = M_TOKEN(vertJc);
- break;
- case Destination::MSTRIKEH:
- nMathToken = M_TOKEN(strikeH);
- break;
- case Destination::MDEGHIDE:
- nMathToken = M_TOKEN(degHide);
- break;
- case Destination::MBEGCHR:
- nMathToken = M_TOKEN(begChr);
- break;
- case Destination::MSEPCHR:
- nMathToken = M_TOKEN(sepChr);
- break;
- case Destination::MENDCHR:
- nMathToken = M_TOKEN(endChr);
- break;
- case Destination::MSUBHIDE:
- nMathToken = M_TOKEN(subHide);
- break;
- case Destination::MSUPHIDE:
- nMathToken = M_TOKEN(supHide);
- break;
- case Destination::MTYPE:
- nMathToken = M_TOKEN(type);
- break;
- case Destination::MGROW:
- nMathToken = M_TOKEN(grow);
- break;
- default:
- break;
- }
-
- oox::formulaimport::XmlStream::AttributeList aAttribs;
- aAttribs[M_TOKEN(val)]
- = m_aStates.top().getCurrentDestinationText()->makeStringAndClear();
- m_aMathBuffer.appendOpeningTag(nMathToken, aAttribs);
- m_aMathBuffer.appendClosingTag(nMathToken);
- }
- break;
- case Destination::ME:
- m_aMathBuffer.appendClosingTag(M_TOKEN(e));
- break;
- case Destination::MBAR:
- m_aMathBuffer.appendClosingTag(M_TOKEN(bar));
- break;
- case Destination::MBARPR:
- m_aMathBuffer.appendClosingTag(M_TOKEN(barPr));
- break;
- case Destination::MD:
- m_aMathBuffer.appendClosingTag(M_TOKEN(d));
- break;
- case Destination::MDPR:
- m_aMathBuffer.appendClosingTag(M_TOKEN(dPr));
- break;
- case Destination::MFUNC:
- m_aMathBuffer.appendClosingTag(M_TOKEN(func));
- break;
- case Destination::MFUNCPR:
- m_aMathBuffer.appendClosingTag(M_TOKEN(funcPr));
- break;
- case Destination::MFNAME:
- m_aMathBuffer.appendClosingTag(M_TOKEN(fName));
- break;
- case Destination::MLIMLOW:
- m_aMathBuffer.appendClosingTag(M_TOKEN(limLow));
- break;
- case Destination::MLIMLOWPR:
- m_aMathBuffer.appendClosingTag(M_TOKEN(limLowPr));
- break;
- case Destination::MLIM:
- m_aMathBuffer.appendClosingTag(M_TOKEN(lim));
- break;
- case Destination::MM:
- m_aMathBuffer.appendClosingTag(M_TOKEN(m));
- break;
- case Destination::MMPR:
- m_aMathBuffer.appendClosingTag(M_TOKEN(mPr));
- break;
- case Destination::MMR:
- m_aMathBuffer.appendClosingTag(M_TOKEN(mr));
- break;
- case Destination::MNARY:
- m_aMathBuffer.appendClosingTag(M_TOKEN(nary));
- break;
- case Destination::MNARYPR:
- m_aMathBuffer.appendClosingTag(M_TOKEN(naryPr));
- break;
- case Destination::MSUB:
- m_aMathBuffer.appendClosingTag(M_TOKEN(sub));
- break;
- case Destination::MSUP:
- m_aMathBuffer.appendClosingTag(M_TOKEN(sup));
- break;
- case Destination::MLIMUPP:
- m_aMathBuffer.appendClosingTag(M_TOKEN(limUpp));
- break;
- case Destination::MLIMUPPPR:
- m_aMathBuffer.appendClosingTag(M_TOKEN(limUppPr));
- break;
- case Destination::MGROUPCHR:
- m_aMathBuffer.appendClosingTag(M_TOKEN(groupChr));
- break;
- case Destination::MGROUPCHRPR:
- m_aMathBuffer.appendClosingTag(M_TOKEN(groupChrPr));
- break;
- case Destination::MBORDERBOX:
- m_aMathBuffer.appendClosingTag(M_TOKEN(borderBox));
- break;
- case Destination::MBORDERBOXPR:
- m_aMathBuffer.appendClosingTag(M_TOKEN(borderBoxPr));
- break;
- case Destination::MRAD:
- m_aMathBuffer.appendClosingTag(M_TOKEN(rad));
- break;
- case Destination::MRADPR:
- m_aMathBuffer.appendClosingTag(M_TOKEN(radPr));
- break;
- case Destination::MDEG:
- m_aMathBuffer.appendClosingTag(M_TOKEN(deg));
- break;
- case Destination::MSSUB:
- m_aMathBuffer.appendClosingTag(M_TOKEN(sSub));
- break;
- case Destination::MSSUBPR:
- m_aMathBuffer.appendClosingTag(M_TOKEN(sSubPr));
- break;
- case Destination::MSSUP:
- m_aMathBuffer.appendClosingTag(M_TOKEN(sSup));
- break;
- case Destination::MSSUPPR:
- m_aMathBuffer.appendClosingTag(M_TOKEN(sSupPr));
- break;
- case Destination::MSSUBSUP:
- m_aMathBuffer.appendClosingTag(M_TOKEN(sSubSup));
- break;
- case Destination::MSSUBSUPPR:
- m_aMathBuffer.appendClosingTag(M_TOKEN(sSubSupPr));
- break;
- case Destination::MSPRE:
- m_aMathBuffer.appendClosingTag(M_TOKEN(sPre));
- break;
- case Destination::MSPREPR:
- m_aMathBuffer.appendClosingTag(M_TOKEN(sPrePr));
- break;
- case Destination::MBOX:
- m_aMathBuffer.appendClosingTag(M_TOKEN(box));
- break;
- case Destination::MEQARR:
- m_aMathBuffer.appendClosingTag(M_TOKEN(eqArr));
- break;
- case Destination::SHAPEGROUP:
- if (rState.getCreatedShapeGroup())
- m_pSdrImport->popParent();
- break;
- case Destination::PROPNAME:
- if (&m_aStates.top().getDestinationText()
- != m_aStates.top().getCurrentDestinationText())
- break; // not for nested group
- rState.setPropName(m_aStates.top().getCurrentDestinationText()->makeStringAndClear());
- break;
- case Destination::STATICVAL:
- if (&m_aStates.top().getDestinationText()
- != m_aStates.top().getCurrentDestinationText())
- break; // not for nested group
- if (m_xDocumentProperties.is())
- {
- // Find out what is the key, value type and value we want to set.
- uno::Reference<beans::XPropertyContainer> xPropertyContainer
- = m_xDocumentProperties->getUserDefinedProperties();
- const OUString& rKey = m_aStates.top().getPropName();
- OUString aStaticVal
- = m_aStates.top().getCurrentDestinationText()->makeStringAndClear();
- uno::Any aAny;
- if (m_aStates.top().getPropType() == cppu::UnoType<OUString>::get())
- aAny <<= aStaticVal;
- else if (m_aStates.top().getPropType() == cppu::UnoType<sal_Int32>::get())
- aAny <<= aStaticVal.toInt32();
- else if (m_aStates.top().getPropType() == cppu::UnoType<bool>::get())
- aAny <<= aStaticVal.toBoolean();
- else if (m_aStates.top().getPropType() == cppu::UnoType<util::DateTime>::get())
- aAny <<= getDateTimeFromUserProp(aStaticVal);
- else if (m_aStates.top().getPropType() == cppu::UnoType<double>::get())
- aAny <<= aStaticVal.toDouble();
-
- xPropertyContainer->addProperty(rKey, beans::PropertyAttribute::REMOVABLE, aAny);
- }
- break;
- case Destination::USERPROPS:
- {
- // These are the imported properties.
- uno::Reference<document::XDocumentProperties> xDocumentProperties
- = m_xDocumentProperties;
-
- // These are the real document properties.
- uno::Reference<document::XDocumentPropertiesSupplier> xDocumentPropertiesSupplier(
- m_xDstDoc, uno::UNO_QUERY);
- if (xDocumentPropertiesSupplier.is())
- m_xDocumentProperties = xDocumentPropertiesSupplier->getDocumentProperties();
-
- if (m_xDocumentProperties.is())
- {
- if (!m_bIsNewDoc)
- {
- // Check classification.
- if (!SfxClassificationHelper::ShowPasteInfo(SfxClassificationHelper::CheckPaste(
- xDocumentProperties, m_xDocumentProperties)))
- return RTFError::CLASSIFICATION;
- }
-
- uno::Reference<beans::XPropertyContainer> xClipboardPropertyContainer
- = xDocumentProperties->getUserDefinedProperties();
- uno::Reference<beans::XPropertyContainer> xDocumentPropertyContainer
- = m_xDocumentProperties->getUserDefinedProperties();
- uno::Reference<beans::XPropertySet> xClipboardPropertySet(
- xClipboardPropertyContainer, uno::UNO_QUERY);
- uno::Reference<beans::XPropertySet> xDocumentPropertySet(xDocumentPropertyContainer,
- uno::UNO_QUERY);
- const uno::Sequence<beans::Property> aClipboardProperties
- = xClipboardPropertySet->getPropertySetInfo()->getProperties();
- uno::Sequence<beans::Property> aDocumentProperties
- = xDocumentPropertySet->getPropertySetInfo()->getProperties();
-
- for (const beans::Property& rProperty : aClipboardProperties)
- {
- const OUString& rKey = rProperty.Name;
- uno::Any aValue = xClipboardPropertySet->getPropertyValue(rKey);
-
- try
- {
- if (lcl_containsProperty(aDocumentProperties, rKey))
- {
- // When pasting, don't update existing properties.
- if (!m_bIsNewDoc)
- xDocumentPropertySet->setPropertyValue(rKey, aValue);
- }
- else
- xDocumentPropertyContainer->addProperty(
- rKey, beans::PropertyAttribute::REMOVABLE, aValue);
- }
- catch (const uno::Exception&)
- {
- TOOLS_WARN_EXCEPTION("writerfilter.rtf", "failed to set property " << rKey);
- }
- }
- }
- }
- break;
- default:
- break;
- }
-
- return RTFError::OK;
-}
-
-void RTFDocumentImpl::afterPopState(RTFParserState& rState)
-{
- // list table
- switch (rState.getDestination())
- {
- case Destination::LISTENTRY:
- {
- auto pValue = new RTFValue(rState.getTableAttributes(), rState.getTableSprms());
- m_aListTableSprms.set(NS_ooxml::LN_CT_Numbering_abstractNum, pValue,
- RTFOverwrite::NO_APPEND);
- m_aListTable[rState.getCurrentListIndex()] = pValue;
- m_nListLevel = -1;
- m_aInvalidListTableFirstIndents[rState.getCurrentListIndex()]
- = m_aInvalidListLevelFirstIndents;
- m_aInvalidListLevelFirstIndents.clear();
- }
- break;
- case Destination::PARAGRAPHNUMBERING:
- {
- RTFValue::Pointer_t pIdValue
- = rState.getTableAttributes().find(NS_ooxml::LN_CT_AbstractNum_nsid);
- if (pIdValue && !m_aStates.empty())
- {
- // Abstract numbering
- RTFSprms aLeveltextAttributes;
- OUString aTextValue;
- RTFValue::Pointer_t pTextBefore
- = rState.getTableAttributes().find(NS_ooxml::LN_CT_LevelText_val);
- if (pTextBefore)
- aTextValue += pTextBefore->getString();
- aTextValue += "%1";
- RTFValue::Pointer_t pTextAfter
- = rState.getTableAttributes().find(NS_ooxml::LN_CT_LevelSuffix_val);
- if (pTextAfter)
- aTextValue += pTextAfter->getString();
- auto pTextValue = new RTFValue(aTextValue);
- aLeveltextAttributes.set(NS_ooxml::LN_CT_LevelText_val, pTextValue);
-
- RTFSprms aLevelAttributes;
- RTFSprms aLevelSprms;
- auto pIlvlValue = new RTFValue(0);
- aLevelAttributes.set(NS_ooxml::LN_CT_Lvl_ilvl, pIlvlValue);
-
- RTFValue::Pointer_t pFmtValue
- = rState.getTableSprms().find(NS_ooxml::LN_CT_Lvl_numFmt);
- if (pFmtValue)
- aLevelSprms.set(NS_ooxml::LN_CT_Lvl_numFmt, pFmtValue);
-
- RTFValue::Pointer_t pStartatValue
- = rState.getTableSprms().find(NS_ooxml::LN_CT_Lvl_start);
- if (pStartatValue)
- aLevelSprms.set(NS_ooxml::LN_CT_Lvl_start, pStartatValue);
-
- auto pLeveltextValue = new RTFValue(aLeveltextAttributes);
- aLevelSprms.set(NS_ooxml::LN_CT_Lvl_lvlText, pLeveltextValue);
- RTFValue::Pointer_t pRunProps
- = rState.getTableSprms().find(NS_ooxml::LN_CT_Lvl_rPr);
- if (pRunProps)
- aLevelSprms.set(NS_ooxml::LN_CT_Lvl_rPr, pRunProps);
-
- RTFSprms aAbstractAttributes;
- RTFSprms aAbstractSprms;
- aAbstractAttributes.set(NS_ooxml::LN_CT_AbstractNum_abstractNumId, pIdValue);
- auto pLevelValue = new RTFValue(aLevelAttributes, aLevelSprms);
- aAbstractSprms.set(NS_ooxml::LN_CT_AbstractNum_lvl, pLevelValue,
- RTFOverwrite::NO_APPEND);
-
- RTFSprms aListTableSprms;
- auto pAbstractValue = new RTFValue(aAbstractAttributes, aAbstractSprms);
- // It's important that Numbering_abstractNum and Numbering_num never overwrites previous values.
- aListTableSprms.set(NS_ooxml::LN_CT_Numbering_abstractNum, pAbstractValue,
- RTFOverwrite::NO_APPEND);
-
- // Numbering
- RTFSprms aNumberingAttributes;
- RTFSprms aNumberingSprms;
- aNumberingAttributes.set(NS_ooxml::LN_CT_AbstractNum_nsid, pIdValue);
- aNumberingSprms.set(NS_ooxml::LN_CT_Num_abstractNumId, pIdValue);
- auto pNumberingValue = new RTFValue(aNumberingAttributes, aNumberingSprms);
- aListTableSprms.set(NS_ooxml::LN_CT_Numbering_num, pNumberingValue,
- RTFOverwrite::NO_APPEND);
-
- // Table
- RTFSprms aListTableAttributes;
- writerfilter::Reference<Properties>::Pointer_t pProp
- = new RTFReferenceProperties(aListTableAttributes, aListTableSprms);
-
- RTFReferenceTable::Entries_t aListTableEntries;
- aListTableEntries.insert(std::make_pair(0, pProp));
- writerfilter::Reference<Table>::Pointer_t const pTable(
- new RTFReferenceTable(aListTableEntries));
- Mapper().table(NS_ooxml::LN_NUMBERING, pTable);
-
- // Use it
- putNestedSprm(m_aStates.top().getParagraphSprms(), NS_ooxml::LN_CT_PPrBase_numPr,
- NS_ooxml::LN_CT_NumPr_ilvl, pIlvlValue);
- putNestedSprm(m_aStates.top().getParagraphSprms(), NS_ooxml::LN_CT_PPrBase_numPr,
- NS_ooxml::LN_CT_NumPr_numId, pIdValue);
- }
- }
- break;
- case Destination::PARAGRAPHNUMBERING_TEXTAFTER:
- if (!m_aStates.empty())
- {
- // FIXME: don't use pDestinationText, points to popped state
- auto pValue = new RTFValue(rState.getDestinationText().makeStringAndClear(), true);
- m_aStates.top().getTableAttributes().set(NS_ooxml::LN_CT_LevelSuffix_val, pValue);
- }
- break;
- case Destination::PARAGRAPHNUMBERING_TEXTBEFORE:
- if (!m_aStates.empty())
- {
- // FIXME: don't use pDestinationText, points to popped state
- auto pValue = new RTFValue(rState.getDestinationText().makeStringAndClear(), true);
- m_aStates.top().getTableAttributes().set(NS_ooxml::LN_CT_LevelText_val, pValue);
- }
- break;
- case Destination::LISTNAME:
- break;
- case Destination::LISTLEVEL:
- if (!m_aStates.empty())
- {
- auto pInnerValue = new RTFValue(m_aStates.top().getListLevelNum()++);
- rState.getTableAttributes().set(NS_ooxml::LN_CT_Lvl_ilvl, pInnerValue);
-
- auto pValue = new RTFValue(rState.getTableAttributes(), rState.getTableSprms());
- if (m_aStates.top().getDestination() != Destination::LFOLEVEL)
- m_aStates.top().getListLevelEntries().set(NS_ooxml::LN_CT_AbstractNum_lvl,
- pValue, RTFOverwrite::NO_APPEND);
- else
- m_aStates.top().getTableSprms().set(NS_ooxml::LN_CT_NumLvl_lvl, pValue);
- }
- break;
- case Destination::LFOLEVEL:
- if (!m_aStates.empty())
- {
- auto pInnerValue = new RTFValue(m_aStates.top().getListLevelNum()++);
- rState.getTableAttributes().set(NS_ooxml::LN_CT_NumLvl_ilvl, pInnerValue);
-
- auto pValue = new RTFValue(rState.getTableAttributes(), rState.getTableSprms());
- m_aStates.top().getTableSprms().set(NS_ooxml::LN_CT_Num_lvlOverride, pValue,
- RTFOverwrite::NO_APPEND);
- }
- break;
- // list override table
- case Destination::LISTOVERRIDEENTRY:
- if (!m_aStates.empty())
- {
- if (m_aStates.top().getDestination() == Destination::LISTOVERRIDEENTRY)
- {
- // copy properties upwards so upper popState() inserts it
- m_aStates.top().getTableAttributes() = rState.getTableAttributes();
- m_aStates.top().getTableSprms() = rState.getTableSprms();
- }
- else
- {
- auto pValue = new RTFValue(rState.getTableAttributes(), rState.getTableSprms());
- m_aListTableSprms.set(NS_ooxml::LN_CT_Numbering_num, pValue,
- RTFOverwrite::NO_APPEND);
- m_aListOverrideTable[rState.getCurrentListOverrideIndex()]
- = rState.getCurrentListIndex();
- }
- }
- break;
- case Destination::LEVELTEXT:
- if (!m_aStates.empty())
- {
- auto pValue = new RTFValue(rState.getTableAttributes());
- m_aStates.top().getTableSprms().set(NS_ooxml::LN_CT_Lvl_lvlText, pValue);
- }
- break;
- case Destination::LEVELNUMBERS:
- if (!m_aStates.empty())
- {
- m_aStates.top().getTableSprms() = rState.getTableSprms();
- if (m_aStates.top().getDestination() == Destination::LEVELNUMBERS
- || m_aStates.top().getDestination() == Destination::LISTLEVEL)
- // Parent state is level number or list level, current state is
- // level numbers: mark parent as invalid as well if necessary.
- m_aStates.top().setLevelNumbersValid(rState.getLevelNumbersValid());
- }
- break;
- case Destination::FIELDINSTRUCTION:
- if (!m_aStates.empty())
- m_aStates.top().setFieldStatus(RTFFieldStatus::INSTRUCTION);
- break;
- case Destination::FIELDRESULT:
- if (!m_aStates.empty())
- m_aStates.top().setFieldStatus(RTFFieldStatus::RESULT);
- break;
- case Destination::FIELD:
- if (rState.getFieldStatus() == RTFFieldStatus::INSTRUCTION)
- singleChar(cFieldEnd);
- break;
- case Destination::SHAPEPROPERTYVALUEPICT:
- if (!m_aStates.empty())
- {
- m_aStates.top().getPicture() = rState.getPicture();
- // both \sp and \sv are destinations, copy the text up-ward for later
- m_aStates.top().getDestinationText() = rState.getDestinationText();
- }
- break;
- case Destination::FALT:
- if (!m_aStates.empty())
- m_aStates.top().getTableSprms() = rState.getTableSprms();
- break;
- case Destination::SHAPEPROPERTYNAME:
- case Destination::SHAPEPROPERTYVALUE:
- case Destination::SHAPEPROPERTY:
- if (!m_aStates.empty())
- {
- m_aStates.top().getShape() = rState.getShape();
- m_aStates.top().getPicture() = rState.getPicture();
- m_aStates.top().getCharacterAttributes() = rState.getCharacterAttributes();
- }
- break;
- case Destination::SHAPEINSTRUCTION:
- if (!m_aStates.empty()
- && m_aStates.top().getDestination() == Destination::SHAPEINSTRUCTION)
- {
- // Shape instruction inside other shape instruction: just copy new shape settings:
- // it will be resolved on end of topmost shape instruction destination
- m_aStates.top().getShape() = rState.getShape();
- m_aStates.top().getPicture() = rState.getPicture();
- m_aStates.top().getCharacterSprms() = rState.getCharacterSprms();
- m_aStates.top().getCharacterAttributes() = rState.getCharacterAttributes();
- }
- break;
- case Destination::FLYMAINCONTENT:
- case Destination::SHPPICT:
- case Destination::SHAPE:
- if (!m_aStates.empty())
- {
- m_aStates.top().getFrame() = rState.getFrame();
- if (rState.getDestination() == Destination::SHPPICT
- && m_aStates.top().getDestination() == Destination::LISTPICTURE)
- {
- RTFSprms aAttributes;
- aAttributes.set(NS_ooxml::LN_CT_NumPicBullet_numPicBulletId,
- new RTFValue(m_nListPictureId++));
- RTFSprms aSprms;
- // Dummy value, real picture is already sent to dmapper.
- aSprms.set(NS_ooxml::LN_CT_NumPicBullet_pict, new RTFValue(0));
- auto pValue = new RTFValue(aAttributes, aSprms);
- m_aListTableSprms.set(NS_ooxml::LN_CT_Numbering_numPicBullet, pValue,
- RTFOverwrite::NO_APPEND);
- }
- }
- break;
- case Destination::SHAPETEXT:
- if (!m_aStates.empty())
- {
- // If we're leaving the shapetext group (it may have nested ones) and this is a shape, not an old drawingobject.
- if (m_aStates.top().getDestination() != Destination::SHAPETEXT
- && !m_aStates.top().getDrawingObject().getHadShapeText())
- {
- m_aStates.top().setHadShapeText(true);
- if (!m_aStates.top().getCurrentBuffer())
- m_pSdrImport->close();
- else
- m_aStates.top().getCurrentBuffer()->push_back(
- Buf_t(BUFFER_ENDSHAPE, nullptr, nullptr));
- }
-
- // It's allowed to declare these inside the shape text, and they
- // are expected to have an effect for the whole shape.
- if (rState.getDrawingObject().getLeft())
- m_aStates.top().getDrawingObject().setLeft(rState.getDrawingObject().getLeft());
- if (rState.getDrawingObject().getTop())
- m_aStates.top().getDrawingObject().setTop(rState.getDrawingObject().getTop());
- if (rState.getDrawingObject().getRight())
- m_aStates.top().getDrawingObject().setRight(
- rState.getDrawingObject().getRight());
- if (rState.getDrawingObject().getBottom())
- m_aStates.top().getDrawingObject().setBottom(
- rState.getDrawingObject().getBottom());
- }
- break;
- case Destination::PROPNAME:
- if (m_aStates.top().getDestination() == Destination::USERPROPS)
- m_aStates.top().setPropName(rState.getPropName());
- break;
- default:
- {
- if (!m_aStates.empty() && m_aStates.top().getDestination() == Destination::PICT)
- m_aStates.top().getPicture() = rState.getPicture();
- }
- break;
- }
-}
-
-RTFError RTFDocumentImpl::popState()
-{
- //SAL_INFO("writerfilter", __func__ << " before pop: m_pTokenizer->getGroup() " << m_pTokenizer->getGroup() <<
- // ", dest state: " << m_aStates.top().eDestination);
-
- checkUnicode(/*bUnicode =*/true, /*bHex =*/true);
- RTFParserState aState(m_aStates.top());
- m_bWasInFrame = aState.getFrame().inFrame();
-
- // dmapper expects some content in header/footer, so if there would be nothing, add an empty paragraph.
- if (m_pTokenizer->getGroup() == 1 && m_bFirstRun)
- {
- switch (m_nStreamType)
- {
- case NS_ooxml::LN_headerl:
- case NS_ooxml::LN_headerr:
- case NS_ooxml::LN_headerf:
- case NS_ooxml::LN_footerl:
- case NS_ooxml::LN_footerr:
- case NS_ooxml::LN_footerf:
- dispatchSymbol(RTF_PAR);
- break;
- }
- }
-
- RTFError eError = beforePopState(aState);
- if (eError != RTFError::OK)
- return eError;
-
- // See if we need to end a track change
- if (aState.getStartedTrackchange())
- {
- RTFSprms aTCSprms;
- auto pValue = new RTFValue(0);
- aTCSprms.set(NS_ooxml::LN_endtrackchange, pValue);
- if (!m_aStates.top().getCurrentBuffer())
- Mapper().props(new RTFReferenceProperties(RTFSprms(), aTCSprms));
- else
- bufferProperties(*m_aStates.top().getCurrentBuffer(),
- new RTFValue(RTFSprms(), aTCSprms), nullptr);
- }
-
- // This is the end of the doc, see if we need to close the last section.
- if (m_pTokenizer->getGroup() == 1 && !m_bFirstRun)
- {
- // \par means an empty paragraph at the end of footnotes/endnotes, but
- // not in case of other substreams, like headers.
- if (m_bNeedCr && m_nStreamType != NS_ooxml::LN_footnote
- && m_nStreamType != NS_ooxml::LN_endnote && m_bIsNewDoc)
- dispatchSymbol(RTF_PAR);
- if (m_bNeedSect) // may be set by dispatchSymbol above!
- sectBreak(true);
- }
-
- m_aStates.pop();
-
- m_pTokenizer->popGroup();
-
- afterPopState(aState);
-
- if (aState.getCurrentBuffer() == &m_aSuperBuffer)
- {
- OSL_ASSERT(!m_aStates.empty() && m_aStates.top().getCurrentBuffer() == nullptr);
-
- if (!m_aSuperBuffer.empty())
- replayBuffer(m_aSuperBuffer, nullptr, nullptr);
- }
-
- if (!m_aStates.empty() && m_aStates.top().getTableRowWidthAfter() > 0
- && aState.getTableRowWidthAfter() == 0)
- // An RTF_ROW in the inner group already parsed nTableRowWidthAfter,
- // don't do it again in the outer state later.
- m_aStates.top().setTableRowWidthAfter(0);
-
- if (m_nResetBreakOnSectBreak != RTF_invalid && !m_aStates.empty())
- {
- // Section break type created for \page still has an effect in the
- // outer state as well.
- RTFValue::Pointer_t pType
- = aState.getSectionSprms().find(NS_ooxml::LN_EG_SectPrContents_type);
- if (pType)
- m_aStates.top().getSectionSprms().set(NS_ooxml::LN_EG_SectPrContents_type, pType);
- }
-
- return RTFError::OK;
-}
-
-RTFError RTFDocumentImpl::handleEmbeddedObject()
-{
- OString aStr
- = OUStringToOString(m_aStates.top().getCurrentDestinationText()->makeStringAndClear(),
- RTL_TEXTENCODING_ASCII_US);
- std::unique_ptr<SvStream> pStream(new SvMemoryStream());
- if (!msfilter::rtfutil::ExtractOLE2FromObjdata(aStr, *pStream))
- return RTFError::HEX_INVALID;
-
- uno::Reference<io::XInputStream> xInputStream(
- new utl::OSeekableInputStreamWrapper(pStream.release(), /*_bOwner=*/true));
- auto pStreamValue = new RTFValue(xInputStream);
- m_aOLEAttributes.set(NS_ooxml::LN_inputstream, pStreamValue);
-
- return RTFError::OK;
-}
-
-bool RTFDocumentImpl::isInBackground() { return m_aStates.top().getInBackground(); }
-
-RTFInternalState RTFDocumentImpl::getInternalState() { return m_aStates.top().getInternalState(); }
-
-void RTFDocumentImpl::setInternalState(RTFInternalState nInternalState)
-{
- m_aStates.top().setInternalState(nInternalState);
-}
-
-Destination RTFDocumentImpl::getDestination() { return m_aStates.top().getDestination(); }
-
-void RTFDocumentImpl::setDestination(Destination eDestination)
-{
- m_aStates.top().setDestination(eDestination);
-}
-
-// this is a questionably named method that is used only in a very special
-// situation where it looks like the "current" buffer is needed?
-void RTFDocumentImpl::setDestinationText(OUString const& rString)
-{
- m_aStates.top().getDestinationText().setLength(0);
- m_aStates.top().getDestinationText().append(rString);
-}
-
-bool RTFDocumentImpl::getSkipUnknown() { return m_bSkipUnknown; }
-
-void RTFDocumentImpl::setSkipUnknown(bool bSkipUnknown) { m_bSkipUnknown = bSkipUnknown; }
-
-static auto FilterControlChars(Destination const destination, OUString const& rString) -> OUString
-{
- if (destination == Destination::LEVELNUMBERS || destination == Destination::LEVELTEXT)
- { // control characters are magic here!
- return rString;
- }
- OUStringBuffer buf(rString.getLength());
- for (sal_Int32 i = 0; i < rString.getLength(); ++i)
- {
- sal_Unicode const ch(rString[i]);
- if (!linguistic::IsControlChar(ch) || ch == '\r' || ch == '\n' || ch == '\t')
- {
- buf.append(ch);
- }
- else
- {
- SAL_INFO("writerfilter.rtf", "filtering control character");
- }
- }
- return buf.makeStringAndClear();
-}
-
-void RTFDocumentImpl::checkUnicode(bool bUnicode, bool bHex)
-{
- if (bUnicode && !m_aUnicodeBuffer.isEmpty())
- {
- OUString aString = m_aUnicodeBuffer.toString();
- m_aUnicodeBuffer.setLength(0);
- aString = FilterControlChars(m_aStates.top().getDestination(), aString);
- text(aString);
- }
- if (bHex && !m_aHexBuffer.isEmpty())
- {
- rtl_TextEncoding nEncoding = m_aStates.top().getCurrentEncoding();
- if (m_aStates.top().getDestination() == Destination::FONTENTRY
- && m_aStates.top().getCurrentEncoding() == RTL_TEXTENCODING_SYMBOL)
- nEncoding = RTL_TEXTENCODING_MS_1252;
- OUString aString = OStringToOUString(m_aHexBuffer.toString(), nEncoding);
- m_aHexBuffer.setLength(0);
- aString = FilterControlChars(m_aStates.top().getDestination(), aString);
- text(aString);
- }
-}
-
-RTFParserState::RTFParserState(RTFDocumentImpl* pDocumentImpl)
- : m_pDocumentImpl(pDocumentImpl)
- , m_nInternalState(RTFInternalState::NORMAL)
- , m_eDestination(Destination::NORMAL)
- , m_eFieldStatus(RTFFieldStatus::NONE)
- , m_nBorderState(RTFBorderState::NONE)
- , m_nCurrentEncoding(rtl_getTextEncodingFromWindowsCharset(0))
- , m_nUc(1)
- , m_nCharsToSkip(0)
- , m_nBinaryToRead(0)
- , m_nListLevelNum(0)
- , m_bLevelNumbersValid(true)
- , m_aFrame(this)
- , m_eRunType(RunType::NONE)
- , m_nYear(0)
- , m_nMonth(0)
- , m_nDay(0)
- , m_nHour(0)
- , m_nMinute(0)
- , m_pCurrentDestinationText(nullptr)
- , m_nCurrentStyleIndex(-1)
- , m_nCurrentCharacterStyleIndex(-1)
- , m_pCurrentBuffer(nullptr)
- , m_bInListpicture(false)
- , m_bInBackground(false)
- , m_bHadShapeText(false)
- , m_bInShapeGroup(false)
- , m_bInShape(false)
- , m_bCreatedShapeGroup(false)
- , m_bStartedTrackchange(false)
- , m_nTableRowWidthAfter(0)
-{
-}
-
-void RTFDocumentImpl::resetFrame() { m_aStates.top().getFrame() = RTFFrame(&m_aStates.top()); }
-
-void RTFDocumentImpl::bufferProperties(RTFBuffer_t& rBuffer, const RTFValue::Pointer_t& pValue,
- const tools::SvRef<TableRowBuffer>& pTableProperties)
-{
- rBuffer.emplace_back(
- Buf_t(BUFFER_SETSTYLE, new RTFValue(m_aStates.top().getCurrentStyleIndex()), nullptr));
- rBuffer.emplace_back(Buf_t(BUFFER_PROPS, pValue, pTableProperties));
-}
-
-RTFShape::RTFShape() = default;
-
-RTFDrawingObject::RTFDrawingObject() = default;
-
-RTFFrame::RTFFrame(RTFParserState* pParserState)
- : m_pDocumentImpl(pParserState->getDocumentImpl())
- , m_nX(0)
- , m_nY(0)
- , m_nW(0)
- , m_nH(0)
- , m_nHoriPadding(0)
- , m_nVertPadding(0)
- , m_nHoriAlign(0)
- , m_nHoriAnchor(0)
- , m_nVertAlign(0)
- , m_nVertAnchor(0)
- , m_nHRule(NS_ooxml::LN_Value_doc_ST_HeightRule_auto)
-{
-}
-
-void RTFFrame::setSprm(Id nId, Id nValue)
-{
- if (m_pDocumentImpl->getFirstRun() && !m_pDocumentImpl->isStyleSheetImport())
- {
- m_pDocumentImpl->checkFirstRun();
- m_pDocumentImpl->setNeedPar(false);
- }
- switch (nId)
- {
- case NS_ooxml::LN_CT_FramePr_w:
- m_nW = nValue;
- break;
- case NS_ooxml::LN_CT_FramePr_h:
- m_nH = nValue;
- break;
- case NS_ooxml::LN_CT_FramePr_x:
- m_nX = nValue;
- break;
- case NS_ooxml::LN_CT_FramePr_y:
- m_nY = nValue;
- break;
- case NS_ooxml::LN_CT_FramePr_hSpace:
- m_nHoriPadding = nValue;
- break;
- case NS_ooxml::LN_CT_FramePr_vSpace:
- m_nVertPadding = nValue;
- break;
- case NS_ooxml::LN_CT_FramePr_xAlign:
- m_nHoriAlign = nValue;
- break;
- case NS_ooxml::LN_CT_FramePr_hAnchor:
- m_nHoriAnchor = nValue;
- break;
- case NS_ooxml::LN_CT_FramePr_yAlign:
- m_nVertAlign = nValue;
- break;
- case NS_ooxml::LN_CT_FramePr_vAnchor:
- m_nVertAnchor = nValue;
- break;
- case NS_ooxml::LN_CT_FramePr_wrap:
- m_oWrap = nValue;
- break;
- default:
- break;
- }
-}
-
-RTFSprms RTFFrame::getSprms()
-{
- RTFSprms sprms;
-
- static const Id pNames[]
- = { NS_ooxml::LN_CT_FramePr_x, NS_ooxml::LN_CT_FramePr_y,
- NS_ooxml::LN_CT_FramePr_hRule, // Make sure nHRule is processed before nH
- NS_ooxml::LN_CT_FramePr_h, NS_ooxml::LN_CT_FramePr_w,
- NS_ooxml::LN_CT_FramePr_hSpace, NS_ooxml::LN_CT_FramePr_vSpace,
- NS_ooxml::LN_CT_FramePr_hAnchor, NS_ooxml::LN_CT_FramePr_vAnchor,
- NS_ooxml::LN_CT_FramePr_xAlign, NS_ooxml::LN_CT_FramePr_yAlign,
- NS_ooxml::LN_CT_FramePr_wrap, NS_ooxml::LN_CT_FramePr_dropCap,
- NS_ooxml::LN_CT_FramePr_lines };
-
- for (Id nId : pNames)
- {
- RTFValue::Pointer_t pValue;
-
- switch (nId)
- {
- case NS_ooxml::LN_CT_FramePr_x:
- if (m_nX != 0)
- pValue = new RTFValue(m_nX);
- break;
- case NS_ooxml::LN_CT_FramePr_y:
- if (m_nY != 0)
- pValue = new RTFValue(m_nY);
- break;
- case NS_ooxml::LN_CT_FramePr_h:
- if (m_nH != 0)
- {
- if (m_nHRule == NS_ooxml::LN_Value_doc_ST_HeightRule_exact)
- pValue = new RTFValue(-m_nH); // The negative value just sets nHRule
- else
- pValue = new RTFValue(m_nH);
- }
- break;
- case NS_ooxml::LN_CT_FramePr_w:
- if (m_nW != 0)
- pValue = new RTFValue(m_nW);
- break;
- case NS_ooxml::LN_CT_FramePr_hSpace:
- if (m_nHoriPadding != 0)
- pValue = new RTFValue(m_nHoriPadding);
- break;
- case NS_ooxml::LN_CT_FramePr_vSpace:
- if (m_nVertPadding != 0)
- pValue = new RTFValue(m_nVertPadding);
- break;
- case NS_ooxml::LN_CT_FramePr_hAnchor:
- {
- if (m_nHoriAnchor == 0)
- m_nHoriAnchor = NS_ooxml::LN_Value_doc_ST_HAnchor_margin;
- pValue = new RTFValue(m_nHoriAnchor);
- }
- break;
- case NS_ooxml::LN_CT_FramePr_vAnchor:
- {
- if (m_nVertAnchor == 0)
- m_nVertAnchor = NS_ooxml::LN_Value_doc_ST_VAnchor_margin;
- pValue = new RTFValue(m_nVertAnchor);
- }
- break;
- case NS_ooxml::LN_CT_FramePr_xAlign:
- pValue = new RTFValue(m_nHoriAlign);
- break;
- case NS_ooxml::LN_CT_FramePr_yAlign:
- pValue = new RTFValue(m_nVertAlign);
- break;
- case NS_ooxml::LN_CT_FramePr_hRule:
- {
- if (m_nH < 0)
- m_nHRule = NS_ooxml::LN_Value_doc_ST_HeightRule_exact;
- else if (m_nH > 0)
- m_nHRule = NS_ooxml::LN_Value_doc_ST_HeightRule_atLeast;
- pValue = new RTFValue(m_nHRule);
- }
- break;
- case NS_ooxml::LN_CT_FramePr_wrap:
- if (m_oWrap)
- pValue = new RTFValue(*m_oWrap);
- break;
- default:
- break;
- }
-
- if (pValue)
- sprms.set(nId, pValue);
- }
-
- RTFSprms frameprSprms;
- frameprSprms.set(NS_ooxml::LN_CT_PPrBase_framePr, new RTFValue(sprms));
- return frameprSprms;
-}
-
-bool RTFFrame::hasProperties() const
-{
- return m_nX != 0 || m_nY != 0 || m_nW != 0 || m_nH != 0 || m_nHoriPadding != 0
- || m_nVertPadding != 0 || m_nHoriAlign != 0 || m_nHoriAnchor != 0 || m_nVertAlign != 0
- || m_nVertAnchor != 0;
-}
-
-} // namespace writerfilter
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.hxx b/writerfilter/source/rtftok/rtfdocumentimpl.hxx
deleted file mode 100644
index b1708ca470b5..000000000000
--- a/writerfilter/source/rtftok/rtfdocumentimpl.hxx
+++ /dev/null
@@ -1,983 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-
-#ifndef INCLUDED_WRITERFILTER_SOURCE_RTFTOK_RTFDOCUMENTIMPL_HXX
-#define INCLUDED_WRITERFILTER_SOURCE_RTFTOK_RTFDOCUMENTIMPL_HXX
-
-#include <memory>
-#include <queue>
-#include <tuple>
-#include <vector>
-#include <optional>
-
-#include <com/sun/star/text/WrapTextMode.hpp>
-#include <com/sun/star/io/WrongFormatException.hpp>
-#include <oox/mathml/importutils.hxx>
-#include <rtl/strbuf.hxx>
-#include <rtl/ustrbuf.hxx>
-#include <tools/color.hxx>
-#include <tools/long.hxx>
-
-#include <rtftok/RTFDocument.hxx>
-#include "rtfreferencetable.hxx"
-#include "rtfsprm.hxx"
-#include "rtflistener.hxx"
-
-class SvStream;
-namespace oox
-{
-class GraphicHelper;
-}
-namespace com::sun::star
-{
-namespace beans
-{
-class XPropertySet;
-}
-namespace document
-{
-class XDocumentProperties;
-}
-namespace lang
-{
-class XMultiServiceFactory;
-}
-}
-
-namespace writerfilter::rtftok
-{
-class RTFParserState;
-class RTFDocumentImpl;
-class RTFTokenizer;
-class RTFSdrImport;
-class TableRowBuffer;
-
-enum class RTFBorderState
-{
- NONE,
- PARAGRAPH,
- PARAGRAPH_BOX,
- CELL,
- PAGE,
- CHARACTER
-};
-
-/// Different kind of buffers for table cell contents.
-enum RTFBufferTypes
-{
- BUFFER_SETSTYLE,
- /// Stores properties, should be created only in bufferProperties().
- BUFFER_PROPS,
- BUFFER_NESTROW,
- BUFFER_CELLEND,
- BUFFER_STARTRUN,
- BUFFER_TEXT,
- BUFFER_UTEXT,
- BUFFER_ENDRUN,
- BUFFER_PAR,
- BUFFER_STARTSHAPE,
- /// Imports a shape.
- BUFFER_RESOLVESHAPE,
- BUFFER_ENDSHAPE,
- BUFFER_RESOLVESUBSTREAM,
- /// Restores RTFParserState::aPicture.
- BUFFER_PICTURE
-};
-
-/// Form field types
-enum class RTFFormFieldType
-{
- NONE,
- TEXT,
- CHECKBOX,
- LIST
-};
-
-enum class RTFBmpStyle
-{
- NONE,
- PNG,
- JPEG,
- DIBITMAP
-};
-
-enum class RTFFieldStatus
-{
- NONE,
- INSTRUCTION,
- RESULT
-};
-
-/// A buffer storing dmapper calls.
-using Buf_t = std::tuple<RTFBufferTypes, RTFValue::Pointer_t, tools::SvRef<TableRowBuffer>>;
-using RTFBuffer_t = std::deque<Buf_t>;
-
-/// holds one nested table row
-class TableRowBuffer : public virtual SvRefBase
-{
- RTFBuffer_t m_aBuffer;
- ::std::deque<RTFSprms> m_aCellsSprms;
- ::std::deque<RTFSprms> m_aCellsAttributes;
- int m_nCells;
- writerfilter::Reference<Properties>::Pointer_t m_pParaProperties;
- writerfilter::Reference<Properties>::Pointer_t m_pFrameProperties;
- writerfilter::Reference<Properties>::Pointer_t m_pRowProperties;
-
-public:
- TableRowBuffer(RTFBuffer_t aBuffer, std::deque<RTFSprms> aSprms,
- std::deque<RTFSprms> aAttributes, int const nCells)
- : m_aBuffer(std::move(aBuffer))
- , m_aCellsSprms(std::move(aSprms))
- , m_aCellsAttributes(std::move(aAttributes))
- , m_nCells(nCells)
- {
- }
-
- RTFBuffer_t& GetBuffer() { return m_aBuffer; }
- std::deque<RTFSprms>& GetCellsSprms() { return m_aCellsSprms; }
- std::deque<RTFSprms>& GetCellsAttributes() { return m_aCellsAttributes; }
- int GetCells() const { return m_nCells; }
- writerfilter::Reference<Properties>::Pointer_t& GetParaProperties()
- {
- return m_pParaProperties;
- }
- writerfilter::Reference<Properties>::Pointer_t& GetFrameProperties()
- {
- return m_pFrameProperties;
- }
- writerfilter::Reference<Properties>::Pointer_t& GetRowProperties() { return m_pRowProperties; }
-};
-
-/// An entry in the color table.
-class RTFColorTableEntry
-{
-public:
- void SetRed(sal_uInt8 nRed)
- {
- m_bAuto = false;
- m_nR = nRed;
- }
- void SetGreen(sal_uInt8 nGreen)
- {
- m_bAuto = false;
- m_nG = nGreen;
- }
- void SetBlue(sal_uInt8 nBlue)
- {
- m_bAuto = false;
- m_nB = nBlue;
- }
- Color GetColor() const { return m_bAuto ? COL_AUTO : Color(m_nR, m_nG, m_nB); }
-
-private:
- bool m_bAuto = true;
- sal_uInt8 m_nR = 0;
- sal_uInt8 m_nG = 0;
- sal_uInt8 m_nB = 0;
-};
-
-/// Stores the properties of a shape.
-class RTFShape : public virtual SvRefBase
-{
-public:
- RTFShape();
-
- std::vector<std::pair<OUString, OUString>>& getProperties() { return m_aProperties; }
-
- const std::vector<std::pair<OUString, OUString>>& getProperties() const
- {
- return m_aProperties;
- }
-
- std::vector<std::pair<OUString, OUString>>& getGroupProperties() { return m_aGroupProperties; }
-
- void setLeft(sal_Int32 nLeft) { m_nLeft = nLeft; }
-
- sal_Int32 getLeft() const { return m_nLeft; }
-
- void setTop(sal_Int32 nTop) { m_nTop = nTop; }
-
- sal_Int32 getTop() const { return m_nTop; }
-
- void setRight(sal_Int32 nRight) { m_nRight = nRight; }
-
- sal_Int32 getRight() const { return m_nRight; }
-
- void setBottom(sal_Int32 nBottom) { m_nBottom = nBottom; }
-
- sal_Int32 getBottom() const { return m_nBottom; }
-
- void setZ(sal_Int32 nZ) { m_oZ = nZ; }
-
- bool hasZ() const { return bool(m_oZ); }
-
- sal_Int32 getZ() const { return *m_oZ; }
-
- void setHoriOrientRelation(sal_Int16 nHoriOrientRelation)
- {
- m_nHoriOrientRelation = nHoriOrientRelation;
- }
-
- sal_Int16 getHoriOrientRelation() const { return m_nHoriOrientRelation; }
-
- void setVertOrientRelation(sal_Int16 nVertOrientRelation)
- {
- m_nVertOrientRelation = nVertOrientRelation;
- }
-
- sal_Int16 getVertOrientRelation() const { return m_nVertOrientRelation; }
-
- void setHoriOrientRelationToken(sal_uInt32 nHoriOrientRelationToken)
- {
- m_nHoriOrientRelationToken = nHoriOrientRelationToken;
- }
-
- sal_uInt32 getHoriOrientRelationToken() const { return m_nHoriOrientRelationToken; }
-
- void setVertOrientRelationToken(sal_uInt32 nVertOrientRelationToken)
- {
- m_nVertOrientRelationToken = nVertOrientRelationToken;
- }
-
- sal_uInt32 getVertOrientRelationToken() const { return m_nVertOrientRelationToken; }
-
- void setWrap(css::text::WrapTextMode nWrap) { m_nWrap = nWrap; }
-
- css::text::WrapTextMode getWrap() const { return m_nWrap; }
-
- void setInBackground(bool bInBackground) { m_bInBackground = bInBackground; }
-
- bool getInBackground() const { return m_bInBackground; }
-
- RTFSprms& getWrapPolygonSprms() { return m_aWrapPolygonSprms; }
-
- RTFSprms& getAnchorAttributes() { return m_aAnchorAttributes; }
-
- std::pair<Id, RTFValue::Pointer_t>& getWrapSprm() { return m_aWrapSprm; }
-
-private:
- std::vector<std::pair<OUString, OUString>> m_aProperties; ///< Properties of a single shape.
- std::vector<std::pair<OUString, OUString>>
- m_aGroupProperties; ///< Properties applied on the groupshape.
- sal_Int32 m_nLeft = 0;
- sal_Int32 m_nTop = 0;
- sal_Int32 m_nRight = 0;
- sal_Int32 m_nBottom = 0;
- std::optional<sal_Int32> m_oZ; ///< Z-Order of the shape.
- sal_Int16 m_nHoriOrientRelation
- = 0; ///< Horizontal text::RelOrientation for drawinglayer shapes.
- sal_Int16 m_nVertOrientRelation = 0; ///< Vertical text::RelOrientation for drawinglayer shapes.
- sal_uInt32 m_nHoriOrientRelationToken = 0; ///< Horizontal dmapper token for Writer pictures.
- sal_uInt32 m_nVertOrientRelationToken = 0; ///< Vertical dmapper token for Writer pictures.
- css::text::WrapTextMode m_nWrap = css::text::WrapTextMode::WrapTextMode_MAKE_FIXED_SIZE;
- /// If shape is below text (true) or text is below shape (false).
- bool m_bInBackground = false;
- /// Wrap polygon, written by RTFSdrImport::resolve(), read by RTFDocumentImpl::resolvePict().
- RTFSprms m_aWrapPolygonSprms;
- /// Anchor attributes like wrap distance, written by RTFSdrImport::resolve(), read by RTFDocumentImpl::resolvePict().
- RTFSprms m_aAnchorAttributes;
- /// Wrap type, written by RTFDocumentImpl::popState(), read by RTFDocumentImpl::resolvePict().
- std::pair<Id, RTFValue::Pointer_t> m_aWrapSprm{ 0, nullptr };
-};
-
-/// Stores the properties of a drawing object.
-class RTFDrawingObject : public RTFShape
-{
-public:
- RTFDrawingObject();
-
- void setShape(const css::uno::Reference<css::drawing::XShape>& xShape) { m_xShape = xShape; }
- const css::uno::Reference<css::drawing::XShape>& getShape() const { return m_xShape; }
- void setPropertySet(const css::uno::Reference<css::beans::XPropertySet>& xPropertySet)
- {
- m_xPropertySet = xPropertySet;
- }
- const css::uno::Reference<css::beans::XPropertySet>& getPropertySet() const
- {
- return m_xPropertySet;
- }
- std::vector<css::beans::PropertyValue>& getPendingProperties() { return m_aPendingProperties; }
- void setLineColorR(sal_uInt8 nLineColorR) { m_nLineColorR = nLineColorR; }
- sal_uInt8 getLineColorR() const { return m_nLineColorR; }
- void setLineColorG(sal_uInt8 nLineColorG) { m_nLineColorG = nLineColorG; }
- sal_uInt8 getLineColorG() const { return m_nLineColorG; }
- void setLineColorB(sal_uInt8 nLineColorB) { m_nLineColorB = nLineColorB; }
- sal_uInt8 getLineColorB() const { return m_nLineColorB; }
- void setHasLineColor(bool bHasLineColor) { m_bHasLineColor = bHasLineColor; }
- bool getHasLineColor() const { return m_bHasLineColor; }
- void setFillColorR(sal_uInt8 nFillColorR) { m_nFillColorR = nFillColorR; }
- sal_uInt8 getFillColorR() const { return m_nFillColorR; }
- void setFillColorG(sal_uInt8 nFillColorG) { m_nFillColorG = nFillColorG; }
- sal_uInt8 getFillColorG() const { return m_nFillColorG; }
- void setFillColorB(sal_uInt8 nFillColorB) { m_nFillColorB = nFillColorB; }
- sal_uInt8 getFillColorB() const { return m_nFillColorB; }
- void setHasFillColor(bool bHasFillColor) { m_bHasFillColor = bHasFillColor; }
- bool getHasFillColor() const { return m_bHasFillColor; }
- void setDhgt(sal_Int32 nDhgt) { m_nDhgt = nDhgt; }
- sal_Int32 getDhgt() const { return m_nDhgt; }
- void setFLine(sal_Int32 nFLine) { m_nFLine = nFLine; }
- sal_Int32 getFLine() const { return m_nFLine; }
- void setPolyLineCount(sal_Int32 nPolyLineCount) { m_nPolyLineCount = nPolyLineCount; }
- sal_Int32 getPolyLineCount() const { return m_nPolyLineCount; }
- std::vector<css::awt::Point>& getPolyLinePoints() { return m_aPolyLinePoints; }
- void setHadShapeText(bool bHadShapeText) { m_bHadShapeText = bHadShapeText; }
- bool getHadShapeText() const { return m_bHadShapeText; }
-
-private:
- css::uno::Reference<css::drawing::XShape> m_xShape;
- css::uno::Reference<css::beans::XPropertySet> m_xPropertySet;
- std::vector<css::beans::PropertyValue> m_aPendingProperties;
- sal_uInt8 m_nLineColorR = 0;
- sal_uInt8 m_nLineColorG = 0;
- sal_uInt8 m_nLineColorB = 0;
- bool m_bHasLineColor = false;
- sal_uInt8 m_nFillColorR = 0;
- sal_uInt8 m_nFillColorG = 0;
- sal_uInt8 m_nFillColorB = 0;
- bool m_bHasFillColor = false;
- sal_Int32 m_nDhgt = 0;
- sal_Int32 m_nFLine = -1;
- sal_Int32 m_nPolyLineCount = 0;
- std::vector<css::awt::Point> m_aPolyLinePoints;
- bool m_bHadShapeText = false;
-};
-
-/// Stores the properties of a picture.
-class RTFPicture : public virtual SvRefBase
-{
-public:
- sal_Int32 nWidth = 0;
- sal_Int32 nHeight = 0;
- sal_Int32 nGoalWidth = 0;
- sal_Int32 nGoalHeight = 0;
- sal_uInt16 nScaleX = 100;
- sal_uInt16 nScaleY = 100;
- short nCropT = 0;
- short nCropB = 0;
- short nCropL = 0;
- short nCropR = 0;
- sal_uInt16 eWMetafile = 0;
- RTFBmpStyle eStyle = RTFBmpStyle::NONE;
-};
-
-/// Stores the properties of a frame
-class RTFFrame
-{
-private:
- RTFDocumentImpl* m_pDocumentImpl;
- sal_Int32 m_nX, m_nY, m_nW, m_nH;
- sal_Int32 m_nHoriPadding, m_nVertPadding;
- sal_Int32 m_nHoriAlign, m_nHoriAnchor, m_nVertAlign, m_nVertAnchor;
- Id m_nHRule;
- std::optional<Id> m_oWrap;
-
-public:
- explicit RTFFrame(RTFParserState* pParserState);
-
- /// Convert the stored properties to Sprms
- RTFSprms getSprms();
- /// Store a property
- void setSprm(Id nId, Id nValue);
- bool hasProperties() const;
- /// If we got tokens indicating we're in a frame.
- bool inFrame() const;
-};
-
-/// State of the parser, which gets saved / restored when changing groups.
-class RTFParserState
-{
-public:
- /// Maps to OOXML's ascii, cs or eastAsia.
- enum class RunType
- {
- NONE,
- LOCH,
- HICH,
- DBCH,
- LTRCH_RTLCH_1,
- LTRCH_RTLCH_2,
- RTLCH_LTRCH_1,
- RTLCH_LTRCH_2
- };
-
- explicit RTFParserState(RTFDocumentImpl* pDocumentImpl);
-
- void appendDestinationText(const OUString& rString)
- {
- if (m_pCurrentDestinationText)
- m_pCurrentDestinationText->append(rString);
- }
-
- void setPropName(const OUString& rPropName) { m_aPropName = rPropName; }
- OUString const& getPropName() const { return m_aPropName; }
- void setPropType(const css::uno::Type& rPropType) { m_aPropType = rPropType; }
- css::uno::Type const& getPropType() const { return m_aPropType; }
- void setTableRowWidthAfter(int nTableRowWidthAfter)
- {
- m_nTableRowWidthAfter = nTableRowWidthAfter;
- }
- int getTableRowWidthAfter() const { return m_nTableRowWidthAfter; }
- void setStartedTrackchange(bool bStartedTrackchange)
- {
- m_bStartedTrackchange = bStartedTrackchange;
- }
- bool getStartedTrackchange() const { return m_bStartedTrackchange; }
- void setCreatedShapeGroup(bool bCreatedShapeGroup)
- {
- m_bCreatedShapeGroup = bCreatedShapeGroup;
- }
- bool getCreatedShapeGroup() const { return m_bCreatedShapeGroup; }
- void setInShape(bool bInShape) { m_bInShape = bInShape; }
- bool getInShape() const { return m_bInShape; }
- void setInShapeGroup(bool bInShapeGroup) { m_bInShapeGroup = bInShapeGroup; }
- bool getInShapeGroup() const { return m_bInShapeGroup; }
- void setHadShapeText(bool bHadShapeText) { m_bHadShapeText = bHadShapeText; }
- bool getHadShapeText() const { return m_bHadShapeText; }
- void setInBackground(bool bInBackground) { m_bInBackground = bInBackground; }
- bool getInBackground() const { return m_bInBackground; }
- void setInListpicture(bool bInListpicture) { m_bInListpicture = bInListpicture; }
- bool getInListpicture() const { return m_bInListpicture; }
- void setCurrentBuffer(RTFBuffer_t* pCurrentBuffer) { m_pCurrentBuffer = pCurrentBuffer; }
- RTFBuffer_t* getCurrentBuffer() const { return m_pCurrentBuffer; }
- void setCurrentListOverrideIndex(int nCurrentListOverrideIndex)
- {
- m_nCurrentListOverrideIndex = nCurrentListOverrideIndex;
- }
- int getCurrentListOverrideIndex() const { return m_nCurrentListOverrideIndex; }
- void setCurrentListIndex(int nCurrentListIndex) { m_nCurrentListIndex = nCurrentListIndex; }
- int getCurrentListIndex() const { return m_nCurrentListIndex; }
- void setCurrentCharacterStyleIndex(int nCurrentCharacterStyleIndex)
- {
- m_nCurrentCharacterStyleIndex = nCurrentCharacterStyleIndex;
- }
- int getCurrentCharacterStyleIndex() const { return m_nCurrentCharacterStyleIndex; }
- void setCurrentStyleIndex(int nCurrentStyleIndex) { m_nCurrentStyleIndex = nCurrentStyleIndex; }
- int getCurrentStyleIndex() const { return m_nCurrentStyleIndex; }
- void setCurrentDestinationText(OUStringBuffer* pDestinationText)
- {
- m_pCurrentDestinationText = pDestinationText;
- }
- OUStringBuffer* getCurrentDestinationText() const { return m_pCurrentDestinationText; }
- OUStringBuffer& getDestinationText() { return m_aDestinationText; }
- void setMinute(sal_uInt16 nMinute) { m_nMinute = nMinute; }
- sal_uInt16 getMinute() const { return m_nMinute; }
- void setHour(sal_uInt16 nHour) { m_nHour = nHour; }
- sal_uInt16 getHour() const { return m_nHour; }
- void setDay(sal_uInt16 nDay) { m_nDay = nDay; }
- sal_uInt16 getDay() const { return m_nDay; }
- void setMonth(sal_uInt16 nMonth) { m_nMonth = nMonth; }
- sal_uInt16 getMonth() const { return m_nMonth; }
- void setYear(sal_uInt16 nYear) { m_nYear = nYear; }
- sal_uInt16 getYear() const { return m_nYear; }
- void setRunType(RunType eRunType) { m_eRunType = eRunType; }
- RunType getRunType() const { return m_eRunType; }
- RTFFrame& getFrame() { return m_aFrame; }
- RTFDrawingObject& getDrawingObject() { return m_aDrawingObject; }
- RTFShape& getShape() { return m_aShape; }
- RTFPicture& getPicture() { return m_aPicture; }
- void setLevelNumbersValid(bool bLevelNumbersValid)
- {
- m_bLevelNumbersValid = bLevelNumbersValid;
- }
- bool getLevelNumbersValid() const { return m_bLevelNumbersValid; }
- std::vector<sal_Int32>& getLevelNumbers() { return m_aLevelNumbers; }
- RTFSprms& getListLevelEntries() { return m_aListLevelEntries; }
- int& getListLevelNum() { return m_nListLevelNum; }
- void setBinaryToRead(int nBinaryToRead) { m_nBinaryToRead = nBinaryToRead; }
- int getBinaryToRead() const { return m_nBinaryToRead; }
- int& getCharsToSkip() { return m_nCharsToSkip; }
- void setUc(int nUc) { m_nUc = nUc; }
- int getUc() const { return m_nUc; }
- void setCurrentEncoding(rtl_TextEncoding nCurrentEncoding)
- {
- m_nCurrentEncoding = nCurrentEncoding;
- }
- rtl_TextEncoding getCurrentEncoding() const { return m_nCurrentEncoding; }
- RTFColorTableEntry& getCurrentColor() { return m_aCurrentColor; }
- RTFSprms& getTabAttributes() { return m_aTabAttributes; }
- RTFSprms& getTableCellAttributes() { return m_aTableCellAttributes; }
- RTFSprms& getTableCellSprms() { return m_aTableCellSprms; }
- RTFSprms& getTableRowAttributes() { return m_aTableRowAttributes; }
- RTFSprms& getTableRowSprms() { return m_aTableRowSprms; }
- RTFSprms& getSectionAttributes() { return m_aSectionAttributes; }
- RTFSprms& getSectionSprms() { return m_aSectionSprms; }
- RTFSprms& getParagraphAttributes() { return m_aParagraphAttributes; }
- RTFSprms& getParagraphSprms() { return m_aParagraphSprms; }
- RTFSprms& getCharacterAttributes() { return m_aCharacterAttributes; }
- RTFSprms& getCharacterSprms() { return m_aCharacterSprms; }
- RTFSprms& getTableAttributes() { return m_aTableAttributes; }
- RTFSprms& getTableSprms() { return m_aTableSprms; }
- void setBorderState(RTFBorderState nBorderState) { m_nBorderState = nBorderState; }
- RTFBorderState getBorderState() const { return m_nBorderState; }
- void setFieldStatus(RTFFieldStatus eFieldStatus) { m_eFieldStatus = eFieldStatus; }
- RTFFieldStatus getFieldStatus() const { return m_eFieldStatus; }
- void setDestination(Destination eDestination) { m_eDestination = eDestination; }
- Destination getDestination() const { return m_eDestination; }
- void setInternalState(RTFInternalState nInternalState) { m_nInternalState = nInternalState; }
- RTFInternalState getInternalState() const { return m_nInternalState; }
- RTFDocumentImpl* getDocumentImpl() { return m_pDocumentImpl; }
-
-private:
- RTFDocumentImpl* m_pDocumentImpl;
- RTFInternalState m_nInternalState;
- Destination m_eDestination;
- RTFFieldStatus m_eFieldStatus;
- RTFBorderState m_nBorderState;
- // font table, stylesheet table
- RTFSprms m_aTableSprms;
- RTFSprms m_aTableAttributes;
- // reset by plain
- RTFSprms m_aCharacterSprms;
- RTFSprms m_aCharacterAttributes;
- // reset by pard
- RTFSprms m_aParagraphSprms;
- RTFSprms m_aParagraphAttributes;
- // reset by sectd
- RTFSprms m_aSectionSprms;
- RTFSprms m_aSectionAttributes;
- // reset by trowd
- RTFSprms m_aTableRowSprms;
- RTFSprms m_aTableRowAttributes;
- // reset by cellx
- RTFSprms m_aTableCellSprms;
- RTFSprms m_aTableCellAttributes;
- // reset by tx
- RTFSprms m_aTabAttributes;
-
- RTFColorTableEntry m_aCurrentColor;
-
- rtl_TextEncoding m_nCurrentEncoding;
-
- /// Current \uc value.
- int m_nUc;
- /// Characters to skip, set to nUc by \u.
- int m_nCharsToSkip;
- /// Characters to read, once in binary mode.
- int m_nBinaryToRead;
-
- /// Next list level index to use when parsing list table.
- int m_nListLevelNum;
- /// List level entries, which will form a list entry later.
- RTFSprms m_aListLevelEntries;
- /// List of character positions in leveltext to replace.
- std::vector<sal_Int32> m_aLevelNumbers;
- /// If aLevelNumbers should be read at all.
- bool m_bLevelNumbersValid;
-
- RTFPicture m_aPicture;
- RTFShape m_aShape;
- RTFDrawingObject m_aDrawingObject;
- RTFFrame m_aFrame;
-
- RunType m_eRunType;
-
- // Info group.
- sal_Int16 m_nYear;
- sal_uInt16 m_nMonth;
- sal_uInt16 m_nDay;
- sal_uInt16 m_nHour;
- sal_uInt16 m_nMinute;
-
- /// Text from special destinations.
- OUStringBuffer m_aDestinationText{ 512 };
- /// point to the buffer of the current destination
- OUStringBuffer* m_pCurrentDestinationText;
-
- /// Index of the current style.
- int m_nCurrentStyleIndex;
- /// Index of the current character style.
- int m_nCurrentCharacterStyleIndex;
- /// Current listid, points to a listtable entry.
- int m_nCurrentListIndex = -1;
- /// Current ls, points to a listoverridetable entry.
- int m_nCurrentListOverrideIndex = -1;
-
- /// Points to the active buffer, if there is one.
- RTFBuffer_t* m_pCurrentBuffer;
-
- /// If we're inside a \listpicture group.
- bool m_bInListpicture;
-
- /// If we're inside a \background group.
- bool m_bInBackground;
-
- bool m_bHadShapeText;
- bool m_bInShapeGroup; ///< If we're inside a \shpgrp group.
- bool m_bInShape; ///< If we're inside a \shp group.
- bool m_bCreatedShapeGroup; ///< A GroupShape was created and pushed to the parent stack.
- bool m_bStartedTrackchange; ///< Track change is started, need to end it before popping.
-
- /// User-defined property: key name.
- OUString m_aPropName;
- /// User-defined property: value type.
- css::uno::Type m_aPropType;
-
- /// Width of invisible cell at the end of the row.
- int m_nTableRowWidthAfter;
-};
-
-/// An RTF stack is similar to std::stack, except that it has an operator[].
-struct RTFStack
-{
-private:
- std::deque<RTFParserState> m_Impl;
-
-public:
- RTFParserState& top()
- {
- if (m_Impl.empty())
- throw css::io::WrongFormatException(
- "Parser state is empty! Invalid usage of destination braces in RTF?", nullptr);
- return m_Impl.back();
- }
- void pop()
- {
- if (m_Impl.empty())
- throw css::io::WrongFormatException(
- "Parser state is empty! Invalid usage of destination braces in RTF?", nullptr);
- return m_Impl.pop_back();
- }
- void push(RTFParserState const& rState) { return m_Impl.push_back(rState); }
- bool empty() const { return m_Impl.empty(); }
- size_t size() const { return m_Impl.size(); }
- const RTFParserState& operator[](size_t nIndex) const { return m_Impl[nIndex]; }
- RTFParserState& operator[](size_t nIndex) { return m_Impl[nIndex]; }
-};
-
-void putBorderProperty(RTFStack& aStates, Id nId, const RTFValue::Pointer_t& pValue);
-void putNestedSprm(RTFSprms& rSprms, Id nParent, Id nId, const RTFValue::Pointer_t& pValue,
- RTFOverwrite eOverwrite = RTFOverwrite::NO_APPEND);
-Id getParagraphBorder(sal_uInt32 nIndex);
-void putNestedAttribute(RTFSprms& rSprms, Id nParent, Id nId, const RTFValue::Pointer_t& pValue,
- RTFOverwrite eOverwrite = RTFOverwrite::YES, bool bAttribute = true);
-bool eraseNestedAttribute(RTFSprms& rSprms, Id nParent, Id nId);
-
-/// Looks up the nParent then the nested nId attribute in rSprms.
-RTFValue::Pointer_t getNestedAttribute(RTFSprms& rSprms, Id nParent, Id nId);
-
-/// Looks up the nParent then the nested nId sprm in rSprms.
-RTFValue::Pointer_t getNestedSprm(RTFSprms& rSprms, Id nParent, Id nId);
-
-/// Checks if rName is contained at least once in rProperties as a key.
-bool findPropertyName(const std::vector<css::beans::PropertyValue>& rProperties,
- const OUString& rName);
-RTFSprms& getLastAttributes(RTFSprms& rSprms, Id nId);
-OString DTTM22OString(tools::Long nDTTM);
-
-/// Implementation of the RTFDocument interface.
-class RTFDocumentImpl : public RTFDocument, public RTFListener
-{
-public:
- using Pointer_t = tools::SvRef<RTFDocumentImpl>;
- RTFDocumentImpl(css::uno::Reference<css::uno::XComponentContext> const& xContext,
- css::uno::Reference<css::io::XInputStream> const& xInputStream,
- css::uno::Reference<css::lang::XComponent> const& xDstDoc,
- css::uno::Reference<css::frame::XFrame> const& xFrame,
- css::uno::Reference<css::task::XStatusIndicator> const& xStatusIndicator,
- const utl::MediaDescriptor& rMediaDescriptor);
- ~RTFDocumentImpl() override;
-
- // RTFDocument
- void resolve(Stream& rMapper) override;
-
- // RTFListener
- RTFError dispatchDestination(RTFKeyword nKeyword) override;
- RTFError dispatchFlag(RTFKeyword nKeyword) override;
- RTFError dispatchSymbol(RTFKeyword nKeyword) override;
- RTFError dispatchToggle(RTFKeyword nKeyword, bool bParam, int nParam) override;
- RTFError dispatchValue(RTFKeyword nKeyword, int nParam) override;
- bool dispatchTableSprmValue(RTFKeyword nKeyword, int nParam);
- bool dispatchCharacterSprmValue(RTFKeyword nKeyword, int nParam);
- bool dispatchCharacterAttributeValue(RTFKeyword nKeyword, int nParam);
- bool dispatchParagraphSprmValue(RTFKeyword nKeyword, int nParam);
- bool dispatchInfoValue(RTFKeyword nKeyword, int nParam);
- bool dispatchFrameValue(RTFKeyword nKeyword, int nParam);
- bool dispatchTableValue(RTFKeyword nKeyword, int nParam);
- RTFError resolveChars(char ch) override;
- RTFError pushState() override;
- RTFError beforePopState(RTFParserState& rState);
- RTFError popState() override;
- void afterPopState(RTFParserState& rState);
- Destination getDestination() override;
- void setDestination(Destination eDestination) override;
- RTFInternalState getInternalState() override;
- void setInternalState(RTFInternalState nInternalState) override;
- bool getSkipUnknown() override;
- void setSkipUnknown(bool bSkipUnknown) override;
- void finishSubstream() override;
- bool isSubstream() const override;
-
- Stream& Mapper() { return *m_pMapperStream; }
- void setSuperstream(RTFDocumentImpl* pSuperstream);
- const css::uno::Reference<css::lang::XMultiServiceFactory>& getModelFactory() const
- {
- return m_xModelFactory;
- }
- bool isInBackground();
- void setDestinationText(OUString const& rString);
- /// Resolve a picture: If not inline, then anchored.
- void resolvePict(bool bInline, css::uno::Reference<css::drawing::XShape> const& rShape);
-
- /// If this is the first run of the document, starts the initial paragraph.
- void checkFirstRun();
- /// Send NS_ooxml::LN_settings_settings to dmapper.
- void outputSettingsTable();
- /// If the initial paragraph is started.
- bool getFirstRun() const { return m_bFirstRun; }
- /// If we need to add a dummy paragraph before a section break.
- void setNeedPar(bool bNeedPar);
- /// Return the dmapper index of an RTF index for fonts.
- int getFontIndex(int nIndex);
- /// Return the name of the font, based on a dmapper index.
- OUString getFontName(int nIndex);
- /// Return the style name of an RTF style index.
- OUString getStyleName(int nIndex);
- /// Return the style type of an RTF style index.
- Id getStyleType(int nIndex);
- /// Return the encoding associated with a font index.
- rtl_TextEncoding getEncoding(int nFontIndex);
- /// Get the default parser state.
- RTFParserState& getDefaultState();
- oox::GraphicHelper& getGraphicHelper();
- /// Are we inside the stylesheet table?
- bool isStyleSheetImport();
- /// Resets m_aStates.top().aFrame.
- void resetFrame();
- /// Buffers properties to be sent later.
- void bufferProperties(RTFBuffer_t& rBuffer, const RTFValue::Pointer_t& pValue,
- const tools::SvRef<TableRowBuffer>& pTableProperties);
- /// implement non-obvious RTF specific style inheritance
- RTFReferenceTable::Entries_t deduplicateStyleTable();
-
-private:
- SvStream& Strm();
- Color getColorTable(sal_uInt32 nIndex);
- writerfilter::Reference<Properties>::Pointer_t createStyleProperties();
- void resetSprms();
- void resetAttributes();
- void resolveSubstream(std::size_t nPos, Id nId);
- void resolveSubstream(std::size_t nPos, Id nId, OUString const& rIgnoreFirst);
-
- void text(OUString& rString);
- // Sends a single character to dmapper, taking care of buffering.
- void singleChar(sal_uInt8 nValue, bool bRunProps = false);
- // Sends run properties to dmapper, taking care of buffering.
- void runProps();
- void runBreak();
- void parBreak();
- void tableBreak();
- writerfilter::Reference<Properties>::Pointer_t
- getProperties(const RTFSprms& rAttributes, RTFSprms const& rSprms, Id nStyleType);
- void checkNeedPap();
- void sectBreak(bool bFinal = false);
- void prepareProperties(RTFParserState& rState,
- writerfilter::Reference<Properties>::Pointer_t& o_rpParagraphProperties,
- writerfilter::Reference<Properties>::Pointer_t& o_rpFrameProperties,
- writerfilter::Reference<Properties>::Pointer_t& o_rpTableRowProperties,
- int nCells, int nCurrentCellX);
- /// Send the passed properties to dmapper.
- void sendProperties(writerfilter::Reference<Properties>::Pointer_t const& pParagraphProperties,
- writerfilter::Reference<Properties>::Pointer_t const& pFrameProperties,
- writerfilter::Reference<Properties>::Pointer_t const& pTableRowProperties);
- void replayRowBuffer(RTFBuffer_t& rBuffer, ::std::deque<RTFSprms>& rCellsSrpms,
- ::std::deque<RTFSprms>& rCellsAttributes, int nCells);
- void replayBuffer(RTFBuffer_t& rBuffer, RTFSprms* pSprms, RTFSprms const* pAttributes);
- /// If we have some unicode or hex characters to send.
- void checkUnicode(bool bUnicode, bool bHex);
- /// If we need a final section break at the end of the document.
- void setNeedSect(bool bNeedSect);
- void resetTableRowProperties();
- void backupTableRowProperties();
- void restoreTableRowProperties();
- /// Turns the destination text into an input stream of the current OLE attributes.
- RTFError handleEmbeddedObject();
-
- css::uno::Reference<css::uno::XComponentContext> const& m_xContext;
- css::uno::Reference<css::io::XInputStream> const& m_xInputStream;
- css::uno::Reference<css::lang::XComponent> const& m_xDstDoc;
- css::uno::Reference<css::frame::XFrame> const& m_xFrame;
- css::uno::Reference<css::task::XStatusIndicator> const& m_xStatusIndicator;
- css::uno::Reference<css::lang::XMultiServiceFactory> m_xModelFactory;
- css::uno::Reference<css::document::XDocumentProperties> m_xDocumentProperties;
- std::unique_ptr<SvStream> m_pInStream;
- Stream* m_pMapperStream;
- tools::SvRef<RTFSdrImport> m_pSdrImport;
- tools::SvRef<RTFTokenizer> m_pTokenizer;
- RTFStack m_aStates;
- /// Read by RTF_PARD.
- RTFParserState m_aDefaultState;
- bool m_bSkipUnknown;
- /// Font index <-> encoding map, *not* part of the parser state
- std::map<int, rtl_TextEncoding> m_aFontEncodings;
- /// Font index <-> name map.
- std::map<int, OUString> m_aFontNames;
- /// Maps the non-continuous font indexes to the continuous dmapper indexes.
- std::vector<int> m_aFontIndexes;
- /// Maps style indexes to style names.
- std::map<int, OUString> m_aStyleNames;
- /// Maps style indexes to style types.
- std::map<int, Id> m_aStyleTypes;
- /// Color index <-> RGB color value map
- std::vector<Color> m_aColorTable;
- /// to start initial paragraph / section after font/style tables
- bool m_bFirstRun;
- /// except in the case of tables in initial multicolumn section (global for assertion)
- bool m_bFirstRunException;
- /// If paragraph properties should be emitted on next run.
- bool m_bNeedPap;
- /// If we need to emit a CR at the end of substream.
- bool m_bNeedCr;
- /// Original value of m_bNeedCr -- saved/restored before/after textframes.
- bool m_bNeedCrOrig;
- bool m_bNeedPar;
- /// If set, an empty paragraph will be added at the end of the document.
- bool m_bNeedFinalPar;
- /// The list table and list override table combined.
- RTFSprms m_aListTableSprms;
- /// Maps between listoverridetable and listtable indexes.
- std::map<int, int> m_aListOverrideTable;
- /// Maps listtable indexes to listtable entries.
- std::map<int, RTFValue::Pointer_t> m_aListTable;
- /// Index of the current list level in a list table entry.
- int m_nListLevel = -1;
- /// Maps List level indexes to removed values in the current list entry.
- std::map<int, int> m_aInvalidListLevelFirstIndents;
- /// Maps list table indexes to levels (and their removed values).
- std::map<int, std::map<int, int>> m_aInvalidListTableFirstIndents;
- /// The settings table attributes.
- RTFSprms m_aSettingsTableAttributes;
- /// The settings table sprms.
- RTFSprms m_aSettingsTableSprms;
-
- std::shared_ptr<oox::GraphicHelper> m_pGraphicHelper;
-
- /// cell props buffer for nested tables, reset by \nestrow
- /// the \nesttableprops is a destination and must follow the
- /// nested cells, so it should be sufficient to store the
- /// currently active one, no need for a stack of them
- int m_nNestedCells;
- std::deque<RTFSprms> m_aNestedTableCellsSprms;
- std::deque<RTFSprms> m_aNestedTableCellsAttributes;
- /// cell props buffer for top-level table, reset by \row
- int m_nTopLevelCells;
- std::deque<RTFSprms> m_aTopLevelTableCellsSprms;
- std::deque<RTFSprms> m_aTopLevelTableCellsAttributes;
- /// backup of top-level props, to support inheriting cell props
- int m_nInheritingCells;
- std::deque<RTFSprms> m_aTableInheritingCellsSprms;
- std::deque<RTFSprms> m_aTableInheritingCellsAttributes;
-
- // Left row margin (for nested and top-level rows)
- int m_nNestedTRLeft;
- int m_nTopLevelTRLeft;
-
- /// Current cellx value (nested table)
- int m_nNestedCurrentCellX;
- /// Current cellx value (top-level table)
- int m_nTopLevelCurrentCellX;
-
- // Backup of what \trowd clears, to work around invalid input.
- RTFSprms m_aBackupTableRowSprms;
- RTFSprms m_aBackupTableRowAttributes;
- int m_nBackupTopLevelCurrentCellX;
-
- /// Buffered table cells, till cell definitions are not reached.
- /// for nested table, one buffer per table level
- std::deque<RTFBuffer_t> m_aTableBufferStack;
- /// Buffered superscript, till footnote is reached (or not).
- RTFBuffer_t m_aSuperBuffer;
-
- /// Superstream of this substream.
- RTFDocumentImpl* m_pSuperstream;
- /// Type of the stream: header, footer, footnote, etc.
- Id m_nStreamType;
- std::queue<std::pair<Id, std::size_t>> m_nHeaderFooterPositions;
- std::size_t m_nGroupStartPos;
- /// Ignore the first occurrence of this text.
- OUString m_aIgnoreFirst;
- /// Bookmark name <-> index map.
- std::map<OUString, int> m_aBookmarks;
- /// Revision index <-> author map.
- std::map<int, OUString> m_aAuthors;
- /// Annotation author of the next annotation.
- OUString m_aAuthor;
- /// Initials of author of the next annotation.
- OUString m_aAuthorInitials;
-
- RTFSprms m_aFormfieldSprms;
- RTFSprms m_aFormfieldAttributes;
- RTFFormFieldType m_nFormFieldType;
-
- /// OLE attributes are attributes of the ooxml:OLEObject_OLEObject sprm.
- RTFSprms m_aOLEAttributes;
- RTFSprms m_aObjectAttributes;
- /** If we are in an object group and if the we use its
- * \objdata element.
- * (if we don't use the \objdata we use the \result element)*/
- bool m_bObject;
- /// If the data for a picture is a binary one, it's stored here.
- std::shared_ptr<SvStream> m_pBinaryData;
-
- RTFReferenceTable::Entries_t m_aFontTableEntries;
- int m_nCurrentFontIndex;
- /// Used only during font table parsing till we don't know the font name.
- int m_nCurrentEncoding;
- /// Raw default font index, use getFont() on it to get a real one.
- int m_nDefaultFontIndex;
-
- RTFReferenceTable::Entries_t m_aStyleTableEntries;
- int m_nCurrentStyleIndex;
- bool m_bFormField;
- /// For the INCLUDEPICTURE field's argument.
- OUString m_aPicturePath;
- // Unicode characters are collected here so we don't have to send them one by one.
- OUStringBuffer m_aUnicodeBuffer{ 512 };
- /// Same for hex characters.
- OStringBuffer m_aHexBuffer{ 512 };
- /// Formula import.
- oox::formulaimport::XmlStreamBuilder m_aMathBuffer;
- /// Normal text property, that is math italic and math spacing are not applied to the current run.
- bool m_bMathNor;
- /// If the next continuous section break should be ignored.
- bool m_bIgnoreNextContSectBreak;
- /// clean up a synthetic page break, see RTF_PAGE
- /// if inactive value is -1, otherwise the RTF_SKB* to restore
- RTFKeyword m_nResetBreakOnSectBreak;
- /// If a section break is needed before the end of the doc (false right after a section break).
- bool m_bNeedSect;
- /// If aFrame.inFrame() was true in the previous state.
- bool m_bWasInFrame;
- /// A picture was seen in the current paragraph.
- bool m_bHadPicture;
- /// The document has multiple sections.
- bool m_bHadSect;
- /// Max width of the rows in the current table.
- int m_nCellxMax;
- /// ID of the next \listlevel picture.
- int m_nListPictureId;
-
- /// New document means not pasting into an existing one.
- bool m_bIsNewDoc;
- /// The media descriptor contains e.g. the base URL of the document.
- const utl::MediaDescriptor& m_rMediaDescriptor;
-
- /// Flags for ensuring that only one header and footer is added per section
- bool m_hasRHeader;
- bool m_hasFHeader;
- bool m_hasRFooter;
- bool m_hasFFooter;
-
- /// Are we after a \cell, but before a \row?
- bool m_bAfterCellBeforeRow;
-};
-} // namespace writerfilter::rtftok
-
-#endif // INCLUDED_WRITERFILTER_SOURCE_RTFTOK_RTFDOCUMENTIMPL_HXX
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/rtftok/rtffly.hxx b/writerfilter/source/rtftok/rtffly.hxx
deleted file mode 100644
index 0960e17732e3..000000000000
--- a/writerfilter/source/rtftok/rtffly.hxx
+++ /dev/null
@@ -1,141 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-
-#ifndef INCLUDED_WRITERFILTER_SOURCE_RTFTOK_RTFFLY_HXX
-#define INCLUDED_WRITERFILTER_SOURCE_RTFTOK_RTFFLY_HXX
-
-#include <com/sun/star/text/HoriOrientation.hpp>
-#include <com/sun/star/text/RelOrientation.hpp>
-#include <com/sun/star/text/VertOrientation.hpp>
-
-#include <ooxml/resourceids.hxx>
-#include <osl/endian.h>
-
-namespace writerfilter::rtftok
-{
-/// Stores the vertical orientation properties of an RTF fly frame.
-class RTFVertOrient
-{
-public:
- explicit RTFVertOrient(sal_uInt16 nValue)
- : m_nVal(nValue)
- {
- }
-
- sal_uInt16 GetOrient() const { return OSL_LONIBBLE(OSL_LOBYTE(m_nVal)); }
-
- sal_uInt16 GetRelation() const { return OSL_HINIBBLE(OSL_LOBYTE(m_nVal)); }
-
- sal_Int32 GetAlign() const
- {
- sal_Int32 nAlign = 0;
- switch (GetOrient())
- {
- case css::text::VertOrientation::CENTER:
- nAlign = NS_ooxml::LN_Value_doc_ST_YAlign_center;
- break;
- case css::text::VertOrientation::TOP:
- nAlign = NS_ooxml::LN_Value_doc_ST_YAlign_top;
- break;
- case css::text::VertOrientation::BOTTOM:
- nAlign = NS_ooxml::LN_Value_doc_ST_YAlign_bottom;
- break;
- }
-
- return nAlign;
- }
-
- sal_Int32 GetAnchor() const
- {
- sal_Int32 nAnchor = 0;
- switch (GetRelation())
- {
- case css::text::RelOrientation::FRAME:
- nAnchor = NS_ooxml::LN_Value_doc_ST_VAnchor_text;
- break;
- case css::text::RelOrientation::PAGE_FRAME:
- nAnchor = NS_ooxml::LN_Value_doc_ST_VAnchor_page;
- break;
- case css::text::RelOrientation::PAGE_PRINT_AREA:
- nAnchor = NS_ooxml::LN_Value_doc_ST_VAnchor_margin;
- break;
- }
-
- return nAnchor;
- }
-
-private:
- sal_uInt16 m_nVal;
-};
-
-/// Stores the horizontal orientation properties of an RTF fly frame.
-class RTFHoriOrient
-{
-public:
- explicit RTFHoriOrient(sal_uInt16 nValue)
- : m_nVal(nValue)
- {
- }
-
- sal_uInt16 GetOrient() const { return OSL_LONIBBLE(OSL_LOBYTE(m_nVal)); }
-
- sal_uInt16 GetRelation() const { return OSL_LONIBBLE(OSL_HIBYTE(m_nVal)); }
-
- sal_Int32 GetAlign() const
- {
- sal_Int32 nAlign = 0;
- switch (GetOrient())
- {
- case css::text::HoriOrientation::CENTER:
- nAlign = NS_ooxml::LN_Value_doc_ST_XAlign_center;
- break;
- case css::text::HoriOrientation::RIGHT:
- nAlign = NS_ooxml::LN_Value_doc_ST_XAlign_right;
- break;
- case css::text::HoriOrientation::LEFT:
- nAlign = NS_ooxml::LN_Value_doc_ST_XAlign_left;
- break;
- case css::text::HoriOrientation::INSIDE:
- nAlign = NS_ooxml::LN_Value_doc_ST_XAlign_inside;
- break;
- case css::text::HoriOrientation::OUTSIDE:
- nAlign = NS_ooxml::LN_Value_doc_ST_XAlign_outside;
- break;
- }
-
- return nAlign;
- }
-
- sal_Int32 GetAnchor() const
- {
- sal_Int32 nAnchor = 0;
- switch (GetRelation())
- {
- case css::text::RelOrientation::FRAME:
- nAnchor = NS_ooxml::LN_Value_doc_ST_HAnchor_text;
- break;
- case css::text::RelOrientation::PAGE_FRAME:
- nAnchor = NS_ooxml::LN_Value_doc_ST_HAnchor_page;
- break;
- case css::text::RelOrientation::PAGE_PRINT_AREA:
- nAnchor = NS_ooxml::LN_Value_doc_ST_HAnchor_margin;
- break;
- }
-
- return nAnchor;
- }
-
-private:
- sal_uInt16 m_nVal;
-};
-} // namespace writerfilter::rtftok
-
-#endif // INCLUDED_WRITERFILTER_SOURCE_RTFTOK_RTFFLY_HXX
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/rtftok/rtflistener.hxx b/writerfilter/source/rtftok/rtflistener.hxx
deleted file mode 100644
index 44b95c2c4d23..000000000000
--- a/writerfilter/source/rtftok/rtflistener.hxx
+++ /dev/null
@@ -1,72 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-
-#ifndef INCLUDED_WRITERFILTER_SOURCE_RTFTOK_RTFLISTENER_HXX
-#define INCLUDED_WRITERFILTER_SOURCE_RTFTOK_RTFLISTENER_HXX
-
-#include "rtfcontrolwords.hxx"
-
-namespace writerfilter::rtftok
-{
-enum class RTFInternalState
-{
- NORMAL,
- BIN,
- HEX
-};
-
-enum class RTFError
-{
- OK,
- GROUP_UNDER,
- GROUP_OVER,
- UNEXPECTED_EOF,
- HEX_INVALID,
- CHAR_OVER,
- CLASSIFICATION
-};
-
-/**
- * RTFTokenizer needs a class implementing this interface. While
- * RTFTokenizer separates control words (and their arguments) from
- * text, the class implementing this interface is expected to map the
- * raw RTF tokens to dmapper tokens.
- */
-class RTFListener
-{
-public:
- virtual ~RTFListener() = default;
- // Dispatching of control words and characters.
- virtual RTFError dispatchDestination(RTFKeyword nKeyword) = 0;
- virtual RTFError dispatchFlag(RTFKeyword nKeyword) = 0;
- virtual RTFError dispatchSymbol(RTFKeyword nKeyword) = 0;
- virtual RTFError dispatchToggle(RTFKeyword nKeyword, bool bParam, int nParam) = 0;
- virtual RTFError dispatchValue(RTFKeyword nKeyword, int nParam) = 0;
- virtual RTFError resolveChars(char ch) = 0;
-
- // State handling.
- virtual RTFError pushState() = 0;
- virtual RTFError popState() = 0;
-
- virtual Destination getDestination() = 0;
- virtual void setDestination(Destination eDestination) = 0;
- virtual RTFInternalState getInternalState() = 0;
- virtual void setInternalState(RTFInternalState nInternalState) = 0;
- virtual bool getSkipUnknown() = 0;
- virtual void setSkipUnknown(bool bSkipUnknown) = 0;
-
- // Substream handling.
- virtual void finishSubstream() = 0;
- virtual bool isSubstream() const = 0;
-};
-} // namespace writerfilter::rtftok
-
-#endif // INCLUDED_WRITERFILTER_SOURCE_RTFTOK_RTFLISTENER_HXX
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/rtftok/rtflookahead.cxx b/writerfilter/source/rtftok/rtflookahead.cxx
deleted file mode 100644
index d3a84683d3d8..000000000000
--- a/writerfilter/source/rtftok/rtflookahead.cxx
+++ /dev/null
@@ -1,101 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-
-#include "rtflookahead.hxx"
-#include <com/sun/star/uno/Reference.hxx>
-#include <tools/stream.hxx>
-#include "rtftokenizer.hxx"
-
-namespace com::sun::star::task
-{
-class XStatusIndicator;
-}
-
-using namespace com::sun::star;
-
-namespace writerfilter::rtftok
-{
-RTFLookahead::RTFLookahead(SvStream& rStream, sal_uInt64 nGroupStart)
- : m_rStream(rStream)
- , m_bHasTable(false)
- , m_bHasColumns(false)
-{
- sal_uInt64 const nPos = m_rStream.Tell();
- m_rStream.Seek(nGroupStart);
- uno::Reference<task::XStatusIndicator> xStatusIndicator;
- m_pTokenizer = new RTFTokenizer(*this, &m_rStream, xStatusIndicator);
- m_pTokenizer->resolveParse();
- m_rStream.Seek(nPos);
-}
-
-RTFLookahead::~RTFLookahead() = default;
-
-RTFError RTFLookahead::dispatchDestination(RTFKeyword /*nKeyword*/) { return RTFError::OK; }
-
-RTFError RTFLookahead::dispatchFlag(RTFKeyword nKeyword)
-{
- if (nKeyword == RTF_INTBL)
- m_bHasTable = true;
- return RTFError::OK;
-}
-
-RTFError RTFLookahead::dispatchSymbol(RTFKeyword /*nKeyword*/) { return RTFError::OK; }
-
-RTFError RTFLookahead::dispatchToggle(RTFKeyword /*nKeyword*/, bool /*bParam*/, int /*nParam*/)
-{
- return RTFError::OK;
-}
-
-RTFError RTFLookahead::dispatchValue(RTFKeyword nKeyword, int nParam)
-{
- if (nKeyword == RTF_COLS && nParam >= 2)
- m_bHasColumns = true;
- return RTFError::OK;
-}
-
-RTFError RTFLookahead::resolveChars(char ch)
-{
- while (!m_rStream.eof() && (ch != '{' && ch != '}' && ch != '\\'))
- m_rStream.ReadChar(ch);
- if (!m_rStream.eof())
- m_rStream.SeekRel(-1);
- return RTFError::OK;
-}
-
-RTFError RTFLookahead::pushState()
-{
- m_pTokenizer->pushGroup();
- return RTFError::OK;
-}
-
-RTFError RTFLookahead::popState()
-{
- m_pTokenizer->popGroup();
- return RTFError::OK;
-}
-
-Destination RTFLookahead::getDestination() { return Destination::NORMAL; }
-
-void RTFLookahead::setDestination(Destination /*eDestination*/) {}
-
-RTFInternalState RTFLookahead::getInternalState() { return RTFInternalState::NORMAL; }
-
-void RTFLookahead::setInternalState(RTFInternalState /*nInternalState*/) {}
-
-bool RTFLookahead::getSkipUnknown() { return false; }
-
-void RTFLookahead::setSkipUnknown(bool /*bSkipUnknown*/) {}
-
-void RTFLookahead::finishSubstream() {}
-
-bool RTFLookahead::isSubstream() const { return false; }
-
-} // namespace writerfilter::rtftok
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/rtftok/rtflookahead.hxx b/writerfilter/source/rtftok/rtflookahead.hxx
deleted file mode 100644
index 64d1176a0fd5..000000000000
--- a/writerfilter/source/rtftok/rtflookahead.hxx
+++ /dev/null
@@ -1,60 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-
-#ifndef INCLUDED_WRITERFILTER_SOURCE_RTFTOK_RTFLOOKAHEAD_HXX
-#define INCLUDED_WRITERFILTER_SOURCE_RTFTOK_RTFLOOKAHEAD_HXX
-
-#include <sal/types.h>
-#include <tools/ref.hxx>
-#include "rtflistener.hxx"
-
-class SvStream;
-
-namespace writerfilter::rtftok
-{
-class RTFTokenizer;
-/**
- * This acts like an importer, but used for looking ahead, e.g. to
- * determine if the current group contains a table, etc.
- */
-class RTFLookahead : public RTFListener
-{
-public:
- RTFLookahead(SvStream& rStream, sal_uInt64 nGroupStart);
- ~RTFLookahead() override;
- RTFError dispatchDestination(RTFKeyword nKeyword) override;
- RTFError dispatchFlag(RTFKeyword nKeyword) override;
- RTFError dispatchSymbol(RTFKeyword nKeyword) override;
- RTFError dispatchToggle(RTFKeyword nKeyword, bool bParam, int nParam) override;
- RTFError dispatchValue(RTFKeyword nKeyword, int nParam) override;
- RTFError resolveChars(char ch) override;
- RTFError pushState() override;
- RTFError popState() override;
- Destination getDestination() override;
- void setDestination(Destination eDestination) override;
- RTFInternalState getInternalState() override;
- void setInternalState(RTFInternalState nInternalState) override;
- bool getSkipUnknown() override;
- void setSkipUnknown(bool bSkipUnknown) override;
- void finishSubstream() override;
- bool isSubstream() const override;
- bool hasTable() const { return m_bHasTable; }
- bool hasColumns() const { return m_bHasColumns; }
-
-private:
- tools::SvRef<RTFTokenizer> m_pTokenizer;
- SvStream& m_rStream;
- bool m_bHasTable;
- bool m_bHasColumns;
-};
-} // namespace writerfilter::rtftok
-
-#endif // INCLUDED_WRITERFILTER_SOURCE_RTFTOK_RTFLOOKAHEAD_HXX
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/rtftok/rtfreferenceproperties.cxx b/writerfilter/source/rtftok/rtfreferenceproperties.cxx
deleted file mode 100644
index d32557bc7d46..000000000000
--- a/writerfilter/source/rtftok/rtfreferenceproperties.cxx
+++ /dev/null
@@ -1,40 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-
-#include "rtfreferenceproperties.hxx"
-
-namespace writerfilter::rtftok
-{
-RTFReferenceProperties::RTFReferenceProperties(RTFSprms aAttributes, RTFSprms aSprms)
- : m_aAttributes(std::move(aAttributes))
- , m_aSprms(std::move(aSprms))
-{
-}
-
-RTFReferenceProperties::RTFReferenceProperties(RTFSprms aAttributes)
- : m_aAttributes(std::move(aAttributes))
-{
-}
-
-RTFReferenceProperties::~RTFReferenceProperties() = default;
-
-void RTFReferenceProperties::resolve(Properties& rHandler)
-{
- for (auto& rAttribute : m_aAttributes)
- rHandler.attribute(rAttribute.first, *rAttribute.second);
- for (auto& rSprm : m_aSprms)
- {
- RTFSprm aSprm(rSprm.first, rSprm.second);
- rHandler.sprm(aSprm);
- }
-}
-
-} // namespace writerfilter::rtftok
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/rtftok/rtfreferenceproperties.hxx b/writerfilter/source/rtftok/rtfreferenceproperties.hxx
deleted file mode 100644
index 33a8514bcf00..000000000000
--- a/writerfilter/source/rtftok/rtfreferenceproperties.hxx
+++ /dev/null
@@ -1,36 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-
-#ifndef INCLUDED_WRITERFILTER_SOURCE_RTFTOK_RTFREFERENCEPROPERTIES_HXX
-#define INCLUDED_WRITERFILTER_SOURCE_RTFTOK_RTFREFERENCEPROPERTIES_HXX
-
-#include "rtfsprm.hxx"
-
-namespace writerfilter::rtftok
-{
-/// Sends RTFSprm instances to DomainMapper.
-class RTFReferenceProperties : public writerfilter::Reference<Properties>
-{
-public:
- RTFReferenceProperties(RTFSprms aAttributes, RTFSprms aSprms);
- explicit RTFReferenceProperties(RTFSprms aAttributes);
- ~RTFReferenceProperties() override;
- void resolve(Properties& rHandler) override;
- RTFSprms& getAttributes() { return m_aAttributes; }
- RTFSprms& getSprms() { return m_aSprms; }
-
-private:
- RTFSprms m_aAttributes;
- RTFSprms m_aSprms;
-};
-} // namespace writerfilter::rtftok
-
-#endif // INCLUDED_WRITERFILTER_SOURCE_RTFTOK_RTFREFERENCEPROPERTIES_HXX
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/rtftok/rtfreferencetable.cxx b/writerfilter/source/rtftok/rtfreferencetable.cxx
deleted file mode 100644
index ffa9eddaec9a..000000000000
--- a/writerfilter/source/rtftok/rtfreferencetable.cxx
+++ /dev/null
@@ -1,29 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-
-#include "rtfreferencetable.hxx"
-
-namespace writerfilter::rtftok
-{
-RTFReferenceTable::RTFReferenceTable(Entries_t aEntries)
- : m_aEntries(std::move(aEntries))
-{
-}
-
-RTFReferenceTable::~RTFReferenceTable() = default;
-
-void RTFReferenceTable::resolve(Table& rHandler)
-{
- for (auto& rEntry : m_aEntries)
- rHandler.entry(rEntry.first, rEntry.second);
-}
-
-} // namespace writerfilter::rtftok
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/rtftok/rtfreferencetable.hxx b/writerfilter/source/rtftok/rtfreferencetable.hxx
deleted file mode 100644
index f5aebcc7f7b3..000000000000
--- a/writerfilter/source/rtftok/rtfreferencetable.hxx
+++ /dev/null
@@ -1,35 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-
-#ifndef INCLUDED_WRITERFILTER_SOURCE_RTFTOK_RTFREFERENCETABLE_HXX
-#define INCLUDED_WRITERFILTER_SOURCE_RTFTOK_RTFREFERENCETABLE_HXX
-
-#include <map>
-#include <dmapper/resourcemodel.hxx>
-
-namespace writerfilter::rtftok
-{
-/// Sends tables (e.g. font table) to the domain mapper.
-class RTFReferenceTable : public writerfilter::Reference<Table>
-{
-public:
- using Entries_t = std::map<int, writerfilter::Reference<Properties>::Pointer_t>;
- using Entry_t = std::pair<int, writerfilter::Reference<Properties>::Pointer_t>;
- explicit RTFReferenceTable(Entries_t aEntries);
- ~RTFReferenceTable() override;
- void resolve(Table& rHandler) override;
-
-private:
- Entries_t m_aEntries;
-};
-} // namespace writerfilter::rtftok
-
-#endif // INCLUDED_WRITERFILTER_SOURCE_RTFTOK_RTFREFERENCETABLE_HXX
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/rtftok/rtfsdrimport.cxx b/writerfilter/source/rtftok/rtfsdrimport.cxx
deleted file mode 100644
index 56b586c9e7c5..000000000000
--- a/writerfilter/source/rtftok/rtfsdrimport.cxx
+++ /dev/null
@@ -1,1152 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-
-#include "rtfsdrimport.hxx"
-#include <cmath>
-#include <com/sun/star/container/XNamed.hpp>
-#include <com/sun/star/drawing/FillStyle.hpp>
-#include <com/sun/star/drawing/EnhancedCustomShapeParameterPair.hpp>
-#include <com/sun/star/drawing/XEnhancedCustomShapeDefaulter.hpp>
-#include <com/sun/star/drawing/XDrawPageSupplier.hpp>
-#include <com/sun/star/drawing/LineStyle.hpp>
-#include <com/sun/star/drawing/EnhancedCustomShapeSegment.hpp>
-#include <com/sun/star/drawing/EnhancedCustomShapeSegmentCommand.hpp>
-#include <com/sun/star/lang/XServiceInfo.hpp>
-#include <com/sun/star/table/BorderLine2.hpp>
-#include <com/sun/star/text/HoriOrientation.hpp>
-#include <com/sun/star/text/RelOrientation.hpp>
-#include <com/sun/star/text/SizeType.hpp>
-#include <com/sun/star/text/VertOrientation.hpp>
-#include <com/sun/star/text/WrapTextMode.hpp>
-#include <com/sun/star/text/WritingMode.hpp>
-#include <com/sun/star/text/WritingMode2.hpp>
-#include <com/sun/star/text/TextContentAnchorType.hpp>
-#include <com/sun/star/text/XTextRange.hpp>
-#include <com/sun/star/lang/XMultiServiceFactory.hpp>
-#include <ooxml/resourceids.hxx>
-#include <filter/msfilter/escherex.hxx>
-#include <filter/msfilter/util.hxx>
-#include <filter/msfilter/rtfutil.hxx>
-#include <sal/log.hxx>
-#include <svx/svdtrans.hxx>
-#include <comphelper/sequence.hxx>
-#include <comphelper/propertyvalue.hxx>
-#include <comphelper/propertysequence.hxx>
-#include "rtfreferenceproperties.hxx"
-#include <oox/vml/vmlformatting.hxx>
-#include <oox/helper/modelobjecthelper.hxx>
-#include <oox/drawingml/shapepropertymap.hxx>
-#include <oox/helper/propertyset.hxx>
-#include <boost/logic/tribool.hpp>
-#include <basegfx/matrix/b2dhommatrix.hxx>
-#include <svx/unoapi.hxx>
-#include <svx/svdobj.hxx>
-#include <tools/UnitConversion.hxx>
-
-#include <dmapper/GraphicZOrderHelper.hxx>
-#include "rtfdocumentimpl.hxx"
-
-using namespace com::sun::star;
-
-namespace writerfilter::rtftok
-{
-RTFSdrImport::RTFSdrImport(RTFDocumentImpl& rDocument,
- uno::Reference<lang::XComponent> const& xDstDoc)
- : m_rImport(rDocument)
- , m_bTextFrame(false)
- , m_bTextGraphicObject(false)
- , m_bFakePict(false)
-{
- uno::Reference<drawing::XDrawPageSupplier> xDrawings(xDstDoc, uno::UNO_QUERY);
- if (xDrawings.is())
- m_aParents.push(xDrawings->getDrawPage());
- m_aGraphicZOrderHelpers.push(writerfilter::dmapper::GraphicZOrderHelper());
-}
-
-RTFSdrImport::~RTFSdrImport()
-{
- if (!m_aGraphicZOrderHelpers.empty())
- m_aGraphicZOrderHelpers.pop();
- if (!m_aParents.empty())
- m_aParents.pop();
-}
-
-void RTFSdrImport::createShape(const OUString& rService, uno::Reference<drawing::XShape>& xShape,
- uno::Reference<beans::XPropertySet>& xPropertySet)
-{
- if (m_rImport.getModelFactory().is())
- xShape.set(m_rImport.getModelFactory()->createInstance(rService), uno::UNO_QUERY);
- xPropertySet.set(xShape, uno::UNO_QUERY);
-}
-
-std::vector<beans::PropertyValue> RTFSdrImport::getTextFrameDefaults(bool bNew)
-{
- std::vector<beans::PropertyValue> aRet;
- beans::PropertyValue aPropertyValue;
-
- aPropertyValue.Name = "HoriOrient";
- aPropertyValue.Value <<= text::HoriOrientation::NONE;
- aRet.push_back(aPropertyValue);
- aPropertyValue.Name = "HoriOrientRelation";
- aPropertyValue.Value <<= text::RelOrientation::FRAME;
- aRet.push_back(aPropertyValue);
- aPropertyValue.Name = "VertOrient";
- aPropertyValue.Value <<= text::VertOrientation::NONE;
- aRet.push_back(aPropertyValue);
- aPropertyValue.Name = "VertOrientRelation";
- aPropertyValue.Value <<= text::RelOrientation::FRAME;
- aRet.push_back(aPropertyValue);
- if (!bNew)
- {
- aPropertyValue.Name = "BackColorTransparency";
- aPropertyValue.Value <<= sal_Int32(100);
- aRet.push_back(aPropertyValue);
- }
- // See the spec, new-style frame default margins are specified in EMUs.
- aPropertyValue.Name = "LeftBorderDistance";
- aPropertyValue.Value <<= sal_Int32(bNew ? (91440 / 360) : 0);
- aRet.push_back(aPropertyValue);
- aPropertyValue.Name = "RightBorderDistance";
- aPropertyValue.Value <<= sal_Int32(bNew ? (91440 / 360) : 0);
- aRet.push_back(aPropertyValue);
- aPropertyValue.Name = "TopBorderDistance";
- aPropertyValue.Value <<= sal_Int32(bNew ? (45720 / 360) : 0);
- aRet.push_back(aPropertyValue);
- aPropertyValue.Name = "BottomBorderDistance";
- aPropertyValue.Value <<= sal_Int32(bNew ? (45720 / 360) : 0);
- aRet.push_back(aPropertyValue);
- aPropertyValue.Name = "SizeType";
- aPropertyValue.Value <<= text::SizeType::FIX;
- aRet.push_back(aPropertyValue);
- return aRet;
-}
-
-void RTFSdrImport::pushParent(uno::Reference<drawing::XShapes> const& xParent)
-{
- m_aParents.push(xParent);
- m_aGraphicZOrderHelpers.push(writerfilter::dmapper::GraphicZOrderHelper());
-}
-
-void RTFSdrImport::popParent()
-{
- if (!m_aGraphicZOrderHelpers.empty())
- m_aGraphicZOrderHelpers.pop();
- if (!m_aParents.empty())
- m_aParents.pop();
-}
-
-void RTFSdrImport::resolveDhgt(uno::Reference<beans::XPropertySet> const& xPropertySet,
- sal_Int32 const nZOrder, bool const bOldStyle)
-{
- if (!m_aGraphicZOrderHelpers.empty())
- {
- writerfilter::dmapper::GraphicZOrderHelper& rHelper = m_aGraphicZOrderHelpers.top();
- xPropertySet->setPropertyValue("ZOrder",
- uno::makeAny(rHelper.findZOrder(nZOrder, bOldStyle)));
- rHelper.addItem(xPropertySet, nZOrder);
- }
-}
-
-void RTFSdrImport::resolveLineColorAndWidth(bool bTextFrame,
- const uno::Reference<beans::XPropertySet>& xPropertySet,
- uno::Any const& rLineColor, uno::Any const& rLineWidth)
-{
- if (!bTextFrame)
- {
- xPropertySet->setPropertyValue("LineColor", rLineColor);
- xPropertySet->setPropertyValue("LineWidth", rLineWidth);
- }
- else
- {
- static const char* aBorders[]
- = { "TopBorder", "LeftBorder", "BottomBorder", "RightBorder" };
- for (const char* pBorder : aBorders)
- {
- auto aBorderLine = xPropertySet->getPropertyValue(OUString::createFromAscii(pBorder))
- .get<table::BorderLine2>();
- if (rLineColor.hasValue())
- aBorderLine.Color = rLineColor.get<sal_Int32>();
- if (rLineWidth.hasValue())
- aBorderLine.LineWidth = rLineWidth.get<sal_Int32>();
- xPropertySet->setPropertyValue(OUString::createFromAscii(pBorder),
- uno::makeAny(aBorderLine));
- }
- }
-}
-
-void RTFSdrImport::resolveFLine(uno::Reference<beans::XPropertySet> const& xPropertySet,
- sal_Int32 const nFLine)
-{
- if (nFLine == 0)
- xPropertySet->setPropertyValue("LineStyle", uno::makeAny(drawing::LineStyle_NONE));
- else
- xPropertySet->setPropertyValue("LineStyle", uno::makeAny(drawing::LineStyle_SOLID));
-}
-
-void RTFSdrImport::applyProperty(uno::Reference<drawing::XShape> const& xShape,
- std::u16string_view aKey, const OUString& aValue) const
-{
- uno::Reference<beans::XPropertySet> xPropertySet(xShape, uno::UNO_QUERY);
- sal_Int16 nHoriOrient = 0;
- sal_Int16 nVertOrient = 0;
- boost::logic::tribool obFitShapeToText(boost::logic::indeterminate);
- bool bFilled = true;
-
- if (aKey == u"posh")
- {
- switch (aValue.toInt32())
- {
- case 1:
- nHoriOrient = text::HoriOrientation::LEFT;
- break;
- case 2:
- nHoriOrient = text::HoriOrientation::CENTER;
- break;
- case 3:
- nHoriOrient = text::HoriOrientation::RIGHT;
- break;
- case 4:
- nHoriOrient = text::HoriOrientation::INSIDE;
- break;
- case 5:
- nHoriOrient = text::HoriOrientation::OUTSIDE;
- break;
- default:
- break;
- }
- }
- else if (aKey == u"posv")
- {
- switch (aValue.toInt32())
- {
- case 1:
- nVertOrient = text::VertOrientation::TOP;
- break;
- case 2:
- nVertOrient = text::VertOrientation::CENTER;
- break;
- case 3:
- nVertOrient = text::VertOrientation::BOTTOM;
- break;
- default:
- break;
- }
- }
- else if (aKey == u"fFitShapeToText")
- obFitShapeToText = aValue.toInt32() == 1;
- else if (aKey == u"fFilled")
- bFilled = aValue.toInt32() == 1;
- else if (aKey == u"rotation")
- {
- // See DffPropertyReader::Fix16ToAngle(): in RTF, positive rotation angles are clockwise, we have them as counter-clockwise.
- // Additionally, RTF type is 0..360*2^16, our is 0..360*100.
- sal_Int32 nRotation = aValue.toInt32() * 100 / RTF_MULTIPLIER;
- uno::Reference<lang::XServiceInfo> xServiceInfo(xShape, uno::UNO_QUERY);
- if (!xServiceInfo->supportsService("com.sun.star.text.TextFrame"))
- xPropertySet->setPropertyValue(
- "RotateAngle", uno::makeAny(NormAngle36000(Degree100(nRotation * -1)).get()));
- }
-
- if (nHoriOrient != 0 && xPropertySet.is())
- xPropertySet->setPropertyValue("HoriOrient", uno::makeAny(nHoriOrient));
- if (nVertOrient != 0 && xPropertySet.is())
- xPropertySet->setPropertyValue("VertOrient", uno::makeAny(nVertOrient));
- if (!boost::logic::indeterminate(obFitShapeToText) && xPropertySet.is())
- {
- xPropertySet->setPropertyValue(
- "SizeType", uno::makeAny(obFitShapeToText ? text::SizeType::MIN : text::SizeType::FIX));
- xPropertySet->setPropertyValue("FrameIsAutomaticHeight",
- uno::makeAny(static_cast<bool>(obFitShapeToText)));
- }
- if (!bFilled && xPropertySet.is())
- {
- if (m_bTextFrame)
- xPropertySet->setPropertyValue("BackColorTransparency", uno::makeAny(sal_Int32(100)));
- else
- xPropertySet->setPropertyValue("FillStyle", uno::makeAny(drawing::FillStyle_NONE));
- }
-}
-
-int RTFSdrImport::initShape(uno::Reference<drawing::XShape>& o_xShape,
- uno::Reference<beans::XPropertySet>& o_xPropSet, bool& o_rIsCustomShape,
- RTFShape const& rShape, bool const bClose,
- ShapeOrPict const shapeOrPict)
-{
- assert(!o_xShape.is());
- assert(!o_xPropSet.is());
- o_rIsCustomShape = false;
- m_bFakePict = false;
-
- // first, find the shape type
- int nType = -1;
- auto iter = std::find_if(rShape.getProperties().begin(), rShape.getProperties().end(),
- [](const std::pair<OUString, OUString>& rProperty) {
- return rProperty.first == "shapeType";
- });
-
- if (iter == rShape.getProperties().end())
- {
- if (SHAPE == shapeOrPict)
- {
- // The spec doesn't state what is the default for shapeType,
- // Word seems to implement it as a rectangle.
- nType = ESCHER_ShpInst_Rectangle;
- }
- else
- {
- // pict is picture by default but can be a rectangle too fdo#79319
- nType = ESCHER_ShpInst_PictureFrame;
- }
- }
- else
- {
- nType = iter->second.toInt32();
- if (PICT == shapeOrPict && ESCHER_ShpInst_PictureFrame != nType)
- {
- m_bFakePict = true;
- }
- }
-
- switch (nType)
- {
- case ESCHER_ShpInst_PictureFrame:
- createShape("com.sun.star.drawing.GraphicObjectShape", o_xShape, o_xPropSet);
- m_bTextGraphicObject = true;
- break;
- case ESCHER_ShpInst_Line:
- createShape("com.sun.star.drawing.LineShape", o_xShape, o_xPropSet);
- break;
- case ESCHER_ShpInst_Rectangle:
- case ESCHER_ShpInst_TextBox:
- // If we're inside a groupshape, can't use text frames.
- if (!bClose && m_aParents.size() == 1)
- {
- createShape("com.sun.star.text.TextFrame", o_xShape, o_xPropSet);
- m_bTextFrame = true;
- std::vector<beans::PropertyValue> aDefaults = getTextFrameDefaults(true);
- for (const beans::PropertyValue& i : aDefaults)
- o_xPropSet->setPropertyValue(i.Name, i.Value);
- break;
- }
- [[fallthrough]];
- default:
- createShape("com.sun.star.drawing.CustomShape", o_xShape, o_xPropSet);
- o_rIsCustomShape = true;
- break;
- }
-
- // Defaults
- if (o_xPropSet.is() && !m_bTextFrame)
- {
- o_xPropSet->setPropertyValue(
- "FillColor",
- uno::makeAny(sal_uInt32(0xffffff))); // White in Word, kind of blue in Writer.
- o_xPropSet->setPropertyValue("VertOrient", uno::makeAny(text::VertOrientation::NONE));
- }
-
- return nType;
-}
-
-void RTFSdrImport::resolve(RTFShape& rShape, bool bClose, ShapeOrPict const shapeOrPict)
-{
- bool bPib = false;
- m_bTextFrame = false;
- m_bTextGraphicObject = false;
-
- uno::Reference<drawing::XShape> xShape;
- uno::Reference<beans::XPropertySet> xPropertySet;
- uno::Any aAny;
- beans::PropertyValue aPropertyValue;
- awt::Rectangle aViewBox;
- std::vector<beans::PropertyValue> aPath;
- // Default line color is black in Word, blue in Writer.
- uno::Any aLineColor = uno::makeAny(COL_BLACK);
- // Default line width is 0.75 pt (26 mm100) in Word, 0 in Writer.
- uno::Any aLineWidth = uno::makeAny(sal_Int32(26));
- sal_Int16 eWritingMode = text::WritingMode2::LR_TB;
- // Groupshape support
- std::optional<sal_Int32> oGroupLeft;
- std::optional<sal_Int32> oGroupTop;
- std::optional<sal_Int32> oGroupRight;
- std::optional<sal_Int32> oGroupBottom;
- std::optional<sal_Int32> oRelLeft;
- std::optional<sal_Int32> oRelTop;
- std::optional<sal_Int32> oRelRight;
- std::optional<sal_Int32> oRelBottom;
-
- // Importing these are not trivial, let the VML import do the hard work.
- oox::vml::FillModel aFillModel; // Gradient.
- oox::vml::ShadowModel aShadowModel; // Shadow.
-
- bool bOpaque = true;
-
- std::optional<sal_Int16> oRelativeWidth;
- std::optional<sal_Int16> oRelativeHeight;
- sal_Int16 nRelativeWidthRelation = text::RelOrientation::PAGE_FRAME;
- sal_Int16 nRelativeHeightRelation = text::RelOrientation::PAGE_FRAME;
- boost::logic::tribool obRelFlipV(boost::logic::indeterminate);
- boost::logic::tribool obFlipH(boost::logic::indeterminate);
- boost::logic::tribool obFlipV(boost::logic::indeterminate);
-
- OUString aShapeText = "";
- OUString aFontFamily = "";
- float nFontSize = 1.0;
-
- bool bCustom(false);
- int const nType = initShape(xShape, xPropertySet, bCustom, rShape, bClose, shapeOrPict);
-
- for (auto& rProperty : rShape.getProperties())
- {
- if (rProperty.first == "shapeType")
- {
- continue; // ignore: already handled by initShape
- }
- if (rProperty.first == "wzName")
- {
- if (m_bTextFrame)
- {
- uno::Reference<container::XNamed> xNamed(xShape, uno::UNO_QUERY);
- xNamed->setName(rProperty.second);
- }
- else
- xPropertySet->setPropertyValue("Name", uno::makeAny(rProperty.second));
- }
- else if (rProperty.first == "wzDescription")
- xPropertySet->setPropertyValue("Description", uno::makeAny(rProperty.second));
- else if (rProperty.first == "gtextUNICODE")
- aShapeText = rProperty.second;
- else if (rProperty.first == "gtextFont")
- aFontFamily = rProperty.second;
- else if (rProperty.first == "gtextSize")
- {
- // RTF size is multiplied by 2^16
- nFontSize = static_cast<float>(rProperty.second.toUInt32()) / RTF_MULTIPLIER;
- }
- else if (rProperty.first == "pib")
- {
- m_rImport.setDestinationText(rProperty.second);
- bPib = true;
- }
- else if (rProperty.first == "fillColor" && xPropertySet.is())
- {
- aAny <<= msfilter::util::BGRToRGB(rProperty.second.toUInt32());
- if (m_bTextFrame)
- xPropertySet->setPropertyValue("BackColor", aAny);
- else
- xPropertySet->setPropertyValue("FillColor", aAny);
-
- // fillType will decide, possible it'll be the start color of a gradient.
- aFillModel.moColor.set("#"
- + OUString::fromUtf8(msfilter::util::ConvertColor(
- Color(ColorTransparency, aAny.get<sal_Int32>()))));
- }
- else if (rProperty.first == "fillBackColor")
- // fillType will decide, possible it'll be the end color of a gradient.
- aFillModel.moColor2.set("#"
- + OUString::fromUtf8(msfilter::util::ConvertColor(
- msfilter::util::BGRToRGB(rProperty.second.toInt32()))));
- else if (rProperty.first == "lineColor")
- aLineColor <<= msfilter::util::BGRToRGB(rProperty.second.toInt32());
- else if (rProperty.first == "lineBackColor")
- ; // Ignore: complementer of lineColor
- else if (rProperty.first == "txflTextFlow" && xPropertySet.is())
- {
- switch (rProperty.second.toInt32())
- {
- case 1: // Top to bottom ASCII font
- case 3: // Top to bottom non-ASCII font
- eWritingMode = text::WritingMode2::TB_RL;
- break;
- case 2: // Bottom to top non-ASCII font
- eWritingMode = text::WritingMode2::BT_LR;
- break;
- }
- }
- else if (rProperty.first == "fLine" && xPropertySet.is())
- resolveFLine(xPropertySet, rProperty.second.toInt32());
- else if (rProperty.first == "fillOpacity" && xPropertySet.is())
- {
- int opacity = 100 - (rProperty.second.toInt32()) * 100 / RTF_MULTIPLIER;
- xPropertySet->setPropertyValue("FillTransparence", uno::Any(sal_uInt32(opacity)));
- }
- else if (rProperty.first == "lineWidth")
- aLineWidth <<= rProperty.second.toInt32() / 360;
- else if (rProperty.first == "pVerticies")
- {
- std::vector<drawing::EnhancedCustomShapeParameterPair> aCoordinates;
- sal_Int32 nSize = 0; // Size of a token (its value is hardwired in the exporter)
- sal_Int32 nCount = 0; // Number of tokens
- sal_Int32 nCharIndex = 0; // Character index
- do
- {
- OUString aToken = rProperty.second.getToken(0, ';', nCharIndex);
- if (!nSize)
- nSize = aToken.toInt32();
- else if (!nCount)
- nCount = aToken.toInt32();
- else if (aToken.getLength())
- {
- // The coordinates are in an (x,y) form.
- aToken = aToken.copy(1, aToken.getLength() - 2);
- sal_Int32 nI = 0;
- sal_Int32 nX = aToken.getToken(0, ',', nI).toInt32();
- sal_Int32 nY = (nI >= 0) ? aToken.getToken(0, ',', nI).toInt32() : 0;
- drawing::EnhancedCustomShapeParameterPair aPair;
- aPair.First.Value <<= nX;
- aPair.Second.Value <<= nY;
- aCoordinates.push_back(aPair);
- }
- } while (nCharIndex >= 0);
- aPropertyValue.Name = "Coordinates";
- aPropertyValue.Value <<= comphelper::containerToSequence(aCoordinates);
- aPath.push_back(aPropertyValue);
- }
- else if (rProperty.first == "pSegmentInfo")
- {
- std::vector<drawing::EnhancedCustomShapeSegment> aSegments;
- sal_Int32 nSize = 0;
- sal_Int32 nCount = 0;
- sal_Int32 nCharIndex = 0;
- do
- {
- sal_Int32 nSeg = rProperty.second.getToken(0, ';', nCharIndex).toInt32();
- if (!nSize)
- nSize = nSeg;
- else if (!nCount)
- nCount = nSeg;
- else
- {
- sal_Int32 nPoints = 1;
- if (nSeg >= 0x2000 && nSeg < 0x20FF)
- {
- nPoints = nSeg & 0x0FFF;
- nSeg &= 0xFF00;
- }
-
- drawing::EnhancedCustomShapeSegment aSegment;
- switch (nSeg)
- {
- case 0x0001: // lineto
- aSegment.Command = drawing::EnhancedCustomShapeSegmentCommand::LINETO;
- aSegment.Count = sal_Int32(1);
- aSegments.push_back(aSegment);
- break;
- case 0x4000: // moveto
- aSegment.Command = drawing::EnhancedCustomShapeSegmentCommand::MOVETO;
- aSegment.Count = sal_Int32(1);
- aSegments.push_back(aSegment);
- break;
- case 0x2000: // curveto
- aSegment.Command = drawing::EnhancedCustomShapeSegmentCommand::CURVETO;
- aSegment.Count = nPoints;
- aSegments.push_back(aSegment);
- break;
- case 0xb300: // arcto
- aSegment.Command = drawing::EnhancedCustomShapeSegmentCommand::ARCTO;
- aSegment.Count = sal_Int32(0);
- aSegments.push_back(aSegment);
- break;
- case 0xac00:
- case 0xaa00: // nofill
- case 0xab00: // nostroke
- case 0x6001: // close
- break;
- case 0x8000: // end
- aSegment.Command
- = drawing::EnhancedCustomShapeSegmentCommand::ENDSUBPATH;
- aSegment.Count = sal_Int32(0);
- aSegments.push_back(aSegment);
- break;
- default: // given number of lineto elements
- aSegment.Command = drawing::EnhancedCustomShapeSegmentCommand::LINETO;
- aSegment.Count = nSeg;
- aSegments.push_back(aSegment);
- break;
- }
- }
- } while (nCharIndex >= 0);
- aPropertyValue.Name = "Segments";
- aPropertyValue.Value <<= comphelper::containerToSequence(aSegments);
- aPath.push_back(aPropertyValue);
- }
- else if (rProperty.first == "geoLeft")
- aViewBox.X = rProperty.second.toInt32();
- else if (rProperty.first == "geoTop")
- aViewBox.Y = rProperty.second.toInt32();
- else if (rProperty.first == "geoRight")
- aViewBox.Width = rProperty.second.toInt32();
- else if (rProperty.first == "geoBottom")
- aViewBox.Height = rProperty.second.toInt32();
- else if (rProperty.first == "dhgt")
- {
- // dhgt is Word 2007, \shpz is Word 97-2003, the later has priority.
- if (!rShape.hasZ())
- resolveDhgt(xPropertySet, rProperty.second.toInt32(), /*bOldStyle=*/false);
- }
- // These are in EMU, convert to mm100.
- else if (rProperty.first == "dxTextLeft")
- {
- if (xPropertySet.is())
- xPropertySet->setPropertyValue("LeftBorderDistance",
- uno::makeAny(rProperty.second.toInt32() / 360));
- }
- else if (rProperty.first == "dyTextTop")
- {
- if (xPropertySet.is())
- xPropertySet->setPropertyValue("TopBorderDistance",
- uno::makeAny(rProperty.second.toInt32() / 360));
- }
- else if (rProperty.first == "dxTextRight")
- {
- if (xPropertySet.is())
- xPropertySet->setPropertyValue("RightBorderDistance",
- uno::makeAny(rProperty.second.toInt32() / 360));
- }
- else if (rProperty.first == "dyTextBottom")
- {
- if (xPropertySet.is())
- xPropertySet->setPropertyValue("BottomBorderDistance",
- uno::makeAny(rProperty.second.toInt32() / 360));
- }
- else if (rProperty.first == "dxWrapDistLeft")
- {
- if (m_bTextGraphicObject)
- rShape.getAnchorAttributes().set(NS_ooxml::LN_CT_Anchor_distL,
- new RTFValue(rProperty.second.toInt32()));
- else if (xPropertySet.is())
- xPropertySet->setPropertyValue("LeftMargin",
- uno::makeAny(rProperty.second.toInt32() / 360));
- }
- else if (rProperty.first == "dyWrapDistTop")
- {
- if (m_bTextGraphicObject)
- rShape.getAnchorAttributes().set(NS_ooxml::LN_CT_Anchor_distT,
- new RTFValue(rProperty.second.toInt32()));
- else if (xPropertySet.is())
- xPropertySet->setPropertyValue("TopMargin",
- uno::makeAny(rProperty.second.toInt32() / 360));
- }
- else if (rProperty.first == "dxWrapDistRight")
- {
- if (m_bTextGraphicObject)
- rShape.getAnchorAttributes().set(NS_ooxml::LN_CT_Anchor_distR,
- new RTFValue(rProperty.second.toInt32()));
- else if (xPropertySet.is())
- xPropertySet->setPropertyValue("RightMargin",
- uno::makeAny(rProperty.second.toInt32() / 360));
- }
- else if (rProperty.first == "dyWrapDistBottom")
- {
- if (m_bTextGraphicObject)
- rShape.getAnchorAttributes().set(NS_ooxml::LN_CT_Anchor_distB,
- new RTFValue(rProperty.second.toInt32()));
- else if (xPropertySet.is())
- xPropertySet->setPropertyValue("BottomMargin",
- uno::makeAny(rProperty.second.toInt32() / 360));
- }
- else if (rProperty.first == "fillType")
- {
- switch (rProperty.second.toInt32())
- {
- case 7: // Shade using the fillAngle
- aFillModel.moType.set(oox::XML_gradient);
- break;
- default:
- SAL_INFO("writerfilter",
- "TODO handle fillType value '" << rProperty.second << "'");
- break;
- }
- }
- else if (rProperty.first == "fillFocus")
- aFillModel.moFocus.set(rProperty.second.toDouble() / 100); // percent
- else if (rProperty.first == "fShadow" && xPropertySet.is())
- {
- if (rProperty.second.toInt32() == 1)
- aShadowModel.mbHasShadow = true;
- }
- else if (rProperty.first == "shadowColor")
- aShadowModel.moColor.set("#"
- + OUString::fromUtf8(msfilter::util::ConvertColor(
- msfilter::util::BGRToRGB(rProperty.second.toInt32()))));
- else if (rProperty.first == "shadowOffsetX")
- // EMUs to points
- aShadowModel.moOffset.set(OUString::number(rProperty.second.toDouble() / 12700) + "pt");
- else if (rProperty.first == "posh" || rProperty.first == "posv"
- || rProperty.first == "fFitShapeToText" || rProperty.first == "fFilled"
- || rProperty.first == "rotation")
- applyProperty(xShape, rProperty.first, rProperty.second);
- else if (rProperty.first == "posrelh")
- {
- switch (rProperty.second.toInt32())
- {
- case 1:
- rShape.setHoriOrientRelation(text::RelOrientation::PAGE_FRAME);
- break;
- default:
- break;
- }
- }
- else if (rProperty.first == "posrelv")
- {
- switch (rProperty.second.toInt32())
- {
- case 1:
- rShape.setVertOrientRelation(text::RelOrientation::PAGE_FRAME);
- break;
- default:
- break;
- }
- }
- else if (rProperty.first == "groupLeft")
- oGroupLeft = convertTwipToMm100(rProperty.second.toInt32());
- else if (rProperty.first == "groupTop")
- oGroupTop = convertTwipToMm100(rProperty.second.toInt32());
- else if (rProperty.first == "groupRight")
- oGroupRight = convertTwipToMm100(rProperty.second.toInt32());
- else if (rProperty.first == "groupBottom")
- oGroupBottom = convertTwipToMm100(rProperty.second.toInt32());
- else if (rProperty.first == "relLeft")
- oRelLeft = convertTwipToMm100(rProperty.second.toInt32());
- else if (rProperty.first == "relTop")
- oRelTop = convertTwipToMm100(rProperty.second.toInt32());
- else if (rProperty.first == "relRight")
- oRelRight = convertTwipToMm100(rProperty.second.toInt32());
- else if (rProperty.first == "relBottom")
- oRelBottom = convertTwipToMm100(rProperty.second.toInt32());
- else if (rProperty.first == "fBehindDocument")
- bOpaque = !rProperty.second.toInt32();
- else if (rProperty.first == "pctHoriz" || rProperty.first == "pctVert")
- {
- sal_Int16 nPercentage = rtl::math::round(rProperty.second.toDouble() / 10);
- if (nPercentage)
- {
- std::optional<sal_Int16>& rPercentage
- = rProperty.first == "pctHoriz" ? oRelativeWidth : oRelativeHeight;
- rPercentage = nPercentage;
- }
- }
- else if (rProperty.first == "sizerelh")
- {
- if (xPropertySet.is())
- {
- switch (rProperty.second.toInt32())
- {
- case 0: // margin
- nRelativeWidthRelation = text::RelOrientation::FRAME;
- break;
- case 1: // page
- nRelativeWidthRelation = text::RelOrientation::PAGE_FRAME;
- break;
- default:
- SAL_WARN("writerfilter", "RTFSdrImport::resolve: unhandled sizerelh value: "
- << rProperty.second);
- break;
- }
- }
- }
- else if (rProperty.first == "sizerelv")
- {
- if (xPropertySet.is())
- {
- switch (rProperty.second.toInt32())
- {
- case 0: // margin
- nRelativeHeightRelation = text::RelOrientation::FRAME;
- break;
- case 1: // page
- nRelativeHeightRelation = text::RelOrientation::PAGE_FRAME;
- break;
- default:
- SAL_WARN("writerfilter", "RTFSdrImport::resolve: unhandled sizerelv value: "
- << rProperty.second);
- break;
- }
- }
- }
- else if (rProperty.first == "fHorizRule") // TODO: what does "fStandardHR" do?
- {
- // horizontal rule: relative width defaults to 100% of paragraph
- // TODO: does it have a default height?
- if (!oRelativeWidth)
- {
- oRelativeWidth = 100;
- }
- nRelativeWidthRelation = text::RelOrientation::FRAME;
- if (xPropertySet.is())
- {
- sal_Int16 const nVertOrient = text::VertOrientation::CENTER;
- xPropertySet->setPropertyValue("VertOrient", uno::makeAny(nVertOrient));
- }
- }
- else if (rProperty.first == "pctHR")
- {
- // horizontal rule relative width in permille
- oRelativeWidth = rProperty.second.toInt32() / 10;
- }
- else if (rProperty.first == "dxHeightHR")
- {
- // horizontal rule height
- sal_uInt32 const nHeight(convertTwipToMm100(rProperty.second.toInt32()));
- rShape.setBottom(rShape.getTop() + nHeight);
- }
- else if (rProperty.first == "dxWidthHR")
- {
- // horizontal rule width
- sal_uInt32 const nWidth(convertTwipToMm100(rProperty.second.toInt32()));
- rShape.setRight(rShape.getLeft() + nWidth);
- }
- else if (rProperty.first == "alignHR")
- {
- // horizontal orientation *for horizontal rule*
- sal_Int16 nHoriOrient = text::HoriOrientation::NONE;
- switch (rProperty.second.toInt32())
- {
- case 0:
- nHoriOrient = text::HoriOrientation::LEFT;
- break;
- case 1:
- nHoriOrient = text::HoriOrientation::CENTER;
- break;
- case 2:
- nHoriOrient = text::HoriOrientation::RIGHT;
- break;
- }
- if (xPropertySet.is() && text::HoriOrientation::NONE != nHoriOrient)
- {
- xPropertySet->setPropertyValue("HoriOrient", uno::makeAny(nHoriOrient));
- }
- }
- else if (rProperty.first == "pWrapPolygonVertices")
- {
- RTFSprms aPolygonSprms;
- sal_Int32 nSize = 0; // Size of a token
- sal_Int32 nCount = 0; // Number of tokens
- sal_Int32 nCharIndex = 0; // Character index
- do
- {
- OUString aToken = rProperty.second.getToken(0, ';', nCharIndex);
- if (!nSize)
- nSize = aToken.toInt32();
- else if (!nCount)
- nCount = aToken.toInt32();
- else if (aToken.getLength())
- {
- // The coordinates are in an (x,y) form.
- aToken = aToken.copy(1, aToken.getLength() - 2);
- sal_Int32 nI = 0;
- sal_Int32 nX = aToken.getToken(0, ',', nI).toInt32();
- sal_Int32 nY = (nI >= 0) ? aToken.getToken(0, ',', nI).toInt32() : 0;
- RTFSprms aPathAttributes;
- aPathAttributes.set(NS_ooxml::LN_CT_Point2D_x, new RTFValue(nX));
- aPathAttributes.set(NS_ooxml::LN_CT_Point2D_y, new RTFValue(nY));
- aPolygonSprms.set(NS_ooxml::LN_CT_WrapPath_lineTo,
- new RTFValue(aPathAttributes), RTFOverwrite::NO_APPEND);
- }
- } while (nCharIndex >= 0);
- rShape.getWrapPolygonSprms() = aPolygonSprms;
- }
- else if (rProperty.first == "fRelFlipV")
- obRelFlipV = rProperty.second.toInt32() == 1;
- else if (rProperty.first == "fFlipH")
- obFlipH = rProperty.second.toInt32() == 1;
- else if (rProperty.first == "fFlipV")
- obFlipV = rProperty.second.toInt32() == 1;
- else
- SAL_INFO("writerfilter", "TODO handle shape property '" << rProperty.first << "':'"
- << rProperty.second << "'");
- }
-
- if (xPropertySet.is())
- {
- resolveLineColorAndWidth(m_bTextFrame, xPropertySet, aLineColor, aLineWidth);
- if (rShape.hasZ())
- {
- bool bOldStyle = m_aParents.size() > 1;
- resolveDhgt(xPropertySet, rShape.getZ(), bOldStyle);
- }
- if (m_bTextFrame)
- xPropertySet->setPropertyValue("WritingMode", uno::makeAny(eWritingMode));
- else
- // Only Writer textframes implement text::WritingMode2.
- xPropertySet->setPropertyValue("TextWritingMode",
- uno::makeAny(text::WritingMode(eWritingMode)));
- }
-
- if (!m_aParents.empty() && m_aParents.top().is() && !m_bTextFrame)
- m_aParents.top()->add(xShape);
-
- if (bPib)
- {
- m_rImport.resolvePict(false, xShape);
- }
-
- if (nType == ESCHER_ShpInst_PictureFrame) // picture frame
- {
- assert(!m_bTextFrame);
- if (!bPib) // ??? not sure if the early return should be removed on else?
- {
- m_xShape = xShape; // store it for later resolvePict call
- }
-
- // Handle horizontal flip.
- if (obFlipH == true && xPropertySet.is())
- xPropertySet->setPropertyValue("IsMirrored", uno::makeAny(true));
- return;
- }
-
- if (bCustom && xShape.is() && !bPib)
- {
- uno::Reference<drawing::XEnhancedCustomShapeDefaulter> xDefaulter(xShape, uno::UNO_QUERY);
- xDefaulter->createCustomShapeDefaults(OUString::number(nType));
- }
-
- // Set shape text
- if (bCustom && !aShapeText.isEmpty())
- {
- uno::Reference<text::XTextRange> xTextRange(xShape, uno::UNO_QUERY);
- if (xTextRange.is())
- xTextRange->setString(aShapeText);
-
- xPropertySet->setPropertyValue("CharFontName", uno::makeAny(aFontFamily));
- xPropertySet->setPropertyValue("CharHeight", uno::makeAny(nFontSize));
- }
-
- // Creating CustomShapeGeometry property
- if (bCustom && xPropertySet.is())
- {
- bool bChanged = false;
- comphelper::SequenceAsHashMap aCustomShapeGeometry(
- xPropertySet->getPropertyValue("CustomShapeGeometry"));
-
- if (aViewBox.X || aViewBox.Y || aViewBox.Width || aViewBox.Height)
- {
- aViewBox.Width -= aViewBox.X;
- aViewBox.Height -= aViewBox.Y;
- aCustomShapeGeometry["ViewBox"] <<= aViewBox;
- bChanged = true;
- }
-
- if (!aPath.empty())
- {
- aCustomShapeGeometry["Path"] <<= comphelper::containerToSequence(aPath);
- bChanged = true;
- }
-
- if (!aShapeText.isEmpty())
- {
- uno::Sequence<beans::PropertyValue> aSequence(comphelper::InitPropertySequence({
- { "TextPath", uno::makeAny(true) },
- }));
- aCustomShapeGeometry["TextPath"] <<= aSequence;
- xPropertySet->setPropertyValue("TextAutoGrowHeight", uno::makeAny(false));
- xPropertySet->setPropertyValue("TextAutoGrowWidth", uno::makeAny(false));
- bChanged = true;
- }
-
- if (bChanged)
- {
- xPropertySet->setPropertyValue(
- "CustomShapeGeometry",
- uno::makeAny(aCustomShapeGeometry.getAsConstPropertyValueList()));
- }
- }
-
- if (!boost::logic::indeterminate(obRelFlipV) && xPropertySet.is())
- {
- if (nType == ESCHER_ShpInst_Line)
- {
- // Line shape inside group shape: get the polygon sequence and transform it.
- uno::Sequence<uno::Sequence<awt::Point>> aPolyPolySequence;
- if ((xPropertySet->getPropertyValue("PolyPolygon") >>= aPolyPolySequence)
- && aPolyPolySequence.hasElements())
- {
- uno::Sequence<awt::Point>& rPolygon = aPolyPolySequence[0];
- basegfx::B2DPolygon aPoly;
- for (const awt::Point& rPoint : std::as_const(rPolygon))
- {
- aPoly.append(basegfx::B2DPoint(rPoint.X, rPoint.Y));
- }
- basegfx::B2DHomMatrix aTransformation;
- aTransformation.scale(1.0, obRelFlipV ? -1.0 : 1.0);
- aPoly.transform(aTransformation);
- for (sal_Int32 i = 0; i < rPolygon.getLength(); ++i)
- {
- basegfx::B2DPoint aPoint(aPoly.getB2DPoint(i));
- rPolygon[i]
- = awt::Point(static_cast<sal_Int32>(convertMm100ToTwip(aPoint.getX())),
- static_cast<sal_Int32>(convertMm100ToTwip(aPoint.getY())));
- }
- xPropertySet->setPropertyValue("PolyPolygon", uno::makeAny(aPolyPolySequence));
- }
- }
- }
-
- // Set position and size
- if (xShape.is())
- {
- sal_Int32 nLeft = rShape.getLeft();
- sal_Int32 nTop = rShape.getTop();
-
- bool bInShapeGroup = oGroupLeft && oGroupTop && oGroupRight && oGroupBottom && oRelLeft
- && oRelTop && oRelRight && oRelBottom;
- awt::Size aSize;
- if (bInShapeGroup)
- {
- // See lclGetAbsPoint() in the VML import: rShape is the group shape, oGroup is its coordinate system, oRel is the relative child shape.
- sal_Int32 nShapeWidth = rShape.getRight() - rShape.getLeft();
- sal_Int32 nShapeHeight = rShape.getBottom() - rShape.getTop();
- sal_Int32 nCoordSysWidth = *oGroupRight - *oGroupLeft;
- sal_Int32 nCoordSysHeight = *oGroupBottom - *oGroupTop;
- double fWidthRatio = static_cast<double>(nShapeWidth) / nCoordSysWidth;
- double fHeightRatio = static_cast<double>(nShapeHeight) / nCoordSysHeight;
- nLeft = static_cast<sal_Int32>(rShape.getLeft()
- + fWidthRatio * (*oRelLeft - *oGroupLeft));
- nTop = static_cast<sal_Int32>(rShape.getTop() + fHeightRatio * (*oRelTop - *oGroupTop));
-
- // See lclGetAbsRect() in the VML import.
- aSize.Width = std::lround(fWidthRatio * (*oRelRight - *oRelLeft));
- aSize.Height = std::lround(fHeightRatio * (*oRelBottom - *oRelTop));
- }
-
- if (m_bTextFrame)
- {
- xPropertySet->setPropertyValue("HoriOrientPosition", uno::makeAny(nLeft));
- xPropertySet->setPropertyValue("VertOrientPosition", uno::makeAny(nTop));
- }
- else
- xShape->setPosition(awt::Point(nLeft, nTop));
-
- if (bInShapeGroup)
- xShape->setSize(aSize);
- else
- xShape->setSize(awt::Size(rShape.getRight() - rShape.getLeft(),
- rShape.getBottom() - rShape.getTop()));
-
- if (obFlipH == true || obFlipV == true)
- {
- if (bCustom)
- {
- // This has to be set after position and size is set, otherwise flip will affect the position.
- comphelper::SequenceAsHashMap aCustomShapeGeometry(
- xPropertySet->getPropertyValue("CustomShapeGeometry"));
- if (obFlipH == true)
- aCustomShapeGeometry["MirroredX"] <<= true;
- if (obFlipV == true)
- aCustomShapeGeometry["MirroredY"] <<= true;
- xPropertySet->setPropertyValue(
- "CustomShapeGeometry",
- uno::makeAny(aCustomShapeGeometry.getAsConstPropertyValueList()));
- }
- else if (SdrObject* pObject = GetSdrObjectFromXShape(xShape))
- {
- Point aRef1 = pObject->GetSnapRect().Center();
- Point aRef2(aRef1);
- if (obFlipH == true)
- {
- // Horizontal mirror means a vertical reference line.
- aRef2.AdjustY(1);
- }
- if (obFlipV == true)
- {
- // Vertical mirror means a horizontal reference line.
- aRef2.AdjustX(1);
- }
- pObject->Mirror(aRef1, aRef2);
- }
- }
-
- if (rShape.getHoriOrientRelation() != 0)
- xPropertySet->setPropertyValue("HoriOrientRelation",
- uno::makeAny(rShape.getHoriOrientRelation()));
- if (rShape.getVertOrientRelation() != 0)
- xPropertySet->setPropertyValue("VertOrientRelation",
- uno::makeAny(rShape.getVertOrientRelation()));
- if (rShape.getWrap() != text::WrapTextMode::WrapTextMode_MAKE_FIXED_SIZE)
- xPropertySet->setPropertyValue("Surround", uno::makeAny(rShape.getWrap()));
- oox::ModelObjectHelper aModelObjectHelper(m_rImport.getModelFactory());
- if (aFillModel.moType.has())
- {
- oox::drawingml::ShapePropertyMap aPropMap(aModelObjectHelper);
- aFillModel.pushToPropMap(aPropMap, m_rImport.getGraphicHelper());
- // Sets the FillStyle and FillGradient UNO properties.
- oox::PropertySet(xShape).setProperties(aPropMap);
- }
-
- if (aShadowModel.mbHasShadow)
- {
- oox::drawingml::ShapePropertyMap aPropMap(aModelObjectHelper);
- aShadowModel.pushToPropMap(aPropMap, m_rImport.getGraphicHelper());
- // Sets the ShadowFormat UNO property.
- oox::PropertySet(xShape).setProperties(aPropMap);
- }
- xPropertySet->setPropertyValue("AnchorType",
- uno::makeAny(text::TextContentAnchorType_AT_CHARACTER));
- xPropertySet->setPropertyValue("Opaque", uno::makeAny(bOpaque));
- if (oRelativeWidth)
- {
- xPropertySet->setPropertyValue("RelativeWidth", uno::makeAny(*oRelativeWidth));
- xPropertySet->setPropertyValue("RelativeWidthRelation",
- uno::makeAny(nRelativeWidthRelation));
- }
- if (oRelativeHeight)
- {
- xPropertySet->setPropertyValue("RelativeHeight", uno::makeAny(*oRelativeHeight));
- xPropertySet->setPropertyValue("RelativeHeightRelation",
- uno::makeAny(nRelativeHeightRelation));
- }
- }
-
- if (m_rImport.isInBackground())
- {
- RTFSprms aAttributes;
- aAttributes.set(NS_ooxml::LN_CT_Background_color,
- new RTFValue(xPropertySet->getPropertyValue("FillColor").get<sal_Int32>()));
- m_rImport.Mapper().props(new RTFReferenceProperties(aAttributes));
-
- uno::Reference<lang::XComponent> xComponent(xShape, uno::UNO_QUERY);
- xComponent->dispose();
- return;
- }
-
- // Send it to dmapper
- if (xShape.is())
- {
- m_rImport.Mapper().startShape(xShape);
- if (bClose)
- {
- m_rImport.Mapper().endShape();
- }
- }
-
- // If the shape has an inner shape, the inner object's properties should not be influenced by
- // the outer one.
- rShape.getProperties().clear();
-
- m_xShape = xShape;
-}
-
-void RTFSdrImport::close() { m_rImport.Mapper().endShape(); }
-
-void RTFSdrImport::append(std::u16string_view aKey, const OUString& aValue)
-{
- applyProperty(m_xShape, aKey, aValue);
-}
-
-void RTFSdrImport::appendGroupProperty(std::u16string_view aKey, const OUString& aValue)
-{
- if (m_aParents.empty())
- return;
- uno::Reference<drawing::XShape> xShape(m_aParents.top(), uno::UNO_QUERY);
- if (xShape.is())
- applyProperty(xShape, aKey, aValue);
-}
-
-} // namespace writerfilter
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/rtftok/rtfsdrimport.hxx b/writerfilter/source/rtftok/rtfsdrimport.hxx
deleted file mode 100644
index 073244b913b1..000000000000
--- a/writerfilter/source/rtftok/rtfsdrimport.hxx
+++ /dev/null
@@ -1,106 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-
-#ifndef INCLUDED_WRITERFILTER_SOURCE_RTFTOK_RTFSDRIMPORT_HXX
-#define INCLUDED_WRITERFILTER_SOURCE_RTFTOK_RTFSDRIMPORT_HXX
-
-#include <stack>
-#include <vector>
-
-#include <dmapper/GraphicZOrderHelper.hxx>
-#include <tools/ref.hxx>
-
-namespace com::sun::star
-{
-namespace beans
-{
-class XPropertySet;
-struct PropertyValue;
-}
-namespace drawing
-{
-class XShape;
-class XShapes;
-}
-namespace lang
-{
-class XComponent;
-}
-}
-
-namespace writerfilter::rtftok
-{
-class RTFDocumentImpl;
-class RTFShape;
-
-/// Handles the import of drawings using RTF markup.
-class RTFSdrImport final : public virtual SvRefBase
-{
-public:
- RTFSdrImport(RTFDocumentImpl& rDocument,
- css::uno::Reference<css::lang::XComponent> const& xDstDoc);
- ~RTFSdrImport() override;
-
- enum ShapeOrPict
- {
- SHAPE,
- PICT
- };
- void resolve(RTFShape& rShape, bool bClose, ShapeOrPict shapeOrPict);
- void close();
- void append(std::u16string_view aKey, const OUString& aValue);
- /// Append property on the current parent.
- void appendGroupProperty(std::u16string_view aKey, const OUString& aValue);
- void resolveDhgt(css::uno::Reference<css::beans::XPropertySet> const& xPropertySet,
- sal_Int32 nZOrder, bool bOldStyle);
- /// Set line color and line width on the shape, using the relevant API depending on if the shape is a text frame or not.
- static void
- resolveLineColorAndWidth(bool bTextFrame,
- const css::uno::Reference<css::beans::XPropertySet>& xPropertySet,
- css::uno::Any const& rLineColor, css::uno::Any const& rLineWidth);
- static void resolveFLine(css::uno::Reference<css::beans::XPropertySet> const& xPropertySet,
- sal_Int32 nFLine);
- /**
- * These are the default in Word, but not in Writer.
- *
- * @param bNew if the frame is new-style or old-style.
- */
- static std::vector<css::beans::PropertyValue> getTextFrameDefaults(bool bNew);
- /// Push a new group shape to the parent stack.
- void pushParent(css::uno::Reference<css::drawing::XShapes> const& xParent);
- /// Pop the current group shape from the parent stack.
- void popParent();
- css::uno::Reference<css::drawing::XShape> const& getCurrentShape() const { return m_xShape; }
- bool isFakePict() const { return m_bFakePict; }
-
-private:
- void createShape(const OUString& rService, css::uno::Reference<css::drawing::XShape>& xShape,
- css::uno::Reference<css::beans::XPropertySet>& xPropertySet);
- void applyProperty(css::uno::Reference<css::drawing::XShape> const& xShape,
- std::u16string_view aKey, const OUString& aValue) const;
- int initShape(css::uno::Reference<css::drawing::XShape>& o_xShape,
- css::uno::Reference<css::beans::XPropertySet>& o_xPropSet, bool& o_rIsCustomShape,
- RTFShape const& rShape, bool bClose, ShapeOrPict shapeOrPict);
-
- RTFDocumentImpl& m_rImport;
- std::stack<css::uno::Reference<css::drawing::XShapes>> m_aParents;
- css::uno::Reference<css::drawing::XShape> m_xShape;
- /// If m_xShape is imported as a Writer text frame (instead of a drawinglayer rectangle).
- bool m_bTextFrame;
- /// If m_xShape is imported as a Writer text graphic object (instead of a drawinglayer shape).
- bool m_bTextGraphicObject;
- /// if inside \pict, but actually it's a shape (not a picture)
- bool m_bFakePict;
- std::stack<writerfilter::dmapper::GraphicZOrderHelper> m_aGraphicZOrderHelpers;
-};
-} // namespace writerfilter::rtftok
-
-#endif // INCLUDED_WRITERFILTER_SOURCE_RTFTOK_RTFSDRIMPORT_HXX
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/rtftok/rtfskipdestination.cxx b/writerfilter/source/rtftok/rtfskipdestination.cxx
deleted file mode 100644
index ad2122318333..000000000000
--- a/writerfilter/source/rtftok/rtfskipdestination.cxx
+++ /dev/null
@@ -1,42 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-
-#include "rtfskipdestination.hxx"
-#include <sal/log.hxx>
-#include "rtflistener.hxx"
-
-namespace writerfilter::rtftok
-{
-RTFSkipDestination::RTFSkipDestination(RTFListener& rImport)
- : m_rImport(rImport)
- , m_bParsed(true)
- , m_bReset(true)
-{
-}
-
-RTFSkipDestination::~RTFSkipDestination()
-{
- if (m_rImport.getSkipUnknown() && m_bReset)
- {
- if (!m_bParsed)
- {
- SAL_INFO("writerfilter", __func__ << ": skipping destination");
- m_rImport.setDestination(Destination::SKIP);
- }
- m_rImport.setSkipUnknown(false);
- }
-}
-
-void RTFSkipDestination::setParsed(bool bParsed) { m_bParsed = bParsed; }
-
-void RTFSkipDestination::setReset(bool bReset) { m_bReset = bReset; }
-
-} // namespace writerfilter::rtftok
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/rtftok/rtfskipdestination.hxx b/writerfilter/source/rtftok/rtfskipdestination.hxx
deleted file mode 100644
index e0188b6e069f..000000000000
--- a/writerfilter/source/rtftok/rtfskipdestination.hxx
+++ /dev/null
@@ -1,36 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-
-#ifndef INCLUDED_WRITERFILTER_SOURCE_RTFTOK_RTFSKIPDESTINATION_HXX
-#define INCLUDED_WRITERFILTER_SOURCE_RTFTOK_RTFSKIPDESTINATION_HXX
-
-namespace writerfilter::rtftok
-{
-class RTFListener;
-
-/// Skips a destination after a not parsed control word if it was prefixed with \*
-class RTFSkipDestination final
-{
-public:
- explicit RTFSkipDestination(RTFListener& rImport);
- ~RTFSkipDestination();
- void setParsed(bool bParsed);
- void setReset(bool bReset);
-
-private:
- RTFListener& m_rImport;
- bool m_bParsed;
- /// If false, the destructor is a noop, required by the \* symbol itself.
- bool m_bReset;
-};
-} // namespace writerfilter::rtftok
-
-#endif // INCLUDED_WRITERFILTER_SOURCE_RTFTOK_RTFSKIPDESTINATION_HXX
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/rtftok/rtfsprm.cxx b/writerfilter/source/rtftok/rtfsprm.cxx
deleted file mode 100644
index 8c54fe95e345..000000000000
--- a/writerfilter/source/rtftok/rtfsprm.cxx
+++ /dev/null
@@ -1,448 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-
-#include "rtfsprm.hxx"
-#include <ooxml/resourceids.hxx>
-#include <ooxml/QNameToString.hxx>
-#include <rtl/strbuf.hxx>
-#include "rtfdocumentimpl.hxx"
-#include <algorithm>
-
-namespace writerfilter::rtftok
-{
-RTFSprm::RTFSprm(Id nKeyword, RTFValue::Pointer_t& pValue)
- : m_nKeyword(nKeyword)
- , m_pValue(pValue)
-{
-}
-
-sal_uInt32 RTFSprm::getId() const { return m_nKeyword; }
-
-Value::Pointer_t RTFSprm::getValue() { return Value::Pointer_t(m_pValue->Clone()); }
-
-writerfilter::Reference<Properties>::Pointer_t RTFSprm::getProps()
-{
- return m_pValue->getProperties();
-}
-
-#ifdef DBG_UTIL
-std::string RTFSprm::getName() const { return "RTFSprm"; }
-#endif
-
-#ifdef DBG_UTIL
-std::string RTFSprm::toString() const
-{
- OStringBuffer aBuf("RTFSprm");
-
- std::string sResult = QNameToString(m_nKeyword);
-
- aBuf.append(" ('");
- if (sResult.length() == 0)
- aBuf.append(sal_Int32(m_nKeyword));
- else
- aBuf.append(sResult.c_str());
- aBuf.append("', '");
- aBuf.append(m_pValue->toString().c_str());
- aBuf.append("')");
-
- return aBuf.makeStringAndClear().getStr();
-}
-#endif
-
-namespace
-{
-class RTFSprms_compare
-{
- Id keyword;
-
-public:
- RTFSprms_compare(Id kw)
- : keyword{ kw }
- {
- }
- bool operator()(const std::pair<Id, RTFValue::Pointer_t>& raPair) const
- {
- return raPair.first == keyword;
- }
-};
-}
-
-RTFValue::Pointer_t RTFSprms::find(Id nKeyword, bool bFirst, bool bForWrite)
-{
- if (bForWrite)
- ensureCopyBeforeWrite();
-
- RTFSprms_compare cmp{ nKeyword };
-
- if (bFirst)
- {
- auto it = std::find_if(m_pSprms->begin(), m_pSprms->end(), cmp);
- if (it != m_pSprms->end())
- return it->second;
- }
- else
- // find last
- {
- auto rit = std::find_if(m_pSprms->rbegin(), m_pSprms->rend(), cmp);
- if (rit != m_pSprms->rend())
- return rit->second;
- }
-
- return RTFValue::Pointer_t{};
-}
-
-void RTFSprms::set(Id nKeyword, const RTFValue::Pointer_t& pValue, RTFOverwrite eOverwrite)
-{
- ensureCopyBeforeWrite();
-
- switch (eOverwrite)
- {
- case RTFOverwrite::YES_PREPEND:
- {
- m_pSprms->erase(
- std::remove_if(m_pSprms->begin(), m_pSprms->end(), RTFSprms_compare{ nKeyword }),
- m_pSprms->end());
- m_pSprms->emplace(m_pSprms->cbegin(), nKeyword, pValue);
- break;
- }
- case RTFOverwrite::YES:
- {
- auto it
- = std::find_if(m_pSprms->begin(), m_pSprms->end(), RTFSprms_compare{ nKeyword });
- if (it != m_pSprms->end())
- it->second = pValue;
- else
- m_pSprms->emplace_back(nKeyword, pValue);
- break;
- }
- case RTFOverwrite::NO_IGNORE:
- {
- if (std::none_of(m_pSprms->cbegin(), m_pSprms->cend(), RTFSprms_compare{ nKeyword }))
- m_pSprms->emplace_back(nKeyword, pValue);
- break;
- }
- case RTFOverwrite::NO_APPEND:
- {
- m_pSprms->emplace_back(nKeyword, pValue);
- break;
- }
- }
-}
-
-bool RTFSprms::erase(Id nKeyword)
-{
- ensureCopyBeforeWrite();
-
- auto i = std::find_if(m_pSprms->begin(), m_pSprms->end(), RTFSprms_compare{ nKeyword });
- if (i != m_pSprms->end())
- {
- m_pSprms->erase(i);
- return true;
- }
- return false;
-}
-
-void RTFSprms::eraseLast(Id nKeyword)
-{
- ensureCopyBeforeWrite();
-
- auto i = std::find_if(m_pSprms->rbegin(), m_pSprms->rend(), RTFSprms_compare{ nKeyword });
- if (i != m_pSprms->rend())
- m_pSprms->erase(std::next(i).base());
-}
-
-static RTFValue::Pointer_t getDefaultSPRM(Id const id, Id nStyleType)
-{
- if (!nStyleType || nStyleType == NS_ooxml::LN_Value_ST_StyleType_character)
- {
- switch (id)
- {
- case NS_ooxml::LN_EG_RPrBase_b:
- return new RTFValue(0);
- default:
- break;
- }
- }
-
- if (!nStyleType || nStyleType == NS_ooxml::LN_Value_ST_StyleType_paragraph)
- {
- switch (id)
- {
- case NS_ooxml::LN_CT_Spacing_before:
- case NS_ooxml::LN_CT_Spacing_after:
- case NS_ooxml::LN_CT_Ind_left:
- case NS_ooxml::LN_CT_Ind_right:
- case NS_ooxml::LN_CT_Ind_firstLine:
- return new RTFValue(0);
-
- case NS_ooxml::LN_CT_Spacing_lineRule:
- return new RTFValue(NS_ooxml::LN_Value_doc_ST_LineSpacingRule_auto);
- case NS_ooxml::LN_CT_Spacing_line:
- // presumably this means 100%, cf. static const int nSingleLineSpacing = 240;
- return new RTFValue(240);
-
- default:
- break;
- }
- }
-
- return RTFValue::Pointer_t();
-}
-
-/// Is it problematic to deduplicate this SPRM?
-static bool isSPRMDeduplicateDenylist(Id nId, RTFSprms* pDirect)
-{
- switch (nId)
- {
- // See the NS_ooxml::LN_CT_PPrBase_tabs handler in DomainMapper,
- // deduplication is explicitly not wanted for these tokens.
- case NS_ooxml::LN_CT_TabStop_val:
- case NS_ooxml::LN_CT_TabStop_leader:
- case NS_ooxml::LN_CT_TabStop_pos:
- // \htmautsp arrives after the style table, so only the non-style value is
- // correct, keep these.
- case NS_ooxml::LN_CT_Spacing_beforeAutospacing:
- case NS_ooxml::LN_CT_Spacing_afterAutospacing:
- // \chbrdr requires *all* of the border settings to be present,
- // otherwise a default (NONE) border is created from the removed
- // attributes which then overrides the style-defined border.
- // See BorderHandler.cxx and NS_ooxml::LN_EG_RPrBase_bdr in DomainMapper.
- // This also is needed for NS_ooxml::LN_CT_PBdr_top etc.
- case NS_ooxml::LN_CT_Border_sz:
- case NS_ooxml::LN_CT_Border_val:
- case NS_ooxml::LN_CT_Border_color:
- case NS_ooxml::LN_CT_Border_space:
- case NS_ooxml::LN_CT_Border_shadow:
- case NS_ooxml::LN_CT_Border_frame:
- case NS_ooxml::LN_CT_Border_themeTint:
- case NS_ooxml::LN_CT_Border_themeColor:
- return true;
- // Removing \fi and \li if the style has the same value would mean taking these values from
- // \ls, while deduplication would be done to take the values from the style.
- case NS_ooxml::LN_CT_Ind_firstLine:
- case NS_ooxml::LN_CT_Ind_left:
- return pDirect && pDirect->find(NS_ooxml::LN_CT_PPrBase_numPr);
-
- default:
- return false;
- }
-}
-
-/// Should this SPRM be removed if all its children are removed?
-static bool isSPRMChildrenExpected(Id nId)
-{
- switch (nId)
- {
- case NS_ooxml::LN_CT_PBdr_top:
- case NS_ooxml::LN_CT_PBdr_left:
- case NS_ooxml::LN_CT_PBdr_bottom:
- case NS_ooxml::LN_CT_PBdr_right:
- // Expected children are NS_ooxml::LN_CT_Border_*.
- case NS_ooxml::LN_CT_PrBase_shd:
- // Expected children are NS_ooxml::LN_CT_Shd_*.
- case NS_ooxml::LN_CT_PPrBase_ind:
- // Expected children are NS_ooxml::LN_CT_Ind_*.
- return true;
-
- default:
- return false;
- }
-}
-
-/// Does the clone / deduplication of a single sprm.
-static void cloneAndDeduplicateSprm(std::pair<Id, RTFValue::Pointer_t> const& rSprm, RTFSprms& ret,
- Id nStyleType, RTFSprms* pDirect = nullptr)
-{
- RTFValue::Pointer_t const pValue(ret.find(rSprm.first));
- if (pValue)
- {
- if (rSprm.second->equals(*pValue))
- {
- if (!isSPRMDeduplicateDenylist(rSprm.first, pDirect))
- {
- ret.erase(rSprm.first); // duplicate to style
- }
- }
- else if (!rSprm.second->getSprms().empty() || !rSprm.second->getAttributes().empty())
- {
- RTFSprms const sprms(pValue->getSprms().cloneAndDeduplicate(
- rSprm.second->getSprms(), nStyleType, /*bImplicitPPr =*/false, pDirect));
- RTFSprms const attributes(pValue->getAttributes().cloneAndDeduplicate(
- rSprm.second->getAttributes(), nStyleType, /*bImplicitPPr =*/false, pDirect));
- // Don't copy the sprm in case we expect it to have children but it doesn't have some.
- if (!isSPRMChildrenExpected(rSprm.first) || !sprms.empty() || !attributes.empty())
- ret.set(rSprm.first,
- RTFValue::Pointer_t(pValue->CloneWithSprms(attributes, sprms)));
- }
- }
- else
- {
- // not found - try to override style with default
- RTFValue::Pointer_t const pDefault(getDefaultSPRM(rSprm.first, nStyleType));
- if (pDefault)
- {
- ret.set(rSprm.first, pDefault);
- }
- else if (!rSprm.second->getSprms().empty() || !rSprm.second->getAttributes().empty())
- {
- RTFSprms const sprms(
- RTFSprms().cloneAndDeduplicate(rSprm.second->getSprms(), nStyleType));
- RTFSprms const attributes(
- RTFSprms().cloneAndDeduplicate(rSprm.second->getAttributes(), nStyleType));
- if (!sprms.empty() || !attributes.empty())
- {
- ret.set(rSprm.first, new RTFValue(attributes, sprms));
- }
- }
- }
-}
-
-/// Extracts the list level matching nLevel from pAbstract.
-static RTFValue::Pointer_t getListLevel(const RTFValue::Pointer_t& pAbstract, int nLevel)
-{
- for (const auto& rPair : pAbstract->getSprms())
- {
- if (rPair.first != NS_ooxml::LN_CT_AbstractNum_lvl)
- continue;
-
- RTFValue::Pointer_t pLevel = rPair.second->getAttributes().find(NS_ooxml::LN_CT_Lvl_ilvl);
- if (!pLevel)
- continue;
-
- if (pLevel->getInt() != nLevel)
- continue;
-
- return rPair.second;
- }
-
- return RTFValue::Pointer_t();
-}
-
-void RTFSprms::deduplicateList(const std::map<int, int>& rInvalidListLevelFirstIndents)
-{
- int nLevel = 0;
- RTFValue::Pointer_t pLevelId
- = getNestedSprm(*this, NS_ooxml::LN_CT_PPrBase_numPr, NS_ooxml::LN_CT_NumPr_ilvl);
- if (pLevelId)
- nLevel = pLevelId->getInt();
-
- auto it = rInvalidListLevelFirstIndents.find(nLevel);
- if (it == rInvalidListLevelFirstIndents.end())
- return;
-
- int nListValue = it->second;
-
- RTFValue::Pointer_t pParagraphValue
- = getNestedAttribute(*this, NS_ooxml::LN_CT_PPrBase_ind, NS_ooxml::LN_CT_Ind_firstLine);
- if (!pParagraphValue)
- return;
-
- int nParagraphValue = pParagraphValue->getInt();
-
- if (nParagraphValue == nListValue)
- eraseNestedAttribute(*this, NS_ooxml::LN_CT_PPrBase_ind, NS_ooxml::LN_CT_Ind_firstLine);
-}
-
-void RTFSprms::duplicateList(const RTFValue::Pointer_t& pAbstract)
-{
- int nLevel = 0;
- RTFValue::Pointer_t pLevelId
- = getNestedSprm(*this, NS_ooxml::LN_CT_PPrBase_numPr, NS_ooxml::LN_CT_NumPr_ilvl);
- if (pLevelId)
- nLevel = pLevelId->getInt();
-
- RTFValue::Pointer_t pLevel = getListLevel(pAbstract, nLevel);
- if (!pLevel)
- return;
-
- RTFValue::Pointer_t pLevelInd = pLevel->getSprms().find(NS_ooxml::LN_CT_PPrBase_ind);
- if (!pLevelInd)
- return;
-
- for (const auto& rListLevelPair : pLevelInd->getAttributes())
- {
- switch (rListLevelPair.first)
- {
- case NS_ooxml::LN_CT_Ind_left:
- case NS_ooxml::LN_CT_Ind_right:
- case NS_ooxml::LN_CT_Ind_firstLine:
- RTFValue::Pointer_t pParagraphValue
- = getNestedAttribute(*this, NS_ooxml::LN_CT_PPrBase_ind, rListLevelPair.first);
- if (!pParagraphValue)
- putNestedAttribute(*this, NS_ooxml::LN_CT_PPrBase_ind, rListLevelPair.first,
- getDefaultSPRM(rListLevelPair.first, 0));
-
- break;
- }
- }
-}
-
-RTFSprms RTFSprms::cloneAndDeduplicate(RTFSprms& rReference, Id const nStyleType,
- bool const bImplicitPPr, RTFSprms* pDirect) const
-{
- RTFSprms ret(*this);
- ret.ensureCopyBeforeWrite();
-
- // Note: apparently some attributes are set with OVERWRITE_NO_APPEND;
- // it is probably a bad idea to mess with those in any way here?
- for (auto& rSprm : rReference)
- {
- // Paragraph formatting sprms are directly contained in case of
- // paragraphs, but they are below NS_ooxml::LN_CT_Style_pPr in case of
- // styles. So handle those children directly, to avoid unexpected
- // addition of direct formatting sprms at the paragraph level.
- if (bImplicitPPr && rSprm.first == NS_ooxml::LN_CT_Style_pPr)
- {
- for (const auto& i : rSprm.second->getSprms())
- cloneAndDeduplicateSprm(i, ret, nStyleType, pDirect);
- }
- else
- cloneAndDeduplicateSprm(rSprm, ret, nStyleType, pDirect);
- }
- return ret;
-}
-
-bool RTFSprms::equals(const RTFValue& rOther) const
-{
- return std::all_of(m_pSprms->cbegin(), m_pSprms->cend(),
- [&](const std::pair<Id, RTFValue::Pointer_t>& raPair) -> bool {
- return raPair.second->equals(rOther);
- });
-}
-
-void RTFSprms::ensureCopyBeforeWrite()
-{
- if (m_pSprms->GetRefCount() > 1)
- {
- tools::SvRef<RTFSprmsImpl> pClone(new RTFSprmsImpl);
- for (auto& rSprm : *m_pSprms)
- pClone->push_back(
- std::make_pair(rSprm.first, RTFValue::Pointer_t(rSprm.second->Clone())));
- m_pSprms = pClone;
- }
-}
-
-RTFSprms::RTFSprms()
- : m_pSprms(new RTFSprmsImpl)
-{
-}
-
-RTFSprms::~RTFSprms() = default;
-
-void RTFSprms::clear()
-{
- if (m_pSprms->GetRefCount() == 1)
- return m_pSprms->clear();
-
- m_pSprms = tools::SvRef<RTFSprmsImpl>(new RTFSprmsImpl);
-}
-
-} // namespace writerfilter::rtftok
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/rtftok/rtfsprm.hxx b/writerfilter/source/rtftok/rtfsprm.hxx
deleted file mode 100644
index a84e57642c0f..000000000000
--- a/writerfilter/source/rtftok/rtfsprm.hxx
+++ /dev/null
@@ -1,104 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-
-#ifndef INCLUDED_WRITERFILTER_SOURCE_RTFTOK_RTFSPRM_HXX
-#define INCLUDED_WRITERFILTER_SOURCE_RTFTOK_RTFSPRM_HXX
-
-#include <string>
-#include <utility>
-#include <vector>
-#include <map>
-
-#include <tools/ref.hxx>
-#include "rtfvalue.hxx"
-
-namespace writerfilter::rtftok
-{
-using RTFSprmsImplBase = std::vector<std::pair<Id, RTFValue::Pointer_t>>;
-
-/// The payload of RTFSprms which is only copied on write.
-class RTFSprmsImpl : public RTFSprmsImplBase, public virtual SvRefBase
-{
-};
-
-enum class RTFOverwrite
-{
- YES, ///< Yes, if an existing key is found, overwrite it.
- NO_APPEND, ///< No, always append the value to the end of the list.
- NO_IGNORE, ///< No, if the key is already in the list, then ignore, otherwise append.
- YES_PREPEND ///< Yes, always prepend the value to the start of the list and remove existing entries.
-};
-
-/// A list of RTFSprm with a copy constructor that performs a deep copy.
-class RTFSprms : public virtual SvRefBase
-{
-public:
- using Pointer_t = tools::SvRef<RTFSprms>;
- using Entry_t = std::pair<Id, RTFValue::Pointer_t>;
- using Iterator_t = std::vector<Entry_t>::iterator;
- using ReverseIterator_t = std::vector<Entry_t>::reverse_iterator;
- RTFSprms();
- ~RTFSprms() override;
-
- RTFSprms(RTFSprms const&) = default;
- RTFSprms(RTFSprms&&) = default;
- RTFSprms& operator=(RTFSprms const&) = default;
- RTFSprms& operator=(RTFSprms&&) = default;
-
- RTFValue::Pointer_t find(Id nKeyword, bool bFirst = true, bool bForWrite = false);
- /// Does the same as ->push_back(), except that it can overwrite or ignore existing entries.
- void set(Id nKeyword, const RTFValue::Pointer_t& pValue,
- RTFOverwrite eOverwrite = RTFOverwrite::YES);
- bool erase(Id nKeyword);
- void eraseLast(Id nKeyword);
- /// Removes elements which are already in the reference set.
- /// Also insert default values to override attributes of style
- /// (yes, really; that's what Word does).
- /// @param bImplicitPPr implicit dereference of top-level pPr SPRM
- /// @param pDirect pointer to the root of the direct formatting SPRM tree, if any
- RTFSprms cloneAndDeduplicate(RTFSprms& rReference, Id nStyleType, bool bImplicitPPr = false,
- RTFSprms* pDirect = nullptr) const;
- /// Inserts default values to override attributes of pAbstract.
- void duplicateList(const RTFValue::Pointer_t& pAbstract);
- /// Removes duplicated values based on in-list properties.
- void deduplicateList(const std::map<int, int>& rInvalidListLevelFirstIndents);
- std::size_t size() const { return m_pSprms->size(); }
- bool empty() const { return m_pSprms->empty(); }
- Entry_t& back() { return m_pSprms->back(); }
- Iterator_t begin() { return m_pSprms->begin(); }
- Iterator_t end() { return m_pSprms->end(); }
- void clear();
- bool equals(const RTFValue& rOther) const;
-
-private:
- void ensureCopyBeforeWrite();
- tools::SvRef<RTFSprmsImpl> m_pSprms;
-};
-
-/// RTF keyword with a parameter
-class RTFSprm : public Sprm
-{
-public:
- RTFSprm(Id nKeyword, RTFValue::Pointer_t& pValue);
- sal_uInt32 getId() const override;
- Value::Pointer_t getValue() override;
- writerfilter::Reference<Properties>::Pointer_t getProps() override;
-#ifdef DBG_UTIL
- std::string getName() const override;
- std::string toString() const override;
-#endif
-private:
- Id m_nKeyword;
- RTFValue::Pointer_t& m_pValue;
-};
-} // namespace writerfilter::rtftok
-
-#endif // INCLUDED_WRITERFILTER_SOURCE_RTFTOK_RTFSPRM_HXX
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/rtftok/rtftokenizer.cxx b/writerfilter/source/rtftok/rtftokenizer.cxx
deleted file mode 100644
index bfd29c38f118..000000000000
--- a/writerfilter/source/rtftok/rtftokenizer.cxx
+++ /dev/null
@@ -1,330 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-
-#include "rtftokenizer.hxx"
-#include <tools/stream.hxx>
-#include <svx/dialmgr.hxx>
-#include <svx/strings.hrc>
-#include <rtl/strbuf.hxx>
-#include <rtl/ustrbuf.hxx>
-#include <rtl/character.hxx>
-#include <sal/log.hxx>
-#include "rtfskipdestination.hxx"
-#include <com/sun/star/io/BufferSizeExceededException.hpp>
-#include <com/sun/star/task/XStatusIndicator.hpp>
-#include <filter/msfilter/rtfutil.hxx>
-
-using namespace com::sun::star;
-
-namespace writerfilter::rtftok
-{
-std::unordered_map<OString, RTFSymbol> RTFTokenizer::s_aRTFControlWords;
-bool RTFTokenizer::s_bControlWordsInitialised;
-std::vector<RTFMathSymbol> RTFTokenizer::s_aRTFMathControlWords;
-bool RTFTokenizer::s_bMathControlWordsSorted;
-
-RTFTokenizer::RTFTokenizer(RTFListener& rImport, SvStream* pInStream,
- uno::Reference<task::XStatusIndicator> const& xStatusIndicator)
- : m_rImport(rImport)
- , m_pInStream(pInStream)
- , m_xStatusIndicator(xStatusIndicator)
- , m_nGroup(0)
- , m_nLineNumber(0)
- , m_nLineStartPos(0)
- , m_nGroupStart(0)
-{
- if (!RTFTokenizer::s_bControlWordsInitialised)
- {
- RTFTokenizer::s_bControlWordsInitialised = true;
- for (int i = 0; i < nRTFControlWords; ++i)
- s_aRTFControlWords.emplace(OString(aRTFControlWords[i].GetKeyword()),
- aRTFControlWords[i]);
- }
- if (!RTFTokenizer::s_bMathControlWordsSorted)
- {
- RTFTokenizer::s_bMathControlWordsSorted = true;
- s_aRTFMathControlWords = std::vector<RTFMathSymbol>(
- aRTFMathControlWords, aRTFMathControlWords + nRTFMathControlWords);
- std::sort(s_aRTFMathControlWords.begin(), s_aRTFMathControlWords.end());
- }
-}
-
-RTFTokenizer::~RTFTokenizer() = default;
-
-RTFError RTFTokenizer::resolveParse()
-{
- SAL_INFO("writerfilter.rtf", __func__);
- char ch;
- RTFError ret;
- // for hex chars
- int b = 0;
- int count = 2;
- std::size_t nPercentSize = 0;
- sal_uInt64 nLastPos = 0;
-
- if (m_xStatusIndicator.is())
- {
- OUString sDocLoad(SvxResId(RID_SVXSTR_DOC_LOAD));
-
- sal_uInt64 const nCurrentPos = Strm().Tell();
- sal_uInt64 const nEndPos = nCurrentPos + Strm().remainingSize();
- m_xStatusIndicator->start(sDocLoad, nEndPos);
- nPercentSize = nEndPos / 100;
-
- nLastPos = nCurrentPos;
- m_xStatusIndicator->setValue(nLastPos);
- }
-
- while (Strm().ReadChar(ch), !Strm().eof())
- {
- //SAL_INFO("writerfilter", __func__ << ": parsing character '" << ch << "'");
-
- sal_uInt64 const nCurrentPos = Strm().Tell();
- if (m_xStatusIndicator.is() && nCurrentPos > (nLastPos + nPercentSize))
- {
- nLastPos = nCurrentPos;
- m_xStatusIndicator->setValue(nLastPos);
- }
-
- if (m_nGroup < 0)
- return RTFError::GROUP_UNDER;
- if (m_nGroup > 0 && m_rImport.getInternalState() == RTFInternalState::BIN)
- {
- ret = m_rImport.resolveChars(ch);
- if (ret != RTFError::OK)
- return ret;
- }
- else
- {
- switch (ch)
- {
- case '{':
- m_nGroupStart = Strm().Tell() - 1;
- ret = m_rImport.pushState();
- if (ret != RTFError::OK)
- return ret;
- break;
- case '}':
- ret = m_rImport.popState();
- if (ret != RTFError::OK)
- return ret;
- if (m_nGroup == 0)
- {
- if (m_rImport.isSubstream())
- m_rImport.finishSubstream();
- return RTFError::OK;
- }
- break;
- case '\\':
- ret = resolveKeyword();
- if (ret != RTFError::OK)
- return ret;
- break;
- case 0x0d:
- break; // ignore this
- case 0x0a:
- m_nLineNumber++;
- m_nLineStartPos = nCurrentPos;
- break;
- default:
- if (m_nGroup == 0)
- return RTFError::CHAR_OVER;
- if (m_rImport.getInternalState() == RTFInternalState::NORMAL)
- {
- ret = m_rImport.resolveChars(ch);
- if (ret != RTFError::OK)
- return ret;
- }
- else
- {
- SAL_INFO("writerfilter.rtf", __func__ << ": hex internal state");
- b = b << 4;
- sal_Int8 parsed = msfilter::rtfutil::AsHex(ch);
- if (parsed == -1)
- return RTFError::HEX_INVALID;
- b += parsed;
- count--;
- if (!count)
- {
- ret = m_rImport.resolveChars(b);
- if (ret != RTFError::OK)
- return ret;
- count = 2;
- b = 0;
- m_rImport.setInternalState(RTFInternalState::NORMAL);
- }
- }
- break;
- }
- }
- }
-
- if (m_nGroup < 0)
- return RTFError::GROUP_UNDER;
- if (m_nGroup > 0)
- return RTFError::GROUP_OVER;
- return RTFError::OK;
-}
-
-void RTFTokenizer::pushGroup() { m_nGroup++; }
-
-void RTFTokenizer::popGroup() { m_nGroup--; }
-
-RTFError RTFTokenizer::resolveKeyword()
-{
- char ch;
- OStringBuffer aBuf(32);
- bool bNeg = false;
- bool bParam = false;
- int nParam = 0;
-
- Strm().ReadChar(ch);
- if (Strm().eof())
- return RTFError::UNEXPECTED_EOF;
-
- if (!rtl::isAsciiAlpha(static_cast<unsigned char>(ch)))
- {
- aBuf.append(ch);
- OString aKeyword = aBuf.makeStringAndClear();
- // control symbols aren't followed by a space, so we can return here
- // without doing any SeekRel()
- return dispatchKeyword(aKeyword, bParam, nParam);
- }
- while (rtl::isAsciiAlpha(static_cast<unsigned char>(ch)))
- {
- aBuf.append(ch);
- if (aBuf.getLength() > 32)
- // See RTF spec v1.9.1, page 7
- // A control word's name cannot be longer than 32 letters.
- throw io::BufferSizeExceededException();
- Strm().ReadChar(ch);
- if (Strm().eof())
- {
- ch = ' ';
- break;
- }
- }
-
- if (ch == '-')
- {
- // in case we'll have a parameter, that will be negative
- bNeg = true;
- Strm().ReadChar(ch);
- if (Strm().eof())
- return RTFError::UNEXPECTED_EOF;
- }
- if (rtl::isAsciiDigit(static_cast<unsigned char>(ch)))
- {
- OStringBuffer aParameter;
-
- // we have a parameter
- bParam = true;
- while (rtl::isAsciiDigit(static_cast<unsigned char>(ch)))
- {
- aParameter.append(ch);
- Strm().ReadChar(ch);
- if (Strm().eof())
- {
- ch = ' ';
- break;
- }
- }
- nParam = aParameter.makeStringAndClear().toInt32();
- if (bNeg)
- nParam = -nParam;
- }
- if (ch != ' ')
- Strm().SeekRel(-1);
- OString aKeyword = aBuf.makeStringAndClear();
- return dispatchKeyword(aKeyword, bParam, nParam);
-}
-
-bool RTFTokenizer::lookupMathKeyword(RTFMathSymbol& rSymbol)
-{
- auto low
- = std::lower_bound(s_aRTFMathControlWords.begin(), s_aRTFMathControlWords.end(), rSymbol);
- if (low == s_aRTFMathControlWords.end() || rSymbol < *low)
- return false;
- rSymbol = *low;
- return true;
-}
-
-RTFError RTFTokenizer::dispatchKeyword(OString const& rKeyword, bool bParam, int nParam)
-{
- if (m_rImport.getDestination() == Destination::SKIP)
- {
- // skip binary data explicitly, to not trip over rtf markup
- // control characters
- if (rKeyword == "bin" && nParam > 0)
- Strm().SeekRel(nParam);
- return RTFError::OK;
- }
- SAL_INFO("writerfilter.rtf", __func__ << ": keyword '\\" << rKeyword << "' with param? "
- << (bParam ? 1 : 0) << " param val: '"
- << (bParam ? nParam : 0) << "'");
- auto findIt = s_aRTFControlWords.find(rKeyword);
- if (findIt == s_aRTFControlWords.end())
- {
- SAL_INFO("writerfilter.rtf", __func__ << ": unknown keyword '\\" << rKeyword << "'");
- RTFSkipDestination aSkip(m_rImport);
- aSkip.setParsed(false);
- return RTFError::OK;
- }
-
- RTFError ret;
- RTFSymbol const& rSymbol = findIt->second;
- switch (rSymbol.GetControlType())
- {
- case CONTROL_FLAG:
- // flags ignore any parameter by definition
- ret = m_rImport.dispatchFlag(rSymbol.GetIndex());
- if (ret != RTFError::OK)
- return ret;
- break;
- case CONTROL_DESTINATION:
- // same for destinations
- ret = m_rImport.dispatchDestination(rSymbol.GetIndex());
- if (ret != RTFError::OK)
- return ret;
- break;
- case CONTROL_SYMBOL:
- // and symbols
- ret = m_rImport.dispatchSymbol(rSymbol.GetIndex());
- if (ret != RTFError::OK)
- return ret;
- break;
- case CONTROL_TOGGLE:
- ret = m_rImport.dispatchToggle(rSymbol.GetIndex(), bParam, nParam);
- if (ret != RTFError::OK)
- return ret;
- break;
- case CONTROL_VALUE:
- if (!bParam)
- nParam = rSymbol.GetDefValue();
- ret = m_rImport.dispatchValue(rSymbol.GetIndex(), nParam);
- if (ret != RTFError::OK)
- return ret;
- break;
- }
-
- return RTFError::OK;
-}
-
-OUString RTFTokenizer::getPosition()
-{
- OUStringBuffer aRet;
- aRet.append(m_nLineNumber + 1);
- aRet.append(",");
- aRet.append(sal_Int32(Strm().Tell() - m_nLineStartPos + 1));
- return aRet.makeStringAndClear();
-}
-
-} // namespace writerfilter::rtftok
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/rtftok/rtftokenizer.hxx b/writerfilter/source/rtftok/rtftokenizer.hxx
deleted file mode 100644
index 319c39d04679..000000000000
--- a/writerfilter/source/rtftok/rtftokenizer.hxx
+++ /dev/null
@@ -1,75 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-
-#ifndef INCLUDED_WRITERFILTER_SOURCE_RTFTOK_RTFTOKENIZER_HXX
-#define INCLUDED_WRITERFILTER_SOURCE_RTFTOK_RTFTOKENIZER_HXX
-
-#include "rtflistener.hxx"
-
-#include <vector>
-#include <unordered_map>
-
-#include <com/sun/star/uno/Reference.h>
-
-#include <rtl/ustring.hxx>
-#include <tools/ref.hxx>
-
-namespace com::sun::star::task
-{
-class XStatusIndicator;
-}
-class SvStream;
-
-namespace writerfilter::rtftok
-{
-/// RTF tokenizer that separates control words from text.
-class RTFTokenizer final : public virtual SvRefBase
-{
-public:
- RTFTokenizer(RTFListener& rImport, SvStream* pInStream,
- css::uno::Reference<css::task::XStatusIndicator> const& xStatusIndicator);
- ~RTFTokenizer() override;
-
- RTFError resolveParse();
- /// Number of states on the stack.
- int getGroup() const { return m_nGroup; }
- /// To be invoked by the pushState() callback to signal when the importer enters a group.
- void pushGroup();
- /// To be invoked by the popState() callback to signal when the importer leaves a group.
- void popGroup();
- OUString getPosition();
- std::size_t getGroupStart() const { return m_nGroupStart; }
- /// To look up additional properties of a math symbol.
- static bool lookupMathKeyword(RTFMathSymbol& rSymbol);
-
-private:
- SvStream& Strm() { return *m_pInStream; }
- RTFError resolveKeyword();
- RTFError dispatchKeyword(OString const& rKeyword, bool bParam, int nParam);
-
- RTFListener& m_rImport;
- SvStream* m_pInStream;
- css::uno::Reference<css::task::XStatusIndicator> const& m_xStatusIndicator;
- // This is the same as aRTFControlWords, but mapped by token name for fast lookup
- static std::unordered_map<OString, RTFSymbol> s_aRTFControlWords;
- static bool s_bControlWordsInitialised;
- // This is the same as aRTFMathControlWords, but sorted
- static std::vector<RTFMathSymbol> s_aRTFMathControlWords;
- static bool s_bMathControlWordsSorted;
- /// Same as the size of the importer's states, except that this can be negative for invalid input.
- int m_nGroup;
- sal_Int32 m_nLineNumber;
- std::size_t m_nLineStartPos;
- std::size_t m_nGroupStart;
-};
-} // namespace writerfilter::rtftok
-
-#endif // INCLUDED_WRITERFILTER_SOURCE_RTFTOK_RTFTOKENIZER_HXX
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/rtftok/rtfvalue.cxx b/writerfilter/source/rtftok/rtfvalue.cxx
deleted file mode 100644
index e4b3a5a11c68..000000000000
--- a/writerfilter/source/rtftok/rtfvalue.cxx
+++ /dev/null
@@ -1,210 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-
-#include "rtfreferenceproperties.hxx"
-#include "rtfdocumentimpl.hxx"
-#include <com/sun/star/embed/XEmbeddedObject.hpp>
-
-using namespace com::sun::star;
-
-namespace writerfilter::rtftok
-{
-RTFValue::RTFValue(int nValue, OUString sValue, const RTFSprms& rAttributes, const RTFSprms& rSprms,
- uno::Reference<drawing::XShape> xShape, uno::Reference<io::XInputStream> xStream,
- uno::Reference<embed::XEmbeddedObject> xObject, bool bForceString,
- const RTFShape& aShape, const RTFPicture& rPicture)
- : m_nValue(nValue)
- , m_sValue(std::move(sValue))
- , m_pAttributes(new RTFSprms(rAttributes))
- , m_pSprms(new RTFSprms(rSprms))
- , m_xShape(std::move(xShape))
- , m_xStream(std::move(xStream))
- , m_xObject(std::move(xObject))
- , m_bForceString(bForceString)
- , m_pShape(new RTFShape(aShape))
- , m_pPicture(new RTFPicture(rPicture))
-{
-}
-
-RTFValue::RTFValue()
- : m_pAttributes(new RTFSprms())
- , m_pSprms(new RTFSprms())
- , m_pShape(new RTFShape())
- , m_pPicture(new RTFPicture)
-{
-}
-
-RTFValue::RTFValue(int nValue)
- : m_nValue(nValue)
- , m_pAttributes(new RTFSprms())
- , m_pSprms(new RTFSprms())
- , m_pShape(new RTFShape())
- , m_pPicture(new RTFPicture)
-{
-}
-
-RTFValue::RTFValue(OUString sValue, bool bForce)
- : m_sValue(std::move(sValue))
- , m_pAttributes(new RTFSprms())
- , m_pSprms(new RTFSprms())
- , m_bForceString(bForce)
- , m_pShape(new RTFShape())
- , m_pPicture(new RTFPicture)
-{
-}
-
-RTFValue::RTFValue(const RTFSprms& rAttributes)
- : m_pAttributes(new RTFSprms(rAttributes))
- , m_pSprms(new RTFSprms())
- , m_pShape(new RTFShape())
- , m_pPicture(new RTFPicture)
-{
-}
-
-RTFValue::RTFValue(const RTFSprms& rAttributes, const RTFSprms& rSprms)
- : m_pAttributes(new RTFSprms(rAttributes))
- , m_pSprms(new RTFSprms(rSprms))
- , m_pShape(new RTFShape())
- , m_pPicture(new RTFPicture)
-{
-}
-
-RTFValue::RTFValue(uno::Reference<drawing::XShape> xShape)
- : m_pAttributes(new RTFSprms())
- , m_pSprms(new RTFSprms())
- , m_xShape(std::move(xShape))
- , m_pShape(new RTFShape())
- , m_pPicture(new RTFPicture)
-{
-}
-
-RTFValue::RTFValue(uno::Reference<io::XInputStream> xStream)
- : m_pAttributes(new RTFSprms())
- , m_pSprms(new RTFSprms())
- , m_xStream(std::move(xStream))
- , m_pShape(new RTFShape())
- , m_pPicture(new RTFPicture)
-{
-}
-
-RTFValue::RTFValue(uno::Reference<embed::XEmbeddedObject> xObject)
- : m_pAttributes(new RTFSprms())
- , m_pSprms(new RTFSprms())
- , m_xObject(std::move(xObject))
- , m_pShape(new RTFShape())
- , m_pPicture(new RTFPicture)
-{
-}
-
-RTFValue::RTFValue(const RTFShape& aShape)
- : m_pAttributes(new RTFSprms())
- , m_pSprms(new RTFSprms())
- , m_pShape(new RTFShape(aShape))
- , m_pPicture(new RTFPicture)
-{
-}
-
-RTFValue::RTFValue(const RTFPicture& rPicture)
- : m_pAttributes(new RTFSprms())
- , m_pSprms(new RTFSprms())
- , m_pShape(new RTFShape())
- , m_pPicture(new RTFPicture(rPicture))
-{
-}
-
-RTFValue::~RTFValue() = default;
-
-int RTFValue::getInt() const { return m_nValue; }
-
-OUString RTFValue::getString() const
-{
- if (!m_sValue.isEmpty() || m_bForceString)
- return m_sValue;
-
- return OUString::number(m_nValue);
-}
-
-void RTFValue::setString(const OUString& sValue) { m_sValue = sValue; }
-
-uno::Any RTFValue::getAny() const
-{
- uno::Any ret;
- if (!m_sValue.isEmpty() || m_bForceString)
- ret <<= m_sValue;
- else if (m_xShape.is())
- ret <<= m_xShape;
- else if (m_xStream.is())
- ret <<= m_xStream;
- else if (m_xObject.is())
- ret <<= m_xObject;
- else
- ret <<= static_cast<sal_Int32>(m_nValue);
- return ret;
-}
-
-RTFShape& RTFValue::getShape() const { return *m_pShape; }
-
-RTFPicture& RTFValue::getPicture() const { return *m_pPicture; }
-
-writerfilter::Reference<Properties>::Pointer_t RTFValue::getProperties()
-{
- return new RTFReferenceProperties(*m_pAttributes, *m_pSprms);
-}
-
-writerfilter::Reference<BinaryObj>::Pointer_t RTFValue::getBinary()
-{
- return writerfilter::Reference<BinaryObj>::Pointer_t();
-}
-
-#ifdef DBG_UTIL
-std::string RTFValue::toString() const
-{
- if (!m_sValue.isEmpty() || m_bForceString)
- return OUStringToOString(m_sValue, RTL_TEXTENCODING_UTF8).getStr();
-
- return OString::number(m_nValue).getStr();
-}
-#endif
-
-RTFValue* RTFValue::Clone()
-{
- return new RTFValue(m_nValue, m_sValue, *m_pAttributes, *m_pSprms, m_xShape, m_xStream,
- m_xObject, m_bForceString, *m_pShape, *m_pPicture);
-}
-
-RTFValue* RTFValue::CloneWithSprms(RTFSprms const& rAttributes, RTFSprms const& rSprms)
-{
- return new RTFValue(m_nValue, m_sValue, rAttributes, rSprms, m_xShape, m_xStream, m_xObject,
- m_bForceString, *m_pShape, *m_pPicture);
-}
-
-bool RTFValue::equals(const RTFValue& rOther) const
-{
- if (m_nValue != rOther.m_nValue)
- return false;
- if (m_sValue != rOther.m_sValue)
- return false;
- if (m_pAttributes->size() != rOther.m_pAttributes->size())
- return false;
- if (!m_pAttributes->equals(rOther))
- return false;
- if (m_pSprms->size() != rOther.m_pSprms->size())
- return false;
- if (!m_pSprms->equals(rOther))
- return false;
- return true;
-}
-
-RTFSprms& RTFValue::getAttributes() { return *m_pAttributes; }
-
-RTFSprms& RTFValue::getSprms() { return *m_pSprms; }
-
-} // namespace writerfilter::rtftok
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/rtftok/rtfvalue.hxx b/writerfilter/source/rtftok/rtfvalue.hxx
deleted file mode 100644
index 736c7d0470d1..000000000000
--- a/writerfilter/source/rtftok/rtfvalue.hxx
+++ /dev/null
@@ -1,87 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-
-#ifndef INCLUDED_WRITERFILTER_SOURCE_RTFTOK_RTFVALUE_HXX
-#define INCLUDED_WRITERFILTER_SOURCE_RTFTOK_RTFVALUE_HXX
-
-#include <dmapper/resourcemodel.hxx>
-
-namespace com::sun::star
-{
-namespace embed
-{
-class XEmbeddedObject;
-}
-namespace io
-{
-class XInputStream;
-}
-}
-
-namespace writerfilter::rtftok
-{
-class RTFSprms;
-class RTFShape;
-class RTFPicture;
-/// Value of an RTF keyword
-class RTFValue : public Value
-{
-public:
- using Pointer_t = tools::SvRef<RTFValue>;
- RTFValue(int nValue, OUString sValue, const RTFSprms& rAttributes, const RTFSprms& rSprms,
- css::uno::Reference<css::drawing::XShape> xShape,
- css::uno::Reference<css::io::XInputStream> xStream,
- css::uno::Reference<css::embed::XEmbeddedObject> xObject, bool bForceString,
- const RTFShape& aShape, const RTFPicture& rPicture);
- RTFValue();
- explicit RTFValue(int nValue);
- RTFValue(OUString sValue, bool bForce = false);
- explicit RTFValue(const RTFSprms& rAttributes);
- RTFValue(const RTFSprms& rAttributes, const RTFSprms& rSprms);
- explicit RTFValue(css::uno::Reference<css::drawing::XShape> xShape);
- explicit RTFValue(css::uno::Reference<css::io::XInputStream> xStream);
- explicit RTFValue(css::uno::Reference<css::embed::XEmbeddedObject> xObject);
- explicit RTFValue(const RTFShape& aShape);
- explicit RTFValue(const RTFPicture& rPicture);
- ~RTFValue() override;
- void setString(const OUString& sValue);
- int getInt() const override;
- OUString getString() const override;
- css::uno::Any getAny() const override;
- writerfilter::Reference<Properties>::Pointer_t getProperties() override;
- writerfilter::Reference<BinaryObj>::Pointer_t getBinary() override;
-#ifdef DBG_UTIL
- std::string toString() const override;
-#endif
- RTFValue* Clone();
- RTFValue* CloneWithSprms(RTFSprms const& rAttributes, RTFSprms const& rSprms);
- RTFSprms& getAttributes();
- RTFSprms& getSprms();
- RTFShape& getShape() const;
- RTFPicture& getPicture() const;
- bool equals(const RTFValue& rOther) const;
- RTFValue& operator=(RTFValue const& rOther) = delete;
-
-private:
- int m_nValue = 0;
- OUString m_sValue;
- tools::SvRef<RTFSprms> m_pAttributes;
- tools::SvRef<RTFSprms> m_pSprms;
- css::uno::Reference<css::drawing::XShape> m_xShape;
- css::uno::Reference<css::io::XInputStream> m_xStream;
- css::uno::Reference<css::embed::XEmbeddedObject> m_xObject;
- bool m_bForceString = false;
- tools::SvRef<RTFShape> m_pShape;
- tools::SvRef<RTFPicture> m_pPicture;
-};
-} // namespace writerfilter::rtftok
-
-#endif // INCLUDED_WRITERFILTER_SOURCE_RTFTOK_RTFVALUE_HXX
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */